6 const int EEDetId::QuadColLimits[
EEDetId::nCols + 1] = {0, 8, 17, 27, 36, 45, 54, 62, 70, 76, 79};
8 const int EEDetId::iYoffset[
EEDetId::nCols + 1] = {0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0};
11 41, 51, 41, 51, 41, 51, 36, 51, 36, 51, 26, 51, 26, 51, 26, 51, 21, 51, 21, 51, 21, 51, 21, 51, 21, 51, 16, 51, 16,
12 51, 14, 51, 14, 51, 14, 51, 14, 51, 14, 51, 9, 51, 9, 51, 9, 51, 9, 51, 9, 51, 6, 51, 6, 51, 6, 51, 6, 51,
13 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 4, 51, 4, 51, 4, 51, 4, 51, 4, 56, 1, 58, 1, 59, 1, 60, 1,
14 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 61, 1, 61, 1, 60,
15 1, 59, 1, 58, 4, 56, 4, 51, 4, 51, 4, 51, 4, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6, 51, 6,
16 51, 6, 51, 6, 51, 9, 51, 9, 51, 9, 51, 9, 51, 9, 51, 14, 51, 14, 51, 14, 51, 14, 51, 14, 51, 16, 51, 16, 51,
17 21, 51, 21, 51, 21, 51, 21, 51, 21, 51, 26, 51, 26, 51, 26, 51, 36, 51, 36, 51, 41, 51, 41, 51, 41, 51};
20 0, 10, 20, 30, 40, 50, 60, 75, 90, 105, 120, 145, 170, 195, 220, 245, 270, 300, 330,
21 360, 390, 420, 450, 480, 510, 540, 570, 605, 640, 675, 710, 747, 784, 821, 858, 895, 932, 969,
22 1006, 1043, 1080, 1122, 1164, 1206, 1248, 1290, 1332, 1374, 1416, 1458, 1500, 1545, 1590, 1635, 1680, 1725, 1770,
23 1815, 1860, 1905, 1950, 1995, 2040, 2085, 2130, 2175, 2220, 2265, 2310, 2355, 2400, 2447, 2494, 2541, 2588, 2635,
24 2682, 2729, 2776, 2818, 2860, 2903, 2946, 2988, 3030, 3071, 3112, 3152, 3192, 3232, 3272, 3311, 3350, 3389, 3428,
25 3467, 3506, 3545, 3584, 3623, 3662, 3701, 3740, 3779, 3818, 3857, 3896, 3935, 3974, 4013, 4052, 4092, 4132, 4172,
26 4212, 4253, 4294, 4336, 4378, 4421, 4464, 4506, 4548, 4595, 4642, 4689, 4736, 4783, 4830, 4877, 4924, 4969, 5014,
27 5059, 5104, 5149, 5194, 5239, 5284, 5329, 5374, 5419, 5464, 5509, 5554, 5599, 5644, 5689, 5734, 5779, 5824, 5866,
28 5908, 5950, 5992, 6034, 6076, 6118, 6160, 6202, 6244, 6281, 6318, 6355, 6392, 6429, 6466, 6503, 6540, 6577, 6614,
29 6649, 6684, 6719, 6754, 6784, 6814, 6844, 6874, 6904, 6934, 6964, 6994, 7024, 7054, 7079, 7104, 7129, 7154, 7179,
30 7204, 7219, 7234, 7249, 7264, 7274, 7284, 7294, 7304, 7314};
43 crystal_ix = iz *
ix(SC, crystal);
47 crystal_iy =
iy(SC, crystal);
54 <<
"EEDetId: Cannot create object. Unknown mode for (int, int, int) constructor.";
58 throw cms::Exception(
"InvalidDetId") <<
"EEDetId: Cannot create object. Indexes out of bounds \n"
59 <<
"x = " << crystal_ix <<
" y = " << crystal_iy <<
" z = " << iz;
62 id_ |= (crystal_iy & 0x7f) | ((crystal_ix & 0x7f) << 7) | ((iz > 0) ? (0x4000) : (0));
67 const int iz(hi <
kEEhalf ? -1 : 1);
68 const uint32_t di(hi %
kEEhalf);
70 const int iy(1 + ii / 2);
71 const int ix(
kxf[ii] + di -
kdi[ii]);
92 if (iSC > 4 * nSCinQuadrant || iSC < 1) {
98 if (iSC > 3 * nSCinQuadrant) {
99 iSCmap = iSC - 3 * nSCinQuadrant;
102 }
else if (iSC > 2 * nSCinQuadrant) {
103 iSCmap = iSC - 2 * nSCinQuadrant;
106 }
else if (iSC > nSCinQuadrant) {
107 iSCmap = iSC - nSCinQuadrant;
123 if (iq == 1 || iq == 3)
124 ixCrys = iqx * (5 * (iCol - 1) + (
int)(iCrys + 4) / 5);
125 else if (iq == 2 || iq == 4)
126 ixCrys = iqx * (5 * (iCol - 1) + (iCrys - 1) % 5 + 1);
146 if (iSC > 4 * nSCinQuadrant || iSC < 1) {
152 if (iSC > 3 * nSCinQuadrant) {
153 iSCmap = iSC - 3 * nSCinQuadrant;
156 }
else if (iSC > 2 * nSCinQuadrant) {
157 iSCmap = iSC - 2 * nSCinQuadrant;
160 }
else if (iSC > nSCinQuadrant) {
161 iSCmap = iSC - nSCinQuadrant;
179 if (iq == 1 || iq == 3)
180 iyCrys = iqy * (5 * (iSCy - 1) + (iCrys - 1) % 5 + 1);
181 else if (iq == 2 || iq == 4)
182 iyCrys = iqy * (5 * (iSCy - 1) + (
int)(iCrys + 4) / 5);
188 if (iQuadrant == 1 || iQuadrant == 4)
190 else if (iQuadrant == 2 || iQuadrant == 3)
198 if (iQuadrant == 1 || iQuadrant == 2)
200 else if (iQuadrant == 3 || iQuadrant == 4)
225 if (0 < jx && 21 > jx && 0 < jy && 21 > jy) {
226 const int iquad((10 < jx && 10 < jy ? 1 : (11 > jx && 10 < jy ? 2 : (11 > jx && 11 > jy ? 3 : 4))));
228 const int iCol = (1 == iquad || 4 == iquad ? jx - 10 : 11 - jx);
229 const int iRow = (1 == iquad || 2 == iquad ? jy - 10 : 11 - jy);
231 static const int nSCinQuadrant =
ISC_MAX / 4;
235 const int qOff(nSCinQuadrant * (iquad - 1));
239 return (yOff >= iRow ? -1 : (
QuadColLimits[iCol] < iscOne ? -2 : iscOne + qOff));
262 if (iQuadrant == 1 || iQuadrant == 3) {
267 else if (iQuadrant == 2 || iQuadrant == 4) {
272 int icrys = 5 * icrCol + icrRow + 1;
281 return id.ix() == 50 ||
id.ix() == 51;
285 for (
int i = -1;
i <= 1; ++
i) {
286 for (
int j = -1;
j <= 1; ++
j) {
300 returnValue = ax + 50 - ay;
321 returnValue = 91 - returnValue;
327 returnValue = 271 - returnValue;
333 returnValue = 1 + (360 + returnValue - 10 - 1) % 360;
346 const int index1(iPhi - 1);
347 const int quad(index1 / 90);
348 int indexq(index1 - quad * 90 + 1);
349 if (0 == quad || 2 == quad)
350 indexq = 91 - indexq;
351 const int indexh(indexq > 45 ? 91 - indexq : indexq);
367 : (indexh <= 39 ? 30 : (indexh <= 44 ? indexh - 9 : 35)))))))));
379 : (indexh <= 30 ? 73 - indexh
381 : (indexh <= 39 ? 77 - indexh
382 : (indexh <= 44 ? 37 : 36)))))))));
383 const int bxh(indexq > 45 ? ayh : axh);
384 const int byh(indexq > 45 ? axh : ayh);
385 const int cx((quad == 0 || quad == 3 ? bxh : -bxh + 1) +
IX_MAX / 2);
386 const int cy((quad == 0 || quad == 1 ? byh : -byh + 1) +
IY_MAX / 2);
388 return EEDetId(cx, cy, (zEnd > 0 ? 1 : -1));
392 int newX =
ix() + nrStepsX;
393 int newY =
iy() + nrStepsY;
403 int newZSide = -1 *
zside();
438 return ((ax <= 10 && ay == 50) || (ax == 10 && ay >= 48) || (ax <= 15 && ax >= 11 && ay == 47) ||
439 (ax == 15 && ay == 46) || (ax <= 25 && ax >= 16 && ay == 45) || (ax == 25 && ay <= 44 && ay >= 43) ||
440 (ax <= 30 && ax >= 26 && ay == 42) || (ax == 30 && ay <= 41 && ay >= 38) ||
441 (ax <= 35 && ax >= 31 && ay == 37) || (ax == 35 && ay == 36));
446 !((crystal_ix >= 1 && crystal_ix <= 3 && (crystal_iy <= 40 || crystal_iy > 60)) ||
447 (crystal_ix >= 4 && crystal_ix <= 5 && (crystal_iy <= 35 || crystal_iy > 65)) ||
448 (crystal_ix >= 6 && crystal_ix <= 8 && (crystal_iy <= 25 || crystal_iy > 75)) ||
449 (crystal_ix >= 9 && crystal_ix <= 13 && (crystal_iy <= 20 || crystal_iy > 80)) ||
450 (crystal_ix >= 14 && crystal_ix <= 15 && (crystal_iy <= 15 || crystal_iy > 85)) ||
451 (crystal_ix >= 16 && crystal_ix <= 20 && (crystal_iy <= 13 || crystal_iy > 87)) ||
452 (crystal_ix >= 21 && crystal_ix <= 25 && (crystal_iy <= 8 || crystal_iy > 92)) ||
453 (crystal_ix >= 26 && crystal_ix <= 35 && (crystal_iy <= 5 || crystal_iy > 95)) ||
454 (crystal_ix >= 36 && crystal_ix <= 39 && (crystal_iy <= 3 || crystal_iy > 97)) ||
455 (crystal_ix >= 98 && crystal_ix <= 100 && (crystal_iy <= 40 || crystal_iy > 60)) ||
456 (crystal_ix >= 96 && crystal_ix <= 97 && (crystal_iy <= 35 || crystal_iy > 65)) ||
457 (crystal_ix >= 93 && crystal_ix <= 95 && (crystal_iy <= 25 || crystal_iy > 75)) ||
458 (crystal_ix >= 88 && crystal_ix <= 92 && (crystal_iy <= 20 || crystal_iy > 80)) ||
459 (crystal_ix >= 86 && crystal_ix <= 87 && (crystal_iy <= 15 || crystal_iy > 85)) ||
460 (crystal_ix >= 81 && crystal_ix <= 85 && (crystal_iy <= 13 || crystal_iy > 87)) ||
461 (crystal_ix >= 76 && crystal_ix <= 80 && (crystal_iy <= 8 || crystal_iy > 92)) ||
462 (crystal_ix >= 66 && crystal_ix <= 75 && (crystal_iy <= 5 || crystal_iy > 95)) ||
463 (crystal_ix >= 62 && crystal_ix <= 65 && (crystal_iy <= 3 || crystal_iy > 97)) ||
464 ((crystal_ix == 40 || crystal_ix == 61) &&
465 ((crystal_iy >= 46 && crystal_iy <= 55) || crystal_iy <= 3 || crystal_iy > 97)) ||
466 ((crystal_ix == 41 || crystal_ix == 60) && crystal_iy >= 44 && crystal_iy <= 57) ||
467 ((crystal_ix == 42 || crystal_ix == 59) && crystal_iy >= 43 && crystal_iy <= 58) ||
468 ((crystal_ix == 43 || crystal_ix == 58) && crystal_iy >= 42 && crystal_iy <= 59) ||
469 ((crystal_ix == 44 || crystal_ix == 45 || crystal_ix == 57 || crystal_ix == 56) && crystal_iy >= 41 &&
471 (crystal_ix >= 46 && crystal_ix <= 55 && crystal_iy >= 40 && crystal_iy <= 61));
480 return s <<
"(EE iz " << ((
id.zside() > 0) ? (
"+ ") : (
"- ")) <<
" ix " <<
id.ix() <<
" , iy " <<
id.iy() <<
')';
static bool isNextToBoundary(EEDetId id)
static int distanceX(const EEDetId &a, const EEDetId &b)
constexpr uint32_t rawId() const
get the raw id
__host__ __device__ constexpr RandomIt upper_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
EEDetId offsetBy(int nrStepsX, int nrStepsY) const
int ixQuadrantOne() const
static EEDetId unhashIndex(int hi)
std::ostream & operator<<(std::ostream &out, const ALILine &li)
static const int SCCRYSTALMODE
static bool validHashIndex(int i)
static const int iYoffset[nCols+1]
static bool isOuterRingXY(int ax, int ay)
static bool slowValidDetId(int crystal_ix, int crystal_iy)
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
int iPhiOuterRing() const
Abs< T >::type abs(const T &t)
static bool isNextToRingBoundary(EEDetId id)
static int distanceY(const EEDetId &a, const EEDetId &b)
static bool isNextToDBoundary(EEDetId id)
EEDetId switchZSide() const
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
static const int QuadColLimits[nCols+1]
static const unsigned short kxf[2 *IY_MAX]
static EEDetId idOuterRing(int iPhi, int zEnd)
int iyQuadrantOne() const
static const unsigned short kdi[2 *IY_MAX]
constexpr DetId()
Create an empty or null id (also for persistence)
constexpr Detector det() const
get the detector field from this detid