Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
31d1795
First commit to refine layer segmentation
scannito Oct 6, 2025
fa6ab07
Added sModuleName
scannito Oct 6, 2025
a761818
Added createModule function and adopted in createStave
scannito Oct 7, 2025
9c1a9e0
Refined segmentation with multiple modules, chips and differentiation…
scannito Oct 7, 2025
ed677e5
2 chip columns per module
scannito Oct 7, 2025
a39d966
Fixed dimensions with bottom up approach
scannito Oct 8, 2025
7f666ba
Removed unnecessary cast
scannito Oct 8, 2025
ae2a460
Removed unnecessary cast
scannito Oct 8, 2025
a3da6c4
Set new inner radii for MLs
scannito Oct 9, 2025
280f928
Set new lengths for MLs
scannito Oct 9, 2025
5efdfee
Removed mModuleWidth and fixed createLayer
scannito Oct 9, 2025
bbf7739
Preparing to remove mZ member from TRKLayer + getter in GeometryTGeo
scannito Oct 10, 2025
218590d
Removed mZ
scannito Oct 10, 2025
57698aa
Modified buildTRKNewVacuumVessel
scannito Oct 10, 2025
0130307
Merge branch 'AliceO2Group:dev' into UpdateTRKA3
scannito Oct 10, 2025
78e96a6
Dummy implementation
scannito Oct 10, 2025
98a18c5
Fix include
scannito Oct 10, 2025
59ff15d
Fix half staves for staggered
scannito Oct 10, 2025
614f9a9
Fix
scannito Oct 13, 2025
336dcef
Update indexing scheme
scannito Oct 15, 2025
67553cb
change variables named module to mod
scannito Oct 15, 2025
fc6071b
createHalfStave
scannito Oct 15, 2025
684c956
Update indexing scheme
scannito Oct 15, 2025
dac4375
Merge branch 'AliceO2Group:dev' into UpdateTRKA3
scannito Oct 15, 2025
af11dc9
Fix namespace
scannito Oct 15, 2025
e829a3f
Update ProcessHits
scannito Oct 15, 2025
a1c3a5a
Update indexing scheme - fix bug
scannito Oct 16, 2025
f38bff4
Fix
scannito Oct 16, 2025
e6ecb47
Fix ID retrieving from Detector
scannito Oct 16, 2025
ff5bfe1
Fix
scannito Oct 16, 2025
7655ce1
Merge branch 'AliceO2Group:dev' into UpdateTRKA3
scannito Oct 17, 2025
e574e15
Created configurable to set overall geometry in buildTRKNewVacuumVessel
scannito Oct 17, 2025
b312866
Fix
scannito Oct 18, 2025
9eb74fd
Merge remote-tracking branch 'upstream/dev' into UpdateTRKA3
scannito Oct 24, 2025
8f0e8f1
Merge remote-tracking branch 'upstream/dev' into UpdateTRKA3
scannito Oct 24, 2025
c24805d
Detector
scannito Oct 24, 2025
5bb1a4f
Merge branch 'AliceO2Group:dev' into UpdateTRKA3
scannito Oct 27, 2025
2fdf62c
Added trk::Hit + fixed unsigned short ID
scannito Oct 28, 2025
4737ce9
Created metal stack + chenged rotation of the two chip columns in module
scannito Oct 28, 2025
80f6e4b
Modified Specs.h and TRKLayer correspondingly
scannito Oct 28, 2025
a6896d2
Merge branch 'AliceO2Group:dev' into UpdateTRKA3
scannito Oct 28, 2025
e470025
Fix for merging from previous PR
scannito Oct 28, 2025
e5814a7
Fixed enum casting
scannito Oct 30, 2025
210829e
Fixed enum casting
scannito Oct 30, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 48 additions & 21 deletions Detectors/Upgrades/ALICE3/TRK/base/include/TRKBase/GeometryTGeo.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,13 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
static const char* getTRKPetalDiskPattern() { return sPetalDiskName.c_str(); }
static const char* getTRKPetalLayerPattern() { return sPetalLayerName.c_str(); }
static const char* getTRKStavePattern() { return sStaveName.c_str(); }
static const char* getTRKHalfStavePattern() { return sHalfStaveName.c_str(); }
static const char* getTRKModulePattern() { return sModuleName.c_str(); }
static const char* getTRKChipPattern() { return sChipName.c_str(); }
static const char* getTRKSensorPattern() { return sSensorName.c_str(); }
static const char* getTRKDeadzonePattern() { return sDeadzoneName.c_str(); }
static const char* getTRKMetalStackPattern() { return sMetalStackName.c_str(); }

