11 #include "GeoModelKernel/GeoPcon.h" 
   12 #include "GeoModelKernel/GeoTubs.h" 
   13 #include "GeoModelKernel/GeoTube.h" 
   14 #include "GeoModelKernel/GeoTrd.h" 
   15 #include "GeoModelKernel/GeoTrap.h" 
   16 #include "GeoModelKernel/GeoBox.h" 
   17 #include "GeoModelKernel/GeoMaterial.h" 
   18 #include "GeoModelKernel/GeoLogVol.h" 
   19 #include "GeoModelKernel/GeoPhysVol.h" 
   20 #include "GeoModelKernel/GeoNameTag.h" 
   21 #include "GeoModelKernel/GeoTransform.h" 
   22 #include "GeoModelKernel/GeoSerialIdentifier.h" 
   23 #include "GeoModelKernel/GeoIdentifierTag.h" 
   24 #include "GeoModelKernel/GeoDefinitions.h" 
   25 #include "GeoModelKernel/Units.h" 
   27 #include "GeoModelKernel/GeoShapeUnion.h" 
   28 #include "GeoModelKernel/GeoShapeShift.h" 
   29 #include "GeoModelKernel/GeoShapeSubtraction.h" 
   30 #include "GeoModelKernel/GeoCutVolAction.h" 
   32 #include "GeoGenericFunctions/AbsFunction.h" 
   33 #include "GeoGenericFunctions/Variable.h" 
   34 #include "GeoModelKernel/GeoXF.h" 
   35 #include "GeoModelKernel/GeoSerialTransformer.h" 
   38 #include "GaudiKernel/MsgStream.h" 
   39 #include "GaudiKernel/SystemOfUnits.h" 
   45 #define MLOG(x)   if (m_log->level()<=MSG::x) *m_log << MSG::x 
   48 using namespace GeoXF;
 
   55         : m_theMaterialManager(matManager)
 
   56         , m_dbManager(pDbManager)
 
   58         , m_switches(switches)
 
   59         , m_barrelPeriodThickness(0.)
 
   61         , m_extendedPeriodThickness(0.)
 
   64                                                         , m_matIronHalfDens(0)
 
   65                                                         , m_additionalIronLayer(0.027)
 
   83   (*m_log) << 
MSG::DEBUG <<
" TileGeoSectionBuilder::fillSection ModuleNcp= "<<ModuleNcp<< 
endmsg;
 
   93   const GeoMaterial* matAluminium{
nullptr};
 
   98   double dX1 =0., dX2 =0., dY1 =0., dY2 =0., dZ1 =0., dZ2 =0.;
 
   99   std::string volname =
"";
 
  102   float PosXcut =0., PosYcut =0., PosY =0., Rmore =0.;
 
  103   float Radius =0., YcorA =0., YcorB =0., lenPla =0., Blia =0.;
 
  110   if (ModuleNcp>=35 && ModuleNcp<=37) SideFl = -1;
 
  116   GeoIntrusivePtr<const GeoShapeUnion> CutA{
nullptr};
 
  117   GeoIntrusivePtr<GeoShape> CutB{
nullptr};
 
  120   if (sec_number==2 && 
m_dbManager->
BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62))) {
 
  133     checking(
"CutB1", 
false, 1, dX1,dX2,dY1,dY2,dZ1);
 
  134     GeoTrd* CutB1 = 
new GeoTrd(dX1,dX2,dY1,dY2,dZ1);
 
  148     checking(
"Cut1up", 
false, 1, dX1,dX2,dY1,dY2,dZ1);
 
  149     GeoTrd* Cut1up = 
new GeoTrd(dX1,dX2,dY1,dY2,dZ1);
 
  158     checking(
"Cut2down", 
false, 1, dX1,dX2,dY1,dY2,dZ2);
 
  159     GeoTrd* Cut1down = 
new GeoTrd(dX1,dX2,dY1,dY2,dZ2);
 
  161     GeoTrf::Translate3D yPosA(0.,0.,-dZ1-dZ2);
 
  163     const GeoShapeUnion& CutA1 = Cut1up->add(*Cut1down<<yPosA);
 
  172     TransCut2 = GeoTrf::TranslateZ3D(-Radius)
 
  180       TransCut2 = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*
Gaudi::Units::deg)*TransCut2;
 
  183     if (ModuleNcp>=60 && ModuleNcp<=62) {
 
  184       TransCutL = GeoTrf::TranslateZ3D(-Radius)
 
  191         TransCutL = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*
Gaudi::Units::deg)*TransCutL;
 
  194     } 
