66 ISvcLocator *svcLocator = Gaudi::svcLocator();
70 log <<
MSG::DEBUG <<
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<
endmsg;
74 log <<
MSG::DEBUG <<
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" <<
endmsg;
77 SmartIF<StoreGateSvc>
detStore{svcLocator->service(
"DetectorStore")};
79 throw std::runtime_error(
"Error in HECModuleConstruction, cannot access DetectorStore");
84 if (StatusCode::SUCCESS !=
detStore->retrieve(materialManager, std::string(
"MATERIALS"))) {
85 throw std::runtime_error(
"Error in HECModuleConstruction, cannot access Material Manager");
88 const GeoMaterial *
LAr = materialManager->
getMaterial(
"std::LiquidArgon");
89 if (!
LAr)
throw std::runtime_error(
"Error in HECModuleConstruction, std::LiquidArgon is not found.");
91 const GeoMaterial *Iron = materialManager->
getMaterial(
"std::Iron");
92 if (!Iron)
throw std::runtime_error(
"Error in HECModuleConstruction, std::Iron is not found.");
94 const GeoMaterial *Copper = materialManager->
getMaterial(
"std::Copper");
95 if (!Copper)
throw std::runtime_error(
"Error in HECModuleConstruction, std::Copper is not found.");
97 const GeoMaterial *Kapton = materialManager->
getMaterial(
"std::Kapton");
98 if (!Kapton)
throw std::runtime_error(
"Error in HECModuleConstruction, std::Kapton is not found.");
101 SmartIF<IRDBAccessSvc> pAccessSvc{svcLocator->service(
"RDBAccessSvc")};
102 if(!pAccessSvc.isValid()) {
103 throw std::runtime_error (
"Cannot locate RDBAccessSvc!!");
106 SmartIF<IGeoModelSvc> geoModel{svcLocator->service (
"GeoModelSvc")};
107 if(!geoModel.isValid()) {
108 throw std::runtime_error (
"Cannot locate GeoModelSvc!!");
112 std::string LArVersion = geoModel->LAr_VersionOverride();
114 std::string detectorKey = LArVersion.empty() ?
AtlasVersion : LArVersion;
115 std::string detectorNode = LArVersion.empty() ?
"ATLAS" :
"LAr";
117 IRDBRecordset_ptr hadronicEndcap = pAccessSvc->getRecordsetPtr(
"HadronicEndcap",detectorKey, detectorNode);
118 if(hadronicEndcap->size()>0)
119 log <<
MSG::DEBUG <<
"Using numbers from HadronicEndcap tag: " << hadronicEndcap->tagName() <<
endmsg;
121 throw std::runtime_error(
"Error in HECConstruction: hadronicEendcap not found");
123 IRDBRecordset_ptr hecLongitudinalBlock = pAccessSvc->getRecordsetPtr(
"HecLongitudinalBlock",detectorKey, detectorNode);
124 if(hecLongitudinalBlock->size()>0)
125 log <<
MSG::DEBUG <<
"Using numbers from HecLongitudinalBlock tag: " << hecLongitudinalBlock->tagName() <<
endmsg;
127 throw std::runtime_error(
"Error in HECConstruction: hecLongitudinalBlock not found");
133 double shrinkCold = 1.0;
136 int moduleNumber = (*hadronicEndcap)[0]->getInt(
"NSCT");
137 double moduleRinner1 = shrinkCold * (*hecLongitudinalBlock)[0]->getDouble(
"BLRMN")*
cm;
138 double moduleRinner2 = shrinkCold * (*hecLongitudinalBlock)[1]->getDouble(
"BLRMN")*
cm;
139 double moduleRouter = shrinkCold * (*hecLongitudinalBlock)[0]->getDouble(
"BLRMX")*
cm;
140 if (
m_tbyear==2004) moduleRouter = moduleRinner1 + 787*
mm;
141 double copperPad = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"COPPER")*
cm;
142 double gapSize = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"LARG")*
cm;
143 double drModOverlap = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"DRMODOVERLAP")*
cm;
144 double kaptonWidth[2];
145 kaptonWidth[0] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"ESTPL")*
cm;
146 kaptonWidth[1] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"PADPL")*
cm;
148 for(
int id=0;
id<7;
id++) gapN[
id] = (
int) (*hecLongitudinalBlock)[
id]->getDouble(
"BLMOD");
149 double firstFrontAbsThickness= shrinkCold * (*hecLongitudinalBlock)[0]->getDouble(
"PLATE0")*
cm;
150 double firstRearAbsThickness = shrinkCold * (*hecLongitudinalBlock)[3]->getDouble(
"PLATE0")*
cm;
151 double frontAbsThickness = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"PLATE_0")*
cm;
152 double rearAbsThickness = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"PLATE_1")*
cm;
153 double tieRodPositionX[4];
154 double tieRodPositionY[4];
155 tieRodPositionX[0] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSX_0")*
cm;
156 tieRodPositionY[0] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSR_0")*
cm;
157 tieRodPositionX[1] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSX_1")*
cm;
158 tieRodPositionY[1] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSR_1")*
cm;
159 tieRodPositionX[2] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSX_2")*
cm;
160 tieRodPositionY[2] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSR_2")*
cm;
161 tieRodPositionX[3] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSX_3")*
cm;
162 tieRodPositionY[3] = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODPOSR_3")*
cm;
163 double tieRodDiameter = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODDIM_0")*
cm;
164 double spacerDiameter = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"SPCDIM_0")*
cm;
165 double spacerDeadZone = shrinkCold * 3.0*
mm;
168 tieRodDiameter = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"RODDIM_1")*
cm;
169 spacerDiameter = shrinkCold * (*hadronicEndcap)[0]->getDouble(
"SPCDIM_1")*
cm;
176 int depthOffset = depthNumber;
177 double absThickness = frontAbsThickness;
178 double firstAbsThickness = firstFrontAbsThickness;
181 if (
m_tb) depthNumber= 2;
182 absThickness = rearAbsThickness;
183 firstAbsThickness = firstRearAbsThickness;
189 depthS[0] = firstFrontAbsThickness + gapN[0]*(frontAbsThickness+gapSize);
190 depthS[1] = gapN[1]*(frontAbsThickness+gapSize);
191 depthS[2] = gapN[2]*(frontAbsThickness+gapSize);
192 depthS[3] = firstRearAbsThickness + gapN[3]*(rearAbsThickness+gapSize);
193 depthS[4] = gapN[4]*(rearAbsThickness+gapSize);
194 depthS[5] = gapN[5]*(rearAbsThickness+gapSize);
195 depthS[6] = gapN[6]*(rearAbsThickness+gapSize);
199 double zCoordinate[4];
203 double g4allow = shrinkCold * 0.1*
mm ;
204 double g4allowS = 0.001*
mm ;
206 zCoordinate[0] = shrinkCold * 0.0*
cm;
207 zCoordinate[1] = depthS[0];
208 zCoordinate[2] = depthS[0] + g4allow;
209 zCoordinate[3] = depthS[0]+depthS[1]+depthS[2] + g4allow;
211 for (
int i=0;
i<3;
i++) {
212 if (
i>0) gaptally[
i] = gaptally[
i-1] + gapN[
i-1];
213 gapNumber[
i] = gapN[
i];
214 depthSize[
i] = depthS[
i];
218 zCoordinate[0] = shrinkCold * 0.0*
cm;
219 zCoordinate[1] = depthS[3]+depthS[4]+depthS[5]+depthS[6]+g4allow;
220 if(
m_tb) zCoordinate[1]= depthS[3]+depthS[4]+g4allow;
222 for (
int i=0;
i<4;
i++) {
223 if (
i>0) gaptally[
i] =gaptally[
i-1] + gapN[
i+3-1];
224 gapNumber[
i] = gapN[
i+3];
225 depthSize[
i] = depthS[
i+3];
240 double halfGap = gapSize/2.;
241 double halfGapLAr = (gapSize - kaptonWidth[1])/2.;
242 double restLAr = (halfGapLAr-kaptonWidth[0])/2. ;
243 ztie[0] = restLAr/2 + kaptonWidth[1]/2.;
244 ztie[1] = halfGap - restLAr/2.;
245 rodSize = restLAr - g4allowS;
249 double halfGap = gapSize/2.;
250 double halfGapLAr = (gapSize - kaptonWidth[1])/2. - kaptonWidth[0];
251 ztie[0] = (halfGap-halfGapLAr/2.);
253 rodSize = halfGapLAr-g4allowS;
262 double modulePhistart = 264.375*
deg;
263 double moduleDeltaPhi = 2*
M_PI/moduleNumber;
271 double deadZone = shrinkCold * 3.*
mm;
272 double larShift = deadZone /
sin(moduleDeltaPhi/2.);
277 double deadGap = shrinkCold * 1.*
mm;
278 double radialShift = deadGap /
sin(moduleDeltaPhi/2.);
293 std::string moduleName =
"LAr::HEC::Module";
294 std::string depthName = moduleName +
"::Depth";
295 std::string sliceName = depthName +
"::Slice";
296 std::string electrodeName = sliceName +
"::Electrode";
297 std::string copperName = electrodeName +
"::Copper";
298 std::string tieRodName = sliceName +
"::TieRod";
299 std::string deadTieName = sliceName +
"::TieRodDead";
300 std::string absorberName = depthName +
"::Absorber";
301 std::string firstAbsorberName = depthName +
"::FirstAbsorber";
302 std::string absTieRodName = absorberName +
"::TieRod";
303 std::string firstabsTieRodName = firstAbsorberName +
"::TieRod";
307 GeoIntrusivePtr<GeoTubs>solidAbsorberTieRod =
new GeoTubs(0.*
cm,tieRodDiameter/2.,absThickness/2.,0.*
deg,360.*
deg);
308 GeoIntrusivePtr<GeoLogVol> logiAbsorberTieRod =
new GeoLogVol(absTieRodName,solidAbsorberTieRod,Iron);
309 GeoIntrusivePtr<GeoPhysVol> physiAbsorberTieRod =
new GeoPhysVol(logiAbsorberTieRod);
311 GeoIntrusivePtr<GeoTubs> solidFirstAbsorberTieRod =
new GeoTubs(0.*
cm,tieRodDiameter/2.,firstAbsThickness/2.,0.*
deg,360.*
deg);
312 GeoIntrusivePtr<GeoLogVol> logiFirstAbsorberTieRod =
new GeoLogVol(firstabsTieRodName,solidFirstAbsorberTieRod,Iron);
313 GeoIntrusivePtr<GeoPhysVol> physiFirstAbsorberTieRod =
new GeoPhysVol(logiFirstAbsorberTieRod);
318 GeoIntrusivePtr<GeoTubs> solidTieRod =
new GeoTubs(0.*
cm,spacerDiameter/2.,rodSize/2.,0.*
deg,360.*
deg);
319 GeoIntrusivePtr<GeoLogVol> logiTieRod =
new GeoLogVol(tieRodName, solidTieRod, Iron);
320 GeoIntrusivePtr<GeoPhysVol> physiTieRod =
new GeoPhysVol(logiTieRod);
323 GeoIntrusivePtr<GeoTubs> solidDeadTie =
new GeoTubs(g4allowS+spacerDiameter/2.,
324 spacerDeadZone+spacerDiameter/2.,
327 GeoIntrusivePtr<GeoLogVol> logiDeadTie =
new GeoLogVol(deadTieName, solidDeadTie,
LAr);
328 GeoIntrusivePtr<GeoPhysVol> physiDeadTie =
new GeoPhysVol(logiDeadTie);
338 std::array<GeoIntrusivePtr<GeoTubs>, 2> solidPadBoard{};
339 std::array<GeoIntrusivePtr<GeoLogVol>, 2> logiPadBoard{};
340 std::array<GeoIntrusivePtr<GeoPhysVol>, 2> physiPadBoard{};
342 std::array<GeoIntrusivePtr<GeoTubs>, 2> solidCopperPad{};
343 std::array<GeoIntrusivePtr<GeoLogVol>, 2> logiCopperPad{};
344 std::array<GeoIntrusivePtr<GeoPhysVol>, 2> physiCopperPad{};
346 std::array<GeoIntrusivePtr<GeoTubs>, 2> solidEstBoard{};
347 std::array<GeoIntrusivePtr<GeoLogVol>, 2> logiEstBoard{};
348 std::array<GeoIntrusivePtr<GeoPhysVol>, 2> physiEstBoard{};
350 std::array<GeoIntrusivePtr<GeoTubs>, 2> solidSlice{};
351 std::array<GeoIntrusivePtr<GeoLogVol>, 2> logiSlice{};
352 std::array<GeoIntrusivePtr<GeoPhysVol>,2> physiSlice{};
354 std::array<GeoIntrusivePtr<GeoTubs>,2> solidAbsorber{};
355 std::array<GeoIntrusivePtr<GeoLogVol>,2> logiAbsorber{};
356 std::array<GeoIntrusivePtr<GeoPhysVol>,2> physiAbsorber{};
359 double rOuterF = moduleRouter-radialShift;
360 double rInnerF = moduleRinner2-radialShift;
362 GeoIntrusivePtr<GeoTubs> solidFirstAbsorber =
new GeoTubs(rInnerF,rOuterF,
363 firstAbsThickness/2.,
364 modulePhistart,moduleDeltaPhi);
365 GeoIntrusivePtr<GeoLogVol> logiFirstAbsorber =
new GeoLogVol(firstAbsorberName, solidFirstAbsorber, Copper);
366 GeoIntrusivePtr<GeoPhysVol> physiFirstAbsorber =
new GeoPhysVol(logiFirstAbsorber);
369 for(
int iSect=0; iSect<sectMax; iSect++)
376 double rOuter = moduleRouter - larShift - deadZone;
377 double rInner = moduleRinner2 - larShift + deadZone;
378 if (iSect<1 &&
m_frontWheel) rInner = moduleRinner1 - larShift + deadZone;
379 solidSlice[iSect] =
new GeoTubs(rInner, rOuter, gapSize/2., modulePhistart, moduleDeltaPhi);
380 logiSlice[iSect] =
new GeoLogVol(sliceName, solidSlice[iSect],
LAr);
381 physiSlice[iSect] =
new GeoPhysVol(logiSlice[iSect]);
384 rOuter = moduleRouter - larShift - deadZone -g4allowS;
385 rInner = moduleRinner2 - larShift + deadZone +g4allowS;
386 if (
m_frontWheel && iSect==0) rInner = moduleRinner1 - larShift + deadZone +g4allowS ;
391 solidPadBoard[iSect] =
new GeoTubs(rInner,rOuter,
393 modulePhistart,moduleDeltaPhi);
396 solidPadBoard[iSect] =
new GeoTubs(rInner,rOuter,
397 (kaptonWidth[1]/2.+ kaptonWidth[0]),
398 modulePhistart,moduleDeltaPhi);
400 logiPadBoard[iSect] =
new GeoLogVol(electrodeName, solidPadBoard[iSect], Kapton );
401 physiPadBoard[iSect] =
new GeoPhysVol(logiPadBoard[iSect]);
404 solidCopperPad[iSect] =
new GeoTubs(rInner,rOuter,copperPad/2.,
405 modulePhistart,moduleDeltaPhi);
406 logiCopperPad[iSect] =
new GeoLogVol(copperName, solidCopperPad[iSect], Copper);
407 physiCopperPad[iSect] =
new GeoPhysVol(logiCopperPad[iSect]);
408 physiPadBoard[iSect]->add(physiCopperPad[iSect]);
412 solidEstBoard[iSect] =
new GeoTubs(rInner,rOuter,kaptonWidth[0]/2.,
413 modulePhistart,moduleDeltaPhi);
414 logiEstBoard[iSect] =
new GeoLogVol(electrodeName, solidEstBoard[iSect], Kapton );
415 physiEstBoard[iSect] =
new GeoPhysVol(logiEstBoard[iSect]);
420 physiSlice[iSect]->add(
new GeoIdentifierTag(1));
421 physiSlice[iSect]->add(physiPadBoard[iSect]);
426 double halfGapLAr = (gapSize - kaptonWidth[1])/2.;
427 double ESTPos = (kaptonWidth[1]+halfGapLAr)/2.;
428 physiSlice[iSect]->add(
new GeoIdentifierTag(0));
429 physiSlice[iSect]->add(
new GeoTransform(Translate3D(0,0,(-ESTPos))));
430 physiSlice[iSect]->add(physiEstBoard[iSect]);
431 physiSlice[iSect]->add(
new GeoIdentifierTag(2));
432 physiSlice[iSect]->add(
new GeoTransform(Translate3D(0,0,ESTPos)));
433 physiSlice[iSect]->add(physiEstBoard[iSect]);
441 rOuter = moduleRouter - radialShift;
442 rInner = moduleRinner2 - radialShift;
443 if (iSect<1 &&
m_frontWheel) rInner = moduleRinner1 - radialShift;
444 solidAbsorber[iSect] =
new GeoTubs(rInner,rOuter,absThickness/2., modulePhistart,moduleDeltaPhi);
445 logiAbsorber[iSect] =
new GeoLogVol(absorberName, solidAbsorber[iSect], Copper);
446 physiAbsorber[iSect] =
new GeoPhysVol(logiAbsorber[iSect]);
456 for(
int indexRod=1; indexRod<nRods; indexRod++) {
457 for(
double isignX=-1;isignX<2;isignX=isignX+2.){
459 physiAbsorber[iSect]->add(
new GeoIdentifierTag(indexRod));
460 physiAbsorber[iSect]->add(
new GeoTransform(Translate3D(isignX*tieRodPositionX[indexRod],
461 -tieRodPositionY[indexRod]+radialShift, 0)));
462 physiAbsorber[iSect]->add(physiAbsorberTieRod);
464 physiFirstAbsorber->add(
new GeoIdentifierTag(indexRod));
465 physiFirstAbsorber->add(
new GeoTransform(Translate3D(isignX*tieRodPositionX[indexRod],
466 -tieRodPositionY[indexRod]+radialShift, 0)));
467 physiFirstAbsorber->add(physiFirstAbsorberTieRod);
472 for(
int itie=0; itie<2; itie++ ){
473 for(
double isignZ=-1;isignZ<2;isignZ=isignZ+2.){
474 physiSlice[iSect]->add(
new GeoIdentifierTag(indexRod));
475 physiSlice[iSect]->add(
new GeoTransform
476 (Translate3D(isignX*tieRodPositionX[indexRod],
477 -tieRodPositionY[indexRod]+larShift,
479 if (itie==0) { physiSlice[iSect]->add(physiTieRod); }
480 else { physiSlice[iSect]->add(physiDeadTie);}
483 physiSlice[iSect]->add(
new GeoIdentifierTag(indexRod));
484 physiSlice[iSect]->add(
new GeoTransform
485 (Translate3D(isignX*tieRodPositionX[indexRod],
486 -tieRodPositionY[indexRod]+larShift,
488 if (itie==0) { physiSlice[iSect]->add(physiTieRod); }
489 else { physiSlice[iSect]->add(physiDeadTie);}
500 physiAbsorber[iSect]->add(
new GeoIdentifierTag(0));
501 physiAbsorber[iSect]->add(
new GeoTransform(Translate3D(tieRodPositionX[0],
502 -tieRodPositionY[0]+radialShift,0)));
503 physiAbsorber[iSect]->add(physiAbsorberTieRod);
505 physiFirstAbsorber->add(
new GeoIdentifierTag(0));
506 physiFirstAbsorber->add(
new GeoTransform(Translate3D(tieRodPositionX[0],
507 -tieRodPositionY[0]+radialShift,0)));
508 physiFirstAbsorber->add(physiFirstAbsorberTieRod);
512 for(
int itie=0; itie<2; itie++ ){
513 for(
double isignZ=-1;isignZ<2;isignZ=isignZ+2){
514 physiSlice[iSect]->add(
new GeoIdentifierTag(0));
515 physiSlice[iSect]->add(
new GeoTransform(Translate3D(tieRodPositionX[0],
516 -tieRodPositionY[0]+larShift,
518 if (itie==0) { physiSlice[iSect]->add(physiTieRod); }
519 else { physiSlice[iSect]->add(physiDeadTie);}
522 physiSlice[iSect]->add(
new GeoIdentifierTag(0));
523 physiSlice[iSect]->add(
new GeoTransform(Translate3D(tieRodPositionX[0],
524 -tieRodPositionY[0]+larShift,
526 if (itie==0) { physiSlice[iSect]->add(physiTieRod); }
527 else { physiSlice[iSect]->add(physiDeadTie);}
546 std::array<GeoIntrusivePtr<GeoTubs>, 4> solidDepth{};
547 std::array<GeoIntrusivePtr<GeoLogVol>, 4> logiDepth{};
548 std::array<GeoIntrusivePtr<GeoPhysVol>, 4> physiDepth{};
550 for(
int iDepth=0; iDepth<depthNumber; iDepth++)
552 double rOuter = moduleRouter;
553 double rInner = moduleRinner2;
555 solidDepth[iDepth] =
new GeoTubs(rInner-drModOverlap,rOuter,
556 depthSize[iDepth]/2.,modulePhistart,moduleDeltaPhi);
557 logiDepth[iDepth] =
new GeoLogVol(depthName, solidDepth[iDepth],
LAr);
558 physiDepth[iDepth] =
new GeoPhysVol(logiDepth[iDepth]);
563 double firstAbs = 0.;
564 if (iDepth==0) firstAbs = firstAbsThickness;
565 double slicePositionZ = firstAbs + gapSize/2.0 -depthSize[iDepth]/2.0;
566 double absorberPositionZ = firstAbs + gapSize + absThickness/2.0 - depthSize[iDepth]/2.0;
579 sliceCopyNo += gaptally[iDepth];
584 GeoGenfun::Variable
Index;
585 GeoXF::TRANSFUNCTION
TS =
586 TranslateY3D(-larShift)*GeoXF::Pow(TranslateZ3D(1.0),slicePositionZ + (absThickness+gapSize)*
Index);
587 GeoXF::TRANSFUNCTION
TA =
588 TranslateY3D(-radialShift)*GeoXF::Pow(TranslateZ3D(1.0),absorberPositionZ + (absThickness+gapSize)*
Index);
590 GeoSerialIdentifier *sI =
new GeoSerialIdentifier(sliceCopyNo);
591 GeoSerialTransformer *sTS =
new GeoSerialTransformer(physiSlice[sliceNo], &
TS, gapNumber[iDepth]);
592 GeoSerialTransformer *sTAF =
new GeoSerialTransformer(physiAbsorber[sliceNo], &TA, gapNumber[iDepth]);
593 physiDepth[iDepth]->add(sI);
594 physiDepth[iDepth]->add(sTS);
595 physiDepth[iDepth]->add(sI);
596 physiDepth[iDepth]->add(sTAF);
602 double firstAbsorberPositionZ = firstAbsThickness/2.- depthSize[0]/2.0;
603 if(
m_frontWheel) physiDepth[0]->add(
new GeoIdentifierTag(0));
604 else physiDepth[0]->add(
new GeoIdentifierTag(1));
605 physiDepth[0]->add(
new GeoTransform(Translate3D(0,-radialShift,firstAbsorberPositionZ)));
606 physiDepth[0]->add(physiFirstAbsorber);
614 GeoPcon* solidHECModule =
new GeoPcon(modulePhistart, moduleDeltaPhi);
615 for (
int i=0;
i< nZplane;
i++)
617 double innerRadius = moduleRinner2;
619 solidHECModule->addPlane(zCoordinate[
i],innerRadius-drModOverlap,moduleRouter);
621 GeoIntrusivePtr<GeoLogVol> logicHECModule =
new GeoLogVol(moduleName, solidHECModule ,
LAr);
622 GeoIntrusivePtr<GeoFullPhysVol> physiHECModule =
new GeoFullPhysVol(logicHECModule);
627 double depthPositionZ = 0.;
629 for(
int iDepth=0; iDepth<depthNumber; iDepth++)
631 depthPositionZ +=depthSize[iDepth]/2.;
632 if(!
m_frontWheel) physiHECModule->add(
new GeoIdentifierTag(iDepth+depthOffset));
633 else physiHECModule->add(
new GeoIdentifierTag(iDepth));
634 physiHECModule->add(
new GeoTransform(Translate3D(0,0,depthPositionZ)));
635 physiHECModule->add(physiDepth[iDepth]);
636 depthPositionZ +=depthSize[iDepth]/2.;
642 return physiHECModule;