CMS 3D CMS Logo

ecalDccMap.h
Go to the documentation of this file.
1 #include <iostream>
2 
3 template <class T>
4 T mod(const T &a, const T &b) {
5  T c = a % b;
6  return c < 0 ? c + b : c;
7 }
8 
9 static const char endcapDccMap[401] = {
10  " 777777 "
11  " 666777777888 "
12  " 66667777778888 "
13  " 6666667777888888 "
14  " 666666677778888888 "
15  " 566666677778888880 " // Z
16  " 555666667788888000 " // x-----> X
17  "55555566677888000000" // |
18  "555555566 880000000" // |
19  "55555555 00000000" //_ // |
20  "55555554 10000000" // V Y
21  "554444444 111111100"
22  "44444444332211111111"
23  " 444444333222111111 "
24  " 444443333222211111 "
25  " 444433333222221111 "
26  " 4443333322222111 "
27  " 43333332222221 "
28  " 333333222222 "
29  " 333222 "};
30 
38 inline int dccPhiIndexOfRU(int iDet, int i, int j) {
39  if (iDet == 1) { // barrel
40  // iEta=i, iPhi=j
41  // phi edge of a SM is 4 TT
42  return j / 4;
43  }
44  char flag = endcapDccMap[i + j * 20];
45  return (flag == ' ') ? -1 : (flag - '0');
46 }
47 
55 inline int dccPhiIndex(int iDet, int i, int j) { return dccPhiIndexOfRU(iDet, i / 5, j / 5); }
56 
63 inline int dccIndex(int iDet, int i, int j) {
64  if (iDet == 1) { // barrel
65  // a SM is 85 crystal long:
66  int iEtaSM = i / 85;
67  // a SM is 20 crystal wide:
68  int iPhiSM = j / 20;
69  // DCC numbers start at 9 in the barrel and there 18 DCC/SM
70  return 9 + 18 * iEtaSM + iPhiSM;
71  }
72  int iPhi = dccPhiIndex(iDet, i, j);
73  if (iPhi < 0)
74  return -1;
75  // 34 DCCs in barrel and 8 in EE-=>in EE+ DCC numbering starts at 45,
76  // iDet/2 is 0 for EE- and 1 for EE+:
77  return iPhi + iDet / 2 * 45;
78 }
79 
86 inline int dccIndexOfRU(int iDet, int i, int j) {
87  if (iDet == 1) { // barrel
88  // a SM is 17 RU long:
89  int iEtaSM = i / 17;
90  // a SM is 4 RU wide:
91  int iPhiSM = j / 4;
92  // DCC numbers start at 9 in the barrel and there 18 DCC/SM
93  return 9 + 18 * iEtaSM + iPhiSM;
94  }
95  int iPhi = dccPhiIndexOfRU(iDet, i, j);
96  if (iPhi < 0)
97  return -1;
98  // 34 DCCs in barrel and 8 in EE-=>in EE+ DCC numbering starts at 45,
99  // iDet/2 is 0 for EE- and 1 for EE+:
100  return iPhi + iDet / 2 * 45;
101 }
102 
103 inline int abOfDcc(int iDCC) {
104  if (iDCC < 0 || iDCC > 54)
105  return -1;
106  if (iDCC < 9) { // EE-
107  return iDCC / 3;
108  } else if (iDCC < 27) { // EB-
109  // an EB AB is made of 6 DCCs,
110  // first EB- AB is numbered 3
111  // and "1st" DCC of AB 3 is DCC 26
112  //(AB 3 made of DCCs 26,9,10,11,12,13):
113  return 3 + mod(iDCC - 26, 18) / 6;
114  } else if (iDCC < 45) { // EB+
115  // an EB AB is made of 6 DCCs,
116  // first EB+ AB is numbered 6
117  // and "1st" DCC of AB6 is DCC 44
118  //(AB 6 made of DCCs 44,27,28,29,30,31):
119  return 6 + mod(iDCC - 44, 18) / 6;
120  } else { // EE+
121  // AB numbering starts at DCC=45 and runs along phi in increasing phi
122  // first EE+ AB is numbered 9:
123  return 9 + (iDCC - 45) / 3;
124  }
125 }
int dccPhiIndex(int iDet, int i, int j)
Definition: ecalDccMap.h:55
int dccIndex(int iDet, int i, int j)
Definition: ecalDccMap.h:63
int abOfDcc(int iDCC)
Definition: ecalDccMap.h:103
int dccIndexOfRU(int iDet, int i, int j)
Definition: ecalDccMap.h:86
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
long double T
static const char endcapDccMap[401]
Definition: ecalDccMap.h:9
T mod(const T &a, const T &b)
Definition: ecalDccMap.h:4
int dccPhiIndexOfRU(int iDet, int i, int j)
Definition: ecalDccMap.h:38