@@ -41,6 +41,82 @@ TRKLayer::TRKLayer(int layerNumber, std::string layerName, float rInn, float zLe
4141 LOGP (info, " Creating layer: id: {} rInner: {} rOuter: {} zLength: {} x2X0: {}" , mLayerNumber , mInnerRadius , mOuterRadius , mZ , mX2X0 );
4242}
4343
44+ TGeoVolume* TRKLayer::createSensor (std::string type)
45+ {
46+ TGeoMedium* medSi = gGeoManager ->GetMedium (" TRK_SILICON$" );
47+ std::string sensName = Form (" %s%d" , GeometryTGeo::getTRKSensorPattern (), this ->mLayerNumber );
48+
49+ TGeoShape* sensor;
50+
51+ if (type == " cylinder" ) {
52+ sensor = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
53+ } else if (type == " flat" ) {
54+ double width = mModuleWidth * 2 ; // Each stave has two modules (based on the LOI design)
55+ sensor = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
56+ } else {
57+ LOGP (fatal, " Sensor of type '{}' is not implemented" , type);
58+ }
59+
60+ TGeoVolume* sensVol = new TGeoVolume (sensName.c_str (), sensor, medSi);
61+ sensVol->SetLineColor (kYellow );
62+
63+ return sensVol;
64+ };
65+
66+ TGeoVolume* TRKLayer::createChip (std::string type)
67+ {
68+ TGeoMedium* medSi = gGeoManager ->GetMedium (" TRK_SILICON$" );
69+ std::string chipName = o2::trk::GeometryTGeo::getTRKChipPattern () + std::to_string (mLayerNumber );
70+
71+ TGeoShape* chip;
72+ TGeoVolume* sensVol;
73+
74+ if (type == " cylinder" ) {
75+ chip = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
76+ sensVol = createSensor (" cylinder" );
77+ } else if (type == " flat" ) {
78+ double width = mModuleWidth * 2 ; // Each stave has two modules (based on the LOI design)
79+ chip = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
80+ sensVol = createSensor (" flat" );
81+ } else {
82+ LOGP (fatal, " Sensor of type '{}' is not implemented" , type);
83+ }
84+
85+ TGeoVolume* chipVol = new TGeoVolume (chipName.c_str (), chip, medSi);
86+ LOGP (info, " Inserting {} in {} " , sensVol->GetName (), chipVol->GetName ());
87+ chipVol->AddNode (sensVol, 1 , nullptr );
88+ chipVol->SetLineColor (kYellow );
89+
90+ return chipVol;
91+ }
92+
93+ TGeoVolume* TRKLayer::createStave (std::string type)
94+ {
95+ TGeoMedium* medAir = gGeoManager ->GetMedium (" TRK_AIR$" );
96+ std::string staveName = o2::trk::GeometryTGeo::getTRKStavePattern () + std::to_string (mLayerNumber );
97+
98+ TGeoShape* stave;
99+ TGeoVolume* chipVol;
100+
101+ if (type == " cylinder" ) {
102+ stave = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
103+ chipVol = createChip (" cylinder" );
104+ } else if (type == " flat" ) {
105+ double width = mModuleWidth * 2 ; // Each stave has two modules (based on the LOI design)
106+ stave = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
107+ chipVol = createChip (" flat" );
108+ } else {
109+ LOGP (fatal, " Chip of type '{}' is not implemented" , type);
110+ }
111+
112+ TGeoVolume* staveVol = new TGeoVolume (staveName.c_str (), stave, medAir);
113+ LOGP (info, " Inserting {} in {} " , chipVol->GetName (), staveVol->GetName ());
114+ staveVol->AddNode (chipVol, 1 , nullptr );
115+ staveVol->SetLineColor (kYellow );
116+
117+ return staveVol;
118+ }
119+
44120void TRKLayer::createLayer (TGeoVolume* motherVolume)
45121{
46122 TGeoMedium* medSi = gGeoManager ->GetMedium (" TRK_SILICON$" );
@@ -56,23 +132,7 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
56132 layerVol->SetLineColor (kYellow );
57133
58134 if (mLayout == eLayout::kCylinder ) {
59- TGeoTube* stave = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
60- TGeoTube* chip = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
61- TGeoTube* sensor = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
62-
63- TGeoVolume* sensVol = new TGeoVolume (sensName.c_str (), sensor, medSi);
64- sensVol->SetLineColor (kYellow );
65- TGeoVolume* chipVol = new TGeoVolume (chipName.c_str (), chip, medSi);
66- chipVol->SetLineColor (kYellow );
67- TGeoVolume* staveVol = new TGeoVolume (staveName.c_str (), stave, medSi);
68- staveVol->SetLineColor (kYellow );
69-
70- LOGP (info, " Inserting {} in {} " , sensVol->GetName (), chipVol->GetName ());
71- chipVol->AddNode (sensVol, 1 , nullptr );
72-
73- LOGP (info, " Inserting {} in {} " , chipVol->GetName (), staveVol->GetName ());
74- staveVol->AddNode (chipVol, 1 , nullptr );
75-
135+ auto staveVol = createStave (" cylinder" );
76136 LOGP (info, " Inserting {} in {} " , staveVol->GetName (), layerVol->GetName ());
77137 layerVol->AddNode (staveVol, 1 , nullptr );
78138 } else if (mLayout == eLayout::kTurboStaves ) {
@@ -91,16 +151,7 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
91151 LOGP (info, " Creating a layer with {} staves and {} mm overlap" , nStaves, overlap * 10 );
92152
93153 for (int iStave = 0 ; iStave < nStaves; iStave++) {
94- TGeoBBox* sensor = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
95- TGeoBBox* chip = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
96- TGeoBBox* stave = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
97-
98- TGeoVolume* sensVol = new TGeoVolume (sensName.c_str (), sensor, medSi);
99- sensVol->SetLineColor (kYellow );
100- TGeoVolume* chipVol = new TGeoVolume (chipName.c_str (), chip, medSi);
101- chipVol->SetLineColor (kYellow );
102- TGeoVolume* staveVol = new TGeoVolume (staveName.c_str (), stave, medSi);
103- staveVol->SetLineColor (kYellow );
154+ TGeoVolume* staveVol = createStave (" flat" );
104155
105156 // Put the staves in the correct position and orientation
106157 TGeoCombiTrans* trans = new TGeoCombiTrans ();
@@ -109,12 +160,6 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
109160 trans->SetRotation (rot);
110161 trans->SetTranslation (mInnerRadius * std::cos (2 . * TMath::Pi () * iStave / nStaves), mInnerRadius * std::sin (2 * TMath::Pi () * iStave / nStaves), 0 );
111162
112- LOGP (info, " Inserting {} in {} " , sensVol->GetName (), chipVol->GetName ());
113- chipVol->AddNode (sensVol, 1 , nullptr );
114-
115- LOGP (info, " Inserting {} in {} " , chipVol->GetName (), staveVol->GetName ());
116- staveVol->AddNode (chipVol, 1 , nullptr );
117-
118163 LOGP (info, " Inserting {} in {} " , staveVol->GetName (), layerVol->GetName ());
119164 layerVol->AddNode (staveVol, iStave, trans);
120165 }
0 commit comments