94 GeoElement *carbon =
new GeoElement(
"Carbon",
"C",6,12.0112*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole);
95 GeoElement *oxygen =
new GeoElement(
"Oxygen",
"O",8,15.9994*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole);
96 GeoElement *argon =
new GeoElement(
"Argon",
"Ar",18,39.948*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole);
97 GeoElement *xenon =
new GeoElement(
"Xenon",
"Xe",54,131.3*GeoModelKernelUnits::gram/GeoModelKernelUnits::mole);
99 GeoMaterial *trtCO2 =
new GeoMaterial(
"trt::CO2", 0.001842*GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3);
100 trtCO2->add(carbon,1);
101 trtCO2->add(oxygen,2);
105 GeoMaterial *trtO2 =
new GeoMaterial(
"trt::O2", 0.001334*GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3);
106 trtO2->add(oxygen,1);
109 GeoMaterial *trtArgon =
new GeoMaterial(
"trt::Argon", 0.001662*GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3);
110 trtArgon->add(argon,1);
113 GeoMaterial *trtXenon =
new GeoMaterial(
"trt::Xenon", 0.005485*GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3);
114 trtXenon->add(xenon,1);
117 GeoMaterial *argonGas =
new GeoMaterial(
"trt::ArCO2O2",0.00165878*GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3);
118 argonGas->add(trtArgon,0.7);
119 argonGas->add(trtCO2,0.27);
120 argonGas->add(trtO2,0.03);
123 GeoMaterial *xenonGas =
new GeoMaterial(
"trt::XeCO2O2",0.00437686*GeoModelKernelUnits::gram / GeoModelKernelUnits::cm3);
124 xenonGas->add(trtXenon,0.7);
125 xenonGas->add(trtCO2,0.27);
126 xenonGas->add(trtO2,0.03);
132 std::map<std::string, GeoFullPhysVol*> mapFPV =
m_sqliteReader->getPublishedNodes<std::string, GeoFullPhysVol*>(
"TRT");
133 std::map<std::string, GeoAlignableTransform*> mapAX =
m_sqliteReader->getPublishedNodes<std::string, GeoAlignableTransform*>(
"TRT");
136 GeoFullPhysVol *pBarrelVol = mapFPV[
"TRTBarrel"];
137 GeoFullPhysVol *pEndCapABPlus = mapFPV[
"TRTEndCapABPlus"];
138 GeoFullPhysVol *pEndCapCPlus = mapFPV[
"TRTEndCapCPlus"];
139 GeoFullPhysVol *pEndCapABMinus = mapFPV[
"TRTEndCapABMinus"];
140 GeoFullPhysVol *pEndCapCMinus = mapFPV[
"TRTEndCapCPlus"];;
149 ATH_MSG_DEBUG(
" Getting primary numbers from the Detector Description Database " );
151 m_data.reset(parameterInterface);
157 std::vector<GeoTrf::Transform3D> shellPosVec;
159 for (
size_t r=0;
r<trtShellPosVecRecordSet->
size();
r++) {
160 const IRDBRecord * trtShellPosVecRecord = (*trtShellPosVecRecordSet)[
r];
161 double xx=trtShellPosVecRecord->
getDouble(
"xx");
162 double xy=trtShellPosVecRecord->
getDouble(
"xy");
163 double xz=trtShellPosVecRecord->
getDouble(
"xz");
165 double yx=trtShellPosVecRecord->
getDouble(
"yx");
166 double yy=trtShellPosVecRecord->
getDouble(
"yy");
167 double yz=trtShellPosVecRecord->
getDouble(
"yz");
169 double zx=trtShellPosVecRecord->
getDouble(
"zx");
170 double zy=trtShellPosVecRecord->
getDouble(
"zy");
171 double zz=trtShellPosVecRecord->
getDouble(
"zz");
173 double dx=trtShellPosVecRecord->
getDouble(
"dx");
174 double dy=trtShellPosVecRecord->
getDouble(
"dy");
175 double dz=trtShellPosVecRecord->
getDouble(
"dz");
177 M(0,0)=xx; M(0,1)=xy; M(0,2)=xz; M(0,3)=dx;
178 M(1,0)=yx; M(1,1)=yy; M(1,2)=yz; M(1,3)=dy;
179 M(2,0)=zx; M(2,1)=zy; M(2,2)=zz; M(2,3)=dz;
180 M(3,0)= 0; M(3,1)= 0; M(3,2)= 0; M(3,3)=1;
181 GeoTrf::Transform3D T;
183 shellPosVec.push_back(T);
187 const TRT_ID *idHelper =
nullptr;
189 if (
detStore()->retrieve(idHelper,
"TRT_ID").isFailure()) {
203 std::string versionTag =
m_data->versionTag;
204 std::string versionName =
"DC2";
205 std::string layout =
"Final";
207 int versionMajorNumber = 2;
208 int versionMinorNumber = 1;
209 int versionPatchNumber = 0;
211 if (
m_data->initialLayout) layout =
"Initial";
216 versionMajorNumber = 3;
217 versionName =
"Rome";
221 if (
m_data->isCosmicRun) {
230 if (!
m_data->oldConfiguration) {
231 versionName =
m_data->versionName;
234 versionMajorNumber = 4;
235 versionMinorNumber = 1;
236 versionPatchNumber = 1;
260 const int AlignmentLevelSubWheel = 1;
261 const int AlignmentLevelModule = 2;
262 const int AlignmentLevelTop = 3;
279 if (pEndCapABMinus) {
300 if (pEndCapABMinus) {
316 for (
unsigned int m=0;m<
m_data->nBarrelRings;m++) {
324 unsigned int nEndcapWheels = 0;
325 if (pEndCapABPlus||pEndCapABMinus) nEndcapWheels +=
m_data->endcapNumberOfAWheels +
m_data->endcapNumberOfBWheels;
326 if (pEndCapCPlus||pEndCapCMinus) nEndcapWheels +=
m_data->endcapNumberOfCWheels;
331 for (
unsigned int w=0;w<
m_detectorManager->getNumerology()->getNEndcapWheels();w++) {
332 unsigned int nlayers;
333 if ( w < m_data->endcapNumberOfAWheels )
334 nlayers =
m_data->endCapNumberOfStrawLayersPerWheelA;
335 else if ( w < (
m_data->endcapNumberOfAWheels +
m_data->endcapNumberOfBWheels ) )
336 nlayers =
m_data->endCapNumberOfStrawLayersPerWheelB;
338 nlayers =
m_data->endCapNumberOfStrawLayersPerWheelC;
349 ATH_MSG_DEBUG(
"Virtual TRT Barrel volume defined by RMin = "<<
m_data->virtualBarrelInnerRadius
350 <<
", Rmax = "<<
m_data->virtualBarrelOuterRadius<<
" Zmax = "<<
m_data->virtualBarrelVolumeLength );
355 GeoAlignableTransform * barrelTransform = mapAX[
"TRTBarrel"];
360 m_detectorManager->addAlignableTransform(AlignmentLevelTop,
id, barrelTransform, pBarrelVol);
366 GeoAlignableTransform * transform = mapAX[
"TRTEndCapABPlus"];
370 m_detectorManager->addAlignableTransform(AlignmentLevelTop,
id, transform, pEndCapABPlus);
373 if (pEndCapABMinus) {
375 GeoAlignableTransform * transform = mapAX[
"TRTEndCapABMinus"];
379 m_detectorManager->addAlignableTransform(AlignmentLevelTop,
id, transform, pEndCapABMinus);
389 GeoFullPhysVol *pCommonEndcapAB[]={pEndCapABPlus,pEndCapABMinus};
390 GeoFullPhysVol *pCommonEndcapC[]={pEndCapCPlus,pEndCapCMinus};
407 std::vector<InDetDD::TRT_BarrelDescriptor *> bDescriptor;
417 for (
size_t iABC=0;iABC<
m_data->nBarrelRings;iABC++) {
419 GeoTrf::Transform3D shellPosition=shellPosVec[iABC];
425 size_t nStrawsWithLargeDeadRegion = 0;
427 for (
size_t iLayer = 0; iLayer<
m_data->barrelNumberOfLayersWithLargeDeadRegion; iLayer++) {
428 nStrawsWithLargeDeadRegion +=
m_data->barrelNumberOfStrawsInStrawLayer[iABC][iLayer];
433 GeoTrf::TranslateX3D Xx(1.0);
434 GeoTrf::TranslateY3D Xy(1.0);
436 GENFUNCTION fx =
ArrayFunction(&
m_data->strawXPosition[iABC][0+nStrawsWithLargeDeadRegion],
437 &
m_data->strawXPosition[iABC][0]+
m_data->barrelNumberOfStrawsInModule[iABC]);
439 GENFUNCTION fy =
ArrayFunction(&
m_data->strawYPosition[iABC][0+nStrawsWithLargeDeadRegion],
440 &
m_data->strawYPosition[iABC][0]+
m_data->barrelNumberOfStrawsInModule[iABC]);
441 TRANSFUNCTION tx1 = Pow(Xx,fx)*Pow(Xy,fy);
447 TRANSFUNCTION tx1All = Pow(Xx,fxAll)*Pow(Xy,fyAll);
455 GeoTrf::Vector3D Align1Global(
m_data->barrelXOfFirstGlobalAlignmentStraw[iABC],
m_data->barrelYOfFirstGlobalAlignmentStraw[iABC], 0);
456 GeoTrf::Vector3D Align2Global(
m_data->barrelXOfSecondGlobalAlignmentStraw[iABC],
m_data->barrelYOfSecondGlobalAlignmentStraw[iABC],0);
457 GeoTrf::Vector3D Align1Local(
m_data->strawXPosition[iABC][0],
m_data->strawYPosition[iABC][0],0);
458 GeoTrf::Vector3D Align2Local(
m_data->strawXPosition[iABC][
m_data->barrelIndexOfSecondGlobalAlignmentStraw[iABC]],
459 m_data->strawYPosition[iABC][
m_data->barrelIndexOfSecondGlobalAlignmentStraw[iABC]],0);
465 GeoTrf::Vector2D local12((Align2Local - Align1Local).
x(),(Align2Local - Align1Local).
y());
466 GeoTrf::Vector2D global12((Align2Global - Align1Global).
x(),(Align2Global - Align1Global).
y());
467 double zrotang = global12.phi()-local12.phi();
471 GeoTrf::Transform3D absStrawXForm = GeoTrf::Translate3D(Align1Global.x(),Align1Global.y(),Align1Global.z())
472 *GeoTrf::RotateZ3D( zrotang )
473 *GeoTrf::Translate3D(-Align1Local.x(),-Align1Local.y(),-Align1Local.z());
479 TRANSFUNCTION tx2=shellPosition.inverse()*absStrawXForm*tx1;
480 TRANSFUNCTION tx2All=shellPosition.inverse()*absStrawXForm*tx1All;
490 double oldx=-999*GeoModelKernelUnits::cm, oldz=-999*GeoModelKernelUnits::cm;
493 while (c< m_data->barrelNumberOfStrawsInModule[iABC] ) {
495 GeoTrf::Vector3D p(0,0,0);
505 if (sqrt((
x-oldx)*(
x-oldx)+ (
z-oldz)*(
z-oldz))> 5*GeoModelKernelUnits::cm) {
509 bDescriptor.back()->setStrawTransformField(
m_detectorManager->barrelTransformField(iABC),c);
516 if((iABC==0)&&(iLayer<=m_data->barrelNumberOfLayersWithLargeDeadRegion )) {
518 double lengthOfActiveGas=
519 (
m_data->barrelLengthOfStraw-
m_data->barrelLengthOfTwister)/2.0 -
m_data->lengthOfDeadRegion-
m_data->barrelLengthOfLargeDeadRegion;
520 double startZOfActiveGas=activeGasZPositionStrawsWithLargeDeadRegion-lengthOfActiveGas/2.0;
521 bDescriptor.back()->strawZPos(activeGasZPositionStrawsWithLargeDeadRegion);
522 bDescriptor.back()->strawZDead(startZOfActiveGas);
523 bDescriptor.back()->strawLength(lengthOfActiveGas);
525 double lengthOfActiveGas=(
m_data->barrelLengthOfStraw-
m_data->barrelLengthOfTwister)/2.0 - 2*
m_data->lengthOfDeadRegion;
526 double startZOfActiveGas=activeGasZPositionNormalStraws-lengthOfActiveGas/2.0;
527 bDescriptor.back()->strawZPos(activeGasZPositionNormalStraws);
528 bDescriptor.back()->strawZDead(startZOfActiveGas);
529 bDescriptor.back()->strawLength(lengthOfActiveGas);
533 bDescriptor.back()->addStraw(
z,
x);
540 std::set<const GeoVPhysVol *> barrelFibreRadiators;
541 std::set<const GeoVPhysVol *> strawPlanes;
544 for (
size_t iMod = 0; iMod<
m_data->nBarrelModulesUsed;iMod++) {
545 GeoFullPhysVol * pShell = mapFPV[
"TRTShell-"+std::to_string(iABC)+
"-"+std::to_string(iMod)];
546 GeoAlignableTransform * xfx1 = mapAX[
"TRTShell-"+std::to_string(iABC)+
"-"+std::to_string(iMod)];
550 GeoVolumeCursor cursor(pShell);
551 while (!cursor.atEnd()) {
552 if (cursor.getVolume()->getLogVol()->getName().find(
"FibreRadiator") != std::string::npos) {
553 barrelFibreRadiators.insert(cursor.getVolume().get());
564 m_detectorManager->addAlignableTransform(AlignmentLevelModule, idModule, xfx1, pShell, pBarrelVol);
577 unsigned int nStrawLayers =
m_detectorManager->getNumerology()->getNBarrelLayers(iABC);
578 for (
unsigned int iStrawLayer=0;iStrawLayer<nStrawLayers; iStrawLayer++) {
580 unsigned int jStrawLayer=iStrawLayer;
581 if (iABC>0) jStrawLayer +=
m_detectorManager->getNumerology()->getNBarrelLayers(0);
582 if (iABC>1) jStrawLayer +=
m_detectorManager->getNumerology()->getNBarrelLayers(1);
599 for (
unsigned int e=0;e<2;e++) {
600 for (
unsigned int iMod=0;iMod<
m_data->nBarrelModulesUsed; iMod++) {
602 for (
unsigned int iABC=0;iABC<
m_data->nBarrelRings;iABC++) {
603 for (
unsigned int s=0;s<
m_detectorManager->getNumerology()->getNBarrelLayers(iABC); s++) {
605 if (prev && current) {
607 current->setPreviousInR(prev);
616 for (
unsigned int e=0;e<2;e++) {
617 for (
unsigned int iABC=0;iABC<
m_data->nBarrelRings;iABC++) {
618 for (
unsigned int s=0;s<
m_detectorManager->getNumerology()->getNBarrelLayers(iABC); s++) {
620 for (
unsigned int iMod=0;iMod<
m_data->nBarrelModulesUsed; iMod++) {
622 if (prev && current) {
624 current->setPreviousInPhi(prev);
628 if (
m_data->nBarrelModulesUsed==
m_data->nBarrelModules) {
632 first->setPreviousInPhi(last);
654 if (!(pEndCapABPlus || pEndCapABMinus || pEndCapCPlus || pEndCapCMinus)){
657 unsigned int firstIndexOfA = 0;
658 unsigned int firstIndexOfB =
m_data->endcapNumberOfAWheels;
659 unsigned int firstIndexOfC =
m_data->endcapNumberOfAWheels +
m_data->endcapNumberOfBWheels;
661 unsigned int indexUpperBound = firstIndexOfA +
m_detectorManager->getNumerology()->getNEndcapWheels();
663 if (
m_data->initialLayout) indexUpperBound = firstIndexOfC;
665 const unsigned int nSides = 2;
666 const unsigned int nStrawLayMaxEc = 8;
668 unsigned int iiSide, iiWheel, iiPlane, iiPhi, counter;
669 GeoFullPhysVol *childPlane =
nullptr;
672 double RotationsOfStrawPlanes[nStrawLayMaxEc];
673 double shiftForEachRotation =
m_data->endCapShiftForEachRotation;
674 RotationsOfStrawPlanes[0] = 0.;
676 bool oldGeometry =
true;
678 if (shiftForEachRotation < 0) oldGeometry =
false;
682 for (counter = 1; counter < nStrawLayMaxEc; counter++)
684 RotationsOfStrawPlanes[counter] = RotationsOfStrawPlanes[counter-1] + shiftForEachRotation;
685 if (RotationsOfStrawPlanes[counter] >= 1.)
686 RotationsOfStrawPlanes[counter] -= 1.;
690 double RotationsOfStrawPlanesTmp[nStrawLayMaxEc] = {0,0,0,0,2,2,2,2};
691 for (counter = 0; counter < nStrawLayMaxEc; counter++)
693 RotationsOfStrawPlanes[counter] = (counter * shiftForEachRotation) + RotationsOfStrawPlanesTmp[counter];
698 std::vector<InDetDD::TRT_EndcapDescriptor*> descriptorsAB[nSides][nStrawLayMaxEc];
699 std::vector<InDetDD::TRT_EndcapDescriptor*> descriptorsC[nSides][nStrawLayMaxEc];
703 for(iiSide = 0; iiSide<nSides; iiSide++) {
704 for(iiPlane = 0; iiPlane < nStrawLayMaxEc; iiPlane++) {
705 descriptorsAB[iiSide][iiPlane].resize (
m_data->nEndcapPhi);
706 descriptorsC[iiSide][iiPlane].resize (
m_data->nEndcapPhi);
713 if (pEndCapABPlus || pEndCapABMinus) {
722 double deltaPhiForStrawsA = 360.*GeoModelKernelUnits::deg/
m_data->endcapNumberOfStrawsInStrawLayer_AWheels;
757 for(iiSide=0; iiSide<nSides; iiSide++) {
759 if (pCommonEndcapAB[iiSide]) {
761 for(iiWheel=firstIndexOfA; iiWheel < firstIndexOfB; iiWheel++)
765 GeoFullPhysVol* pWheelA = mapFPV[
"TRTWheelA-"
766 +std::to_string(iiSide)+
"-"
767 +std::to_string(iiWheel)];
769 GeoAlignableTransform * xfAlignableModule =
nullptr;
772 for (iiPlane = 0; iiPlane <
m_data->endCapNumberOfStrawLayersPerWheelA; iiPlane++)
778 if (iiPlane % 4 == 0) {
780 int barrel_ec = (iiSide) ? -2 : +2;
781 xfAlignableModule = mapAX[
"TRTWheelA-StrawPlane-"
782 +std::to_string(iiSide)+
"-"
783 +std::to_string(iiWheel)+
"-"
784 +std::to_string(iiPlane)];
789 m_detectorManager->addAlignableTransform(AlignmentLevelSubWheel, idSubModule, xfAlignableModule, pWheelA);
793 double phiPlane =
m_data->endCapPhiOfFirstStraw + RotationsOfStrawPlanes[iiPlane%nStrawLayMaxEc]*deltaPhiForStrawsA;
796 if(iiSide && oldGeometry && (iiPlane%8 == 0)) {
797 phiPlane += deltaPhiForStrawsA;
801 int bar_ec = (iiSide) ? -2 : +2;
802 TRT_Identifier = idHelper->
straw_id(bar_ec, 1, iiWheel, 1, 1);
807 childPlane = mapFPV[
"TRTWheelA-StrawPlane-"
808 +std::to_string(iiSide)+
"-"
809 +std::to_string(iiWheel)+
"-"
810 +std::to_string(iiPlane)];
816 if(iiWheel==firstIndexOfA && iiPlane < nStrawLayMaxEc)
817 for(iiPhi = 0; iiPhi <
m_data->nEndcapPhi; iiPhi++)
823 pDescriptor->
nStraws() =
m_data->endcapNumberOfStrawsInStrawLayer_AWheels/
m_data->nEndcapPhi;
824 pDescriptor->
strawPitch() = deltaPhiForStrawsA;
826 double startPhi = phiPlane + iiPhi * pDescriptor->
strawPitch() * pDescriptor->
nStraws();
833 startPhi = GeoModelKernelUnits::pi - (startPhi + pDescriptor->
strawPitch() * (pDescriptor->
nStraws() - 1));
837 if (startPhi <= -GeoModelKernelUnits::pi) startPhi += 2*GeoModelKernelUnits::pi;
838 if (startPhi > GeoModelKernelUnits::pi) startPhi -= 2*GeoModelKernelUnits::pi;
842 pDescriptor->
strawLength() =
m_data->endCapOuterRadiusOfSupportA -
m_data->endCapRadialThicknessOfOuterSupportA
843 - 2*
m_data->lengthOfDeadRegion -
m_data->endCapRadialThicknessOfInnerSupportA -
m_data->endCapInnerRadiusOfSupportA;
844 pDescriptor->
innerRadius() =
m_data->endCapInnerRadiusOfSupportA +
m_data->endCapRadialThicknessOfInnerSupportA
845 +
m_data->lengthOfDeadRegion;
848 descriptorsAB[iiSide][iiPlane%nStrawLayMaxEc][iiPhi] = pDescriptor;
851 for(iiPhi = 0; iiPhi <
m_data->nEndcapPhi; iiPhi++)
857 int iiPhiOffline = (iiSide==0) ? iiPhi : (3*
m_data->nEndcapPhi/2 - iiPhi - 1)%
m_data->nEndcapPhi;
859 descriptorsAB[iiSide][iiPlane%nStrawLayMaxEc][iiPhi],
872 GeoAlignableTransform * xfWheel = mapAX[
"TRTWheelA-"
873 +std::to_string(iiSide)+
"-"
874 +std::to_string(iiWheel)];
877 int barrel_ec = (iiSide) ? -2 : +2;
879 m_detectorManager->addAlignableTransform(AlignmentLevelModule, idModule, xfWheel, pWheelA);
892 for(iiSide=0; iiSide<nSides; iiSide++) {
895 if (pCommonEndcapAB[iiSide]) {
896 for(iiWheel=firstIndexOfB; iiWheel < firstIndexOfC; iiWheel++)
899 GeoFullPhysVol* pWheelB = mapFPV[
"TRTWheelB-"
900 +std::to_string(iiSide)+
"-"
901 +std::to_string(iiWheel)];
903 GeoAlignableTransform * xfAlignableModule =
nullptr;
906 for (iiPlane = 0; iiPlane <
m_data->endCapNumberOfStrawLayersPerWheelB; iiPlane++)
913 if (iiPlane % 4 == 0) {
915 int barrel_ec = (iiSide) ? -2 : +2;
916 xfAlignableModule = mapAX[
"TRTWheelB-StrawPlane-"
917 +std::to_string(iiSide)+
"-"
918 +std::to_string(iiWheel)+
"-"
919 +std::to_string(iiPlane)];
926 m_detectorManager->addAlignableTransform(AlignmentLevelSubWheel, idSubModule, xfAlignableModule, pWheelB);
930 int bar_ec = (iiSide) ? -2 : +2;
931 TRT_Identifier = idHelper->
straw_id(bar_ec, 1, iiWheel, 1, 1);
935 childPlane = mapFPV[
"TRTWheelB-StrawPlane-"
936 +std::to_string(iiSide)+
"-"
937 +std::to_string(iiWheel)+
"-"
938 +std::to_string(iiPlane)];
944 for(iiPhi = 0; iiPhi <
m_data->nEndcapPhi; iiPhi++)
950 int iiPhiOffline = (iiSide==0) ? iiPhi : (3*
m_data->nEndcapPhi/2 - iiPhi - 1)%
m_data->nEndcapPhi;
952 descriptorsAB[iiSide][iiPlane%nStrawLayMaxEc][iiPhi],
964 GeoAlignableTransform * xfWheel = mapAX[
"TRTWheelB-"
965 +std::to_string(iiSide)+
"-"
966 +std::to_string(iiWheel)];
968 int barrel_ec = (iiSide) ? -2 : +2;
970 m_detectorManager->addAlignableTransform(AlignmentLevelModule, idModule, xfWheel, pWheelB);
979 if (pEndCapCPlus || pEndCapCMinus) {
984 double deltaPhiForStrawsC = 360.*GeoModelKernelUnits::deg/
m_data->endcapNumberOfStrawsInStrawLayer_CWheels;
986 for(iiSide=0; iiSide<nSides; iiSide++) {
988 if (pCommonEndcapC[iiSide]) {
989 for(iiWheel=firstIndexOfC; iiWheel < indexUpperBound; iiWheel++)
991 GeoFullPhysVol* pWheelC = mapFPV[
"TRTWheelC-"
992 +std::to_string(iiSide)+
"-"
993 +std::to_string(iiWheel)];
998 for (iiPlane = 0; iiPlane <
m_data->endCapNumberOfStrawLayersPerWheelC; iiPlane++)
1001 double phiPlane =
m_data->endCapPhiOfFirstStraw + RotationsOfStrawPlanes[iiPlane%nStrawLayMaxEc]*deltaPhiForStrawsC;
1004 if(iiSide && oldGeometry && (iiPlane%8 == 0)) {
1005 phiPlane += deltaPhiForStrawsC;
1010 childPlane = mapFPV[
"TRTWheelC-StrawPlane-"
1011 +std::to_string(iiSide)+
"-"
1012 +std::to_string(iiWheel)+
"-"
1013 +std::to_string(iiPlane)];
1018 if(iiWheel==firstIndexOfC && iiPlane < nStrawLayMaxEc)
1019 for(iiPhi = 0; iiPhi <
m_data->nEndcapPhi; iiPhi++)
1024 pDescriptor->
nStraws() =
m_data->endcapNumberOfStrawsInStrawLayer_CWheels/
m_data->nEndcapPhi;
1025 pDescriptor->
strawPitch() = deltaPhiForStrawsC;
1028 double startPhi = phiPlane + iiPhi * pDescriptor->
strawPitch() * pDescriptor->
nStraws();
1033 startPhi = GeoModelKernelUnits::pi - (startPhi + pDescriptor->
strawPitch() * (pDescriptor->
nStraws() - 1));
1037 if (startPhi <= -GeoModelKernelUnits::pi) startPhi += 2*GeoModelKernelUnits::pi;
1038 if (startPhi > GeoModelKernelUnits::pi) startPhi -= 2*GeoModelKernelUnits::pi;
1041 pDescriptor->
startPhi() = startPhi;
1043 pDescriptor->
strawLength() =
m_data->endCapOuterRadiusOfSupportC -
m_data->endCapRadialThicknessOfOuterSupportC
1044 - 2*
m_data->lengthOfDeadRegion -
m_data->endCapRadialThicknessOfInnerSupportC -
m_data->endCapInnerRadiusOfSupportC;
1045 pDescriptor->
innerRadius() =
m_data->endCapInnerRadiusOfSupportC +
m_data->endCapRadialThicknessOfInnerSupportC +
m_data->lengthOfDeadRegion;
1049 descriptorsC[iiSide][iiPlane%nStrawLayMaxEc][iiPhi] = pDescriptor;
1053 for(iiPhi = 0; iiPhi <
m_data->nEndcapPhi; iiPhi++)
1059 int iiPhiOffline = (iiSide==0) ? iiPhi : (3*
m_data->nEndcapPhi/2 - iiPhi - 1)%
m_data->nEndcapPhi;
1061 descriptorsC[iiSide][iiPlane%nStrawLayMaxEc][iiPhi],
1074 GeoAlignableTransform * xfWheel = mapAX[
"TRTWheelC-"
1075 +std::to_string(iiSide)+
"-"
1076 +std::to_string(iiWheel)];
1079 int barrel_ec = (iiSide) ? -2 : +2;
1081 m_detectorManager->addAlignableTransform(AlignmentLevelModule, idModule, xfWheel, pWheelC);
1092 for (iiSide=0; iiSide<2; iiSide++)
1093 for(iiPhi=0; iiPhi<
m_data->nEndcapPhi; iiPhi++)
1096 for (iiWheel=0; iiWheel<indexUpperBound; iiWheel++)
1097 for (iiPlane=0; iiPlane<
m_detectorManager->getNumerology()->getNEndcapLayers(iiWheel); iiPlane++)
1100 if (prev && current)
1103 current->setPreviousInZ(prev);