CMS 3D CMS Logo

PtAssignmentEngineAux2016.cc
Go to the documentation of this file.
2 
3 //ModeVariables is a 2D arrary indexed by [TrackMode(13 Total Listed Below)][VariableNumber(20 Total Constructed Above)]
4 // Variable numbering
5 // 0 = dPhi12
6 // 1 = dPhi13
7 // 2 = dPhi14
8 // 3 = dPhi23
9 // 4 = dPhi24
10 // 5 = dPhi34
11 // 6 = dEta12
12 // 7 = dEta13
13 // 8 = dEta14
14 // 9 = dEta23
15 // 10 = dEta24
16 // 11 = dEta34
17 // 12 = CLCT1
18 // 13 = CLCT2
19 // 14 = CLCT3
20 // 15 = CLCT4
21 // 16 = CSCID1
22 // 17 = CSCID2
23 // 18 = CSCID3
24 // 19 = CSCID4
25 // 20 = FR1
26 // 21 = FR2
27 // 22 = FR3
28 // 23 = FR4
29 
30 // Bobby's Scheme3 (or "SchemeC"), with 30 bit compression //
31 //3:TrackEta:dPhi12:dEta12:CLCT1:CLCT2:FR1
32 //4:Single Station Track Not Possible
33 //5:TrackEta:dPhi13:dEta13:CLCT1:CLCT3:FR1
34 //6:TrackEta:dPhi23:dEta23:CLCT2:CLCT3:FR2
35 //7:TrackEta:dPhi12:dPhi23:dEta13:CLCT1:FR1
36 //8:Single Station Track Not Possible
37 //9:TrackEta:dPhi14:dEta14:CLCT1:CLCT4:FR1
38 //10:TrackEta:dPhi24:dEta24:CLCT2:CLCT4:FR2
39 //11:TrackEta:dPhi12:dPhi24:dEta14:CLCT1:FR1
40 //12:TrackEta:dPhi34:dEta34:CLCT3:CLCT4:FR3
41 //13:TrackEta:dPhi13:dPhi34:dEta14:CLCT1:FR1
42 //14:TrackEta:dPhi23:dPhi34:dEta24:CLCT2
43 //15:TrackEta:dPhi12:dPhi23:dPhi34:FR1
44 
45 static const int ModeVariables_Scheme3[13][6] =
46 {
47  {0,6,12,13,20,-999}, // 3
48  {-999,-999,-999,-999,-999,-999}, // 4
49  {1,7,12,14,20,-999}, // 5
50  {3,9,13,14,21,-999}, // 6
51  {0,3,7,12,20,-999}, // 7
52  {-999,-999,-999,-999,-999,-999}, // 8
53  {2,8,12,15,20,-999}, // 9
54  {4,10,13,15,21,-999}, // 10
55  {0,4,8,12,20,-999}, // 11
56  {5,11,14,15,22,-999}, // 12
57  {1,5,8,16,20,-999}, // 13
58  {3,5,10,13,-999,-999}, // 14
59  {0,3,5,20,-999,-999} // 15
60 };
61 
62 // 256 max units----
63 
64 static const int dPhiNLBMap_5bit_256Max[32] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 23, 25, 28, 31, 34, 39, 46, 55, 68, 91, 136};
65 
66 static const int dPhiNLBMap_6bit_256Max[64] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 42, 43, 45, 47, 49, 51, 53, 56, 58, 61, 65, 68, 73, 78, 83, 89, 97, 106, 116, 129, 145, 166, 193, 232};
67 
68 static const int dPhiNLBMap_7bit_256Max[128] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 82, 83, 84, 86, 87, 88, 90, 91, 93, 94, 96, 97, 99, 101, 103, 105, 107, 109, 111, 113, 115, 118, 120, 123, 125, 128, 131, 134, 138, 141, 145, 149, 153, 157, 161, 166, 171, 176, 182, 188, 194, 201, 209, 217, 225, 235, 245};
69 
70 // 512 max units----
71 
72 static const int dPhiNLBMap_7bit_512Max[128] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 83, 84, 86, 87, 89, 91, 92, 94, 96, 98, 100, 102, 105, 107, 110, 112, 115, 118, 121, 124, 127, 131, 135, 138, 143, 147, 152, 157, 162, 168, 174, 181, 188, 196, 204, 214, 224, 235, 247, 261, 276, 294, 313, 336, 361, 391, 427, 470};
73 
74 static const int dPhiNLBMap_8bit_512Max[256] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 164, 165, 166, 167, 168, 170, 171, 172, 174, 175, 176, 178, 179, 180, 182, 183, 185, 186, 188, 190, 191, 193, 194, 196, 198, 200, 201, 203, 205, 207, 209, 211, 213, 215, 217, 219, 221, 223, 225, 228, 230, 232, 235, 237, 240, 242, 245, 248, 250, 253, 256, 259, 262, 265, 268, 272, 275, 278, 282, 285, 289, 293, 297, 300, 305, 309, 313, 317, 322, 327, 331, 336, 341, 347, 352, 358, 363, 369, 375, 382, 388, 395, 402, 410, 417, 425, 433, 442, 450, 460, 469, 479, 490, 500};
75 
76 
78  return ModeVariables_Scheme3;
79 }
80 
82  int dPhi_= max;
83  int sign_ = 1;
84  if (dPhi<0)
85  sign_ = -1;
86  dPhi = sign_ * dPhi;
87 
88  if (max==256)
89  {
90  if (bits == 5)
91  {
92  dPhi_ = dPhiNLBMap_5bit_256Max[(1<<bits)-1];
93  for (int edge=0; edge<(1<<bits)-1; edge++)
94  {
95  if (dPhiNLBMap_5bit_256Max[edge]<=dPhi && dPhiNLBMap_5bit_256Max[edge+1]>dPhi)
96  {
97  dPhi_ = dPhiNLBMap_5bit_256Max[edge];
98  break;
99  }
100  }
101  }
102  if (bits == 6)
103  {
104  dPhi_ = dPhiNLBMap_6bit_256Max[(1<<bits)-1];
105  for (int edge=0; edge<(1<<bits)-1; edge++)
106  {
107  if (dPhiNLBMap_6bit_256Max[edge]<=dPhi && dPhiNLBMap_6bit_256Max[edge+1]>dPhi)
108  {
109  dPhi_ = dPhiNLBMap_6bit_256Max[edge];
110  break;
111  }
112  }
113  }
114  if (bits == 7)
115  {
116  dPhi_ = dPhiNLBMap_7bit_256Max[(1<<bits)-1];
117  for (int edge=0; edge<(1<<bits)-1; edge++)
118  {
119  if (dPhiNLBMap_7bit_256Max[edge]<=dPhi && dPhiNLBMap_7bit_256Max[edge+1]>dPhi)
120  {
121  dPhi_ = dPhiNLBMap_7bit_256Max[edge];
122  break;
123  }
124  }
125  }
126  }
127 
128  else if (max==512)
129  {
130  if (bits == 7)
131  {
132  dPhi_ = dPhiNLBMap_7bit_512Max[(1<<bits)-1];
133  for (int edge=0; edge<(1<<bits)-1; edge++)
134  {
135  if (dPhiNLBMap_7bit_512Max[edge]<=dPhi && dPhiNLBMap_7bit_512Max[edge+1]>dPhi)
136  {
137  dPhi_ = dPhiNLBMap_7bit_512Max[edge];
138  break;
139  }
140  }
141  }
142  if (bits == 8)
143  {
144  dPhi_ = dPhiNLBMap_8bit_512Max[(1<<bits)-1];
145  for (int edge=0; edge<(1<<bits)-1; edge++)
146  {
147  if (dPhiNLBMap_8bit_512Max[edge]<=dPhi && dPhiNLBMap_8bit_512Max[edge+1]>dPhi)
148  {
149  dPhi_ = dPhiNLBMap_8bit_512Max[edge];
150  break;
151  }
152  }
153  }
154  }
155 
156  if (dPhi>=max) dPhi_ = max;
157  return (sign_ * dPhi_);
158 }
159 
161  int dPhiBin_= (1<<bits)-1;
162  int sign_ = 1;
163  if (dPhi<0)
164  sign_ = -1;
165  dPhi = sign_ * dPhi;
166 
167  if (max==256)
168  {
169  if (bits == 5)
170  {
171  for (int edge=0; edge<(1<<bits)-1; edge++)
172  {
173  if (dPhiNLBMap_5bit_256Max[edge]<=dPhi && dPhiNLBMap_5bit_256Max[edge+1]>dPhi)
174  {
175  dPhiBin_ = edge;
176  break;
177  }
178  }
179  }
180  if (bits == 6)
181  {
182  for (int edge=0; edge<(1<<bits)-1; edge++)
183  {
184  if (dPhiNLBMap_6bit_256Max[edge]<=dPhi && dPhiNLBMap_6bit_256Max[edge+1]>dPhi)
185  {
186  dPhiBin_ = edge;
187  break;
188  }
189  }
190  }
191  if (bits == 7)
192  {
193  for (int edge=0; edge<(1<<bits)-1; edge++)
194  {
195  if (dPhiNLBMap_7bit_256Max[edge]<=dPhi && dPhiNLBMap_7bit_256Max[edge+1]>dPhi)
196  {
197  dPhiBin_ = edge;
198  break;
199  }
200  }
201  }
202  }
203 
204  else if (max==512)
205  {
206  if (bits == 7)
207  {
208  for (int edge=0; edge<(1<<bits)-1; edge++)
209  {
210  if (dPhiNLBMap_7bit_512Max[edge]<=dPhi && dPhiNLBMap_7bit_512Max[edge+1]>dPhi)
211  {
212  dPhiBin_ = edge;
213  break;
214  }
215  }
216  }
217  if (bits == 8)
218  {
219  for (int edge=0; edge<(1<<bits)-1; edge++)
220  {
221  if (dPhiNLBMap_8bit_512Max[edge]<=dPhi && dPhiNLBMap_8bit_512Max[edge+1]>dPhi)
222  {
223  dPhiBin_ = edge;
224  break;
225  }
226  }
227  }
228  }
229 
230  return (dPhiBin_);
231 }
232 
234  int dPhi_= (1<<bits)-1;
235 
236  if (dPhiBin>(1<<bits)-1)
237  dPhiBin = (1<<bits)-1;
238 
239  if (max==256)
240  {
241  if (bits == 5)
243  if (bits == 6)
245  if (bits == 7)
247  }
248 
249  else if (max==512)
250  {
251  if (bits == 7)
253  if (bits == 8)
255  }
256 
257  return (dPhi_);
258 }
259 
261  int clct_ = 0;
262  int sign_ = 1;
263 
264  switch (clct) {
265  case 10: clct_ = 0; sign_ = -1; break;
266  case 9: clct_ = 1; sign_ = 1; break;
267  case 8: clct_ = 1; sign_ = -1; break;
268  case 7: clct_ = 2; sign_ = 1; break;
269  case 6: clct_ = 2; sign_ = -1; break;
270  case 5: clct_ = 3; sign_ = 1; break;
271  case 4: clct_ = 3; sign_ = -1; break;
272  case 3: clct_ = 3; sign_ = 1; break;
273  case 2: clct_ = 3; sign_ = -1; break;
274  case 1: clct_ = 3; sign_ = -1; break; //case 1: clct_ = 3; sign_ = 1; break;
275  case 0: clct_ = 3; sign_ = -1; break;
276  default: clct_ = 3; sign_ = -1; break;
277  }
278  return (sign_ * clct_);
279 }
280 
282  int dTheta_ = 0;
283 
284  if (dTheta<=-3)
285  dTheta_ = 0;
286  else if (dTheta<=-2)
287  dTheta_ = 1;
288  else if (dTheta<=-1)
289  dTheta_ = 2;
290  else if (dTheta<=0)
291  dTheta_ = 3;
292  else if (dTheta<=1)
293  dTheta_ = 4;
294  else if (dTheta<=2)
295  dTheta_ = 5;
296  else if (dTheta<=3)
297  dTheta_ = 6;
298  else
299  dTheta_ = 7;
300  return (dTheta_);
301 }
302 
304  int dEta_ = 0;
305 
306  if (dEta<=-5)
307  dEta_ = 0;
308  else if (dEta<=-2)
309  dEta_ = 1;
310  else if (dEta<=-1)
311  dEta_ = 2;
312  else if (dEta<=0)
313  dEta_ = 3;
314  else if (dEta<=1)
315  dEta_ = 4;
316  else if (dEta<=3)
317  dEta_ = 5;
318  else if (dEta<=6)
319  dEta_ = 6;
320  else
321  dEta_ = 7;
322  return (dEta_);
323 }
324 
326  eta = std::abs(eta);
327  eta = (eta < 0.9) ? 0.9 : eta;
328  bits = (bits > 5) ? 5 : bits;
329  // encode 0.9<abs(eta)<1.6 in 5-bit (32 possible values)
330  int etaInt = ((eta - 0.9)*32)/(1.6) - 0.5;
331  int shift = 5 - bits;
332  etaInt >>= shift;
333  etaInt = (etaInt > 31) ? 31 : etaInt;
334  return etaInt;
335 }
336 
337 float PtAssignmentEngineAux2016::getEtaFromThetaInt(int thetaInt, int bits) const {
338  thetaInt = (thetaInt > 127) ? 127 : thetaInt; // 7-bit
339  thetaInt = (thetaInt < 0) ? 0 : thetaInt;
340  float theta = thetaInt;
341  theta = (theta*0.2874016 + 8.5)*(3.14159265359/180); // use this version to reproduce what happened when the pT LUT was made
342  //theta = (theta*(45.0-8.5)/128. + 8.5) * M_PI/180.;
343  float eta = -std::log(std::tan(theta/2));
344  return eta;
345 }
346 
347 float PtAssignmentEngineAux2016::getEtaFromEtaInt(int etaInt, int bits) const {
348  etaInt = (etaInt > 31) ? 31 : etaInt; // 5-bit
349  etaInt = (etaInt < 0) ? 0 : etaInt;
350  bits = (bits > 5) ? 5 : bits;
351  int shift = 5 - bits;
352  etaInt <<= shift;
353  // decode 5-bit etaInt to 0.9<abs(eta)<1.6
354  float eta = ((0.5 + etaInt)*1.6)/32 + 0.9;
355  return eta;
356 }
357 
359  // For backward compatibility
360  return getEtaFromEtaInt(etaBin, bits);
361 }
362 
363 // front-rear LUTs
364 // [sector[0]][station 0-4][chamber id]
365 // chamber numbers start from 1, so add an extra low bit for invalid chamber = 0
366 static const int FRLUT[2][5] = {
367  {0b0000000100100, 0b0000001011010, 0b0101010101010, 0b0010101010100, 0b0010101010100},
368  {0b0000000100100, 0b0000001011010, 0b0111010100100, 0b0000101011010, 0b0000101011010}
369 };
370 
371 int PtAssignmentEngineAux2016::getFRLUT(int sector, int station, int chamber) const {
372  int bits = FRLUT[(sector-1)%2][station];
373  bool isFront = bits & (1<<chamber);
374  return isFront;
375 }
static const int dPhiNLBMap_7bit_512Max[128]
static const int ModeVariables_Scheme3[13][6]
int getdPhiFromBin(int dPhiBin, int bits, int max=512) const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision bits
static const int dPhiNLBMap_5bit_256Max[32]
Geom::Theta< T > theta() const
int getNLBdPhiBin(int dPhi, int bits, int max=512) const
int getEtaInt(float eta, int bits=5) const
float getEtaFromEtaInt(int etaInt, int bits=5) const
static const int dPhiNLBMap_7bit_256Max[128]
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static const int dPhiNLBMap_6bit_256Max[64]
int getNLBdPhi(int dPhi, int bits, int max=512) const
float getEtaFromBin(int etaBin, int bits=5) const
static const int FRLUT[2][5]
const int(* getModeVariables() const)[6]
float getEtaFromThetaInt(int thetaInt, int bits=5) const
static unsigned int const shift
static const int dPhiNLBMap_8bit_512Max[256]
int getFRLUT(int sector, int station, int chamber) const