CMS 3D CMS Logo

EEDetId.cc
Go to the documentation of this file.
3 
4 #include <algorithm>
5 
6 const int EEDetId::QuadColLimits[EEDetId::nCols + 1] = {0, 8, 17, 27, 36, 45, 54, 62, 70, 76, 79};
7 
8 const int EEDetId::iYoffset[EEDetId::nCols + 1] = {0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0};
9 
10 const unsigned short EEDetId::kxf[] = {
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};
18 
19 const unsigned short EEDetId::kdi[] = {
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};
31 
32 EEDetId::EEDetId(int index1, int index2, int iz, int mode) : DetId(Ecal, EcalEndcap) {
33  int crystal_ix = 0;
34  int crystal_iy = 0;
35  if (mode == XYMODE) {
36  crystal_ix = index1;
37  crystal_iy = index2;
38  } else if (mode == SCCRYSTALMODE) {
39  int SC = index1;
40  int crystal = index2;
41  // std::cout << "iz " << iz << " SC " << index1 << "crystal " << index2 << std::endl;
42 
43  crystal_ix = iz * ix(SC, crystal);
44  if (crystal_ix < 0)
45  crystal_ix++;
46  crystal_ix += 50;
47  crystal_iy = iy(SC, crystal);
48  if (crystal_iy < 0)
49  crystal_iy++;
50  crystal_iy += 50;
51 
52  } else {
53  throw cms::Exception("InvalidDetId")
54  << "EEDetId: Cannot create object. Unknown mode for (int, int, int) constructor.";
55  }
56 
57  if (!validDetId(crystal_ix, crystal_iy, iz)) {
58  throw cms::Exception("InvalidDetId") << "EEDetId: Cannot create object. Indexes out of bounds \n"
59  << "x = " << crystal_ix << " y = " << crystal_iy << " z = " << iz;
60  }
61 
62  id_ |= (crystal_iy & 0x7f) | ((crystal_ix & 0x7f) << 7) | ((iz > 0) ? (0x4000) : (0));
63 }
64 
66  if (validHashIndex(hi)) {
67  const int iz(hi < kEEhalf ? -1 : 1);
68  const uint32_t di(hi % kEEhalf);
69  const int ii((std::upper_bound(kdi, kdi + (2 * IY_MAX), di) - kdi) - 1);
70  const int iy(1 + ii / 2);
71  const int ix(kxf[ii] + di - kdi[ii]);
72  return EEDetId(ix, iy, iz);
73  } else {
74  return EEDetId();
75  }
76 }
77 
78 int EEDetId::ix(int iSC, int iCrys) const {
79  /*
80  * ix() return individual crystal x-coordinate
81  *
82  * Author : B W Kennedy
83  * Version : 1.00
84  * Created : 21 December 2005
85  * Last Mod : 31 January 2006
86  *
87  * Input : iSC, iCrys - Supercrystal and crystal ids
88  */
89 
90  int nSCinQuadrant = QuadColLimits[nCols];
91 
92  if (iSC > 4 * nSCinQuadrant || iSC < 1) {
93  throw new std::exception();
94  }
95 
96  // Map SC number into (x>0,y>0) quadrant.
97  int iSCmap, iqx, iq;
98  if (iSC > 3 * nSCinQuadrant) {
99  iSCmap = iSC - 3 * nSCinQuadrant;
100  iqx = 1;
101  iq = 4;
102  } else if (iSC > 2 * nSCinQuadrant) {
103  iSCmap = iSC - 2 * nSCinQuadrant;
104  iqx = -1;
105  iq = 3;
106  } else if (iSC > nSCinQuadrant) {
107  iSCmap = iSC - nSCinQuadrant;
108  iqx = -1;
109  iq = 2;
110  } else {
111  iSCmap = iSC;
112  iqx = 1;
113  iq = 1;
114  }
115 
116  // Decide which column the SC is in
117  int iCol = 0;
118  while (iSCmap > QuadColLimits[iCol++])
119  ;
120  iCol--;
121 
122  int ixCrys = -1;
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);
127 
128  // returning a value from 1 to 100
129 
130  return ixCrys;
131 }
132 
133 int EEDetId::iy(int iSC, int iCrys) const {
134  /*
135  * iy() return individual crystal y-coordinate
136  *
137  * Author : B W Kennedy
138  * Version : 1.00
139  * Created : 21 December 2005
140  * Last Mod : 31 January 2006
141  *
142  * Input : iSC, iCrys - Supercrystal and crystal ids
143  */
144 
145  int nSCinQuadrant = QuadColLimits[nCols];
146  if (iSC > 4 * nSCinQuadrant || iSC < 1) {
147  throw new std::exception();
148  }
149 
150  // Map SC number into (x>0,y>0) quadrant
151  int iSCmap, iqy, iq;
152  if (iSC > 3 * nSCinQuadrant) {
153  iSCmap = iSC - 3 * nSCinQuadrant;
154  iqy = -1;
155  iq = 4;
156  } else if (iSC > 2 * nSCinQuadrant) {
157  iSCmap = iSC - 2 * nSCinQuadrant;
158  iqy = -1;
159  iq = 3;
160  } else if (iSC > nSCinQuadrant) {
161  iSCmap = iSC - nSCinQuadrant;
162  iqy = 1;
163  iq = 2;
164  } else {
165  iSCmap = iSC;
166  iqy = 1;
167  iq = 1;
168  }
169 
170  // Decide which column the SC is in
171  int iCol = 0;
172  while (iSCmap > QuadColLimits[iCol++])
173  ;
174  iCol--;
175 
176  int iSCy = iSCmap - QuadColLimits[iCol - 1] + iYoffset[iCol];
177 
178  int iyCrys = -1;
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);
183  return iyCrys;
184 }
185 
187  int iQuadrant = iquadrant();
188  if (iQuadrant == 1 || iQuadrant == 4)
189  return (ix() - 50);
190  else if (iQuadrant == 2 || iQuadrant == 3)
191  return (51 - ix());
192  //Should never be reached
193  return -1;
194 }
195 
197  int iQuadrant = iquadrant();
198  if (iQuadrant == 1 || iQuadrant == 2)
199  return (iy() - 50);
200  else if (iQuadrant == 3 || iQuadrant == 4)
201  return 51 - iy();
202  //Should never be reached
203  return -1;
204 }
205 
206 int EEDetId::iquadrant() const {
207  if (ix() > 50) {
208  if (iy() > 50)
209  return 1;
210  else
211  return 4;
212  } else {
213  if (iy() > 50)
214  return 2;
215  else
216  return 3;
217  }
218  //Should never be reached
219  return -1;
220 }
221 
222 int EEDetId::isc() const { return isc(1 + (ix() - 1) / nCrys, 1 + (iy() - 1) / nCrys); }
223 
224 int EEDetId::isc(int jx, int jy) {
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))));
227 
228  const int iCol = (1 == iquad || 4 == iquad ? jx - 10 : 11 - jx);
229  const int iRow = (1 == iquad || 2 == iquad ? jy - 10 : 11 - jy);
230 
231  static const int nSCinQuadrant = ISC_MAX / 4;
232 
233  const int yOff(iYoffset[iCol]);
234 
235  const int qOff(nSCinQuadrant * (iquad - 1));
236 
237  const int iscOne(QuadColLimits[iCol - 1] + iRow - yOff);
238 
239  return (yOff >= iRow ? -1 : (QuadColLimits[iCol] < iscOne ? -2 : iscOne + qOff));
240  } else {
241  return -3; // bad inputs
242  }
243 }
244 
245 int EEDetId::ic() const {
246  /*
247  * Return crystal number from (x,y) coordinates.
248  *
249  * Author : B W Kennedy
250  * Version : 1.00
251  * Created : 5 May 2006
252  * Last Mod :
253  *
254  * Input : ix, iy - (x,y) position of crystal
255  */
256 
257  /* Useful constants . */
258  int iQuadrant = iquadrant();
259  int icrCol = -1;
260  int icrRow = -1;
261 
262  if (iQuadrant == 1 || iQuadrant == 3) {
263  icrCol = (ixQuadrantOne() - 1) % nCrys;
264  icrRow = (iyQuadrantOne() - 1) % nCrys;
265  }
266 
267  else if (iQuadrant == 2 || iQuadrant == 4) {
268  icrRow = (ixQuadrantOne() - 1) % nCrys;
269  icrCol = (iyQuadrantOne() - 1) % nCrys;
270  }
271 
272  int icrys = 5 * icrCol + icrRow + 1;
273 
274  return icrys;
275 }
276 
278 
280  // hardcoded values for D boundary
281  return id.ix() == 50 || id.ix() == 51;
282 }
283 
285  for (int i = -1; i <= 1; ++i) {
286  for (int j = -1; j <= 1; ++j) {
287  if (!validDetId(id.ix() + i, id.iy() + j, id.zside())) {
288  return true;
289  }
290  }
291  }
292  return false;
293 }
294 
296  int returnValue(0);
297  if (isOuterRing()) {
298  const int ax(abs(ix() - IX_MAX / 2));
299  const int ay(abs(iy() - IY_MAX / 2));
300  returnValue = ax + 50 - ay;
301  if (ay <= 47)
302  --returnValue;
303  if (ay <= 45)
304  --returnValue;
305  if (ay <= 42)
306  --returnValue;
307  if (ay <= 37)
308  --returnValue;
309  if (ay <= 35)
310  --returnValue;
311  if (ay <= 30)
312  --returnValue;
313  if (ay <= 25)
314  --returnValue;
315  if (ay <= 15)
316  --returnValue;
317  if (ay <= 10)
318  --returnValue;
319  const int iq(iquadrant());
320  if (1 == iq) {
321  returnValue = 91 - returnValue;
322  } else {
323  if (2 == iq) {
324  returnValue += 90;
325  } else {
326  if (3 == iq) {
327  returnValue = 271 - returnValue;
328  } else {
329  returnValue += 270;
330  }
331  }
332  }
333  returnValue = 1 + (360 + returnValue - 10 - 1) % 360;
334  }
335  // if( positiveZ() ) returnValue += 360 ;
336  return returnValue;
337 }
338 
339 EEDetId EEDetId::idOuterRing(int iPhi, int zEnd) {
340  iPhi -= 10; // phi=1 in barrel is at -10deg
341  while (iPhi < 1)
342  iPhi += 360;
343  while (iPhi > 360)
344  iPhi -= 360;
345 
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);
352  const int axh(
353  indexh <= 10
354  ? indexh
355  : (indexh <= 12
356  ? 10
357  : (indexh <= 17
358  ? indexh - 2
359  : (indexh <= 18
360  ? 15
361  : (indexh <= 28
362  ? indexh - 3
363  : (indexh <= 30
364  ? 25
365  : (indexh <= 35
366  ? indexh - 5
367  : (indexh <= 39 ? 30 : (indexh <= 44 ? indexh - 9 : 35)))))))));
368  const int ayh(
369  indexh <= 10
370  ? 50
371  : (indexh <= 12
372  ? 60 - indexh
373  : (indexh <= 17
374  ? 47
375  : (indexh <= 18
376  ? 64 - indexh
377  : (indexh <= 28
378  ? 45
379  : (indexh <= 30 ? 73 - indexh
380  : (indexh <= 35 ? 42
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);
387 
388  return EEDetId(cx, cy, (zEnd > 0 ? 1 : -1));
389 }
390 
391 EEDetId EEDetId::offsetBy(int nrStepsX, int nrStepsY) const {
392  int newX = ix() + nrStepsX;
393  int newY = iy() + nrStepsY;
394 
395  if (validDetId(newX, newY, zside())) {
396  return EEDetId(newX, newY, zside());
397  } else {
398  return EEDetId(0);
399  }
400 }
401 
403  int newZSide = -1 * zside();
404  if (validDetId(ix(), iy(), newZSide)) {
405  return EEDetId(ix(), iy(), newZSide);
406  } else {
407  return EEDetId(0);
408  }
409 }
410 
411 DetId EEDetId::offsetBy(const DetId startId, int nrStepsX, int nrStepsY) {
412  if (startId.det() == DetId::Ecal && startId.subdetId() == EcalEndcap) {
413  EEDetId eeStartId(startId);
414  return eeStartId.offsetBy(nrStepsX, nrStepsY).rawId();
415  } else {
416  return DetId(0);
417  }
418 }
419 
421  if (startId.det() == DetId::Ecal && startId.subdetId() == EcalEndcap) {
422  EEDetId eeStartId(startId);
423  return eeStartId.switchZSide().rawId();
424  } else {
425  return DetId(0);
426  }
427 }
428 
429 bool EEDetId::isOuterRing() const {
430  const int kx(ix());
431  const int ky(iy());
432  const int ax(kx > IX_MAX / 2 ? kx - IX_MAX / 2 : IX_MAX / 2 + 1 - kx);
433  const int ay(ky > IY_MAX / 2 ? ky - IY_MAX / 2 : IY_MAX / 2 + 1 - ky);
434  return (isOuterRingXY(ax, ay) || isOuterRingXY(ay, ax));
435 }
436 
437 bool EEDetId::isOuterRingXY(int ax, int ay) {
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));
442 }
443 
444 bool EEDetId::slowValidDetId(int crystal_ix, int crystal_iy) {
445  return // negative logic!
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 &&
470  crystal_iy <= 60) ||
471  (crystal_ix >= 46 && crystal_ix <= 55 && crystal_iy >= 40 && crystal_iy <= 61));
472 }
473 
474 int EEDetId::distanceX(const EEDetId& a, const EEDetId& b) { return abs(a.ix() - b.ix()); }
475 
476 int EEDetId::distanceY(const EEDetId& a, const EEDetId& b) { return abs(a.iy() - b.iy()); }
477 
478 #include <ostream>
479 std::ostream& operator<<(std::ostream& s, const EEDetId& id) {
480  return s << "(EE iz " << ((id.zside() > 0) ? ("+ ") : ("- ")) << " ix " << id.ix() << " , iy " << id.iy() << ')';
481 }
static bool isNextToBoundary(EEDetId id)
Definition: EEDetId.cc:277
bool isOuterRing() const
Definition: EEDetId.cc:429
static const int ISC_MAX
Definition: EEDetId.h:316
static int distanceX(const EEDetId &a, const EEDetId &b)
Definition: EEDetId.cc:474
std::ostream & operator<<(std::ostream &s, const EEDetId &id)
Definition: EEDetId.cc:479
static const int XYMODE
Definition: EEDetId.h:333
int ix() const
Definition: EEDetId.h:77
static EEDetId unhashIndex(int hi)
Definition: EEDetId.cc:65
int iquadrant() const
Definition: EEDetId.cc:206
static const int SCCRYSTALMODE
Definition: EEDetId.h:334
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
EEDetId switchZSide() const
Definition: EEDetId.cc:402
static bool validHashIndex(int i)
Definition: EEDetId.h:239
int ic() const
Definition: EEDetId.cc:245
static const int iYoffset[nCols+1]
Definition: EEDetId.h:347
static bool isOuterRingXY(int ax, int ay)
Definition: EEDetId.cc:437
static const int nCols
Definition: EEDetId.h:344
Definition: EPCuts.h:4
static bool slowValidDetId(int crystal_ix, int crystal_iy)
Definition: EEDetId.cc:444
EEDetId offsetBy(int nrStepsX, int nrStepsY) const
Definition: EEDetId.cc:391
static constexpr int kEEhalf
Definition: EEDetId.h:324
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static bool isNextToRingBoundary(EEDetId id)
Definition: EEDetId.cc:284
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
static int distanceY(const EEDetId &a, const EEDetId &b)
Definition: EEDetId.cc:476
static bool isNextToDBoundary(EEDetId id)
Definition: EEDetId.cc:279
int isc() const
Definition: EEDetId.cc:222
ii
Definition: cuy.py:589
int ixQuadrantOne() const
Definition: EEDetId.cc:186
static const int IX_MAX
Definition: EEDetId.h:298
Definition: DetId.h:17
int zside() const
Definition: EEDetId.h:71
int iyQuadrantOne() const
Definition: EEDetId.cc:196
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
Definition: EEDetId.h:248
static const int nCrys
Definition: EEDetId.h:345
uint32_t id_
Definition: DetId.h:69
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
static const int QuadColLimits[nCols+1]
Definition: EEDetId.h:346
static const unsigned short kxf[2 *IY_MAX]
Definition: EEDetId.h:349
static EEDetId idOuterRing(int iPhi, int zEnd)
Definition: EEDetId.cc:339
static const int IY_MAX
Definition: EEDetId.h:302
static const unsigned short kdi[2 *IY_MAX]
Definition: EEDetId.h:350
EEDetId()
Definition: EEDetId.h:24
int iPhiOuterRing() const
Definition: EEDetId.cc:295
constexpr DetId()
Create an empty or null id (also for persistence)
Definition: DetId.h:38
int iy() const
Definition: EEDetId.h:83