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 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, lay,
waferU,
waferV, cellU, cellV,
waferType, wt, extend,
debug);
185 return std::array<int, 3>{{irad,
iphi,
type}};
196 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << cassette <<
" Shift " << cshift.first <<
":" << cshift.second;
201 double phi = (((
yy == 0.0) && (
xx == 0.0)) ? 0. : std::atan2(
yy,
xx));
204 if (indx.second != 0)
205 iphi = 1 +
static_cast<int>(
phi / indx.second);
213 <<
" x|y|r " <<
xx <<
":" <<
yy <<
":" <<
r <<
" phi " <<
phi <<
":" 216 return std::array<int, 3>{{irad,
iphi,
type}};
226 return std::make_pair(
dr,
df);
230 const auto& indx =
getIndex(lay,
true);
231 if (indx.first >= 0) {
242 thck = (ktr->second).
type;
244 rotn = (ktr->second).
orient;
251 double rpos =
sqrt(
xy.first *
xy.first +
xy.second *
xy.second);
252 return ((rpos >=
hgpar_->
rMinLayHex_[indx.first]) && (rpos <= hgpar_->rMaxLayHex_[indx.first]));
268 thick = 100.0 * (
type + 1);
305 for (
int k = 0;
k < sizew; ++
k) {
327 edm::LogVerbatim(
"HGCalGeom") <<
"DistFromEdgeHex: Local " <<
xx <<
":" <<
yy <<
" wafer " << wafer <<
" flag " 338 double xx = (
z < 0) ? -
x :
x;
341 double phi = (
r == 0. ? 0. : std::atan2(
y,
xx));
351 int iphi = 1 +
static_cast<int>(
phi / cell);
355 edm::LogVerbatim(
"HGCalGeom") <<
"DistFromEdgeTrap: Global " <<
x <<
":" <<
y <<
":" <<
z <<
" Layer " << lay
356 <<
" Index " << indx <<
":" <<
type <<
" xx " <<
xx <<
" R " <<
r <<
":" << irad <<
":" 358 <<
" Phi " <<
phi <<
":" <<
iphi <<
":" << (
iphi - 0.5) * cell <<
" cell " << cell
359 <<
" Dphi " << dphi <<
" Dist " << dist <<
":" <<
r * dphi;
369 auto itr = std::find_if(zLayerHex.begin() + 1, zLayerHex.end(), [&
k, &
zz, &zLayerHex](
double zLayer) {
371 return zz < 0.5 * (zLayerHex[
k - 1] + zLayerHex[
k]);
373 int lay = (itr == zLayerHex.end()) ? static_cast<int>(zLayerHex.size()) :
k;
390 <<
" ***** ERROR *****";
401 std::vector<HGCalParameters::hgtrap> mytrs;
410 int irmin(0), irmax(0);
418 return std::make_pair(irmin, irmax);
422 std::vector<HGCalParameters::hgtrform> mytrs;
460 double x1(x0),
y1(y0);
470 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants: Layer " <<
layer <<
":" << ll <<
" mode " << forwd <<
" x " <<
x 471 <<
":" << x0 <<
":" <<
x1 <<
" y " <<
y <<
":" << y0 <<
":" <<
y1;
473 return std::make_pair(x0, y0);
484 bool result(
false), resultMod(
false);
490 const int32_t lay_idx =
reco ? (lay - 1) * 3 + 1 : lay;
492 auto moditr = the_modules.find(copyNumber);
493 result = resultMod = (moditr != the_modules.end());
496 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants: Layer " << lay <<
":" << lay_idx <<
" Copy " << copyNumber
500 if (moditr->second >= 0) {
502 edm::LogWarning(
"HGCalGeom") <<
"Module no. out of bound for " <<
mod <<
" to be compared with " 507 result = (cell >= 0 && cell <= cellmax);
518 << (lay > 0 && (lay <= static_cast<int>(
layers(
reco)))) <<
" Module " <<
mod <<
":" 519 << resultMod <<
" Cell " << cell <<
":" << cellmax <<
":" 520 << (cell >= 0 && cell <= cellmax) <<
":" <<
maxCells(
reco);
530 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferType " <<
layer <<
":" << modU <<
":" << modV
535 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
536 <<
" in wadferIndex";
544 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferInfoMap " <<
layer <<
":" << modU <<
":" 549 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
550 <<
" in wadferInfoMap";
557 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:WaferIn " << jtr->first <<
":" << jtr->second;
559 if (!(jtr->second)) {
561 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
574 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
575 <<
" due to WaferOut";
582 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot find " <<
layer <<
":" << modU <<
":" << modV
583 <<
" due to WaferCornerMin";
596 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: layer|wafer " <<
layer <<
":" << modU <<
":" << modV <<
":" 606 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants::isValidHex8:Cell " << cellU <<
":" << cellV <<
":" <<
N 607 <<
" Tests " << (cellU >= 0) <<
":" << (cellU < 2 *
N) <<
":" << (cellV >= 0) <<
":" 608 << (cellV < 2 *
N) <<
":" << ((cellV - cellU) <
N) <<
":" << ((cellU - cellV) <=
N);
611 if ((cellU < 0) || (cellU >= 2 *
N) || (cellV < 0) || (cellV >= 2 *
N)) {
613 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot statisfy Cell 1 condition " << cellU <<
":" << cellV
618 if (((cellV - cellU) >=
N) || ((cellU - cellV) >
N)) {
620 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:: Cannot statisfy Cell 2 condition " << cellU <<
":" << cellV
669 <<
" Local (" <<
x <<
":" <<
y <<
") Reco " <<
reco;
682 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << (ktr->second).cassette <<
" Shift " << cshift.first <<
":" 693 edm::LogVerbatim(
"HGCalGeom") <<
"With wafer " <<
x <<
":" <<
y <<
" by adding " <<
xy.first <<
":" <<
xy.second;
694 return (rotx ?
getXY(lay,
x,
y,
false) : std::make_pair(
x,
y));
699 float x(999999.),
y(999999.);
703 return std::make_pair(
x,
y);
718 edm::LogVerbatim(
"HGCalGeom") <<
"LocateCell (Wafer) " << x0 <<
":" << y0 <<
" Final " <<
x <<
":" <<
y;
725 return std::make_pair(
x,
y);
738 <<
":" << rotx <<
":" <<
waferU <<
":" <<
waferV <<
":" << indx <<
":" 754 edm::LogVerbatim(
"HGCalGeom") <<
"Type " <<
type <<
" Place " << place <<
" Cell " << cellU <<
":" << cellV
755 <<
" Position " <<
x <<
":" <<
y;
757 int kndx = cellV * 100 + cellU;
765 edm::LogVerbatim(
"HGCalGeom") <<
"Fine " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":" 774 edm::LogVerbatim(
"HGCalGeom") <<
"Coarse " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y 789 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << (ktr->second).cassette <<
" Shift " << cshift.first <<
":" 800 edm::LogVerbatim(
"HGCalGeom") <<
"With wafer " <<
x <<
":" <<
y <<
" by adding " <<
xy.first <<
":" <<
xy.second;
802 return (rotx ?
getXY(lay,
x,
y,
false) : std::make_pair(
x,
y));
826 return std::make_pair(
x,
y);
832 if (indx.first >= 0) {
835 double phi = (
iphi - 0.5) * indx.second;
857 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << cassette <<
" Shift " << cshift.first <<
":" << cshift.second;
868 return std::make_pair(
x,
y);
931 unsigned int cells(0);
940 return static_cast<int>(
cells);
983 return (((type1 == type2) || (type1 * type2 != 0)) ? uv : ((type1 == 0) ? (2 * uv + 1) / 3 : (3 * uv) / 2));
1020 for (
unsigned k = 0;
k < nlayer; ++
k) {
1022 cells = std::accumulate(ncells.begin(), ncells.end(),
cells);
1031 std::vector<int> ncell;
1039 ncell.emplace_back(static_cast<int>(cell));
1045 ncell.emplace_back(
nphi);
1053 ncell.emplace_back(cell);
1084 double rmin(0), rmax(0),
zz(0);
1105 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:rangeR: " <<
z <<
":" <<
zz <<
" R " << rmin <<
":" << rmax;
1107 return std::make_pair(rmin, rmax);
1111 double rmin(0), rmax(0);
1122 edm::LogVerbatim(
"HGCalGeom") <<
"HGCalDDDConstants:rangeR: " << lay <<
":" <<
index.first <<
" R " << rmin <<
":" 1125 return std::make_pair(rmin, rmax);
1149 return std::make_pair(row,
col);
1154 return std::make_pair(cell, lay);
1159 edm::LogWarning(
"HGCalGeom") <<
"Wrong Layer # " << lay <<
" not in the list ***** ERROR *****";
1160 return std::make_pair(-1, -1);
1164 <<
" ***** ERROR *****";
1165 return std::make_pair(-1, -1);
1172 }
else if (
type == 2) {
1177 return std::make_pair(kx,
depth);
1191 for (
int lay = laymin; lay <= laymax; ++lay) {
1199 << ringmin <<
":" << ringmax;
1201 for (
int rin = ringmin; rin <= ringmax; ++rin) {
1205 edm::LogVerbatim(
"HGCalGeom") <<
"tileCount: rin " << rin <<
" indx " << indx <<
" itr " 1209 for (
int k = 0;
k < 4; ++
k) {
1210 std::bitset<24>
b(itr->second.hex[
k]);
1215 edm::LogVerbatim(
"HGCalGeom") <<
"tileCount: lay|rin " << lay <<
":" << rin <<
" kount " << kount;
1242 return std::make_pair(0, 0);
1247 int type(-1), sipm(-1);
1253 return std::make_pair(
type, sipm);
1260 for (
int k = 0;
k < ncopies; ++
k) {
1270 edm::LogVerbatim(
"HGCalGeom") <<
"Cannot find " <<
copy <<
" in a list of " << ncopies <<
" members";
1271 for (
int k = 0;
k < ncopies; ++
k)
1287 for (
int k = 0;
k < size_; ++
k) {
1300 if (wafer < size_) {
1313 edm::LogWarning(
"HGCalGeom") <<
"Cannot get wafer type corresponding to " <<
x <<
":" <<
y <<
" " <<
xx <<
":" 1318 edm::LogVerbatim(
"HGCalGeom") <<
"Position " <<
x <<
":" <<
y <<
" Wafer " << wafer <<
":" << size_ <<
" XX " <<
xx 1319 <<
":" <<
yy <<
" Cell " << icell <<
" Type " << celltyp;
1336 cellU = cellV = celltype = 0;
1342 double xx(0),
yy(0);
1344 std::pair<double, double>
xy =
1354 edm::LogVerbatim(
"HGCalGeom") <<
"waferFromPosition:: Layer " <<
layer <<
":" << ll <<
" Rot " << rotx <<
" X " <<
x 1355 <<
":" <<
xx <<
" Y " <<
y <<
":" <<
yy;
1360 double dx0(0), dy0(0);
1370 edm::LogVerbatim(
"HGCalGeom") <<
"Cassette " << (ktr->second).cassette <<
" Shift " << cshift.first <<
":" 1374 dy0 = cshift.second;
1379 if (
dx <= rmax &&
dy <= hexside) {
1386 edm::LogVerbatim(
"HGCalGeom") <<
"Position (" <<
x <<
", " <<
y <<
") Wafer type:partial:orient:cassette " 1405 <<
waferV <<
":" << celltype;
1423 edm::LogVerbatim(
"HGCalGeom") <<
"waferFromPosition: frontback " << layertype <<
":" 1425 <<
" place " << place <<
" part " <<
part;
1436 if ((celltype < 0) &&
debug) {
1439 edm::LogVerbatim(
"HGCalGeom") <<
"waferfFromPosition: Bad type for X " <<
x <<
":" <<
x1 <<
":" <<
xx <<
" Y " <<
y 1440 <<
":" <<
y1 <<
":" <<
yy <<
" Wafer " <<
waferU <<
":" <<
waferV <<
" Cell " << cellU
1447 <<
dx *
tan30deg_ <<
":" << hexside -
dy <<
" Paramerers " << rmax <<
":" 1452 <<
waferV <<
" Cell " << cellU <<
":" << cellV <<
":" << celltype <<
" wt " << wt;
1483 double xx(0),
yy(0);
1492 return std::make_pair(
xx,
yy);
1501 edm::LogVerbatim(
"HGCalGeom") <<
"Layer " << lay <<
":" << ll <<
" Rotation " << rotx <<
" U:V " <<
waferU <<
":" 1505 std::pair<double, double> xy0 = (rotx) ?
getXY(lay,
xy.first,
xy.second,
false) :
xy;
1508 edm::LogVerbatim(
"HGCalGeom") <<
"Without and with rotation " <<
xy.first <<
":" <<
xy.second <<
":" << xy0.first
1509 <<
":" << xy0.second;
1515 if (kk < hgpar_->waferInfoMap_.size()) {
1517 std::advance(itr,
kk);
1524 if (kk < hgpar_->waferInfoMap_.size()) {
1526 std::advance(itr,
kk);
1527 return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient);
1529 return std::make_tuple(0, 0, 0);
1535 return std::make_tuple(itr->second.type, itr->second.part, itr->second.orient);
1537 return std::make_tuple(0, 0, 0);
1541 HepGeom::Point3D<float>& loc,
const DetId&
id,
bool useWafer,
bool reco,
bool debug)
const {
1549 auto xy =
getXY(detid.
layer(), (
x + loc.x()), (
y + loc.y()),
false);
1551 double xx = (detid.
zside() < 0) ? -
xy.first :
xy.first;
1558 for (
unsigned int i = 0;
i <
layers(
true); ++
i) {
1574 wafer = (itr->second)[ity];
1601 type = (itr->second).type;
1617 type = (itr->second).type;
1673 bool withinList(
true);
1679 rotn = (itr->second).
orient;
1687 rotn = (itr->second).
second;
1710 <<
" Index " << std::hex <<
wl <<
std::dec <<
":" << withinList <<
" Type " <<
type 1711 <<
" Rotation " << rotn;
1713 return std::make_pair(
type, rotn);
1730 if (
index.first < 0)
1737 double xx,
double yy,
const double& cellR,
const std::vector<double>&
posX,
const std::vector<double>&
posY)
const {
1739 const double tol(0.00001);
1741 for (
unsigned int k = 0;
k <
posX.size(); ++
k) {
1744 if (
dx <= (cellR + tol) &&
dy <= (cellY + tol)) {
1745 double xmax = (
dy <= 0.5 * cellY) ? cellR : (cellR - (
dy - 0.5 * cellY) /
tan30deg_);
1746 if (
dx <= (
xmax + tol)) {
1756 double xloc,
double yloc,
int cellType,
int place,
int part,
int& cellU,
int& cellV,
bool extend,
bool debug)
const {
1769 double delY = 2 *
rmax_ / (3 * ncell);
1770 double delX = 0.5 * delY *
sqrt3_;
1771 double delYT = (extend) ? (2 *
rmaxT_ / (3 * ncell)) : delY;
1772 double delXT = 0.5 * delYT *
sqrt3_;
1773 double v0 = ((xloc / delY - 1.0) / 1.5);
1774 int cv0 = (
v0 > 0) ? (ncell + static_cast<int>(
v0 + 0.5)) : (ncell - static_cast<int>(-
v0 + 0.5));
1775 double u0 = (0.5 * yloc / delX + 0.5 * cv0);
1776 int cu0 = (u0 > 0) ? (ncell / 2 + static_cast<int>(u0 + 0.5)) : (ncell / 2 - static_cast<int>(-u0 + 0.5));
1779 if (cv0 - cu0 >= ncell)
1780 cv0 = cu0 + ncell - 1;
1783 << delX <<
":" << delY <<
" u0 " << u0 <<
":" << cu0 <<
" v0 " <<
v0 <<
":" << cv0;
1785 static constexpr
int shift[3] = {0, 1, -1};
1786 for (
int i1 = 0;
i1 < 3; ++
i1) {
1788 for (
int i2 = 0;
i2 < 3; ++
i2) {
1790 if (((cellV - cellU) < ncell) && ((cellU - cellV) <= ncell) && (cellU >= 0) && (cellV >= 0) &&
1791 (cellU < 2 * ncell) && (cellV < 2 * ncell)) {
1792 double xc = (1.5 * (cellV - ncell) + 1.0) * delY;
1793 double yc = (2 * cellU - cellV - ncell) * delX;
1795 ((
std::abs(xloc - xc) <= 0.5 * delYT) ||
1799 <<
"cellHex: local " << xc <<
":" << yc <<
" difference " <<
std::abs(xloc - xc) <<
":" 1801 <<
":" << delY <<
" (u,v) = (" << cellU <<
"," << cellV <<
")";
1820 return std::make_pair(-1, 0);
1831 return std::make_pair(indx, cell);
1871 edm::LogVerbatim(
"HGCalGeom") <<
"Input " << lay <<
":" << wafer <<
":" << cell <<
" Position " <<
x <<
":" <<
y 1890 <<
" Result " <<
result <<
" from goodCell";
1894 int kndx = cellV * 100 + cellU;
1902 edm::LogVerbatim(
"HGCalGeom") <<
"Fine " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":" 1912 edm::LogVerbatim(
"HGCalGeom") <<
"Coarse " << cellU <<
":" << cellV <<
":" << kndx <<
":" <<
x <<
":" <<
y <<
":" 1928 <<
":" << cellV <<
" Position " <<
x <<
":" <<
y <<
":" <<
rr <<
" Compare Limits " 1930 <<
" from Radius Limits";
1937 <<
" N " <<
N <<
" part " << partn.first <<
":" << partn.second <<
" Result " 1938 <<
result <<
" from goodCell";
1952 <<
waferV <<
") " << indx;
1970 edm::LogVerbatim(
"HGCalGeom") <<
"WaferInLayerTest: Layer " << lay <<
" wafer " << wafer <<
" index " << indx
1977 edm::LogVerbatim(
"HGCalGeom") <<
"WaferInLayerTest: Layer " << lay <<
" wafer " << wafer <<
" R-limits " 2006 return std::make_pair(
x,
y);
2010 double xx(0),
yy(0);
2021 return std::make_pair(
xx,
yy);
std::vector< int > iradMaxBH_
bool maskCell(const DetId &id, int corners) const
std::pair< float, float > locateCellTrap(int lay, int ieta, int iphi, bool reco, bool debug=false) 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
static int32_t cellPlacementIndex(int32_t iz, int32_t frontBack, int32_t orient)
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::tuple< int, int, int > waferFileInfoFromIndex(int kk) const
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
static bool goodCell(int u, int v, int N, int type, int rotn)
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart=false) const
static constexpr int32_t WaferOut
std::pair< int, int > waferTypeRotation(int layer, int waferU, int waferV, bool fromFile=false, bool debug=false) const
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
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
constexpr Detector det() const
get the detector field from this detid
hgtrform getTrForm(unsigned int k) const
static constexpr uint32_t k_CornerSize
constexpr std::array< uint8_t, layerIndexSize > layer
static int getOrient(int index, const HGCalParameters::waferInfo_map &wafers)
wafer_map wafersInLayers_
bool waferInLayer(int wafer, int lay, bool reco) const
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::vector< int > waferUVMaxLayer_
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
std::pair< float, float > localToGlobal8(int lay, int waferU, int waferV, double localX, double localY, bool reco, bool debug) const
std::vector< double > rMaxFront_
Cos< T >::type cos(const T &t)
int waferType(DetId const &id, bool fromFile=false) 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
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_
caConstants::TupleMultiplicity const CAHitNtupletGeneratorKernelsGPU::HitToTuple const cms::cuda::AtomicPairCounter GPUCACell const *__restrict__ cells
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
std::tuple< int, int, int > waferFileInfo(unsigned int kk) const
bool tileExist(int zside, int layer, int ring, int phi) const
bool cellInLayer(int waferU, int waferV, int cellU, int cellV, int lay, bool reco) 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_
constexpr uint16_t localX(uint16_t px)
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
constexpr uint16_t localY(uint16_t py, uint16_t n)
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
std::array< int, 5 > assignCellHex(float x, float y, int lay, bool reco, bool extend=false, bool debug=false) 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_
std::pair< double, double > waferPositionNoRot(int lay, int waferU, int waferV, bool reco, bool debug=false) 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
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_
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)