From 32e896171b4716e523206dfe36fb75866a8b564c Mon Sep 17 00:00:00 2001 From: Sunanda Date: Wed, 21 Apr 2021 22:42:03 +0200 Subject: [PATCH] Correct EB geometry and numbering scheme (backport #33339 and #33471) --- .../interface/EcalBarrelNumberingScheme.h | 4 + .../plugins/dd4hep/DDEcalBarrelNewAlgo.cc | 688 +++++++++--------- .../src/EcalBarrelNumberingScheme.cc | 29 +- 3 files changed, 360 insertions(+), 361 deletions(-) diff --git a/Geometry/EcalCommonData/interface/EcalBarrelNumberingScheme.h b/Geometry/EcalCommonData/interface/EcalBarrelNumberingScheme.h index 5e55a5bbcfd8f..c600cb5c29978 100644 --- a/Geometry/EcalCommonData/interface/EcalBarrelNumberingScheme.h +++ b/Geometry/EcalCommonData/interface/EcalBarrelNumberingScheme.h @@ -6,12 +6,16 @@ #define EcalBarrelNumberingScheme_h #include "Geometry/EcalCommonData/interface/EcalNumberingScheme.h" +#include class EcalBarrelNumberingScheme : public EcalNumberingScheme { public: EcalBarrelNumberingScheme(); ~EcalBarrelNumberingScheme() override; uint32_t getUnitID(const EcalBaseNumber& baseNumber) const override; + +private: + std::pair numbers(const std::string&) const; }; #endif diff --git a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc index 636a7357a2a0d..321673184ae79 100644 --- a/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc +++ b/Geometry/EcalCommonData/plugins/dd4hep/DDEcalBarrelNewAlgo.cc @@ -920,7 +920,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // Supermodule parent------------------------------------------------------------ const string spmcut1ddname((0 != spm.cutShow) ? spm.name : (spm.name + "CUT1")); - Solid ddspm = Polycone(spmcut1ddname, spm.lowPhi, spm.delPhi, spm.vecRMin, spm.vecRMax, spm.vecZPts); + #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << spmcut1ddname << " PolyCone from " << convertRadToDeg(spm.lowPhi) << " to " << convertRadToDeg(spm.lowPhi + spm.delPhi) << " with " << spm.vecZPts.size() @@ -936,13 +936,6 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext array cutBoxParms{{1.05 * (spm.vecRMax[indx] - spm.vecRMin[indx]) * 0.5, 0.5 * spm.cutThick, fabs(spm.vecZPts.back() - spm.vecZPts.front()) * 0.5 + 1.0 * dd4hep::mm}}; - Solid spmCutBox = Box(spm.cutName, cutBoxParms[0], cutBoxParms[1], cutBoxParms[2]); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << spm.cutName << " Box " << cms::convert2mm(cutBoxParms[0]) << ":" - << cms::convert2mm(cutBoxParms[1]) << ":" << cms::convert2mm(cutBoxParms[2]); - -#endif - Volume spmCutLog = Volume(spm.cutName, spmCutBox, ns.material(spm.mat)); // Supermodule side platess array sideParms{{0.5 * spm.sideHigh, 0.5 * spm.sideThick, 0.5 * fabs(spm.vecZPts[1] - spm.vecZPts[0])}}; @@ -953,12 +946,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #endif Volume sideLog = Volume(spm.sideName, sideSolid, ns.material(spm.sideMat)); - Solid temp1; - Solid temp2; Position sideddtra1; Position sideddtra2; - Transform3D alltrot1; - Transform3D alltrot2; for (unsigned int icopy(1); icopy <= 2; ++icopy) { const std::vector& tvec(1 == icopy ? spm.vecCutTM : spm.vecCutTP); double rang(1 == icopy ? spm.cutRM : spm.cutRP); @@ -969,26 +958,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext RotationZ ro1(ang); const Position tr1( 0.5 * (spm.vecRMax[indx] + spm.vecRMin[indx]), 0, 0.5 * (spm.vecZPts.front() + spm.vecZPts.back())); - Transform3D alltrot(Transform3D(Transform3D(ro1 * tr1) * tr) * ro); - if (1 == icopy) { - alltrot1 = alltrot; - temp1 = SubtractionSolid(spm.name + "_T1", ddspm, spmCutBox, alltrot); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << (spm.name + "_T1") << " Subtraction " << ddspm.name() << ":" << spmCutBox.name() - << " at (" << cms::convert2mm(alltrot.Translation().Vect().x()) << "," - << cms::convert2mm(alltrot.Translation().Vect().y()) << "," - << cms::convert2mm(alltrot.Translation().Vect().z()) << ")"; -#endif - } else { - alltrot2 = alltrot; - temp2 = SubtractionSolid(spm.name, temp1, spmCutBox, alltrot); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << spm.name << " Subtraction " << temp1.name() << ":" << spmCutBox.name() << " at (" - << cms::convert2mm(alltrot.Translation().Vect().x()) << "," - << cms::convert2mm(alltrot.Translation().Vect().y()) << "," - << cms::convert2mm(alltrot.Translation().Vect().z()) << ")"; -#endif - } + const Tl3D trSide(tvec[0], tvec[1] + (1 == icopy ? 1. : -1.) * (cutBoxParms[1] + sideParms[1]) + (1 == icopy ? spm.sideYOffM : spm.sideYOffP), @@ -1002,32 +972,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Position sideddtra(sideRot.getTranslation()); 1 == icopy ? sideddtra1 = sideddtra : sideddtra2 = sideddtra; } - Volume spmLog = Volume(spm.name, ((0 != spm.cutShow) ? ddspm : temp2), ns.material(spm.mat)); - if (0 != spm.cutShow) { - spmLog.placeVolume(spmCutLog, 1, alltrot1); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << spmCutLog.name() << ":1 positioned in " << spmLog.name() << " at (" - << cms::convert2mm(alltrot1.Translation().Vect().x()) << "," - << cms::convert2mm(alltrot1.Translation().Vect().y()) << "," - << cms::convert2mm(alltrot1.Translation().Vect().z()) << ") with rotation"; -#endif - spmLog.placeVolume(spmCutLog, 1, alltrot2); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << spmCutLog.name() << ":1 positioned in " << spmLog.name() << " at (" - << cms::convert2mm(alltrot2.Translation().Vect().x()) << "," - << cms::convert2mm(alltrot2.Translation().Vect().y()) << "," - << cms::convert2mm(alltrot2.Translation().Vect().z()) << ") with rotation"; -#endif - } - spmLog.placeVolume(sideLog, 1, Transform3D(ns.rotation(spm.sideName + std::to_string(1)), sideddtra1)); + + ns.addAssembly(spm.name); + ns.assembly(spm.name).placeVolume( + sideLog, 1, Transform3D(ns.rotation(spm.sideName + std::to_string(1)), sideddtra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << sideLog.name() << ":1 positioned in " << spmLog.name() << " at (" + edm::LogVerbatim("EBGeomX") << sideLog.name() << ":1 positioned in " << spm.name << " at (" << cms::convert2mm(sideddtra1.x()) << "," << cms::convert2mm(sideddtra1.y()) << "," << cms::convert2mm(sideddtra1.z()) << ") with rotation"; #endif - spmLog.placeVolume(sideLog, 2, Transform3D(ns.rotation(spm.sideName + std::to_string(2)), sideddtra2)); + ns.assembly(spm.name).placeVolume( + sideLog, 2, Transform3D(ns.rotation(spm.sideName + std::to_string(2)), sideddtra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << sideLog.name() << ":2 positioned in " << spmLog.name() << " at (" + edm::LogVerbatim("EBGeomX") << sideLog.name() << ":2 positioned in " << ns.assembly(spm.name).name() << " at (" << cms::convert2mm(sideddtra2.x()) << "," << cms::convert2mm(sideddtra2.y()) << "," << cms::convert2mm(sideddtra2.z()) << ") with rotation"; #endif @@ -1060,11 +1017,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (spm.vecHere[iphi] != 0) { // convert from CLHEP to Position & etc. Position myTran(both.getTranslation().x(), both.getTranslation().y(), both.getTranslation().z()); - barVolume.placeVolume(spmLog, iphi + 1, Transform3D(rota, myTran)); + barVolume.placeVolume(ns.assembly(spm.name), iphi + 1, Transform3D(rota, myTran)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << spmLog.name() << ":" << (iphi + 1) << " positioned in " << barVolume.name() - << " at (" << cms::convert2mm(myTran.x()) << "," << cms::convert2mm(myTran.y()) - << "," << cms::convert2mm(myTran.z()) << ") with rotation"; + edm::LogVerbatim("EBGeomX") << ns.assembly(spm.name).name() << ":" << (iphi + 1) << " positioned in " + << barVolume.name() << " at (" << cms::convert2mm(myTran.x()) << "," + << cms::convert2mm(myTran.y()) << "," << cms::convert2mm(myTran.z()) + << ") with rotation"; #endif } } @@ -1089,10 +1047,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << convertRadToDeg(ily.phiLow) << ":" << convertRadToDeg(ily.delPhi); #endif Volume ilyLog = Volume(ily.name, ilySolid, ns.material(spm.mat)); - spmLog.placeVolume(ilyLog, copyOne, Position(0, 0, ilyLengthHalf)); + ns.assembly(spm.name).placeVolume(ilyLog, copyOne, Position(0, 0, ilyLengthHalf)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << ilyLog.name() << ":" << copyOne << " positioned in " << spmLog.name() << " at (0,0," - << cms::convert2mm(ilyLengthHalf) << ") with no rotation"; + edm::LogVerbatim("EBGeomX") << ilyLog.name() << ":" << copyOne << " positioned in " << ns.assembly(spm.name).name() + << " at (0,0," << cms::convert2mm(ilyLengthHalf) << ") with no rotation"; #endif Volume ilyPipeLog[200]; if (0 != ily.pipeHere) { @@ -1103,8 +1061,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0, // rmin ily.pipeODHalf, // rmax ily.vecIlyPipeLengthHalf[iPipeType], // dz - 0_deg, // startPhi - 360_deg); // startPhi + deltaPhi + 0._deg, // startPhi + 360._deg); // startPhi + deltaPhi #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << pName << " Tubs " << cms::convert2mm(ily.vecIlyPipeLengthHalf[iPipeType]) << ":0:" << cms::convert2mm(ily.pipeODHalf) << ":0:360"; @@ -1116,8 +1074,8 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0, // rmin 0.5 * ily.pipeID, // rmax ily.vecIlyPipeLengthHalf[iPipeType], // dz - 0_deg, // startPhi - 360_deg); // startPhi + deltaPhi + 0._deg, // startPhi + 360._deg); // startPhi + deltaPhi #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << pWaName << " Tubs " << cms::convert2mm(ily.vecIlyPipeLengthHalf[iPipeType]) << ":0:" << cms::convert2mm(0.5 * ily.pipeID) << ":0:360"; @@ -1233,7 +1191,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext ++fanOutCopy; xilyLog.placeVolume(ilyFanOutLog, fanOutCopy, - Transform3D(RotationZ(phi) * RotationY(180_deg), + Transform3D(RotationZ(phi) * RotationY(180._deg), Position(xx, yy, ily.vecIlyFanOutZ[ilyFO] - ilyLengthHalf))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") @@ -1284,7 +1242,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext xilyLog.placeVolume( ilyPipeLog[type], copyNum[type], - Transform3D(Rotation3D(ROOT::Math::AxisAngle(ROOT::Math::AxisAngle::XYZVector(xx, yy, 0), 90_deg)), + Transform3D(Rotation3D(ROOT::Math::AxisAngle(ROOT::Math::AxisAngle::XYZVector(xx, yy, 0), 90._deg)), Position(xx, yy, zz))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << ilyPipeLog[type].name() << ":" << copyNum[type] << " positioned in " @@ -1318,9 +1276,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << cms::convert2mm(cro[k]); #endif Volume clyrLog = Volume(clyrName, clyrSolid, ns.material(ily.vecIlyMat[4])); - spmLog.placeVolume(clyrLog, copyOne); + ns.assembly(spm.name).placeVolume(clyrLog, copyOne); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << clyrLog.name() << ":" << copyOne << " positioned in " << spmLog.name() + edm::LogVerbatim("EBGeomX") << clyrLog.name() << ":" << copyOne << " positioned in " << ns.assembly(spm.name).name() << " at (0,0,0) with no rotation"; #endif // Begin Alveolar Wedge parent ------------------------------------------------------ @@ -1356,13 +1314,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * H_hawR, //double aHalfLengthYNegZ , // h1, H/2 0.5 * h_hawR, //double aHalfLengthYPosZ , // h2, h/2 0.5 * L_hawR, //double aHalfLengthZ , // dz, L/2 - 90_deg, //double aAngleAD , // alfa1 + 90._deg, //double aAngleAD , // alfa1 0, //double aCoord15X , // x15 0 //double aCoord15Y // y15 ); string hawRName1(alvWedge.hawRName + "1"); - Solid hawRSolid1 = mytrap(hawRName1, trapHAWR); const double al1_fawR(atan((B_hawR - a_hawR) / H_hawR) + M_PI_2); @@ -1389,7 +1346,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // HAW cut box to cut off back end of wedge const string hawCutName(alvWedge.hawRName + "CUTBOX"); array hawBoxParms{{0.5 * b_hawR + hawBoxClr, 0.5 * alvWedge.hawRCutY, 0.5 * alvWedge.hawRCutZ}}; - Solid hawCutBox = Box(hawCutName, hawBoxParms[0], hawBoxParms[1], hawBoxParms[2]); + #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << hawCutName << " Box " << cms::convert2mm(hawBoxParms[0]) << ":" << cms::convert2mm(hawBoxParms[1]) << ":" << cms::convert2mm(hawBoxParms[2]); @@ -1409,19 +1366,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext vHAW[1] + Pt3D(-hawBoxClr, -alvWedge.hawRCutDelY, 0), Pt3D(vHAW[0].x() - hawBoxClr, vHAW[0].y(), vHAW[0].z() - zDel)); - Solid hawRSolid = SubtractionSolid(hawRSolid1, - hawCutBox, - Transform3D(myrot(ns, hawCutName + "R", hawCutForm.getRotation()), - Position(hawCutForm.getTranslation().x(), - hawCutForm.getTranslation().y(), - hawCutForm.getTranslation().z()))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << alvWedge.hawRName << " Subtraction " << hawRSolid1.name() << ":" << hawCutBox.name() - << " at (" << cms::convert2mm(hawCutForm.getTranslation().x()) << "," - << cms::convert2mm(hawCutForm.getTranslation().y()) << "," - << cms::convert2mm(hawCutForm.getTranslation().z()) << ")"; -#endif - Volume hawRLog = Volume(alvWedge.hawRName, hawRSolid, ns.material(spm.mat)); + ns.addAssembly(alvWedge.hawRName); // FAW cut box to cut off back end of wedge const string fawCutName(alvWedge.fawName + "CUTBOX"); @@ -1465,27 +1410,27 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * (vFAW[1] + vFAW[2])); fawLog.placeVolume( - hawRLog, + ns.assembly(alvWedge.hawRName), copyOne, Transform3D( myrot(ns, alvWedge.hawRName + "R", hawRform.getRotation()), Position(hawRform.getTranslation().x(), hawRform.getTranslation().y(), hawRform.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << hawRLog.name() << ":" << copyOne << " positioned in " << fawLog.name() << " at (" - << cms::convert2mm(hawRform.getTranslation().x()) << "," + edm::LogVerbatim("EBGeomX") << ns.assembly(alvWedge.hawRName).name() << ":" << copyOne << " positioned in " + << fawLog.name() << " at (" << cms::convert2mm(hawRform.getTranslation().x()) << "," << cms::convert2mm(hawRform.getTranslation().y()) << "," << cms::convert2mm(hawRform.getTranslation().z()) << ") with rotation"; #endif fawLog.placeVolume( - hawRLog, + ns.assembly(alvWedge.hawRName), copyTwo, Transform3D( Rotation3D(1., 0., 0., 0., 1., 0., 0., 0., -1.) * RotationY(M_PI), // rotate about Y after refl thru Z Position(-hawRform.getTranslation().x(), -hawRform.getTranslation().y(), -hawRform.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << hawRLog.name() << ":" << copyTwo << " positioned in " << fawLog.name() << " at (" - << cms::convert2mm(-hawRform.getTranslation().x()) << "," + edm::LogVerbatim("EBGeomX") << ns.assembly(alvWedge.hawRName).name() << ":" << copyTwo << " positioned in " + << fawLog.name() << " at (" << cms::convert2mm(-hawRform.getTranslation().x()) << "," << cms::convert2mm(-hawRform.getTranslation().y()) << "," << cms::convert2mm(-hawRform.getTranslation().z()) << ") with rotation"; #endif @@ -1494,17 +1439,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Tf3D fawform(RoZ3D(rPhi) * Tl3D(alvWedge.fawRadOff + (trapFAW.H() + trapFAW.h()) / 4, 0, 0.5 * trapFAW.L()) * - RoZ3D(-90_deg + alvWedge.fawPhiRot)); + RoZ3D(-90._deg + alvWedge.fawPhiRot)); if (alvWedge.fawHere) { - spmLog.placeVolume( + ns.assembly(spm.name).placeVolume( fawLog, iPhi, Transform3D( myrot(ns, alvWedge.fawName + "_Rot" + std::to_string(iPhi), fawform.getRotation()), Position(fawform.getTranslation().x(), fawform.getTranslation().y(), fawform.getTranslation().z()))); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << fawLog.name() << ":" << iPhi << " positioned in " << spmLog.name() << " at (" - << cms::convert2mm(fawform.getTranslation().x()) << "," + edm::LogVerbatim("EBGeomX") << fawLog.name() << ":" << iPhi << " positioned in " << ns.assembly(spm.name).name() + << " at (" << cms::convert2mm(fawform.getTranslation().x()) << "," << cms::convert2mm(fawform.getTranslation().y()) << "," << cms::convert2mm(fawform.getTranslation().z()) << ") with rotation"; #endif @@ -1523,7 +1468,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * h_Grid, // h1, H/2 0.5 * h_Grid, // h2, h/2 0.5 * (L_hawR - 8 * dd4hep::cm), // dz, L/2 - 90_deg, // alfa1 + 90._deg, // alfa1 0, // x15 H_hawR - h_hawR // y15 ); @@ -1541,14 +1486,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext vHAW[6]); if (0 != grid.here) { - hawRLog.placeVolume( - gridLog, - copyOne, - Transform3D( - myrot(ns, grid.name + "R", gridForm.getRotation()), - Position(gridForm.getTranslation().x(), gridForm.getTranslation().y(), gridForm.getTranslation().z()))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << gridLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() << " at (" + ns.assembly(alvWedge.hawRName) + .placeVolume(gridLog, + copyOne, + Transform3D(myrot(ns, grid.name + "R", gridForm.getRotation()), + Position(gridForm.getTranslation().x(), + gridForm.getTranslation().y(), + gridForm.getTranslation().z()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeomX") << gridLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(alvWedge.hawRName).name() << " at (" << cms::convert2mm(gridForm.getTranslation().x()) << "," << cms::convert2mm(gridForm.getTranslation().y()) << "," << cms::convert2mm(gridForm.getTranslation().z()) << ") with rotation"; @@ -1581,10 +1528,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double rClr(alv.clrReAlv); // theta is angle in yz plane between z axis & leading edge of crystal - double theta(90_deg); - double zee(0); - double side(0); - double zeta(0_deg); // increment in theta for last crystal + double theta(90._deg); + double zee(0 * dd4hep::mm); + double side(0 * dd4hep::mm); + double zeta(0._deg); // increment in theta for last crystal for (unsigned int cryType(1); cryType <= alv.nCryTypes; ++cryType) { const string sType("_" + std::string(10 > cryType ? "0" : "") + std::to_string(cryType)); @@ -1598,7 +1545,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double HNom(cry.vecNomCryDimBR[cryType - 1]); const double hNom(cry.vecNomCryDimBF[cryType - 1]); - const double alfCry(90_deg + atan((bNom - bUnd - aNom + aUnd) / (hNom - hUnd))); + const double alfCry(90._deg + atan((bNom - bUnd - aNom + aUnd) / (hNom - hUnd))); const EcalTrap trapCry(0.5 * (ANom - AUnd), //double aHalfLengthXNegZLoY , // bl1, A/2 0.5 * (aNom - aUnd), //double aHalfLengthXPosZLoY , // bl2, a/2 @@ -1626,10 +1573,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Volume capLog = Volume(capDDName, capSolid, ns.material(cap.mat)); const string sglDDName(apd.sglName + sType); - Solid sglSolid = Box(sglDDName, cap.xSizeHalf, cap.ySizeHalf, apd.sglThick / 2.); + Solid sglSolid = Box(sglDDName, cap.xSizeHalf, cap.ySizeHalf, apd.sglThick * 0.5); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << sglDDName << " Box " << cms::convert2mm(cap.xSizeHalf) << ":" - << cms::convert2mm(cap.ySizeHalf) << ":" << cms::convert2mm(apd.sglThick / 2.); + << cms::convert2mm(cap.ySizeHalf) << ":" << cms::convert2mm(apd.sglThick * 0.5); #endif Volume sglLog = Volume(sglDDName, sglSolid, ns.material(apd.sglMat)); const unsigned int copySGL(1); @@ -1700,7 +1647,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double sinbeta(sin(beta)); // Now clearance trap - const double alfClr(90_deg + atan((bNom - aNom) / (hNom + sClr))); + const double alfClr(90._deg + atan((bNom - aNom) / (hNom + sClr))); const EcalTrap trapClr(0.5 * (ANom + sClr + rClr * singamma), //double aHalfLengthXNegZLoY , // bl1, A/2 0.5 * (aNom + sClr - fClr * singamma), //double aHalfLengthXPosZLoY , // bl2, a/2 @@ -1718,7 +1665,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Volume clrLog = Volume(clrDDName, clrSolid, ns.material(cry.clrMat)); // Now wrap trap - const double alfWrap(90_deg + atan((bNom - aNom) / (hNom + sClr + 2. * sWrap))); + const double alfWrap(90._deg + atan((bNom - aNom) / (hNom + sClr + 2. * sWrap))); const EcalTrap trapWrap(0.5 * (trapClr.A() + 2. * sWrap + rWrap * singamma), // bl1, A/2 0.5 * (trapClr.a() + 2. * sWrap - fWrap * singamma), // bl2, a/2 @@ -1737,7 +1684,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // Now wall trap - const double alfWall(90_deg + atan((bNom - aNom) / (hNom + sClr + 2. * sWrap + 2. * sWall))); + const double alfWall(90._deg + atan((bNom - aNom) / (hNom + sClr + 2. * sWrap + 2. * sWall))); const EcalTrap trapWall(0.5 * (trapWrap.A() + 2 * sWall + rWall * singamma), // A/2 0.5 * (trapWrap.a() + 2 * sWall - fWall * singamma), // a/2 @@ -1872,7 +1819,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * thick, // H/2 0.5 * thick, // h/2 0.5 * LWebx, // L/2 - 90_deg, // alfa1 + 90._deg, // alfa1 trapWall.b() - BWebx, // x15 0 // y15 ); @@ -1918,15 +1865,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Tf3D tForm(vWeb[0], vWeb[2], vWeb[3], wedge1, wedge2, wedge3); if (0 != web.here) { - hawRLog.placeVolume( - webClrLog, - copyOne, - Transform3D( - myrot(ns, webClrName + std::to_string(iWeb), tForm.getRotation()), - Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() - << " at (" << cms::convert2mm(tForm.getTranslation().x()) << "," + ns.assembly(alvWedge.hawRName) + .placeVolume( + webClrLog, + copyOne, + Transform3D( + myrot(ns, webClrName + std::to_string(iWeb), tForm.getRotation()), + Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(alvWedge.hawRName).name() << " at (" + << cms::convert2mm(tForm.getTranslation().x()) << "," << cms::convert2mm(tForm.getTranslation().y()) << "," << cms::convert2mm(tForm.getTranslation().z()) << ") with rotation"; #endif @@ -1959,13 +1908,16 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double xx(0.050 * dd4hep::mm); const Tf3D tForm(HepGeom::Translate3D(xx, 0, 0) * tForm1); - hawRLog.placeVolume( - wallLog, - etaAlv, - Transform3D(myrot(ns, wallDDName + "_" + std::to_string(etaAlv), tForm.getRotation()), - Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << wallLog.name() << ":" << etaAlv << " positioned in " << hawRLog.name() << " at (" + ns.assembly(alvWedge.hawRName) + .placeVolume( + wallLog, + etaAlv, + Transform3D( + myrot(ns, wallDDName + "_" + std::to_string(etaAlv), tForm.getRotation()), + Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeomX") << wallLog.name() << ":" << etaAlv << " positioned in " + << ns.assembly(alvWedge.hawRName).name() << " at (" << cms::convert2mm(tForm.getTranslation().x()) << "," << cms::convert2mm(tForm.getTranslation().y()) << "," << cms::convert2mm(tForm.getTranslation().z()) << ") with rotation"; @@ -1990,7 +1942,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 0.5 * thick, // H/2 0.5 * thick, // h/2 0.5 * LWebx, // L/2 - 90_deg, // alfa1 + 90._deg, // alfa1 trapWall.a() - BWebx, // x15 0 // y15 ); @@ -2036,15 +1988,17 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const Tf3D tForm(vWeb[0], vWeb[2], vWeb[3], wedge1, wedge2, wedge3); if (0 != web.here) { - hawRLog.placeVolume( - webClrLog, - copyOne, - Transform3D( - myrot(ns, webClrName + std::to_string(iWeb), tForm.getRotation()), - Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " << hawRLog.name() - << " at (" << cms::convert2mm(tForm.getTranslation().x()) << "," + ns.assembly(alvWedge.hawRName) + .placeVolume( + webClrLog, + copyOne, + Transform3D( + myrot(ns, webClrName + std::to_string(iWeb), tForm.getRotation()), + Position(tForm.getTranslation().x(), tForm.getTranslation().y(), tForm.getTranslation().z()))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeomX") << webClrLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(alvWedge.hawRName).name() << " at (" + << cms::convert2mm(tForm.getTranslation().x()) << "," << cms::convert2mm(tForm.getTranslation().y()) << "," << cms::convert2mm(tForm.getTranslation().z()) << ") with rotation"; #endif @@ -2087,7 +2041,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Volume backPlateLog = Volume(back.plateName, backPlateSolid, ns.material(back.plateMat)); const Position backPlateTra( - 0.5 * back.sideHeight + backPlateParms[1], 0, backPlateParms[2] - 0.5 * back.sideLength); + 0.5 * back.sideHeight + backPlateParms[1], 0 * dd4hep::mm, backPlateParms[2] - 0.5 * back.sideLength); Solid backPlate2Solid = Box(back.plate2Name, 0.5 * back.plateWidth, 0.5 * back.plate2Thick, 0.5 * back.plateLength); @@ -2098,7 +2052,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #endif Volume backPlate2Log = Volume(back.plate2Name, backPlate2Solid, ns.material(back.plate2Mat)); - const Position backPlate2Tra(0, -backPlateParms[1] + back.plate2Thick / 2., 0); + const Position backPlate2Tra(0, -backPlateParms[1] + back.plate2Thick * 0.5, 0); if (0 != back.plateHere) { backPlateLog.placeVolume(backPlate2Log, copyOne, Transform3D(backPlate2Tra)); #ifdef EDM_ML_DEBUG @@ -2107,13 +2061,14 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << cms::convert2mm(backPlate2Tra.y()) << "," << cms::convert2mm(backPlate2Tra.z()) << ") with no rotation"; #endif - spmLog.placeVolume( + ns.assembly(spm.name).placeVolume( backPlateLog, copyOne, - Transform3D(myrot(ns, back.plateName + "Rot5", CLHEP::HepRotationZ(270_deg)), outtra + backPlateTra)); + Transform3D(myrot(ns, back.plateName + "Rot5", CLHEP::HepRotationZ(270._deg)), outtra + backPlateTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << backPlateLog.name() << ":" << copyOne << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm((outtra + backPlateTra).x()) << "," + edm::LogVerbatim("EBGeomX") << backPlateLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(spm.name).name() << " at (" + << cms::convert2mm((outtra + backPlateTra).x()) << "," << cms::convert2mm((outtra + backPlateTra).y()) << "," << cms::convert2mm((outtra + backPlateTra).z()) << ") with rotation"; #endif @@ -2130,41 +2085,43 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - const EcalTrap trapBS(back.sideWidth / 2., //double aHalfLengthXNegZLoY , // bl1, A/2 - back.sideWidth / 2., //double aHalfLengthXPosZLoY , // bl2, a/2 - back.sideWidth / 4., //double aHalfLengthXPosZHiY , // tl2, b/2 - back.sideHeight / 2., //double aHalfLengthYNegZ , // h1, H/2 - back.sideHeight / 2., //double aHalfLengthYPosZ , // h2, h/2 - back.sideLength / 2., //double aHalfLengthZ , // dz, L/2 - back.sideAngle, //double aAngleAD , // alfa1 - 0, //double aCoord15X , // x15 - 0 //double aCoord15Y // y15 + const EcalTrap trapBS(back.sideWidth * 0.5, //double aHalfLengthXNegZLoY , // bl1, A/2 + back.sideWidth * 0.5, //double aHalfLengthXPosZLoY , // bl2, a/2 + back.sideWidth / 4., //double aHalfLengthXPosZHiY , // tl2, b/2 + back.sideHeight * 0.5, //double aHalfLengthYNegZ , // h1, H/2 + back.sideHeight * 0.5, //double aHalfLengthYPosZ , // h2, h/2 + back.sideLength * 0.5, //double aHalfLengthZ , // dz, L/2 + back.sideAngle, //double aAngleAD , // alfa1 + 0, //double aCoord15X , // x15 + 0 //double aCoord15Y // y15 ); Solid backSideSolid = mytrap(back.sideName, trapBS); Volume backSideLog = Volume(back.sideName, backSideSolid, ns.material(back.sideMat)); - const Position backSideTra1(0, back.plateWidth / 2 + back.sideYOff1, 1 * dd4hep::mm); + const Position backSideTra1(0 * dd4hep::mm, back.plateWidth * 0.5 + back.sideYOff1, 1 * dd4hep::mm); if (0 != back.sideHere) { - spmLog.placeVolume( + ns.assembly(spm.name).placeVolume( backSideLog, copyOne, - Transform3D(myrot(ns, back.sideName + "Rot8", CLHEP::HepRotationX(180_deg) * CLHEP::HepRotationZ(90_deg)), + Transform3D(myrot(ns, back.sideName + "Rot8", CLHEP::HepRotationX(180._deg) * CLHEP::HepRotationZ(90._deg)), outtra + backSideTra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyOne << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm((outtra + backSideTra1).x()) << "," + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(spm.name).name() << " at (" + << cms::convert2mm((outtra + backSideTra1).x()) << "," << cms::convert2mm((outtra + backSideTra1).y()) << "," << cms::convert2mm((outtra + backSideTra1).z()) << ") with rotation"; #endif - const Position backSideTra2(0, -back.plateWidth / 2 + back.sideYOff2, 1 * dd4hep::mm); - spmLog.placeVolume( + const Position backSideTra2(0 * dd4hep::mm, -back.plateWidth * 0.5 + back.sideYOff2, 1 * dd4hep::mm); + ns.assembly(spm.name).placeVolume( backSideLog, copyTwo, - Transform3D(myrot(ns, back.sideName + "Rot9", CLHEP::HepRotationZ(90_deg)), outtra + backSideTra2)); + Transform3D(myrot(ns, back.sideName + "Rot9", CLHEP::HepRotationZ(90._deg)), outtra + backSideTra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyTwo << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm((outtra + backSideTra2).x()) << "," + edm::LogVerbatim("EBGeomX") << backSideLog.name() << ":" << copyTwo << " positioned in " + << ns.assembly(spm.name).name() << " at (" + << cms::convert2mm((outtra + backSideTra2).x()) << "," << cms::convert2mm((outtra + backSideTra2).y()) << "," << cms::convert2mm((outtra + backSideTra2).z()) << ") with rotation"; #endif @@ -2186,18 +2143,18 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double manifCut(2 * dd4hep::mm); - Solid mBManifSolid = Tube(0, mbManif.outDiam / 2, backCoolWidth / 2. - manifCut, 0_deg, 360_deg); + Solid mBManifSolid = Tube(0, mbManif.outDiam * 0.5, backCoolWidth * 0.5 - manifCut, 0._deg, 360._deg); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << mbManif.name << " Tubs " << cms::convert2mm(backCoolWidth / 2. - manifCut) - << ":0:" << cms::convert2mm(mbManif.outDiam / 2) << ":0:360"; + edm::LogVerbatim("EBGeom") << mbManif.name << " Tubs " << cms::convert2mm(backCoolWidth * 0.5 - manifCut) + << ":0:" << cms::convert2mm(mbManif.outDiam * 0.5) << ":0:360"; #endif Volume mBManifLog = Volume(mbManif.name, mBManifSolid, ns.material(mbManif.mat)); const string mBManifWaName(mbManif.name + "Wa"); - Solid mBManifWaSolid = Tube(0, mbManif.innDiam / 2, backCoolWidth / 2. - manifCut, 0_deg, 360_deg); + Solid mBManifWaSolid = Tube(0, mbManif.innDiam * 0.5, backCoolWidth * 0.5 - manifCut, 0._deg, 360._deg); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << mBManifWaName << " Tubs " << cms::convert2mm(backCoolWidth / 2. - manifCut) - << ":0:" << cms::convert2mm(mbManif.innDiam / 2) << ":0:360"; + edm::LogVerbatim("EBGeom") << mBManifWaName << " Tubs " << cms::convert2mm(backCoolWidth * 0.5 - manifCut) + << ":0:" << cms::convert2mm(mbManif.innDiam * 0.5) << ":0:360"; #endif Volume mBManifWaLog(mBManifWaName, mBManifWaSolid, ns.material(backPipe.waterMat)); mBManifLog.placeVolume(mBManifWaLog, copyOne); @@ -2221,11 +2178,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double deltaY(-5 * dd4hep::mm); Solid grEdgeSlotSolid = - Box(grille.edgeSlotName, grille.edgeSlotHeight / 2., grille.edgeSlotWidth / 2., grille.thick / 2.); + Box(grille.edgeSlotName, grille.edgeSlotHeight * 0.5, grille.edgeSlotWidth * 0.5, grille.thick * 0.5); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << grille.edgeSlotName << " Box " << cms::convert2mm(grille.edgeSlotHeight / 2.) << ":" - << cms::convert2mm(grille.edgeSlotWidth / 2.) << ":" - << cms::convert2mm(grille.thick / 2.); + edm::LogVerbatim("EBGeom") << grille.edgeSlotName << " Box " << cms::convert2mm(grille.edgeSlotHeight * 0.5) + << ":" << cms::convert2mm(grille.edgeSlotWidth * 0.5) << ":" + << cms::convert2mm(grille.thick * 0.5); #endif Volume grEdgeSlotLog = Volume(grille.edgeSlotName, grEdgeSlotSolid, ns.material(grille.edgeSlotMat)); @@ -2236,28 +2193,29 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int iGr(0); iGr != grille.vecHeight.size(); ++iGr) { string gName(grille.name + std::to_string(iGr)); - Solid grilleSolid = Box(gName, grille.vecHeight[iGr] / 2., backCoolWidth / 2., grille.thick / 2.); + Solid grilleSolid = Box(gName, grille.vecHeight[iGr] * 0.5, backCoolWidth * 0.5, grille.thick * 0.5); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << gName << " Box " << cms::convert2mm(grille.vecHeight[iGr] / 2.) << ":" - << cms::convert2mm(backCoolWidth / 2.) << ":" << cms::convert2mm(grille.thick / 2.); + edm::LogVerbatim("EBGeom") << gName << " Box " << cms::convert2mm(grille.vecHeight[iGr] * 0.5) << ":" + << cms::convert2mm(backCoolWidth * 0.5) << ":" + << cms::convert2mm(grille.thick * 0.5); #endif Volume grilleLog = Volume(gName, grilleSolid, ns.material(grille.mat)); - const Position grilleTra(-realBPthick / 2 - grille.vecHeight[iGr] / 2, + const Position grilleTra(-realBPthick * 0.5 - grille.vecHeight[iGr] * 0.5, deltaY, - grille.vecZOff[iGr] + grille.thick / 2 - back.sideLength / 2); + grille.vecZOff[iGr] + grille.thick * 0.5 - back.sideLength * 0.5); const Position gTra(outtra + backPlateTra + grilleTra); if (0 != grille.midSlotHere && 0 != iGr) { if (0 == (iGr - 1) % 2) { - string mName(grille.midSlotName + std::to_string(iGr / 2)); + string mName(grille.midSlotName + std::to_string(iGr * 0.5)); Solid grMidSlotSolid = - Box(mName, grille.vecMidSlotHeight[(iGr - 1) / 2] / 2., grille.midSlotWidth / 2., grille.thick / 2.); + Box(mName, grille.vecMidSlotHeight[(iGr - 1) / 2] * 0.5, grille.midSlotWidth * 0.5, grille.thick * 0.5); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << mName << " Box " - << cms::convert2mm(grille.vecMidSlotHeight[(iGr - 1) / 2] / 2.) << ":" - << cms::convert2mm(grille.midSlotWidth / 2.) << ":" - << cms::convert2mm(grille.thick / 2.); + << cms::convert2mm(grille.vecMidSlotHeight[(iGr - 1) / 2] * 0.5) << ":" + << cms::convert2mm(grille.midSlotWidth * 0.5) << ":" + << cms::convert2mm(grille.thick * 0.5); #endif grMidSlotLog[(iGr - 1) / 2] = Volume(mName, grMidSlotSolid, ns.material(grille.midSlotMat)); } @@ -2265,24 +2223,24 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext grMidSlotLog[(iGr - 1) / 2], ++midSlotCopy, Transform3D(Position( - grille.vecHeight[iGr] / 2. - grille.vecMidSlotHeight[(iGr - 1) / 2] / 2., +grille.midSlotXOff, 0))); + grille.vecHeight[iGr] * 0.5 - grille.vecMidSlotHeight[(iGr - 1) / 2] * 0.5, +grille.midSlotXOff, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " << grilleLog.name() << " at (" - << cms::convert2mm(grille.vecHeight[iGr] / 2. - - grille.vecMidSlotHeight[(iGr - 1) / 2] / 2.) + << cms::convert2mm(grille.vecHeight[iGr] * 0.5 - + grille.vecMidSlotHeight[(iGr - 1) / 2] * 0.5) << "," << cms::convert2mm(grille.midSlotXOff) << ",0) with no rotation"; #endif grilleLog.placeVolume( grMidSlotLog[(iGr - 1) / 2], ++midSlotCopy, Transform3D(Position( - grille.vecHeight[iGr] / 2. - grille.vecMidSlotHeight[(iGr - 1) / 2] / 2., -grille.midSlotXOff, 0))); + grille.vecHeight[iGr] * 0.5 - grille.vecMidSlotHeight[(iGr - 1) / 2] * 0.5, -grille.midSlotXOff, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << grMidSlotLog[(iGr - 1) / 2].name() << ":" << midSlotCopy << " positioned in " << grilleLog.name() << " at (" - << cms::convert2mm(grille.vecHeight[iGr] / 2. - - grille.vecMidSlotHeight[(iGr - 1) / 2] / 2.) + << cms::convert2mm(grille.vecHeight[iGr] * 0.5 - + grille.vecMidSlotHeight[(iGr - 1) / 2] * 0.5) << "," << cms::convert2mm(-grille.midSlotXOff) << ",0) with no rotation"; #endif } @@ -2290,66 +2248,69 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (0 != grille.edgeSlotHere && 0 != iGr) { grilleLog.placeVolume(grEdgeSlotLog, ++edgeSlotCopy, - Transform3D(Position(grille.vecHeight[iGr] / 2. - grille.edgeSlotHeight / 2., - backCoolWidth / 2 - grille.edgeSlotWidth / 2., + Transform3D(Position(grille.vecHeight[iGr] * 0.5 - grille.edgeSlotHeight * 0.5, + backCoolWidth * 0.5 - grille.edgeSlotWidth * 0.5, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " << grilleLog.name() << " at (" - << cms::convert2mm(grille.vecHeight[iGr] / 2. - grille.edgeSlotHeight / 2.) << "," - << cms::convert2mm(backCoolWidth / 2 - grille.edgeSlotWidth / 2.) + << cms::convert2mm(grille.vecHeight[iGr] * 0.5 - grille.edgeSlotHeight * 0.5) + << "," << cms::convert2mm(backCoolWidth * 0.5 - grille.edgeSlotWidth * 0.5) << ",0) with no rotation"; #endif grilleLog.placeVolume(grEdgeSlotLog, ++edgeSlotCopy, - Transform3D(Position(grille.vecHeight[iGr] / 2. - grille.edgeSlotHeight / 2., - -backCoolWidth / 2 + grille.edgeSlotWidth / 2., + Transform3D(Position(grille.vecHeight[iGr] * 0.5 - grille.edgeSlotHeight * 0.5, + -backCoolWidth * 0.5 + grille.edgeSlotWidth * 0.5, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << grEdgeSlotLog.name() << ":" << edgeSlotCopy << " positioned in " << grilleLog.name() << " at (" - << cms::convert2mm(grille.vecHeight[iGr] / 2. - grille.edgeSlotHeight / 2.) << "," - << cms::convert2mm(-backCoolWidth / 2 + grille.edgeSlotWidth / 2.) + << cms::convert2mm(grille.vecHeight[iGr] * 0.5 - grille.edgeSlotHeight * 0.5) + << "," << cms::convert2mm(-backCoolWidth * 0.5 + grille.edgeSlotWidth * 0.5) << ",0) with no rotation"; #endif } if (0 != grille.here) { - spmLog.placeVolume(grilleLog, iGr, Transform3D(gTra)); + ns.assembly(spm.name).placeVolume(grilleLog, iGr, Transform3D(gTra)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << grilleLog.name() << ":" << iGr << " positioned in " << spmLog.name() << " at (" - << cms::convert2mm(gTra.x()) << "," << cms::convert2mm(gTra.y()) << "," - << cms::convert2mm(gTra.z()) << ") with no rotation"; + edm::LogVerbatim("EBGeomX") << grilleLog.name() << ":" << iGr << " positioned in " + << ns.assembly(spm.name).name() << " at (" << cms::convert2mm(gTra.x()) << "," + << cms::convert2mm(gTra.y()) << "," << cms::convert2mm(gTra.z()) + << ") with no rotation"; #endif } if ((0 != iGr % 2) && (0 != mbManif.here)) { - spmLog.placeVolume(mBManifLog, - iGr, - Transform3D(myrot(ns, mbManif.name + "R1", CLHEP::HepRotationX(90_deg)), - gTra - Position(-mbManif.outDiam / 2. + grille.vecHeight[iGr] / 2., - manifCut, - grille.thick / 2. + 3 * mbManif.outDiam / 2.))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << iGr << " positioned in " << spmLog.name() - << " at (" - << cms::convert2mm(gTra.x() + mbManif.outDiam / 2. - grille.vecHeight[iGr] / 2.) + ns.assembly(spm.name).placeVolume( + mBManifLog, + iGr, + Transform3D(myrot(ns, mbManif.name + "R1", CLHEP::HepRotationX(90._deg)), + gTra - Position(-mbManif.outDiam * 0.5 + grille.vecHeight[iGr] * 0.5, + manifCut, + grille.thick * 0.5 + 3 * mbManif.outDiam * 0.5))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << iGr << " positioned in " + << ns.assembly(spm.name).name() << " at (" + << cms::convert2mm(gTra.x() + mbManif.outDiam * 0.5 - grille.vecHeight[iGr] * 0.5) << "," << cms::convert2mm(gTra.y() - manifCut) << "," - << cms::convert2mm(gTra.z() - grille.thick / 2. - 3 * mbManif.outDiam / 2.) + << cms::convert2mm(gTra.z() - grille.thick * 0.5 - 3 * mbManif.outDiam * 0.5) << ") with rotation"; #endif - spmLog.placeVolume(mBManifLog, - iGr - 1, - Transform3D(myrot(ns, mbManif.name + "R2", CLHEP::HepRotationX(90_deg)), - gTra - Position(-3 * mbManif.outDiam / 2. + grille.vecHeight[iGr] / 2., - manifCut, - grille.thick / 2 + 3 * mbManif.outDiam / 2.))); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << (iGr - 1) << " positioned in " << spmLog.name() - << " at (" - << cms::convert2mm(gTra.x() + 3 * mbManif.outDiam / 2. - - grille.vecHeight[iGr] / 2.) + ns.assembly(spm.name).placeVolume( + mBManifLog, + iGr - 1, + Transform3D(myrot(ns, mbManif.name + "R2", CLHEP::HepRotationX(90._deg)), + gTra - Position(-3 * mbManif.outDiam * 0.5 + grille.vecHeight[iGr] * 0.5, + manifCut, + grille.thick * 0.5 + 3 * mbManif.outDiam * 0.5))); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeomX") << mBManifLog.name() << ":" << (iGr - 1) << " positioned in " + << ns.assembly(spm.name).name() << " at (" + << cms::convert2mm(gTra.x() + 3 * mbManif.outDiam * 0.5 - + grille.vecHeight[iGr] * 0.5) << "," << cms::convert2mm(gTra.y() - manifCut) << "," - << cms::convert2mm(gTra.z() - grille.thick / 2 - 3 * mbManif.outDiam / 2.) + << cms::convert2mm(gTra.z() - grille.thick * 0.5 - 3 * mbManif.outDiam * 0.5) << ") with rotation"; #endif } @@ -2368,20 +2329,20 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Solid backCoolBarSolid = - Box(backCool.barName, backCool.barHeight / 2., backCool.barWidth / 2., backCool.barThick / 2.); + Box(backCool.barName, backCool.barHeight * 0.5, backCool.barWidth * 0.5, backCool.barThick * 0.5); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << backCool.barName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" - << cms::convert2mm(backCool.barWidth / 2.) << ":" - << cms::convert2mm(backCool.barThick / 2.); + edm::LogVerbatim("EBGeom") << backCool.barName << " Box " << cms::convert2mm(backCool.barHeight * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5) << ":" + << cms::convert2mm(backCool.barThick * 0.5); #endif Volume backCoolBarLog = Volume(backCool.barName, backCoolBarSolid, ns.material(backCool.barMat)); Solid backCoolBarSSSolid = - Box(backCool.barSSName, backCool.barHeight / 2., backCool.barWidth / 2., backCool.barSSThick / 2.); + Box(backCool.barSSName, backCool.barHeight * 0.5, backCool.barWidth * 0.5, backCool.barSSThick * 0.5); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << backCool.barSSName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" - << cms::convert2mm(backCool.barWidth / 2.) << ":" - << cms::convert2mm(backCool.barSSThick / 2.); + edm::LogVerbatim("EBGeom") << backCool.barSSName << " Box " << cms::convert2mm(backCool.barHeight * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5) << ":" + << cms::convert2mm(backCool.barSSThick * 0.5); #endif Volume backCoolBarSSLog = Volume(backCool.barSSName, backCoolBarSSSolid, ns.material(backCool.barSSMat)); const Position backCoolBarSSTra(0, 0, 0); @@ -2394,11 +2355,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #endif Solid backCoolBarWaSolid = - Box(backCool.barWaName, backCool.barHeight / 2., backCool.barWidth / 2., backCool.barWaThick / 2.); + Box(backCool.barWaName, backCool.barHeight * 0.5, backCool.barWidth * 0.5, backCool.barWaThick * 0.5); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << backCool.barWaName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" - << cms::convert2mm(backCool.barWidth / 2.) << ":" - << cms::convert2mm(backCool.barWaThick / 2.); + edm::LogVerbatim("EBGeom") << backCool.barWaName << " Box " << cms::convert2mm(backCool.barHeight * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5) << ":" + << cms::convert2mm(backCool.barWaThick * 0.5); #endif Volume backCoolBarWaLog = Volume(backCool.barWaName, backCoolBarWaSolid, ns.material(backCool.barWaMat)); const Position backCoolBarWaTra(0, 0, 0); @@ -2427,29 +2388,29 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext thickVFE += backCool.vecBackVFELyrThick[iLyr]; } Solid backVFESolid = - Box((myns + backCool.backVFEName), backCool.barHeight / 2., backCool.barWidth / 2., thickVFE / 2.); + Box((myns + backCool.backVFEName), backCool.barHeight * 0.5, backCool.barWidth * 0.5, thickVFE * 0.5); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << (myns + backCool.backVFEName) << " Box " << cms::convert2mm(backCool.barHeight / 2.) - << ":" << cms::convert2mm(backCool.barWidth / 2.) << ":" - << cms::convert2mm(thickVFE / 2.); + edm::LogVerbatim("EBGeom") << (myns + backCool.backVFEName) << " Box " + << cms::convert2mm(backCool.barHeight * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5) << ":" << cms::convert2mm(thickVFE * 0.5); #endif Volume backVFELog = ns.addVolume(Volume(myns + backCool.backVFEName, backVFESolid, ns.material(backCool.backVFEMat))); - Position offTra(0, 0, -thickVFE / 2); + Position offTra(0, 0, -thickVFE * 0.5); for (unsigned int iLyr(0); iLyr != backCool.vecBackVFELyrThick.size(); ++iLyr) { Solid backVFELyrSolid = Box(backCool.vecBackVFELyrName[iLyr], - backCool.barHeight / 2., - backCool.barWidth / 2., - backCool.vecBackVFELyrThick[iLyr] / 2.); + backCool.barHeight * 0.5, + backCool.barWidth * 0.5, + backCool.vecBackVFELyrThick[iLyr] * 0.5); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << backCool.vecBackVFELyrName[iLyr] << " Box " - << cms::convert2mm(backCool.barHeight / 2.) << ":" - << cms::convert2mm(backCool.barWidth / 2.) << ":" - << cms::convert2mm(backCool.vecBackVFELyrThick[iLyr] / 2.); + << cms::convert2mm(backCool.barHeight * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5) << ":" + << cms::convert2mm(backCool.vecBackVFELyrThick[iLyr] * 0.5); #endif Volume backVFELyrLog = Volume(backCool.vecBackVFELyrName[iLyr], backVFELyrSolid, ns.material(backCool.vecBackVFELyrMat[iLyr])); - const Position backVFELyrTra(0, 0, backCool.vecBackVFELyrThick[iLyr] / 2); + const Position backVFELyrTra(0, 0, backCool.vecBackVFELyrThick[iLyr] * 0.5); backVFELog.placeVolume(backVFELyrLog, copyOne, Transform3D(backVFELyrTra + offTra)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << backVFELyrLog.name() << ":" << copyOne << " positioned in " << backVFELog.name() @@ -2472,11 +2433,11 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - const double halfZCoolVFE(thickVFE + backCool.barThick / 2.); - Solid backCoolVFESolid = Box(backCool.barHeight / 2., backCool.barWidth / 2., halfZCoolVFE); + const double halfZCoolVFE(thickVFE + backCool.barThick * 0.5); + Solid backCoolVFESolid = Box(backCool.barHeight * 0.5, backCool.barWidth * 0.5, halfZCoolVFE); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << backCool.vFEName << " Box " << cms::convert2mm(backCool.barHeight / 2.) << ":" - << cms::convert2mm(backCool.barWidth / 2.) << ":" << cms::convert2mm(halfZCoolVFE); + edm::LogVerbatim("EBGeom") << backCool.vFEName << " Box " << cms::convert2mm(backCool.barHeight * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5) << ":" << cms::convert2mm(halfZCoolVFE); #endif Volume backCoolVFELog = ns.addVolume(Volume(backCool.vFEName, backCoolVFESolid, ns.material(backCool.vFEMat))); if (0 != backCool.barHere) { @@ -2488,20 +2449,20 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext } if (0 != backCool.vFEHere) { backCoolVFELog.placeVolume( - backVFELog, copyOne, Transform3D(Position(0, 0, backCool.barThick / 2. + thickVFE / 2.))); + backVFELog, copyOne, Transform3D(Position(0, 0, backCool.barThick * 0.5 + thickVFE * 0.5))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyOne << " positioned in " << backCoolVFELog.name() - << " at (0,0," << cms::convert2mm(backCool.barThick / 2. + thickVFE / 2.) + << " at (0,0," << cms::convert2mm(backCool.barThick * 0.5 + thickVFE * 0.5) << ") with no rotation"; #endif } backCoolVFELog.placeVolume(backVFELog, copyTwo, - Transform3D(myrot(ns, backCool.vFEName + "Flip", CLHEP::HepRotationX(180_deg)), - Position(0, 0, -backCool.barThick / 2. - thickVFE / 2.))); + Transform3D(myrot(ns, backCool.vFEName + "Flip", CLHEP::HepRotationX(180._deg)), + Position(0, 0, -backCool.barThick * 0.5 - thickVFE * 0.5))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << backVFELog.name() << ":" << copyTwo << " positioned in " << backCoolVFELog.name() - << " at (0,0," << cms::convert2mm(-backCool.barThick / 2. - thickVFE / 2.) + << " at (0,0," << cms::convert2mm(-backCool.barThick * 0.5 - thickVFE * 0.5) << ") with rotation"; #endif @@ -2523,7 +2484,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext for (unsigned int iMod(0); iMod != 4; ++iMod) { const double pipeLength(grille.vecZOff[2 * iMod + 1] - grille.vecZOff[2 * iMod] - grille.thick - 3 * dd4hep::mm); - const double pipeZPos(grille.vecZOff[2 * iMod + 1] - pipeLength / 2 - 1.5 * dd4hep::mm); + const double pipeZPos(grille.vecZOff[2 * iMod + 1] - pipeLength * 0.5 - 1.5 * dd4hep::mm); // accumulate total height of parent volume double backCoolHeight(backCool.barHeight + mbCoolTube.outDiam); @@ -2536,23 +2497,24 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext bottomThick += mbLyr.vecMBLyrThick[iMB]; } - const double halfZBCool((pipeLength - 2 * mbManif.outDiam - grille.zSpace) / 2); - Solid backCoolSolid = Box(backCool.vecName[iMod], backCoolHeight / 2., backCoolWidth / 2., halfZBCool); + const double halfZBCool((pipeLength - 2 * mbManif.outDiam - grille.zSpace) * 0.5); + Solid backCoolSolid = Box(backCool.vecName[iMod], backCoolHeight * 0.5, backCoolWidth * 0.5, halfZBCool); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << backCool.vecName[iMod] << " Box " << cms::convert2mm(backCoolHeight / 2.) << ":" - << cms::convert2mm(backCoolWidth / 2.) << ":" << cms::convert2mm(halfZBCool); + edm::LogVerbatim("EBGeom") << backCool.vecName[iMod] << " Box " << cms::convert2mm(backCoolHeight * 0.5) << ":" + << cms::convert2mm(backCoolWidth * 0.5) << ":" << cms::convert2mm(halfZBCool); #endif Volume backCoolLog = Volume(backCool.vecName[iMod], backCoolSolid, ns.material(spm.mat)); const Position bCoolTra( - -realBPthick / 2 + backCoolHeight / 2 - grille.vecHeight[2 * iMod], + -realBPthick * 0.5 + backCoolHeight * 0.5 - grille.vecHeight[2 * iMod], deltaY, - grille.vecZOff[2 * iMod] + grille.thick + grille.zSpace + halfZBCool - back.sideLength / 2); + grille.vecZOff[2 * iMod] + grille.thick + grille.zSpace + halfZBCool - back.sideLength * 0.5); if (0 != backCool.here) { - spmLog.placeVolume(backCoolLog, iMod + 1, outtra + backPlateTra + bCoolTra); + ns.assembly(spm.name).placeVolume(backCoolLog, iMod + 1, outtra + backPlateTra + bCoolTra); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << backCoolLog.name() << ":" << (iMod + 1) << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm((outtra + backPlateTra + bCoolTra).x()) << "," + edm::LogVerbatim("EBGeomX") << backCoolLog.name() << ":" << (iMod + 1) << " positioned in " + << ns.assembly(spm.name).name() << " at (" + << cms::convert2mm((outtra + backPlateTra + bCoolTra).x()) << "," << cms::convert2mm((outtra + backPlateTra + bCoolTra).y()) << "," << cms::convert2mm((outtra + backPlateTra + bCoolTra).z()) << ") with no rotation"; @@ -2564,38 +2526,38 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext const double halfZTank(halfZBCool - 5 * dd4hep::cm); string bTankName(backCoolTank.name + std::to_string(iMod + 1)); - Solid backCoolTankSolid = Box(bTankName, backCoolTankHeight / 2., backCoolTank.width / 2., halfZTank); + Solid backCoolTankSolid = Box(bTankName, backCoolTankHeight * 0.5, backCoolTank.width * 0.5, halfZTank); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << bTankName << " Box " << cms::convert2mm(backCoolTankHeight / 2.) << ":" - << cms::convert2mm(backCoolTank.width / 2.) << ":" << cms::convert2mm(halfZTank); + edm::LogVerbatim("EBGeom") << bTankName << " Box " << cms::convert2mm(backCoolTankHeight * 0.5) << ":" + << cms::convert2mm(backCoolTank.width * 0.5) << ":" << cms::convert2mm(halfZTank); #endif Volume backCoolTankLog = Volume(bTankName, backCoolTankSolid, ns.material(backCoolTank.mat)); if (0 != backCoolTank.here) { backCoolLog.placeVolume(backCoolTankLog, copyOne, Transform3D(Rotation3D(), - Position(-backCoolHeight / 2 + backCoolTankHeight / 2. + bottomThick, - backCool.barWidth / 2. + backCoolTank.width / 2., + Position(-backCoolHeight * 0.5 + backCoolTankHeight * 0.5 + bottomThick, + backCool.barWidth * 0.5 + backCoolTank.width * 0.5, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << backCoolTankLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name() << " at (" - << cms::convert2mm(-backCoolHeight / 2 + backCoolTankHeight / 2. + bottomThick) - << "," << cms::convert2mm(backCool.barWidth / 2. + backCoolTank.width / 2.) + << cms::convert2mm(-backCoolHeight * 0.5 + backCoolTankHeight * 0.5 + bottomThick) + << "," << cms::convert2mm(backCool.barWidth * 0.5 + backCoolTank.width * 0.5) << ",0) with no rotation"; #endif } string bTankWaName(backCoolTank.waName + std::to_string(iMod + 1)); Solid backCoolTankWaSolid = Box(bTankWaName, - backCoolTankHeight / 2. - backCoolTank.thick / 2., - backCoolTank.waWidth / 2., - halfZTank - backCoolTank.thick / 2.); + backCoolTankHeight * 0.5 - backCoolTank.thick * 0.5, + backCoolTank.waWidth * 0.5, + halfZTank - backCoolTank.thick * 0.5); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << bTankWaName << " Box " - << cms::convert2mm(backCoolTankHeight / 2. - backCoolTank.thick / 2.) << ":" - << cms::convert2mm(backCoolTank.waWidth / 2.) << ":" - << cms::convert2mm(halfZTank - backCoolTank.thick / 2.); + << cms::convert2mm(backCoolTankHeight * 0.5 - backCoolTank.thick * 0.5) << ":" + << cms::convert2mm(backCoolTank.waWidth * 0.5) << ":" + << cms::convert2mm(halfZTank - backCoolTank.thick * 0.5); #endif Volume backCoolTankWaLog = Volume(bTankWaName, backCoolTankWaSolid, ns.material(backCoolTank.waMat)); backCoolTankLog.placeVolume(backCoolTankWaLog, copyOne, Transform3D(Rotation3D(), Position(0, 0, 0))); @@ -2606,10 +2568,10 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext string bBracketName(backCoolTank.backBracketName + std::to_string(iMod + 1)); Solid backBracketSolid = - Box(bBracketName, backCoolTank.backBracketHeight / 2., backCoolTank.width / 2., halfZTank); + Box(bBracketName, backCoolTank.backBracketHeight * 0.5, backCoolTank.width * 0.5, halfZTank); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << bBracketName << " Box " << cms::convert2mm(backCoolTank.backBracketHeight / 2.) - << ":" << cms::convert2mm(backCoolTank.width / 2.) << ":" + edm::LogVerbatim("EBGeom") << bBracketName << " Box " << cms::convert2mm(backCoolTank.backBracketHeight * 0.5) + << ":" << cms::convert2mm(backCoolTank.width * 0.5) << ":" << cms::convert2mm(halfZTank); #endif Volume backBracketLog = Volume(bBracketName, backBracketSolid, ns.material(backCoolTank.backBracketMat)); @@ -2617,38 +2579,38 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext backCoolLog.placeVolume(backBracketLog, copyOne, Transform3D(Rotation3D(), - Position(backCool.barHeight - backCoolHeight / 2. - - backCoolTank.backBracketHeight / 2. + bottomThick, - -backCool.barWidth / 2. - backCoolTank.width / 2., + Position(backCool.barHeight - backCoolHeight * 0.5 - + backCoolTank.backBracketHeight * 0.5 + bottomThick, + -backCool.barWidth * 0.5 - backCoolTank.width * 0.5, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << backBracketLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name() << " at (" - << cms::convert2mm(backCool.barHeight - backCoolHeight / 2. - - backCoolTank.backBracketHeight / 2. + bottomThick) - << "," << cms::convert2mm(-backCool.barWidth / 2. - backCoolTank.width / 2.) + << cms::convert2mm(backCool.barHeight - backCoolHeight * 0.5 - + backCoolTank.backBracketHeight * 0.5 + bottomThick) + << "," << cms::convert2mm(-backCool.barWidth * 0.5 - backCoolTank.width * 0.5) << ",0) with no rotation"; #endif } //=== - Position bSumTra(backCool.barHeight - backCoolHeight / 2. + bottomThick, 0, 0); + Position bSumTra(backCool.barHeight - backCoolHeight * 0.5 + bottomThick, 0, 0); for (unsigned int j(0); j != nMisc; ++j) { // loop over miscellaneous layers Solid bSolid = Box(backMisc.vecName[iMod * nMisc + j], - backMisc.vecThick[iMod * nMisc + j] / 2, - backCool.barWidth / 2. + backCoolTank.width, + backMisc.vecThick[iMod * nMisc + j] * 0.5, + backCool.barWidth * 0.5 + backCoolTank.width, halfZBCool); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << backMisc.vecName[iMod * nMisc + j] << " Box " - << cms::convert2mm(backMisc.vecThick[iMod * nMisc + j] / 2) << ":" - << cms::convert2mm(backCool.barWidth / 2. + backCoolTank.width) << ":" + << cms::convert2mm(backMisc.vecThick[iMod * nMisc + j] * 0.5) << ":" + << cms::convert2mm(backCool.barWidth * 0.5 + backCoolTank.width) << ":" << cms::convert2mm(halfZBCool); #endif Volume bLog = Volume(backMisc.vecName[iMod * nMisc + j], bSolid, ns.material(backMisc.vecMat[iMod * nMisc + j])); - const Position bTra(backMisc.vecThick[iMod * nMisc + j] / 2, 0, 0); + const Position bTra(backMisc.vecThick[iMod * nMisc + j] * 0.5, 0 * dd4hep::mm, 0 * dd4hep::mm); if (0 != backMisc.here) { backCoolLog.placeVolume(bLog, copyOne, Transform3D(Rotation3D(), bSumTra + bTra)); @@ -2663,47 +2625,47 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext bSumTra += 2 * bTra; } - const double bHalfWidth(backCool.barWidth / 2. + backCoolTank.width); + const double bHalfWidth(backCool.barWidth * 0.5 + backCoolTank.width); if (0 != mbLyr.here) { - Position mTra(-backCoolHeight / 2. + mbCoolTube.outDiam, 0, 0); + Position mTra(-backCoolHeight * 0.5 + mbCoolTube.outDiam, 0, 0); for (unsigned int j(0); j != mbLyr.vecMBLyrThick.size(); ++j) // loop over MB layers { - Solid mSolid = Box(mbLyr.vecMBLyrThick[j] / 2, bHalfWidth, halfZBCool); + Solid mSolid = Box(mbLyr.vecMBLyrThick[j] * 0.5, bHalfWidth, halfZBCool); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << (mbLyr.vecMBLyrName[j] + "_" + std::to_string(iMod + 1)) << " Box " - << cms::convert2mm(mbLyr.vecMBLyrThick[j] / 2) << ":" + << cms::convert2mm(mbLyr.vecMBLyrThick[j] * 0.5) << ":" << cms::convert2mm(bHalfWidth) << ":" << cms::convert2mm(halfZBCool); #endif Volume mLog = Volume( mbLyr.vecMBLyrName[j] + "_" + std::to_string(iMod + 1), mSolid, ns.material(mbLyr.vecMBLyrMat[j])); - mTra += Position(mbLyr.vecMBLyrThick[j] / 2.0, 0, 0); + mTra += Position(mbLyr.vecMBLyrThick[j] * 0.5, 0 * dd4hep::mm, 0 * dd4hep::mm); backCoolLog.placeVolume(mLog, copyOne, Transform3D(Rotation3D(), mTra)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << mLog.name() << ":" << copyOne << " positioned in " << backCoolLog.name() << " at (" << cms::convert2mm(mTra.x()) << "," << cms::convert2mm(mTra.y()) << "," << cms::convert2mm(mTra.z()) << ") with no rotation"; #endif - mTra += Position(mbLyr.vecMBLyrThick[j] / 2.0, 0, 0); + mTra += Position(mbLyr.vecMBLyrThick[j] * 0.5, 0 * dd4hep::mm, 0 * dd4hep::mm); } } if (0 != mbCoolTube.here) { const string mBName(mbCoolTube.name + "_" + std::to_string(iMod + 1)); - Solid mBCoolTubeSolid = Tube(0, mbCoolTube.outDiam / 2, halfZBCool, 0_deg, 360_deg); + Solid mBCoolTubeSolid = Tube(0, mbCoolTube.outDiam * 0.5, halfZBCool, 0._deg, 360._deg); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << mBName << " Tubs " << cms::convert2mm(halfZBCool) - << ":0:" << cms::convert2mm(mbCoolTube.outDiam / 2) << ":0:360"; + << ":0:" << cms::convert2mm(mbCoolTube.outDiam * 0.5) << ":0:360"; #endif Volume mBLog = Volume(mBName, mBCoolTubeSolid, ns.material(mbCoolTube.mat)); const string mBWaName(mbCoolTube.name + "Wa_" + std::to_string(iMod + 1)); - Solid mBCoolTubeWaSolid = Tube(mBWaName, 0, mbCoolTube.innDiam / 2, halfZBCool, 0_deg, 360_deg); + Solid mBCoolTubeWaSolid = Tube(mBWaName, 0, mbCoolTube.innDiam * 0.5, halfZBCool, 0._deg, 360._deg); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << mBWaName << " Tubs " << cms::convert2mm(halfZBCool) - << ":0:" << cms::convert2mm(mbCoolTube.innDiam / 2) << ":0:360"; + << ":0:" << cms::convert2mm(mbCoolTube.innDiam * 0.5) << ":0:360"; #endif Volume mBWaLog = Volume(mBWaName, mBCoolTubeWaSolid, ns.material(backPipe.waterMat)); mBLog.placeVolume(mBWaLog, copyOne); @@ -2717,12 +2679,12 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext backCoolLog.placeVolume(mBLog, 2 * j + 1, Transform3D(Rotation3D(), - Position(-backCoolHeight / 2.0 + mbCoolTube.outDiam / 2., + Position(-backCoolHeight * 0.5 + mbCoolTube.outDiam * 0.5, -bHalfWidth + (j + 1) * bHalfWidth / 5, 0))); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << mBLog.name() << ":" << (2 * j + 1) << " positioned in " << backCoolLog.name() - << " at (" << cms::convert2mm(-backCoolHeight / 2.0 + mbCoolTube.outDiam / 2.) + << " at (" << cms::convert2mm(-backCoolHeight * 0.5 + mbCoolTube.outDiam * 0.5) << "," << cms::convert2mm(-bHalfWidth + (j + 1) * bHalfWidth / 5) << ",0) with no rotation"; #endif @@ -2738,14 +2700,19 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext string bPipeName(backPipe.name + "_" + std::to_string(iMod + 1)); string bInnerName(backPipe.name + "_H2O_" + std::to_string(iMod + 1)); - Solid backPipeSolid = Tube(bPipeName, 0, backPipe.vecDiam[iMod] / 2, pipeLength / 2, 0_deg, 360_deg); - Solid backInnerSolid = - Tube(bInnerName, 0, backPipe.vecDiam[iMod] / 2 - backPipe.vecThick[iMod], pipeLength / 2, 0_deg, 360_deg); -#ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << bPipeName << " Tubs " << cms::convert2mm(pipeLength / 2) - << ":0:" << cms::convert2mm(backPipe.vecDiam[iMod] / 2) << ":0:360"; - edm::LogVerbatim("EBGeom") << bInnerName << " Tubs " << cms::convert2mm(pipeLength / 2) - << ":0:" << cms::convert2mm(backPipe.vecDiam[iMod] / 2 - backPipe.vecThick[iMod]) + Solid backPipeSolid = + Tube(bPipeName, 0 * dd4hep::mm, backPipe.vecDiam[iMod] * 0.5, pipeLength * 0.5, 0._deg, 360._deg); + Solid backInnerSolid = Tube(bInnerName, + 0 * dd4hep::mm, + backPipe.vecDiam[iMod] * 0.5 - backPipe.vecThick[iMod], + pipeLength * 0.5, + 0._deg, + 360._deg); +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EBGeom") << bPipeName << " Tubs " << cms::convert2mm(pipeLength * 0.5) + << ":0:" << cms::convert2mm(backPipe.vecDiam[iMod] * 0.5) << ":0:360"; + edm::LogVerbatim("EBGeom") << bInnerName << " Tubs " << cms::convert2mm(pipeLength * 0.5) + << ":0:" << cms::convert2mm(backPipe.vecDiam[iMod] * 0.5 - backPipe.vecThick[iMod]) << ":0:360"; #endif @@ -2753,24 +2720,25 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext Volume backInnerLog = Volume(bInnerName, backInnerSolid, ns.material(backPipe.waterMat)); const Position bPipeTra1(back.xOff + back.sideHeight - 0.7 * backPipe.vecDiam[iMod], - back.yOff + back.plateWidth / 2 - back.sideWidth - 0.7 * backPipe.vecDiam[iMod], + back.yOff + back.plateWidth * 0.5 - back.sideWidth - 0.7 * backPipe.vecDiam[iMod], pipeZPos); - spmLog.placeVolume(backPipeLog, copyOne, Transform3D(Rotation3D(), bPipeTra1)); + ns.assembly(spm.name).placeVolume(backPipeLog, copyOne, Transform3D(Rotation3D(), bPipeTra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyOne << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm(bPipeTra1.x()) << "," - << cms::convert2mm(bPipeTra1.y()) << "," << cms::convert2mm(bPipeTra1.z()) + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(spm.name).name() << " at (" << cms::convert2mm(bPipeTra1.x()) + << "," << cms::convert2mm(bPipeTra1.y()) << "," << cms::convert2mm(bPipeTra1.z()) << ") with no rotation"; #endif - const Position bPipeTra2( - bPipeTra1.x(), back.yOff - back.plateWidth / 2 + back.sideWidth + backPipe.vecDiam[iMod], bPipeTra1.z()); + const Position bPipeTra2(bPipeTra1.x(), + back.yOff - back.plateWidth * 0.5 + back.sideWidth + backPipe.vecDiam[iMod], + bPipeTra1.z()); - spmLog.placeVolume(backPipeLog, copyTwo, Transform3D(Rotation3D(), bPipeTra2)); + ns.assembly(spm.name).placeVolume(backPipeLog, copyTwo, Transform3D(Rotation3D(), bPipeTra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyTwo << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm(bPipeTra2.x()) << "," - << cms::convert2mm(bPipeTra2.y()) << "," << cms::convert2mm(bPipeTra2.z()) + edm::LogVerbatim("EBGeomX") << backPipeLog.name() << ":" << copyTwo << " positioned in " + << ns.assembly(spm.name).name() << " at (" << cms::convert2mm(bPipeTra2.x()) + << "," << cms::convert2mm(bPipeTra2.y()) << "," << cms::convert2mm(bPipeTra2.z()) << ") with no rotation"; #endif @@ -2791,36 +2759,36 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext if (0 != dryAirTube.here) { string dryAirTubName(dryAirTube.name + std::to_string(iMod + 1)); - Solid dryAirTubeSolid = - Tube(dryAirTubName, dryAirTube.innDiam / 2, dryAirTube.outDiam / 2, pipeLength / 2, 0_deg, 360_deg); + Solid dryAirTubeSolid = Tube( + dryAirTubName, dryAirTube.innDiam * 0.5, dryAirTube.outDiam * 0.5, pipeLength * 0.5, 0._deg, 360._deg); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << dryAirTubName << " Tubs " << cms::convert2mm(pipeLength / 2) << ":" - << cms::convert2mm(dryAirTube.innDiam / 2) << ":" - << cms::convert2mm(dryAirTube.outDiam / 2) << ":0:360"; + edm::LogVerbatim("EBGeom") << dryAirTubName << " Tubs " << cms::convert2mm(pipeLength * 0.5) << ":" + << cms::convert2mm(dryAirTube.innDiam * 0.5) << ":" + << cms::convert2mm(dryAirTube.outDiam * 0.5) << ":0:360"; #endif Volume dryAirTubeLog = Volume((myns + dryAirTubName), dryAirTubeSolid, ns.material(dryAirTube.mat)); const Position dryAirTubeTra1(back.xOff + back.sideHeight - 0.7 * dryAirTube.outDiam - backPipe.vecDiam[iMod], - back.yOff + back.plateWidth / 2 - back.sideWidth - 1.2 * dryAirTube.outDiam, + back.yOff + back.plateWidth * 0.5 - back.sideWidth - 1.2 * dryAirTube.outDiam, pipeZPos); - spmLog.placeVolume(dryAirTubeLog, copyOne, Transform3D(Rotation3D(), dryAirTubeTra1)); + ns.assembly(spm.name).placeVolume(dryAirTubeLog, copyOne, Transform3D(Rotation3D(), dryAirTubeTra1)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm(dryAirTubeTra1.x()) << "," - << cms::convert2mm(dryAirTubeTra1.y()) << "," + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyOne << " positioned in " + << ns.assembly(spm.name).name() << " at (" << cms::convert2mm(dryAirTubeTra1.x()) + << "," << cms::convert2mm(dryAirTubeTra1.y()) << "," << cms::convert2mm(dryAirTubeTra1.z()) << ") with no rotation"; #endif const Position dryAirTubeTra2(dryAirTubeTra1.x(), - back.yOff - back.plateWidth / 2 + back.sideWidth + 0.7 * dryAirTube.outDiam, + back.yOff - back.plateWidth * 0.5 + back.sideWidth + 0.7 * dryAirTube.outDiam, dryAirTubeTra1.z()); - spmLog.placeVolume(dryAirTubeLog, copyTwo, Transform3D(Rotation3D(), dryAirTubeTra2)); + ns.assembly(spm.name).placeVolume(dryAirTubeLog, copyTwo, Transform3D(Rotation3D(), dryAirTubeTra2)); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm(dryAirTubeTra2.x()) << "," - << cms::convert2mm(dryAirTubeTra2.y()) << "," + edm::LogVerbatim("EBGeomX") << dryAirTubeLog.name() << ":" << copyTwo << " positioned in " + << ns.assembly(spm.name).name() << " at (" << cms::convert2mm(dryAirTubeTra2.x()) + << "," << cms::convert2mm(dryAirTubeTra2.y()) << "," << cms::convert2mm(dryAirTubeTra2.z()) << ") with no rotation"; #endif } @@ -2832,7 +2800,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Position cTra(backCool.barHeight / 2. - backCoolHeight / 2. + bottomThick, 0, -halfZTank + halfZCoolVFE); + Position cTra(backCool.barHeight * 0.5 - backCoolHeight * 0.5 + bottomThick, 0, -halfZTank + halfZCoolVFE); const unsigned int numSec(static_cast(backCool.vecBackCoolNSec[iMod])); for (unsigned int jSec(0); jSec != numSec; ++jSec) { const unsigned int nMax(static_cast(backCool.vecBackCoolNPerSec[iNSec++])); @@ -2874,8 +2842,9 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext patchHeight += patchPanel.vecThick[iPatch]; } - array patchParms{ - {patchHeight / 2., backCool.barWidth / 2., (spm.vecZPts.back() - grille.vecZOff.back() - grille.thick) / 2}}; + array patchParms{{patchHeight * 0.5, + backCool.barWidth * 0.5, + (spm.vecZPts.back() - grille.vecZOff.back() - grille.thick) / 2}}; Solid patchSolid = Box(patchParms[0], patchParms[1], patchParms[2]); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << patchPanel.name << " Box " << cms::convert2mm(patchParms[0]) << ":" @@ -2883,27 +2852,28 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #endif Volume patchLog = Volume(patchPanel.name, patchSolid, ns.material(spm.mat)); - const Position patchTra(back.xOff + 4 * dd4hep::mm, 0, grille.vecZOff.back() + grille.thick + patchParms[2]); + const Position patchTra( + back.xOff + 4 * dd4hep::mm, 0 * dd4hep::mm, grille.vecZOff.back() + grille.thick + patchParms[2]); if (0 != patchPanel.here) { - spmLog.placeVolume(patchLog, copyOne, patchTra); + ns.assembly(spm.name).placeVolume(patchLog, copyOne, patchTra); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeomX") << patchLog.name() << ":" << copyOne << " positioned in " << spmLog.name() - << " at (" << cms::convert2mm(patchTra.x()) << "," << cms::convert2mm(patchTra.y()) - << "," << cms::convert2mm(patchTra.z()) << ") with no rotation"; + edm::LogVerbatim("EBGeomX") << patchLog.name() << ":" << copyOne << " positioned in " << spm.name << " at (" + << cms::convert2mm(patchTra.x()) << "," << cms::convert2mm(patchTra.y()) << "," + << cms::convert2mm(patchTra.z()) << ") with no rotation"; #endif } Position pTra(-patchParms[0], 0, 0); for (unsigned int j(0); j != patchPanel.vecNames.size(); ++j) { - Solid pSolid = Box(patchPanel.vecThick[j] / 2., patchParms[1], patchParms[2]); + Solid pSolid = Box(patchPanel.vecThick[j] * 0.5, patchParms[1], patchParms[2]); #ifdef EDM_ML_DEBUG - edm::LogVerbatim("EBGeom") << patchPanel.vecNames[j] << " Box " << cms::convert2mm(patchPanel.vecThick[j] / 2.) + edm::LogVerbatim("EBGeom") << patchPanel.vecNames[j] << " Box " << cms::convert2mm(patchPanel.vecThick[j] * 0.5) << ":" << cms::convert2mm(patchParms[1]) << ":" << cms::convert2mm(patchParms[2]); #endif Volume pLog = Volume(patchPanel.vecNames[j], pSolid, ns.material(patchPanel.vecMat[j])); - pTra += Position(patchPanel.vecThick[j] / 2, 0, 0); + pTra += Position(patchPanel.vecThick[j] * 0.5, 0 * dd4hep::mm, 0 * dd4hep::mm); patchLog.placeVolume(pLog, copyOne, pTra); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << pLog.name() << ":" << copyOne << " positioned in " << patchLog.name() << " at (" @@ -2911,7 +2881,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << cms::convert2mm(pTra.z()) << ") with no rotation"; #endif - pTra += Position(patchPanel.vecThick[j] / 2, 0, 0); + pTra += Position(patchPanel.vecThick[j] * 0.5, 0 * dd4hep::mm, 0 * dd4hep::mm); } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! @@ -2958,7 +2928,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext << ") with no rotation"; #endif - array cutParms{{pincer.cutWidth / 2., pincer.cutHeight / 2., pincer.blkLengthHalf}}; + array cutParms{{pincer.cutWidth * 0.5, pincer.cutHeight * 0.5, pincer.blkLengthHalf}}; Solid cutSolid = Box(pincer.cutName, cutParms[0], cutParms[1], cutParms[2]); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << pincer.cutName << " Box " << cms::convert2mm(cutParms[0]) << ":" @@ -2976,7 +2946,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext pincer.shim2Width) << "," << cms::convert2mm(-blkParms[1] + cutParms[1]) << ",0) with no rotation"; #endif - array shim2Parms{{pincer.shim2Width / 2., pincer.shimHeight / 2., pincer.blkLengthHalf}}; + array shim2Parms{{pincer.shim2Width * 0.5, pincer.shimHeight * 0.5, pincer.blkLengthHalf}}; Solid shim2Solid = Box(pincer.shim2Name, shim2Parms[0], shim2Parms[1], shim2Parms[2]); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << pincer.shim2Name << " Box " << cms::convert2mm(shim2Parms[0]) << ":" @@ -2991,7 +2961,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext #endif array shim1Parms{ - {pincer.shim1Width / 2., pincer.shimHeight / 2., pincer.envLengthHalf - pincer.blkLengthHalf}}; + {pincer.shim1Width * 0.5, pincer.shimHeight * 0.5, pincer.envLengthHalf - pincer.blkLengthHalf}}; Solid shim1Solid = Box(pincer.shim1Name, shim1Parms[0], shim1Parms[1], shim1Parms[2]); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeom") << pincer.shim1Name << " Box " << cms::convert2mm(shim1Parms[0]) << ":" @@ -3031,7 +3001,7 @@ static long algorithm(dd4hep::Detector& /* description */, cms::DDParsingContext 1 + iRod, Transform3D(myrot(ns, pincer.rodName + std::to_string(iRod), - CLHEP::HepRotationZ(90_deg + pincer.vecRodAzimuth[iRod])), + CLHEP::HepRotationZ(90._deg + pincer.vecRodAzimuth[iRod])), rodTra)); #ifdef EDM_ML_DEBUG edm::LogVerbatim("EBGeomX") << rodLog.name() << ":" << (1 + iRod) << " positioned in " << xilyLog.name() diff --git a/Geometry/EcalCommonData/src/EcalBarrelNumberingScheme.cc b/Geometry/EcalCommonData/src/EcalBarrelNumberingScheme.cc index 19d72569e3d6c..922a6fd7b2a78 100644 --- a/Geometry/EcalCommonData/src/EcalBarrelNumberingScheme.cc +++ b/Geometry/EcalCommonData/src/EcalBarrelNumberingScheme.cc @@ -38,13 +38,18 @@ uint32_t EcalBarrelNumberingScheme::getUnitID(const EcalBaseNumber& baseNumber) uint32_t wallCopy(0), hawCopy(0), fawCopy(0), supmCopy(0); const int off(13 < nLevels ? 3 : 0); - if (nLevels != 11) { + if ((nLevels != 11) && (nLevels != 14)) { wallCopy = baseNumber.getCopyNumber(3 + off); hawCopy = baseNumber.getCopyNumber(4 + off); fawCopy = baseNumber.getCopyNumber(5 + off); supmCopy = baseNumber.getCopyNumber(6 + off); } else { - wallCopy = baseNumber.getCopyNumber(3); + auto num1 = numbers(baseNumber.getLevelName(3 + off)); + wallCopy = num1.second; + hawCopy = num1.first; + auto num2 = numbers(baseNumber.getLevelName(4 + off)); + fawCopy = num2.second; + supmCopy = num2.first; } #ifdef EDM_ML_DEBUG edm::LogVerbatim("EcalGeom") << nLevels << " off: " << off << " cryType: " << cryType << " wallCopy: " << wallCopy @@ -116,3 +121,23 @@ uint32_t EcalBarrelNumberingScheme::getUnitID(const EcalBaseNumber& baseNumber) #endif return intindex; } + +std::pair EcalBarrelNumberingScheme::numbers(const std::string& name) const { + int num1(-1), num2(-1); + if (name.find('#') != std::string::npos) { + uint32_t ip1 = name.find('#'); + if (name.find('!') != std::string::npos) { + uint32_t ip2 = name.find('!'); + num1 = ::atoi(name.substr(ip1 + 1, ip2 - ip1 - 1).c_str()); + if (name.find('#', ip2) != std::string::npos) { + uint32_t ip3 = name.find('#', ip2); + num2 = ::atoi(name.substr(ip3 + 1, name.size() - ip3 - 1).c_str()); + } + } + } +#ifdef EDM_ML_DEBUG + edm::LogVerbatim("EcalGeom") << "EcalBarrelNumberingScheme::Numbers from " << name << " are " << num1 << " and " + << num2; +#endif + return std::make_pair(num1, num2); +}