@@ -44,7 +44,7 @@ TRKLayer::TRKLayer(int layerNumber, std::string layerName, float rInn, float zLe
4444TGeoVolume* TRKLayer::createSensor (std::string type, double width)
4545{
4646 TGeoMedium* medSi = gGeoManager ->GetMedium (" TRK_SILICON$" );
47- std::string sensName = Form ( " %s%d " , GeometryTGeo::getTRKSensorPattern (), this -> mLayerNumber );
47+ std::string sensName = GeometryTGeo::getTRKSensorPattern () + std::to_string ( mLayerNumber );
4848
4949 TGeoShape* sensor;
5050
@@ -68,7 +68,7 @@ TGeoVolume* TRKLayer::createSensor(std::string type, double width)
6868TGeoVolume* TRKLayer::createChip (std::string type, double width)
6969{
7070 TGeoMedium* medSi = gGeoManager ->GetMedium (" TRK_SILICON$" );
71- std::string chipName = o2::trk:: GeometryTGeo::getTRKChipPattern () + std::to_string (mLayerNumber );
71+ std::string chipName = GeometryTGeo::getTRKChipPattern () + std::to_string (mLayerNumber );
7272
7373 TGeoShape* chip;
7474 TGeoVolume* sensVol;
@@ -96,48 +96,73 @@ TGeoVolume* TRKLayer::createChip(std::string type, double width)
9696
9797TGeoVolume* TRKLayer::createModule (std::string type, double width)
9898{
99+ TGeoMedium* medAir = gGeoManager ->GetMedium (" TRK_AIR$" );
100+ std::string moduleName = GeometryTGeo::getTRKModulePattern () + std::to_string (mLayerNumber );
101+
102+ TGeoShape* module ;
103+ TGeoVolume* chipVol;
104+
105+ if (type == " cylinder" ) {
106+ module = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
107+ chipVol = createChip (" cylinder" );
108+ } else if (type == " flat" ) {
109+ if (width < 0 ) {
110+ LOGP (fatal, " Attempting to create module with invalid width" );
111+ }
112+ module = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
113+ chipVol = createChip (" flat" , width);
114+ } else {
115+ LOGP (fatal, " Chip of type '{}' is not implemented" , type);
116+ }
117+
118+ TGeoVolume* moduleVol = new TGeoVolume (moduleName.c_str (), module , medAir);
119+ LOGP (info, " Inserting {} in {} " , chipVol->GetName (), moduleVol->GetName ());
120+ moduleVol->AddNode (chipVol, 1 , nullptr );
121+ moduleVol->SetLineColor (kYellow );
122+
123+ return moduleVol;
99124}
100125
101126TGeoVolume* TRKLayer::createStave (std::string type, double width)
102127{
103128 TGeoMedium* medAir = gGeoManager ->GetMedium (" TRK_AIR$" );
104- std::string staveName = o2::trk:: GeometryTGeo::getTRKStavePattern () + std::to_string (mLayerNumber );
129+ std::string staveName = GeometryTGeo::getTRKStavePattern () + std::to_string (mLayerNumber );
105130
106131 TGeoShape* stave;
107132 TGeoVolume* staveVol;
108- TGeoVolume* chipVol ;
133+ TGeoVolume* moduleVol ;
109134
110135 if (type == " cylinder" ) {
111136 stave = new TGeoTube (mInnerRadius , mInnerRadius + mChipThickness , mZ / 2 );
112- chipVol = createChip (" cylinder" );
137+ moduleVol = createModule (" cylinder" );
113138 staveVol = new TGeoVolume (staveName.c_str (), stave, medAir);
114- LOGP (info, " Inserting {} in {} " , chipVol ->GetName (), staveVol->GetName ());
115- staveVol->AddNode (chipVol , 1 , nullptr );
139+ LOGP (info, " Inserting {} in {} " , moduleVol ->GetName (), staveVol->GetName ());
140+ staveVol->AddNode (moduleVol , 1 , nullptr );
116141 } else if (type == " flat" ) {
117142 if (width < 0 ) {
118143 LOGP (fatal, " Attempting to create stave with invalid width" );
119144 }
120145 stave = new TGeoBBox (width / 2 , mChipThickness / 2 , mZ / 2 );
121- chipVol = createChip (" flat" , width);
146+ moduleVol = createModule (" flat" , width);
122147 staveVol = new TGeoVolume (staveName.c_str (), stave, medAir);
123- LOGP (info, " Inserting {} in {} " , chipVol ->GetName (), staveVol->GetName ());
124- staveVol->AddNode (chipVol , 1 , nullptr );
148+ LOGP (info, " Inserting {} in {} " , moduleVol ->GetName (), staveVol->GetName ());
149+ staveVol->AddNode (moduleVol , 1 , nullptr );
125150 } else if (type == " staggered" ) {
126151 double width = mModuleWidth * 2 ; // Each stave has two modules (based on the LOI design)
127152 stave = new TGeoBBox (width / 2 , mLogicalVolumeThickness / 2 , mZ / 2 );
128- TGeoVolume* chipVolLeft = createChip (" flat" , mModuleWidth );
129- TGeoVolume* chipVolRight = createChip (" flat" , mModuleWidth );
153+ TGeoVolume* moduleVolLeft = createModule (" flat" , mModuleWidth );
154+ TGeoVolume* moduleVolRight = createModule (" flat" , mModuleWidth );
130155 staveVol = new TGeoVolume (staveName.c_str (), stave, medAir);
131156
132157 TGeoCombiTrans* transLeft = new TGeoCombiTrans ();
133158 transLeft->SetTranslation (-mModuleWidth / 2 + 0.05 , 0 , 0 ); // 1mm overlap between the modules
134- LOGP (info, " Inserting {} in {} " , chipVolLeft ->GetName (), staveVol->GetName ());
135- staveVol->AddNode (chipVolLeft , 0 , transLeft);
159+ LOGP (info, " Inserting {} in {} " , moduleVolLeft ->GetName (), staveVol->GetName ());
160+ staveVol->AddNode (moduleVolLeft , 0 , transLeft);
136161
137162 TGeoCombiTrans* transRight = new TGeoCombiTrans ();
138163 transRight->SetTranslation (mModuleWidth / 2 - 0.05 , 0.2 , 0 );
139- LOGP (info, " Inserting {} in {} " , chipVolRight ->GetName (), staveVol->GetName ());
140- staveVol->AddNode (chipVolRight , 1 , transRight);
164+ LOGP (info, " Inserting {} in {} " , moduleVolRight ->GetName (), staveVol->GetName ());
165+ staveVol->AddNode (moduleVolRight , 1 , transRight);
141166 } else {
142167 LOGP (fatal, " Chip of type '{}' is not implemented" , type);
143168 }
@@ -152,9 +177,9 @@ void TRKLayer::createLayer(TGeoVolume* motherVolume)
152177 TGeoMedium* medSi = gGeoManager ->GetMedium (" TRK_SILICON$" );
153178 TGeoMedium* medAir = gGeoManager ->GetMedium (" TRK_AIR$" );
154179
155- std::string staveName = o2::trk:: GeometryTGeo::getTRKStavePattern () + std::to_string (mLayerNumber ),
156- chipName = o2::trk:: GeometryTGeo::getTRKChipPattern () + std::to_string (mLayerNumber ),
157- sensName = Form ( " %s%d " , GeometryTGeo::getTRKSensorPattern (), mLayerNumber );
180+ std::string staveName = GeometryTGeo::getTRKStavePattern () + std::to_string (mLayerNumber ),
181+ chipName = GeometryTGeo::getTRKChipPattern () + std::to_string (mLayerNumber ),
182+ sensName = GeometryTGeo::getTRKSensorPattern () + std::to_string ( mLayerNumber );
158183
159184 double layerThickness = mChipThickness ;
160185 if (mLayout != eLayout::kCylinder ) {
0 commit comments