18 #include "DD4hep/DetFactoryHelper.h" 151 nsectors =
args.value<
int>(
"NSector");
152 nsectortot =
args.value<
int>(
"NSectorTot");
153 nhalf =
args.value<
int>(
"NHalf");
154 rinner =
args.value<
double>(
"RIn");
155 router =
args.value<
double>(
"ROut");
156 rzones =
args.value<
int>(
"RZones");
160 theta =
args.value<std::vector<double> >(
"Theta");
161 rmax =
args.value<std::vector<double> >(
"RMax");
162 zoff =
args.value<std::vector<double> >(
"ZOff");
163 for (
int i = 0;
i < rzones;
i++) {
167 rmax[2] = (zoff[3] - zoff[2]) / ttheta[2];
170 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: General material " << genMaterial <<
"\tSectors " << nsectors
171 <<
", " << nsectortot <<
"\tHalves " << nhalf <<
"\tRotation matrix " << rotns <<
":" 174 for (
int i = 0;
i < rzones;
i++)
185 layerId =
args.value<std::vector<int> >(
"Id");
186 layerLabel =
args.value<std::vector<std::string> >(
"LayerLabel");
187 layerMat =
args.value<std::vector<std::string> >(
"LayerMat");
188 layerWidth =
args.value<std::vector<double> >(
"LayerWidth");
189 layerD1 =
args.value<std::vector<double> >(
"D1");
190 layerD2 =
args.value<std::vector<double> >(
"D2");
191 layerAlpha =
args.value<std::vector<double> >(
"Alpha2");
192 layerT1 =
args.value<std::vector<double> >(
"T1");
193 layerT2 =
args.value<std::vector<double> >(
"T2");
194 layerAbsorb =
args.value<std::vector<int> >(
"AbsL");
195 layerGap =
args.value<std::vector<double> >(
"Gap");
198 edm::LogVerbatim(
"HCalGeom") << layerLabel[
i] <<
"\t" << layerId[
i] <<
"\t" << layerMat[
i] <<
"\t" 207 absorbName =
args.value<std::vector<std::string> >(
"AbsorbName");
208 absorbMat =
args.value<std::vector<std::string> >(
"AbsorbMat");
209 absorbD =
args.value<std::vector<double> >(
"AbsorbD");
210 absorbT =
args.value<std::vector<double> >(
"AbsorbT");
211 nAbsorber = absorbName.size();
213 for (
int i = 0;
i < nAbsorber;
i++)
214 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << absorbName[
i] <<
" Material " << absorbMat[
i] <<
" d " 218 middleD =
args.value<
double>(
"MiddleD");
219 middleW =
args.value<
double>(
"MiddleW");
221 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: Middle material " << middleMat <<
" d " 224 midName =
args.value<std::vector<std::string> >(
"MidAbsName");
225 midMat =
args.value<std::vector<std::string> >(
"MidAbsMat");
226 midW =
args.value<std::vector<double> >(
"MidAbsW");
227 midT =
args.value<std::vector<double> >(
"MidAbsT");
228 nMidAbs = midName.size();
230 for (
int i = 0;
i < nMidAbs;
i++)
231 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << midName[
i] <<
" Material " << midMat[
i] <<
" W " 236 sideMat =
args.value<std::vector<std::string> >(
"SideMat");
237 sideD =
args.value<std::vector<double> >(
"SideD");
238 sideT =
args.value<std::vector<double> >(
"SideT");
240 for (
unsigned int i = 0;
i < sideMat.size();
i++)
241 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: Side material " << sideMat[
i] <<
" d " 244 sideAbsName =
args.value<std::vector<std::string> >(
"SideAbsName");
245 sideAbsMat =
args.value<std::vector<std::string> >(
"SideAbsMat");
246 sideAbsW =
args.value<std::vector<double> >(
"SideAbsW");
247 nSideAbs = sideAbsName.size();
249 for (
int i = 0;
i < nSideAbs;
i++)
250 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << sideAbsName[
i] <<
" Material " << sideAbsMat[
i] <<
" W " 262 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: Detector (" <<
nLayers <<
") Rotation matrix " << rotns <<
":" 263 << detRot <<
"\n\t\t" << detMat <<
"\t" << detMatPl <<
"\t" << detMatSc;
265 detType =
args.value<std::vector<int> >(
"DetType");
266 detdP1 =
args.value<std::vector<double> >(
"DetdP1");
267 detdP2 =
args.value<std::vector<double> >(
"DetdP2");
268 detT11 =
args.value<std::vector<double> >(
"DetT11");
269 detT12 =
args.value<std::vector<double> >(
"DetT12");
270 detTsc =
args.value<std::vector<double> >(
"DetTsc");
271 detT21 =
args.value<std::vector<double> >(
"DetT21");
272 detT22 =
args.value<std::vector<double> >(
"DetT22");
273 detWidth1 =
args.value<std::vector<double> >(
"DetWidth1");
274 detWidth2 =
args.value<std::vector<double> >(
"DetWidth2");
275 detPosY =
args.value<std::vector<int> >(
"DetPosY");
288 idNameSpace = ns.
name();
289 idOffset =
args.value<
int>(
"IdOffset");
292 <<
" NameSpace " << idNameSpace <<
" Offset " << idOffset;
294 <<
"DDHCalBarrelAlgo: General volume...";
297 double alpha = (1._pi) / nsectors;
298 double dphi = nsectortot * (2._pi) / nsectors;
304 int nf =
ntot - nsec;
308 double zmax = zoff[3];
309 double zstep5 = zoff[4];
310 double zstep4 = (zoff[1] + rmax[1] * ttheta[1]);
311 if ((zoff[2] + rmax[1] * ttheta[2]) > zstep4)
312 zstep4 = (zoff[2] + rmax[1] * ttheta[2]);
313 double zstep3 = (zoff[1] + rmax[0] * ttheta[1]);
314 double zstep2 = (zoff[0] + rmax[0] * ttheta[0]);
315 double zstep1 = (zoff[0] + rinner * ttheta[0]);
316 double rout = router;
317 double rout1 = rmax[3];
319 double rmid1 = rmax[0];
320 double rmid2 = rmax[1];
321 double rmid3 = (zoff[4] - zoff[2]) / ttheta[2];
322 double rmid4 = rmax[2];
324 std::vector<double> pgonZ = {-
zmax,
340 std::vector<double> pgonRmin = {
341 rmid4, rmid3, rmid3, rmid2, rmid1, rmid1, rin, rin, rin, rmid1, rmid1, rmid2, rmid3, rmid3, rmid4};
343 std::vector<double> pgonRmax = {
344 rout1, rout1, rout, rout, rout, rout, rout, rout, rout, rout, rout, rout, rout, rout1, rout1};
346 std::vector<double> pgonZHalf = {0, zstep1, zstep2, zstep3, zstep4, zstep5, zstep5,
zmax};
348 std::vector<double> pgonRminHalf = {rin, rin, rmid1, rmid1, rmid2, rmid3, rmid3, rmid4};
350 std::vector<double> pgonRmaxHalf = {rout, rout, rout, rout, rout, rout, rout1, rout1};
357 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << genMaterial
360 for (
unsigned int i = 0;
i < pgonZ.size();
i++)
369 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << genMaterial
372 for (
unsigned int i = 0;
i < pgonZHalf.size();
i++)
382 parentName.placeVolume(genlogic, 1);
384 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << genlogic.name() <<
" number 1 positioned in " 385 << parentName.name() <<
" at (0, 0, 0) with no rotation";
392 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << genMaterial
395 for (
unsigned int i = 0;
i < pgonZHalf.size();
i++)
401 genlogic.placeVolume(genlogich, 1);
403 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << genlogich.name() <<
" number 1 positioned in " 404 << genlogic.name() <<
" at (0, 0, 0) with no rotation";
407 dd4hep::Rotation3D
rot = getRotation(rotHalf, rotns, ns);
408 genlogic.placeVolume(genlogich, 2,
rot);
410 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << genlogich.name() <<
" number 2 positioned in " 411 << genlogic.name() <<
" at (0, 0, 0) with " <<
rot;
420 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << matter.name()
423 for (
unsigned int i = 0;
i < pgonZHalf.size();
i++)
429 for (
int ii = 0;
ii < nsectortot;
ii++) {
439 genlogich.placeVolume(seclogic,
ii + 1,
rotation);
441 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << seclogic.name() <<
" number " <<
ii + 1
442 <<
" positioned in " << genlogich.name() <<
" at (0, 0, 0) with " <<
rotation;
454 double width = layerWidth[
i];
455 double rout = rin +
width;
458 for (
int j = 0;
j < rzones - 1;
j++) {
464 double zout = zoff[
in] + rin * ttheta[
in];
471 std::vector<double> pgonZ, pgonRmin, pgonRmax;
473 pgonZ.emplace_back(0);
474 pgonRmin.emplace_back(rin);
475 pgonRmax.emplace_back(rout);
477 pgonZ.emplace_back(zout);
478 pgonRmin.emplace_back(rin);
479 pgonRmax.emplace_back(rout);
483 pgonZ.emplace_back(zoff[
in] + rout * ttheta[
in]);
484 pgonRmin.emplace_back(pgonRmax[1]);
485 pgonRmax.emplace_back(pgonRmax[1]);
493 pgonZ[1] = (zoff[
out] + rmax[
out] * ttheta[
out]);
494 pgonZ.emplace_back(pgonZ[1]);
495 pgonRmin.emplace_back(pgonRmin[1]);
496 pgonRmax.emplace_back(rmax[
in]);
498 pgonZ.emplace_back(zoff[
in] + rmax[
in] * ttheta[
in]);
499 pgonRmin.emplace_back(pgonRmin[2]);
500 pgonRmax.emplace_back(pgonRmax[2]);
506 pgonZ.emplace_back(zoff[
in] + rmax[
in] * ttheta[
in]);
507 pgonRmin.emplace_back(rmax[
in]);
508 pgonRmax.emplace_back(pgonRmax[1]);
513 pgonZ.emplace_back(zoff[
out] + rmax[
in] * ttheta[
out]);
514 pgonRmin.emplace_back(pgonRmin[2]);
515 pgonRmax.emplace_back(pgonRmax[2]);
521 pgonZ.emplace_back(zoff[
out] + rout * ttheta[
out]);
522 pgonRmin.emplace_back(rout);
523 pgonRmax.emplace_back(rout);
532 double alpha1 =
alpha;
533 if (layerGap[
i] > 1.
e-6) {
534 double rmid = 0.5 * (rin + rout);
536 alpha1 = atan(
width / rmid);
546 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" (Layer " <<
i <<
") Polyhedra made of " 547 << matter.name() <<
" with 1 sector from " <<
convertRadToDeg(-alpha1) <<
" to " 549 for (
unsigned int k = 0;
k < pgonZ.size();
k++)
554 seclogic.placeVolume(glog, layerId[
i]);
556 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" number " << layerId[
i]
557 <<
" positioned in " << seclogic.name() <<
" at (0,0,0) with no rotation";
559 constructInsideLayers(glog,
588 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: \t\tInside layer " <<
id <<
"...";
593 dd4hep::Rotation3D
rot = getRotation(detRot, rotns, ns);
607 for (
i = 0;
i < rzones - 1;
i++) {
612 dy = 0.5 * rsi * (
tan(alpha1) -
tan(alpha2));
613 dz = 0.5 * (zoff[
in] + rsi * ttheta[
in]);
615 y = 0.5 * rsi * (
tan(alpha1) +
tan(alpha2));
621 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Box made of " << matter.name()
628 mother = constructSideLayer(laylog,
name, nAbs, rin, alpha1, ns);
632 mother.placeVolume(glog, idOffset + 1, r11);
633 mother.placeVolume(glog, idOffset + 2, dd4hep::Transform3D(
rot, r12));
635 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number " << (idOffset + 1)
636 <<
" positioned in " << mother.name() <<
" at (" <<
cms::convert2mm(
x) <<
"," 638 <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number " << (idOffset + 2)
639 <<
" positioned in " << mother.name() <<
" at (" <<
cms::convert2mm(
x) <<
"," 643 constructInsideDetectors(glog, nam0 +
"1",
id,
dx,
dy,
dz, 1, ns);
649 for (
i = 0;
i < rzones - 1;
i++) {
654 dy = 0.5 * rsi *
tan(alpha2);
655 dz = 0.5 * (zoff[
in] + rsi * ttheta[
in]);
662 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Box made of " << matter.name()
669 mother = constructMidLayer(laylog,
name, rin, alpha1, ns);
673 mother.placeVolume(glog, idOffset + 3, r21);
674 mother.placeVolume(glog, idOffset + 4, dd4hep::Transform3D(
rot, r22));
676 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number " << (idOffset + 3)
677 <<
" positioned in " << mother.name() <<
" at (" <<
cms::convert2mm(
x) <<
"," 679 <<
") with no rotation\nDDHCalBarrelAlgo: " << glog.name() <<
" Number " 680 << (idOffset + 4) <<
" positioned in " << mother.name() <<
" at (" 685 constructInsideDetectors(glog, nam0 +
"2",
id,
dx,
dy,
dz, 2, ns);
691 int k =
abs(nAbs) - 1;
693 double rsi = rin + sideD[
k];
695 for (
int i = 0;
i < rzones - 1;
i++) {
699 std::vector<double> pgonZ, pgonRmin, pgonRmax;
701 pgonZ.emplace_back(0.0);
702 pgonRmin.emplace_back(rsi);
703 pgonRmax.emplace_back(rsi + sideT[
k]);
705 pgonZ.emplace_back(zoff[
in] + rsi * ttheta[
in]);
706 pgonRmin.emplace_back(rsi);
707 pgonRmax.emplace_back(pgonRmax[0]);
709 pgonZ.emplace_back(zoff[
in] + pgonRmax[0] * ttheta[
in]);
710 pgonRmin.emplace_back(pgonRmax[1]);
711 pgonRmax.emplace_back(pgonRmax[1]);
716 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << sideMat[
k]
719 for (
unsigned int ii = 0;
ii < pgonZ.size();
ii++)
725 laylog.placeVolume(glog, 1);
727 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number 1 positioned in " << laylog.name()
728 <<
" at (0,0,0) with no rotation";
732 double rmid = pgonRmax[0];
733 for (
int i = 0;
i < nSideAbs;
i++) {
734 double alpha1 = atan(sideAbsW[
i] / rmid);
741 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << sideAbsMat[
i]
743 <<
convertRadToDeg(alpha1) <<
" and with " << pgonZ.size() <<
" sections";
744 for (
unsigned int ii = 0;
ii < pgonZ.size();
ii++)
750 mother.placeVolume(
log, 1);
752 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " <<
log.name() <<
" Number 1 positioned in " 753 << mother.name() <<
" at (0,0,0) with no rotation";
767 for (
int k = 0;
k < nAbsorber;
k++) {
769 double rsi = rin + absorbD[
k];
771 for (
int i = 0;
i < rzones - 1;
i++) {
775 std::vector<double> pgonZ, pgonRmin, pgonRmax;
777 pgonZ.emplace_back(0.0);
778 pgonRmin.emplace_back(rsi);
779 pgonRmax.emplace_back(rsi + absorbT[
k]);
781 pgonZ.emplace_back(zoff[
in] + rsi * ttheta[
in]);
782 pgonRmin.emplace_back(rsi);
783 pgonRmax.emplace_back(pgonRmax[0]);
785 pgonZ.emplace_back(zoff[
in] + pgonRmax[0] * ttheta[
in]);
786 pgonRmin.emplace_back(pgonRmax[1]);
787 pgonRmax.emplace_back(pgonRmax[1]);
792 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << matter.name()
795 for (
unsigned int ii = 0;
ii < pgonZ.size();
ii++)
801 laylog.placeVolume(
log, 1);
803 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " <<
log.name() <<
" Number 1 positioned in " << laylog.name()
804 <<
" at (0,0,0) with no rotation";
807 double rmin = pgonRmin[0];
808 double rmax = pgonRmax[0];
810 for (
int i = 0;
i < 1;
i++) {
811 double alpha1 = atan(midW[
i] / rmin);
817 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " 818 << matter1.name() <<
" with 1 sector from " <<
convertRadToDeg(-alpha1) <<
" to " 819 <<
convertRadToDeg(alpha1) <<
" and with " << pgonZ.size() <<
" sections";
820 for (
unsigned int ii = 0;
ii < pgonZ.size();
ii++)
826 mother.placeVolume(
log, 1);
828 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " <<
log.name() <<
" Number 1 positioned in " 829 << mother.name() <<
" at (0,0,0) with no rotation";
835 double rmid = rmin + middleD;
840 pgonZ[1] = zoff[
in] + rmid * ttheta[
in];
843 pgonZ[2] = zoff[
in] + rmax * ttheta[
in];
844 double alpha1 = atan(middleW / rmin);
849 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " << matter1.name()
851 <<
convertRadToDeg(alpha1) <<
" and with " << pgonZ.size() <<
" sections";
852 for (
unsigned int ii = 0;
ii < pgonZ.size();
ii++)
858 mother.placeVolume(glog, 1);
860 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number 1 positioned in " 861 << mother.name() <<
" at (0,0,0) with no rotation";
864 for (
int i = 1;
i < nMidAbs;
i++) {
865 namek =
name + midName[
i];
866 rmid = rmin + midT[
i];
871 pgonZ[1] = zoff[
in] + rmin * ttheta[
in];
874 pgonZ[2] = zoff[
in] + rmid * ttheta[
in];
875 alpha1 = atan(midW[
i] / rmin);
880 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Polyhedra made of " 881 << matter2.name() <<
" with 1 sector from " <<
convertRadToDeg(-alpha1) <<
" to " 882 <<
convertRadToDeg(alpha1) <<
" and with " << pgonZ.size() <<
" sections";
883 for (
unsigned int ii = 0;
ii < pgonZ.size();
ii++)
889 mother.placeVolume(
log,
i);
891 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " <<
log.name() <<
" Number " <<
i <<
" positioned in " 892 << mother.name() <<
" at (0,0,0) with no rotation";
910 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: \t\tInside detector " <<
id <<
"...";
922 double dx1, dx2, shiftX;
925 wid = 0.5 * detWidth1[
id];
926 dx1 = 0.5 * detT11[
id];
927 dx2 = 0.5 * detT21[
id];
932 wid = 0.5 * detWidth2[
id];
933 dx1 = 0.5 * detT12[
id];
934 dx2 = 0.5 * detT22[
id];
938 solid = dd4hep::Box(ns.
prepend(plname +
"1"), dx1, wid,
dz);
941 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Box made of " << plmatter.name()
946 double x = shiftX + dx1 -
dx;
949 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number 1 positioned in " <<
detector.name()
951 <<
",0) with no rotation";
953 solid = dd4hep::Box(ns.
prepend(scname), 0.5 * detTsc[
id], wid,
dz);
956 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Box made of " << scmatter.name()
961 x += dx1 + 0.5 * detTsc[
id];
962 int copyNo =
id * 10 + detType[
id];
965 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number " << copyNo <<
" positioned in " 967 <<
",0) with no rotation";
969 solid = dd4hep::Box(ns.
prepend(plname +
"2"), dx2, wid,
dz);
972 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << solid.name() <<
" Box made of " << plmatter.name()
977 x += 0.5 * detTsc[
id] + dx2;
980 edm::LogVerbatim(
"HCalGeom") <<
"DDHCalBarrelAlgo: " << glog.name() <<
" Number 1 positioned in " <<
detector.name()
982 <<
",0) with no rotation";
998 edm::LogVerbatim(
"HCalGeom") <<
"<<== End of DDHCalBarrelAlgo construction";
std::vector< double > rmax
dd4hep::Volume constructMidLayer(dd4hep::Volume laylog, const std::string &nm, double rin, double alpha, cms::DDNamespace &ns)
Log< level::Info, true > LogVerbatim
std::vector< double > sideAbsW
dd4hep::Rotation3D getRotation(std::string &rotation, std::string &rotns, cms::DDNamespace &ns)
const dd4hep::Rotation3D & rotation(const std::string &name) const
std::vector< int > detPosY
void constructInsideDetectors(dd4hep::Volume &detector, const std::string &name, int id, double dx, double dy, double dz, int type, cms::DDNamespace &ns)
std::vector< double > detWidth1
std::vector< double > detdP2
constexpr NumType convertRadToDeg(NumType radians)
constexpr NumType convert2mm(NumType length)
HcalBarrelAlgo(cms::DDParsingContext &ctxt, xml_h &e)
std::vector< double > absorbD
dd4hep::Material material(const std::string &name) const
std::vector< std::string > sideAbsMat
std::vector< double > detT11
void constructInsideLayers(dd4hep::Volume &laylog, const std::string &nm, int id, int nAbs, double rin, double d1, double alpha1, double d2, double alpha2, double t1, double t2, cms::DDNamespace &ns)
std::vector< double > layerT1
#define DECLARE_DDCMS_DETELEMENT(name, func)
std::vector< std::string > absorbMat
std::vector< std::string > midMat
std::vector< double > detT12
static constexpr long s_executed
std::vector< std::string > midName
std::vector< double > layerAlpha
std::vector< std::string > sideAbsName
std::string_view name() const
std::vector< double > sideD
std::vector< double > absorbT
static long algorithm(dd4hep::Detector &, cms::DDParsingContext &ctxt, xml_h e)
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
std::vector< double > detWidth2
std::vector< double > zoff
std::vector< int > detType
dd4hep::Volume constructSideLayer(dd4hep::Volume &laylog, const std::string &nm, int nAbs, double rin, double alpha, cms::DDNamespace &ns)
std::vector< double > detT22
std::vector< double > theta
std::vector< double > detT21
std::vector< int > layerAbsorb
std::vector< double > layerD1
std::vector< std::string > absorbName
std::vector< double > layerT2
std::vector< double > sideT
std::vector< double > detdP1
std::vector< std::string > layerMat
std::vector< double > layerGap
std::vector< double > midT
std::vector< double > layerWidth
std::vector< double > midW
static constexpr float d1
std::vector< std::string > layerLabel
std::pair< std::string, std::string > DDSplit(const std::string &n)
split into (name,namespace), separator = ':'
Geom::Theta< T > theta() const
std::vector< double > detTsc
std::vector< double > layerD2
dd4hep::Volume volume(const std::string &name, bool exc=true) const
std::vector< std::string > sideMat
std::vector< double > ttheta
std::string prepend(const std::string &) const
std::vector< int > layerId