24 #include <unordered_set> 48 std::map<int, HGCalGeomParameters::layerParameters>
layers;
49 std::vector<HGCalParameters::hgtrform> trforms;
50 std::vector<bool> trformUse;
56 int nsiz =
static_cast<int>(
copy.size());
57 int lay = (nsiz > 0) ?
copy[nsiz - 1] : 0;
58 int zp = (nsiz > 2) ?
copy[nsiz - 3] : -1;
62 throw cms::Exception(
"DDException") <<
"Funny layer # " << lay <<
" zp " << zp <<
" in " << nsiz <<
" components";
65 php.
layer_.emplace_back(lay);
66 auto itr =
layers.find(lay);
68 double rin(0), rout(0);
72 const std::vector<double>& rmin = polyhedra.
rMinVec();
73 const std::vector<double>& rmax = polyhedra.
rMaxVec();
86 const CLHEP::HepRep3x3
rotation(
x.X(),
y.X(),
z.X(),
x.Y(),
y.Y(),
z.Y(),
x.Z(),
y.Z(),
z.Z());
87 const CLHEP::HepRotation hr(
rotation);
95 const CLHEP::Hep3Vector h3v(
xx,
yy,
zz);
103 trforms.emplace_back(mytrf);
104 trformUse.emplace_back(
false);
113 std::unordered_map<int32_t, int32_t> copies;
115 std::vector<int32_t> wafer2copy;
116 std::vector<HGCalGeomParameters::cellParameters> wafers;
118 DDValue val1(attribute, sdTag2, 0.0);
123 throw cms::Exception(
"DDException") <<
"Attribute " << val1 <<
" not found but needed.";
126 std::unordered_set<std::string>
names;
131 int nsiz =
static_cast<int>(
copy.size());
132 int wafer = (nsiz > 0) ?
copy[nsiz - 1] : 0;
133 int layer = (nsiz > 1) ?
copy[nsiz - 2] : 0;
135 throw cms::Exception(
"DDException") <<
"Funny wafer # " << wafer <<
" in " << nsiz <<
" components";
136 }
else if (
layer > static_cast<int>(
layers.size())) {
138 <<
" among " << nsiz <<
" components";
140 auto itr = copies.find(wafer);
141 auto cpy = copiesInLayers[
layer].find(wafer);
142 if (itr != copies.end() && cpy == copiesInLayers[
layer].end()) {
143 copiesInLayers[
layer][wafer] = itr->second;
145 if (itr == copies.end()) {
146 copies[wafer] = wafer2copy.size();
147 copiesInLayers[
layer][wafer] = wafer2copy.size();
154 wafer2copy.emplace_back(wafer);
157 wafers.emplace_back(cell);
159 std::vector<double>
zv, rv;
194 std::map<int, int> wafertype;
195 std::map<int, HGCalGeomParameters::cellParameters> cellsf, cellsc;
196 DDValue val2(attribute, sdTag3, 0.0);
201 throw cms::Exception(
"DDException") <<
"Attribute " << val2 <<
" not found but needed.";
208 int nsiz =
static_cast<int>(
copy.size());
209 int cellx = (nsiz > 0) ?
copy[nsiz - 1] : 0;
210 int wafer = (nsiz > 1) ?
copy[nsiz - 2] : 0;
215 <<
"Funny cell # " << cell <<
" type " <<
type <<
" in " << nsiz <<
" components";
217 auto ktr = wafertype.find(wafer);
218 if (ktr == wafertype.end())
219 wafertype[wafer] =
type;
221 std::map<int, HGCalGeomParameters::cellParameters>::iterator itr;
224 itr = cellsf.find(cell);
225 newc = (itr == cellsf.end());
227 itr = cellsc.find(cell);
228 newc = (itr == cellsc.end());
232 bool half = (
name.find(
"Half") != std::string::npos);
245 edm::LogVerbatim(
"HGCalGeom") <<
"Wafer " << wafer <<
" Type " <<
type <<
" Cell " << cellx <<
" local " 246 <<
xx <<
":" <<
yy <<
" new " <<
p1 <<
":" <<
p2;
262 layers, trforms, trformUse, copies, copiesInLayers, wafer2copy, wafers, wafertype, cellsf, cellsc, php);
273 std::map<int, HGCalGeomParameters::layerParameters>
layers;
274 std::vector<HGCalParameters::hgtrform> trforms;
275 std::vector<bool> trformUse;
276 std::vector<std::pair<int, int> > trused;
279 const std::vector<double>& pars = fv.
parameters();
282 int nsiz =
static_cast<int>(
copy.size());
283 int lay = (nsiz > 0) ?
copy[0] : 0;
284 int zp = (nsiz > 2) ?
copy[2] : -1;
288 throw cms::Exception(
"DDException") <<
"Funny layer # " << lay <<
" zp " << zp <<
" in " << nsiz <<
" components";
291 php.
layer_.emplace_back(lay);
292 auto itr =
layers.find(lay);
294 if (itr ==
layers.end()) {
295 double rin(0), rout(0);
296 if (dd4hep::isA<dd4hep::Polyhedra>(fv.
solid())) {
299 }
else if (dd4hep::isA<dd4hep::Tube>(fv.
solid())) {
300 dd4hep::Tube tubeSeg(fv.
solid());
307 std::pair<int, int> layz(lay, zp);
308 if (
std::find(trused.begin(), trused.end(), layz) == trused.end()) {
309 trused.emplace_back(layz);
312 const CLHEP::HepRep3x3
rotation(
x.X(),
y.X(),
z.X(),
x.Y(),
y.Y(),
z.Y(),
x.Z(),
y.Z(),
z.Z());
313 const CLHEP::HepRotation hr(
rotation);
321 const CLHEP::Hep3Vector h3v(
xx,
yy,
zz);
329 trforms.emplace_back(mytrf);
330 trformUse.emplace_back(
false);
339 std::unordered_map<int32_t, int32_t> copies;
341 std::vector<int32_t> wafer2copy;
342 std::vector<HGCalGeomParameters::cellParameters> wafers;
347 throw cms::Exception(
"DDException") <<
"Attribute " << sdTag2 <<
" not found but needed.";
350 std::unordered_set<std::string>
names;
354 int nsiz =
static_cast<int>(
copy.size());
355 int wafer = (nsiz > 0) ?
copy[0] : 0;
358 throw cms::Exception(
"DDException") <<
"Funny wafer # " << wafer <<
" in " << nsiz <<
" components";
359 }
else if (
layer > static_cast<int>(
layers.size())) {
361 <<
" among " << nsiz <<
" components";
363 auto itr = copies.find(wafer);
364 auto cpy = copiesInLayers[
layer].find(wafer);
365 if (itr != copies.end() && cpy == copiesInLayers[
layer].end()) {
366 copiesInLayers[
layer][wafer] = itr->second;
368 if (itr == copies.end()) {
369 copies[wafer] = wafer2copy.size();
370 copiesInLayers[
layer][wafer] = wafer2copy.size();
377 wafer2copy.emplace_back(wafer);
380 wafers.emplace_back(cell);
383 const std::vector<double>& pars = fv1.
parameters();
418 std::map<int, int> wafertype;
419 std::map<int, HGCalGeomParameters::cellParameters> cellsf, cellsc;
424 throw cms::Exception(
"DDException") <<
"Attribute " << sdTag3 <<
" not found but needed.";
430 int nsiz =
static_cast<int>(
copy.size());
431 int cellx = (nsiz > 0) ?
copy[0] : 0;
432 int wafer = (nsiz > 1) ?
copy[1] : 0;
437 <<
"Funny cell # " << cell <<
" type " <<
type <<
" in " << nsiz <<
" components";
439 auto ktr = wafertype.find(wafer);
440 if (ktr == wafertype.end())
441 wafertype[wafer] =
type;
443 std::map<int, HGCalGeomParameters::cellParameters>::iterator itr;
446 itr = cellsf.find(cell);
447 newc = (itr == cellsf.end());
449 itr = cellsc.find(cell);
450 newc = (itr == cellsc.end());
454 bool half = (
name.find(
"Half") != std::string::npos);
467 edm::LogVerbatim(
"HGCalGeom") <<
"Wafer " << wafer <<
" Type " <<
type <<
" Cell " << cellx <<
" local " 468 <<
xx <<
":" <<
yy <<
" new " <<
p1 <<
":" <<
p2;
484 layers, trforms, trformUse, copies, copiesInLayers, wafer2copy, wafers, wafertype, cellsf, cellsc, php);
488 std::vector<HGCalParameters::hgtrform>& trforms,
489 std::vector<bool>& trformUse,
490 const std::unordered_map<int32_t, int32_t>& copies,
492 const std::vector<int32_t>& wafer2copy,
493 const std::vector<HGCalGeomParameters::cellParameters>& wafers,
494 const std::map<int, int>& wafertype,
495 const std::map<int, HGCalGeomParameters::cellParameters>& cellsf,
496 const std::map<int, HGCalGeomParameters::cellParameters>& cellsc,
498 if (((cellsf.size() + cellsc.size()) == 0) || (wafers.empty()) || (
layers.empty())) {
499 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: mismatch between geometry and specpar: cells " 500 << cellsf.size() <<
":" << cellsc.size() <<
" wafers " << wafers.size()
501 <<
" layers " <<
layers.size();
504 for (
unsigned int i = 0;
i <
layers.size(); ++
i) {
516 for (
unsigned int i = 0;
i < php.
layer_.size(); ++
i) {
517 for (
unsigned int i1 = 0;
i1 < trforms.size(); ++
i1) {
518 if (!trformUse[
i1] && php.
layerGroup_[trforms[
i1].lay - 1] == static_cast<int>(
i + 1)) {
520 trforms[
i1].lay = (
i + 1);
521 trformUse[
i1] =
true;
524 for (
unsigned int i2 =
i1 + 1;
i2 < trforms.size(); ++
i2) {
525 if (!trformUse[
i2] && trforms[
i2].zp == trforms[
i1].zp &&
526 php.
layerGroup_[trforms[
i2].lay - 1] == static_cast<int>(
i + 1)) {
529 trformUse[
i2] =
true;
540 for (
unsigned i = 0;
i < wafer2copy.size(); ++
i) {
544 auto ktr = wafertype.find(wafer2copy[
i]);
545 int typet = (ktr == wafertype.end()) ? 0 : (ktr->second);
547 double r = wafers[
i].xyz.perp();
549 for (
int k = 1;
k < 4; ++
k) {
560 std::vector<HGCalGeomParameters::cellParameters>::const_iterator itrf = wafers.end();
561 for (
unsigned int i = 0;
i < cellsf.size(); ++
i) {
562 auto itr = cellsf.find(
i);
563 if (itr == cellsf.end()) {
564 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: missing info for fine cell number " <<
i;
566 double xx = (itr->second).xyz.x();
567 double yy = (itr->second).xyz.y();
568 int waf = (itr->second).wafer;
576 for (
unsigned int i = 0;
i < cellsc.size(); ++
i) {
577 auto itr = cellsc.find(
i);
578 if (itr == cellsc.end()) {
579 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: missing info for coarse cell number " <<
i;
581 double xx = (itr->second).xyz.x();
582 double yy = (itr->second).xyz.y();
583 int waf = (itr->second).wafer;
596 php.
depth_.emplace_back(
i + 1);
636 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters: wafer radius " << php.
waferR_ <<
" and dimensions of the " 650 <<
" coarse cells in a wafer";
669 for (std::unordered_map<int, int>::const_iterator itr = theModules.begin(); itr != theModules.end(); ++itr, ++k2) {
670 edm::LogVerbatim(
"HGCalGeom") <<
"[" << k2 <<
"] " << itr->first <<
":" << itr->second;
679 std::map<int, HGCalGeomParameters::layerParameters>
layers;
690 int nsiz =
static_cast<int>(
copy.size());
691 if (nsiz < levelTop) {
692 int lay =
copy[nsiz - 1];
698 edm::LogVerbatim(
"HGCalGeom") <<
sol.name() <<
" shape " <<
sol.shape() <<
" size " << nsiz <<
":" << levelTop
699 <<
" lay " << lay <<
" z " <<
zside;
703 <<
"Funny layer # " << lay <<
" zp " <<
zside <<
" in " << nsiz <<
" components";
706 php.
layer_.emplace_back(lay);
710 auto itr =
layers.find(lay);
711 if (itr ==
layers.end()) {
716 (itr->second).rmin =
std::min(rin, (itr->second).rmin);
717 (itr->second).rmax =
std::max(rout, (itr->second).rmax);
719 if (trforms.find(std::make_pair(lay,
zside)) == trforms.end()) {
722 const CLHEP::HepRep3x3
rotation(
x.X(),
y.X(),
z.X(),
x.Y(),
y.Y(),
z.Y(),
x.Z(),
y.Z(),
z.Z());
723 const CLHEP::HepRotation hr(
rotation);
738 trforms[std::make_pair(lay,
zside)] = mytrf;
756 std::map<int, HGCalGeomParameters::layerParameters>
layers;
767 int nsiz =
static_cast<int>(fv.
level());
768 if (nsiz < levelTop) {
776 <<
" size " << nsiz <<
":" << levelTop <<
" lay " << lay <<
" z " <<
zside <<
":" 781 <<
"Funny layer # " << lay <<
" zp " <<
zside <<
" in " << nsiz <<
" components";
784 php.
layer_.emplace_back(lay);
785 const std::vector<double>& pars = fv.
parameters();
788 auto itr =
layers.find(lay);
789 if (itr ==
layers.end()) {
794 (itr->second).rmin =
std::min(rin, (itr->second).rmin);
795 (itr->second).rmax =
std::max(rout, (itr->second).rmax);
797 if (trforms.find(std::make_pair(lay,
zside)) == trforms.end()) {
800 const CLHEP::HepRep3x3
rotation(
x.X(),
y.X(),
z.X(),
x.Y(),
y.Y(),
z.Y(),
x.Z(),
y.Z(),
z.Z());
801 const CLHEP::HepRotation hr(
rotation);
816 trforms[std::make_pair(lay,
zside)] = mytrf;
833 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters (DDD)::loadGeometryHexagonModule called with tags " << sdTag1
834 <<
":" << sdTag2 <<
" firstLayer " << firstLayer <<
":" << php.
firstMixedLayer_;
835 int ntot1(0), ntot2(0);
837 std::map<int, HGCalGeomParameters::layerParameters>
layers;
838 std::map<std::pair<int, int>,
double> zvals;
843 DDValue val1(attribute, sdTag2, 0.0);
852 int nsiz =
static_cast<int>(
copy.size());
853 if (levelTop < nsiz) {
854 int lay =
copy[levelTop];
860 <<
"Funny layer # " << lay <<
" zp " <<
zside <<
" in " << nsiz <<
" components";
862 if (zvals.find(std::make_pair(lay,
zside)) == zvals.end()) {
865 std::ostringstream st1;
866 st1 <<
"Name0 " << fv1.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " <<
zside <<
" # of levels " 868 for (
const auto&
c :
copy)
870 st1 <<
" Z " << zvals[std::make_pair(lay,
zside)];
879 DDValue val2(attribute, sdTag1, 0.0);
885 int nsiz =
static_cast<int>(
copy.size());
888 edm::LogVerbatim(
"HGCalGeom") <<
"loadGeometryHexagonModule:: nsiz " << nsiz <<
" Ltop " << levelTop;
890 if (levelTop < nsiz) {
891 int lay =
copy[levelTop];
897 std::ostringstream st2;
898 st2 <<
"Name1 " <<
sol.name() <<
" shape " <<
sol.shape() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " 900 for (
const auto&
c :
copy)
906 <<
"Funny layer # " << lay <<
" zp " <<
zside <<
" in " << nsiz <<
" components";
908 if (zvals.find(std::make_pair(lay,
zside)) != zvals.end()) {
910 php.
layer_.emplace_back(lay);
911 auto itr =
layers.find(lay);
912 if (itr ==
layers.end()) {
913 double rin(0), rout(0);
924 double zp = zvals[std::make_pair(lay, 1)];
928 std::ostringstream st3;
929 st3 <<
"Name1 " << fv2.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " <<
zside <<
" # of levels " 931 for (
const auto&
c :
copy)
933 st3 <<
" R " << rin <<
":" << rout;
938 if (trforms.find(std::make_pair(lay,
zside)) == trforms.end()) {
941 const CLHEP::HepRep3x3
rotation(
x.X(),
y.X(),
z.X(),
x.Y(),
y.Y(),
z.Y(),
x.Z(),
y.Z(),
z.Z());
942 const CLHEP::HepRotation hr(
rotation);
949 const CLHEP::Hep3Vector h3v(
xx,
yy, zvals[std::make_pair(lay,
zside)]);
957 trforms[std::make_pair(lay,
zside)] = mytrf;
968 edm::LogVerbatim(
"HGCalGeom") <<
"Total # of views " << ntot1 <<
":" << ntot2;
979 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters (DD4hep)::loadGeometryHexagonModule called with tags " << sdTag1
980 <<
":" << sdTag2 <<
" firstLayer " << firstLayer;
981 int ntot1(0), ntot2(0);
983 std::map<int, HGCalGeomParameters::layerParameters>
layers;
985 std::map<std::pair<int, int>,
double> zvals;
994 int nsiz =
static_cast<int>(fv1.
level());
995 if (nsiz > levelTop) {
997 int lay =
copy[nsiz - levelTop - 1];
1003 <<
"Funny layer # " << lay <<
" zp " <<
zside <<
" in " << nsiz <<
" components";
1005 if (zvals.find(std::make_pair(lay,
zside)) == zvals.end()) {
1008 std::ostringstream st1;
1009 st1 <<
"Name0 " << fv1.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " <<
zside <<
" # of levels " 1011 for (
const auto&
c :
copy)
1013 st1 <<
" Z " << zvals[std::make_pair(lay,
zside)];
1025 int nsiz =
static_cast<int>(fv2.
level());
1028 edm::LogVerbatim(
"HGCalGeom") <<
"loadGeometryHexagonModule:: nsiz " << nsiz <<
" Ltop " << levelTop;
1030 if (nsiz > levelTop) {
1032 int lay =
copy[nsiz - levelTop - 1];
1037 std::ostringstream st2;
1039 << levelTop <<
":" << lay <<
" ZSide " <<
zside <<
":" << php.
levelZSide_ <<
" # of levels " << nsiz;
1046 <<
"Funny layer # " << lay <<
" zp " <<
zside <<
" in " << nsiz <<
" components";
1048 if (zvals.find(std::make_pair(lay,
zside)) != zvals.end()) {
1050 php.
layer_.emplace_back(lay);
1051 auto itr =
layers.find(lay);
1052 if (itr ==
layers.end()) {
1053 const std::vector<double>& pars = fv2.
parameters();
1054 double rin(0), rout(0);
1055 if (dd4hep::isA<dd4hep::Box>(fv2.
solid())) {
1063 double zp = zvals[std::make_pair(lay, 1)];
1067 std::ostringstream st3;
1068 st3 <<
"Name2 " << fv2.
name() <<
" LTop " << levelTop <<
":" << lay <<
" ZSide " <<
zside <<
" # of levels " 1070 for (
const auto&
c :
copy)
1072 st3 <<
" R " << rin <<
":" << rout;
1077 if (trforms.find(std::make_pair(lay,
zside)) == trforms.end()) {
1080 const CLHEP::HepRep3x3
rotation(
x.X(),
y.X(),
z.X(),
x.Y(),
y.Y(),
z.Y(),
x.Z(),
y.Z(),
z.Z());
1081 const CLHEP::HepRotation hr(
rotation);
1088 const CLHEP::Hep3Vector h3v(
xx,
yy, zvals[std::make_pair(lay,
zside)]);
1096 trforms[std::make_pair(lay,
zside)] = mytrf;
1106 edm::LogVerbatim(
"HGCalGeom") <<
"Total # of views " << ntot1 <<
":" << ntot2;
1113 const int& firstLayer,
1115 double rmin(0), rmax(0);
1116 for (
unsigned int i = 0;
i <
layers.size(); ++
i) {
1118 if (
layer.first == static_cast<int>(
i + firstLayer)) {
1124 rmin =
layer.second.rmin;
1125 rmax =
layer.second.rmax;
1127 if (rmin >
layer.second.rmin)
1128 rmin =
layer.second.rmin;
1129 if (rmax <
layer.second.rmax)
1130 rmax =
layer.second.rmax;
1136 php.
rLimit_.emplace_back(rmin);
1137 php.
rLimit_.emplace_back(rmax);
1142 for (
unsigned int i = 0;
i < php.
layer_.size(); ++
i) {
1143 for (
auto& trform : trforms) {
1144 if (trform.first.first == static_cast<int>(
i + firstLayer)) {
1190 if (!dummy2.empty())
1199 if (fv1.firstChild()) {
1201 const auto&
dummy = getDDDArray(
"WaferSize",
sv, 0);
1202 waferSize_ =
dummy[0];
1208 if (fv2.firstChild()) {
1210 php.cellSize_ = getDDDArray(
"CellSize",
sv, 0);
1213 loadSpecParsHexagon(php);
1222 php.
boundR_ = fv.
get<std::vector<double> >(sdTag4,
"RadiusBound");
1224 php.
rLimit_ = fv.
get<std::vector<double> >(sdTag4,
"RadiusLimits");
1232 php.
slopeMin_ = fv.
get<std::vector<double> >(sdTag4,
"Slope");
1237 const auto&
dummy = fv.
get<std::vector<double> >(sdTag2,
"WaferSize");
1241 php.
cellSize_ = fv.
get<std::vector<double> >(sdTag3,
"CellSize");
1245 const auto& dummy2 = fv.
get<std::vector<double> >(sdTag1,
"LayerOffset");
1246 if (!dummy2.empty()) {
1257 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalGeomParameters: wafer radius ranges" 1258 <<
" for cell grouping " << php.
boundR_[0] <<
":" << php.
boundR_[1] <<
":" 1263 <<
"for the 3 ranges:";
1269 for (
unsigned int k = 0;
k < php.
cellSize_.size(); ++
k)
1321 const auto& dummy3 = fv.
vector(
"CalibCellRadius");
1340 std::vector<int> layerType,
waferIndex, waferProperties;
1341 std::vector<double> cassetteShift;
1348 cassetteShift = fv.
vector(
"CassetteShiftEE");
1355 cassetteShift = fv.
vector(
"CassetteShiftHE");
1390 const auto&
dummy = fv.
get<std::vector<double> >(sdTag1,
"RadiusCuts");
1391 if (
dummy.size() > 3) {
1400 php.
slopeMin_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeBottom");
1401 php.
zFrontMin_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontBottom");
1403 php.
rMinFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMinFront");
1406 php.
slopeTop_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeTop");
1407 php.
zFrontTop_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontTop");
1409 php.
rMaxFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMaxFront");
1412 for (
unsigned int k = 0;
k < kmax; ++
k)
1415 const auto& dummy2 = fv.
get<std::vector<double> >(sdTag1,
"LayerOffset");
1416 if (!dummy2.empty()) {
1427 for (
auto const&
it : vmap) {
1428 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"RadiusMixBoundary")) {
1429 for (
const auto&
i :
it.second)
1431 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"ZRanges")) {
1432 for (
const auto&
i :
it.second)
1434 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"LayerCenter")) {
1435 for (
const auto&
i :
it.second)
1437 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CalibCellRadius")) {
1440 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CalibCellFullHD")) {
1441 for (
const auto&
i :
it.second)
1443 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CalibCellPartHD")) {
1444 for (
const auto&
i :
it.second)
1446 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CalibCellFullLD")) {
1447 for (
const auto&
i :
it.second)
1449 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CalibCellPartLD")) {
1450 for (
const auto&
i :
it.second)
1459 std::vector<int> layerType,
waferIndex, waferProperties;
1460 std::vector<double> cassetteShift;
1462 for (
auto const&
it : vmap) {
1463 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"WaferIndexEE")) {
1464 for (
const auto&
i :
it.second)
1466 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"WaferPropertiesEE")) {
1467 for (
const auto&
i :
it.second)
1468 waferProperties.emplace_back(std::round(
i));
1472 for (
auto const&
it : vmap) {
1473 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CassetteShiftEE")) {
1474 for (
const auto&
i :
it.second)
1475 cassetteShift.emplace_back(
i);
1480 for (
auto const&
it : vmap) {
1481 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"WaferIndexHE")) {
1482 for (
const auto&
i :
it.second)
1484 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"WaferPropertiesHE")) {
1485 for (
const auto&
i :
it.second)
1486 waferProperties.emplace_back(std::round(
i));
1490 for (
auto const&
it : vmap) {
1491 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CassetteShiftHE")) {
1492 for (
const auto&
i :
it.second)
1493 cassetteShift.emplace_back(
i);
1501 for (
auto const&
it : vmap) {
1502 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"LayerTypesEE")) {
1503 for (
const auto&
i :
it.second)
1504 layerType.emplace_back(std::round(
i));
1508 for (
auto const&
it : vmap) {
1509 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"LayerTypesHE")) {
1510 for (
const auto&
i :
it.second)
1511 layerType.emplace_back(std::round(
i));
1530 <<
"parameters for 120 to 200 micron " 1535 <<
"parameters for 200 to 300 micron " 1550 std::ostringstream st1;
1551 for (
unsigned int k = 0;
k < php.
zRanges_.size(); ++
k)
1572 const std::vector<int>& layerType,
1574 const std::vector<int>& waferProperties) {
1576 for (
unsigned int k = 0;
k < layerType.size(); ++
k) {
1585 php.
layerRotV_.emplace_back(std::make_pair(cth, sth));
1654 std::vector<int> tileHEX1, tileHEX2, tileHEX3, tileHEX4;
1655 std::vector<double> tileRMin, tileRMax;
1656 std::vector<int> tileRingMin, tileRingMax;
1657 std::vector<double> cassetteShift;
1664 tileRMin = fv.
vector(
"TileRMin");
1665 tileRMax = fv.
vector(
"TileRMax");
1673 cassetteShift = fv.
vector(
"CassetteShiftHE");
1696 for (
auto const&
it : vmap) {
1697 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"RadiusMixBoundary")) {
1698 for (
const auto&
i :
it.second)
1700 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"ZRanges")) {
1701 for (
const auto&
i :
it.second)
1703 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"LayerCenter")) {
1704 for (
const auto&
i :
it.second)
1711 php.
rMinLayerBH_ = fv.
get<std::vector<double> >(sdTag1,
"RMinLayerBH");
1721 php.
slopeMin_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeBottom");
1722 php.
zFrontMin_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontBottom");
1724 php.
rMinFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMinFront");
1727 php.
slopeTop_ = fv.
get<std::vector<double> >(sdTag1,
"SlopeTop");
1728 php.
zFrontTop_ = fv.
get<std::vector<double> >(sdTag1,
"ZFrontTop");
1730 php.
rMaxFront_ = fv.
get<std::vector<double> >(sdTag1,
"RMaxFront");
1733 for (
unsigned int k = 0;
k < kmax; ++
k)
1736 const auto& dummy2 = fv.
get<std::vector<double> >(sdTag1,
"LayerOffset");
1744 std::vector<int> tileHEX1, tileHEX2, tileHEX3, tileHEX4;
1745 std::vector<double> tileRMin, tileRMax;
1746 std::vector<int> tileRingMin, tileRingMax;
1747 std::vector<double> cassetteShift;
1748 for (
auto const&
it : vmap) {
1749 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileIndex")) {
1750 for (
const auto&
i :
it.second)
1751 tileIndx.emplace_back(std::round(
i));
1752 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileProperty")) {
1753 for (
const auto&
i :
it.second)
1755 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileHEX1")) {
1756 for (
const auto&
i :
it.second)
1757 tileHEX1.emplace_back(std::round(
i));
1758 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileHEX2")) {
1759 for (
const auto&
i :
it.second)
1760 tileHEX2.emplace_back(std::round(
i));
1761 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileHEX3")) {
1762 for (
const auto&
i :
it.second)
1763 tileHEX3.emplace_back(std::round(
i));
1764 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileHEX4")) {
1765 for (
const auto&
i :
it.second)
1766 tileHEX4.emplace_back(std::round(
i));
1767 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileRMin")) {
1768 for (
const auto&
i :
it.second)
1770 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileRMax")) {
1771 for (
const auto&
i :
it.second)
1773 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileRingMin")) {
1774 for (
const auto&
i :
it.second)
1775 tileRingMin.emplace_back(std::round(
i));
1776 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"TileRingMax")) {
1777 for (
const auto&
i :
it.second)
1778 tileRingMax.emplace_back(std::round(
i));
1782 for (
auto const&
it : vmap) {
1783 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"CassetteShiftHE")) {
1784 for (
const auto&
i :
it.second)
1785 cassetteShift.emplace_back(
i);
1827 std::ostringstream st1;
1828 for (
unsigned int k = 0;
k < php.
zRanges_.size(); ++
k)
1840 const std::vector<int>& tileIndx,
1842 const std::vector<int>& tileHEX1,
1843 const std::vector<int>& tileHEX2,
1844 const std::vector<int>& tileHEX3,
1845 const std::vector<int>& tileHEX4,
1846 const std::vector<double>& tileRMin,
1847 const std::vector<double>& tileRMax,
1848 const std::vector<int>& tileRingMin,
1849 const std::vector<int>& tileRingMax) {
1851 for (
unsigned int k = 0;
k < tileIndx.size(); ++
k) {
1862 <<
":" << tileHEX2[
k] <<
":" << tileHEX3[
k] <<
":" << tileHEX4[
k] <<
std::dec;
1866 for (
unsigned int k = 0;
k < tileRMin.size(); ++
k) {
1869 edm::LogVerbatim(
"HGCalGeom") <<
"TileRingR[" <<
k <<
"] " << tileRMin[
k] <<
":" << tileRMax[
k];
1873 for (
unsigned k = 0;
k < tileRingMin.size(); ++
k) {
1876 edm::LogVerbatim(
"HGCalGeom") <<
"TileRingRange[" <<
k <<
"] " << tileRingMin[
k] <<
":" << tileRingMax[
k];
1885 edm::LogVerbatim(
"HGCalGeom") <<
"Input waferWidth " << waferW <<
":" << rmin <<
" R Limits: " << rin <<
":" << rout
1886 <<
" Fine " << rMaxFine;
1894 double dx = 0.5 * waferW;
1895 double dy = 3.0 *
dx *
tan(30._deg);
1896 double rr = 2.0 *
dx *
tan(30._deg);
1897 int ncol =
static_cast<int>(2.0 * rout / waferW) + 1;
1898 int nrow =
static_cast<int>(rout / (waferW *
tan(30._deg))) + 1;
1899 int ns2 = (2 * ncol + 1) * (2 * nrow + 1) * php.
layer_.size();
1900 int incm(0), inrm(0);
1904 int kount(0),
ntot(0);
1907 for (
int nr = -nrow;
nr <= nrow; ++
nr) {
1908 int inr = (
nr >= 0) ?
nr : -
nr;
1909 for (
int nc = -ncol; nc <= ncol; ++nc) {
1910 int inc = (nc >= 0) ? nc : -nc;
1911 if (inr % 2 == inc % 2) {
1912 double xpos = nc *
dx;
1913 double ypos =
nr *
dy;
1915 double rpos =
std::sqrt(xpos * xpos + ypos * ypos);
1916 int typet = (rpos < rMaxFine) ? 1 : 2;
1918 for (
int k = 1;
k < 4; ++
k) {
1919 if ((rpos + rmin) <= php.
boundR_[
k]) {
1936 <<
" Location " <<
corner.first <<
" Position " << xpos <<
":" << ypos
1937 <<
" Layers " << php.
layer_.size();
1944 for (
unsigned int il = 0; il < php.
layer_.size(); ++il) {
1945 std::pair<int, int>
corner =
1948 auto cpy = copiesInLayers[php.
layer_[il]].find(
copy);
1949 if (cpy == copiesInLayers[php.
layer_[il]].end())
1967 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalWaferHexagon: # of columns " << incm <<
" # of rows " << inrm <<
" and " 1968 << kount <<
":" <<
ntot <<
" wafers; R " << rin <<
":" << rout;
1970 for (
unsigned int k = 0;
k < copiesInLayers.size(); ++
k) {
1971 const auto& theModules = copiesInLayers[
k];
1974 for (std::unordered_map<int, int>::const_iterator itr = theModules.begin(); itr != theModules.end(); ++itr, ++k2) {
1975 edm::LogVerbatim(
"HGCalGeom") <<
"[" << k2 <<
"] " << itr->first <<
":" << itr->second;
1994 edm::LogVerbatim(
"HGCalGeom") <<
"Input waferWidth " << waferW <<
":" << waferS <<
" R Max: " << rout;
2002 double r = 0.5 * (waferW + waferS);
2004 double dy = 0.75 *
R;
2005 double r1 = 0.5 * waferW;
2007 int N = (
r == 0) ? 3 : (static_cast<int>(0.5 * rout /
r) + 3);
2008 int ns1 = (2 *
N + 1) * (2 *
N + 1);
2011 edm::LogVerbatim(
"HGCalGeom") <<
"wafer " << waferW <<
":" << waferS <<
" r " <<
r <<
" dy " <<
dy <<
" N " <<
N 2012 <<
" sizes " << ns1 <<
":" << ns2;
2013 std::vector<int> indtypes(ns1 + 1);
2019 int ipos(0), lpos(0), uvmax(0), nwarn(0);
2020 std::vector<int> uvmx(php.
zLayerHex_.size(), 0);
2021 for (
int v = -
N;
v <=
N; ++
v) {
2022 for (
int u = -
N; u <=
N; ++u) {
2024 int nc = -2 * u +
v;
2025 double xpos = nc *
r;
2026 double ypos =
nr *
dy;
2031 wafersInLayers[indx] = ipos;
2042 double xpos0 = xpos + xyoff.first;
2043 double ypos0 = ypos + xyoff.second;
2055 typesInLayers[kndx] = lpos;
2058 indtypes.emplace_back(kndx);
2060 std::pair<int, int>
corner =
2065 <<
" u " << u <<
" v " <<
v <<
" with " <<
corner.first <<
" corners";
2074 edm::LogVerbatim(
"HGCalGeom") <<
"Layer " << lay <<
" u|v " << u <<
":" <<
v <<
" with corner " 2098 <<
"Layer:u:v " <<
i <<
":" << lay <<
":" << u <<
":" <<
v <<
" Part " << corner0.first <<
":" 2099 <<
part <<
" Orient " << corner0.second <<
":" <<
orient <<
" Position " << xpos0 <<
":" << ypos0
2101 <<
" Compatibiliety Flag " <<
ok;
2107 waferTypes[
wl] = corner0;
2110 <<
"Layer " << lay <<
" u|v " << u <<
":" <<
v <<
" Index " << std::hex <<
wl <<
std::dec <<
" pos " 2111 << xpos0 <<
":" << ypos0 <<
" R " <<
r1 <<
":" << R1 <<
" Range " << php.
rMinLayHex_[
i] <<
":" 2113 <<
corner.second <<
" croner0 " << corner0.first <<
":" << corner0.second;
2118 edm::LogVerbatim(
"HGCalGeom") <<
"Layer " << lay <<
" u|v " << u <<
":" <<
v <<
" with corner " 2127 edm::LogWarning(
"HGCalGeom") <<
"HGCalGeomParameters::loadWafer8: there are " << nwarn
2128 <<
" wafers with non-matching partial- orientation types";
2166 int id = indtypes[
k];
2187 << xyoff.first <<
":" << xyoff.second;
2208 for (
auto const&
it : vmap) {
2209 if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"waferFine")) {
2210 for (
const auto&
i :
it.second)
2212 }
else if (dd4hep::dd::compareEqual(dd4hep::dd::noNamespace(
it.first),
"waferCoarse")) {
2213 for (
const auto&
i :
it.second)
2224 for (
unsigned int k = 0;
k < php.
cellFine_.size(); ++
k)
2246 for (
unsigned int k = 0;
k < 2; ++
k) {
2271 for (
unsigned int k = 0;
k < 2; ++
k) {
2281 <<
" dEta = " << php.
cellSize_[
k] <<
"\nOld[0] new R = " << rv <<
" Eta = " <<
eta;
2289 edm::LogVerbatim(
"HGCalGeom") <<
"Old [" << kount <<
"] new R = " << rv <<
" Eta = " <<
eta;
2297 std::vector<double>::iterator
low,
high;
2314 edm::LogVerbatim(
"HGCalGeom") <<
"Modified irlow " << irlow <<
" dr " << drlow;
2333 edm::LogVerbatim(
"HGCalGeom") <<
"Modified irhigh " << irhigh <<
" dr " << drhigh;
2339 edm::LogVerbatim(
"HGCalGeom") <<
"Old Layer " <<
k <<
" Type " <<
kk <<
" Low edge " << irlow <<
":" << drlow
2340 <<
" Top edge " << irhigh <<
":" << drhigh;
2345 for (
unsigned int k = 0;
k < 2; ++
k) {
2374 mytr.
h = 0.5 * (rmax - rmin);
2403 const std::vector<double>& fvec =
value.doubles();
2404 int nval = fvec.size();
2408 <<
"HGCalGeomParameters: # of " <<
str <<
" bins " << nval <<
" < " <<
nmin <<
" ==> illegal";
2411 if (nval < 1 &&
nmin == 0) {
2413 <<
"HGCalGeomParameters: # of " <<
str <<
" bins " << nval <<
" < 1 ==> illegal" 2414 <<
" (nmin=" <<
nmin <<
")";
2420 throw cms::Exception(
"DDException") <<
"HGCalGeomParameters: cannot get array " <<
str;
2422 std::vector<double> fvec;
2428 const std::vector<HGCalGeomParameters::cellParameters>& wafers,
2429 std::vector<HGCalGeomParameters::cellParameters>::const_iterator& itrf,
2433 if (itrf == wafers.end()) {
2434 for (std::vector<HGCalGeomParameters::cellParameters>::const_iterator itr = wafers.begin(); itr != wafers.end();
2436 if (itr->wafer == wafer) {
2442 double dx(0),
dy(0);
2443 if (itrf != wafers.end()) {
2444 dx = (
xx - itrf->xyz.x());
2447 dy = (
yy - itrf->xyz.y());
2451 return std::make_pair(
dx,
dy);
2455 std::for_each(
v.begin(),
v.end(), [
s](
double&
n) {
n *=
s; });
std::vector< int > iradMaxBH_
std::vector< double > waferPosY_
Log< level::Info, true > LogVerbatim
std::vector< int > layer_
static constexpr int scintillatorCassette
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_
nav_type copyNumbers() const
return the stack of copy numbers
hgtrap getModule(unsigned int k, bool reco) const
std::vector< double > moduleHR_
std::vector< double > rMinVec(void) const
layer_map copiesInLayers_
static constexpr int k_OffsetRotation
std::vector< double > const & vector(std::string_view iKey) const
The DDVector information.
std::vector< std::pair< double, double > > layerRotV_
std::vector< bool > cellCoarseHalf_
int scintType(const int layer) const
std::vector< bool > cellFineHalf_
const std::vector< int > copyNos() const
The list of the volume copy numbers.
const cms::DDSolidShape shape() const
std::vector< int > moduleLayR_
static constexpr int siliconFileEE
int32_t waferU(const int32_t index)
std::vector< int > cellFine_
void rescale(std::vector< double > &, const double s)
for(int i=first, nt=offsets[nh];i< nt;i+=gridDim.x *blockDim.x)
int32_t waferLayer(const int32_t index)
static int32_t getUnpackedCell6(int id)
std::vector< double > moduleHS_
std::string name(Mapping a, V value)
std::vector< double > xVec(void) const
std::vector< double > const & vector(std::string_view iKey) const
returns an empty container if not found
std::vector< double > zVec(void) const
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 > rMaxVec(void) const
std::vector< double > cellFineY_
void loadSpecParsHexagon(const DDFilteredView &fv, HGCalParameters &php, const DDCompactView *cpv, const std::string &sdTag1, const std::string &sdTag2)
const std::string & name() const
The name of a logical-part of the current node in the filtered-view.
std::vector< double > trformRotZY_
static int getRotation(int zside, int type, int rotn)
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)
std::vector< double > trformRotXX_
std::vector< int > nPhiBinBH_
std::unordered_map< std::string, std::vector< double > > DDVectorsMap
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
std::vector< double > zVec(void) const
wafer_map wafersInLayers_
static int32_t getUnpackedCellType6(int id)
std::vector< double > rMinLayerBH_
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double > > DD3Vector
std::vector< double > trformRotZX_
double scintCellSize(const int layer) const
std::string_view name() const
std::vector< double > cellCoarseX_
static constexpr int scintillatorFile
int32_t waferCassette(const int32_t property)
std::vector< std::pair< int, int > > tileRingRange_
static constexpr int siliconCassetteHE
std::vector< int > firstModule_
std::vector< int > cellCoarse_
std::vector< double > trformRotYZ_
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_
const std::string & name() const
Returns the name.
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_
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, const bool &v17, const bool &debug=false)
std::vector< double > yLayerHex_
void loadCellParsHexagon(const DDCompactView *cpv, HGCalParameters &php)
std::vector< double > trformRotXY_
std::vector< double > rMaxFront_
Cos< T >::type cos(const T &t)
std::vector< double > trformRotYX_
static constexpr int siliconCassetteEE
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)
const int level() const
get Iterator level
int32_t tileSiPM(const int32_t property)
std::vector< double > waferThickness_
std::vector< double > slopeTop_
std::vector< int > calibCellPartHD_
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::vector< double > rMinLayHex_
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< int > calibCellFullHD_
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)
DDsvalues_type mergedSpecifics() const
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
const DDLogicalPart & logicalPart() const
The logical-part of the current node in the filtered-view.
std::vector< double > zRanges_
std::vector< double > slopeMin_
static constexpr int32_t WaferCenterR
T get(const std::string &)
extract attribute value
std::vector< int > lastModule_
static constexpr double k_ScaleToDDD
static bool goodTypeMode(const double &xpos, const double &ypos, const double &delX, const double &delY, const double &rin, const double &rout, const int &part, const int &rotn, const bool &v17, const bool &debug=false)
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< int > layerGroup_
std::unordered_map< int32_t, int32_t > wafer_map
std::vector< double > radius200to300_
std::vector< double > radius100to200_
const DDSolid & solid(void) const
Returns a reference object of the solid being the shape of this LogicalPart.
std::vector< double > rMinFront_
dd4hep::Solid solid() const
std::vector< int > iradMinBH_
std::vector< double > trformRotYY_
std::vector< double > cellFineX_
static constexpr double k_ScaleFromDDDToG4
const DDRotationMatrix & rotation() const
The absolute rotation of the current node.
std::vector< double > trformRotZZ_
int32_t waferPartial(const int32_t property)
const RotationMatrix rotation() const
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)
void loadSpecParsTrapezoid(const DDFilteredView &fv, HGCalParameters &php)
std::vector< double > moduleBlS_
int32_t waferV(const int32_t index)
bool firstChild()
set the current node to the first child ...
std::vector< int > waferCopy_
std::vector< double > cassetteShift_
std::vector< int > depthIndex_
std::vector< int > layerFrontBH_
std::vector< int > calibCellPartLD_
static int32_t packTypeUV(int type, int u, int v)
std::vector< double > rLimit_
std::vector< double > zFrontTop_
std::vector< double > radiusLayer_[2]
std::vector< int > waferTypeT_
std::vector< int > levelT_
std::vector< double > cellCoarseY_
Log< level::Warning, false > LogWarning
std::vector< std::pair< double, double > > tileRingR_
waferInfo_map waferInfoMap_
static int32_t layerType(int type)
std::vector< int > moduleLayS_
static constexpr int siliconFileHE
std::vector< double > trformTranZ_
const DDTranslation & translation() const
The absolute translation of the current node.
std::vector< double > waferPosX_
int scintCells(const int layer) const
void addTrForm(const CLHEP::Hep3Vector &h3v)
tileInfo_map tileInfoMap_
const std::vector< double > parameters() const
extract shape parameters
if(threadIdxLocalY==0 &&threadIdxLocalX==0)
std::vector< double > moduleTlR_
std::vector< int > waferTypeL_
std::vector< double > xLayerHex_
int32_t tileProperty(const int32_t type, const int32_t sipm)
void loadWaferHexagon8(HGCalParameters &php)
std::vector< std::unordered_map< int32_t, int32_t > > layer_map
void loadGeometryHexagon8(const DDFilteredView &_fv, HGCalParameters &php, int firstLayer)
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)
std::vector< int > calibCellFullLD_
const Translation translation() const