static const char* getTRKWrapVolPattern() { return sWrapperVolumeName.c_str(); }

int getNumberOfChips() const { return mSize; }
Expand All @@ -63,6 +68,8 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
int extractNumberOfChipsPerPetalVD() const;
int extractNumberOfStavesMLOT(int lay) const;
int extractNumberOfHalfStavesMLOT(int lay) const;
int extractNumberOfModulesMLOT(int lay) const;
int extractNumberOfChipsMLOT(int lay) const;

/// Extract number following the prefix in the name string
int extractVolumeCopy(const char* name, const char* prefix) const;
Expand All @@ -75,44 +82,52 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
void setOwner(bool v) { mOwner = v; }

void Print(Option_t* opt = "") const;
void PrintChipID(int index, int subDetID, int petalcase, int disk, int lay, int stave, int halfstave) const;
void PrintChipID(int index, int subDetID, int petalcase, int disk, int lay, int stave, int halfstave, int mod, int chip) const;

int getLayer(int index) const;
int getStave(int index) const;
int getHalfStave(int index) const;
int getSubDetID(int index) const;
int getPetalCase(int index) const;
int getDisk(int index) const;
int getLayer(int index) const;
int getStave(int index) const;
int getHalfStave(int index) const;
int getModule(int index) const;
int getChip(int index) const;

/// This routine computes the chip index number from the subDetID, petal, disk, layer, stave /// TODO: retrieve also from chip when chips will be available
/// This routine computes the chip index number from the subDetID, petal, disk, layer, stave, half stave, module, chip
/// \param int subDetID The subdetector ID, 0 for VD, 1 for MLOT
/// \param int petalcase The petal case number for VD, from 0 to 3
/// \param int disk The disk number for VD, from 0 to 5
/// \param int lay The layer number. Starting from 0 both for VD and MLOT
/// \param int stave The stave number for MLOT. Starting from 0
/// \param int halfstave The half stave number for MLOT. Can be 0 or 1
int getChipIndex(int subDetID, int petalcase, int disk, int lay, int stave, int halfstave) const;
/// \param int module The module number for MLOT, from 0 to 10 (or 20)
/// \param int chip The chip number for MLOT, from 0 to 8
unsigned short getChipIndex(int subDetID, int petalcase, int disk, int lay, int stave, int halfstave, int mod, int chip) const;

/// This routine computes the chip index number from the subDetID, volume, layer, stave /// TODO: retrieve also from chip when chips will be available
/// This routine computes the chip index number from the subDetID, volume, layer, stave, half stave, module, chip
/// \param int subDetID The subdetector ID, 0 for VD, 1 for MLOT
/// \param int volume is needed only with the current configuration for VD where each single element is a volume. // TODO: when the geometry naming scheme will be changed, change this method
/// \param int lay The layer number for the MLOT. In the current configuration for VD this is not needed. // TODO: when the geometry naming scheme will be changed, change this method
/// \param int stave The stave number in each layer for MLOT. Starting from 0.
/// \param int halfstave The half stave number for MLOT. Can be 0 or 1
int getChipIndex(int subDetID, int volume, int lay, int stave, int halfstave) const;
/// \param int module The module number for MLOT, from 0 to 10 (or 20)
/// \param int chip The chip number for MLOT, from 0 to 8
unsigned short getChipIndex(int subDetID, int volume, int lay, int stave, int halfstave, int mod, int chip) const;

