84 (*m_log) <<
MSG::DEBUG <<
" TileGeoSectionBuilder::fillSection ModuleNcp= "<<ModuleNcp<<
endmsg;
94 const GeoMaterial* matAluminium{
nullptr};
99 double dX1 =0., dX2 =0., dY1 =0., dY2 =0., dZ1 =0., dZ2 =0.;
100 std::string volname =
"";
103 float PosXcut =0., PosYcut =0., PosY =0., Rmore =0.;
104 float Radius =0., YcorA =0., YcorB =0., lenPla =0., Blia =0.;
111 if (ModuleNcp>=35 && ModuleNcp<=37) SideFl = -1;
117 GeoIntrusivePtr<const GeoShapeUnion> CutA{
nullptr};
118 GeoIntrusivePtr<GeoShape> CutB{
nullptr};
121 if (sec_number==2 &&
m_dbManager->
BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))) {
134 checking(
"CutB1",
false, 1, dX1,dX2,dY1,dY2,dZ1);
135 GeoTrd* CutB1 =
new GeoTrd(dX1,dX2,dY1,dY2,dZ1);
149 checking(
"Cut1up",
false, 1, dX1,dX2,dY1,dY2,dZ1);
150 GeoTrd* Cut1up =
new GeoTrd(dX1,dX2,dY1,dY2,dZ1);
159 checking(
"Cut2down",
false, 1, dX1,dX2,dY1,dY2,dZ2);
160 GeoTrd* Cut1down =
new GeoTrd(dX1,dX2,dY1,dY2,dZ2);
162 GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2);
164 const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA);
173 TransCut2 = GeoTrf::TranslateZ3D(-Radius)
181 TransCut2 = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*
Gaudi::Units::deg)*TransCut2;
184 if (ModuleNcp>=60 && ModuleNcp<=62) {
185 TransCutL = GeoTrf::TranslateZ3D(-Radius)
192 TransCutL = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*
Gaudi::Units::deg)*TransCutL;
195 }
else if (ModuleNcp>=35 && ModuleNcp<=37) {
196 TransCutR = GeoTrf::TranslateZ3D(-Radius)
203 TransCutR = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*
Gaudi::Units::deg)*TransCutR;
214 double thicknessGirderMother = 0.0;
215 double specialModuleZShift = 0.0;
221 if ((Id4 == 7) && (sec_number == 3))
231 if ((Id4 == 7) && (sec_number == 3)) {
236 thicknessGirderMother/2,thicknessGirderMother/2,dy1GirderMother,dy2GirderMother,heightGirderMother/2);
238 GeoTrd* girderMother =
new GeoTrd(thicknessGirderMother/2,
239 thicknessGirderMother/2,
242 heightGirderMother/2);
244 GeoLogVol* lvGirderMother =
new GeoLogVol(
"GirderMother",girderMother,matAir);
245 PVLink pvGirderMother =
new GeoPhysVol(lvGirderMother);
253 GeoTransform* tfGirderMother{
nullptr};
262 mother->add(tfGirderMother);
263 mother->add(pvGirderMother);
271 double thicknessFrontPlate, heightFrontPlate, dy1FrontPlate, dy2FrontPlate;
280 if (thicknessFrontPlate > rless) {
286 (*
m_log) <<
MSG::DEBUG <<
" FrontPlateSh dX1,dX2= "<<thicknessFrontPlate/2<<
", "<<thicknessFrontPlate/2
287 <<
" dY1,dY2= "<<dy1FrontPlate<<
" "<<dy2FrontPlate<<
" dZ= "<<heightFrontPlate/2
290 GeoTrd* frontPlateSh =
new GeoTrd(thicknessFrontPlate/2,
291 thicknessFrontPlate/2,
296 GeoLogVol* lvFrontPlateSh =
new GeoLogVol(
"FrontPlateSh",frontPlateSh,matIron);
297 PVLink pvFrontPlateSh =
new GeoPhysVol(lvFrontPlateSh);
298 GeoTransform* tfFrontPlateSh =
new GeoTransform(GeoTrf::Translate3D(
302 mother->add(tfFrontPlateSh);
303 mother->add(pvFrontPlateSh);
311 ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) )) {
313 std::string volname =
"";
314 double dXCutA = 0, dXCutB = 0;
327 GeoTrd* frontPlate =
new GeoTrd(thicknessFrontPlate/2 -(dXCutA+dXCutB),
328 thicknessFrontPlate/2 -(dXCutA+dXCutB),
343 GeoLogVol* lvFrontPlate =
new GeoLogVol(
"FrontPlate",frontPlate,matIron);
344 PVLink pvFrontPlate =
new GeoPhysVol(lvFrontPlate);
345 GeoTransform* tfFrontPlate =
new GeoTransform(GeoTrf::Translate3D(
349 mother->add(tfFrontPlate);
350 mother->add(pvFrontPlate);
362 GeoTrd* frontPlate =
new GeoTrd(thicknessFrontPlate/2,
363 thicknessFrontPlate/2,
368 GeoLogVol* lvFrontPlate =
new GeoLogVol(
"FrontPlate",frontPlate,matIron);
369 PVLink pvFrontPlate =
new GeoPhysVol(lvFrontPlate);
370 GeoTransform* tfFrontPlate =
new GeoTransform(GeoTrf::Translate3D(
374 mother->add(tfFrontPlate);
375 mother->add(pvFrontPlate);
380 double dy1EndPlate, dy2EndPlate, thicknessEndPlate, heightEndPlate;
389 GeoIntrusivePtr<GeoTransform> tfEndPlateSh{
nullptr};
403 GeoTrd* endPlateSh =
new GeoTrd(thicknessEndPlate/2,
408 GeoLogVol* lvEndPlateSh{
nullptr};
411 if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) {
416 GeoTrd* endPlateShCut =
new GeoTrd(thicknessEndPlate,
423 double rotationAngle ;
424 double shiftCutPlate ;
425 int rotationSign = 1;
426 if (ModuleNcp > 50) rotationSign *= -1;
427 if ( neg ) rotationSign *= -1;
430 if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) {
434 cutOutTransformation =
435 GeoTrf::Translate3D(0,0, -heightEndPlate/2.) *
437 GeoTrf::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) *
438 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
440 const GeoShape & endPlateShCutted3760 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
441 lvEndPlateSh =
new GeoLogVol(
"EndPlateSh", &(endPlateShCutted3760) , matIron);
443 }
else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) {
447 cutOutTransformation =
448 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
449 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate + 0.5*dy2EndPlate*(1.-
std::cos(rotationAngle*
Gaudi::Units::rad))) ) *
450 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
452 const GeoShape & endPlateShCutted3661 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
453 lvEndPlateSh =
new GeoLogVol(
"EndPlateSh", &(endPlateShCutted3661) , matIron);
455 }
else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) {
459 cutOutTransformation =
460 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
461 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
462 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
464 const GeoShape & endPlateShCutted3562 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
465 lvEndPlateSh =
new GeoLogVol(
"EndPlateSh", &(endPlateShCutted3562) , matIron);
471 (*m_log) << MSG::ERROR <<
" TileGeoSectionBuilder::fillSection . Wrong Module in cut-out region. ModuleNcp= "<<ModuleNcp<<
endmsg;
472 lvEndPlateSh =
new GeoLogVol(
"EndPlateSh", endPlateSh , matIron);
476 lvEndPlateSh =
new GeoLogVol(
"EndPlateSh", endPlateSh , matIron);
485 PVLink pvEndPlateSh =
new GeoPhysVol(lvEndPlateSh);
487 tfEndPlateSh =
new GeoTransform(GeoTrf::Translate3D(
488 specialModuleZShift +
492 mother->add(tfEndPlateSh);
493 mother->add(pvEndPlateSh);
496 (*m_log) <<
MSG::DEBUG <<
" _fillSection: ext.barrel EndPlateSh Ok "<<
endmsg;
505 GeoTrd* endPlate1 =
new GeoTrd(thicknessEndPlate/2,
511 GeoLogVol* lvEndPlate1 =
new GeoLogVol(
"EndPlate1",endPlate1,matIron);
512 PVLink pvEndPlate1 =
new GeoPhysVol(lvEndPlate1);
516 GeoTrd* epHole1 =
new GeoTrd (thicknessEndPlate/2,
522 GeoLogVol* lvEPHole1 =
new GeoLogVol(
"EPHole1",epHole1,matAir);
523 PVLink pvEPHole1 =
new GeoPhysVol(lvEPHole1);
524 GeoTransform* tfEPHole1 =
new GeoTransform(GeoTrf::Translate3D(0.,0.,
526 pvEndPlate1->add(tfEPHole1);
527 pvEndPlate1->add(pvEPHole1);
530 GeoTransform* tfEndPlate1 =
new GeoTransform(GeoTrf::Translate3D(
532 mother->add(tfEndPlate1);
533 mother->add(pvEndPlate1);
541 GeoIntrusivePtr<GeoTransform> tfEndPlate2{
nullptr};
545 double radShift =lenPla;
546 double rminbT=rminb + radShift;
554 GeoLogVol* lvEndPlate2{
nullptr};
555 GeoTrd* endPlate2 =
new GeoTrd(thicknessEndPlate/2,
561 tfEndPlate2 =
new GeoTransform(GeoTrf::Translate3D(
564 if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) {
566 GeoTrd* endPlate2Cut =
new GeoTrd(thicknessEndPlate,
571 double rotationAngle ;
572 double shiftCutPlate ;
573 int rotationSign = 1;
574 if (ModuleNcp > 50) rotationSign *= -1;
575 if ( neg ) rotationSign *= -1;
577 if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) {
581 cutOutTransformation =
582 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
583 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
584 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
586 const GeoShape & endPlate2Cutted3760 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
587 lvEndPlate2 =
new GeoLogVol(
"EndPlate2", &(endPlate2Cutted3760) , matIron);
589 }
else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) {
593 cutOutTransformation =
594 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
595 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
596 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
598 const GeoShape & endPlate2Cutted3661 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
599 lvEndPlate2 =
new GeoLogVol(
"EndPlate2", &(endPlate2Cutted3661) , matIron);
601 }
else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) {
605 cutOutTransformation =
606 GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
607 GeoTrf::Translate3D( 0, 0, - (dy2EndPlate - shiftCutPlate) ) *
608 GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
610 const GeoShape & endPlate2Cutted3562 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
611 lvEndPlate2 =
new GeoLogVol(
"EndPlate2", &(endPlate2Cutted3562) , matIron);
623 lvEndPlate2 =
new GeoLogVol(
"EndPlate2",endPlate2,matIron);
626 PVLink pvEndPlate2 =
new GeoPhysVol(lvEndPlate2);
632 GeoTrd* epHole2 =
new GeoTrd (thicknessEndPlate/2,
638 GeoLogVol* lvEPHole2 =
new GeoLogVol(
"EPHole2",epHole2,matAir);
639 PVLink pvEPHole2 =
new GeoPhysVol(lvEPHole2);
640 GeoTransform* tfEPHole2 =
new GeoTransform(GeoTrf::Translate3D(0.,0.,
642 pvEndPlate2->add(tfEPHole2);
643 pvEndPlate2->add(pvEPHole2);
646 mother->add(tfEndPlate2);
647 mother->add(pvEndPlate2);
661 thicknessAbsorber/2,thicknessAbsorber/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
664 double thicknessPeriod =0, thicknessAbsorber1 =0, thicknessAbsorber2 =0, thicknessAbsorber3 =0;
665 double PosAbsor1 =0, PosAbsor2 =0, PosAbsor3 =0;
666 int nA1 =32, nA2 = 0, nA3 =16;
668 GeoTrd *absorber{
nullptr}, *absorber1{
nullptr}, *absorber3{
nullptr};
669 GeoLogVol *lvAbsorber{
nullptr}, *lvAbsorber1{
nullptr}, *lvAbsorber3{
nullptr};
670 PVLink pvAbsorber{
nullptr}, pvAbsorber1{
nullptr}, pvAbsorber3{
nullptr},
671 pvTmp_Absorber1{
nullptr}, pvTmp_Absorber3{
nullptr};
674 switch (sec_number) {
683 thicknessAbsorber1 = nA1*thicknessPeriod;
684 PosAbsor1 = thicknessAbsorber/2 - thicknessAbsorber1/2;
686 thicknessAbsorber2 = nA2*thicknessPeriod;
687 PosAbsor2 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2/2;
689 thicknessAbsorber3 = nA3*thicknessPeriod;
690 PosAbsor3 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2 - thicknessAbsorber3/2;
693 (*
m_log) <<
MSG::DEBUG <<
" Number of periods per Module: N= "<<nA1+nA2+nA3
694 <<
" Middle absorber, numbers of periods = "<<nA2
698 absorber1 =
new GeoTrd(thicknessAbsorber1/2, thicknessAbsorber1/2,
699 dy1Absorber, dy2Absorber,
702 lvAbsorber1 =
new GeoLogVol(
"Absorber",absorber1,matIron);
703 pvAbsorber1 =
new GeoPhysVol(lvAbsorber1);
706 absorber =
new GeoTrd(thicknessAbsorber2/2, thicknessAbsorber2/2,
707 dy1Absorber, dy2Absorber,
710 lvAbsorber =
new GeoLogVol(
"Absorber",absorber,matIron);
711 pvAbsorber =
new GeoPhysVol(lvAbsorber);
715 absorber3 =
new GeoTrd(thicknessAbsorber3/2, thicknessAbsorber3/2,
716 dy1Absorber, dy2Absorber,
719 lvAbsorber3 =
new GeoLogVol(
"Absorber",absorber3,matIron);
720 pvAbsorber3 =
new GeoPhysVol(lvAbsorber3);
724 (*m_log) <<
MSG::DEBUG <<
" _fillSection: Ex.Barrel pvAbsorber 1,3 Ok "<<
endmsg;
730 absorber =
new GeoTrd(thicknessAbsorber/2, thicknessAbsorber/2,
731 dy1Absorber, dy2Absorber,
735 lvAbsorber =
new GeoLogVol(
"Absorber",absorber,matIron);
738 lvAbsorber =
new GeoLogVol(
"Absorber",absorber,matAir);
740 pvAbsorber =
new GeoPhysVol(lvAbsorber);
746 (*m_log) <<
MSG::DEBUG <<
" _fillSection: special pvAbsorber made from Air Ok "<<
endmsg;
754 double thicknessAbsorberChild;
758 GeoLogVol* lvPeriod{
nullptr};
759 PVLink pvPeriod{
nullptr};
760 GeoTransform* tfPeriod{
nullptr};
761 GeoSerialTransformer* stPeriod{
nullptr};
763 GeoTrd* absorberChild{
nullptr};
764 GeoLogVol* lvAbsorberChild{
nullptr};
765 PVLink pvAbsorberChild{
nullptr};
766 GeoTransform* tfAbsorberChild{
nullptr};
769 switch (sec_number) {
779 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
785 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
787 period =
new GeoTrd(thicknessPeriod/2,
793 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
794 pvPeriod =
new GeoPhysVol(lvPeriod);
804 absorberChild =
new GeoTrd(thicknessAbsorberChild/2,
805 thicknessAbsorberChild/2,
809 lvAbsorberChild =
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
810 pvAbsorberChild =
new GeoPhysVol(lvAbsorberChild);
813 GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
814 TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
816 (thicknessAbsorberChild - thicknessAbsorber)/2);
818 stPeriod =
new GeoSerialTransformer(pvPeriod,
822 pvAbsorberChild->add(
new GeoSerialIdentifier(0));
823 pvAbsorberChild->add(stPeriod);
826 tfAbsorberChild =
new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
827 pvAbsorber->add(tfAbsorberChild);
828 pvAbsorber->add(pvAbsorberChild);
834 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
836 period =
new GeoTrd(thicknessPeriod/2,
841 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
842 pvPeriod =
new GeoPhysVol(lvPeriod);
851 thicknessAbsorberChild = thicknessPeriod;
852 absorberChild =
new GeoTrd(thicknessAbsorberChild/2,
853 thicknessAbsorberChild/2,
857 lvAbsorberChild =
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
858 pvAbsorberChild =
new GeoPhysVol(lvAbsorberChild);
861 (-thicknessAbsorberChild + thicknessAbsorber)/2);
864 tfPeriod =
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
867 pvAbsorberChild->add(tfPeriod);
868 pvAbsorberChild->add(pvPeriod);
871 tfAbsorberChild =
new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
872 pvAbsorber->add(tfAbsorberChild);
873 pvAbsorber->add(pvAbsorberChild);
882 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
885 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
887 period =
new GeoTrd(thicknessPeriod/2,
892 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
893 pvPeriod =
new GeoPhysVol(lvPeriod);
906 GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber1)/2;
907 TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
909 (-thicknessAbsorber+thicknessAbsorber1)/2.);
911 stPeriod =
new GeoSerialTransformer(pvPeriod,&xfReplica1,nA1);
913 pvAbsorber1->add(
new GeoSerialIdentifier(0));
914 pvAbsorber1->add(stPeriod);
918 if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) {
920 GeoCutVolAction action1(*CutA, TransCut2);
921 pvAbsorber1->apply(&action1);
922 pvTmp_Absorber1 = action1.getPV();
932 GENFUNCTION periodPos2 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber2)/2;
933 TRANSFUNCTION xfReplica2 = Pow(GeoTrf::TranslateX3D(1.),periodPos2);
935 (-thicknessAbsorber+thicknessAbsorber2)/2.+thicknessAbsorber1);
937 stPeriod =
new GeoSerialTransformer(pvPeriod,&xfReplica2,nA2);
939 pvAbsorber->add(
new GeoSerialIdentifier(nA1));
940 pvAbsorber->add(stPeriod);
947 GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber3)/2;
948 TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
950 (-thicknessAbsorber+thicknessAbsorber3)/2.+thicknessAbsorber2+thicknessAbsorber1);
952 stPeriod =
new GeoSerialTransformer(pvPeriod,&xfReplica3,nA3);
954 pvAbsorber3->add(
new GeoSerialIdentifier(nA1+nA2));
955 pvAbsorber3->add(stPeriod);
958 if (ModuleNcp>=60 && ModuleNcp<=62) {
961 GeoCutVolAction action2(*CutB, TransCutL);
962 pvAbsorber3->apply(&action2);
963 pvTmp_Absorber3 = action2.getPV();
967 }
else if (ModuleNcp>=35 && ModuleNcp<=37) {
970 GeoCutVolAction action3(*CutB, TransCutR);
971 pvAbsorber3->apply(&action3);
972 pvTmp_Absorber3 = action3.getPV();
994 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
996 checking(
"Period 3 (ITC1 special)",
true, 4,
997 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
999 period =
new GeoTrd(thicknessPeriod/2,
1004 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
1005 pvPeriod =
new GeoPhysVol(lvPeriod);
1015 absorberChild =
new GeoTrd(thicknessAbsorberChild/2,
1016 thicknessAbsorberChild/2,
1020 lvAbsorberChild =
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
1021 pvAbsorberChild =
new GeoPhysVol(lvAbsorberChild);
1024 GENFUNCTION periodPosITC1sp = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
1025 TRANSFUNCTION xfReplicaITC1sp = Pow(GeoTrf::TranslateX3D(1.),periodPosITC1sp);
1027 (thicknessAbsorberChild - thicknessAbsorber)/2);
1029 stPeriod =
new GeoSerialTransformer(pvPeriod,
1033 pvAbsorberChild->add(
new GeoSerialIdentifier(0));
1034 pvAbsorberChild->add(stPeriod);
1037 tfAbsorberChild =
new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
1038 pvAbsorber->add(tfAbsorberChild);
1039 pvAbsorber->add(pvAbsorberChild);
1045 checking(
"Period 5 (ITC1 special)",
true, 4,
1046 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1048 period =
new GeoTrd(thicknessPeriod/2,
1053 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
1054 pvPeriod =
new GeoPhysVol(lvPeriod);
1062 thicknessAbsorberChild = thicknessPeriod;
1063 absorberChild =
new GeoTrd(thicknessAbsorberChild/2,
1064 thicknessAbsorberChild/2,
1068 lvAbsorberChild =
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
1069 pvAbsorberChild =
new GeoPhysVol(lvAbsorberChild);
1072 (-thicknessAbsorberChild + thicknessAbsorber)/2);
1075 tfPeriod =
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
1077 pvAbsorberChild->add(tfPeriod);
1078 pvAbsorberChild->add(pvPeriod);
1081 tfAbsorberChild =
new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
1082 pvAbsorber->add(tfAbsorberChild);
1083 pvAbsorber->add(pvAbsorberChild);
1086 (*m_log) <<
MSG::DEBUG <<
" _fillSection: Absorber (ITC plug special) Ok "<<
endmsg;
1092 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1094 period =
new GeoTrd(thicknessPeriod/2,
1099 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
1100 pvPeriod =
new GeoPhysVol(lvPeriod);
1109 GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber)/2;
1110 TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
1121 stPeriod =
new GeoSerialTransformer(pvPeriod,
1125 pvAbsorber->add(
new GeoSerialIdentifier(0));
1126 pvAbsorber->add(stPeriod);
1141 <<
", dzglue: " << dzglue <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
1144 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1146 period =
new GeoTrd(thicknessPeriod/2,
1151 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
1152 pvPeriod =
new GeoPhysVol(lvPeriod);
1162 absorberChild =
new GeoTrd(thicknessAbsorberChild/2,
1163 thicknessAbsorberChild/2,
1167 lvAbsorberChild =
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
1168 pvAbsorberChild =
new GeoPhysVol(lvAbsorberChild);
1171 GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
1172 TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
1174 (thicknessAbsorberChild - thicknessAbsorber)/2);
1176 stPeriod =
new GeoSerialTransformer(pvPeriod,
1180 pvAbsorberChild->add(
new GeoSerialIdentifier(0));
1181 pvAbsorberChild->add(stPeriod);
1184 tfAbsorberChild =
new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
1185 pvAbsorber->add(tfAbsorberChild);
1186 pvAbsorber->add(pvAbsorberChild);
1192 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1194 period =
new GeoTrd(thicknessPeriod/2,
1199 lvPeriod =
new GeoLogVol(
"Period",
period,matIron);
1200 pvPeriod =
new GeoPhysVol(lvPeriod);
1208 thicknessAbsorberChild = thicknessPeriod;
1209 absorberChild =
new GeoTrd(thicknessAbsorberChild/2,
1210 thicknessAbsorberChild/2,
1214 lvAbsorberChild =
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
1215 pvAbsorberChild =
new GeoPhysVol(lvAbsorberChild);
1218 (-thicknessAbsorberChild + thicknessAbsorber)/2);
1221 tfPeriod =
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
1223 pvAbsorberChild->add(tfPeriod);
1224 pvAbsorberChild->add(pvPeriod);
1227 tfAbsorberChild =
new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
1228 pvAbsorber->add(tfAbsorberChild);
1229 pvAbsorber->add(pvAbsorberChild);
1246 (*m_log) << MSG::ERROR <<
"TileGeoSectionBuilder::fillSection: Unexpected section = "
1251 thicknessPeriod = thicknessAbsorber;
1252 MLOG(
DEBUG) <<
"DEFAULT Section -- thicknessAbsorber: " << thicknessAbsorber <<
" ==> thicknessPeriod: " << thicknessPeriod <<
endmsg;
1255 thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
1259 if (dy1Period <= 0.0 || dy2Period <= 0.0 || dy1Period > dy1Absorber || dy2Period > dy2Absorber || dy1Period >= dy2Period ) {
1260 dy1Period = dy1Absorber;
1261 dy2Period = dy2Absorber;
1264 period =
new GeoTrd(thicknessPeriod/2,
1270 lvPeriod =
new GeoLogVol(
"Period",
period,matAluminium);
1271 pvPeriod =
new GeoPhysVol(lvPeriod);
1282 tfPeriod =
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
1283 pvAbsorber->add(
new GeoIdentifierTag(0));
1284 pvAbsorber->add(tfPeriod);
1285 pvAbsorber->add(pvPeriod);
1288 (*m_log) <<
MSG::DEBUG <<
" _fillSection: Absorber (case default) Ok "<<
endmsg;
1294 GeoTransform *tfAbsorber{
nullptr}, *tfAbsorber1{
nullptr}, *tfAbsorber3{
nullptr};
1299 if (sec_number==3) {
1302 mother->add(tfAbsorber);
1303 mother->add(pvAbsorber);
1305 }
else if (sec_number==2) {
1309 tfAbsorber1 =
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2 - PosAbsor1, 0.,
1311 mother->add(tfAbsorber1);
1312 if (
m_dbManager->
BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
1313 mother->add(pvTmp_Absorber1);
1315 mother->add(pvAbsorber1);
1319 (*m_log) <<
MSG::DEBUG <<
" _fillsection ext.barrel pvAbsorber1 Ok"<<
endmsg;
1321 tfAbsorber =
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2 - PosAbsor2, 0.,
1323 mother->add(tfAbsorber);
1324 mother->add(pvAbsorber);
1327 (*m_log) <<
MSG::DEBUG <<
" _fillsection ext.barrel pvAbsorber Ok"<<
endmsg;
1329 tfAbsorber3 =
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2 - PosAbsor3, 0.,
1331 mother->add(tfAbsorber3);
1332 if (
m_dbManager->
BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
1333 mother->add(pvTmp_Absorber3);
1335 mother->add(pvAbsorber3);
1339 (*m_log) <<
MSG::DEBUG <<
" _fillsection ext.barrel pvAbsorber3 Ok"<<
endmsg;
1342 tfAbsorber =
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2, 0.,
1344 mother->add(tfAbsorber);
1345 mother->add(pvAbsorber);