else if (ModuleNcp>=35 && ModuleNcp<=37) {
 
  195       TransCutR = GeoTrf::TranslateZ3D(-Radius)
 
  202         TransCutR = GeoTrf::TranslateX3D(2*ptTmp.x())*GeoTrf::RotateZ3D(180*
Gaudi::Units::deg)*TransCutR;
 
  213   double thicknessGirderMother = 0.0;
 
  214   double specialModuleZShift = 0.0;
 
  220     if ((Id4 == 7) && (sec_number == 3))
 
  230     if  ((Id4 == 7) && (sec_number == 3)) {
 
  235              thicknessGirderMother/2,thicknessGirderMother/2,dy1GirderMother,dy2GirderMother,heightGirderMother/2);
 
  237     GeoTrd* girderMother = 
new GeoTrd(thicknessGirderMother/2,
 
  238                                       thicknessGirderMother/2,
 
  241                                       heightGirderMother/2);
 
  243     GeoLogVol* lvGirderMother = 
new GeoLogVol(
"GirderMother",girderMother,matAir);
 
  244     PVLink  pvGirderMother = 
new GeoPhysVol(lvGirderMother);
 
  252     GeoTransform* tfGirderMother{
nullptr};
 
  261     mother->add(tfGirderMother);
 
  262     mother->add(pvGirderMother);
 
  270   double thicknessFrontPlate, heightFrontPlate, dy1FrontPlate, dy2FrontPlate;
 
  279       if (thicknessFrontPlate > rless) {
 
  285           (*
m_log) << 
MSG::DEBUG <<
"   FrontPlateSh dX1,dX2= "<<thicknessFrontPlate/2<<
", "<<thicknessFrontPlate/2
 
  286                    <<
" dY1,dY2= "<<dy1FrontPlate<<
" "<<dy2FrontPlate<<
" dZ= "<<heightFrontPlate/2
 
  289         GeoTrd* frontPlateSh = 
new GeoTrd(thicknessFrontPlate/2,
 
  290                                           thicknessFrontPlate/2,
 
  295         GeoLogVol* lvFrontPlateSh = 
new GeoLogVol(
"FrontPlateSh",frontPlateSh,matIron);
 
  296         PVLink  pvFrontPlateSh = 
new GeoPhysVol(lvFrontPlateSh);
 
  297         GeoTransform* tfFrontPlateSh = 
new GeoTransform(GeoTrf::Translate3D(
 
  301         mother->add(tfFrontPlateSh);
 
  302         mother->add(pvFrontPlateSh);
 
  310                                  ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) )) {
 
  312       std::string volname =
"";
 
  313       double dXCutA = 0, dXCutB = 0;
 
  326       GeoTrd* frontPlate = 
new GeoTrd(thicknessFrontPlate/2 -(dXCutA+dXCutB),
 
  327                                       thicknessFrontPlate/2 -(dXCutA+dXCutB),
 
  342       GeoLogVol* lvFrontPlate = 
new GeoLogVol(
"FrontPlate",frontPlate,matIron);
 
  343       PVLink  pvFrontPlate = 
new GeoPhysVol(lvFrontPlate);
 
  344       GeoTransform* tfFrontPlate = 
new GeoTransform(GeoTrf::Translate3D(
 
  348       mother->add(tfFrontPlate);
 
  349       mother->add(pvFrontPlate);
 
  361       GeoTrd* frontPlate = 
new GeoTrd(thicknessFrontPlate/2,
 
  362                                       thicknessFrontPlate/2,
 
  367       GeoLogVol* lvFrontPlate = 
new GeoLogVol(
"FrontPlate",frontPlate,matIron);
 
  368       PVLink  pvFrontPlate = 
new GeoPhysVol(lvFrontPlate);
 
  369       GeoTransform* tfFrontPlate = 
new GeoTransform(GeoTrf::Translate3D(
 
  373       mother->add(tfFrontPlate);
 
  374       mother->add(pvFrontPlate);
 
  379   double dy1EndPlate, dy2EndPlate, thicknessEndPlate, heightEndPlate;
 
  388   GeoIntrusivePtr<GeoTransform> tfEndPlateSh{
nullptr};
 
  402       GeoTrd* endPlateSh = 
new GeoTrd(thicknessEndPlate/2,
 
  407       GeoLogVol* lvEndPlateSh{
nullptr};
 
  410       if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) { 
 
  415         GeoTrd* endPlateShCut = 
new GeoTrd(thicknessEndPlate,
 
  422         double rotationAngle ;
 
  423         double shiftCutPlate ;
 
  424         int rotationSign = 1;
 
  425         if (ModuleNcp > 50) rotationSign *= -1;
 
  426         if ( neg ) rotationSign *= -1;
 
  429         if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) {
 
  433           cutOutTransformation =
 
  434               GeoTrf::Translate3D(0,0, -heightEndPlate/2.) *
 
  436               GeoTrf::Translate3D(0.,0., -rotationSign * (dy2EndPlate + shiftCutPlate ) ) *
 
  437               GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
  439           const GeoShape & endPlateShCutted3760 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
 
  440           lvEndPlateSh = 
new GeoLogVol(
"EndPlateSh", &(endPlateShCutted3760) , matIron);
 
  442         } 
else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) {
 
  446           cutOutTransformation =
 
  447               GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
 
  448               GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate + 0.5*dy2EndPlate*(1.- 
std::cos(rotationAngle*
Gaudi::Units::rad)))  ) *
 
  449               GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
  451           const GeoShape & endPlateShCutted3661 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
 
  452           lvEndPlateSh = 
new GeoLogVol(
"EndPlateSh", &(endPlateShCutted3661) , matIron);
 
  454         } 
else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) {
 
  458           cutOutTransformation =
 
  459               GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
 
  460               GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *
 
  461               GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
  463           const GeoShape & endPlateShCutted3562 = (endPlateSh->subtract( (*endPlateShCut)<< cutOutTransformation ) ) ;
 
  464           lvEndPlateSh = 
new GeoLogVol(
"EndPlateSh", &(endPlateShCutted3562) , matIron);
 
  467           (*m_log) << MSG::ERROR <<
" TileGeoSectionBuilder::fillSection . Wrong Module in cut-out region. ModuleNcp= "<<ModuleNcp<< 
endmsg;
 
  468           lvEndPlateSh = 
new GeoLogVol(
"EndPlateSh", endPlateSh , matIron);
 
  472         lvEndPlateSh = 
new GeoLogVol(
"EndPlateSh", endPlateSh , matIron);
 
  481       PVLink  pvEndPlateSh = 
new GeoPhysVol(lvEndPlateSh);
 
  483       tfEndPlateSh = 
new GeoTransform(GeoTrf::Translate3D(
 
  484                                           specialModuleZShift +
 
  488       mother->add(tfEndPlateSh);
 
  489       mother->add(pvEndPlateSh);
 
  492         (*m_log) << 
MSG::DEBUG <<
" _fillSection: ext.barrel EndPlateSh Ok "<< 
endmsg;
 
  501       GeoTrd* endPlate1 = 
new GeoTrd(thicknessEndPlate/2,
 
  507       GeoLogVol* lvEndPlate1 = 
new GeoLogVol(
"EndPlate1",endPlate1,matIron);
 
  508       PVLink  pvEndPlate1 = 
new GeoPhysVol(lvEndPlate1);
 
  512         GeoTrd* epHole1 = 
new GeoTrd (thicknessEndPlate/2,
 
  518         GeoLogVol* lvEPHole1 = 
new GeoLogVol(
"EPHole1",epHole1,matAir);
 
  519         PVLink  pvEPHole1 = 
new GeoPhysVol(lvEPHole1);
 
  520         GeoTransform* tfEPHole1 = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,
 
  522         pvEndPlate1->add(tfEPHole1);
 
  523         pvEndPlate1->add(pvEPHole1);
 
  526       GeoTransform* tfEndPlate1 = 
new GeoTransform(GeoTrf::Translate3D(
 
  528       mother->add(tfEndPlate1);
 
  529       mother->add(pvEndPlate1);
 
  537   GeoIntrusivePtr<GeoTransform> tfEndPlate2{
nullptr};
 
  541     double radShift =lenPla;
 
  542     double rminbT=rminb + radShift;
 
  550     GeoLogVol* lvEndPlate2{
nullptr};
 
  551     GeoTrd* endPlate2 = 
new GeoTrd(thicknessEndPlate/2,
 
  557     tfEndPlate2 = 
new GeoTransform(GeoTrf::Translate3D(
 
  560     if (sec_number==2 && ((ModuleNcp>=35 && ModuleNcp<=37)||(ModuleNcp>=60 && ModuleNcp<=62)) ) { 
 
  562       GeoTrd* endPlate2Cut = 
new GeoTrd(thicknessEndPlate,
 
  567       double rotationAngle ;
 
  568       double shiftCutPlate ;
 
  569       int rotationSign = 1;
 
  570       if (ModuleNcp > 50) rotationSign *= -1;
 
  571       if ( neg ) rotationSign *= -1;
 
  573       if ( ( ModuleNcp == 37 ) || ( ModuleNcp == 60 ) ) {
 
  577         cutOutTransformation =
 
  578             GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
 
  579             GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *
 
  580             GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
  582         const GeoShape & endPlate2Cutted3760 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
 
  583         lvEndPlate2 = 
new GeoLogVol(
"EndPlate2", &(endPlate2Cutted3760) , matIron);
 
  585       } 
else if ( ( ModuleNcp == 36 ) || ( ModuleNcp == 61 ) ) {
 
  589         cutOutTransformation =
 
  590             GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
 
  591             GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *
 
  592             GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
  594         const GeoShape & endPlate2Cutted3661 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
 
  595         lvEndPlate2 = 
new GeoLogVol(
"EndPlate2", &(endPlate2Cutted3661) , matIron);
 
  597       } 
else if ( ( ModuleNcp == 35 ) || ( ModuleNcp == 62 ) ) {
 
  601         cutOutTransformation =
 
  602             GeoTrf::Translate3D( 0, 0, -heightEndPlate/2. ) *
 
  603             GeoTrf::Translate3D( 0, 0,  - (dy2EndPlate  - shiftCutPlate) ) *
 
  604             GeoTrf::RotateX3D( rotationSign * rotationAngle ) ;
 
  606         const GeoShape & endPlate2Cutted3562 = (endPlate2->subtract( (*endPlate2Cut)<< cutOutTransformation ) ) ;
 
  607         lvEndPlate2 = 
new GeoLogVol(
"EndPlate2", &(endPlate2Cutted3562) , matIron);
 
  619       lvEndPlate2 = 
new GeoLogVol(
"EndPlate2",endPlate2,matIron);
 
  622     PVLink  pvEndPlate2 = 
new GeoPhysVol(lvEndPlate2);
 
  628       GeoTrd* epHole2 = 
new GeoTrd (thicknessEndPlate/2,
 
  634       GeoLogVol* lvEPHole2 = 
new GeoLogVol(
"EPHole2",epHole2,matAir);
 
  635       PVLink  pvEPHole2 = 
new GeoPhysVol(lvEPHole2);
 
  636       GeoTransform* tfEPHole2 = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,
 
  638       pvEndPlate2->add(tfEPHole2);
 
  639       pvEndPlate2->add(pvEPHole2);
 
  642     mother->add(tfEndPlate2);
 
  643     mother->add(pvEndPlate2);
 
  657            thicknessAbsorber/2,thicknessAbsorber/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
  660   double thicknessPeriod =0, thicknessAbsorber1 =0, thicknessAbsorber2 =0, thicknessAbsorber3 =0;
 
  661   double PosAbsor1 =0, PosAbsor2 =0, PosAbsor3 =0;
 
  662   int nA1 =32, nA2 = 0, nA3 =16;
 
  664   GeoTrd *absorber{
nullptr}, *absorber1{
nullptr}, *absorber3{
nullptr};
 
  665   GeoLogVol *lvAbsorber{
nullptr}, *lvAbsorber1{
nullptr}, *lvAbsorber3{
nullptr};
 
  666   PVLink pvAbsorber{
nullptr}, pvAbsorber1{
nullptr}, pvAbsorber3{
nullptr},
 
  667          pvTmp_Absorber1{
nullptr}, pvTmp_Absorber3{
nullptr};
 
  670   switch (sec_number) {
 
  679       thicknessAbsorber1 = nA1*thicknessPeriod;
 
  680       PosAbsor1 = thicknessAbsorber/2 - thicknessAbsorber1/2;
 
  682       thicknessAbsorber2 = nA2*thicknessPeriod;
 
  683       PosAbsor2 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2/2;
 
  685       thicknessAbsorber3 = nA3*thicknessPeriod;
 
  686       PosAbsor3 = thicknessAbsorber/2 - thicknessAbsorber1 - thicknessAbsorber2 - thicknessAbsorber3/2;
 
  689         (*
m_log) << 
MSG::DEBUG <<
" Number of periods per Module: N= "<<nA1+nA2+nA3
 
  690                  << 
" Middle absorber, numbers of periods = "<<nA2
 
  694       absorber1 = 
new GeoTrd(thicknessAbsorber1/2, thicknessAbsorber1/2,
 
  695                              dy1Absorber, dy2Absorber,
 
  698       lvAbsorber1 = 
new GeoLogVol(
"Absorber",absorber1,matIron);
 
  699       pvAbsorber1 = 
new GeoPhysVol(lvAbsorber1);
 
  702       absorber = 
new GeoTrd(thicknessAbsorber2/2, thicknessAbsorber2/2,
 
  703                             dy1Absorber, dy2Absorber,
 
  706       lvAbsorber = 
new GeoLogVol(
"Absorber",absorber,matIron);
 
  707       pvAbsorber = 
new GeoPhysVol(lvAbsorber);
 
  711       absorber3 = 
new GeoTrd(thicknessAbsorber3/2, thicknessAbsorber3/2,
 
  712                              dy1Absorber, dy2Absorber,
 
  715       lvAbsorber3 = 
new GeoLogVol(
"Absorber",absorber3,matIron);
 
  716       pvAbsorber3 = 
new GeoPhysVol(lvAbsorber3);
 
  720         (*m_log) << 
MSG::DEBUG <<
" _fillSection: Ex.Barrel pvAbsorber 1,3 Ok "<< 
endmsg;
 
  726       absorber = 
new GeoTrd(thicknessAbsorber/2, thicknessAbsorber/2,
 
  727                             dy1Absorber, dy2Absorber,
 
  731         lvAbsorber = 
new GeoLogVol(
"Absorber",absorber,matIron);
 
  734         lvAbsorber = 
new GeoLogVol(
"Absorber",absorber,matAir);
 
  736       pvAbsorber = 
new GeoPhysVol(lvAbsorber);
 
  742           (*m_log) << 
MSG::DEBUG <<
" _fillSection: special pvAbsorber made from Air  Ok "<< 
endmsg;
 
  750   double thicknessAbsorberChild;
 
  754   GeoLogVol* lvPeriod{
nullptr};
 
  755   PVLink  pvPeriod{
nullptr};
 
  756   GeoTransform* tfPeriod{
nullptr};
 
  757   GeoSerialTransformer* stPeriod{
nullptr};
 
  759   GeoTrd* absorberChild{
nullptr};
 
  760   GeoLogVol* lvAbsorberChild{
nullptr};
 
  761   PVLink  pvAbsorberChild{
nullptr};
 
  762   GeoTransform* tfAbsorberChild{
nullptr};
 
  765   switch (sec_number) {
 
  775                   << 
", dzglue: " << dzglue << 
" ==> thicknessPeriod: " << thicknessPeriod << 
endmsg;
 
  781                thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
  783       period = 
new GeoTrd(thicknessPeriod/2,
 
  789       lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
  790       pvPeriod = 
new GeoPhysVol(lvPeriod);
 
  800       absorberChild = 
new GeoTrd(thicknessAbsorberChild/2,
 
  801                                  thicknessAbsorberChild/2,
 
  805       lvAbsorberChild = 
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
 
  806       pvAbsorberChild = 
new GeoPhysVol(lvAbsorberChild);
 
  809       GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
 
  810       TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
 
  812                                     (thicknessAbsorberChild - thicknessAbsorber)/2);
 
  814       stPeriod = 
new GeoSerialTransformer(pvPeriod,
 
  818       pvAbsorberChild->add(
new GeoSerialIdentifier(0));
 
  819       pvAbsorberChild->add(stPeriod);
 
  822       tfAbsorberChild = 
new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
 
  823       pvAbsorber->add(tfAbsorberChild);
 
  824       pvAbsorber->add(pvAbsorberChild);
 
  830                thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
  832       period = 
new GeoTrd(thicknessPeriod/2,
 
  837       lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
  838       pvPeriod = 
new GeoPhysVol(lvPeriod);
 
  847       thicknessAbsorberChild = thicknessPeriod;
 
  848       absorberChild = 
new GeoTrd(thicknessAbsorberChild/2,
 
  849                                  thicknessAbsorberChild/2,
 
  853       lvAbsorberChild = 
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
 
  854       pvAbsorberChild = 
new GeoPhysVol(lvAbsorberChild);
 
  857                                     (-thicknessAbsorberChild + thicknessAbsorber)/2);
 
  860       tfPeriod = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
  863       pvAbsorberChild->add(tfPeriod);
 
  864       pvAbsorberChild->add(pvPeriod);
 
  867       tfAbsorberChild = 
new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
 
  868       pvAbsorber->add(tfAbsorberChild);
 
  869       pvAbsorber->add(pvAbsorberChild);
 
  878                   << 
", dzglue: " << dzglue << 
" ==> thicknessPeriod: " << thicknessPeriod << 
endmsg;
 
  881                thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
  883       period = 
new GeoTrd(thicknessPeriod/2,
 
  888       lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
  889       pvPeriod = 
new GeoPhysVol(lvPeriod);
 
  902       GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber1)/2;
 
  903       TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
 
  905                                     (-thicknessAbsorber+thicknessAbsorber1)/2.);
 
  907       stPeriod = 
new GeoSerialTransformer(pvPeriod,&xfReplica1,nA1); 
 
  909       pvAbsorber1->add(
new GeoSerialIdentifier(0));
 
  910       pvAbsorber1->add(stPeriod);
 
  914         if ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) {
 
  916           GeoCutVolAction action1(*CutA, TransCut2);
 
  917           pvAbsorber1->apply(&action1);
 
  918           pvTmp_Absorber1 = action1.getPV();
 
  928       GENFUNCTION periodPos2 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber2)/2;
 
  929       TRANSFUNCTION xfReplica2 = Pow(GeoTrf::TranslateX3D(1.),periodPos2);
 
  931                                     (-thicknessAbsorber+thicknessAbsorber2)/2.+thicknessAbsorber1);
 
  933       stPeriod = 
new GeoSerialTransformer(pvPeriod,&xfReplica2,nA2); 
 
  935       pvAbsorber->add(
new GeoSerialIdentifier(nA1));
 
  936       pvAbsorber->add(stPeriod);
 
  943       GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber3)/2;
 
  944       TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
 
  946                                     (-thicknessAbsorber+thicknessAbsorber3)/2.+thicknessAbsorber2+thicknessAbsorber1);
 
  948       stPeriod = 
new GeoSerialTransformer(pvPeriod,&xfReplica3,nA3); 
 
  950       pvAbsorber3->add(
new GeoSerialIdentifier(nA1+nA2));
 
  951       pvAbsorber3->add(stPeriod);
 
  954         if (ModuleNcp>=60 && ModuleNcp<=62) {
 
  957           GeoCutVolAction action2(*CutB, TransCutL);
 
  958           pvAbsorber3->apply(&action2);
 
  959           pvTmp_Absorber3 = action2.getPV();
 
  963         } 
else if (ModuleNcp>=35 && ModuleNcp<=37) {
 
  966           GeoCutVolAction action3(*CutB, TransCutR);
 
  967           pvAbsorber3->apply(&action3);
 
  968           pvTmp_Absorber3 = action3.getPV();
 
  990                     << 
", dzglue: " << dzglue << 
" ==> thicknessPeriod: " << thicknessPeriod << 
endmsg;
 
  992         checking(
"Period 3 (ITC1 special)", 
true, 4,
 
  993                  thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
  995         period = 
new GeoTrd(thicknessPeriod/2,
 
 1000         lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
 1001         pvPeriod = 
new GeoPhysVol(lvPeriod);
 
 1011         absorberChild = 
new GeoTrd(thicknessAbsorberChild/2,
 
 1012                                    thicknessAbsorberChild/2,
 
 1016         lvAbsorberChild = 
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
 
 1017         pvAbsorberChild = 
new GeoPhysVol(lvAbsorberChild);
 
 1020         GENFUNCTION periodPosITC1sp = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
 
 1021         TRANSFUNCTION xfReplicaITC1sp = Pow(GeoTrf::TranslateX3D(1.),periodPosITC1sp);
 
 1023                                       (thicknessAbsorberChild - thicknessAbsorber)/2);
 
 1025         stPeriod = 
new GeoSerialTransformer(pvPeriod,
 
 1029         pvAbsorberChild->add(
new GeoSerialIdentifier(0));
 
 1030         pvAbsorberChild->add(stPeriod);
 
 1033         tfAbsorberChild = 
new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
 
 1034         pvAbsorber->add(tfAbsorberChild);
 
 1035         pvAbsorber->add(pvAbsorberChild);
 
 1041         checking(
"Period 5 (ITC1 special)", 
true, 4,
 
 1042                  thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
 1044         period = 
new GeoTrd(thicknessPeriod/2,
 
 1049         lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
 1050         pvPeriod = 
new GeoPhysVol(lvPeriod);
 
 1058         thicknessAbsorberChild = thicknessPeriod;
 
 1059         absorberChild = 
new GeoTrd(thicknessAbsorberChild/2,
 
 1060                                    thicknessAbsorberChild/2,
 
 1064         lvAbsorberChild = 
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
 
 1065         pvAbsorberChild = 
new GeoPhysVol(lvAbsorberChild);
 
 1068                                       (-thicknessAbsorberChild + thicknessAbsorber)/2);
 
 1071         tfPeriod = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 1073         pvAbsorberChild->add(tfPeriod);
 
 1074         pvAbsorberChild->add(pvPeriod);
 
 1077         tfAbsorberChild = 
new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
 
 1078         pvAbsorber->add(tfAbsorberChild);
 
 1079         pvAbsorber->add(pvAbsorberChild);
 
 1082           (*m_log) << 
MSG::DEBUG <<
" _fillSection: Absorber (ITC plug special) Ok "<< 
endmsg;
 
 1088                  thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
 1090         period = 
new GeoTrd(thicknessPeriod/2,
 
 1095         lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
 1096         pvPeriod = 
new GeoPhysVol(lvPeriod);
 
 1105         GENFUNCTION periodPos3 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorber)/2;
 
 1106         TRANSFUNCTION xfReplica3 = Pow(GeoTrf::TranslateX3D(1.),periodPos3);
 
 1117         stPeriod = 
new GeoSerialTransformer(pvPeriod,
 
 1121         pvAbsorber->add(
new GeoSerialIdentifier(0));
 
 1122         pvAbsorber->add(stPeriod);
 
 1137                   << 
", dzglue: " << dzglue << 
" ==> thicknessPeriod: " << thicknessPeriod << 
endmsg;
 
 1140                thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
 1142       period = 
new GeoTrd(thicknessPeriod/2,
 
 1147       lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
 1148       pvPeriod = 
new GeoPhysVol(lvPeriod);
 
 1158       absorberChild = 
new GeoTrd(thicknessAbsorberChild/2,
 
 1159                                  thicknessAbsorberChild/2,
 
 1163       lvAbsorberChild = 
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
 
 1164       pvAbsorberChild = 
new GeoPhysVol(lvAbsorberChild);
 
 1167       GENFUNCTION periodPos1 = (thicknessPeriod*(2*periodInd+1)-thicknessAbsorberChild)/2;
 
 1168       TRANSFUNCTION xfReplica1 = Pow(GeoTrf::TranslateX3D(1.),periodPos1);
 
 1170                                     (thicknessAbsorberChild - thicknessAbsorber)/2);
 
 1172       stPeriod = 
new GeoSerialTransformer(pvPeriod,
 
 1176       pvAbsorberChild->add(
new GeoSerialIdentifier(0));
 
 1177       pvAbsorberChild->add(stPeriod);
 
 1180       tfAbsorberChild = 
new GeoTransform(GeoTrf::Translate3D((thicknessAbsorberChild - thicknessAbsorber)/2,0.,0.));
 
 1181       pvAbsorber->add(tfAbsorberChild);
 
 1182       pvAbsorber->add(pvAbsorberChild);
 
 1188                thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
 1190       period = 
new GeoTrd(thicknessPeriod/2,
 
 1195       lvPeriod = 
new GeoLogVol(
"Period",
period,matIron);
 
 1196       pvPeriod = 
new GeoPhysVol(lvPeriod);
 
 1204       thicknessAbsorberChild = thicknessPeriod;
 
 1205       absorberChild = 
new GeoTrd(thicknessAbsorberChild/2,
 
 1206                                  thicknessAbsorberChild/2,
 
 1210       lvAbsorberChild = 
new GeoLogVol(
"AbsorberChild",absorberChild,matAir);
 
 1211       pvAbsorberChild = 
new GeoPhysVol(lvAbsorberChild);
 
 1214                                     (-thicknessAbsorberChild + thicknessAbsorber)/2);
 
 1217       tfPeriod = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 1219       pvAbsorberChild->add(tfPeriod);
 
 1220       pvAbsorberChild->add(pvPeriod);
 
 1223       tfAbsorberChild = 
new GeoTransform(GeoTrf::Translate3D((-thicknessAbsorberChild + thicknessAbsorber)/2,0.,0.));
 
 1224       pvAbsorber->add(tfAbsorberChild);
 
 1225       pvAbsorber->add(pvAbsorberChild);
 
 1242         (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::fillSection: Unexpected section = " 
 1247       thicknessPeriod = thicknessAbsorber; 
 
 1248       MLOG(
DEBUG) << 
"DEFAULT Section -- thicknessAbsorber: " << thicknessAbsorber << 
" ==> thicknessPeriod: " << thicknessPeriod << 
endmsg;
 
 1251                thicknessPeriod/2,thicknessPeriod/2,dy1Absorber,dy2Absorber,heightAbsorber/2);
 
 1255       if (dy1Period <= 0.0 || dy2Period <= 0.0 || dy1Period > dy1Absorber || dy2Period > dy2Absorber || dy1Period >= dy2Period ) {
 
 1256         dy1Period = dy1Absorber;
 
 1257         dy2Period = dy2Absorber;
 
 1260       period = 
new GeoTrd(thicknessPeriod/2,
 
 1266       lvPeriod = 
new GeoLogVol(
"Period",
period,matAluminium); 
 
 1267       pvPeriod = 
new GeoPhysVol(lvPeriod);
 
 1278       tfPeriod = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 1279       pvAbsorber->add(
new GeoIdentifierTag(0));
 
 1280       pvAbsorber->add(tfPeriod);
 
 1281       pvAbsorber->add(pvPeriod);
 
 1284         (*m_log) << 
MSG::DEBUG <<
" _fillSection: Absorber (case default) Ok "<< 
endmsg;
 
 1290   GeoTransform *tfAbsorber{
nullptr}, *tfAbsorber1{
nullptr}, *tfAbsorber3{
nullptr};
 
 1295   if (sec_number==3) {
 
 1298     mother->add(tfAbsorber);
 
 1299     mother->add(pvAbsorber);
 
 1301   } 
else if (sec_number==2) {
 
 1305     tfAbsorber1 = 
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2 - PosAbsor1, 0.,
 
 1307     mother->add(tfAbsorber1);
 
 1308     if (
m_dbManager->
BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
 
 1309       mother->add(pvTmp_Absorber1);
 
 1311       mother->add(pvAbsorber1);
 
 1315       (*m_log) << 
MSG::DEBUG << 
" _fillsection  ext.barrel pvAbsorber1 Ok"<< 
endmsg;
 
 1317     tfAbsorber  = 
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2 - PosAbsor2, 0.,
 
 1319     mother->add(tfAbsorber);
 
 1320     mother->add(pvAbsorber);
 
 1323       (*m_log) << 
MSG::DEBUG << 
" _fillsection  ext.barrel pvAbsorber Ok"<< 
endmsg;
 
 1325     tfAbsorber3 = 
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2 - PosAbsor3, 0.,
 
 1327     mother->add(tfAbsorber3);
 
 1328     if (
m_dbManager->
BoolCuts() && ((ModuleNcp>=35 && ModuleNcp<=37) || (ModuleNcp>=60 && ModuleNcp<=62)) ) {
 
 1329       mother->add(pvTmp_Absorber3);
 
 1331       mother->add(pvAbsorber3);
 
 1335       (*m_log) << 
MSG::DEBUG << 
" _fillsection  ext.barrel pvAbsorber3 Ok"<< 
endmsg;
 
 1338     tfAbsorber = 
new GeoTransform(GeoTrf::Translate3D(dXAbsorber*
Gaudi::Units::cm/2, 0.,
 
 1340     mother->add(tfAbsorber);
 
 1341     mother->add(pvAbsorber);
 
 1353                                        double                   tan_delta_phi_2,
 
 1366   GeoTrd* girderElement{
nullptr};
 
 1367   GeoLogVol* lvGirderElement{
nullptr};
 
 1368   PVLink  pvGirderElement{
nullptr};
 
 1369   GeoTransform* tfGirderElement{
nullptr};
 
 1371   int CurrentGird = 1;
 
 1385     double dy1GirderElement, dy2GirderElement;
 
 1386     if (elementSizeInY >0) {
 
 1387       dy1GirderElement = elementSizeInY/2;
 
 1388       dy2GirderElement = elementSizeInY/2;
 
 1390       dy1GirderElement = (elementRC - elementSizeInR/2) * tan_delta_phi_2;
 
 1391       dy2GirderElement = (elementRC + elementSizeInR/2) * tan_delta_phi_2;
 
 1403         lvGirderElement = 
new GeoLogVol(
"GirderIron",girderElement,matIron);
 
 1408         lvGirderElement = 
new GeoLogVol(
"GirderAluminium",girderElement,matAluminium);
 
 1413         lvGirderElement = 
new GeoLogVol(
"GirderElectronics",girderElement,matElBoard);
 
 1418         (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::FillGirder: unknown material = " 
 1424     pvGirderElement = 
new GeoPhysVol(lvGirderElement);
 
 1425     tfGirderElement = 
new GeoTransform(GeoTrf::Translate3D(0.,
 
 1428     mother->add(tfGirderElement);
 
 1429     mother->add(pvGirderElement);
 
 1441                                        double                   corrected_dz)
 
 1443   bool boolNeg = 
false;
 
 1445   if (ModuleNcp > 99) {
 
 1446     ModuleNcp = ModuleNcp/100;
 
 1492   GeoTrd* fingerElementTrd{
nullptr};
 
 1493   GeoTrap* fingerElementTrap{
nullptr};
 
 1495   GeoBox *fingerCablesL{
nullptr}, *fingerCablesR{
nullptr};
 
 1496   PVLink pvFingerElement{
nullptr}, pvFingerCablesL{
nullptr}, pvFingerCablesR{
nullptr};
 
 1497   GeoLogVol *lvFingerElement{
nullptr}, *lvFingerCablesL{
nullptr}, *lvFingerCablesR{
nullptr};
 
 1498   GeoTransform* tfFingerElement{
nullptr}, *tfFingerCables{
nullptr};
 
 1500   GeoTransform* ZrotateMod{
nullptr};
 
 1501   GeoTransform* yrotateMod{
nullptr};
 
 1502   GeoTransform* zrotateMod{
nullptr};
 
 1504   const GeoMaterial *currentMaterial{
nullptr}, *leftMaterial{
nullptr}, *rightMaterial{
nullptr};
 
 1505   std::string currentName, leftName, rightName;
 
 1507   int CurrentTicg = 100*sec_number + 1;
 
 1509   double AirVolumeShift = 0.0;
 
 1510   double AirVolumeSize = corrected_dz;
 
 1522     if (corrected_dz > 0.) {
 
 1523       if (j-CurrentTicg==0) { 
 
 1524         AirVolumeShift = (elementDz-corrected_dz)/2 - elementZPozition;
 
 1525         AirVolumeSize = elementDz;
 
 1527           (*m_log) << 
MSG::DEBUG << 
"TileFinger: OldAirVolumeCenter ="<<elementZPozition << 
endmsg;
 
 1528           (*m_log) << 
MSG::DEBUG << 
"TileFinger: NewAirVolumeCenter ="<<elementZPozition+AirVolumeShift << 
endmsg;
 
 1529           (*m_log) << 
MSG::DEBUG << 
"TileFinger: AirVolumeShift ="<< AirVolumeShift << 
endmsg;
 
 1530           (*m_log) << 
MSG::DEBUG << 
"TileFinger: AirVolumeSize ="<< AirVolumeSize << 
endmsg;
 
 1534       if (elementZPozition*2-AirVolumeSize<-0.01) { 
 
 1535         elementZPozition += AirVolumeShift; 
 
 1540         elementDz = corrected_dz - AirVolumeSize;
 
 1542           (*m_log) << 
MSG::DEBUG << 
"TileFinger: NewCoverThickness ="<<elementDz << 
endmsg;
 
 1543           (*m_log) << 
MSG::DEBUG << 
"TileFinger: OldCoverCenter ="<<elementZPozition << 
endmsg;
 
 1545         elementZPozition = (corrected_dz-elementDz)/2;
 
 1554         currentMaterial = matIron;
 
 1555         currentName = 
"FingerIron";
 
 1560         currentMaterial = matAluminium;
 
 1561         currentName = 
"FingerAluminum";
 
 1566         currentMaterial = matElBoard;
 
 1567         currentName = 
"FingerElectronics";
 
 1572         (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::fillFinger: unexpected material = " 
 1584       lvFingerElement = 
new GeoLogVol(currentName,fingerElementTrd,currentMaterial);
 
 1594                                       std::atan((elementDy1-elementDy2)/(2.*elementHeight)),
 
 1598                                       std::atan((elementDy1-elementDy2)/(2.*elementHeight)));
 
 1600       lvFingerElement = 
new GeoLogVol(currentName,fingerElementTrap,currentMaterial);
 
 1603       (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::fillFinger: unexpected shape = " 
 1609     pvFingerElement = 
new GeoPhysVol(lvFingerElement);
 
 1610     tfFingerElement = 
new GeoTransform(GeoTrf::Translate3D(elementZPozition*
Gaudi::Units::cm,
 
 1614     mother->add(tfFingerElement);
 
 1616       if (elementOffset<0) {
 
 1618         mother->add(ZrotateMod);
 
 1623       mother->add(yrotateMod);
 
 1624       mother->add(zrotateMod);
 
 1627     mother->add(
new GeoIdentifierTag(ModuleNcp));
 
 1628     mother->add(pvFingerElement);
 
 1631   if (testbeam) 
return; 
 
 1635   int Isector =0, LRflag =0;
 
 1637   if ((ModuleNcp/4 - (
float)ModuleNcp/4) != 0) {
 
 1638     Isector = (
int)ModuleNcp/4;
 
 1640     Isector = (
int)ModuleNcp/4-1;
 
 1642   LRflag = ModuleNcp-4*Isector;
 
 1651   double dXleft =35., dXright = 35.;
 
 1652   double dZleft = elementDz/2, dZright = dZleft;
 
 1653   double dZsaddleL = elementDz/4, dZsaddleR = dZsaddleL;
 
 1657   rightName = leftName = 
"LArCables";
 
 1660     dZright = elementDz, dXright = 35;
 
 1663     rightName = 
"LArService";
 
 1665   } 
else if (LRflag == 4) {
 
 1666     dZleft = elementDz, dXleft = 35;
 
 1669     leftName = 
"LArService";
 
 1672   if (sec_number == 1) {
 
 1673     if ( (ModuleNcp >=40 && ModuleNcp <=41) || (ModuleNcp >=56 && ModuleNcp <=57) ) {
 
 1674       dZright = dZleft = 8.5;
 
 1675       dZsaddleL = dZsaddleR = 13.7;
 
 1676       rightMaterial = leftMaterial = iron;
 
 1677       rightName = leftName = 
"BarrelSaddleSupport";
 
 1681     if ( (ModuleNcp >=39 && ModuleNcp <=42) || (ModuleNcp >=55 && ModuleNcp <=58) ) {
 
 1682       dZright = dZleft = 8.5;
 
 1683       dZsaddleR = dZsaddleL = 13.7;
 
 1684       rightMaterial = leftMaterial = iron;
 
 1685       rightName = leftName = 
"ExtBarrelSaddleSupport";
 
 1690     (*
m_log) << 
MSG::DEBUG << 
" Finger : number= "<<sec_number<<
" ModuleNcp = " <<ModuleNcp<< 
" Sector= "<< Isector
 
 1691              << 
" LRflag= " << LRflag <<
" Neg "<< boolNeg
 
 1694   GeoTransform *rotateY = 
new GeoTransform(GeoTrf::RotateY3D(90*
Gaudi::Units::deg));
 
 1695   GeoTransform *rotateZ = 
new GeoTransform(GeoTrf::RotateZ3D(3*
Gaudi::Units::deg));
 
 1696   GeoTransform *rotateZm = 
new GeoTransform(GeoTrf::RotateZ3D(-3*
Gaudi::Units::deg));
 
 1700   lvFingerCablesL = 
new GeoLogVol(leftName,fingerCablesL,leftMaterial);
 
 1701   pvFingerCablesL = 
new GeoPhysVol(lvFingerCablesL);
 
 1705   lvFingerCablesR = 
new GeoLogVol(rightName,fingerCablesR,rightMaterial);
 
 1706   pvFingerCablesR = 
new GeoPhysVol(lvFingerCablesR);
 
 1708   double YpoFinger =0;
 
 1711     YpoFinger = -elementOffset+5.4;
 
 1713     YpoFinger = elementOffset-5.4;
 
 1719   mother->add(tfFingerCables);
 
 1723     mother->add(rotateY);
 
 1724     mother->add(rotateZm);
 
 1726     mother->add(rotateY);
 
 1727     mother->add(rotateZ);
 
 1730   mother->add(
new GeoIdentifierTag(ModuleNcp));
 
 1731   mother->add(pvFingerCablesL);
 
 1734     YpoFinger = elementOffset-5.4;
 
 1736     YpoFinger = -elementOffset+5.4;
 
 1742   mother->add(tfFingerCables);
 
 1746     mother->add(rotateY);
 
 1747     mother->add(rotateZ);
 
 1749     mother->add(rotateY);
 
 1750     mother->add(rotateZm);
 
 1753   mother->add(
new GeoIdentifierTag(ModuleNcp));
 
 1754   mother->add(pvFingerCablesR);
 
 1761                                        double                    tan_delta_phi_2,
 
 1766   int CurrentScin = 0;
 
 1767   const GeoShape* glue{
nullptr};
 
 1768   GeoLogVol* lvGlue{
nullptr};
 
 1769   PVLink  pvGlue{
nullptr};
 
 1770   GeoTransform* tfGlue{
nullptr};
 
 1772   double scintiWrapInZ, scintiWrapInR, scintiThickness, scintiDeltaInPhi;
 
 1773   double scintiHeight, scintiRC, scintiZPos, dy1Scintillator, dy2Scintillator;
 
 1774   const GeoShape* scintillator{
nullptr};
 
 1775   GeoLogVol* lvScintillator{
nullptr};
 
 1776   PVLink  pvScintillator{
nullptr};
 
 1777   GeoTransform* tfScintillator{
nullptr};
 
 1779   double thicknessWrapper, heightWrapper, dy1Wrapper, dy2Wrapper;
 
 1780   const GeoShape* wrapper{
nullptr};
 
 1781   GeoLogVol* lvWrapper{
nullptr};
 
 1782   PVLink  pvWrapper{
nullptr};
 
 1783   GeoTransform* tfWrapper{
nullptr};
 
 1785   GeoIdentifierTag* idTag{
nullptr};
 
 1805     CurrentScin = 100*2 + 1;
 
 1824   const GeoMaterial* matScin = 
nullptr;
 
 1831       if (matScin != 
nullptr) {
 
 1852   if (dzglue>0.0 && period_type<4 && !removeGlue) {
 
 1856     dzglue2 = floor(dzglue2*1.0
e+10)*1.0e-10;
 
 1869              dzglue2,dzglue2,dy1Glue,dy2Glue,heightGlue2);
 
 1871     glue = 
new GeoTrd(dzglue2,dzglue2,dy1Glue,dy2Glue,heightGlue2);
 
 1876         idTag = 
new GeoIdentifierTag(j-CurrentScin);
 
 1886         GeoShape *air1 = 
new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * 
Gaudi::Units::deg);
 
 1887         GeoShape *air2 = 
new GeoTubs(csTubeOuterR, csHoleR, thicknessMother2, 0.,360.0 * 
Gaudi::Units::deg);
 
 1888         GeoShape *air3 = 
new GeoTubs(0.,      csTubeInnerR, thicknessMother2, 0.,360.0 * 
Gaudi::Units::deg);
 
 1890         GeoLogVol * lvAir1 = 
new GeoLogVol(
"CsTubeAir1",air1,matAir);
 
 1891         GeoLogVol * lvAir2 = 
new GeoLogVol(
"CsTubeAir2",air2,matAir);
 
 1892         GeoLogVol * lvAir3 = 
new GeoLogVol(
"CsTubeAir3",air3,matAir);
 
 1893         GeoPhysVol * pvAir1 = 
new GeoPhysVol(lvAir1);
 
 1894         GeoPhysVol * pvAir2 = 
new GeoPhysVol(lvAir2);
 
 1895         GeoPhysVol * pvAir3 = 
new GeoPhysVol(lvAir3);
 
 1897         GeoTransform* tftube1 = 
new GeoTransform(tfHole1);
 
 1898         GeoTransform* tftube2 = 
new GeoTransform(tfHole2);
 
 1899         GeoTransform* tftube3 = 
new GeoTransform(tfHole2);
 
 1901         mother->add(tftube1);
 
 1902         mother->add(pvAir1);
 
 1903         mother->add(tftube2);
 
 1904         mother->add(pvAir2);
 
 1905         mother->add(tftube3);
 
 1906         mother->add(pvAir3);
 
 1910           glue = 
makeHoles(glue, csHoleR, dzglue2, off, off0);
 
 1914     lvGlue = 
new GeoLogVol(
"Glue",glue,matGlue);
 
 1915     pvGlue = 
new GeoPhysVol(lvGlue);
 
 1918   switch(period_type) {
 
 1928         mother->add(tfGlue);
 
 1929         mother->add(pvGlue);
 
 1933         tfGlue = 
new GeoTransform(GeoTrf::Translate3D(-dzglue/2*
Gaudi::Units::cm,0.,0.));
 
 1934         mother->add(tfGlue);
 
 1935         mother->add(pvGlue);
 
 1940         mother->add(tfGlue);
 
 1941         mother->add(pvGlue);
 
 1945         tfGlue = 
new GeoTransform(GeoTrf::Translate3D((thickness-dzglue)/2*
Gaudi::Units::cm,0.,0.));
 
 1946         mother->add(tfGlue);
 
 1947         mother->add(pvGlue);
 
 1951         idTag = 
new GeoIdentifierTag(j-CurrentScin);
 
 1974                  thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
 
 1976         wrapper = 
new GeoTrd(thicknessWrapper/2,
 
 1985         lvWrapper = 
new GeoLogVol(
"Wrapper",wrapper,matAir);
 
 1986         pvWrapper = 
new GeoPhysVol(lvWrapper);
 
 1994         checking(
"Scintillator 0", 
true, 6,
 
 2006         lvScintillator = 
new GeoLogVol(
"Scintillator",scintillator,matScin);
 
 2007         pvScintillator = 
new GeoPhysVol(lvScintillator);
 
 2010         tfScintillator = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 2011         pvWrapper->add(idTag);
 
 2012         pvWrapper->add(tfScintillator);
 
 2013         pvWrapper->add(pvScintillator);
 
 2017           (*m_log) << 
MSG::VERBOSE <<
" X scintiZPos= "<<scintiZPos;
 
 2026         mother->add(tfWrapper);
 
 2027         mother->add(pvWrapper);
 
 2040         mother->add(tfGlue);
 
 2041         mother->add(pvGlue);
 
 2046         mother->add(tfGlue);
 
 2047         mother->add(pvGlue);
 
 2051         idTag = 
new GeoIdentifierTag(j-CurrentScin);
 
 2074                  thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
 
 2076         wrapper = 
new GeoTrd(thicknessWrapper/2,
 
 2085         lvWrapper = 
new GeoLogVol(
"Wrapper",wrapper,matAir);
 
 2086         pvWrapper = 
new GeoPhysVol(lvWrapper);
 
 2094         checking(
"Scintillator 1", 
true, 6,
 
 2106         lvScintillator = 
new GeoLogVol(
"Scintillator",scintillator,matScin);
 
 2107         pvScintillator = 
new GeoPhysVol(lvScintillator);
 
 2110         tfScintillator = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 2111         pvWrapper->add(idTag);
 
 2112         pvWrapper->add(tfScintillator);
 
 2113         pvWrapper->add(pvScintillator);
 
 2117           (*m_log) << 
MSG::VERBOSE <<
" X scintiZPos= "<<scintiZPos;
 
 2126         mother->add(tfWrapper);
 
 2127         mother->add(pvWrapper);
 
 2139         tfGlue = 
new GeoTransform(GeoTrf::Translate3D((-thickness + dzglue)*
Gaudi::Units::cm/2,0.,0.));
 
 2140         mother->add(tfGlue);
 
 2141         mother->add(pvGlue);
 
 2146         mother->add(tfGlue);
 
 2147         mother->add(pvGlue);
 
 2151         tfGlue = 
new GeoTransform(GeoTrf::Translate3D(dzglue/2*
Gaudi::Units::cm,0.,0.));
 
 2152         mother->add(tfGlue);
 
 2153         mother->add(pvGlue);
 
 2158         mother->add(tfGlue);
 
 2159         mother->add(pvGlue);
 
 2163         idTag = 
new GeoIdentifierTag(j-CurrentScin);
 
 2187                  thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
 
 2189         wrapper = 
new GeoTrd(thicknessWrapper/2,
 
 2198         lvWrapper = 
new GeoLogVol(
"Wrapper",wrapper,matAir);
 
 2199         pvWrapper = 
new GeoPhysVol(lvWrapper);
 
 2207         checking(
"Scintillator 2", 
true, 6,
 
 2219         lvScintillator = 
new GeoLogVol(
"Scintillator",scintillator,matScin);
 
 2220         pvScintillator = 
new GeoPhysVol(lvScintillator);
 
 2223         tfScintillator = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 2224         pvWrapper->add(idTag);
 
 2225         pvWrapper->add(tfScintillator);
 
 2226         pvWrapper->add(pvScintillator);
 
 2230           (*m_log) << 
MSG::VERBOSE <<
" X scintiZPos= "<<scintiZPos;
 
 2239         mother->add(tfWrapper);
 
 2240         mother->add(pvWrapper);
 
 2264           idTag = 
new GeoIdentifierTag(j-CurrentScin);
 
 2273                    thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
 
 2275           wrapper = 
new GeoTrd(thicknessWrapper/2,
 
 2284           lvWrapper = 
new GeoLogVol(
"Wrapper",wrapper,matAir);
 
 2285           pvWrapper = 
new GeoPhysVol(lvWrapper);
 
 2293           checking(
"Scintillator 3", 
true, 6,
 
 2305           lvScintillator = 
new GeoLogVol(
"Scintillator",scintillator,matScin);
 
 2306           pvScintillator = 
new GeoPhysVol(lvScintillator);
 
 2309           tfScintillator = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 2310           pvWrapper->add(idTag);
 
 2311           pvWrapper->add(tfScintillator);
 
 2312           pvWrapper->add(pvScintillator);
 
 2320           tfWrapper = 
new GeoTransform(GeoTrf::Translate3D(0.,
 
 2324           mother->add(tfWrapper);
 
 2325           mother->add(pvWrapper);
 
 2335       double dy1Period = 
period->getYHalfLength1();
 
 2336       double tanphi = (
period->getYHalfLength2()-dy1Period)/
period->getZHalfLength()/2.;
 
 2338         if (std::abs(tanphi-tan_delta_phi_2) > 1.e-5)
 
 2342         idTag = 
new GeoIdentifierTag(j-CurrentScin);
 
 2359         dy1Wrapper = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2. - scintiWrapInR)*tanphi)*
Gaudi::Units::cm;
 
 2360         dy2Wrapper = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2. + scintiWrapInR)*tanphi)*
Gaudi::Units::cm;
 
 2365                  thicknessWrapper/2,thicknessWrapper/2,dy1Wrapper,dy2Wrapper,heightWrapper/2);
 
 2367         wrapper = 
new GeoTrd(thicknessWrapper/2,
 
 2372         lvWrapper = 
new GeoLogVol(
"Wrapper",wrapper,matAir);
 
 2373         pvWrapper = 
new GeoPhysVol(lvWrapper);
 
 2376         dy1Scintillator = dy1Period - thicknessEnvelope + ((scintiRC - scintiHeight/2.)*tanphi - scintiDeltaInPhi)*
Gaudi::Units::cm;
 
 2377         dy2Scintillator = dy1Period - thicknessEnvelope + ((scintiRC + scintiHeight/2.)*tanphi - scintiDeltaInPhi)*
Gaudi::Units::cm;
 
 2379         checking(
"Scintillator 4", 
true, 6,
 
 2387         lvScintillator = 
new GeoLogVol(
"Scintillator",scintillator,matScin);
 
 2388         pvScintillator = 
new GeoPhysVol(lvScintillator);
 
 2391         tfScintillator = 
new GeoTransform(GeoTrf::Translate3D(0.,0.,0.));
 
 2392         pvWrapper->add(idTag);
 
 2393         pvWrapper->add(tfScintillator);
 
 2394         pvWrapper->add(pvScintillator);
 
 2402         tfWrapper = 
new GeoTransform(GeoTrf::Translate3D(0.,
 
 2406         mother->add(tfWrapper);
 
 2407         mother->add(pvWrapper);
 
 2418                                      double X1, 
double X2, 
double Y1, 
double Y2, 
double Z)
 
 2420   double rless = .005; 
 
 2421   std::string Step[8] = {
" ",
 
 2432                << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(4)
 
 2433                <<
"  dX1,dX2= "<<X1<<
" "<<X2
 
 2434                <<
"  dY1,dY2= "<<Y1<<
" "<<Y2
 
 2436                << std::resetiosflags(std::ios::fixed)
 
 2439   if (X1 < rless && X2 < rless) {
 
 2440     (*m_log) << MSG::WARNING <<
" volume "<<
Name<<
" is empty, X1 or X2<0 "<<
endmsg;
 
 2442   if (Y1 < rless && Y2 < rless) {
 
 2443     (*m_log) << MSG::WARNING <<
" volume "<<
Name<<
" is empty, Y1 or Y2<0 "<<
endmsg;
 
 2446     (*m_log) << MSG::WARNING <<
" volume "<<
Name<<
" is empty, Z<0   "<<
endmsg;
 
 2463   int currentSample, etaIndex, nsamp;
 
 2464   std::vector<int> samples;    
 
 2465   std::vector<int> firstScin;  
 
 2466   std::vector<int> lastScin;   
 
 2470   float phi_min, phi_max;
 
 2471   float dphi = 2.0f*
M_PI/64;
 
 2474     phi_max = nphi*dphi/2;
 
 2478     phi_max = nphi * dphi;
 
 2482   float rBarrel[] = {2450., 3020., 3630.};
 
 2483   float drBarrel[] = {300., 840., 380.};
 
 2485   float rExtended[] = {2450., 2870., 3480.};
 
 2486   float drExtended[] = {300., 540., 680.};
 
 2488   float rGap[] = {3215., 3630., 2802.5, 2475.5, 2066., 1646.};
 
 2489   float drGap[] = {450., 380., 313., 341., 478., 362.};
 
 2504   int indHardcoded = 0;
 
 2521   int sign_eta = (
side>0) ? 1 : -1;
 
 2534             (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::fillDescriptor: No TICL structures for detector: " 
 2552             if (currentSample==samples[
index]) 
break;
 
 2553           if (
index==samples.size()) {
 
 2554             samples.push_back(currentSample);
 
 2562       (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::fillDescriptor: No TICL structures for the detector: " 
 2569       etaIndex = samples[
index];
 
 2570       if (etaIndex > nsamp) nsamp = etaIndex;
 
 2574                    eta_min[etaIndex-1],      
 
 2575                    eta_max[etaIndex-1],
 
 2582                  zcenter[etaIndex-1],
 
 2587         rcenter[etaIndex-1] = rBarrel[indHardcoded];
 
 2588         dr[etaIndex-1] = drBarrel[indHardcoded];
 
 2590         rcenter[etaIndex-1] = rExtended[indHardcoded];
 
 2591         dr[etaIndex-1] = drExtended[indHardcoded];
 
 2598                  rcenter[etaIndex-1],
 
 2619         if (etaIndex > nsamp) nsamp = etaIndex;
 
 2621         neta[etaIndex-1] = 1;
 
 2629                    zcenter[etaIndex-1],
 
 2633         rcenter[etaIndex-1] = rGap[indHardcoded];
 
 2634         dr[etaIndex-1] = drGap[indHardcoded];
 
 2641                    rcenter[etaIndex-1],
 
 2656     float rMB[]  = { 676., 254. };
 
 2657     float drMB[] = { 306., 116. };
 
 2661     for (
int ind=0; ind<2; ++ind) {
 
 2664       eta_min[ind] = 2. + ind;
 
 2665       eta_max[ind] = 3. + ind;
 
 2668       rcenter[ind] = rMB[ind];
 
 2669       dr[ind] = drMB[ind];
 
 2675     phi_max = nphi * dphi + phi_min;
 
 2678   descriptor->
set(&*eta_min.begin(),
 
 2697     descriptor->
print();
 
 2714   MLOG(
DEBUG) << 
"TileGeoSectionBuilder::computeCellDim for detector=" 
 2718   std::vector<double> rmins;
 
 2719   std::vector<double> rmaxs;
 
 2720   std::vector<double> zmins;
 
 2721   std::vector<double> zmaxs;
 
 2725   std::vector<int> samples;
 
 2729   unsigned int CurrentScin;
 
 2731   int nSide, nTower, nSample=0;
 
 2732   unsigned int nFirstRow, nLastRow, 
nRows;
 
 2734   double dzCell, dzPeriod;
 
 2736   double zEnd1 =0,zEnd2 =0,zEnd1Lim =0,zEnd2Lim =0;
 
 2739   float minTilesInRow;
 
 2779           tileSize=
round(tileSize);
 
 2783       rmins.push_back(rMin);
 
 2784       rmaxs.push_back(rMax);
 
 2804       zmaxs.push_back(0.);
 
 2816           if (currentSample==samples[
index]) 
break;
 
 2817         if (
index==samples.size()) samples.push_back(currentSample);
 
 2821       (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::computeCellDim: No TICL structures for the detector: " 
 2828       currentSample = samples[
index];
 
 2834           nLastRow = nFirstRow + 2;
 
 2838         nRows = nLastRow - nFirstRow + 1;
 
 2843           for (
unsigned int jj=1; jj<
nRows; jj++) {
 
 2851             dzCell = minTilesInRow * dzPeriod;
 
 2853             dzCell = (minTilesInRow + 0.5) * dzPeriod;
 
 2855           MLOG(
DEBUG) << 
"dzCell: " << dzCell << 
"  minTilesInRow: " << minTilesInRow << 
"  isSquare: " << isSquare << 
"  dzPeriod: " << dzPeriod << 
endmsg;
 
 2857           for (
unsigned int jj=nFirstRow; jj<=nLastRow; jj++)
 
 2858             zmaxs[jj-1] = zmins[jj-1] + dzCell;
 
 2865             int firstC = nLastRow + 1;
 
 2870             for (
unsigned int jj=firstC-nFirstRow+1; jj<=nLastRow-nFirstRow; jj++) {
 
 2878               dzCell = minTilesInRow*dzPeriod;
 
 2880               dzCell = (minTilesInRow + 0.5)*dzPeriod;
 
 2883             MLOG(
DEBUG) << 
"BC - dzCell: " << dzCell << 
"  minTilesInRow: " << minTilesInRow << 
"  isSquare: " << isSquare << 
endmsg;
 
 2885             for (
unsigned int jj=firstC; jj<=nLastRow; jj++)
 
 2886               zmaxs[jj-1] = zmins[jj-1] + dzCell;
 
 2898           for (
unsigned int jj=nFirstRow; jj<=nLastRow; jj++) {
 
 2899             double Zmin=zmins[jj-1];
 
 2900             double Zmax=zmaxs[jj-1];
 
 2903               else if (
Zmin>zEnd2Lim) 
Zmin=zEnd2;
 
 2905               else if (
Zmax>zEnd2Lim) 
Zmax=zEnd2;
 
 2908             cellDim->
addRMin(rmins[jj-1]);
 
 2909             cellDim->
addRMax(rmaxs[jj-1]);
 
 2914               cellDimNeg->addRMin(rmins[jj-1]);
 
 2915               cellDimNeg->addRMax(rmaxs[jj-1]);
 
 2916               cellDimNeg->addZMin(-
Zmax-zShiftNeg);
 
 2917               cellDimNeg->addZMax(-
Zmin-zShiftNeg);
 
 2918               if (jj==nFirstRow || (BCcell && jj==nLastRow))
 
 2919                 MLOG(
DEBUG) << 
"Zmin: " << 
Zmin << 
"  Zmax: " << 
Zmax << 
"  zShiftPos: " << zShiftPos << 
"  zShiftNeg: " << zShiftNeg << 
endmsg;
 
 2922               if (jj==nFirstRow || (BCcell && jj==nLastRow))
 
 2927           for (
unsigned int jj=nFirstRow; jj<=nLastRow; jj++)
 
 2928             zmins[jj-1] = zmaxs[jj-1];
 
 2936           nSample = currentSample - 1;
 
 2944             cellDimNeg->computeVolume();
 
 2954             std::cout << std::setiosflags(std::ios::fixed)
 
 2955                       << std::setw(9) << std::setprecision(2);
 
 2956             std::cout << 
"\n **** Cell dimensions computed for : ";
 
 2957             std::cout << 
"(" << 
detector << 
", " 
 2960                       << nSample << 
")\n";
 
 2961             std::cout << 
" >> CellDim contains " << cellDim->
getNRows() << 
" rows\n";
 
 2962             for (
unsigned int jj=0; jj<cellDim->
getNRows(); jj++)
 
 2963               std::cout << cellDim->
getRMin(jj) << 
" " 
 2964                         << cellDim->
getRMax(jj) << 
" " 
 2965                         << cellDim->
getZMin(jj) << 
" " 
 2966                         << cellDim->
getZMax(jj) << 
"\n";
 
 2970               std::cout << 
" >> CellDimNeg contains " << cellDimNeg->getNRows() << 
" rows\n";
 
 2971               for (
unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++)
 
 2972                 std::cout << cellDimNeg->getRMin(jj) << 
" " 
 2973                           << cellDimNeg->getRMax(jj) << 
" " 
 2974                           << cellDimNeg->getZMin(jj) << 
" " 
 2975                           << cellDimNeg->getZMax(jj) << 
"\n";
 
 2976               std::cout << 
" >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./
Gaudi::Units::cm3) << 
" cm^3\n";
 
 2978             std::cout << 
"\n" << std::resetiosflags(std::ios::fixed);
 
 2985         (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::computeCellDim: No TICL structures in detector: " 
 2995     for (
unsigned int sec=0; sec<2; sec++) { 
 
 3021           if (addPlates && sec)
 
 3028             tileSize=
round(tileSize);
 
 3032         rmins.push_back(rMin);
 
 3033         rmaxs.push_back(rMax);
 
 3052         (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::computeCellDim: Bad return from TILBnscin" << 
endmsg;
 
 3059       for (
unsigned int jj=0; jj<nscin; jj++) {
 
 3062         cellDim->
addZMin(zmins[jj]+zShiftPos);
 
 3063         cellDim->
addZMax(zmaxs[jj]+zShiftPos);
 
 3065         cellDimNeg->addRMin(rmins[jj]);
 
 3066         cellDimNeg->addRMax(rmaxs[jj]);
 
 3067         cellDimNeg->addZMin(-zmaxs[jj]-zShiftNeg);
 
 3068         cellDimNeg->addZMax(-zmins[jj]-zShiftNeg);
 
 3070       MLOG(
DEBUG) << 
"Zmin: " << zmins[0] << 
"  Zmax: " << zmaxs[0] << 
"  zShiftPos: " << zShiftPos << 
"  zShiftNeg: " << zShiftNeg << 
endmsg;
 
 3076       cellDimNeg->computeVolume();
 
 3082         std::cout << std::setiosflags(std::ios::fixed)
 
 3083                   << std::setw(9) << std::setprecision(2);
 
 3084         std::cout << 
"\n **** Cell dimension computed for : ";
 
 3085         std::cout << 
"(" << 
detector << 
", " 
 3088                   << nSample << 
")\n";
 
 3089         std::cout << 
" >> CellDim contains " << cellDim->
getNRows() << 
" rows\n";
 
 3090         for (
unsigned int jj=0; jj<cellDim->
getNRows(); jj++)
 
 3091           std::cout << cellDim->
getRMin(jj) << 
" " 
 3092                     << cellDim->
getRMax(jj) << 
" " 
 3093                     << cellDim->
getZMin(jj) << 
" " 
 3094                     << cellDim->
getZMax(jj) << 
"\n";
 
 3097         std::cout << 
" >> CellDimNeg contains " << cellDimNeg->getNRows() << 
" rows\n";
 
 3098         for (
unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++)
 
 3099           std::cout << cellDimNeg->getRMin(jj) << 
" " 
 3100                     << cellDimNeg->getRMax(jj) << 
" " 
 3101                     << cellDimNeg->getZMin(jj) << 
" " 
 3102                     << cellDimNeg->getZMax(jj) << 
"\n";
 
 3103         std::cout << 
" >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./
Gaudi::Units::cm3) << 
" cm^3\n";
 
 3104         std::cout << 
"\n" << std::resetiosflags(std::ios::fixed);
 
 3109     for (
unsigned int sec=0; sec<2; sec++) { 
 
 3133           if (j==CurrentScin) { 
 
 3135             rMax = rCenter + dR2;
 
 3137             rMin = rCenter - dR2;
 
 3141           rMin = rCenter - dR2;
 
 3142           rMax = rCenter + dR2;
 
 3145         rmins.push_back(rMin);
 
 3146         rmaxs.push_back(rMax);
 
 3154         if (sec==0 && jj==0)
 
 3179         cellDimNeg->computeVolume();
 
 3185           std::cout << std::setiosflags(std::ios::fixed)
 
 3186                     << std::setw(9) << std::setprecision(2);
 
 3187           std::cout << 
"\n **** Cell dimension computed for : ";
 
 3188           std::cout << 
"(" << 
detector << 
", " 
 3191                     << nSample << 
")\n";
 
 3192           std::cout << 
" >> CellDim contains " << cellDim->
getNRows() << 
" rows\n";
 
 3193           for (
unsigned int jj=0; jj<cellDim->
getNRows(); jj++)
 
 3194             std::cout << cellDim->
getRMin(jj) << 
" " 
 3195                       << cellDim->
getRMax(jj) << 
" " 
 3196                       << cellDim->
getZMin(jj) << 
" " 
 3197                       << cellDim->
getZMax(jj) << 
"\n";
 
 3200           std::cout << 
" >> CellDimNeg contains " << cellDimNeg->getNRows() << 
" rows\n";
 
 3201           for (
unsigned int jj=0; jj<cellDimNeg->getNRows(); jj++)
 
 3202             std::cout << cellDimNeg->getRMin(jj) << 
" " 
 3203                       << cellDimNeg->getRMax(jj) << 
" " 
 3204                       << cellDimNeg->getZMin(jj) << 
" " 
 3205                       << cellDimNeg->getZMax(jj) << 
"\n";
 
 3206           std::cout << 
" >> CellNeg Volume is " << cellDimNeg->getVolume()*(1./
Gaudi::Units::cm3) << 
" cm^3\n";
 
 3207           std::cout << 
"\n" << std::resetiosflags(std::ios::fixed);
 
 3242       (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::calculateZ: Unexpected detector: " 
 3276   if (
side<1) zcenter *= -1;
 
 3307         cell = firstScin - 2; 
 
 3314       (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::calculateR: Unexpected detector: " 
 3319   float oldrc = rcenter;
 
 3331         rMax = rcenter + 
dr * 0.5;
 
 3333         rMin = rcenter - 
dr * 0.5;
 
 3335       rcenter = (rMax+rMin) * 0.5;
 
 3350       } 
else if (
cell == -2) { 
 
 3352       } 
else if (firstScin == 1) { 
 
 3373     rcenter = (rMax+rMin)*0.5;
 
 3382     std::cout << std::setiosflags(std::ios::fixed) << std::setw(9) << std::setprecision(2);
 
 3383     std::cout << 
"Detector " << 
detector << 
" sample " << 
sample << 
" old r/dr " << oldrc   << 
" " << olddr << std::endl;
 
 3384     std::cout << 
"Detector " << 
detector << 
" sample " << 
sample << 
" new r/dr " << rcenter << 
" " << 
dr << 
" delta r/dr " << rcenter-oldrc << 
" " << 
dr-olddr << std::endl;
 
 3385     std::cout << std::resetiosflags(std::ios::fixed);
 
 3420             (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::calculateEta: No TICL structures of positive side " 
 3421                      << 
"in Central Barrel for sample: " << 
sample << 
endmsg;
 
 3443         (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::calculateEta: No TICL structures in detector: " 
 3451       (*m_log) << MSG::ERROR << 
"TileGeoSectionBuilder::calculateEta: Unexpected detector: " 
 3480     (*m_log) << MSG::WARNING << 
"TileGeoSectionBuilder::checktransfunc: np is negative!"<<
endmsg;
 
 3484            << std::setprecision (std::numeric_limits<double>::digits10 + 1)
 
 3485            << 
" Absorber center = " << center
 
 3486            << 
"          length = " << absorber
 
 3487            << 
"          period = " << 
period 
 3488            << 
"        nperiods = " << 
np 
 3490   double zC,dZ,z1,z2=-absorber/2.+center;
 
 3491   for (
int i=0; 
i<
np; ++
i) {
 
 3492     zC = (
period*(2*
i+1)-absorber)/2. + center;
 
 3497              << 
i << 
"  z1= " << z1 << 
"  z2= " << z2
 
 3498              << 
"  dist from previous= " << dZ << 
endmsg;
 
 3505   (*m_log) << 
MSG::VERBOSE  << std::setprecision (std::numeric_limits<double>::digits10 + 1)
 
 3512   const  GeoShapeUnion& scintUnion = 
hole->add( *
hole << GeoTrf::Translate3D((off0-off*2.0),0.,0.));
 
 3514   const GeoShape & motherWithHoles = (mother->subtract(scintUnion<<tfHole));
 
 3515   return &motherWithHoles;
 
 3524   const GeoShape & motherWithHoles = (mother->subtract((*hole1)<<tfHole1).subtract((*hole2)<<tfHole2));
 
 3525   return &motherWithHoles;