/// This routine computes subDetID, petal, disk, layer, stave given the chip index number /// TODO: copute also from chip when chips will be available
/// This routine computes subDetID, petal, disk, layer, stave, half stave, module, chip, given the chip index number
/// \param int index The chip index number, starting from 0
/// \param int subDetID The subdetector ID, 0 for VD, 1 for MLOT
/// \param int petalcase The petal case number for VD, from 0 to 3
/// \param int disk The disk number for VD, from 0 to 5
/// \param int lay The layer number. Starting from 0 both for VD and MLOT
/// \param int stave The stave number for MLOT. Starting from 0
/// \param int halfstave The half stave number for MLOT. Can be 0 or 1
bool getChipID(int index, int& subDetID, int& petalcase, int& disk, int& lay, int& stave, int& halfstave) const;
/// \param int module The module number for MLOT, from 0 to 10 (or 20)
/// \param int chip The chip number for MLOT, from 0 to 8
bool getChipID(int index, int& subDetID, int& petalcase, int& disk, int& lay, int& stave, int& halfstave, int& mod, int& chip) const;

int getLastChipIndex(int lay) const { return mLastChipIndex[lay]; }
int getFirstChipIndex(int lay, int petalcase, int subDetID) const
unsigned short getLastChipIndex(int lay) const { return mLastChipIndex[lay]; }
unsigned short getFirstChipIndex(int lay, int petalcase, int subDetID) const
{
/// Get the first chip index of the active petal (VD) or layer (MLOT)
if (subDetID == 0) { // VD
Expand All @@ -138,7 +153,8 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache

static const char* composeSymNameLayer(int d, int layer);
static const char* composeSymNameStave(int d, int layer);
static const char* composeSymNameChip(int d, int lr);
static const char* composeSymNameModule(int d, int layer);
static const char* composeSymNameChip(int d, int layer);
static const char* composeSymNameSensor(int d, int layer);

protected:
Expand All @@ -151,25 +167,36 @@ class GeometryTGeo : public o2::detectors::DetMatrixCache
static std::string sPetalDiskName;
static std::string sPetalLayerName;
static std::string sStaveName;
static std::string sHalfStaveName;
static std::string sModuleName;
static std::string sChipName;
static std::string sSensorName;
static std::string sWrapperVolumeName; ///< Wrapper volume name
static std::string sDeadzoneName;
static std::string sMetalStackName;

static std::string sWrapperVolumeName; ///< Wrapper volume name, not implemented at the moment

Int_t mNumberOfLayersMLOT; ///< number of layers
Int_t mNumberOfActivePartsVD; ///< number of layers
Int_t mNumberOfLayersVD; ///< number of layers
Int_t mNumberOfPetalsVD; ///< number of Petals = chip in each VD layer
Int_t mNumberOfDisksVD; ///< number of Disks = 6
std::vector<int> mLastChipIndex; ///< max ID of the detctor in the petal(VD) or layer(MLOT)
std::vector<int> mLastChipIndexVD; ///< max ID of the detctor in the layer for the VD
std::vector<int> mLastChipIndexMLOT; ///< max ID of the detctor in the layer for the MLOT
std::vector<int> mNumberOfStaves; ///< Number Of Staves per layer in ML/OT
std::vector<int> mNumberOfHalfStaves; ///< Number Of Half staves in each stave of the layer in ML/OT
std::vector<int> mNumberOfModules; ///< Number Of Modules per stave (half stave) in ML/OT
std::vector<int> mNumberOfChips; ///< number of chips per module in ML/OT
std::vector<int> mNumberOfChipsPerLayerVD; ///< number of chips per layer VD ( = number of petals)
std::vector<int> mNumberOfChipsPerLayerMLOT; ///< number of chips per layer MLOT ( = 1 for the moment)
std::vector<int> mNumberOfChipsPerLayerMLOT; ///< number of chips per layer MLOT
std::vector<int> mNumbersOfChipPerDiskVD; ///< numbersOfChipPerDiskVD
std::vector<int> mNumberOfChipsPerPetalVD; ///< numbersOfChipPerPetalVD
std::vector<int> mNumberOfStaves; ///< Number Of Staves per layer in ML/OT
std::vector<int> mNumberOfHalfStaves; ///< Number Of Staves in each stave of the layer in ML/OT
std::array<char, MAXLAYERS> mLayerToWrapper; ///< Layer to wrapper correspondence
// std::vector<int> mNumberOfChipsPerStave; ///< number of chips per stave in ML/OT
// std::vector<int> mNumberOfChipsPerHalfStave; ///< number of chips per half stave in ML/OT
// std::vector<int> mNumberOfChipsPerModule; ///< number of chips per module in ML/OT
std::vector<unsigned short> mLastChipIndex; ///< max ID of the detctor in the petal(VD) or layer(MLOT)
std::vector<unsigned short> mLastChipIndexVD; ///< max ID of the detctor in the layer for the VD
std::vector<unsigned short> mLastChipIndexMLOT; ///< max ID of the detctor in the layer for the MLOT

std::array<char, MAXLAYERS> mLayerToWrapper; ///< Layer to wrapper correspondence, not implemented yet

bool mOwner = true; //! is it owned by the singleton?

Expand Down
8 changes: 3 additions & 5 deletions Detectors/Upgrades/ALICE3/TRK/base/include/TRKBase/Specs.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
// Each TGeoShape has the following properties
// length: dimension in z-axis
// width: dimension in xy-axes
// color: for visulisation
// color: for visualisation
namespace o2::trk::constants
{
// Default unit of TGeo = cm
Expand Down Expand Up @@ -84,13 +84,11 @@ constexpr int nRows{static_cast<int>(width / pitchX)}; //
constexpr int nCols{static_cast<int>(length / pitchZ)}; // number of rows in the chip
constexpr double totalThickness{silicon::thickness + metalstack::thickness}; // total thickness of the chip
/// Set to 0 for the moment, to be adjusted with the actual design of the chip if needed
static constexpr float PassiveEdgeReadOut = 0.f; // width of the readout edge (Passive bottom)
static constexpr float PassiveEdgeTop = 0.f; // Passive area on top
static constexpr float PassiveEdgeSide = 0.f; // width of Passive area on left/right of the sensor
static constexpr float passiveEdgeReadOut{1.5 * mm}; // width of the readout edge
} // namespace chip
namespace gaps
{
constexpr double interChips{0.2 * mm}; // gap between the chips
constexpr double interChips{50 * mu}; // gap between the chips
constexpr double outerEdgeLongSide{1 * mm}; // gap between the chips and the outer edges (long side)
constexpr double outerEdgeShortSide{0.1 * mm}; // gap between the chips and the outer edges (short side)
} // namespace gaps
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,11 @@ namespace o2
namespace trk
{

enum eOverallGeom {
kDefaultRadii = 0, // After Upgrade Days March 2024
kModRadii,
};

enum eLayout {
kCylinder = 0,
kTurboStaves,
Expand All @@ -31,6 +36,8 @@ struct TRKBaseParam : public o2::conf::ConfigurableParamHelper<TRKBaseParam> {
float serviceTubeX0 = 0.02f; // X0 Al2O3
Bool_t irisOpen = false;

eOverallGeom overallGeom = kDefaultRadii; // Overall geometry option, to be used in Detector::buildTRKMiddleOuterLayers

eLayout layoutML = kCylinder; // Type of segmentation for the middle layers
eLayout layoutOL = kCylinder; // Type of segmentation for the outer layers

Expand Down
Loading