24 #include <unordered_set>
27 using namespace geant_units::operators;
54 std::map<int, HGCalGeomParameters::layerParameters>
layers;
55 std::vector<HGCalParameters::hgtrform> trforms;
56 std::vector<bool> trformUse;
62 int nsiz = (int)(copy.size());
63 int lay = (nsiz > 0) ? copy[nsiz - 1] : 0;
64 int zp = (nsiz > 2) ? copy[nsiz - 3] : -1;
68 throw cms::Exception(
"DDException") <<
"Funny layer # " << lay <<
" zp " << zp <<
" in " << nsiz <<
" components";
71 php.
layer_.emplace_back(lay);
72 auto itr = layers.find(lay);
73 if (itr == layers.end()) {
74 double rin(0), rout(0);
78 const std::vector<double>& rmin = polyhedra.
rMinVec();
79 const std::vector<double>& rmax = polyhedra.
rMaxVec();
91 fv.
rotation().GetComponents(x, y, z);
92 const CLHEP::HepRep3x3
rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
93 const CLHEP::HepRotation hr(
rotation);
101 const CLHEP::Hep3Vector h3v(xx, yy, zz);
109 trforms.emplace_back(mytrf);
110 trformUse.emplace_back(
false);
119 std::unordered_map<int32_t, int32_t> copies;
121 std::vector<int32_t> wafer2copy;
122 std::vector<HGCalGeomParameters::cellParameters> wafers;
124 DDValue val1(attribute, sdTag2, 0.0);
129 throw cms::Exception(
"DDException") <<
"Attribute " << val1 <<
" not found but needed.";
132 std::unordered_set<std::string>
names;
137 int nsiz = (int)(copy.size());
138 int wafer = (nsiz > 0) ? copy[nsiz - 1] : 0;
139 int layer = (nsiz > 1) ? copy[nsiz - 2] : 0;
141 throw cms::Exception(
"DDException") <<
"Funny wafer # " << wafer <<
" in " << nsiz <<
" components";
142 }
else if (layer > (
int)(layers.size())) {
143 edm::LogWarning(
"HGCalGeom") <<
"Funny wafer # " << wafer <<
" Layer " << layer <<
":" << layers.size()
144 <<
" among " << nsiz <<
" components";
146 auto itr = copies.find(wafer);
147 auto cpy = copiesInLayers[
layer].find(wafer);
148 if (itr != copies.end() && cpy == copiesInLayers[
layer].end()) {
149 copiesInLayers[
layer][wafer] = itr->second;
151 if (itr == copies.end()) {
152 copies[wafer] = wafer2copy.size();
153 copiesInLayers[
layer][wafer] = wafer2copy.size();
160 wafer2copy.emplace_back(wafer);
163 wafers.emplace_back(cell);
164 if (names.count(name) == 0) {
165 std::vector<double>
zv, rv;
168 zv = polyhedra.
zVec();
200 std::map<int, int> wafertype;
201 std::map<int, HGCalGeomParameters::cellParameters> cellsf, cellsc;
202 DDValue val2(attribute, sdTag3, 0.0);
207 throw cms::Exception(
"DDException") <<
"Attribute " << val2 <<
" not found but needed.";
214 int nsiz = (int)(copy.size());
215 int cellx = (nsiz > 0) ? copy[nsiz - 1] : 0;
216 int wafer = (nsiz > 1) ? copy[nsiz - 2] : 0;
219 if (type != 1 && type != 2) {
221 <<
"Funny cell # " << cell <<
" type " << type <<
" in " << nsiz <<
" components";
223 auto ktr = wafertype.find(wafer);
224 if (ktr == wafertype.end())
225 wafertype[wafer] = type;
227 std::map<int, HGCalGeomParameters::cellParameters>::iterator itr;
230 itr = cellsf.find(cell);
231 newc = (itr == cellsf.end());
233 itr = cellsc.find(cell);
234 newc = (itr == cellsc.end());
238 bool half = (name.find(
"Half") != std::string::npos);
251 edm::LogVerbatim(
"HGCalGeom") <<
"Wafer " << wafer <<
" Type " << type <<
" Cell " << cellx <<
" local "
252 << xx <<
":" << yy <<
" new " << p1 <<
":" <<
p2;
268 layers, trforms, trformUse, copies, copiesInLayers, wafer2copy, wafers, wafertype, cellsf, cellsc, php);
279 std::map<int, HGCalGeomParameters::layerParameters>
layers;
280 std::vector<HGCalParameters::hgtrform> trforms;
281 std::vector<bool> trformUse;
282 std::vector<std::pair<int, int> > trused;
285 const std::vector<double>& pars = fv.
parameters();
288 int nsiz = (int)(copy.size());
289 int lay = (nsiz > 0) ? copy[0] : 0;
290 int zp = (nsiz > 2) ? copy[2] : -1;
294 throw cms::Exception(
"DDException") <<
"Funny layer # " << lay <<
" zp " << zp <<
" in " << nsiz <<
" components";
297 php.
layer_.emplace_back(lay);
298 auto itr = layers.find(lay);
300 if (itr == layers.end()) {
301 double rin(0), rout(0);
302 if (dd4hep::isA<dd4hep::Polyhedra>(fv.
solid())) {
305 }
else if (dd4hep::isA<dd4hep::Tube>(fv.
solid())) {
306 dd4hep::Tube tubeSeg(fv.
solid());
311 layers[lay] = laypar;
313 std::pair<int, int> layz(lay, zp);
314 if (
std::find(trused.begin(), trused.end(), layz) == trused.end()) {
315 trused.emplace_back(layz);
317 fv.
rotation().GetComponents(x, y, z);
318 const CLHEP::HepRep3x3
rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
319 const CLHEP::HepRotation hr(
rotation);
327 const CLHEP::Hep3Vector h3v(xx, yy, zz);
335 trforms.emplace_back(mytrf);
336 trformUse.emplace_back(
false);
345 std::unordered_map<int32_t, int32_t> copies;
347 std::vector<int32_t> wafer2copy;
348 std::vector<HGCalGeomParameters::cellParameters> wafers;
353 throw cms::Exception(
"DDException") <<
"Attribute " << sdTag2 <<
" not found but needed.";
356 std::unordered_set<std::string>
names;
360 int nsiz = (int)(copy.size());
361 int wafer = (nsiz > 0) ? copy[0] : 0;
362 int layer = (nsiz > 1) ? copy[1] : 0;
364 throw cms::Exception(
"DDException") <<
"Funny wafer # " << wafer <<
" in " << nsiz <<
" components";
365 }
else if (layer > (
int)(layers.size())) {
366 edm::LogWarning(
"HGCalGeom") <<
"Funny wafer # " << wafer <<
" Layer " << layer <<
":" << layers.size()
367 <<
" among " << nsiz <<
" components";
369 auto itr = copies.find(wafer);
370 auto cpy = copiesInLayers[
layer].find(wafer);
371 if (itr != copies.end() && cpy == copiesInLayers[
layer].end()) {
372 copiesInLayers[
layer][wafer] = itr->second;
374 if (itr == copies.end()) {
375 copies[wafer] = wafer2copy.size();
376 copiesInLayers[
layer][wafer] = wafer2copy.size();
383 wafer2copy.emplace_back(wafer);
386 wafers.emplace_back(cell);
387 if (names.count(name) == 0) {
389 const std::vector<double>& pars = fv1.
parameters();
424 std::map<int, int> wafertype;
425 std::map<int, HGCalGeomParameters::cellParameters> cellsf, cellsc;
430 throw cms::Exception(
"DDException") <<
"Attribute " << sdTag3 <<
" not found but needed.";
436 int nsiz = (int)(copy.size());
437 int cellx = (nsiz > 0) ? copy[0] : 0;
438 int wafer = (nsiz > 1) ? copy[1] : 0;
441 if (type != 1 && type != 2) {
443 <<
"Funny cell # " << cell <<
" type " << type <<
" in " << nsiz <<
" components";
445 auto ktr = wafertype.find(wafer);
446 if (ktr == wafertype.end())
447 wafertype[wafer] = type;
449 std::map<int, HGCalGeomParameters::cellParameters>::iterator itr;
452 itr = cellsf.find(cell);
453 newc = (itr == cellsf.end());
455 itr = cellsc.find(cell);
456 newc = (itr == cellsc.end());
460 bool half = (name.find(
"Half") != std::string::npos);
473 edm::LogVerbatim(
"HGCalGeom") <<
"Wafer " << wafer <<
" Type " << type <<
" Cell " << cellx <<
" local "
474 << xx <<
":" << yy <<
" new " << p1 <<
":" <<
p2;
490 layers, trforms, trformUse, copies, copiesInLayers, wafer2copy, wafers, wafertype, cellsf, cellsc, php);
494 std::vector<HGCalParameters::hgtrform>& trforms,
495 std::vector<bool>& trformUse,
496 const std::unordered_map<int32_t, int32_t>& copies,
498 const std::vector<int32_t>& wafer2copy,
499 const std::vector<HGCalGeomParameters::cellParameters>& wafers,
500 const std::map<int, int>& wafertype,
501 const std::map<int, HGCalGeomParameters::cellParameters>& cellsf,
502 const std::map<int, HGCalGeomParameters::cellParameters>& cellsc,
504 if (((cellsf.size() + cellsc.size()) == 0) || (wafers.empty()) || (layers.empty())) {
505 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: mismatch between geometry and specpar: cells "
506 << cellsf.size() <<
":" << cellsc.size() <<
" wafers " << wafers.size()
507 <<
" layers " << layers.size();
510 for (
unsigned int i = 0;
i < layers.size(); ++
i) {
511 for (
auto&
layer : layers) {
522 for (
unsigned int i = 0;
i < php.
layer_.size(); ++
i) {
523 for (
unsigned int i1 = 0; i1 < trforms.size(); ++i1) {
524 if (!trformUse[i1] && php.
layerGroup_[trforms[i1].lay - 1] == (
int)(
i + 1)) {
526 trforms[i1].lay = (
i + 1);
527 trformUse[i1] =
true;
530 for (
unsigned int i2 = i1 + 1; i2 < trforms.size(); ++i2) {
531 if (!trformUse[i2] && trforms[i2].zp == trforms[i1].zp &&
535 trformUse[i2] =
true;
546 for (
unsigned i = 0;
i < wafer2copy.size(); ++
i) {
548 php.
waferPosX_.emplace_back(wafers[i].xyz.x());
549 php.
waferPosY_.emplace_back(wafers[i].xyz.y());
550 auto ktr = wafertype.find(wafer2copy[i]);
551 int typet = (ktr == wafertype.end()) ? 0 : (ktr->second);
553 double r = wafers[
i].xyz.perp();
555 for (
int k = 1;
k < 4; ++
k) {
566 std::vector<HGCalGeomParameters::cellParameters>::const_iterator itrf = wafers.end();
567 for (
unsigned int i = 0;
i < cellsf.size(); ++
i) {
568 auto itr = cellsf.find(
i);
569 if (itr == cellsf.end()) {
570 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: missing info for fine cell number " <<
i;
572 double xx = (itr->second).xyz.x();
573 double yy = (itr->second).xyz.y();
574 int waf = (itr->second).wafer;
575 std::pair<double, double>
xy =
cellPosition(wafers, itrf, waf, xx, yy);
582 for (
unsigned int i = 0;
i < cellsc.size(); ++
i) {
583 auto itr = cellsc.find(
i);
584 if (itr == cellsc.end()) {
585 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: missing info for coarse cell number " <<
i;
587 double xx = (itr->second).xyz.x();
588 double yy = (itr->second).xyz.y();
589 int waf = (itr->second).wafer;
590 std::pair<double, double>
xy =
cellPosition(wafers, itrf, waf, xx, yy);
602 php.
depth_.emplace_back(
i + 1);
642 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters: wafer radius " << php.
waferR_ <<
" and dimensions of the "
656 <<
" coarse cells in a wafer";
675 for (std::unordered_map<int, int>::const_iterator itr = theModules.begin(); itr != theModules.end(); ++itr, ++
k2) {
676 edm::LogVerbatim(
"HGCalGeom") <<
"[" << k2 <<
"] " << itr->first <<
":" << itr->second;
685 std::map<int, HGCalGeomParameters::layerParameters>
layers;
696 int nsiz = (int)(copy.size());
697 if (nsiz < levelTop) {
698 int lay = copy[nsiz - 1];
705 <<
" lay " << lay <<
" z " <<
zside;
709 <<
"Funny layer # " << lay <<
" zp " << zside <<
" in " << nsiz <<
" components";
712 php.
layer_.emplace_back(lay);
716 auto itr = layers.find(lay);
717 if (itr == layers.end()) {
720 layers[lay] = laypar;
722 (itr->second).rmin =
std::min(rin, (itr->second).rmin);
723 (itr->second).rmax =
std::max(rout, (itr->second).rmax);
725 if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) {
727 fv.
rotation().GetComponents(x, y, z);
728 const CLHEP::HepRep3x3
rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
729 const CLHEP::HepRotation hr(
rotation);
744 trforms[std::make_pair(lay, zside)] = mytrf;
762 std::map<int, HGCalGeomParameters::layerParameters>
layers;
773 int nsiz =
static_cast<int>(fv.
level());
774 if (nsiz < levelTop) {
782 <<
" size " << nsiz <<
":" << levelTop <<
" lay " << lay <<
" z " << zside <<
":"
787 <<
"Funny layer # " << lay <<
" zp " << zside <<
" in " << nsiz <<
" components";
790 php.
layer_.emplace_back(lay);
791 const std::vector<double>& pars = fv.
parameters();
794 auto itr = layers.find(lay);
795 if (itr == layers.end()) {
798 layers[lay] = laypar;
800 (itr->second).rmin =
std::min(rin, (itr->second).rmin);
801 (itr->second).rmax =
std::max(rout, (itr->second).rmax);
803 if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) {
805 fv.
rotation().GetComponents(x, y, z);
806 const CLHEP::HepRep3x3
rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
807 const CLHEP::HepRotation hr(
rotation);
822 trforms[std::make_pair(lay, zside)] = mytrf;
839 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters (DDD)::loadGeometryHexagonModule called with tags " << sdTag1
840 <<
":" << sdTag2 <<
" firstLayer " << firstLayer <<
":" << php.
firstMixedLayer_;
841 int ntot1(0), ntot2(0);
843 std::map<int, HGCalGeomParameters::layerParameters>
layers;
844 std::map<std::pair<int, int>,
double> zvals;
849 DDValue val1(attribute, sdTag2, 0.0);
858 int nsiz =
static_cast<int>(copy.size());
859 if (levelTop < nsiz) {
860 int lay = copy[levelTop];
866 <<
"Funny layer # " << lay <<
" zp " << zside <<
" in " << nsiz <<
" components";
868 if (zvals.find(std::make_pair(lay, zside)) == zvals.end()) {
871 std::ostringstream st1;
872 st1 <<
"Name0 " << fv1.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " << zside <<
" # of levels "
874 for (
const auto&
c : copy)
876 st1 <<
" Z " << zvals[std::make_pair(lay, zside)];
885 DDValue val2(attribute, sdTag1, 0.0);
894 int nsiz =
static_cast<int>(copy.size());
895 if (levelTop < nsiz) {
896 int lay = copy[levelTop];
902 std::ostringstream st2;
903 st2 <<
"Name1 " << sol.
name() <<
" shape " << sol.
shape() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide "
904 << zside <<
":" << php.
levelZSide_ <<
" # of levels " << nsiz;
905 for (
const auto&
c : copy)
911 <<
"Funny layer # " << lay <<
" zp " << zside <<
" in " << nsiz <<
" components";
913 if (zvals.find(std::make_pair(lay, zside)) != zvals.end()) {
915 php.
layer_.emplace_back(lay);
916 auto itr = layers.find(lay);
917 if (itr == layers.end()) {
923 double zp = zvals[std::make_pair(lay, 1)];
925 layers[lay] = laypar;
927 std::ostringstream st3;
928 st3 <<
"Name1 " << fv2.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " << zside <<
" # of levels "
930 for (
const auto& c : copy)
932 st3 <<
" R " << rin <<
":" << rout;
937 if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) {
939 fv2.
rotation().GetComponents(x, y, z);
940 const CLHEP::HepRep3x3
rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
941 const CLHEP::HepRotation hr(
rotation);
948 const CLHEP::Hep3Vector h3v(xx, yy, zvals[std::make_pair(lay, zside)]);
956 trforms[std::make_pair(lay, zside)] = mytrf;
964 edm::LogVerbatim(
"HGCalGeom") <<
"Total # of views " << ntot1 <<
":" << ntot2;
975 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters (DD4hep)::loadGeometryHexagonModule called with tags " << sdTag1
976 <<
":" << sdTag2 <<
" firstLayer " << firstLayer;
977 int ntot1(0), ntot2(0);
979 std::map<int, HGCalGeomParameters::layerParameters>
layers;
981 std::map<std::pair<int, int>,
double> zvals;
990 int nsiz =
static_cast<int>(fv1.
level());
991 if (nsiz > levelTop) {
993 int lay = copy[nsiz - levelTop - 1];
999 <<
"Funny layer # " << lay <<
" zp " << zside <<
" in " << nsiz <<
" components";
1001 if (zvals.find(std::make_pair(lay, zside)) == zvals.end()) {
1004 std::ostringstream st1;
1005 st1 <<
"Name0 " << fv1.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " << zside <<
" # of levels "
1007 for (
const auto&
c : copy)
1009 st1 <<
" Z " << zvals[std::make_pair(lay, zside)];
1021 int nsiz =
static_cast<int>(fv2.
level());
1025 if (nsiz > levelTop) {
1027 int lay = copy[nsiz - levelTop - 1];
1032 std::ostringstream st2;
1034 << levelTop <<
":" << lay <<
" ZSide " << zside <<
":" << php.
levelZSide_ <<
" # of levels " << nsiz;
1035 for (
const auto&
c : copy)
1041 <<
"Funny layer # " << lay <<
" zp " << zside <<
" in " << nsiz <<
" components";
1043 if (zvals.find(std::make_pair(lay, zside)) != zvals.end()) {
1045 php.
layer_.emplace_back(lay);
1046 auto itr = layers.find(lay);
1047 if (itr == layers.end()) {
1048 const std::vector<double>& pars = fv2.
parameters();
1053 double zp = zvals[std::make_pair(lay, 1)];
1055 layers[lay] = laypar;
1057 std::ostringstream st3;
1058 st3 <<
"Name2 " << fv2.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " << zside <<
" # of levels "
1060 for (
const auto& c : copy)
1062 st3 <<
" R " << rin <<
":" << rout;
1067 if (trforms.find(std::make_pair(lay, zside)) == trforms.end()) {
1069 fv2.
rotation().GetComponents(x, y, z);
1070 const CLHEP::HepRep3x3
rotation(x.X(), y.X(), z.X(), x.Y(), y.Y(), z.Y(), x.Z(), y.Z(), z.Z());
1071 const CLHEP::HepRotation hr(
rotation);
1078 const CLHEP::Hep3Vector h3v(xx, yy, zvals[std::make_pair(lay, zside)]);
1086 trforms[std::make_pair(lay, zside)] = mytrf;
1093 edm::LogVerbatim(
"HGCalGeom") <<
"Total # of views " << ntot1 <<
":" << ntot2;
1100 const int& firstLayer,
1102 double rmin(0), rmax(0);
1103 for (
unsigned int i = 0;
i < layers.size(); ++
i) {
1104 for (
auto&
layer : layers) {
1105 if (
layer.first == (
int)(
i + firstLayer)) {
1111 rmin =
layer.second.rmin;
1112 rmax =
layer.second.rmax;
1114 if (rmin >
layer.second.rmin)
1115 rmin =
layer.second.rmin;
1116 if (rmax <
layer.second.rmax)
1117 rmax =
layer.second.rmax;
1123 php.
rLimit_.emplace_back(rmin);
1124 php.
rLimit_.emplace_back(rmax);
1129 for (
unsigned int i = 0;
i < php.
layer_.size(); ++
i) {
1130 for (
auto& trform : trforms) {
1131 if (trform.first.first == (
int)(
i + firstLayer)) {
1176 const auto& dummy2 =
getDDDArray(
"LayerOffset", sv, 0);
1177 if (!dummy2.empty())
1186 if (fv1.firstChild()) {
1188 const auto& dummy = getDDDArray(
"WaferSize", sv, 0);
1189 waferSize_ = dummy[0];
1195 if (fv2.firstChild()) {
1197 php.cellSize_ = getDDDArray(
"CellSize", sv, 0);
1200 loadSpecParsHexagon(php);
1209 php.
boundR_ = fv.
get<std::vector<double> >(sdTag4,
"RadiusBound");
1211 php.
rLimit_ = fv.
get<std::vector<double> >(sdTag4,
"RadiusLimits");
1219 php.
slopeMin_ = fv.
get<std::vector<double> >(sdTag4,
"Slope");
1224 const auto& dummy = fv.
get<std::vector<double> >(sdTag2,
"WaferSize");
1228 php.
cellSize_ = fv.
get<std::vector<double> >(sdTag3,
"CellSize");
1232 const auto& dummy2 = fv.
get<std::vector<double> >(sdTag1,
"LayerOffset");
1233 if (!dummy2.empty()) {
1244 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters: wafer radius ranges"
1245 <<
" for cell grouping " << php.
boundR_[0] <<
":" << php.
boundR_[1] <<
":"
1250 <<
"for the 3 ranges:";
1256 for (
unsigned int k = 0;
k < php.
cellSize_.size(); ++
k)
1278 const auto& dummy =
getDDDArray(
"RadiusCuts", sv, 4);
1302 const auto& dummy2 =
getDDDArray(
"LayerOffset", sv, 1);
1310 std::vector<int> layerType,
waferIndex, waferProperties;
1347 const auto& dummy = fv.
get<std::vector<double> >(sdTag1,
"RadiusCuts");
1348 if (dummy.size() > 3) {
1357 php.
slopeMin_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeBottom");
1358 php.
zFrontMin_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontBottom");
1360 php.
rMinFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMinFront");
1363 php.
slopeTop_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeTop");
1364 php.
zFrontTop_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontTop");
1366 php.
rMaxFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMaxFront");
1369 for (
unsigned int k = 0;
k < kmax; ++
k)
1372 const auto& dummy2 = fv.
get<std::vector<double> >(sdTag1,
"LayerOffset");
1373 if (!dummy2.empty()) {
1379 for (
auto const& it : vmap) {
1380 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"RadiusMixBoundary")) {
1381 for (
const auto&
i : it.second)
1383 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"ZRanges")) {
1384 for (
const auto&
i : it.second)
1386 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"LayerCenter")) {
1387 for (
const auto&
i : it.second)
1396 std::vector<int> layerType,
waferIndex, waferProperties;
1398 for (
auto const& it : vmap) {
1399 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"WaferIndexEE")) {
1400 for (
const auto&
i : it.second)
1401 waferIndex.emplace_back(std::round(
i));
1402 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"WaferPropertiesEE")) {
1403 for (
const auto&
i : it.second)
1404 waferProperties.emplace_back(std::round(
i));
1408 for (
auto const& it : vmap) {
1409 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"WaferIndexHE")) {
1410 for (
const auto&
i : it.second)
1411 waferIndex.emplace_back(std::round(
i));
1412 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"WaferPropertiesHE")) {
1413 for (
const auto&
i : it.second)
1414 waferProperties.emplace_back(std::round(
i));
1420 for (
auto const& it : vmap) {
1421 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"LayerTypesEE")) {
1422 for (
const auto&
i : it.second)
1423 layerType.emplace_back(std::round(
i));
1427 for (
auto const& it : vmap) {
1428 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"LayerTypesHE")) {
1429 for (
const auto&
i : it.second)
1430 layerType.emplace_back(std::round(
i));
1447 <<
"parameters for 120 to 200 micron "
1452 <<
"parameters for 200 to 300 micron "
1477 const std::vector<int>& layerType,
1479 const std::vector<int>& waferProperties) {
1486 for (
unsigned int k = 0;
k < layerType.size(); ++
k) {
1495 php.
layerRotV_.emplace_back(std::make_pair(cth, sth));
1501 for (
unsigned int k = 0;
k < waferIndex.size(); ++
k) {
1547 const auto& dummy2 =
getDDDArray(
"LayerOffset", sv, 1);
1556 std::vector<int> tileHEX1, tileHEX2, tileHEX3, tileHEX4;
1557 std::vector<double> tileRMin, tileRMax;
1558 std::vector<int> tileRingMin, tileRingMax;
1565 tileRMin = fv.
vector(
"TileRMin");
1566 tileRMax = fv.
vector(
"TileRMax");
1590 for (
auto const& it : vmap) {
1591 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"RadiusMixBoundary")) {
1592 for (
const auto&
i : it.second)
1594 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"ZRanges")) {
1595 for (
const auto&
i : it.second)
1597 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"LayerCenter")) {
1598 for (
const auto&
i : it.second)
1605 php.
rMinLayerBH_ = fv.
get<std::vector<double> >(sdTag1,
"RMinLayerBH");
1612 php.
slopeMin_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeBottom");
1613 php.
zFrontMin_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontBottom");
1615 php.
rMinFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMinFront");
1618 php.
slopeTop_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeTop");
1619 php.
zFrontTop_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontTop");
1621 php.
rMaxFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMaxFront");
1624 for (
unsigned int k = 0;
k < kmax; ++
k)
1627 const auto& dummy2 = fv.
get<std::vector<double> >(sdTag1,
"LayerOffset");
1635 std::vector<int> tileHEX1, tileHEX2, tileHEX3, tileHEX4;
1636 std::vector<double> tileRMin, tileRMax;
1637 std::vector<int> tileRingMin, tileRingMax;
1638 for (
auto const& it : vmap) {
1639 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileIndex")) {
1640 for (
const auto&
i : it.second)
1641 tileIndx.emplace_back(std::round(
i));
1642 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileProperty")) {
1643 for (
const auto&
i : it.second)
1644 tileProperty.emplace_back(std::round(
i));
1645 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileHEX1")) {
1646 for (
const auto&
i : it.second)
1647 tileHEX1.emplace_back(std::round(
i));
1648 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileHEX2")) {
1649 for (
const auto&
i : it.second)
1650 tileHEX2.emplace_back(std::round(
i));
1651 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileHEX3")) {
1652 for (
const auto&
i : it.second)
1653 tileHEX3.emplace_back(std::round(
i));
1654 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileHEX4")) {
1655 for (
const auto&
i : it.second)
1656 tileHEX4.emplace_back(std::round(
i));
1657 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileRMin")) {
1658 for (
const auto&
i : it.second)
1660 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileRMax")) {
1661 for (
const auto&
i : it.second)
1663 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileRingMin")) {
1664 for (
const auto&
i : it.second)
1665 tileRingMin.emplace_back(std::round(
i));
1666 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"TileRingMax")) {
1667 for (
const auto&
i : it.second)
1668 tileRingMax.emplace_back(std::round(
i));
1718 const std::vector<int>& tileIndx,
1720 const std::vector<int>& tileHEX1,
1721 const std::vector<int>& tileHEX2,
1722 const std::vector<int>& tileHEX3,
1723 const std::vector<int>& tileHEX4,
1724 const std::vector<double>& tileRMin,
1725 const std::vector<double>& tileRMax,
1726 const std::vector<int>& tileRingMin,
1727 const std::vector<int>& tileRingMax) {
1729 for (
unsigned int k = 0;
k < tileIndx.size(); ++
k) {
1740 <<
":" << tileHEX2[
k] <<
":" << tileHEX3[
k] <<
":" << tileHEX4[
k] <<
std::dec;
1744 for (
unsigned int k = 0;
k < tileRMin.size(); ++
k) {
1745 php.
tileRingR_.emplace_back(tileRMin[
k], tileRMax[k]);
1747 edm::LogVerbatim(
"HGCalGeom") <<
"TileRingR[" << k <<
"] " << tileRMin[
k] <<
":" << tileRMax[
k];
1751 for (
unsigned k = 0;
k < tileRingMin.size(); ++
k) {
1754 edm::LogVerbatim(
"HGCalGeom") <<
"TileRingRange[" << k <<
"] " << tileRingMin[
k] <<
":" << tileRingMax[
k];
1763 edm::LogVerbatim(
"HGCalGeom") <<
"Input waferWidth " << waferW <<
":" << rmin <<
" R Limits: " << rin <<
":" << rout
1764 <<
" Fine " << rMaxFine;
1772 double dx = 0.5 * waferW;
1773 double dy = 3.0 * dx *
tan(30._deg);
1774 double rr = 2.0 * dx *
tan(30._deg);
1775 int ncol = (int)(2.0 * rout / waferW) + 1;
1776 int nrow = (int)(rout / (waferW *
tan(30._deg))) + 1;
1777 int ns2 = (2 * ncol + 1) * (2 * nrow + 1) * php.
layer_.size();
1778 int incm(0), inrm(0), kount(0),
ntot(0);
1784 for (
int nr = -nrow; nr <= nrow; ++nr) {
1785 int inr = (nr >= 0) ? nr : -nr;
1786 for (
int nc = -ncol; nc <= ncol; ++nc) {
1787 int inc = (nc >= 0) ? nc : -nc;
1788 if (inr % 2 == inc % 2) {
1789 double xpos = nc *
dx;
1790 double ypos = nr *
dy;
1792 double rpos =
std::sqrt(xpos * xpos + ypos * ypos);
1793 int typet = (rpos < rMaxFine) ? 1 : 2;
1795 for (
int k = 1;
k < 4; ++
k) {
1796 if ((rpos + rmin) <= php.
boundR_[
k]) {
1802 if (corner.first > 0) {
1810 edm::LogVerbatim(
"HGCalGeom") << kount <<
":" << ntot <<
" Copy " << copy <<
" Type " << typel <<
":" << typet
1811 <<
" Location " << corner.first <<
" Position " << xpos <<
":" << ypos
1812 <<
" Layers " << php.
layer_.size();
1819 for (
unsigned int il = 0; il < php.
layer_.size(); ++il) {
1820 std::pair<int, int> corner =
1822 if (corner.first > 0) {
1823 auto cpy = copiesInLayers[php.
layer_[il]].find(copy);
1824 if (cpy == copiesInLayers[php.
layer_[il]].end())
1825 copiesInLayers[php.
layer_[il]][copy] =
1830 waferTypes[wl] = corner;
1842 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalWaferHexagon: # of columns " << incm <<
" # of rows " << inrm <<
" and "
1843 << kount <<
":" << ntot <<
" wafers; R " << rin <<
":" << rout;
1845 for (
unsigned int k = 0;
k < copiesInLayers.size(); ++
k) {
1846 const auto& theModules = copiesInLayers[
k];
1849 for (std::unordered_map<int, int>::const_iterator itr = theModules.begin(); itr != theModules.end(); ++itr, ++
k2) {
1850 edm::LogVerbatim(
"HGCalGeom") <<
"[" << k2 <<
"] " << itr->first <<
":" << itr->second;
1869 edm::LogVerbatim(
"HGCalGeom") <<
"Input waferWidth " << waferW <<
":" << waferS <<
" R Max: " << rout;
1877 double r = 0.5 * (waferW + waferS);
1879 double dy = 0.75 *
R;
1880 double r1 = 0.5 * waferW;
1881 double R1 = 2.0 * r1 /
sqrt3_;
1882 int N = (r == 0) ? 3 : ((
int)(0.5 * rout /
r) + 3);
1883 int ns1 = (2 * N + 1) * (2 * N + 1);
1886 edm::LogVerbatim(
"HGCalGeom") <<
"wafer " << waferW <<
":" << waferS <<
" r " << r <<
" dy " << dy <<
" N " << N
1887 <<
" sizes " << ns1 <<
":" << ns2;
1888 std::vector<int> indtypes(ns1 + 1);
1894 int ipos(0), lpos(0), uvmax(0), nwarn(0);
1895 std::vector<int> uvmx(php.
zLayerHex_.size(), 0);
1896 for (
int v = -N;
v <=
N; ++
v) {
1897 for (
int u = -N; u <=
N; ++u) {
1899 int nc = -2 * u +
v;
1900 double xpos = nc *
r;
1901 double ypos = nr *
dy;
1906 wafersInLayers[indx] = ipos;
1916 double xpos0 = xpos + xyoff.first;
1917 double ypos0 = ypos + xyoff.second;
1928 typesInLayers[kndx] = lpos;
1931 indtypes.emplace_back(kndx);
1933 std::pair<int, int> corner =
1938 <<
" u " << u <<
" v " << v <<
" with " << corner.first <<
" corners";
1946 edm::LogVerbatim(
"HGCalGeom") <<
"Layer " << lay <<
" u|v " << u <<
":" << v <<
" with corner "
1947 << corner.first <<
":" << corner.second;
1956 int part = (itr->second).part;
1957 int orient = (itr->second).orient;
1964 <<
"Layer:u:v " <<
i <<
":" << lay <<
":" << u <<
":" << v <<
" Part " << corner0.first <<
":"
1965 << part <<
" Orient " << corner0.second <<
":" << orient <<
" Position " << xpos0 <<
":" << ypos0
1967 <<
" Compatibiliety Flag " <<
ok;
1973 waferTypes[wl] = corner0;
1976 <<
"Layer " << lay <<
" u|v " << u <<
":" << v <<
" Index " << std::hex << wl <<
std::dec <<
" pos "
1977 << xpos0 <<
":" << ypos0 <<
" R " << r1 <<
":" << R1 <<
" Range " << php.
rMinLayHex_[
i] <<
":"
1979 << corner.second <<
" croner0 " << corner0.first <<
":" << corner0.second;
1982 waferTypes[wl] = corner;
1984 edm::LogVerbatim(
"HGCalGeom") <<
"Layer " << lay <<
" u|v " << u <<
":" << v <<
" with corner "
1985 << corner.first <<
":" << corner.second;
1993 edm::LogWarning(
"HGCalGeom") <<
"HGCalGeomParameters::loadWafer8: there are " << nwarn
1994 <<
" wafers with non-matching partial- orientation types";
2032 int id = indtypes[
k];
2053 << xyoff.first <<
":" << xyoff.second;
2074 for (
auto const& it : vmap) {
2075 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"waferFine")) {
2076 for (
const auto&
i : it.second)
2078 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(it.first),
"waferCoarse")) {
2079 for (
const auto&
i : it.second)
2090 for (
unsigned int k = 0;
k < php.
cellFine_.size(); ++
k)
2111 for (
unsigned int k = 0;
k < 2; ++
k) {
2136 for (
unsigned int k = 0;
k < 2; ++
k) {
2145 edm::LogVerbatim(
"HGCalGeom") <<
"Old [" <<
k <<
"] rmax " << rmax <<
" Z = " << zv
2146 <<
" dEta = " << php.
cellSize_[
k] <<
"\nOld[0] new R = " << rv <<
" Eta = " <<
eta;
2154 edm::LogVerbatim(
"HGCalGeom") <<
"Old [" << kount <<
"] new R = " << rv <<
" Eta = " <<
eta;
2162 std::vector<double>::iterator low, high;
2179 edm::LogVerbatim(
"HGCalGeom") <<
"Modified irlow " << irlow <<
" dr " << drlow;
2189 int irhigh = (int)(high - php.
radiusLayer_[kk].begin());
2198 edm::LogVerbatim(
"HGCalGeom") <<
"Modified irhigh " << irhigh <<
" dr " << drhigh;
2204 edm::LogVerbatim(
"HGCalGeom") <<
"Old Layer " <<
k <<
" Type " << kk <<
" Low edge " << irlow <<
":" << drlow
2205 <<
" Top edge " << irhigh <<
":" << drhigh;
2210 for (
unsigned int k = 0;
k < 2; ++
k) {
2239 mytr.
h = 0.5 * (rmax - rmin);
2268 const std::vector<double>& fvec = value.
doubles();
2269 int nval = fvec.size();
2273 <<
"HGCalGeomParameters: # of " << str <<
" bins " << nval <<
" < " << nmin <<
" ==> illegal";
2276 if (nval < 1 && nmin == 0) {
2278 <<
"HGCalGeomParameters: # of " << str <<
" bins " << nval <<
" < 1 ==> illegal"
2279 <<
" (nmin=" << nmin <<
")";
2285 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: cannot get array " <<
str;
2287 std::vector<double> fvec;
2293 const std::vector<HGCalGeomParameters::cellParameters>& wafers,
2294 std::vector<HGCalGeomParameters::cellParameters>::const_iterator& itrf,
2298 if (itrf == wafers.end()) {
2299 for (std::vector<HGCalGeomParameters::cellParameters>::const_iterator itr = wafers.begin(); itr != wafers.end();
2301 if (itr->wafer == wafer) {
2307 double dx(0),
dy(0);
2308 if (itrf != wafers.end()) {
2309 dx = (xx - itrf->xyz.x());
2312 dy = (yy - itrf->xyz.y());
2316 return std::make_pair(
dx, dy);
2320 std::for_each(v.begin(), v.end(), [
s](
double&
n) {
n *=
s; });
std::vector< int > iradMaxBH_
std::unordered_map< std::string, std::vector< double >> DDVectorsMap
std::vector< double > waferPosY_
Log< level::Info, true > LogVerbatim
std::vector< int > layer_
std::vector< double > moduleDzR_
std::vector< int > depthLayerF_
std::vector< int > depth_
std::vector< double > zFrontMin_
int32_t tileType(const int32_t property)
HGCalGeomTools geomTools_
std::vector< double > moduleHR_
const std::string & name() const
The name of a logical-part of the current node in the filtered-view.
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
const std::vector< double > & doubles() const
a reference to the double-valued values stored in the given instance of DDValue
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double >> DD3Vector
static std::vector< std::string > checklist log
const edm::EventSetup & c
layer_map copiesInLayers_
std::vector< LayerSetAndLayers > layers(const SeedingLayerSetsHits &sets)
std::vector< std::pair< double, double > > layerRotV_
std::vector< bool > cellCoarseHalf_
std::vector< bool > cellFineHalf_
uint16_t *__restrict__ id
std::vector< double > rMaxVec(void) const
int scintType(const int layer) const
std::vector< int > moduleLayR_
static constexpr int siliconFileEE
nav_type copyNumbers() const
return the stack of copy numbers
int32_t waferU(const int32_t index)
std::vector< int > cellFine_
void rescale(std::vector< double > &, const double s)
const RotationMatrix rotation() const
int32_t waferLayer(const int32_t index)
static int32_t getUnpackedCell6(int id)
std::vector< double > moduleHS_
std::string name(Mapping a, V value)
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
Sin< T >::type sin(const T &t)
std::vector< double > trformTranY_
void loadGeometryHexagonModule(const DDCompactView *cpv, HGCalParameters &php, const std::string &sdTag1, const std::string &sdTag2, int firstLayer)
Global3DPoint GlobalPoint
std::vector< double > cellFineY_
void loadSpecParsHexagon(const DDFilteredView &fv, HGCalParameters &php, const DDCompactView *cpv, const std::string &sdTag1, const std::string &sdTag2)
static bool goodTypeMode(double xpos, double ypos, double delX, double delY, double rin, double rout, int part, int rotn, bool debug)
std::vector< double > trformRotZY_
Exp< T >::type exp(const T &t)
static int getRotation(int zside, int type, int rotn)
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
void resetZero(std::vector< double > &)
std::vector< uint32_t > trformIndex_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
std::vector< int > layerGroupM_
Compact representation of the geometrical detector hierarchy.
bool DDfetch(const DDsvalues_type *, DDValue &)
helper for retrieving DDValues from DDsvalues_type *.
HGCalGeometryMode::GeometryMode mode_
const std::string names[nVars_]
int32_t waferOrient(const int32_t property)
double scintCellSize(const int layer) const
std::vector< double > trformRotXX_
std::vector< int > nPhiBinBH_
A DDSolid represents the shape of a part.
static constexpr double tol
void fillTrForm(const hgtrform &mytr)
void loadSpecParsHexagon8(const DDFilteredView &fv, HGCalParameters &php)
static constexpr uint32_t k_CornerSize
constexpr std::array< uint8_t, layerIndexSize > layer
const Translation translation() const
wafer_map wafersInLayers_
static int32_t getUnpackedCellType6(int id)
const cms::DDSolidShape shape() const
std::vector< double > rMinLayerBH_
std::vector< double > trformRotZX_
std::vector< double > xVec(void) const
std::vector< double > cellCoarseX_
static constexpr int scintillatorFile
std::vector< std::pair< int, int > > tileRingRange_
std::vector< int > firstModule_
std::vector< int > cellCoarse_
std::vector< double > trformRotYZ_
std::vector< double > const & vector(std::string_view iKey) const
The DDVector information.
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
void loadCellTrapezoid(HGCalParameters &php)
std::pair< double, double > cellPosition(const std::vector< cellParameters > &wafers, std::vector< cellParameters >::const_iterator &itrf, int wafer, double xx, double yy)
std::vector< double > boundR_
std::vector< double > cellSize_
std::vector< int > waferUVMaxLayer_
std::vector< double > moduleDzS_
bool next()
set current node to the next node in the filtered tree
std::vector< int > layerIndex_
std::vector< double > moduleAlphaR_
std::vector< double > yLayerHex_
void loadCellParsHexagon(const DDCompactView *cpv, HGCalParameters &php)
std::vector< double > trformRotXY_
if(conf_.getParameter< bool >("UseStripCablingDB"))
std::vector< double > rMaxFront_
Cos< T >::type cos(const T &t)
std::vector< double > trformRotYX_
int scintCells(const int layer) const
hgtrap getModule(unsigned int k, bool reco) const
Tan< T >::type tan(const T &t)
Abs< T >::type abs(const T &t)
std::vector< double > getDDDArray(const std::string &str, const DDsvalues_type &sv, const int nmin)
int32_t tileSiPM(const int32_t property)
std::vector< double > const & vector(std::string_view iKey) const
returns an empty container if not found
DDSolidShape shape(void) const
The type of the solid.
std::vector< double > waferThickness_
std::vector< double > slopeTop_
std::vector< int > layerCenter_
static constexpr double k_ScaleFromDD4hep
std::vector< double > moduleBlR_
int32_t waferThick(const int32_t property)
const std::array< const cms::dd::NameValuePair< DDSolidShape >, 21 > DDSolidShapeMap
std::string_view name() const
std::vector< double > rMinLayHex_
Quality *__restrict__ uint16_t nmin
int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old=false)
void fillModule(const hgtrap &mytr, bool reco)
std::vector< double > moduleTlS_
bool firstChild()
set the current node to the first child
std::vector< double > rMinVec(void) const
std::vector< double > zLayerHex_
std::vector< int > layerType_
std::vector< int > dbl_to_int(const std::vector< double > &vecdbl)
Converts a std::vector of doubles to a std::vector of int.
static constexpr double tan30deg_
void loadWaferHexagon(HGCalParameters &php)
for(Iditer=Id.begin();Iditer!=Id.end();Iditer++)
const std::vector< int > copyNos() const
The list of the volume copy numbers.
std::vector< double > rMaxLayHex_
std::vector< double > trformTranX_
static constexpr double k_ScaleFromDD4hepToG4
std::unordered_map< int32_t, std::pair< int32_t, int32_t > > waferT_map
std::vector< double > zRanges_
std::vector< double > slopeMin_
Basic2DVector< T > xy() const
T get(const std::string &)
extract attribute value
std::vector< int > lastModule_
static constexpr double k_ScaleToDDD
std::vector< double > zVec(void) const
std::vector< double > radiusMixBoundary_
std::vector< double > cellThickness_
std::vector< double > trformRotXZ_
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double > > XYZPointD
point in space with cartesian internal representation
std::vector< double > zVec(void) const
std::vector< int > layerGroup_
std::unordered_map< int32_t, int32_t > wafer_map
static std::pair< int, int > getTypeMode(const double &xpos, const double &ypos, const double &delX, const double &delY, const double &rin, const double &rout, const int &waferType, const int &mode, bool deug=false)
std::vector< double > radius200to300_
std::vector< double > radius100to200_
DDsvalues_type mergedSpecifics() const
std::vector< double > rMinFront_
std::vector< int > iradMinBH_
std::vector< double > trformRotYY_
std::vector< double > cellFineX_
static constexpr double k_ScaleFromDDDToG4
std::vector< double > trformRotZZ_
int32_t waferPartial(const int32_t property)
static constexpr double k_ScaleFromDDD
std::vector< double > moduleAlphaS_
std::vector< int > layerGroupO_
void loadGeometryHexagon(const DDFilteredView &_fv, HGCalParameters &php, const std::string &sdTag1, const DDCompactView *cpv, const std::string &sdTag2, const std::string &sdTag3, HGCalGeometryMode::WaferMode mode)
static constexpr int k_OffsetRotation
void loadSpecParsTrapezoid(const DDFilteredView &fv, HGCalParameters &php)
std::vector< double > moduleBlS_
__host__ __device__ constexpr RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
int32_t waferV(const int32_t index)
bool firstChild()
set the current node to the first child ...
std::vector< int > waferCopy_
std::vector< int > depthIndex_
std::vector< int > layerFrontBH_
static int32_t packTypeUV(int type, int u, int v)
std::vector< double > rLimit_
std::vector< double > zFrontTop_
std::vector< double > radiusLayer_[2]
const std::vector< double > parameters() const
extract shape parameters
std::vector< int > waferTypeT_
const DDTranslation & translation() const
The absolute translation of the current node.
std::vector< int > levelT_
std::vector< double > cellCoarseY_
Log< level::Warning, false > LogWarning
std::vector< std::pair< double, double > > tileRingR_
waferInfo_map waferInfoMap_
const int level() const
get Iterator level
std::vector< int > moduleLayS_
static constexpr int siliconFileHE
std::vector< double > trformTranZ_
std::vector< double > waferPosX_
void addTrForm(const CLHEP::Hep3Vector &h3v)
tileInfo_map tileInfoMap_
std::vector< double > moduleTlR_
std::vector< int > waferTypeL_
std::vector< double > xLayerHex_
const std::string & name() const
Returns the name.
int32_t tileProperty(const int32_t type, const int32_t sipm)
dd4hep::Solid solid() const
void loadWaferHexagon8(HGCalParameters &php)
std::vector< std::unordered_map< int32_t, int32_t > > layer_map
void loadGeometryHexagon8(const DDFilteredView &_fv, HGCalParameters &php, int firstLayer)