71 ISvcLocator *svcLocator = Gaudi::svcLocator();
73 if (svcLocator->service(
"MessageSvc",
msgSvc,
true )==StatusCode::FAILURE) {
74 throw std::runtime_error(
"Error in HECConstruction, cannot access MessageSvc");
78 log <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
79 log <<
"+ +" << std::endl;
80 log <<
"+ Start of HEC TB GeoModel definition +" << std::endl;
81 log <<
"+ +" << std::endl;
82 log <<
"++++++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
86 if (svcLocator->service(
"DetectorStore", detectorStore,
false )==StatusCode::FAILURE) {
87 throw std::runtime_error(
"Error in HECConstruction, cannot access DetectorStore");
93 sc=svcLocator->service(
"RDBAccessSvc",pAccessSvc);
94 if (
sc != StatusCode::SUCCESS) {
95 throw std::runtime_error (
"Cannot locate RDBAccessSvc!!");
100 if (StatusCode::SUCCESS != detectorStore->retrieve(materialManager, std::string(
"MATERIALS"))) {
112 const GeoMaterial *
LAr = materialManager->
getMaterial(
"std::LiquidArgon");
113 if (!
LAr)
throw std::runtime_error(
"Error in HECConstruction, std::LiquidArgon is not found.");
115 const GeoMaterial *Iron = materialManager->
getMaterial(
"std::Iron");
116 if (!Iron)
throw std::runtime_error(
"Error in HECConstruction, std::Iron is not found.");
118 const GeoMaterial *Copper = materialManager->
getMaterial(
"std::Copper");
119 if (!Copper)
throw std::runtime_error(
"Error in HECConstruction, std::Copper is not found.");
121 const GeoMaterial *Kapton = materialManager->
getMaterial(
"std::Kapton");
122 if (!Kapton)
throw std::runtime_error(
"Error in HECConstruction, std::Kapton is not found.");
127 const std::string& detectorKey =larVersionKey.tag();
128 const std::string& detectorNode = larVersionKey.node();
132 if(!hadronicEndcap)
throw std::runtime_error(
"Error in HECConstruction: hadronicEendcap not found");
133 if(!hecLongitudinalBlock)
throw std::runtime_error(
"Error in HECConstruction: hecLongitudinalBlock not found");
145 std::string tempHECName =
"LAr::Endcap::Cryostat::MotherVolume";
146 double HECMotherZplan[] = { 0. , 1350. };
147 double HECMotherRin[] = { 372. , 372. };
148 double HECMotherRout[] = { 2030. , 2030. };
149 int lastPlaneHEC = (
sizeof(HECMotherZplan) /
sizeof(
double) );
152 double moduleDeltaPhi = 2.*
M_PI/32. ;
153 double phiStart [] = {-19. , -18. } ;
154 double hecPhistart[] = { phiStart[0]*
M_PI/32 , phiStart[1]*
M_PI/32 } ;
155 double modulePhistart[] = { (phiStart[0]+2.)*
M_PI/32 , (phiStart[1]+2.)*
M_PI/32 } ;
158 GeoPcon* HECMotherShape =
new GeoPcon(hecPhistart[0], 3.*
M_PI/16. );
160 for (
int i = 0;
i != lastPlaneHEC; ++
i )
162 HECMotherShape->addPlane( HECMotherZplan[
i], HECMotherRin[
i], HECMotherRout[
i]);
165 const GeoLogVol *h6Log =
new GeoLogVol(
"HECMother", HECMotherShape,
LAr);
166 m_h6Phys =
new GeoFullPhysVol(h6Log);
168 std::string
tag = std::string(
"HEC1_POS");
172 status=detectorStore->record(sPhysVol,
tag);
173 if(!
status.isSuccess())
throw std::runtime_error ((std::string(
"Cannot store")+
tag).c_str());
192 GeoTubs* solidFirstAbsorber[2];
193 const GeoLogVol* logiFirstAbsorber[2];
194 GeoIntrusivePtr<GeoPhysVol> physiFirstAbsorber[2];
195 double firstAbsorber[5];
197 GeoTubs* solidTieRod[2];
198 const GeoLogVol* logiTieRod[2];
199 GeoIntrusivePtr<GeoPhysVol> physiTieRod[2];
201 GeoTubs* solidAbsorberTieRod[2];
202 const GeoLogVol* logiAbsorberTieRod[2];
203 GeoIntrusivePtr<GeoPhysVol> physiAbsorberTieRod[2];
204 GeoTubs* solidAbsorberTieRodRear[2];
205 const GeoLogVol* logiAbsorberTieRodRear[2];
206 GeoIntrusivePtr<GeoPhysVol> physiAbsorberTieRodRear[2];
207 double tieRodPositionX[4];
208 double tieRodPositionY[4];
209 double tieRodDiameter[2];
210 double spacerDiameter[2];
222 GeoTubs* solidSlice[3];
223 const GeoLogVol* logiSlice[3];
224 GeoIntrusivePtr<GeoPhysVol> physiSlice[3];
227 GeoTubs* solidFrontAbsorber[2];
228 const GeoLogVol* logiFrontAbsorber[2];
229 GeoIntrusivePtr<GeoPhysVol> physiFrontAbsorber[2];
230 GeoTubs* solidRearAbsorber;
231 const GeoLogVol* logiRearAbsorber;
232 GeoIntrusivePtr<GeoPhysVol> physiRearAbsorber;
238 GeoTubs* solidDepth[5];
239 const GeoLogVol* logiDepth[5];
240 GeoIntrusivePtr<GeoPhysVol> physiDepth[5];
245 GeoTubs* solidEstBoard;
246 const GeoLogVol* logiEstBoard;
247 GeoIntrusivePtr<GeoPhysVol> physiEstBoard;
249 GeoTubs* solidPadBoard;
250 const GeoLogVol* logiPadBoard;
251 GeoIntrusivePtr<GeoPhysVol> physiPadBoard;
257 int numberZplane = 6;
258 int numberFrontZplane = 4;
262 double kaptonPosition[3];
263 double kaptonWidth[3];
265 log <<
MSG::DEBUG <<
" In the H6 2002 HEC Constr. GetEnvelope - Here we get database things " << std::endl;
270 int moduleNumberFront = 3;
271 int moduleNumberRear = 2;
273 double moduleRinner1 = (*hecLongitudinalBlock)[0]->getDouble(
"BLRMN")*
Gaudi::Units::cm;
274 double moduleRinner2 = (*hecLongitudinalBlock)[1]->getDouble(
"BLRMN")*
Gaudi::Units::cm;
275 double moduleRouter = (*hecLongitudinalBlock)[0]->getDouble(
"BLRMX")*
Gaudi::Units::cm;
277 double copperPad = (*hadronicEndcap)[0]->getDouble(
"COPPER")*
Gaudi::Units::cm;
279 double betweenWheel = (*hadronicEndcap)[0]->getDouble(
"GAPWHL")*
Gaudi::Units::cm;
282 for (
int idepth=0; idepth < depthNumber; ++idepth)
284 depthSize[idepth] = (*hecLongitudinalBlock)[idepth]->getDouble(
"BLDPTH")*
Gaudi::Units::cm;
285 firstAbsorber[idepth]= (*hecLongitudinalBlock)[idepth]->getDouble(
"PLATE0")*
Gaudi::Units::cm;
286 gapNumber[idepth] = (
int) (*hecLongitudinalBlock)[idepth]->getDouble(
"BLMOD");
289 for (
int ikapton=0; ikapton < 3; ++ikapton)
291 std::ostringstream A0STR;
292 A0STR <<
"_" << ikapton;
293 const std::string A0 = A0STR.str();
294 kaptonPosition[ikapton] = (*hadronicEndcap)[0]->getDouble(
"KPTPOS"+A0)*
Gaudi::Units::cm;
295 kaptonWidth[ikapton] = (*hadronicEndcap)[0]->getDouble(
"KPTWID"+A0)*
Gaudi::Units::cm;
298 for (
int itie=0; itie < 4; ++itie)
300 std::ostringstream A0STR;
301 A0STR <<
"_" << itie;
302 const std::string A0 = A0STR.str();
303 tieRodPositionX[itie] = (*hadronicEndcap)[0]->getDouble(
"RODPOSX"+A0)*
Gaudi::Units::cm;
304 tieRodPositionY[itie] = (*hadronicEndcap)[0]->getDouble(
"RODPOSR"+A0)*
Gaudi::Units::cm;
307 for (
int i=0;
i < 2; ++
i)
309 std::ostringstream A0STR;
311 const std::string A0 = A0STR.str();
312 tieRodDiameter[
i] = (*hadronicEndcap)[0]->getDouble(
"RODDIM"+A0)*
Gaudi::Units::cm;
313 spacerDiameter[
i] = (*hadronicEndcap)[0]->getDouble(
"SPCDIM"+A0)*
Gaudi::Units::cm;
317 double frontAbsThickness = (*hadronicEndcap)[0]->getDouble(
"PLATE_0")*
Gaudi::Units::cm;
318 double rearAbsThickness = (*hadronicEndcap)[0]->getDouble(
"PLATE_1")*
Gaudi::Units::cm;
322 double innerRadius[] = {moduleRinner1,moduleRinner1,
323 moduleRinner2,moduleRinner2,moduleRinner2,moduleRinner2,};
325 double absorberPositionZ [5];
327 int sliceCopyNo[]={0,0,0,0,0};
328 for(
int i=0;
i<depthNumber;
i++)
330 if (
i<3) absorberPositionZ[
i]=firstAbsorber[
i]+ gapSize+ frontAbsThickness/2.0 -depthSize[
i]/2.0;
331 if (
i>2) absorberPositionZ[
i]=firstAbsorber[
i]+ gapSize+ rearAbsThickness/2.0 -depthSize[
i]/2.0;
334 if (
i>0) sliceCopyNo[
i] += sliceCopyNo[
i-1]+gapNumber[
i-1];
341 std::string hecFrontName =
"LAr::HEC::LiquidArgon";
342 std::string hecRearName =
"LAr::HEC::LiquidArgon";
344 std::string frontmoduleName =
"LAr::HEC::Module";
345 std::string rearmoduleName =
"LAr::HEC::Module";
347 std::string depthFrontName = frontmoduleName +
"::Depth";
348 std::string depthRearName = rearmoduleName +
"::Depth";
349 std::string sliceFrontName = depthFrontName +
"::Slice";
350 std::string sliceRearName = depthRearName +
"::Slice";
351 std::string absorberFrontName = depthFrontName +
"::Absorber";
352 std::string absorberRearName = depthRearName +
"::Absorber";
353 std::string firstFrontAbsorberName= depthFrontName +
"::FirstFrontAbsorber";
354 std::string firstRearAbsorberName = depthRearName +
"::FirstRearAbsorber";
355 std::string electrodeFrontName = sliceFrontName +
"::Electrode";
356 std::string electrodeRearName = sliceRearName +
"::Electrode";
357 std::string copperFrontName = electrodeFrontName +
"::Copper";
358 std::string copperRearName = electrodeRearName +
"::Copper";
359 std::string tieRodName = sliceFrontName +
"::TieRod";
360 std::string tieRodFrontName = sliceFrontName +
"::TieRod";
361 std::string tieRodRearName = sliceRearName +
"::TieRod";
365 log <<
MSG::DEBUG <<
" In the H6 2002 HEC Constr. GetEnvelope - Start to assemble HEC " << std::endl;
374 GeoPcon* solidFrontHEC =
new GeoPcon( hecPhistart[0], moduleNumberFront*moduleDeltaPhi);
375 for (
int i=0;
i< numberFrontZplane;
i++)
377 solidFrontHEC->addPlane(zCoordinate[
i],innerRadius[
i], moduleRouter);
379 const GeoLogVol* logicFrontHEC =
new GeoLogVol(hecFrontName, solidFrontHEC ,
LAr);
380 GeoIntrusivePtr<GeoPhysVol> physiFrontHEC =
new GeoPhysVol(logicFrontHEC);
390 GeoPcon* solidRearHEC =
new GeoPcon( hecPhistart[1], moduleNumberRear*moduleDeltaPhi);
391 for (
int i=numberFrontZplane;
i< numberZplane;
i++)
393 solidRearHEC->addPlane(zCoordinate[
i],innerRadius[
i], moduleRouter);
396 const GeoLogVol* logicRearHEC =
new GeoLogVol(hecRearName, solidRearHEC ,
LAr);
397 GeoIntrusivePtr<GeoPhysVol> physiRearHEC =
new GeoPhysVol(logicRearHEC);
409 GeoPcon* solidFrontModule =
new GeoPcon(modulePhistart[0], moduleDeltaPhi);
411 for (
int i=0;
i< numberFrontZplane;
i++)
413 solidFrontModule->addPlane(zCoordinate[
i],innerRadius[
i], moduleRouter);
415 const GeoLogVol* logicFrontModule =
new GeoLogVol(frontmoduleName, solidFrontModule ,
LAr);
416 GeoIntrusivePtr<GeoPhysVol> physiFrontModule =
new GeoPhysVol(logicFrontModule);
422 GeoPcon* solidRearModule =
new GeoPcon(modulePhistart[0], moduleDeltaPhi);
423 for (
int i=numberFrontZplane;
i< numberZplane;
i++)
425 double tempZ=zCoordinate[
i];
426 if (
i==4) (tempZ = tempZ + betweenWheel) ;
427 solidRearModule->addPlane(tempZ, innerRadius[
i], moduleRouter);
429 const GeoLogVol* logicRearModule =
new GeoLogVol(rearmoduleName, solidRearModule ,
LAr);
430 GeoIntrusivePtr<GeoPhysVol> physiRearModule =
new GeoPhysVol(logicRearModule);
442 GeoGenfun::Variable
Index;
443 GeoGenfun::GENFUNCTION ModuleRotationAngle = -moduleDeltaPhi + moduleDeltaPhi*
Index;
444 GeoXF::TRANSFUNCTION tf = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),ModuleRotationAngle);
447 GeoSerialIdentifier *sIF =
new GeoSerialIdentifier(1);
448 GeoSerialTransformer *sTF =
new GeoSerialTransformer (physiFrontModule,&tf, moduleNumberFront);
449 physiFrontHEC->add(sIF);
450 physiFrontHEC->add(sTF);
452 GeoGenfun::GENFUNCTION ModuleRotationAngleR = -moduleDeltaPhi/2. + moduleDeltaPhi*
Index;
453 GeoXF::TRANSFUNCTION tr = GeoXF::Pow(GeoTrf::RotateZ3D(1.0),ModuleRotationAngleR);
455 GeoSerialIdentifier *sIR =
new GeoSerialIdentifier(2);
456 GeoSerialTransformer *sTR =
new GeoSerialTransformer (physiRearModule,&tr, moduleNumberRear);
457 physiRearHEC->add(sIR);
458 physiRearHEC->add(sTR);
464 for(
int islice=0; islice<2; islice++)
467 {solidSlice[islice] =
new GeoTubs(moduleRinner1,moduleRouter,gapSize/2.,
468 modulePhistart[0],moduleDeltaPhi); }
470 {solidSlice[islice] =
new GeoTubs(moduleRinner2,moduleRouter,gapSize/2.,
471 modulePhistart[0],moduleDeltaPhi); }
472 logiSlice[islice] =
new GeoLogVol(sliceFrontName, solidSlice[islice],
LAr);
473 physiSlice[islice] =
new GeoPhysVol(logiSlice[islice]);
479 for(
int islice=2; islice<3; islice++)
481 solidSlice[islice] =
new GeoTubs(moduleRinner2,moduleRouter,gapSize/2.,
482 modulePhistart[0],moduleDeltaPhi);
483 logiSlice[islice] =
new GeoLogVol(sliceRearName, solidSlice[islice],
LAr);
484 physiSlice[islice] =
new GeoPhysVol(logiSlice[islice]);
495 solidFrontAbsorber[0] =
new GeoTubs(moduleRinner1-radialShift,moduleRouter-radialShift,frontAbsThickness/2.,
496 modulePhistart[0],moduleDeltaPhi);
497 solidFrontAbsorber[1] =
new GeoTubs(moduleRinner2-radialShift,moduleRouter-radialShift,frontAbsThickness/2.,
498 modulePhistart[0],moduleDeltaPhi);
500 for (
int frontabsorberNo=0;frontabsorberNo<2;frontabsorberNo++)
502 logiFrontAbsorber[frontabsorberNo] =
new GeoLogVol(absorberFrontName,
503 solidFrontAbsorber[frontabsorberNo], Copper);
504 physiFrontAbsorber[frontabsorberNo] =
new GeoPhysVol(logiFrontAbsorber[frontabsorberNo]);
508 solidRearAbsorber =
new GeoTubs(moduleRinner2-radialShift,moduleRouter-radialShift,rearAbsThickness/2.,
509 modulePhistart[0],moduleDeltaPhi);
510 logiRearAbsorber =
new GeoLogVol(absorberRearName,solidRearAbsorber, Copper);
511 physiRearAbsorber =
new GeoPhysVol(logiRearAbsorber);
518 solidFirstAbsorber[0] =
new GeoTubs(moduleRinner1-radialShift,moduleRouter-radialShift,
519 firstAbsorber[0]/2., modulePhistart[0],moduleDeltaPhi);
520 logiFirstAbsorber[0] =
new GeoLogVol(firstFrontAbsorberName, solidFirstAbsorber[0], Copper);
521 physiFirstAbsorber[0] =
new GeoPhysVol(logiFirstAbsorber[0]);
522 physiFirstAbsorber[0]->add(
new GeoIdentifierTag(50));
525 solidFirstAbsorber[1] =
new GeoTubs(moduleRinner2-radialShift,moduleRouter-radialShift,
526 firstAbsorber[3]/2., modulePhistart[0],moduleDeltaPhi);
527 logiFirstAbsorber[1] =
new GeoLogVol(firstRearAbsorberName, solidFirstAbsorber[1], Copper);
528 physiFirstAbsorber[1] =
new GeoPhysVol(logiFirstAbsorber[1]);
529 physiFirstAbsorber[1]->add(
new GeoIdentifierTag(51));
537 double depthPositionZ = 0.;
540 for(
int idepth=0; idepth<3; idepth++)
543 {solidDepth[idepth]=
new GeoTubs(moduleRinner1,moduleRouter,depthSize[idepth]/2.,
544 modulePhistart[0],moduleDeltaPhi);}
546 {solidDepth[idepth]=
new GeoTubs(moduleRinner2,moduleRouter,depthSize[idepth]/2.,
547 modulePhistart[0],moduleDeltaPhi);}
549 logiDepth[idepth] =
new GeoLogVol(depthFrontName, solidDepth[idepth],
LAr);
550 physiDepth[idepth]=
new GeoPhysVol(logiDepth[idepth]);
554 depthPositionZ +=depthSize[idepth]/2.;
555 physiFrontModule->add(
new GeoIdentifierTag(100+idepth));
556 physiFrontModule->add(
new GeoTransform(GeoTrf::Translate3D(0,0,depthPositionZ)));
557 physiFrontModule->add(physiDepth[idepth]);
563 depthPositionZ +=depthSize[idepth]/2.;
564 if (idepth==2) depthPositionZ +=betweenWheel;
570 int frontabsorberNo = 1;
571 if(idepth==0) { islice=0; frontabsorberNo=0; }
572 else { islice=2; frontabsorberNo=1; }
574 double slicePositionZ=firstAbsorber[idepth]+ gapSize/2.0 -depthSize[idepth]/2.0;
575 GeoGenfun::Variable
Index;
576 GeoXF::TRANSFUNCTION
TS = GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),slicePositionZ + (frontAbsThickness+gapSize)*
Index);
577 GeoXF::TRANSFUNCTION
TA = GeoTrf::TranslateY3D(-radialShift)*GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),
578 absorberPositionZ[idepth] + (frontAbsThickness+gapSize)*
Index);
579 GeoSerialIdentifier *sI =
new GeoSerialIdentifier(sliceCopyNo[idepth]);
580 GeoSerialTransformer *sTS =
new GeoSerialTransformer(physiSlice[islice], &
TS, gapNumber[idepth]);
581 GeoSerialTransformer *sTA =
new GeoSerialTransformer(physiFrontAbsorber[frontabsorberNo],&TA, gapNumber[idepth]);
582 physiDepth[idepth]->add(sI);
583 physiDepth[idepth]->add(sTS);
584 physiDepth[idepth]->add(sI);
585 physiDepth[idepth]->add(sTA);
594 for(
int idepth=3; idepth<5; idepth++)
596 depthPositionZ +=depthSize[idepth]/2.;
599 solidDepth[idepth] =
new GeoTubs(moduleRinner2,moduleRouter,depthSize[idepth]/2.,
600 modulePhistart[0],moduleDeltaPhi);
601 logiDepth[idepth] =
new GeoLogVol(depthRearName, solidDepth[idepth],
LAr);
602 physiDepth[idepth] =
new GeoPhysVol(logiDepth[idepth]);
604 physiRearModule->add(
new GeoIdentifierTag(100+idepth));
605 physiRearModule->add(
new GeoTransform(GeoTrf::Translate3D(0,0,depthPositionZ)));
606 physiRearModule->add(physiDepth[idepth]);
609 depthPositionZ +=depthSize[idepth]/2.;
614 double slicePositionZ=firstAbsorber[idepth]+ gapSize/2.0 -depthSize[idepth]/2.0;
615 GeoGenfun::Variable
Index;
616 GeoXF::TRANSFUNCTION
TS = GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),slicePositionZ + (rearAbsThickness+gapSize)*
Index);
617 GeoXF::TRANSFUNCTION
TA = GeoTrf::TranslateY3D(-radialShift)*GeoXF::Pow(GeoTrf::TranslateZ3D(1.0),
618 absorberPositionZ[idepth] + (rearAbsThickness+gapSize)*
Index);
619 GeoSerialIdentifier *sI =
new GeoSerialIdentifier(sliceCopyNo[idepth]);
620 GeoSerialTransformer *sTS =
new GeoSerialTransformer(physiSlice[islice], &
TS, gapNumber[idepth]);
621 GeoSerialTransformer *sTA =
new GeoSerialTransformer(physiRearAbsorber,&TA, gapNumber[idepth]);
622 physiDepth[idepth]->add(sI);
623 physiDepth[idepth]->add(sTS);
624 physiDepth[idepth]->add(sI);
625 physiDepth[idepth]->add(sTA);
633 double firstAbsorberPositionZ = firstAbsorber[0]/2.- depthSize[0]/2.0;
634 physiDepth[0]->add(
new GeoIdentifierTag(50));
635 physiDepth[0]->add(
new GeoTransform(GeoTrf::Translate3D(0,-radialShift,firstAbsorberPositionZ)));
636 physiDepth[0]->add(physiFirstAbsorber[0]);
639 firstAbsorberPositionZ = firstAbsorber[3]/2.- depthSize[3]/2.0;
640 physiDepth[3]->add(
new GeoIdentifierTag(51));
641 physiDepth[3]->add(
new GeoTransform(GeoTrf::Translate3D(0,-radialShift,firstAbsorberPositionZ)));
642 physiDepth[3]->add(physiFirstAbsorber[1]);
651 for(
int islice=0; islice<3; islice++)
656 solidPadBoard =
new GeoTubs(moduleRinner1,moduleRouter,copperPad/2.,
657 modulePhistart[0],moduleDeltaPhi);
658 solidEstBoard =
new GeoTubs(moduleRinner1,moduleRouter,(kaptonWidth[indexKapton]/2.+kaptonWidth[0]),
659 modulePhistart[0],moduleDeltaPhi);
663 solidPadBoard =
new GeoTubs(moduleRinner2,moduleRouter,copperPad/2.,
664 modulePhistart[0],moduleDeltaPhi);
665 solidEstBoard =
new GeoTubs(moduleRinner2,moduleRouter,(kaptonWidth[indexKapton]/2.+kaptonWidth[0]),
666 modulePhistart[0],moduleDeltaPhi);
669 std::string copperName, electrodeName;
672 copperName = copperRearName;
673 electrodeName = electrodeRearName;
677 copperName = copperFrontName;
678 electrodeName = electrodeFrontName;
680 logiPadBoard =
new GeoLogVol(copperName, solidPadBoard, Copper);
681 logiEstBoard =
new GeoLogVol(electrodeName, solidEstBoard, Kapton );
684 double kaptonPositionZ = kaptonPosition[indexKapton]-gapSize/2.;
686 physiEstBoard =
new GeoPhysVol(logiEstBoard);
687 physiSlice[islice]->add(
new GeoIdentifierTag(indexKapton));
688 physiSlice[islice]->add(
new GeoTransform(GeoTrf::Translate3D(0,0,kaptonPositionZ)));
689 physiSlice[islice]->add(physiEstBoard);
692 physiPadBoard =
new GeoPhysVol(logiPadBoard);
693 physiEstBoard->add(
new GeoIdentifierTag(indexKapton));
694 physiEstBoard->add(
new GeoTransform(GeoTrf::Translate3D(0,0,0)));
695 physiEstBoard->add(physiPadBoard);
705 for (
int iwheel=0; iwheel<2; iwheel++)
708 logiTieRod[iwheel] =
new GeoLogVol(tieRodName, solidTieRod[iwheel], Iron);
711 for(
int islice=0; islice<3; islice++) {
713 if(islice==2) numberTie=1;
716 for(indexRod=1; indexRod<4; indexRod++) {
717 for(
int iz=0;iz<2;iz++){
719 physiTieRod[numberTie] =
new GeoPhysVol(logiTieRod[numberTie]);
720 physiSlice[islice]->add(
new GeoIdentifierTag(indexRod));
721 physiSlice[islice]->add(
new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[indexRod],
722 -tieRodPositionY[indexRod],ztie[iz])));
723 physiSlice[islice]->add(physiTieRod[numberTie]);
726 physiTieRod[numberTie] =
new GeoPhysVol(logiTieRod[numberTie]);
727 physiSlice[islice]->add(
new GeoIdentifierTag(indexRod));
728 physiSlice[islice]->add(
new GeoTransform(GeoTrf::Translate3D(-tieRodPositionX[indexRod],
729 -tieRodPositionY[indexRod],ztie[iz])));
730 physiSlice[islice]->add(physiTieRod[numberTie]);
734 for(
int iz1=0;iz1<2;iz1++)
737 physiTieRod[numberTie] =
new GeoPhysVol(logiTieRod[numberTie]);
738 physiSlice[islice]->add(
new GeoIdentifierTag(indexRod));
739 physiSlice[islice]->add(
new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[0],-tieRodPositionY[0],ztie[iz1])));
740 physiSlice[islice]->add(physiTieRod[numberTie]);
750 logiAbsorberTieRod[0] =
new GeoLogVol(tieRodName,solidAbsorberTieRod[0],Iron);
751 logiAbsorberTieRod[1] =
new GeoLogVol(tieRodName,solidAbsorberTieRod[1],Iron);
754 logiAbsorberTieRodRear[0] =
new GeoLogVol(tieRodRearName,solidAbsorberTieRodRear[0],Iron);
755 logiAbsorberTieRodRear[1] =
new GeoLogVol(tieRodRearName,solidAbsorberTieRodRear[1],Iron);
758 for(
int islice=0; islice<2; islice++)
763 for(indexRod=1; indexRod<4; indexRod++)
765 physiAbsorberTieRod[indexR] =
new GeoPhysVol(logiAbsorberTieRod[indexR]);
766 physiFrontAbsorber[islice]->add(
new GeoIdentifierTag(indexRod));
767 physiFrontAbsorber[islice]->add(
new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[indexRod],
768 -(tieRodPositionY[indexRod]-radialShift), 0)));
769 physiFrontAbsorber[islice]->add(physiAbsorberTieRod[indexR]);
770 physiAbsorberTieRod[indexR] =
new GeoPhysVol(logiAbsorberTieRod[indexR]);
771 physiFrontAbsorber[islice]->add(
new GeoIdentifierTag(indexRod));
772 physiFrontAbsorber[islice]->add(
new GeoTransform(GeoTrf::Translate3D(-tieRodPositionX[indexRod],
773 -(tieRodPositionY[indexRod]-radialShift), 0)));
774 physiFrontAbsorber[islice]->add(physiAbsorberTieRod[indexR]);
776 physiAbsorberTieRod[indexR] =
new GeoPhysVol(logiAbsorberTieRod[indexR]);
777 physiFrontAbsorber[islice]->add(
new GeoIdentifierTag(indexRod));
778 physiFrontAbsorber[islice]->add(
new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[0],
779 -(tieRodPositionY[0]-radialShift),0)));
782 physiFrontAbsorber[islice]->add(physiAbsorberTieRod[indexR]);
788 for(indexRod=1; indexRod<4; indexRod++)
790 physiAbsorberTieRodRear[1] =
new GeoPhysVol(logiAbsorberTieRodRear[1]);
791 physiRearAbsorber->add(
new GeoIdentifierTag(indexRod));
792 physiRearAbsorber->add(
new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[indexRod],
793 -(tieRodPositionY[indexRod]-radialShift), 0)));
794 physiRearAbsorber->add(physiAbsorberTieRodRear[1]);
796 physiAbsorberTieRodRear[1] =
new GeoPhysVol(logiAbsorberTieRodRear[1]);
797 physiRearAbsorber->add(
new GeoIdentifierTag(indexRod));
798 physiRearAbsorber->add(
new GeoTransform(GeoTrf::Translate3D(-tieRodPositionX[indexRod],
799 -(tieRodPositionY[indexRod]-radialShift), 0)));
802 physiRearAbsorber->add(physiAbsorberTieRodRear[1]);
807 physiAbsorberTieRodRear[1] =
new GeoPhysVol(logiAbsorberTieRodRear[1]);
808 physiRearAbsorber->add(
new GeoIdentifierTag(indexRod));
809 physiRearAbsorber->add(
new GeoTransform(GeoTrf::Translate3D(tieRodPositionX[0],
810 -(tieRodPositionY[0]-radialShift),0)));
813 physiRearAbsorber->add(physiAbsorberTieRodRear[1]);