1919#include " ITSMFTSimulation/Hit.h"
2020#include " TRKSimulation/Detector.h"
2121#include " TRKBase/TRKBaseParam.h"
22+ #include " TRKSimulation/VDGeometryBuilder.h"
23+ #include " TRKSimulation/VDSensorRegistry.h"
2224
2325using o2::itsmft::Hit;
2426
2527namespace o2
2628{
2729namespace trk
2830{
31+
2932float getDetLengthFromEta (const float eta, const float radius)
3033{
3134 return 2 . * (10 . + radius * std::cos (2 * std::atan (std::exp (-eta))));
@@ -48,7 +51,7 @@ Detector::Detector(bool active)
4851 if (trkPars.configFile != " " ) {
4952 configFromFile (trkPars.configFile );
5053 } else {
51- buildTRKNewVacuumVessel ();
54+ buildTRKMiddleOuterLayers ();
5255 configToFile ();
5356 configServices ();
5457 }
@@ -115,7 +118,7 @@ void Detector::configDefault()
115118 mLayers .emplace_back (7 , std::string{GeometryTGeo::getTRKLayerPattern () + std::to_string (7 )}, 80 .f , 258 .f , 100 .e -3 );
116119}
117120
118- void Detector::buildTRKNewVacuumVessel ()
121+ void Detector::buildTRKMiddleOuterLayers ()
119122{
120123 // Build the TRK detector according to changes proposed during
121124 // https://indico.cern.ch/event/1407704/
@@ -125,9 +128,6 @@ void Detector::buildTRKNewVacuumVessel()
125128 mLayers .clear ();
126129
127130 LOGP (warning, " Loading \" After Upgrade Days March 2024\" configuration for ALICE3 TRK" );
128- // mLayers.emplace_back(0, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(0)}, 0.5f, 50.f, 100.e-4);
129- // mLayers.emplace_back(1, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(1)}, 1.2f, 50.f, 100.e-4);
130- // mLayers.emplace_back(2, std::string{GeometryTGeo::getTRKLayerPattern() + std::to_string(2)}, 2.5f, 50.f, 100.e-4);
131131 mLayers .emplace_back (0 , std::string{GeometryTGeo::getTRKLayerPattern () + std::to_string (0 )}, 7 .f , 124 .f , 100 .e -3 );
132132 LOGP (info, " TRKLayer created. Name: {}" , std::string{GeometryTGeo::getTRKLayerPattern () + std::to_string (0 )});
133133 mLayers .emplace_back (1 , std::string{GeometryTGeo::getTRKLayerPattern () + std::to_string (1 )}, 9 .f , 124 .f , 100 .e -3 );
@@ -260,13 +260,16 @@ void Detector::createGeometry()
260260
261261 // Add service for inner tracker
262262 mServices .createServices (vTRK);
263- mPetalCases .clear ();
264- // Add petal cases (the sensitive layers inside the petal cases get constructed here too)
265- auto & trkPars = TRKBaseParam::Instance ();
266- for (Int_t petalCaseNumber = 0 ; petalCaseNumber < sNumberVDPetalCases ; ++petalCaseNumber) {
267- mPetalCases .emplace_back (petalCaseNumber, vTRK, trkPars.irisOpen );
268- mServices .excavateFromVacuum (mPetalCases [petalCaseNumber].getFullName ());
269- }
263+
264+ // Build the VD using the petal builder
265+ o2::trk::clearVDSensorRegistry ();
266+
267+ // Choose the VD design (here: IRIS4 by default).
268+ // You can wire this to a parameter in TRKBaseParam if desired.
269+ // Alternatives: createIRIS5Geometry(vVD); createIRIS4aGeometry(vVD);
270+ o2::trk::createIRIS4Geometry (vTRK);
271+
272+ mServices .excavateFromVacuum (" IRIS_CUTOUTsh" );
270273 mServices .registerVacuum (vTRK);
271274}
272275
@@ -291,26 +294,18 @@ void Detector::defineSensitiveVolumes()
291294 TString volumeName;
292295 LOGP (info, " Adding TRK Sensitive Volumes" );
293296
294- // Add petal case sensitive volumes
295- for (int petalCase = 0 ; petalCase < sNumberVDPetalCases ; ++petalCase) {
296- // Petal layers
297- for (int petalLayer = 0 ; petalLayer < mPetalCases [petalCase].mPetalLayers .size (); ++petalLayer) {
298- volumeName = mPetalCases [petalCase].mPetalLayers [petalLayer].getSensorName ();
299- if (petalLayer == 0 ) {
300- mFirstOrLastLayers .push_back (volumeName.Data ());
301- }
302- LOGP (info, " Trying {}" , volumeName.Data ());
303- v = geoManager->GetVolume (volumeName.Data ());
304- LOGP (info, " Adding TRK Sensitive Volume {}" , v->GetName ());
305- AddSensitiveVolume (v);
297+ // Register VD sensors created by VDGeometryBuilder
298+ for (const auto & s : o2::trk::vdSensorRegistry ()) {
299+ TGeoVolume* v = gGeoManager ->GetVolume (s.name .c_str ());
300+ if (!v) {
301+ LOGP (warning, " VD sensor volume '{}' not found" , s.name );
302+ continue ;
306303 }
307- // Petal disks
308- for (int petalDisk = 0 ; petalDisk < mPetalCases [petalCase].mPetalDisks .size (); ++petalDisk) {
309- volumeName = mPetalCases [petalCase].mPetalDisks [petalDisk].getSensorName ();
310- LOGP (info, " Trying {}" , volumeName.Data ());
311- v = geoManager->GetVolume (volumeName.Data ());
312- LOGP (info, " Adding TRK Sensitive Volume {}" , v->GetName ());
313- AddSensitiveVolume (v);
304+ LOGP (info, " Adding VD Sensitive Volume {}" , v->GetName ());
305+ AddSensitiveVolume (v);
306+ // Optionally track first/last layers for TR references:
307+ if (s.kind == o2::trk::VDSensorDesc::Kind::Barrel && (s.idx == 0 /* innermost*/ )) {
308+ mFirstOrLastLayers .push_back (s.name );
314309 }
315310 }
316311
0 commit comments