7 const int EEDetId::QuadColLimits[
EEDetId::nCols+1] = { 0, 8,17,27,36,45,54,62,70,76,79 };
9 const int EEDetId::iYoffset[
EEDetId::nCols+1] = { 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0 };
12 41, 51, 41, 51, 41, 51, 36, 51, 36, 51,
13 26, 51, 26, 51, 26, 51, 21, 51, 21, 51,
14 21, 51, 21, 51, 21, 51, 16, 51, 16, 51,
15 14, 51, 14, 51, 14, 51, 14, 51, 14, 51,
16 9, 51, 9, 51, 9, 51, 9, 51, 9, 51,
17 6, 51, 6, 51, 6, 51, 6, 51, 6, 51,
18 6, 51, 6, 51, 6, 51, 6, 51, 6, 51,
19 4, 51, 4, 51, 4, 51, 4, 51, 4, 56,
20 1, 58, 1, 59, 1, 60, 1, 61, 1, 61,
21 1, 62, 1, 62, 1, 62, 1, 62, 1, 62,
22 1, 62, 1, 62, 1, 62, 1, 62, 1, 62,
23 1, 61, 1, 61, 1, 60, 1, 59, 1, 58,
24 4, 56, 4, 51, 4, 51, 4, 51, 4, 51,
25 6, 51, 6, 51, 6, 51, 6, 51, 6, 51,
26 6, 51, 6, 51, 6, 51, 6, 51, 6, 51,
27 9, 51, 9, 51, 9, 51, 9, 51, 9, 51,
28 14, 51, 14, 51, 14, 51, 14, 51, 14, 51,
29 16, 51, 16, 51, 21, 51, 21, 51, 21, 51,
30 21, 51, 21, 51, 26, 51, 26, 51, 26, 51,
31 36, 51, 36, 51, 41, 51, 41, 51, 41, 51
35 0, 10, 20, 30, 40, 50, 60, 75, 90, 105,
36 120, 145, 170, 195, 220, 245, 270, 300, 330, 360,
37 390, 420, 450, 480, 510, 540, 570, 605, 640, 675,
38 710, 747, 784, 821, 858, 895, 932, 969, 1006, 1043,
39 1080, 1122, 1164, 1206, 1248, 1290, 1332, 1374, 1416, 1458,
40 1500, 1545, 1590, 1635, 1680, 1725, 1770, 1815, 1860, 1905,
41 1950, 1995, 2040, 2085, 2130, 2175, 2220, 2265, 2310, 2355,
42 2400, 2447, 2494, 2541, 2588, 2635, 2682, 2729, 2776, 2818,
43 2860, 2903, 2946, 2988, 3030, 3071, 3112, 3152, 3192, 3232,
44 3272, 3311, 3350, 3389, 3428, 3467, 3506, 3545, 3584, 3623,
45 3662, 3701, 3740, 3779, 3818, 3857, 3896, 3935, 3974, 4013,
46 4052, 4092, 4132, 4172, 4212, 4253, 4294, 4336, 4378, 4421,
47 4464, 4506, 4548, 4595, 4642, 4689, 4736, 4783, 4830, 4877,
48 4924, 4969, 5014, 5059, 5104, 5149, 5194, 5239, 5284, 5329,
49 5374, 5419, 5464, 5509, 5554, 5599, 5644, 5689, 5734, 5779,
50 5824, 5866, 5908, 5950, 5992, 6034, 6076, 6118, 6160, 6202,
51 6244, 6281, 6318, 6355, 6392, 6429, 6466, 6503, 6540, 6577,
52 6614, 6649, 6684, 6719, 6754, 6784, 6814, 6844, 6874, 6904,
53 6934, 6964, 6994, 7024, 7054, 7079, 7104, 7129, 7154, 7179,
54 7204, 7219, 7234, 7249, 7264, 7274, 7284, 7294, 7304, 7314
72 crystal_ix=iz*
ix(SC,crystal);
76 crystal_iy=
iy(SC,crystal);
84 throw cms::Exception(
"InvalidDetId") <<
"EEDetId: Cannot create object. Unknown mode for (int, int, int) constructor.";
89 throw cms::Exception(
"InvalidDetId") <<
"EEDetId: Cannot create object. Indexes out of bounds \n"
90 <<
"x = " << crystal_ix <<
" y = " << crystal_iy <<
" z = " << iz;
93 id_|=(crystal_iy&0x7f)|((crystal_ix&0x7f)<<7)|((iz>0)?(0x4000):(0));
119 const int iz ( hi<
kEEhalf ? -1 : 1 ) ;
120 const uint32_t di ( hi%
kEEhalf ) ;
121 const int ii ( ( std::upper_bound(
kdi,
kdi+(2*
IY_MAX), di ) -
kdi ) - 1 ) ;
122 const int iy ( 1 + ii/2 ) ;
123 const int ix (
kxf[ii] + di -
kdi[ii] ) ;
149 if (iSC > 4*nSCinQuadrant || iSC < 1)
156 if (iSC > 3*nSCinQuadrant)
158 iSCmap = iSC - 3*nSCinQuadrant;
162 else if (iSC > 2*nSCinQuadrant)
164 iSCmap = iSC - 2*nSCinQuadrant;
168 else if (iSC > nSCinQuadrant)
170 iSCmap = iSC - nSCinQuadrant;
187 if (iq == 1 || iq == 3)
188 ixCrys = iqx*(5*(iCol-1) + (
int)(iCrys+4)/5);
189 else if (iq == 2 || iq == 4)
190 ixCrys = iqx*(5*(iCol-1) + (iCrys-1)%5 + 1);
211 if (iSC > 4*nSCinQuadrant || iSC < 1)
218 if (iSC > 3*nSCinQuadrant)
220 iSCmap = iSC - 3*nSCinQuadrant;
224 else if (iSC > 2*nSCinQuadrant)
226 iSCmap = iSC - 2*nSCinQuadrant;
230 else if (iSC > nSCinQuadrant)
232 iSCmap = iSC - nSCinQuadrant;
250 if (iq == 1 || iq == 3)
251 iyCrys = iqy*(5*(iSCy-1) + (iCrys-1)%5 + 1);
252 else if (iq == 2 || iq == 4)
253 iyCrys = iqy*(5*(iSCy-1) + (
int)(iCrys+4)/5 );
260 if ( iQuadrant == 1 || iQuadrant == 4)
262 else if ( iQuadrant == 2 || iQuadrant == 3)
271 if ( iQuadrant == 1 || iQuadrant == 2)
273 else if ( iQuadrant == 3 || iQuadrant == 4)
315 const int iquad ( ( 10<jx && 10<jy ? 1 :
316 ( 11>jx && 10<jy ? 2 :
317 ( 11>jx && 11>jy ? 3 : 4 ) ) ) ) ;
319 const int iCol = ( 1 == iquad || 4 == iquad ? jx - 10 : 11 - jx ) ;
320 const int iRow = ( 1 == iquad || 2 == iquad ? jy - 10 : 11 - jy ) ;
322 static int nSCinQuadrant =
ISC_MAX/4;
326 const int qOff ( nSCinQuadrant*( iquad - 1 ) ) ;
330 return ( yOff >= iRow ? -1 :
358 if (iQuadrant == 1 || iQuadrant == 3)
364 else if (iQuadrant == 2 || iQuadrant == 4)
370 int icrys = 5*icrCol + icrRow + 1;
386 return id.ix() == 50 ||
id.ix() == 51 ;
393 for (
int i = -1;
i <= 1; ++
i) {
394 for (
int j = -1;
j <= 1; ++
j) {
406 int returnValue ( 0 ) ;
411 returnValue = ax + 50 - ay ;
412 if( ay <= 47 ) --returnValue ;
413 if( ay <= 45 ) --returnValue ;
414 if( ay <= 42 ) --returnValue ;
415 if( ay <= 37 ) --returnValue ;
416 if( ay <= 35 ) --returnValue ;
417 if( ay <= 30 ) --returnValue ;
418 if( ay <= 25 ) --returnValue ;
419 if( ay <= 15 ) --returnValue ;
420 if( ay <= 10 ) --returnValue ;
424 returnValue = 91 - returnValue ;
436 returnValue = 271 - returnValue ;
444 returnValue = 1 + ( 360 + returnValue - 10 -1 )%360 ;
454 while( iPhi < 1 ) iPhi+=360 ;
455 while( iPhi > 360 ) iPhi-=360 ;
457 const int index1 ( iPhi - 1 ) ;
458 const int quad ( index1/90 ) ;
459 int indexq ( index1 - quad*90 + 1 ) ;
460 if( 0==quad || 2==quad ) indexq = 91 - indexq ;
461 const int indexh ( indexq > 45 ? 91 - indexq : indexq ) ;
462 const int axh ( indexh<=10 ? indexh :
464 ( indexh<=17 ? indexh - 2 :
466 ( indexh<=28 ? indexh - 3 :
468 ( indexh<=35 ? indexh - 5 :
470 ( indexh<=44 ? indexh - 9 : 35 ))))))))) ;
471 const int ayh ( indexh<=10 ? 50 :
472 ( indexh<=12 ? 60 - indexh :
474 ( indexh<=18 ? 64 - indexh :
476 ( indexh<=30 ? 73 - indexh :
478 ( indexh<=39 ? 77 - indexh :
479 ( indexh<=44 ? 37 : 36 ))))))))) ;
480 const int bxh ( indexq>45 ? ayh : axh ) ;
481 const int byh ( indexq>45 ? axh : ayh ) ;
482 const int cx ( ( quad==0 || quad==3 ? bxh : -bxh+1 ) +
IX_MAX/2 ) ;
483 const int cy ( ( quad==0 || quad==1 ? byh : -byh+1 ) +
IY_MAX/2 ) ;
485 return EEDetId( cx, cy, ( zEnd > 0 ? 1 : -1 ) ) ;
492 int newX =
ix() + nrStepsX;
493 int newY =
iy() + nrStepsY;
505 int newZSide = -1 *
zside();
538 const int kx (
ix() ) ;
539 const int ky (
iy() ) ;
549 return ( ( ax<=10 && ay==50 ) ||
550 ( ax==10 && ay>=48 ) ||
551 ( ax<=15 && ax>=11 && ay==47 ) ||
552 ( ax==15 && ay==46 ) ||
553 ( ax<=25 && ax>=16 && ay==45 ) ||
554 ( ax==25 && ay<=44 && ay>=43 ) ||
555 ( ax<=30 && ax>=26 && ay==42 ) ||
556 ( ax==30 && ay<=41 && ay>=38 ) ||
557 ( ax<=35 && ax>=31 && ay==37 ) ||
558 ( ax==35 && ay==36 ) ) ;
565 if (crystal_ix < IX_MIN || crystal_ix >
IX_MAX ||
566 crystal_iy < IY_MIN || crystal_iy >
IY_MAX ||
abs(iz) != 1 )
570 if ( (crystal_ix >= 1 && crystal_ix <= 3 && (crystal_iy <= 40 || crystal_iy > 60) ) ||
571 (crystal_ix >= 4 && crystal_ix <= 5 && (crystal_iy <= 35 || crystal_iy > 65) ) ||
572 (crystal_ix >= 6 && crystal_ix <= 8 && (crystal_iy <= 25 || crystal_iy > 75) ) ||
573 (crystal_ix >= 9 && crystal_ix <= 13 && (crystal_iy <= 20 || crystal_iy > 80) ) ||
574 (crystal_ix >= 14 && crystal_ix <= 15 && (crystal_iy <= 15 || crystal_iy > 85) ) ||
575 (crystal_ix >= 16 && crystal_ix <= 20 && (crystal_iy <= 13 || crystal_iy > 87) ) ||
576 (crystal_ix >= 21 && crystal_ix <= 25 && (crystal_iy <= 8 || crystal_iy > 92) ) ||
577 (crystal_ix >= 26 && crystal_ix <= 35 && (crystal_iy <= 5 || crystal_iy > 95) ) ||
578 (crystal_ix >= 36 && crystal_ix <= 39 && (crystal_iy <= 3 || crystal_iy > 97) ) ||
579 (crystal_ix >= 98 && crystal_ix <= 100 && (crystal_iy <= 40 || crystal_iy > 60) ) ||
580 (crystal_ix >= 96 && crystal_ix <= 97 && (crystal_iy <= 35 || crystal_iy > 65) ) ||
581 (crystal_ix >= 93 && crystal_ix <= 95 && (crystal_iy <= 25 || crystal_iy > 75) ) ||
582 (crystal_ix >= 88 && crystal_ix <= 92 && (crystal_iy <= 20 || crystal_iy > 80) ) ||
583 (crystal_ix >= 86 && crystal_ix <= 87 && (crystal_iy <= 15 || crystal_iy > 85) ) ||
584 (crystal_ix >= 81 && crystal_ix <= 85 && (crystal_iy <= 13 || crystal_iy > 87) ) ||
585 (crystal_ix >= 76 && crystal_ix <= 80 && (crystal_iy <= 8 || crystal_iy > 92) ) ||
586 (crystal_ix >= 66 && crystal_ix <= 75 && (crystal_iy <= 5 || crystal_iy > 95) ) ||
587 (crystal_ix >= 62 && crystal_ix <= 65 && (crystal_iy <= 3 || crystal_iy > 97) ) ||
588 ( (crystal_ix == 40 || crystal_ix == 61) && ( (crystal_iy >= 46 && crystal_iy <= 55 ) || crystal_iy <= 3 || crystal_iy > 97 )) ||
589 ( (crystal_ix == 41 || crystal_ix == 60) && crystal_iy >= 44 && crystal_iy <= 57 ) ||
590 ( (crystal_ix == 42 || crystal_ix == 59) && crystal_iy >= 43 && crystal_iy <= 58 ) ||
591 ( (crystal_ix == 43 || crystal_ix == 58) && crystal_iy >= 42 && crystal_iy <= 59 ) ||
592 ( (crystal_ix == 44 || crystal_ix == 45 || crystal_ix == 57 || crystal_ix == 56) && crystal_iy >= 41 && crystal_iy <= 60 ) ||
593 ( crystal_ix >= 46 && crystal_ix <= 55 && crystal_iy >= 40 && crystal_iy <= 61 )
614 return s <<
"(EE iz " << ((
id.zside()>0)?(
"+ "):(
"- "))
615 <<
" ix " <<
id.ix() <<
" , iy " <<
id.iy() <<
')';
static bool isNextToBoundary(EEDetId id)
static int distanceX(const EEDetId &a, const EEDetId &b)
EEDetId offsetBy(int nrStepsX, int nrStepsY) const
DetId()
Create an empty or null id (also for persistence)
int ixQuadrantOne() const
static EEDetId unhashIndex(int hi)
std::ostream & operator<<(std::ostream &out, const ALILine &li)
static const int SCCRYSTALMODE
static bool validDetId(int crystal_ix, int crystal_iy, int iz)
static bool validHashIndex(int i)
static const int iYoffset[nCols+1]
uint32_t rawId() const
get the raw id
static bool isOuterRingXY(int ax, int ay)
int iPhiOuterRing() const
static bool isNextToRingBoundary(EEDetId id)
static int distanceY(const EEDetId &a, const EEDetId &b)
static bool isNextToDBoundary(EEDetId id)
int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum) ...
EEDetId switchZSide() const
bool null() const
is this a null id ?
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]
Detector det() const
get the detector field from this detid
EEDetId & operator=(const DetId &id)