From 32bae57ba79a0795b8892f2c9a31960060236645 Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 16 Mar 2026 16:09:33 +0100 Subject: [PATCH 1/3] Fix cylindrical version --- .../ALICE3/TRK/base/src/GeometryTGeo.cxx | 46 +++++++++---------- .../ALICE3/TRK/simulation/src/Detector.cxx | 36 +++++++++++---- 2 files changed, 51 insertions(+), 31 deletions(-) diff --git a/Detectors/Upgrades/ALICE3/TRK/base/src/GeometryTGeo.cxx b/Detectors/Upgrades/ALICE3/TRK/base/src/GeometryTGeo.cxx index 1a81723a18f63..36d26a6344e6c 100644 --- a/Detectors/Upgrades/ALICE3/TRK/base/src/GeometryTGeo.cxx +++ b/Detectors/Upgrades/ALICE3/TRK/base/src/GeometryTGeo.cxx @@ -101,10 +101,17 @@ void GeometryTGeo::Build(int loadTrans) mLastChipIndexMLOT.resize(mNumberOfLayersMLOT); /// ML and OT are part of TRK as the same detector, without disks for (int i = 0; i < mNumberOfLayersMLOT; i++) { - mNumberOfStaves[i] = extractNumberOfStavesMLOT(i); - mNumberOfHalfStaves[i] = extractNumberOfHalfStavesMLOT(i); - mNumberOfModules[i] = extractNumberOfModulesMLOT(i); - mNumberOfChips[i] = extractNumberOfChipsMLOT(i); + if (mLayoutMLOT == eMLOTLayout::kCylindrical) { + mNumberOfStaves[i] = 1; + mNumberOfHalfStaves[i] = 1; + mNumberOfModules[i] = 1; + mNumberOfChips[i] = 1; + } else { + mNumberOfStaves[i] = extractNumberOfStavesMLOT(i); + mNumberOfHalfStaves[i] = extractNumberOfHalfStavesMLOT(i); + mNumberOfModules[i] = extractNumberOfModulesMLOT(i); + mNumberOfChips[i] = extractNumberOfChipsMLOT(i); + } } int numberOfChipsTotal = 0; @@ -398,19 +405,8 @@ TString GeometryTGeo::getMatrixPath(int index) const // PrintChipID(index, subDetID, petalcase, disk, layer, stave, halfstave, mod, chip); - // TString path = "/cave_1/barrel_1/TRKV_2/TRKLayer0_1/TRKStave0_1/TRKChip0_1/TRKSensor0_1/"; /// dummy path, to be used for tests TString path = Form("/cave_1/barrel_1/%s_2/", GeometryTGeo::getTRKVolPattern()); - // handling cylindrical configuration for ML and/or OT - // needed because of the different numbering scheme in the geometry for the cylindrical case wrt the staggered and turbo ones - if (subDetID == 1) { - if ((layer < 4 && mLayoutMLOT == eMLOTLayout::kCylindrical) || (layer > 3 && mLayoutMLOT == eMLOTLayout::kCylindrical)) { - stave = 1; - mod = 1; - chip = 1; - } - } - // build the path if (subDetID == 0) { // VD if (disk >= 0) { @@ -425,15 +421,19 @@ TString GeometryTGeo::getMatrixPath(int index) const path += Form("%s%d_%s%d_%s%d_1/", getTRKPetalPattern(), petalcase, getTRKPetalLayerPattern(), layer, getTRKChipPattern(), layer); // PETALCASEx_LAYERy_TRKChipy_1 path += Form("%s%d_%s%d_%s%d_1/", getTRKPetalPattern(), petalcase, getTRKPetalLayerPattern(), layer, getTRKSensorPattern(), layer); // PETALCASEx_LAYERy_TRKSensory_1 } - } else if (subDetID == 1) { // MLOT - path += Form("%s%d_1/", getTRKLayerPattern(), layer); // TRKLayerx_1 - path += Form("%s%d_%d/", getTRKStavePattern(), layer, stave); // TRKStavex_y - if (mNumberOfHalfStaves[layer] == 2) { // staggered geometry - path += Form("%s%d_%d/", getTRKHalfStavePattern(), layer, halfstave); // TRKHalfStavex_y + } else if (subDetID == 1) { // MLOT + path += Form("%s%d_1/", getTRKLayerPattern(), layer); // TRKLayerx_1 + if (mLayoutMLOT == eMLOTLayout::kCylindrical) { + path += Form("%s%d_1/", getTRKSensorPattern(), layer); // TRKSensorx_1 + } else { + path += Form("%s%d_%d/", getTRKStavePattern(), layer, stave); // TRKStavex_y + if (mNumberOfHalfStaves[layer] == 2) { // staggered geometry + path += Form("%s%d_%d/", getTRKHalfStavePattern(), layer, halfstave); // TRKHalfStavex_y + } + path += Form("%s%d_%d/", getTRKModulePattern(), layer, mod); // TRKModulx_y + path += Form("%s%d_%d/", getTRKChipPattern(), layer, chip); // TRKChipx_y + path += Form("%s%d_1/", getTRKSensorPattern(), layer); // TRKSensorx_1 } - path += Form("%s%d_%d/", getTRKModulePattern(), layer, mod); // TRKModulx_y - path += Form("%s%d_%d/", getTRKChipPattern(), layer, chip); // TRKChipx_y - path += Form("%s%d_1/", getTRKSensorPattern(), layer); // TRKSensorx_1 } return path; } diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx index 8e13d31e7915c..acbb75eb023c2 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx @@ -475,18 +475,38 @@ bool Detector::ProcessHits(FairVolume* vol) if (stopHit) { TLorentzVector positionStop; fMC->TrackPosition(positionStop); + // Retrieve the indices with the volume path int stave(0), halfstave(0), mod(0), chip(0); + + auto& trkPars = TRKBaseParam::Instance(); + if (subDetID == 1) { - fMC->CurrentVolOffID(1, chip); - fMC->CurrentVolOffID(2, mod); - if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 2) { - fMC->CurrentVolOffID(3, halfstave); - fMC->CurrentVolOffID(4, stave); - } else if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 1) { - fMC->CurrentVolOffID(3, stave); + /*if (trkPars.layoutMLOT == o2::trk::eMLOTLayout::kCylindrical) { + fMC->CurrentVolOffID(1, chip); } else { - LOGP(fatal, "Wrong number of halfstaves for layer {}", layer); + fMC->CurrentVolOffID(1, chip); + fMC->CurrentVolOffID(2, mod); + if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 2) { + fMC->CurrentVolOffID(3, halfstave); + fMC->CurrentVolOffID(4, stave); + } else if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 1) { + fMC->CurrentVolOffID(3, stave); + } else { + LOGP(fatal, "Wrong number of halfstaves for layer {}", layer); + } + }*/ + if (trkPars.layoutMLOT == o2::trk::eMLOTLayout::kSegmented) { + fMC->CurrentVolOffID(1, chip); + fMC->CurrentVolOffID(2, mod); + if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 2) { + fMC->CurrentVolOffID(3, halfstave); + fMC->CurrentVolOffID(4, stave); + } else if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 1) { + fMC->CurrentVolOffID(3, stave); + } else { + LOGP(fatal, "Wrong number of halfstaves for layer {}", layer); + } } } /// if VD, for the moment the volume is the "chipID" so no need to retrieve other elments From b64d6d677a37a899de1c22ddb16d5a96e34886dd Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 16 Mar 2026 16:18:19 +0100 Subject: [PATCH 2/3] Fix print --- .../ALICE3/TRK/simulation/src/Detector.cxx | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx index acbb75eb023c2..0df4cd12627cb 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx @@ -542,18 +542,30 @@ void Detector::Print(FairVolume* vol, int volume, int subDetID, int layer, int s int currentVol(0); LOG(info) << "Current volume name: " << fMC->CurrentVolName() << " and ID " << fMC->CurrentVolID(currentVol); LOG(info) << "volume: " << volume << "/" << mNumberOfVolumes - 1; - LOG(info) << "off volume name 1 " << fMC->CurrentVolOffName(1) << " chip: " << chip; - LOG(info) << "off volume name 2 " << fMC->CurrentVolOffName(2) << " module: " << mod; - if (subDetID == 1 && mGeometryTGeo->getNumberOfHalfStaves(layer) == 2) { // staggered geometry - LOG(info) << "off volume name 3 " << fMC->CurrentVolOffName(3) << " halfstave: " << halfstave; - LOG(info) << "off volume name 4 " << fMC->CurrentVolOffName(4) << " stave: " << stave; - LOG(info) << "SubDetector ID: " << subDetID << " Layer: " << layer << " staveinLayer: " << stave << " Chip ID: " << chipID; - } else if (subDetID == 1 && mGeometryTGeo->getNumberOfHalfStaves(layer) == 1) { // turbo geometry - LOG(info) << "off volume name 3 " << fMC->CurrentVolOffName(3) << " stave: " << stave; - LOG(info) << "SubDetector ID: " << subDetID << " Layer: " << layer << " staveinLayer: " << stave << " Chip ID: " << chipID; + + auto& trkPars = TRKBaseParam::Instance(); + + if (subDetID == 1) { // MLOT + if (trkPars.layoutMLOT == o2::trk::eMLOTLayout::kCylindrical) { + LOG(info) << "off volume name 1 " << fMC->CurrentVolOffName(1) << " chip: " << chip; + LOG(info) << "SubDetector ID: " << subDetID << " Layer: " << layer << " Chip ID: " << chipID; + } else { + LOG(info) << "off volume name 1 " << fMC->CurrentVolOffName(1) << " chip: " << chip; + LOG(info) << "off volume name 2 " << fMC->CurrentVolOffName(2) << " module: " << mod; + if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 2) { // staggered geometry + LOG(info) << "off volume name 3 " << fMC->CurrentVolOffName(3) << " halfstave: " << halfstave; + LOG(info) << "off volume name 4 " << fMC->CurrentVolOffName(4) << " stave: " << stave; + LOG(info) << "SubDetector ID: " << subDetID << " Layer: " << layer << " staveinLayer: " << stave << " Chip ID: " << chipID; + } else if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 1) { // turbo geometry + LOG(info) << "off volume name 3 " << fMC->CurrentVolOffName(3) << " stave: " << stave; + LOG(info) << "SubDetector ID: " << subDetID << " Layer: " << layer << " staveinLayer: " << stave << " Chip ID: " << chipID; + } + } } else { + // VD LOG(info) << "SubDetector ID: " << subDetID << " Chip ID: " << chipID; } + LOG(info); } From 4b85bceceab6f56a163513f24853a8a19a39b836 Mon Sep 17 00:00:00 2001 From: scannito Date: Mon, 16 Mar 2026 16:19:23 +0100 Subject: [PATCH 3/3] Remove commented lines --- .../ALICE3/TRK/simulation/src/Detector.cxx | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx index 0df4cd12627cb..66c02a080e0b6 100644 --- a/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx +++ b/Detectors/Upgrades/ALICE3/TRK/simulation/src/Detector.cxx @@ -482,20 +482,6 @@ bool Detector::ProcessHits(FairVolume* vol) auto& trkPars = TRKBaseParam::Instance(); if (subDetID == 1) { - /*if (trkPars.layoutMLOT == o2::trk::eMLOTLayout::kCylindrical) { - fMC->CurrentVolOffID(1, chip); - } else { - fMC->CurrentVolOffID(1, chip); - fMC->CurrentVolOffID(2, mod); - if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 2) { - fMC->CurrentVolOffID(3, halfstave); - fMC->CurrentVolOffID(4, stave); - } else if (mGeometryTGeo->getNumberOfHalfStaves(layer) == 1) { - fMC->CurrentVolOffID(3, stave); - } else { - LOGP(fatal, "Wrong number of halfstaves for layer {}", layer); - } - }*/ if (trkPars.layoutMLOT == o2::trk::eMLOTLayout::kSegmented) { fMC->CurrentVolOffID(1, chip); fMC->CurrentVolOffID(2, mod);