26 : hgpar_(
hp), sqrt3_(
std::
sqrt(3.0)), mode_(hgpar_->mode_), fullAndPart_(waferHexagon8File()) {
36 hgcellUV_ = std::make_unique<HGCalCellUV>(
53 for (
int simreco = 0; simreco < 2; ++simreco) {
83 int wminT(9999999), wmaxT(-9999999), kount1(0), kount2(0);
86 int wmin(9999999),
wmax(-9999999), kount(0);
87 for (
int wafer = 0; wafer <
sectors(); ++wafer) {
112 int lay1 =
getIndex(lay0,
true).first;
113 edm::LogVerbatim(
"HGCalGeom") <<
"Index " <<
i <<
" Layer " << lay0 <<
":" << lay1 <<
" Wafer " <<
wmin <<
":" 114 <<
wmax <<
":" << kount;
119 waferMax_ = std::array<int, 4>{{wminT, wmaxT, kount1, kount2}};
121 edm::LogVerbatim(
"HGCalGeom") <<
"Overall wafer statistics: " << wminT <<
":" << wmaxT <<
":" << kount1 <<
":" 130 return std::make_pair(-1, -1);
140 <<
" ***** ERROR *****";
141 return std::make_pair(-1, -1);
147 return std::make_pair(wafer,
154 return std::make_pair(wafer,
162 return std::make_pair(-1, -1);
167 float x,
float y,
int zside,
int lay,
bool reco,
bool extend,
bool debug)
const {
174 edm::LogVerbatim(
"HGCalGeom") <<
"assignCellHex x " <<
x <<
":" <<
xx <<
" y " <<
y <<
":" <<
yy <<
" Lay " << lay;
176 waferFromPosition(
xx,
yy,
zside, lay,
waferU,
waferV, cellU, cellV,
waferType, wt, extend,
debug);
185 return std::array<int, 3>{{irad,
iphi,
type}};
186 int zside = (
z > 0) ? 1 : -1;
196 edm::LogVerbatim(
"HGCalGeomT") <<
"Cassette " << cassette <<
" Shift " << -(
zside * cshift.first) <<
":" 202 double phi = (((
yy == 0.0) && (
xx == 0.0)) ? 0. : std::atan2(
yy,
xx));
205 if (indx.second != 0)
216 <<
" x|y|r " <<
xx <<
":" <<
yy <<
":" <<
r <<
" phi " <<
phi <<
":" 223 if (irad <= hgpar_->iradMinBH_[indx.first])
231 edm::LogVerbatim(
"HGCalGeomT") <<
"assignCellTrap: ring # modified to " << irad <<
":" 251 return std::array<int, 3>{{irad,
iphi,
type}};
261 if ((cshift.first != 0) || (cshift.second != 0))
272 if ((cshift.first != 0) || (cshift.second != 0))
285 return std::make_pair(
dr,
df);
289 const auto& indx =
getIndex(lay,
true);
290 if (indx.first >= 0) {
301 thck = (ktr->second).
type;
303 rotn = (ktr->second).
orient;
311 double rpos =
sqrt(
xy.first *
xy.first +
xy.second *
xy.second);
312 return ((rpos >=
hgpar_->
rMinLayHex_[indx.first]) && (rpos <= hgpar_->rMaxLayHex_[indx.first]));
328 thick = 100.0 * (
type + 1);
365 for (
int k = 0;
k < sizew; ++
k) {
387 edm::LogVerbatim(
"HGCalGeom") <<
"DistFromEdgeHex: Local " <<
xx <<
":" <<
yy <<
" wafer " << wafer <<
" flag " 398 double xx = (
z < 0) ? -
x :
x;
401 double phi = (
r == 0. ? 0. : std::atan2(
y,
xx));
411 int iphi = 1 +
static_cast<int>(
phi / cell);
415 edm::LogVerbatim(
"HGCalGeom") <<
"DistFromEdgeTrap: Global " <<
x <<
":" <<
y <<
":" <<
z <<
" Layer " << lay
416 <<
" Index " << indx <<
":" <<
type <<
" xx " <<
xx <<
" R " <<
r <<
":" << irad <<
":" 418 <<
" Phi " <<
phi <<
":" <<
iphi <<
":" << (
iphi - 0.5) * cell <<
" cell " << cell
419 <<
" Dphi " << dphi <<
" Dist " << dist <<
":" <<
r * dphi;
429 auto itr = std::find_if(zLayerHex.begin() + 1, zLayerHex.end(), [&
k, &
zz, &zLayerHex](
double zLayer) {
431 return zz < 0.5 * (zLayerHex[
k - 1] + zLayerHex[
k]);
433 int lay = (itr == zLayerHex.end()) ? static_cast<int>(zLayerHex.size()) :
k;
450 <<
" ***** ERROR *****";
461 std::vector<HGCalParameters::hgtrap> mytrs;
474 return std::make_pair(0, -1.);
478 int irmin(0), irmax(0);
486 return std::make_pair(irmin, irmax);
490 std::vector<HGCalParameters::hgtrform> mytrs;
528 double x1(x0),
y1(y0);
538 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants: Layer " <<
layer <<
":" << ll <<
" mode " << forwd <<
" x " <<
x 539 <<
":" << x0 <<
":" <<
x1 <<
" y " <<
y <<
":" << y0 <<
":" <<
y1;
541 return std::make_pair(x0, y0);
552 bool result(
false), resultMod(
false);
558 const int32_t lay_idx =
reco ? (lay - 1) * 3 + 1 : lay;
560 auto moditr = the_modules.find(copyNumber);
561 result = resultMod = (moditr != the_modules.end());
564 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants: Layer " << lay <<
":" << lay_idx <<
" Copy " << copyNumber
568 if (moditr->second >= 0) {
570 edm::LogWarning(
"HGCalGeom") <<
"Module no. out of bound for " <<
mod <<
" to be compared with " 575 result = (cell >= 0 && cell <= cellmax);
586 << (lay > 0 && (lay <= static_cast<int>(
layers(
reco)))) <<
" Module " <<
mod <<
":" 587 << resultMod <<
" Cell " << cell <<
":" << cellmax <<
":" 588 << (cell >= 0 && cell <= cellmax) <<
":" <<
maxCells(
reco);
598 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferType " <<
layer <<
":" << modU <<
":" << modV
603 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
604 <<
" in wadferIndex";
612 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferInfoMap " <<
layer <<
":" << modU <<
":" 617 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
618 <<
" in wadferInfoMap";
625 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferIn " << jtr->first <<
":" << jtr->second;
627 if (!(jtr->second)) {
629 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
642 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
643 <<
" due to WaferOut";
650 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
651 <<
" due to WaferCornerMin";
664 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: layer|wafer " <<
layer <<
":" << modU <<
":" << modV <<
":" 674 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:Cell " << cellU <<
":" << cellV <<
":" <<
N 675 <<
" Tests " << (cellU >= 0) <<
":" << (cellU < 2 *
N) <<
":" << (cellV >= 0) <<
":" 676 << (cellV < 2 *
N) <<
":" << ((cellV - cellU) <
N) <<
":" << ((cellU - cellV) <=
N);
678 if ((cellU < 0) || (cellU >= 2 *
N) || (cellV < 0) || (cellV >= 2 *
N)) {
680 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot statisfy Cell 1 condition " << cellU <<
":" << cellV
685 if (((cellV - cellU) >=
N) || ((cellU - cellV) >
N)) {
687 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot statisfy Cell 2 condition " << cellU <<
":" << cellV
709 <<
" Valid " <<
ok <<
":" <<
valid;
739 double x(localX),
y(localY);
744 <<
" Local (" <<
x <<
":" <<
y <<
") Reco " <<
reco;
757 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << (ktr->second).cassette <<
" Shift " << -(
zside * cshift.first)
758 <<
":" << cshift.second;
763 x -= (
zside * cshift.first);
768 edm::LogVerbatim(
"HGCalGeom") <<
"With wafer " <<
x <<
":" <<
y <<
" by adding " <<
xy.first <<
":" <<
xy.second;
769 return (rotx ?
getXY(lay,
x,
y,
false) : std::make_pair(
x,
y));
774 float x(999999.),
y(999999.);
778 return std::make_pair(
x,
y);
793 edm::LogVerbatim(
"HGCalGeom") <<
"LocateCell (Wafer) " << x0 <<
":" << y0 <<
" Final " <<
x <<
":" <<
y;
800 return std::make_pair(
x,
y);
814 <<
":" << rotx <<
":" <<
waferU <<
":" <<
waferV <<
":" << indx <<
":" 830 edm::LogVerbatim(
"HGCalGeom") <<
"Type " <<
type <<
" Place " << place <<
" Cell " << cellU <<
":" << cellV
831 <<
" Position " <<
x <<
":" <<
y;
833 int kndx = cellV * 100 + cellU;
841 edm::LogVerbatim(
"HGCalGeom") <<
"Fine " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":" 850 edm::LogVerbatim(
"HGCalGeom") <<
"Coarse " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y 865 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << (ktr->second).cassette <<
" Shift " << -(
zside * cshift.first)
866 <<
":" << cshift.second;
871 x -= (
zside * cshift.first);
876 edm::LogVerbatim(
"HGCalGeom") <<
"With wafer " <<
x <<
":" <<
y <<
" by adding " <<
xy.first <<
":" <<
xy.second;
878 return (rotx ?
getXY(lay,
x,
y,
false) : std::make_pair(
x,
y));
902 return std::make_pair(
x,
y);
909 if (indx.first >= 0) {
912 double phi = (
iphi - 0.5) * indx.second;
934 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << cassette <<
" Shift " << -(
zside * cshift.first) <<
":" 936 x -= (
zside * cshift.first);
946 return std::make_pair(
x,
y);
1006 if (
index.first < 0)
1009 unsigned int cells(0);
1018 return static_cast<int>(
cells);
1061 return (((type1 == type2) || (type1 * type2 != 0)) ? uv : ((type1 == 0) ? (2 * uv + 1) / 3 : (3 * uv) / 2));
1074 if (
index.first < 0)
1098 for (
unsigned k = 0;
k < nlayer; ++
k) {
1100 cells = std::accumulate(ncells.begin(), ncells.end(),
cells);
1109 std::vector<int> ncell;
1117 ncell.emplace_back(static_cast<int>(cell));
1123 ncell.emplace_back(
nphi);
1131 ncell.emplace_back(cell);
1162 double rmin(0), rmax(0),
zz(0);
1183 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:rangeR: " <<
z <<
":" <<
zz <<
" R " << rmin <<
":" << rmax;
1185 return std::make_pair(rmin, rmax);
1189 double rmin(0), rmax(0);
1200 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:rangeR: " << lay <<
":" <<
index.first <<
" R " << rmin <<
":" 1203 return std::make_pair(rmin, rmax);
1227 return std::make_pair(row,
col);
1232 return std::make_pair(cell, lay);
1237 edm::LogWarning(
"HGCalGeom") <<
"Wrong Layer # " << lay <<
" not in the list ***** ERROR *****";
1238 return std::make_pair(-1, -1);
1242 <<
" ***** ERROR *****";
1243 return std::make_pair(-1, -1);
1250 }
else if (
type == 2) {
1255 return std::make_pair(kx,
depth);
1269 for (
int lay = laymin; lay <= laymax; ++lay) {
1277 << ringmin <<
":" << ringmax;
1279 for (
int rin = ringmin; rin <= ringmax; ++rin) {
1283 edm::LogVerbatim(
"HGCalGeom") <<
"tileCount: rin " << rin <<
" indx " << indx <<
" itr " 1287 for (
int k = 0;
k < 4; ++
k) {
1288 std::bitset<24>
b(itr->second.hex[
k]);
1293 edm::LogVerbatim(
"HGCalGeom") <<
"tileCount: lay|rin " << lay <<
":" << rin <<
" kount " << kount;
1318 <<
" Differences " <<
dif1 <<
":" <<
dif2;
1329 <<
" Differences " <<
dif1 <<
":" <<
dif2;
1340 return std::make_pair(0, 0);
1345 int type(-1), sipm(-1);
1351 return std::make_pair(
type, sipm);
1358 for (
int k = 0;
k < ncopies; ++
k) {
1368 edm::LogVerbatim(
"HGCalGeom") <<
"Cannot find " <<
copy <<
" in a list of " << ncopies <<
" members";
1369 for (
int k = 0;
k < ncopies; ++
k)
1385 for (
int k = 0;
k < size_; ++
k) {
1398 if (wafer < size_) {
1411 edm::LogWarning(
"HGCalGeom") <<
"Cannot get wafer type corresponding to " <<
x <<
":" <<
y <<
" " <<
xx <<
":" 1416 edm::LogVerbatim(
"HGCalGeom") <<
"Position " <<
x <<
":" <<
y <<
" Wafer " << wafer <<
":" << size_ <<
" XX " <<
xx 1417 <<
":" <<
yy <<
" Cell " << icell <<
" Type " << celltyp;
1435 cellU = cellV = celltype = 0;
1441 double xx(0),
yy(0);
1443 std::pair<double, double>
xy =
1452 edm::LogVerbatim(
"HGCalGeom") <<
"waferFromPosition:: Layer " <<
layer <<
":" << ll <<
" Rot " << rotx <<
" X " <<
x 1453 <<
":" <<
xx <<
" Y " <<
y <<
":" <<
yy;
1457 double dx0(0), dy0(0);
1466 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << (ktr->second).cassette <<
" Shift " << -(
zside * cshift.first)
1467 <<
":" << cshift.second;
1468 dx0 = -(
zside * cshift.first);
1469 dy0 = cshift.second;
1474 if (
dx <= rmax &&
dy <= hexside) {
1480 edm::LogVerbatim(
"HGCalGeom") <<
"Position (" <<
x <<
", " <<
y <<
") Wafer type:partial:orient:cassette " 1497 <<
waferV <<
":" << celltype;
1513 edm::LogVerbatim(
"HGCalGeom") <<
"waferFromPosition: frontback " << layertype <<
":" 1515 <<
" place " << place <<
" part " <<
part;
1525 if ((celltype < 0) &&
debug) {
1528 edm::LogVerbatim(
"HGCalGeom") <<
"waferfFromPosition: Bad type for X " <<
x <<
":" <<
x1 <<
":" <<
xx <<
" Y " <<
y 1529 <<
":" <<
y1 <<
":" <<
yy <<
" Wafer " <<
waferU <<
":" <<
waferV <<
" Cell " << cellU
1536 <<
dx *
tan30deg_ <<
":" << hexside -
dy <<
" Paramerers " << rmax <<
":" 1541 <<
waferV <<
" Cell " << cellU <<
":" << cellV <<
":" << celltype <<
" wt " << wt;
1572 double xx(0),
yy(0);
1581 return std::make_pair(
xx,
yy);
1590 edm::LogVerbatim(
"HGCalGeom") <<
"Layer " << lay <<
":" << ll <<
" Rotation " << rotx <<
" U:V " <<
waferU <<
":" 1594 std::pair<double, double> xy0 = (rotx) ?
getXY(lay,
xy.first,
xy.second,
false) :
xy;
1597 edm::LogVerbatim(
"HGCalGeom") <<
"Without and with rotation " <<
xy.first <<
":" <<
xy.second <<
":" << xy0.first
1598 <<
":" << xy0.second;
1604 if (kk < hgpar_->waferInfoMap_.size()) {
1606 std::advance(itr,
kk);
1613 if (kk < hgpar_->waferInfoMap_.size()) {
1615 std::advance(itr,
kk);
1616 return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient, itr->second.cassette);
1618 return std::make_tuple(0, 0, 0, 0);
1624 return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient, itr->second.cassette);
1626 return std::make_tuple(0, 0, 0, 0);
1630 HepGeom::Point3D<float>& loc,
const DetId&
id,
bool useWafer,
bool reco,
bool debug)
const {
1638 auto xy =
getXY(detid.
layer(), (
x + loc.x()), (
y + loc.y()),
false);
1640 double xx = (detid.
zside() < 0) ? -
xy.first :
xy.first;
1647 for (
unsigned int i = 0;
i <
layers(
true); ++
i) {
1663 wafer = (itr->second)[ity];
1690 type = (itr->second).type;
1706 type = (itr->second).type;
1762 bool withinList(
true);
1768 rotn = (itr->second).
orient;
1776 rotn = (itr->second).
second;
1799 <<
" Index " << std::hex <<
wl <<
std::dec <<
":" << withinList <<
" Type " <<
type 1800 <<
" Rotation " << rotn;
1802 return std::make_pair(
type, rotn);
1819 if (
index.first < 0)
1826 double xx,
double yy,
const double& cellR,
const std::vector<double>&
posX,
const std::vector<double>&
posY)
const {
1828 const double tol(0.00001);
1830 for (
unsigned int k = 0;
k <
posX.size(); ++
k) {
1833 if (
dx <= (cellR + tol) &&
dy <= (cellY + tol)) {
1834 double xmax = (
dy <= 0.5 * cellY) ? cellR : (cellR - (
dy - 0.5 * cellY) /
tan30deg_);
1835 if (
dx <= (
xmax + tol)) {
1845 double xloc,
double yloc,
int cellType,
int place,
int part,
int& cellU,
int& cellV,
bool extend,
bool debug)
const {
1858 double delY = 2 *
rmax_ / (3 * ncell);
1859 double delX = 0.5 * delY *
sqrt3_;
1860 double delYT = (extend) ? (2 *
rmaxT_ / (3 * ncell)) : delY;
1861 double delXT = 0.5 * delYT *
sqrt3_;
1862 double v0 = ((xloc / delY - 1.0) / 1.5);
1863 int cv0 = (
v0 > 0) ? (ncell + static_cast<int>(
v0 + 0.5)) : (ncell - static_cast<int>(-
v0 + 0.5));
1864 double u0 = (0.5 * yloc / delX + 0.5 * cv0);
1865 int cu0 = (u0 > 0) ? (ncell / 2 + static_cast<int>(u0 + 0.5)) : (ncell / 2 - static_cast<int>(-u0 + 0.5));
1868 if (cv0 - cu0 >= ncell)
1869 cv0 = cu0 + ncell - 1;
1872 << delX <<
":" << delY <<
" u0 " << u0 <<
":" << cu0 <<
" v0 " <<
v0 <<
":" << cv0;
1874 static constexpr
int shift[3] = {0, 1, -1};
1875 for (
int i1 = 0;
i1 < 3; ++
i1) {
1877 for (
int i2 = 0;
i2 < 3; ++
i2) {
1879 if (((cellV - cellU) < ncell) && ((cellU - cellV) <= ncell) && (cellU >= 0) && (cellV >= 0) &&
1880 (cellU < 2 * ncell) && (cellV < 2 * ncell)) {
1881 double xc = (1.5 * (cellV - ncell) + 1.0) * delY;
1882 double yc = (2 * cellU - cellV - ncell) * delX;
1884 ((
std::abs(xloc - xc) <= 0.5 * delYT) ||
1888 <<
"cellHex: local " << xc <<
":" << yc <<
" difference " <<
std::abs(xloc - xc) <<
":" 1890 <<
":" << delY <<
" (u,v) = (" << cellU <<
"," << cellV <<
")";
1909 return std::make_pair(-1, 0);
1920 return std::make_pair(indx, cell);
1960 edm::LogVerbatim(
"HGCalGeom") <<
"Input " << lay <<
":" << wafer <<
":" << cell <<
" Position " <<
x <<
":" <<
y 1979 <<
" Result " <<
result <<
" from goodCell";
1983 int kndx = cellV * 100 + cellU;
1991 edm::LogVerbatim(
"HGCalGeom") <<
"Fine " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":" 2001 edm::LogVerbatim(
"HGCalGeom") <<
"Coarse " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":" 2017 <<
":" << cellV <<
" Position " <<
x <<
":" <<
y <<
":" <<
rr <<
" Compare Limits " 2019 <<
" from Radius Limits";
2026 <<
" N " <<
N <<
" part " << partn.first <<
":" << partn.second <<
" Result " 2027 <<
result <<
" from goodCell";
2041 <<
waferV <<
") " << indx;
2059 edm::LogVerbatim(
"HGCalGeom") <<
"WaferInLayerTest: Layer " << lay <<
" wafer " << wafer <<
" index " << indx
2066 edm::LogVerbatim(
"HGCalGeom") <<
"WaferInLayerTest: Layer " << lay <<
" wafer " << wafer <<
" R-limits " 2095 return std::make_pair(
x,
y);
2099 double xx(0),
yy(0);
2110 return std::make_pair(
xx,
yy);
std::vector< int > iradMaxBH_
bool maskCell(const DetId &id, int corners) const
std::pair< double, double > rangeRLayer(int lay, bool reco) const
double waferZ(int layer, bool reco) const
std::vector< double > waferPosY_
Log< level::Info, true > LogVerbatim
std::vector< int > layer_
static constexpr int scintillatorCassette
bool cassetteShiftScintillator(int layer, int iphi) const
static int32_t cellPlacementIndex(int32_t iz, int32_t frontBack, int32_t orient)
static constexpr double tol_
void waferFromPosition(const double x, const double y, int &wafer, int &icell, int &celltyp) const
std::pair< double, double > rangeZ(bool reco) const
std::vector< int > depthLayerF_
std::vector< int > depth_
std::vector< double > zFrontMin_
std::vector< double > moduleCellR_
std::pair< int, int > tileRings(int layer) const
unsigned int layersInit(bool reco) const
hgtrap getModule(unsigned int k, bool reco) const
static constexpr int32_t cellPlacementOld
bool isValidCell(int layindex, int wafer, int cell) const
static int getType(int index, const HGCalParameters::waferInfo_map &wafers)
layer_map copiesInLayers_
static constexpr int k_OffsetRotation
std::vector< std::pair< double, double > > layerRotV_
int getPhiBins(int lay) const
HGCalCassette hgcassette_
int layer() const
get the layer #
std::pair< double, double > cellEtaPhiTrap(int type, int irad) const
std::vector< bool > cellCoarseHalf_
int scintType(const int layer) const
std::vector< bool > cellFineHalf_
static std::pair< int32_t, int32_t > cellType(int32_t u, int32_t v, int32_t ncell, int32_t placementIndex)
std::pair< double, double > waferParameters(bool reco) const
bool waferInLayerTest(int wafer, int lay, bool full) const
static int32_t getUnpackedU(int id)
std::vector< int > moduleLayR_
bool waferFullInLayer(int wafer, int lay, bool reco) const
int32_t maxWafersPerLayer_
double distFromEdgeTrap(double x, double y, double z) const
std::unique_ptr< HGCalCellUV > hgcellUV_
Simrecovecs max_modules_layer_
HGCalParameters::hgtrap getModule(unsigned int k, bool hexType, bool reco) const
int32_t waferU(const int32_t index)
HGCalParameters::waferInfo waferInfo(int lay, int waferU, int waferV) const
int32_t waferLayer(const int32_t index)
bool trapezoidFile() const
constexpr NumType convertRadToDeg(NumType radians)
bool isValidHex(int lay, int mod, int cell, bool reco) const
bool tileRingEdge(double rho, int layer, int ring) const
static bool goodCell(int u, int v, int N, int type, int rotn)
static constexpr int32_t WaferOut
Sin< T >::type sin(const T &t)
static constexpr int32_t WaferThree
std::pair< double, double > getShift(int layer, int zside, int cassette) const
std::vector< double > cellFineY_
std::pair< int, int > getREtaRange(int lay) const
int lastLayer(bool reco) const
static int getPartial(int index, const HGCalParameters::waferInfo_map &wafers)
static int32_t getUnpackedV(int id)
std::pair< double, double > getXY(int layer, double x, double y, bool forwd) const
bool waferHexagon8() const
std::pair< int, int > waferTypeRotation(int layer, int waferU, int waferV, bool fromFile, bool debug) const
int modulesInit(int lay, bool reco) const
std::unordered_map< int32_t, bool > waferIn_
int layerFromIndex(int index, bool reco) const
std::vector< uint32_t > trformIndex_
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
int32_t cellType(int type, int waferU, int waferV, int iz, int fwdBack, int orient) const
std::vector< int > layerGroupM_
bool waferHexagon6() const
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
constexpr Detector det() const
get the detector field from this detid
hgtrform getTrForm(unsigned int k) const
static constexpr uint32_t k_CornerSize
std::pair< double, double > getRangeR(int, bool reco) const
static int getOrient(int index, const HGCalParameters::waferInfo_map &wafers)
wafer_map wafersInLayers_
bool waferInLayer(int wafer, int lay, bool reco) const
constexpr std::array< uint8_t, layerIndexSize< TrackerTraits > > layer
U second(std::pair< T, U > const &p)
double scintCellSize(const int layer) const
HGCalParameters::tileInfo tileInfo(int zside, int layer, int ring) const
std::vector< double > cellCoarseX_
static constexpr int scintillatorFile
std::map< int, HGCWaferParam > waferLayer_
int32_t tileIndex(int32_t layer, int32_t ring, int32_t phi)
std::vector< std::pair< int, int > > tileRingRange_
int layer() const
get the layer #
static constexpr int32_t WaferFull
std::vector< int > firstModule_
unsigned int waferFileSize() const
std::unique_ptr< HGCalCell > hgcell_
int getTypeHex(int layer, int waferU, int waferV) const
static constexpr int32_t WaferHalf
bool isHalfCell(int waferType, int cell) const
int maxCells(bool reco) const
std::vector< double > cellSize_
std::tuple< int, int, int, int > waferFileInfoFromIndex(int kk) const
std::vector< int > waferUVMaxLayer_
std::tuple< int, int, int, int > waferFileInfo(unsigned int kk) const
std::array< int, 5 > assignCellHex(float x, float y, int zside, int lay, bool reco, bool extend, bool debug) const
int waferFileIndex(unsigned int kk) const
std::vector< int > layerIndex_
std::vector< double > yLayerHex_
HGCalDDDConstants(const HGCalParameters *hp, const std::string &name)
int layerIndex(int lay, bool reco) const
bool cassetteShiftSilicon(int layer, int waferU, int waferV) const
std::vector< double > rMaxFront_
Cos< T >::type cos(const T &t)
bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, int zside, bool reco) const
static constexpr int32_t WaferOrient0
int getUVMax(int type) const
bool isValidCell8(int lay, int waferU, int waferV, int cellU, int cellV, int type) const
Abs< T >::type abs(const T &t)
std::pair< int, int > simToReco(int cell, int layer, int mod, bool half) const
std::pair< int, float > getIndex(int lay, bool reco) const
static int getCassette(int index, const HGCalParameters::waferInfo_map &wafers)
bool isValidTrap(int zside, int lay, int ieta, int iphi) const
bool waferVirtual(int layer, int waferU, int waferV) const
int tileCount(int layer, int ring) const
std::pair< int, int > assignCell(float x, float y, int lay, int subSec, bool reco) const
std::vector< double > slopeTop_
std::vector< HGCalParameters::hgtrap > getModules() const
double mouseBite(bool reco) const
unsigned int layers(bool reco) const
static constexpr int32_t WaferCorner0
bool tileTrapezoid() const
std::pair< int, int > tileType(int layer, int ring, int phi) const
bool tilePhiEdge(double phi, int layer, int iphi) const
std::pair< float, float > locateCellTrap(int zside, int lay, int ieta, int iphi, bool reco, bool debug) const
std::vector< double > rMinLayHex_
int32_t waferIndex(int32_t layer, int32_t waferU, int32_t waferV, bool old=false)
int getTypeTrap(int layer) const
int32_t tileCassette(int32_t, int32_t, int32_t, int32_t)
int type() const
get the type
double cellSizeHex(int type) const
std::vector< double > zLayerHex_
std::vector< int > layerType_
std::pair< double, double > rangeR(double z, bool reco) const
std::pair< double, double > waferPosition(int wafer, bool reco) const
std::vector< double > rMaxLayHex_
std::vector< double > slopeMin_
static constexpr int32_t WaferCenterR
std::vector< int > lastModule_
std::array< int, 4 > waferMax_
static constexpr double k_ScaleToDDD
int numberCellsHexagon(int wafer) const
std::vector< double > radiusMixBoundary_
std::array< int, 3 > assignCellTrap(float x, float y, float z, int lay, bool reco) const
bool tileExist(int zside, int layer, int ring, int phi) const
std::vector< double > cellThickness_
GlobalPoint waferLocal2Global(HepGeom::Point3D< float > &loc, const DetId &id, bool useWafer, bool reco, bool debug) const
std::vector< int > layerGroup_
int numberCells(bool reco) const
std::vector< double > moduleCellS_
int zside() const
get the z-side of the cell (1/-1)
std::pair< float, float > locateCellHex(int cell, int wafer, bool reco) const
double cellThickness(int layer, int waferU, int waferV) const
int waferType(DetId const &id, bool fromFile) const
wafer_map cellCoarseIndex_
std::pair< int, int > rowColumnWafer(const int wafer) const
unsigned int getTrFormN() const
HGCalParameters::hgtrform getTrForm(unsigned int k) const
std::vector< double > rMinFront_
std::pair< float, float > locateCell(int cell, int lay, int type, bool reco) const
std::vector< int > iradMinBH_
bool waferHexagon8File() const
std::vector< double > cellFineX_
int maxRows(int lay, bool reco) const
const HGCalGeometryMode::GeometryMode mode_
int32_t waferIndex(int wafer, int index) const
static constexpr double k_ScaleFromDDD
std::vector< HGCalParameters::hgtrform > getTrForms() const
std::vector< int > layerGroupO_
int getLayer(double z, bool reco) const
#define TYPELOOKUP_DATA_REG(_dataclass_)
std::array< int, 3 > HGCWaferParam
int32_t waferV(const int32_t index)
int waferTypeL(int wafer) const
std::vector< int > waferCopy_
std::vector< double > cassetteShift_
bool tileExist(const int32_t *hex, int32_t zside, int32_t phi)
static unsigned int const shift
std::vector< int > depthIndex_
static constexpr double tan30deg_
int cassetteTile(int iphi) const
std::vector< double > zFrontTop_
std::vector< double > radiusLayer_[2]
std::array< uint32_t, 2 > tot_layers_
static constexpr int32_t WaferFive
std::vector< int > waferTypeT_
int modules(int lay, bool reco) const
static constexpr int32_t WaferCornerMin
int modifyUV(int uv, int type1, int type2) const
std::vector< double > cellCoarseY_
int type() const
get the type
Log< level::Warning, false > LogWarning
static constexpr int32_t WaferFineThin
waferInfo_map waferInfoMap_
__host__ __device__ V wmin
std::pair< float, float > localToGlobal8(int zside, int lay, int waferU, int waferV, double localX, double localY, bool reco, bool debug) const
const HGCalParameters * hgpar_
std::vector< double > waferPosX_
T mod(const T &a, const T &b)
int scintCells(const int layer) const
tileInfo_map tileInfoMap_
int cellHex(double xx, double yy, const double &cellR, const std::vector< double > &posX, const std::vector< double > &posY) const
std::vector< int > waferTypeL_
std::vector< double > xLayerHex_
std::pair< double, double > waferPositionNoRot(int lay, int waferU, int waferV, bool reco, bool debug) const
static int32_t layerFrontBack(int32_t layerOrient)
void setParameter(int cassette, const std::vector< double > &shifts)
double distFromEdgeHex(double x, double y, double z) const
int layerType(int lay) const
int waferFromCopy(int copy) const
__host__ __device__ V V wmax
static bool maskCell(int u, int v, int N, int ncor, int fcor, int corners)