CMS 3D CMS Logo

PtAssignment.cc
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <math.h>
4 #include <fstream>
5 #include <iostream>
6 
10 
13 
14 #include "TFile.h"
15 #include "TH1F.h"
16 
17 using namespace l1t;
18 using namespace std;
19 using namespace L1TMuon;
20 using namespace emtf;
21 
22 EmtfPtAssignment::EmtfPtAssignment(const char * tree_dir):
23  allowedModes_({3,5,9,6,10,12,7,11,13,14,15}){
24 
25  for (unsigned i=0;i<allowedModes_.size();i++){
26  int mode_inv = allowedModes_[i];
27  stringstream ss;
28  ss << tree_dir << "/" << mode_inv;
29  forest_[mode_inv].loadL1TForestFromXML(ss.str().c_str(),64);
30  }
31 }
32 
33 //ModeVariables is a 2D arrary indexed by [TrackMode(13 Total Listed Below)][VariableNumber(20 Total Constructed Above)]
34 // Variable numbering
35 // 0 = dPhi12
36 // 1 = dPhi13
37 // 2 = dPhi14
38 // 3 = dPhi23
39 // 4 = dPhi24
40 // 5 = dPhi34
41 // 6 = dEta12
42 // 7 = dEta13
43 // 8 = dEta14
44 // 9 = dEta23
45 // 10 = dEta24
46 // 11 = dEta34
47 // 12 = CLCT1
48 // 13 = CLCT2
49 // 14 = CLCT3
50 // 15 = CLCT4
51 // 16 = CSCID1
52 // 17 = CSCID2
53 // 18 = CSCID3
54 // 19 = CSCID4
55 // 20 = FR1
56 // 21 = FR2
57 // 22 = FR3
58 // 23 = FR4
59 
60 // Bobby's Scheme3 (or "SchemeC"), with 30 bit compression //
61 //3:TrackEta:dPhi12:dEta12:CLCT1:CLCT2:FR1
62 //4:Single Station Track Not Possible
63 //5:TrackEta:dPhi13:dEta13:CLCT1:CLCT3:FR1
64 //6:TrackEta:dPhi23:dEta23:CLCT2:CLCT3:FR2
65 //7:TrackEta:dPhi12:dPhi23:dEta13:CLCT1:FR1
66 //8:Single Station Track Not Possible
67 //9:TrackEta:dPhi14:dEta14:CLCT1:CLCT4:FR1
68 //10:TrackEta:dPhi24:dEta24:CLCT2:CLCT4:FR2
69 //11:TrackEta:dPhi12:dPhi24:dEta14:CLCT1:FR1
70 //12:TrackEta:dPhi34:dEta34:CLCT3:CLCT4:FR3
71 //13:TrackEta:dPhi13:dPhi34:dEta14:CLCT1:FR1
72 //14:TrackEta:dPhi23:dPhi34:dEta24:CLCT2
73 //15:TrackEta:dPhi12:dPhi23:dPhi34:FR1
74 static const int ModeVariables_Scheme3[13][6] =
75  {
76  {0,6,12,13,20,-999}, // 3
77  {-999,-999,-999,-999,-999,-999}, // 4
78  {1,7,12,14,20,-999}, // 5
79  {3,9,13,14,21,-999}, // 6
80  {0,3,7,12,20,-999}, // 7
81  {-999,-999,-999,-999,-999,-999}, // 8
82  {2,8,12,15,20,-999}, // 9
83  {4,10,13,15,21,-999}, // 10
84  {0,4,8,12,20,-999}, // 11
85  {5,11,14,15,22,-999}, // 12
86  {1,5,8,16,20,-999}, // 13
87  {3,5,10,13,-999,-999}, // 14
88  {0,3,5,20,-999,-999} // 15
89  };
90 
91 
92 // 256 max units----
93 
94 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};
95 
96 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};
97 
98 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};
99 
100 
101 // 512 max units----
102 static const int dPhiNLBMap_7bit_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, 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};
103 
104 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};
105 
106 
107 static const int dPhiNLBMap_5bit[32] =
108  { 0 , 1 , 2 , 4 , 5 , 7 , 9 , 11 , 13 , 15 , 18 , 21 , 24 , 28 , 32 , 37 , 41 , 47 , 53 , 60 , 67 , 75 , 84 , 94 , 105 , 117 , 131 , 145 , 162 , 180 , 200 , 222};
109 
110 // Array that maps the 7-bit integer dPhi --> dPhi-units. It is assumed that this is used for dPhi12,
111 // which has a maximum value of 7.67 degrees (511 units) in the extrapolation units.
112 static const int dPhiNLBMap_7bit[128] =
113  { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 8 , 9 , 10 , 11 , 12 , 14 , 15 , 16 , 17 , 19 , 20 , 21 , 23 , 24 , 26 , 27 , 29 , 30 , 32 , 33 , 35 , 37 , 38 , 40 , 42 , 44 , 45 , 47 , 49 , 51 , 53 , 55 , 57 , 59 , 61 , 63 , 65 , 67 , 70 , 72 , 74 , 77 , 79 , 81 , 84 , 86 , 89 , 92 , 94 , 97 , 100 , 103 , 105 , 108 , 111 , 114 , 117 , 121 , 124 , 127 , 130 , 134 , 137 , 141 , 144 , 148 , 151 , 155 , 159 , 163 , 167 , 171 , 175 , 179 , 183 , 188 , 192 , 197 , 201 , 206 , 210 , 215 , 220 , 225 , 230 , 235 , 241 , 246 , 251 , 257 , 263 , 268 , 274 , 280 , 286 , 292 , 299 , 305 , 312 , 318 , 325 , 332 , 339 , 346 , 353 , 361 , 368 , 376 , 383 , 391 , 399 , 408 , 416 , 425 , 433 , 442 , 451 , 460 , 469 , 479 , 489 };
114 
115 // Array that maps the 8-bit integer dPhi --> dPhi-units. It is assumed that this is used for dPhi12,
116 // which has a maximum value of 7.67 degrees (511 units) in the extrapolation units.
117 static const int dPhiNLBMap_8bit[256] =
118  { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 35 , 36 , 37 , 38 , 39 , 40 , 42 , 43 , 44 , 45 , 46 , 48 , 49 , 50 , 51 , 53 , 54 , 55 , 56 , 58 , 59 , 60 , 61 , 63 , 64 , 65 , 67 , 68 , 69 , 70 , 72 , 73 , 74 , 76 , 77 , 79 , 80 , 81 , 83 , 84 , 85 , 87 , 88 , 90 , 91 , 92 , 94 , 95 , 97 , 98 , 100 , 101 , 103 , 104 , 105 , 107 , 108 , 110 , 111 , 113 , 115 , 116 , 118 , 119 , 121 , 122 , 124 , 125 , 127 , 129 , 130 , 132 , 133 , 135 , 137 , 138 , 140 , 141 , 143 , 145 , 146 , 148 , 150 , 151 , 153 , 155 , 157 , 158 , 160 , 162 , 163 , 165 , 167 , 169 , 171 , 172 , 174 , 176 , 178 , 180 , 181 , 183 , 185 , 187 , 189 , 191 , 192 , 194 , 196 , 198 , 200 , 202 , 204 , 206 , 208 , 210 , 212 , 214 , 216 , 218 , 220 , 222 , 224 , 226 , 228 , 230 , 232 , 234 , 236 , 238 , 240 , 242 , 244 , 246 , 249 , 251 , 253 , 255 , 257 , 259 , 261 , 264 , 266 , 268 , 270 , 273 , 275 , 277 , 279 , 282 , 284 , 286 , 289 , 291 , 293 , 296 , 298 , 300 , 303 , 305 , 307 , 310 , 312 , 315 , 317 , 320 , 322 , 324 , 327 , 329 , 332 , 334 , 337 , 340 , 342 , 345 , 347 , 350 , 352 , 355 , 358 , 360 , 363 , 366 , 368 , 371 , 374 , 376 , 379 , 382 , 385 , 387 , 390 , 393 , 396 , 398 , 401 , 404 , 407 , 410 , 413 , 416 , 419 , 421 , 424 , 427 , 430 , 433 , 436 , 439 , 442 , 445 , 448 , 451 , 454 , 457 , 461 , 464 , 467 , 470 , 473 , 476 , 479 , 483 };
119 
120 
121 
122 static float getNLBdPhi(float dPhi, int bits, int max=512)
123 {
124  float dPhi_= max;
125  float sign_ = 1;
126  if (dPhi<0)
127  sign_ = -1;
128  dPhi = fabs(dPhi);
129 
130  if (max==256)
131  {
132  if (bits == 5)
133  {
134  dPhi_ = dPhiNLBMap_5bit_256Max[(1<<bits)-1];
135  for (int edge=0; edge<(1<<bits)-1; edge++)
136  if (dPhiNLBMap_5bit_256Max[edge]<=dPhi && dPhiNLBMap_5bit_256Max[edge+1]>dPhi)
137  {
138  dPhi_ = dPhiNLBMap_5bit_256Max[edge];
139  break;
140  }
141  }
142  if (bits == 6)
143  {
144  dPhi_ = dPhiNLBMap_6bit_256Max[(1<<bits)-1];
145  for (int edge=0; edge<(1<<bits)-1; edge++)
146  if (dPhiNLBMap_6bit_256Max[edge]<=dPhi && dPhiNLBMap_6bit_256Max[edge+1]>dPhi)
147  {
148  dPhi_ = dPhiNLBMap_6bit_256Max[edge];
149  break;
150  }
151  }
152  if (bits == 7)
153  {
154  dPhi_ = dPhiNLBMap_7bit_256Max[(1<<bits)-1];
155  for (int edge=0; edge<(1<<bits)-1; edge++)
156  if (dPhiNLBMap_7bit_256Max[edge]<=dPhi && dPhiNLBMap_7bit_256Max[edge+1]>dPhi)
157  {
158  dPhi_ = dPhiNLBMap_7bit_256Max[edge];
159  break;
160  }
161  }
162  }
163  if (max==512)
164  {
165  if (bits == 7)
166  {
167  dPhi_ = dPhiNLBMap_7bit_512Max[(1<<bits)-1];
168  for (int edge=0; edge<(1<<bits)-1; edge++)
169  if (dPhiNLBMap_7bit_512Max[edge]<=dPhi && dPhiNLBMap_7bit_512Max[edge+1]>dPhi)
170  {
171  dPhi_ = dPhiNLBMap_7bit_512Max[edge];
172  break;
173  }
174  }
175  if (bits == 8)
176  {
177  dPhi_ = dPhiNLBMap_8bit_512Max[(1<<bits)-1];
178  for (int edge=0; edge<(1<<bits)-1; edge++)
179  if (dPhiNLBMap_8bit_512Max[edge]<=dPhi && dPhiNLBMap_8bit_512Max[edge+1]>dPhi)
180  {
181  dPhi_ = dPhiNLBMap_8bit_512Max[edge];
182  break;
183  }
184  }
185  }
186 
187  if (dPhi>=max) dPhi_ = max;
188  return (sign_ * dPhi_);
189 }
190 
191 
192 
193 static int getNLBdPhiBin(float dPhi, int bits, int max=512)
194 {
195  int dPhiBin_= (1<<bits)-1;
196 
197  // Unused variable
198  /* float sign_ = 1; */
199  /* if (dPhi<0) */
200  /* sign_ = -1; */
201 
202  dPhi = fabs(dPhi);
203 
204  if (max==256)
205  {
206  if (bits == 5)
207  {
208  for (int edge=0; edge<(1<<bits)-1; edge++)
209  if (dPhiNLBMap_5bit_256Max[edge]<=dPhi && dPhiNLBMap_5bit_256Max[edge+1]>dPhi)
210  {
211  dPhiBin_ = edge;
212  break;
213  }
214  }
215  if (bits == 6)
216  {
217  for (int edge=0; edge<(1<<bits)-1; edge++)
218  if (dPhiNLBMap_6bit_256Max[edge]<=dPhi && dPhiNLBMap_6bit_256Max[edge+1]>dPhi)
219  {
220  dPhiBin_ = edge;
221  break;
222  }
223  }
224  if (bits == 7)
225  {
226  for (int edge=0; edge<(1<<bits)-1; edge++)
227  if (dPhiNLBMap_7bit_256Max[edge]<=dPhi && dPhiNLBMap_7bit_256Max[edge+1]>dPhi)
228  {
229  dPhiBin_ = edge;
230  break;
231  }
232  }
233  }
234  if (max==512)
235  {
236  if (bits == 7)
237  {
238  for (int edge=0; edge<(1<<bits)-1; edge++)
239  if (dPhiNLBMap_7bit_512Max[edge]<=dPhi && dPhiNLBMap_7bit_512Max[edge+1]>dPhi)
240  {
241  dPhiBin_ = edge;
242  break;
243  }
244  }
245  if (bits == 8)
246  {
247  for (int edge=0; edge<(1<<bits)-1; edge++)
248  if (dPhiNLBMap_8bit_512Max[edge]<=dPhi && dPhiNLBMap_8bit_512Max[edge+1]>dPhi)
249  {
250  dPhiBin_ = edge;
251  break;
252  }
253  }
254  }
255 
256  return ( dPhiBin_);
257 }
258 
259 
260 static float getdPhiFromBin(int dPhiBin, int bits, int max=512)
261 {
262  int dPhi_= (1<<bits)-1;
263 
264  if (dPhiBin>(1<<bits)-1)
265  dPhiBin = (1<<bits)-1;
266 
267  if (max==256)
268  {
269  if (bits == 5)
271 
272  if (bits == 6)
274 
275  if (bits == 7)
277  }
278  if (max==512)
279  {
280  if (bits == 7)
282 
283  if (bits == 8)
285  }
286 
287  return ( dPhi_);
288 }
289 
290 static float getCLCT(float clct)
291 {
292  if ((int)clct==10)
293  clct=0;
294  else if ((int)clct==9)
295  clct=1;
296  else if ((int)clct==8)
297  clct=-1;
298  else if ((int)clct==7)
299  clct=2;
300  else if ((int)clct==6)
301  clct=-2;
302  else if ((int)clct==5)
303  clct=3;
304  else if ((int)clct==4)
305  clct=-3;
306  else if ((int)clct==3)
307  clct=4;
308  else if ((int)clct==2)
309  clct=-4;
310  else
311  clct=-999;
312 
313  float clct_ = 0;
314  float sign_ = 1;
315 
316  if (clct<0)
317  sign_ = -1;
318 
319  clct = fabs(clct);
320 
321  if (clct<=0) // 0
322  clct_ = 0;
323  else if (clct<=1) //1,2
324  clct_ = 1;
325  else if (clct<=2)// 3,4
326  clct_ = 2;
327  else
328  clct_ = 3; // 5,6
329 
330  return (sign_ * clct_);
331 }
332 
333 static float getdTheta(float dTheta)
334 {
335  float dTheta_ = 0;
336  // Unused variable
337  /* float sign_ = 1; */
338  /* if (dTheta<0) */
339  /* sign_ = -1; */
340 
341  if (dTheta<=-3)
342  dTheta_ = 0;
343  else if (dTheta<=-2)
344  dTheta_ = 1;
345  else if (dTheta<=-1)
346  dTheta_ = 2;
347  else if (dTheta<=0)
348  dTheta_ = 3;
349  else if (dTheta<=1)
350  dTheta_ = 4;
351  else if (dTheta<=2)
352  dTheta_ = 5;
353  else if (dTheta<=3)
354  dTheta_ = 6;
355  else
356  dTheta_ = 7;
357 
358  return ( dTheta_);
359 
360 }
361 
362 
363 //static float getdEta(float deta)
364 //{
365 // float deta_ = 0;
366 //
367 // if (deta<=-5)
368 // deta_ = 0;
369 // else if (deta<=-2)
370 // deta_ = 1;
371 // else if (deta<=-1)
372 // deta_ = 2;
373 // else if (deta<=0)
374 // deta_ = 3;
375 // else if (deta<=1)
376 // deta_ = 4;
377 // else if (deta<=3)
378 // deta_ = 5;
379 // else if (deta<=6)
380 // deta_ = 6;
381 // else
382 // deta_ = 7;
383 //
384 // return ( deta_);
385 //}
386 
387 static float getEta(float eta, int bits=5)
388 {
389  float eta_ = 0;
390  float sign_ = 1;
391  if (eta<0)
392  sign_ = -1;
393 
394  if (bits>5) bits = 5;
395  int shift = 5 - bits;
396  int etaInt = (fabs(eta) - 0.9)*(32.0/(1.6))-0.5;
397  etaInt = (etaInt>>shift)<<shift;
398 
399  eta_ = 0.9 + (etaInt + 0.5)*(1.6/32.0);
400  return (eta_*sign_);
401 }
402 
403 static int getEtaInt(float eta, int bits=5)
404 {
405  // Unused variables
406  /* float eta_ = 0; */
407  /* float sign_ = 1; */
408  /* if (eta<0) */
409  /* sign_ = -1; */
410 
411  if (bits>5) bits = 5;
412  int shift = 5 - bits;
413  int etaInt = (fabs(eta) - 0.9)*(32.0/(1.6))-0.5;
414  etaInt = (etaInt>>shift);
415  if(etaInt > 31){etaInt = 31;}
416 
417  /* eta_ = 0.9 + (etaInt + 0.5)*(1.6/32.0); */
418  return (etaInt);
419 }
420 
421 static float getEtafromBin(int etaBin, int bits=5)
422 {
423  if (etaBin>((1<<5)-1))
424  etaBin = ((1<<5)-1);
425  if (etaBin<0)
426  etaBin = 0;
427 
428  if (bits>5) bits = 5;
429  int shift = 5 - bits;
430  int etaInt_ = etaBin << shift;
431  float eta_ = 0.9 + (etaInt_ + 0.5)*(1.6/32.0);
432  return (eta_);
433 }
434 
435 
436 float EmtfPtAssignment::calculatePt(unsigned long Address)
437 {
438  bool verbose = false;
439  int ModeVariables[13][6];
440 
441  //FIXME: use pointer to avoid a copy:
442  for (int i=0;i<13;i++) {
443  for (int j=0;j<6;j++) {
444  ModeVariables[i][j] = ModeVariables_Scheme3[i][j];
445  }
446  }
447 
448  int dphi[6] = {-999,-999,-999,-999,-999,-999}, deta[6] = {-999,-999,-999,-999,-999,-999};
449  int clct[4] = {-999,-999,-999,-999}, cscid[4] = {-999,-999,-999,-999};
450  int phis[4] = {-999,-999,-999,-999}, etas[4] = {-999,-999,-999,-999}, mode_inv = 0;;
451  int FR[4] = {-999,-999,-999,-999};
452  float eta =0 ;
453 
454  float dPhi12 = dphi[0];
455  float dPhi13 = dphi[1];
456  float dPhi14 = dphi[2];
457  float dPhi23 = dphi[3];
458  float dPhi24 = dphi[4];
459  float dPhi34 = dphi[5];
460  float dTheta12 = deta[0];
461  float dTheta13 = deta[1];
462  float dTheta14 = deta[2];
463  float dTheta23 = deta[3];
464  float dTheta24 = deta[4];
465  float dTheta34 = deta[5];
466  float TrackEta = 0;
467  float CLCT1 = clct[0];
468  float CLCT2 = clct[1];
469  float CLCT3 = clct[2];
470  float CLCT4 = clct[3];
471  float FR1 = FR[0];
472  float FR2 = FR[1];
473  float FR3 = FR[2];
474  float FR4 = FR[3];
475 
476  mode_inv = (Address >> (30-4)) & ((1<<4)-1);
477 
478  // Decode the Pt LUT Address
479  //unsigned long Address = 0x0;
480 
481  if (verbose) cout << "PtAssignment:getPt: decoding, inverted mode = " << mode_inv << endl;
482 
483  if (mode_inv == 3) // 1-2
484  {
485 
486  int dPhi12_ = (Address >> (0)) & ((1<<9)-1);
487  float sign12 = (Address >> (0+9)) & ((1<<1)-1);
488  dTheta12 = (Address >> (0+9+1)) & ((1<<3)-1);
489  CLCT1 = (Address >> (0+9+1+3)) & ((1<<2)-1);
490  float CLCT1Sign= (Address >> (0+9+1+3+2)) & ((1<<1)-1);
491  CLCT2 = (Address >> (0+9+1+3+2+1)) & ((1<<2)-1);
492  float CLCT2Sign= (Address >> (0+9+1+3+2+1+2)) & ((1<<1)-1);
493  FR1 = (Address >> (0+9+1+3+2+1+2+1)) & ((1<<1)-1);
494  FR2 = (Address >> (0+9+1+3+2+1+2+1+1)) & ((1<<1)-1);
495  int TrackEta_ = (Address >> (0+9+1+3+2+1+2+1+1+1)) & ((1<<5)-1);
496 
497  dPhi12 = dPhi12_;
498  TrackEta = getEtafromBin( TrackEta_, 5);
499 
500  if (sign12 == 0) dPhi12 = -1*dPhi12;
501  if (CLCT1Sign == 0) CLCT1 = -1*CLCT1;
502  if (CLCT2Sign == 0) CLCT2 = -1*CLCT2;
503 
504  if (verbose) cout << "PtAssignment:getPt: decoding, Addess = 0x" << hex << Address << endl;
505  if (verbose) cout << "PtAssignment:getPt: decoding, dPhi12 = " << dec << dPhi12_ << endl;
506 
507  }
508 
509  if (mode_inv == 5) // 1-3
510  {
511 
512  int dPhi13_ = (Address >> (0)) & ((1<<9)-1);
513  float sign13 = (Address >> (0+9)) & ((1<<1)-1);
514  dTheta13 = (Address >> (0+9+1)) & ((1<<3)-1);
515  CLCT1 = (Address >> (0+9+1+3)) & ((1<<2)-1);
516  float CLCT1Sign= (Address >> (0+9+1+3+2)) & ((1<<1)-1);
517  CLCT3 = (Address >> (0+9+1+3+2+1)) & ((1<<2)-1);
518  float CLCT3Sign= (Address >> (0+9+1+3+2+1+2)) & ((1<<1)-1);
519  FR1 = (Address >> (0+9+1+3+2+1+2+1)) & ((1<<1)-1);
520  FR3 = (Address >> (0+9+1+3+2+1+2+1+1)) & ((1<<1)-1);
521  int TrackEta_ = (Address >> (0+9+1+3+2+1+2+1+1+1)) & ((1<<5)-1);
522 
523  dPhi13 = dPhi13_;
524  TrackEta = getEtafromBin( TrackEta_, 5);
525 
526  if (sign13 == 0) dPhi13 = -1*dPhi13;
527  if (CLCT1Sign == 0) CLCT1 = -1*CLCT1;
528  if (CLCT3Sign == 0) CLCT3 = -1*CLCT3;
529  }
530 
531  if (mode_inv == 9) // 1-4
532  {
533 
534  int dPhi14_ = (Address >> (0)) & ((1<<9)-1);
535  float sign14 = (Address >> (0+9)) & ((1<<1)-1);
536  dTheta14 = (Address >> (0+9+1)) & ((1<<3)-1);
537  CLCT1 = (Address >> (0+9+1+3)) & ((1<<2)-1);
538  float CLCT1Sign= (Address >> (0+9+1+3+2)) & ((1<<1)-1);
539  CLCT4 = (Address >> (0+9+1+3+2+1)) & ((1<<2)-1);
540  float CLCT4Sign= (Address >> (0+9+1+3+2+1+2)) & ((1<<1)-1);
541  FR1 = (Address >> (0+9+1+3+2+1+2+1)) & ((1<<1)-1);
542  FR4 = (Address >> (0+9+1+3+2+1+2+1+1)) & ((1<<1)-1);
543  int TrackEta_ = (Address >> (0+9+1+3+2+1+2+1+1+1)) & ((1<<5)-1);
544 
545  dPhi14 = dPhi14_;
546  TrackEta = getEtafromBin( TrackEta_, 5);
547 
548  if (sign14 == 0) dPhi14 = -1*dPhi14;
549  if (CLCT1Sign == 0) CLCT1 = -1*CLCT1;
550  if (CLCT4Sign == 0) CLCT4 = -1*CLCT4;
551  }
552 
553  if (mode_inv == 6) // 2-3
554  {
555 
556  int dPhi23_ = (Address >> (0)) & ((1<<9)-1);
557  float sign23 = (Address >> (0+9)) & ((1<<1)-1);
558  dTheta23 = (Address >> (0+9+1)) & ((1<<3)-1);
559  CLCT2 = (Address >> (0+9+1+3)) & ((1<<2)-1);
560  float CLCT2Sign= (Address >> (0+9+1+3+2)) & ((1<<1)-1);
561  CLCT3 = (Address >> (0+9+1+3+2+1)) & ((1<<2)-1);
562  float CLCT3Sign= (Address >> (0+9+1+3+2+1+2)) & ((1<<1)-1);
563  FR2 = (Address >> (0+9+1+3+2+1+2+1)) & ((1<<1)-1);
564  FR3 = (Address >> (0+9+1+3+2+1+2+1+1)) & ((1<<1)-1);
565  int TrackEta_ = (Address >> (0+9+1+3+2+1+2+1+1+1)) & ((1<<5)-1);
566 
567  dPhi23 = dPhi23_;
568  TrackEta = getEtafromBin( TrackEta_, 5);
569 
570  if (sign23 == 0) dPhi23 = -1*dPhi23;
571  if (CLCT2Sign == 0) CLCT2 = -1*CLCT2;
572  if (CLCT3Sign == 0) CLCT3 = -1*CLCT3;
573  }
574  if (mode_inv == 10) // 2-4
575  {
576 
577  int dPhi24_ = (Address >> (0)) & ((1<<9)-1);
578  float sign24 = (Address >> (0+9)) & ((1<<1)-1);
579  dTheta24 = (Address >> (0+9+1)) & ((1<<3)-1);
580  CLCT2 = (Address >> (0+9+1+3)) & ((1<<2)-1);
581  float CLCT2Sign= (Address >> (0+9+1+3+2)) & ((1<<1)-1);
582  CLCT4 = (Address >> (0+9+1+3+2+1)) & ((1<<2)-1);
583  float CLCT4Sign= (Address >> (0+9+1+3+2+1+2)) & ((1<<1)-1);
584  FR2 = (Address >> (0+9+1+3+2+1+2+1)) & ((1<<1)-1);
585  FR4 = (Address >> (0+9+1+3+2+1+2+1+1)) & ((1<<1)-1);
586  int TrackEta_ = (Address >> (0+9+1+3+2+1+2+1+1+1)) & ((1<<5)-1);
587 
588  dPhi24 = dPhi24_;
589  TrackEta = getEtafromBin( TrackEta_, 5);
590 
591  if (sign24 == 0) dPhi24 = -1*dPhi24;
592  if (CLCT2Sign == 0) CLCT2 = -1*CLCT2;
593  if (CLCT4Sign == 0) CLCT4 = -1*CLCT4;
594  }
595  if (mode_inv == 12) // 3-4
596  {
597 
598  int dPhi34_ = (Address >> (0)) & ((1<<9)-1);
599  float sign34 = (Address >> (0+9)) & ((1<<1)-1);
600  dTheta34 = (Address >> (0+9+1)) & ((1<<3)-1);
601  CLCT3 = (Address >> (0+9+1+3)) & ((1<<2)-1);
602  float CLCT3Sign= (Address >> (0+9+1+3+2)) & ((1<<1)-1);
603  CLCT4 = (Address >> (0+9+1+3+2+1)) & ((1<<2)-1);
604  float CLCT4Sign= (Address >> (0+9+1+3+2+1+2)) & ((1<<1)-1);
605  FR3 = (Address >> (0+9+1+3+2+1+2+1)) & ((1<<1)-1);
606  FR4 = (Address >> (0+9+1+3+2+1+2+1+1)) & ((1<<1)-1);
607  int TrackEta_ = (Address >> (0+9+1+3+2+1+2+1+1+1)) & ((1<<5)-1);
608 
609  dPhi34 = dPhi34_;
610  TrackEta = getEtafromBin( TrackEta_, 5);
611 
612  if (sign34 == 0) dPhi34 = -1*dPhi34;
613  if (CLCT3Sign == 0) CLCT3 = -1*CLCT3;
614  if (CLCT4Sign == 0) CLCT4 = -1*CLCT4;
615  }
616  if (mode_inv == 7) //1-2-3
617  {
618  int dPhi12_ = (Address >> (0)) & ((1<<7)-1);
619  int dPhi23_ = (Address >> (0+7)) & ((1<<5)-1);
620  float sign12 = (Address >> (0+7+5)) & ((1<<1)-1);
621  float sign23 = (Address >> (0+7+5+1)) & ((1<<1)-1);
622  dTheta13 = (Address >> (0+7+5+1+1)) & ((1<<3)-1);
623  CLCT1 = (Address >> (0+7+5+1+1+3)) & ((1<<2)-1);
624  float CLCT1Sign= (Address >> (0+7+5+1+1+3+2)) & ((1<<1)-1);
625  FR1 = (Address >> (0+7+5+1+1+3+2+1)) & ((1<<1)-1);
626  int TrackEta_ = (Address >> (0+7+5+1+1+3+2+1+1)) & ((1<<5)-1);
627 
628  dPhi12 = getdPhiFromBin( dPhi12_, 7, 512 );
629  dPhi23 = getdPhiFromBin( dPhi23_, 5, 256 );
630 
631  //cout << "getPt: dPhi12: " << dPhi12_ << " " << dPhi12 << endl;
632  // cout << "getPt: dPhi23: " << dPhi23_ << " " << dPhi23 << endl;
633 
634  TrackEta = getEtafromBin( TrackEta_, 5);
635 
636  if (sign12 == 0) dPhi12 = -1*dPhi12;
637  if (sign23 == 0) dPhi23 = -1*dPhi23;
638  if (CLCT1Sign == 0) CLCT1 = -1*CLCT1;
639  }
640  if (mode_inv == 11) // 1-2-4
641  {
642  int dPhi12_ = (Address >> (0)) & ((1<<7)-1);
643  int dPhi24_ = (Address >> (0+7)) & ((1<<5)-1);
644  float sign12 = (Address >> (0+7+5)) & ((1<<1)-1);
645  float sign24 = (Address >> (0+7+5+1)) & ((1<<1)-1);
646  dTheta14 = (Address >> (0+7+5+1+1)) & ((1<<3)-1);
647  CLCT1 = (Address >> (0+7+5+1+1+3)) & ((1<<2)-1);
648  float CLCT1Sign= (Address >> (0+7+5+1+1+3+2)) & ((1<<1)-1);
649  FR1 = (Address >> (0+7+5+1+1+3+2+1)) & ((1<<1)-1);
650  int TrackEta_ = (Address >> (0+7+5+1+1+3+2+1+1)) & ((1<<5)-1);
651 
652  dPhi12 = getdPhiFromBin( dPhi12_, 7, 512 );
653  dPhi24 = getdPhiFromBin( dPhi24_, 5, 256 );
654  TrackEta = getEtafromBin( TrackEta_, 5);
655 
656  if (sign12 == 0) dPhi12 = -1*dPhi12;
657  if (sign24 == 0) dPhi24 = -1*dPhi24;
658  if (CLCT1Sign == 0) CLCT1 = -1*CLCT1;
659  }
660  if (mode_inv == 13) // 1-3-4
661  {
662  int dPhi13_ = (Address >> (0)) & ((1<<7)-1);
663  int dPhi34_ = (Address >> (0+7)) & ((1<<5)-1);
664  float sign13 = (Address >> (0+7+5)) & ((1<<1)-1);
665  float sign34 = (Address >> (0+7+5+1)) & ((1<<1)-1);
666  dTheta14 = (Address >> (0+7+5+1+1)) & ((1<<3)-1);
667  CLCT1 = (Address >> (0+7+5+1+1+3)) & ((1<<2)-1);
668  float CLCT1Sign= (Address >> (0+7+5+1+1+3+2)) & ((1<<1)-1);
669  FR1 = (Address >> (0+7+5+1+1+3+2+1)) & ((1<<1)-1);
670  int TrackEta_ = (Address >> (0+7+5+1+1+3+2+1+1)) & ((1<<5)-1);
671 
672  dPhi13 = getdPhiFromBin( dPhi13_, 7, 512 );
673  dPhi34 = getdPhiFromBin( dPhi34_, 5, 256 );
674  TrackEta = getEtafromBin( TrackEta_, 5);
675 
676  if (sign13 == 0) dPhi13 = -1*dPhi13;
677  if (sign34 == 0) dPhi34 = -1*dPhi34;
678  if (CLCT1Sign == 0) CLCT1 = -1*CLCT1;
679  }
680  if (mode_inv == 14) // 2-3-4
681  {
682  int dPhi23_ = (Address >> (0)) & ((1<<7)-1);
683  int dPhi34_ = (Address >> (0+7)) & ((1<<6)-1);
684  float sign23 = (Address >> (0+7+6)) & ((1<<1)-1);
685  float sign34 = (Address >> (0+7+6+1)) & ((1<<1)-1);
686  dTheta24 = (Address >> (0+7+6+1+1)) & ((1<<3)-1);
687  CLCT2 = (Address >> (0+7+6+1+1+3)) & ((1<<2)-1);
688  float CLCT2Sign= (Address >> (0+7+6+1+1+3+2)) & ((1<<1)-1);
689  int TrackEta_ = (Address >> (0+7+6+1+1+3+2+1)) & ((1<<5)-1);
690 
691  dPhi23 = getdPhiFromBin( dPhi23_, 7, 512 );
692  dPhi34 = getdPhiFromBin( dPhi34_, 6, 256 );
693  TrackEta = getEtafromBin( TrackEta_, 5);
694 
695  if (sign23 == 0) dPhi23 = -1*dPhi23;
696  if (sign34 == 0) dPhi34 = -1*dPhi34;
697  if (CLCT2Sign == 0) CLCT2 = -1*CLCT2;
698  }
699  if (mode_inv == 15)
700  {
701  int dPhi12_ = (Address >> (0)) & ((1<<7)-1);
702  int dPhi23_ = (Address >> (0+7)) & ((1<<5)-1);
703  int dPhi34_ = (Address >> (0+7+5)) & ((1<<6)-1);
704  int sign23 = (Address >> (0+7+5+6)) & ((1<<1)-1);
705  int sign34 = (Address >> (0+7+5+6+1)) & ((1<<1)-1);
706  FR1 = (Address >> (0+7+5+6+1+1)) & ((1<<1)-1);
707  int TrackEta_ = (Address >> (0+7+5+6+1+1+1)) & ((1<<5)-1);
708 
709  dPhi12 = getdPhiFromBin( dPhi12_, 7, 512 );
710  dPhi23 = getdPhiFromBin( dPhi23_, 5, 256 );
711  dPhi34 = getdPhiFromBin( dPhi34_, 6, 256 );
712  TrackEta = getEtafromBin( TrackEta_, 5 );
713 
714  if (sign23 == 0) dPhi23 = -1*dPhi23;
715  if (sign34 == 0) dPhi34 = -1*dPhi34;
716 
717  bool era_3 = true;
718  // First fix to recover high pT muons with 3 hits in a line and one displaced hit - AWB 28.07.16
719  // Done by re-writing a few addresses in the original LUT, according to the following logic
720  // Implemented in FW 26.07.16, as of run 2774278 / fill 5119
721  if (era_3) {
722  bool st2_off = false;
723  bool st3_off = false;
724  bool st4_off = false;
725 
726  int dPhi13 = dPhi12 + dPhi23;
727  int dPhi14 = dPhi13 + dPhi34;
728  int dPhi24 = dPhi23 + dPhi34;
729 
730  int sum_st1 = abs( dPhi12 + dPhi13 + dPhi14);
731  int sum_st2 = abs(-dPhi12 + dPhi23 + dPhi24);
732  int sum_st3 = abs(-dPhi13 - dPhi23 + dPhi34);
733  int sum_st4 = abs(-dPhi14 - dPhi24 - dPhi34);
734 
735  if (sum_st2 > sum_st1 && sum_st2 > sum_st3 && sum_st2 > sum_st4) st2_off = true;
736  if (sum_st3 > sum_st1 && sum_st3 > sum_st2 && sum_st3 > sum_st4) st3_off = true;
737  if (sum_st4 > sum_st1 && sum_st4 > sum_st2 && sum_st4 > sum_st3) st4_off = true;
738 
739  if ( st2_off && ( abs(dPhi12) > 9 || abs(dPhi23) > 9 || abs(dPhi24) > 9 ) &&
740  abs(dPhi13) < 10 && abs(dPhi14) < 10 && abs(dPhi34) < 10 ) {
741  dPhi12 = ceil(dPhi13 / 2); dPhi23 = floor(dPhi13 / 2); }
742  if ( st3_off && ( abs(dPhi13) > 9 || abs(dPhi23) > 9 || abs(dPhi34) > 9 ) &&
743  abs(dPhi12) < 10 && abs(dPhi14) < 10 && abs(dPhi24) < 10 ) {
744  dPhi23 = ceil(dPhi24 / 2); dPhi34 = floor(dPhi24 / 2); }
745  if ( st4_off && ( abs(dPhi14) > 9 || abs(dPhi24) > 9 || abs(dPhi34) > 9 ) &&
746  abs(dPhi12) < 10 && abs(dPhi13) < 10 && abs(dPhi23) < 10 ) {
747  if ( abs(dPhi13) < abs(dPhi23) ) dPhi34 = dPhi13;
748  else dPhi34 = dPhi23; }
749  } // End if (era_3)
750  } // End if (mode_inv == 15)
751 
752 
753  if(verbose){
754  if (mode_inv == 15) // 1-2-3-4
755  cout << "Inverted mode 15: " << hex << Address << " " << dec << dPhi12 << " " << dPhi23 << " " << dPhi34 << " " << " " << FR1 << " " << TrackEta << " " << dec << endl;
756  if (mode_inv == 14) // 2-3-4
757  cout << "Inverted mode 14: " << hex << Address << " " << dec << dPhi23 << " " << dPhi34 << " " << " " << " " << TrackEta << " " << dec << endl;
758  if (mode_inv == 13) // 1-3-4
759  cout << "Inverted mode 13: " << hex << Address << " " << dec << dPhi13 << " " << dPhi34 << " " << " " << FR1 << " " << TrackEta << " " << dec << endl;
760  if (mode_inv == 11) // 1-2-4
761  cout << "Inverted mode 11: " << hex << Address << " " << dec << dPhi12 << " " << dPhi24 << " " << " " << FR1 << " " << TrackEta << " " << dec << endl;
762  if (mode_inv == 7)
763  cout << "Inverted mode 7: " << hex << Address << " " << dec << dPhi12 << " " << dPhi23 << " " << " " << FR1 << " " << TrackEta << " " << dec << endl;
764  if (mode_inv == 3)
765  cout << "Inverted mode 3: " << hex << Address << " " << dec << dPhi12 << " " << " " << FR1 << " " << TrackEta << " " << dec << endl;
766  }
767 
768  // now use rebinned values
769  dphi[0] = dPhi12;
770  dphi[1] = dPhi13;
771  dphi[2] = dPhi14;
772  dphi[3] = dPhi23;
773  dphi[4] = dPhi24;
774  dphi[5] = dPhi34;
775  deta[0] = dTheta12;
776  deta[1] = dTheta13;
777  deta[2] = dTheta14;
778  deta[3] = dTheta23;
779  deta[4] = dTheta24;
780  deta[5] = dTheta34;
781  eta = TrackEta;
782  clct[0] = CLCT1;
783  clct[1] = CLCT2;
784  clct[2] = CLCT3;
785  clct[3] = CLCT4;
786  FR[0] = FR1;
787  FR[1] = FR2;
788  FR[2] = FR3;
789  FR[3] = FR4;
790 
791 
792  if(verbose){
793  for(int f=0;f<4;f++){
794  cout<<"\nphis["<<f<<"] = "<<phis[f]<<" and etas = "<<etas[f]<<endl;
795  cout<<"\nclct["<<f<<"] = "<<clct[f]<<" and cscid = "<<cscid[f]<<endl;
796  }
797 
798  for(int u=0;u<6;u++)
799  cout<<"\ndphi["<<u<<"] = "<<dphi[u]<<" and deta = "<<deta[u]<<endl;
800  }
801 
802  float MpT = -1;//final pT to return
803 
804 
808 
809  int size[13] = {5,0,5,5,5,0,5,5,5,5,5,4,4};
810  int Variables[24] = {dphi[0], dphi[1], dphi[2], dphi[3], dphi[4], dphi[5], deta[0], deta[1], deta[2], deta[3], deta[4], deta[5],
811  clct[0], clct[1], clct[2], clct[3], cscid[0], cscid[1], cscid[2], cscid[3], FR[0], FR[1], FR[2], FR[3]};
812 
813 
814 
818  //float gpt = -1;
819 
820  int goodMode = false;
821  int allowedModes[11] = {3,5,9,6,10,12,7,11,13,14,15};
822  for (int i=0;i<11;i++)
823  if (allowedModes[i] == mode_inv)
824  {
825  goodMode = true;
826  break;
827  }
828 
829  if (goodMode)
830  for(int i=3;i<16;i++){
831 
832  if(i != mode_inv)
833  continue;
834 
835  vector<Double_t> Data;
836  Data.push_back(1.0);
837  Data.push_back(eta);
838  for(int y=0;y<size[mode_inv-3];y++){
839  Data.push_back(Variables[ModeVariables[mode_inv-3][y]]);
840  if(verbose) cout<<"Generalized Variables "<<y<<" "<<Variables[ModeVariables[mode_inv-3][y]]<<"\n";
841  }
842 
843  if(verbose){
844  cout<<"Data.size() = "<<Data.size()<<"\n";
845  for(int i=0;i<5;i++)
846  cout<<"Data["<<i<<"] = "<<Data[i]<<"\n";
847  }
848 
849  Event *event = new Event();
850  event->data = Data;
851 
852  forest_[mode_inv].predictEvent(event,64);
853  float OpT = event->predictedValue;
854  MpT = 1/OpT;
855 
856  delete event;
857 
858  if (MpT<0.0) MpT = 1.0;
859  if (MpT>200.0) MpT = 200.0;
860 
861  }
862 
863 
864  return MpT;
865 }
866 
867 
868 
870  edm::ESHandle<CSCGeometry> cscGeometry;
871  es.get<MuonGeometryRecord>().get(cscGeometry);
872 
873  bool verbose = false;
874  bool doComp = true;
875 
879 
880  // Unused variables
881  /* int ModeVariables[13][6]; */
882  /* int ModeBits[13][6]; */
883  /* for (int i=0;i<13;i++) { */
884  /* for (int j=0;j<6;j++) { */
885  /* if (whichScheme == 3) { */
886  /* ModeVariables[i][j] = ModeVariables_Scheme3[i][j]; */
887  /* } */
888  /* } */
889  /* } */
890 
891  // Unused variable
892  /* const char *dir=""; */
893  /* if (whichScheme == 3) */
894  /* dir = dirSchemeC; */
895 
896  int dphi[6] = {-999,-999,-999,-999,-999,-999}, deta[6] = {-999,-999,-999,-999,-999,-999};
897  int clct[4] = {-999,-999,-999,-999}, cscid[4] = {-999,-999,-999,-999};
898  int phis[4] = {-999,-999,-999,-999}, etas[4] = {-999,-999,-999,-999}, mode_inv = 0;;
899  int FR[4] = {-999,-999,-999,-999};
900 
901  float theta_angle = ((track.theta)*0.2874016 + 8.5)*(3.14159265359/180);
902  float eta = (-1)*log(tan(theta_angle/2));
903 
904  const TriggerPrimitiveStationMap stubs = track.getStubs();
905 
906  //track.print(cout);
907 
908  if(verbose) cout<<"Track eta = "<<eta<<" and has hits in stations ";//
909 
910  int x=0; //12
911  for(unsigned int s=8;s<12;s++){
912  if((stubs.find(s)->second).size() == 1){
913 
914 
915  if(verbose) cout<< "s= " << s << " " << endl;
916  //etas[s-8] = (fabs((stubs.find(s)->second)[0]->getCMSGlobalEta()) + 0.9)/(0.0125);
917  etas[s-8] = track.thetas[x];
918  if(verbose) cout<< "eta= " << etas[s-8] << " " << endl;
919  phis[s-8] = track.phis[x];//(stubs.find(s)->second)[0]->getCMSGlobalPhi();//
920  if(verbose) cout<< "phi= " << phis[s-8] << " " << endl;
921  clct[s-8] = (stubs.find(s)->second)[0].getPattern();
922  if(verbose) cout<< "clct= " << clct[s-8] << " " << endl;
923  cscid[s-8] = (stubs.find(s)->second)[0].Id();
924  if(verbose) cout<< "cscid= " << cscid[s-8] << " " << endl;
925 
926  if(verbose) cout<< s << " " << (stubs.find(s)->second)[0].detId<CSCDetId>().station()<<" " << phis[s-8] << endl;;
927 
928  const CSCChamber* layer = cscGeometry->chamber((stubs.find(s)->second)[0].detId<CSCDetId>());
929  LocalPoint llc(0.,0.,0.);
930  GlobalPoint glc = layer->toGlobal(llc);
931 
932 
933  int FR_ = 0;
934  int coord[5] = {586,686,815,924,1013};
935  for(int i=0;i<5;i++){
936 
937  if((fabs(glc.z()) < (coord[i] + 7)) && (fabs(glc.z()) > (coord[i] - 7)))
938  FR_ = 1;
939 
940  FR[s-8] = FR_;
941 
942  }
943 
944  x++;
945  }
946  }
947 
948  mode_inv = 0;
949  if(mode & 1)
950  mode_inv |= 8;
951  if(mode & 2)
952  mode_inv |= 4;
953  if(mode & 4)
954  mode_inv |= 2;
955  if(mode & 8)
956  mode_inv |= 1;
957 
958  if(verbose) cout << "\n Mode = " << mode << ", inverted mode = " << mode_inv << endl;
959 
963 
964  for(int d=0;d<6;d++){
965  dphi[d] = track.deltas[0][d];
966  deta[d] = track.deltas[1][d];
967  }
968 
969  if(phis[0] > 0 && phis[1] > 0){ // 1 - 2
970  dphi[0] = phis[1] - phis[0];
971  deta[0] = etas[1] - etas[0];
972  }
973  if(phis[0] > 0 && phis[2] > 0){ // 1 - 3
974  dphi[1] = phis[2] - phis[0];
975  deta[1] = etas[2] - etas[0];
976  }
977  if(phis[0] > 0 && phis[3] > 0){ // 1 - 4
978  dphi[2] = phis[3] - phis[0];
979  deta[2] = etas[3] - etas[0];
980  }
981  if(phis[1] > 0 && phis[2] > 0){ // 2 - 3
982  dphi[3] = phis[2] - phis[1];
983  deta[3] = etas[2] - etas[1];
984  }
985  if(phis[1] > 0 && phis[3] > 0){ // 2 - 4
986  dphi[4] = phis[3] - phis[1];
987  deta[4] = etas[3] - etas[1];
988  }
989  if(phis[2] > 0 && phis[3] > 0){ // 3 - 4
990  dphi[5] = phis[3] - phis[2];
991  deta[5] = etas[3] - etas[2];
992  }
993 
994 
995  if(verbose){
996  if (mode_inv==3) // 1-2
997  {
998  float dPhi12__ = fabs(dphi[0]);
999  float eta__ = getEta(eta, 5);
1000  float clct1__ = getCLCT(clct[0]);
1001  float clct2__ = getCLCT(clct[1]);
1002 
1003  cout << endl;
1004  cout << "Inverted mode 3 Track " << endl;
1005  cout << setw(10) << "dPhi12: " << dphi[0] << setw(10) << dPhi12__ << endl;
1006  cout << setw(10) << "CLCT1: " << clct[0] << setw(10) << clct1__ << endl;
1007  cout << setw(10) << "CLCT2: " << clct[1] << setw(10) << clct2__ << endl;
1008  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1009  }
1010  if (mode_inv==5) // 1-3
1011  {
1012  float dPhi13__ = fabs(dphi[1]);
1013  float eta__ = getEta(eta, 5);
1014  float clct1__ = getCLCT(clct[0]);
1015  float clct3__ = getCLCT(clct[2]);
1016 
1017  cout << endl;
1018  cout << "Inverted mode 5 Track " << endl;
1019  cout << setw(10) << "dPhi13: " << dphi[1] << setw(10) << dPhi13__ << endl;
1020  cout << setw(10) << "CLCT1: " << clct[0] << setw(10) << clct1__ << endl;
1021  cout << setw(10) << "CLCT3: " << clct[2] << setw(10) << clct3__ << endl;
1022  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1023  }
1024  if (mode_inv==9) // 1-4
1025  {
1026  float dPhi14__ = fabs(dphi[2]);
1027  float eta__ = getEta(eta, 5);
1028  float clct1__ = getCLCT(clct[0]);
1029  float clct4__ = getCLCT(clct[3]);
1030 
1031  cout << endl;
1032  cout << "Inverted mode 9 Track " << endl;
1033  cout << setw(10) << "dPhi14: " << dphi[2] << setw(10) << dPhi14__ << endl;
1034  cout << setw(10) << "CLCT1: " << clct[0] << setw(10) << clct1__ << endl;
1035  cout << setw(10) << "CLCT4: " << clct[3] << setw(10) << clct4__ << endl;
1036  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1037  }
1038  if (mode_inv==6) // 2-3
1039  {
1040  float dPhi23__ = fabs(dphi[3]);
1041  float eta__ = getEta(eta, 5);
1042  float clct2__ = getCLCT(clct[1]);
1043  float clct3__ = getCLCT(clct[2]);
1044 
1045  cout << endl;
1046  cout << "Inverted mode 9 Track " << endl;
1047  cout << setw(10) << "dPhi23: " << dphi[3] << setw(10) << dPhi23__ << endl;
1048  cout << setw(10) << "CLCT2: " << clct[1] << setw(10) << clct2__ << endl;
1049  cout << setw(10) << "CLCT3: " << clct[2] << setw(10) << clct3__ << endl;
1050  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1051  }
1052  if (mode_inv==10) // 2-4
1053  {
1054  float dPhi24__ = fabs(dphi[4]);
1055  float eta__ = getEta(eta, 5);
1056  float clct2__ = getCLCT(clct[1]);
1057  float clct4__ = getCLCT(clct[3]);
1058 
1059  cout << endl;
1060  cout << "Inverted mode 10 Track " << endl;
1061  cout << setw(10) << "dPhi24: " << dphi[4] << setw(10) << dPhi24__ << endl;
1062  cout << setw(10) << "CLCT2: " << clct[1] << setw(10) << clct2__ << endl;
1063  cout << setw(10) << "CLCT4: " << clct[3] << setw(10) << clct4__ << endl;
1064  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1065  }
1066  if (mode_inv==12) // 3-4
1067  {
1068  float dPhi34__ = fabs(dphi[5]);
1069  float eta__ = getEta(eta, 5);
1070  float clct3__ = getCLCT(clct[2]);
1071  float clct4__ = getCLCT(clct[3]);
1072 
1073  cout << endl;
1074  cout << "Inverted mode 12 Track " << endl;
1075  cout << setw(10) << "dPhi34: " << dphi[5] << setw(10) << dPhi34__ << endl;
1076  cout << setw(10) << "CLCT3: " << clct[2] << setw(10) << clct3__ << endl;
1077  cout << setw(10) << "CLCT4: " << clct[3] << setw(10) << clct4__ << endl;
1078  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1079  }
1080 
1081  if (mode_inv==7) // 1-2-3
1082  {
1083  float dPhi12__ = getNLBdPhi(dphi[0],7, 512);
1084  float dPhi23__ = getNLBdPhi(dphi[3],5, 256);
1085  float eta__ = getEta(eta, 5);
1086  float clct1__ = getCLCT(clct[0]);
1087  cout << endl;
1088  cout << "Inverted mode 7 Track " << endl;
1089  cout << setw(10) << "dPhi12: " << dphi[0] << setw(10) << dPhi12__ << endl;
1090  cout << setw(10) << "dPhi23: " << dphi[3] << setw(10) << dPhi23__ << endl;
1091  cout << setw(10) << "CLCT1: " << clct[0] << setw(10) << clct1__ << endl;
1092  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1093  }
1094  if (mode_inv==11) // 1-2-4
1095  {
1096  float dPhi12__ = getNLBdPhi(dphi[0],7, 512);
1097  float dPhi24__ = getNLBdPhi(dphi[4],5, 256);
1098  float eta__ = getEta(eta, 5);
1099  float clct1__ = getCLCT(clct[0]);
1100  cout << endl;
1101  cout << "Inverted mode 11 Track " << endl;
1102  cout << setw(10) << "dPhi12: " << dphi[0] << setw(10) << dPhi12__ << endl;
1103  cout << setw(10) << "dPhi24: " << dphi[4] << setw(10) << dPhi24__ << endl;
1104  cout << setw(10) << "CLCT1: " << clct[0] << setw(10) << clct1__ << endl;
1105  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1106  }
1107  if (mode_inv==13) // 1-3-4
1108  {
1109  float dPhi13__ = getNLBdPhi(dphi[1],7, 512);
1110  float dPhi34__ = getNLBdPhi(dphi[5],5, 256);
1111  float eta__ = getEta(eta, 5);
1112  float clct1__ = getCLCT(clct[0]);
1113  cout << endl;
1114  cout << "Inverted mode 13 Track " << endl;
1115  cout << setw(10) << "dPhi13: " << dphi[1] << setw(10) << dPhi13__ << endl;
1116  cout << setw(10) << "dPhi34: " << dphi[5] << setw(10) << dPhi34__ << endl;
1117  cout << setw(10) << "CLCT1: " << clct[0] << setw(10) << clct1__ << endl;
1118  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1119  }
1120  if (mode_inv==14) // 2-3-4
1121  {
1122  float dPhi23__ = getNLBdPhi(dphi[3],7, 512);
1123  float dPhi34__ = getNLBdPhi(dphi[5],5, 256);
1124  float eta__ = getEta(eta, 5);
1125  float clct2__ = getCLCT(clct[1]);
1126  cout << endl;
1127  cout << "Inverted mode 14 Track " << endl;
1128  cout << setw(10) << "dPhi23: " << dphi[3] << setw(10) << dPhi23__ << endl;
1129  cout << setw(10) << "dPhi34: " << dphi[5] << setw(10) << dPhi34__ << endl;
1130  cout << setw(10) << "CLCT2: " << clct[1] << setw(10) << clct2__ << endl;
1131  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1132  }
1133  if (mode_inv==15) //1-2-3-4
1134  {
1135  float dPhi12__ = getNLBdPhi(dphi[0],7, 512);
1136  float dPhi23__ = getNLBdPhi(dphi[3],5, 256);
1137  float dPhi34__ = getNLBdPhi(dphi[5],6, 256);
1138  float eta__ = getEta(eta, 5);
1139 
1140  cout << endl;
1141  cout << "Inverted mode 15 Track " << endl;
1142  cout << setw(10) << "dPhi12: " << dphi[0] << setw(10) << dPhi12__ << endl;
1143  cout << setw(10) << "dPhi23: " << dphi[3] << setw(10) << dPhi23__ << endl;
1144  cout << setw(10) << "dPhi34: " << dphi[5] << setw(10) << dPhi34__ << endl;
1145  cout << setw(10) << "eta : " << eta << setw(10) << eta__ << endl;
1146  }
1147  }
1148 
1149  float dPhi12 = dphi[0];
1150  float dPhi13 = dphi[1];
1151  float dPhi14 = dphi[2];
1152  float dPhi23 = dphi[3];
1153  float dPhi24 = dphi[4];
1154  float dPhi34 = dphi[5];
1155  float dTheta12 = deta[0];
1156  float dTheta13 = deta[1];
1157  float dTheta14 = deta[2];
1158  float dTheta23 = deta[3];
1159  float dTheta24 = deta[4];
1160  float dTheta34 = deta[5];
1161  float TrackEta = eta;
1162  float CLCT1 = clct[0];
1163  float CLCT2 = clct[1];
1164  float CLCT3 = clct[2];
1165  float CLCT4 = clct[3];
1166  float FR1 = FR[0];
1167  float FR2 = FR[1];
1168  float FR3 = FR[2];
1169  float FR4 = FR[3];
1170 
1171  unsigned long Address = 0x0;
1172 
1173  if (doComp && mode_inv==3)
1174  {
1175 
1176  int dPhi12Sign = 1;
1177  if (dPhi12<0) dPhi12Sign = -1;
1178  // Unused variables
1179  /* int CLCT1Sign = 1; */
1180  /* int CLCT2Sign = 1; */
1181  /* if (CLCT1<0) CLCT1Sign = -1; */
1182  /* if (CLCT2<0) CLCT2Sign = -1; */
1183 
1184  // Make Pt LUT Address
1185  int dPhi12_ = fabs(dPhi12);
1186  int sign12_ = dPhi12Sign > 0 ? 1 : 0;
1187  int dTheta12_ = getdTheta(dTheta12);
1188  int CLCT1_ = getCLCT(CLCT1);
1189  int CLCT1Sign_ = CLCT1_ > 0 ? 1 : 0;
1190  CLCT1_ = abs(CLCT1_);
1191  int CLCT2_ = getCLCT(CLCT2);
1192  int CLCT2Sign_ = CLCT2_ > 0 ? 1 : 0;
1193  CLCT2_ = abs(CLCT2_);
1194  int FR1_ = FR1;
1195  int FR2_ = FR2;
1196  int eta_ = getEtaInt(TrackEta, 5);
1197  int Mode_ = mode_inv;
1198 
1199  Address += ( dPhi12_ & ((1<<9)-1)) << (0);
1200  Address += ( sign12_ & ((1<<1)-1)) << (0+9);
1201  Address += ( dTheta12_ & ((1<<3)-1)) << (0+9+1);
1202  Address += ( CLCT1_ & ((1<<2)-1)) << (0+9+1+3);
1203  Address += ( CLCT1Sign_ & ((1<<1)-1)) << (0+9+1+3+2);
1204  Address += ( CLCT2_ & ((1<<2)-1)) << (0+9+1+3+2+1);
1205  Address += ( CLCT2Sign_ & ((1<<1)-1)) << (0+9+1+3+2+1+2);
1206  Address += ( FR1_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1);
1207  Address += ( FR2_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1+1);
1208  Address += ( eta_ & ((1<<5)-1)) << (0+9+1+3+2+1+2+1+1+1);
1209  Address += ( Mode_ & ((1<<4)-1)) << (0+9+1+3+2+1+2+1+1+1+5);
1210  }
1211 
1212  if (doComp && mode_inv==5)
1213  {
1214  // signed full precision dPhi12
1215  int dPhi13Sign = 1;
1216  // Unused variables
1217  // int CLCT1Sign = 1;
1218  // int CLCT3Sign = 1;
1219 
1220  if (dPhi13<0) dPhi13Sign = -1;
1221  // if (CLCT1<0) CLCT1Sign = -1;
1222  // if (CLCT3<0) CLCT3Sign = -1;
1223 
1224  // Make Pt LUT Address
1225  int dPhi13_ = fabs(dPhi13);
1226  int sign13_ = dPhi13Sign > 0 ? 1 : 0;
1227  int dTheta13_ = getdTheta(dTheta13);
1228  int CLCT1_ = getCLCT(CLCT1);
1229  int CLCT1Sign_ = CLCT1_ > 0 ? 1 : 0;
1230  CLCT1_ = abs(CLCT1_);
1231  int CLCT3_ = getCLCT(CLCT3);
1232  int CLCT3Sign_ = CLCT3_ > 0 ? 1 : 0;
1233  CLCT3_ = abs(CLCT3_);
1234  int FR1_ = FR1;
1235  int FR3_ = FR3;
1236  int eta_ = getEtaInt(TrackEta, 5);
1237  int Mode_ = mode_inv;
1238 
1239  Address += ( dPhi13_ & ((1<<9)-1)) << (0);
1240  Address += ( sign13_ & ((1<<1)-1)) << (0+9);
1241  Address += ( dTheta13_ & ((1<<3)-1)) << (0+9+1);
1242  Address += ( CLCT1_ & ((1<<2)-1)) << (0+9+1+3);
1243  Address += ( CLCT1Sign_ & ((1<<1)-1)) << (0+9+1+3+2);
1244  Address += ( CLCT3_ & ((1<<2)-1)) << (0+9+1+3+2+1);
1245  Address += ( CLCT3Sign_ & ((1<<1)-1)) << (0+9+1+3+2+1+2);
1246  Address += ( FR1_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1);
1247  Address += ( FR3_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1+1);
1248  Address += ( eta_ & ((1<<5)-1)) << (0+9+1+3+2+1+2+1+1+1);
1249  Address += ( Mode_ & ((1<<4)-1)) << (0+9+1+3+2+1+2+1+1+1+5);
1250  }
1251 
1252  if (doComp && mode_inv==9)
1253  {
1254  // signed full precision dPhi12
1255  int dPhi14Sign = 1;
1256  // Unused variables
1257  // int dEta14Sign = 1;
1258  // int CLCT1Sign = 1;
1259  // int CLCT4Sign = 1;
1260 
1261  if (dPhi14<0) dPhi14Sign = -1;
1262  // if (CLCT1<0) CLCT1Sign = -1;
1263  // if (CLCT4<0) CLCT4Sign = -1;
1264 
1265  // Make Pt LUT Address
1266  int dPhi14_ = fabs(dPhi14);
1267  int sign14_ = dPhi14Sign > 0 ? 1 : 0;
1268  int dTheta14_ = getdTheta(dTheta14);
1269  int CLCT1_ = getCLCT(CLCT1);
1270  int CLCT1Sign_ = CLCT1_ > 0 ? 1 : 0;
1271  CLCT1_ = abs(CLCT1_);
1272  int CLCT4_ = getCLCT(CLCT4);
1273  int CLCT4Sign_ = CLCT4_ > 0 ? 1 : 0;
1274  CLCT4_ = abs(CLCT4_);
1275  int FR1_ = FR1;
1276  int FR4_ = FR4;
1277  int eta_ = getEtaInt(TrackEta, 5);
1278  int Mode_ = mode_inv;
1279 
1280  Address += ( dPhi14_ & ((1<<9)-1)) << (0);
1281  Address += ( sign14_ & ((1<<1)-1)) << (0+9);
1282  Address += ( dTheta14_ & ((1<<3)-1)) << (0+9+1);
1283  Address += ( CLCT1_ & ((1<<2)-1)) << (0+9+1+3);
1284  Address += ( CLCT1Sign_ & ((1<<1)-1)) << (0+9+1+3+2);
1285  Address += ( CLCT4_ & ((1<<2)-1)) << (0+9+1+3+2+1);
1286  Address += ( CLCT4Sign_ & ((1<<1)-1)) << (0+9+1+3+2+1+2);
1287  Address += ( FR1_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1);
1288  Address += ( FR4_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1+1);
1289  Address += ( eta_ & ((1<<5)-1)) << (0+9+1+3+2+1+2+1+1+1);
1290  Address += ( Mode_ & ((1<<4)-1)) << (0+9+1+3+2+1+2+1+1+1+5);
1291  }
1292  if (doComp && mode_inv==6) // 2-3
1293  {
1294  // signed full precision dPhi12
1295  int dPhi23Sign = 1;
1296  // Unused variables
1297  // int CLCT2Sign = 1;
1298  // int CLCT3Sign = 1;
1299 
1300  if (dPhi23<0) dPhi23Sign = -1;
1301  // if (CLCT2<0) CLCT2Sign = -1;
1302  // if (CLCT3<0) CLCT3Sign = -1;
1303 
1304  // Make Pt LUT Address
1305  int dPhi23_ = fabs(dPhi23);
1306  int sign23_ = dPhi23Sign > 0 ? 1 : 0;
1307  int dTheta23_ = getdTheta(dTheta23);
1308  int CLCT2_ = getCLCT(CLCT2);
1309  int CLCT2Sign_ = CLCT2_ > 0 ? 1 : 0;
1310  CLCT2_ = abs(CLCT2_);
1311  int CLCT3_ = getCLCT(CLCT3);
1312  int CLCT3Sign_ = CLCT3_ > 0 ? 1 : 0;
1313  CLCT3_ = abs(CLCT3_);
1314  int FR2_ = FR2;
1315  int FR3_ = FR3;
1316  int eta_ = getEtaInt(TrackEta, 5);
1317  int Mode_ = mode_inv;
1318 
1319  Address += ( dPhi23_ & ((1<<9)-1)) << (0);
1320  Address += ( sign23_ & ((1<<1)-1)) << (0+9);
1321  Address += ( dTheta23_ & ((1<<3)-1)) << (0+9+1);
1322  Address += ( CLCT2_ & ((1<<2)-1)) << (0+9+1+3);
1323  Address += ( CLCT2Sign_ & ((1<<1)-1)) << (0+9+1+3+2);
1324  Address += ( CLCT3_ & ((1<<2)-1)) << (0+9+1+3+2+1);
1325  Address += ( CLCT3Sign_ & ((1<<1)-1)) << (0+9+1+3+2+1+2);
1326  Address += ( FR2_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1);
1327  Address += ( FR3_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1+1);
1328  Address += ( eta_ & ((1<<5)-1)) << (0+9+1+3+2+1+2+1+1+1);
1329  Address += ( Mode_ & ((1<<4)-1)) << (0+9+1+3+2+1+2+1+1+1+5);
1330  }
1331  if (doComp && mode_inv==10) // 2-4
1332  {
1333  // signed full precision dPhi12
1334  int dPhi24Sign = 1;
1335  // Unused variables
1336  // int CLCT2Sign = 1;
1337  // int CLCT4Sign = 1;
1338 
1339  if (dPhi24<0) dPhi24Sign = -1;
1340  // if (CLCT2<0) CLCT2Sign = -1;
1341  // if (CLCT4<0) CLCT4Sign = -1;
1342 
1343  // Make Pt LUT Address
1344  int dPhi24_ = fabs(dPhi24);
1345  int sign24_ = dPhi24Sign > 0 ? 1 : 0;
1346  int dTheta24_ = getdTheta(dTheta24);
1347  int CLCT2_ = getCLCT(CLCT2);
1348  int CLCT2Sign_ = CLCT2_ > 0 ? 1 : 0;
1349  CLCT2_ = abs(CLCT2_);
1350  int CLCT4_ = getCLCT(CLCT4);
1351  int CLCT4Sign_ = CLCT4_ > 0 ? 1 : 0;
1352  CLCT4_ = abs(CLCT4_);
1353  int FR2_ = FR2;
1354  int FR4_ = FR4;
1355  int eta_ = getEtaInt(TrackEta, 5);
1356  int Mode_ = mode_inv;
1357 
1358  Address += ( dPhi24_ & ((1<<9)-1)) << (0);
1359  Address += ( sign24_ & ((1<<1)-1)) << (0+9);
1360  Address += ( dTheta24_ & ((1<<3)-1)) << (0+9+1);
1361  Address += ( CLCT2_ & ((1<<2)-1)) << (0+9+1+3);
1362  Address += ( CLCT2Sign_ & ((1<<1)-1)) << (0+9+1+3+2);
1363  Address += ( CLCT4_ & ((1<<2)-1)) << (0+9+1+3+2+1);
1364  Address += ( CLCT4Sign_ & ((1<<1)-1)) << (0+9+1+3+2+1+2);
1365  Address += ( FR2_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1);
1366  Address += ( FR4_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1+1);
1367  Address += ( eta_ & ((1<<5)-1)) << (0+9+1+3+2+1+2+1+1+1);
1368  Address += ( Mode_ & ((1<<4)-1)) << (0+9+1+3+2+1+2+1+1+1+5);
1369  }
1370  if (doComp && mode_inv==12) // 3-4
1371  {
1372  int dPhi34Sign = 1;
1373  // Unused variables
1374  // int CLCT3Sign = 1;
1375  // int CLCT4Sign = 1;
1376 
1377  if (dPhi34<0) dPhi34Sign = -1;
1378  // if (CLCT3<0) CLCT3Sign = -1;
1379  // if (CLCT4<0) CLCT4Sign = -1;
1380 
1381  // Make Pt LUT Address
1382  int dPhi34_ = fabs(dPhi34);
1383  int sign34_ = dPhi34Sign > 0 ? 1 : 0;
1384  int dTheta34_ = getdTheta(dTheta34);
1385  int CLCT3_ = getCLCT(CLCT3);
1386  int CLCT3Sign_ = CLCT3_ > 0 ? 1 : 0;
1387  CLCT3_ = abs(CLCT3_);
1388  int CLCT4_ = getCLCT(CLCT4);
1389  int CLCT4Sign_ = CLCT4_ > 0 ? 1 : 0;
1390  CLCT4_ = abs(CLCT4_);
1391  int FR3_ = FR3;
1392  int FR4_ = FR4;
1393  int eta_ = getEtaInt(TrackEta, 5);
1394  int Mode_ = mode_inv;
1395 
1396  Address += ( dPhi34_ & ((1<<9)-1)) << (0);
1397  Address += ( sign34_ & ((1<<1)-1)) << (0+9);
1398  Address += ( dTheta34_ & ((1<<3)-1)) << (0+9+1);
1399  Address += ( CLCT3_ & ((1<<2)-1)) << (0+9+1+3);
1400  Address += ( CLCT3Sign_ & ((1<<1)-1)) << (0+9+1+3+2);
1401  Address += ( CLCT4_ & ((1<<2)-1)) << (0+9+1+3+2+1);
1402  Address += ( CLCT4Sign_ & ((1<<1)-1)) << (0+9+1+3+2+1+2);
1403  Address += ( FR3_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1);
1404  Address += ( FR4_ & ((1<<1)-1)) << (0+9+1+3+2+1+2+1+1);
1405  Address += ( eta_ & ((1<<5)-1)) << (0+9+1+3+2+1+2+1+1+1);
1406  Address += ( Mode_ & ((1<<4)-1)) << (0+9+1+3+2+1+2+1+1+1+5);
1407  }
1408 
1409  if (doComp && mode_inv==7) // 1-2-3
1410  {
1411  int dPhi12Sign = 1;
1412  int dPhi23Sign = 1;
1413  // Unused variables
1414  // int dPhi34Sign = 1;
1415  // int CLCT1Sign = 1;
1416 
1417  if (dPhi12<0) dPhi12Sign = -1;
1418  if (dPhi23<0) dPhi23Sign = -1;
1419  // if (dPhi34<0) dPhi34Sign = -1;
1420  // if (CLCT1<0) CLCT1Sign = -1;
1421 
1422  // Make Pt LUT Address
1423  int dPhi12_ = getNLBdPhiBin(dPhi12, 7, 512);
1424  int dPhi23_ = getNLBdPhiBin(dPhi23, 5, 256);
1425  int sign12_ = dPhi12Sign > 0 ? 1 : 0;
1426  int sign23_ = dPhi23Sign > 0 ? 1 : 0;
1427  int dTheta13_ = getdTheta(dTheta13);
1428  int CLCT1_ = getCLCT(CLCT1);
1429  int CLCT1Sign_ = CLCT1_ > 0 ? 1 : 0;
1430  CLCT1_ = abs(CLCT1_);
1431  int FR1_ = FR1;
1432  int eta_ = getEtaInt(TrackEta, 5);
1433  int Mode_ = mode_inv;
1434 
1435  Address += ( dPhi12_ & ((1<<7)-1)) << (0);
1436  Address += ( dPhi23_ & ((1<<5)-1)) << (0+7);
1437  Address += ( sign12_ & ((1<<1)-1)) << (0+7+5);
1438  Address += ( sign23_ & ((1<<1)-1)) << (0+7+5+1);
1439  Address += ( dTheta13_ & ((1<<3)-1)) << (0+7+5+1+1);
1440  Address += ( CLCT1_ & ((1<<2)-1)) << (0+7+5+1+1+3);
1441  Address += ( CLCT1Sign_ & ((1<<1)-1)) << (0+7+5+1+1+3+2);
1442  Address += ( FR1_ & ((1<<1)-1)) << (0+7+5+1+1+3+2+1);
1443  Address += ( eta_ & ((1<<5)-1)) << (0+7+5+1+1+3+2+1+1);
1444  Address += ( Mode_ & ((1<<4)-1)) << (0+7+5+1+1+3+2+1+1+5);
1445  }
1446 
1447  if (doComp && mode_inv==11)
1448  {
1449  int dPhi12Sign = 1;
1450  int dPhi24Sign = 1;
1451  // Unused variable
1452  // int CLCT1Sign = 1;
1453 
1454  if (dPhi12<0) dPhi12Sign = -1;
1455  if (dPhi24<0) dPhi24Sign = -1;
1456  // if (CLCT1<0) CLCT1Sign = -1;
1457 
1458  // Make Pt LUT Address
1459  int dPhi12_ = getNLBdPhiBin(dPhi12, 7, 512);
1460  int dPhi24_ = getNLBdPhiBin(dPhi24, 5, 256);
1461  int sign12_ = dPhi12Sign > 0 ? 1 : 0;
1462  int sign24_ = dPhi24Sign > 0 ? 1 : 0;
1463  int dTheta14_ = getdTheta(dTheta14);
1464  int CLCT1_ = getCLCT(CLCT1);
1465  int CLCT1Sign_ = CLCT1_ > 0 ? 1 : 0;
1466  CLCT1_ = abs(CLCT1_);
1467  int FR1_ = FR1;
1468  int eta_ = getEtaInt(TrackEta, 5);
1469  int Mode_ = mode_inv;
1470 
1471  Address += ( dPhi12_ & ((1<<7)-1)) << (0);
1472  Address += ( dPhi24_ & ((1<<5)-1)) << (0+7);
1473  Address += ( sign12_ & ((1<<1)-1)) << (0+7+5);
1474  Address += ( sign24_ & ((1<<1)-1)) << (0+7+5+1);
1475  Address += ( dTheta14_ & ((1<<3)-1)) << (0+7+5+1+1);
1476  Address += ( CLCT1_ & ((1<<2)-1)) << (0+7+5+1+1+3);
1477  Address += ( CLCT1Sign_ & ((1<<1)-1)) << (0+7+5+1+1+3+2);
1478  Address += ( FR1_ & ((1<<1)-1)) << (0+7+5+1+1+3+2+1);
1479  Address += ( eta_ & ((1<<5)-1)) << (0+7+5+1+1+3+2+1+1);
1480  Address += ( Mode_ & ((1<<4)-1)) << (0+7+5+1+1+3+2+1+1+5);
1481  }
1482  if (doComp && mode_inv==13) // 1-3-4
1483  {
1484  int dPhi13Sign = 1;
1485  int dPhi34Sign = 1;
1486  // Unused variable
1487  // int CLCT1Sign = 1;
1488 
1489  if (dPhi13<0) dPhi13Sign = -1;
1490  if (dPhi34<0) dPhi34Sign = -1;
1491  // if (CLCT1<0) CLCT1Sign = -1;
1492 
1493  // Make Pt LUT Address
1494  int dPhi13_ = getNLBdPhiBin(dPhi13, 7, 512);
1495  int dPhi34_ = getNLBdPhiBin(dPhi34, 5, 256);
1496  int sign13_ = dPhi13Sign > 0 ? 1 : 0;
1497  int sign34_ = dPhi34Sign > 0 ? 1 : 0;
1498  int dTheta14_ = getdTheta(dTheta14);
1499  int CLCT1_ = getCLCT(CLCT1);
1500  int CLCT1Sign_ = CLCT1_ > 0 ? 1 : 0;
1501  CLCT1_ = abs(CLCT1_);
1502  int FR1_ = FR1;
1503  int eta_ = getEtaInt(TrackEta, 5);
1504  int Mode_ = mode_inv;
1505 
1506  Address += ( dPhi13_ & ((1<<7)-1)) << (0);
1507  Address += ( dPhi34_ & ((1<<5)-1)) << (0+7);
1508  Address += ( sign13_ & ((1<<1)-1)) << (0+7+5);
1509  Address += ( sign34_ & ((1<<1)-1)) << (0+7+5+1);
1510  Address += ( dTheta14_ & ((1<<3)-1)) << (0+7+5+1+1);
1511  Address += ( CLCT1_ & ((1<<2)-1)) << (0+7+5+1+1+3);
1512  Address += ( CLCT1Sign_ & ((1<<1)-1)) << (0+7+5+1+1+3+2);
1513  Address += ( FR1_ & ((1<<1)-1)) << (0+7+5+1+1+3+2+1);
1514  Address += ( eta_ & ((1<<5)-1)) << (0+7+5+1+1+3+2+1+1);
1515  Address += ( Mode_ & ((1<<4)-1)) << (0+7+5+1+1+3+2+1+1+5);
1516  }
1517 
1518  if (doComp && mode_inv==14) // 2-3-4
1519  {
1520  int dPhi23Sign = 1;
1521  int dPhi34Sign = 1;
1522  // Unused variables
1523  // int dEta24Sign = 1;
1524  // int CLCT2Sign = 1;
1525 
1526  if (dPhi23<0) dPhi23Sign = -1;
1527  if (dPhi34<0) dPhi34Sign = -1;
1528  // if (CLCT2<0) CLCT2Sign = -1;
1529 
1530  // Make Pt LUT Address
1531  int dPhi23_ = getNLBdPhiBin(dPhi23, 7, 512);
1532  int dPhi34_ = getNLBdPhiBin(dPhi34, 6, 256);
1533  int sign23_ = dPhi23Sign > 0 ? 1 : 0;
1534  int sign34_ = dPhi34Sign > 0 ? 1 : 0;
1535  int dTheta24_ = getdTheta(dTheta24);
1536  int CLCT2_ = getCLCT(CLCT2);
1537  int CLCT2Sign_ = CLCT2_ > 0 ? 1 : 0;
1538  CLCT2_ = abs(CLCT2_);
1539  int eta_ = getEtaInt(TrackEta, 5);
1540  int Mode_ = mode_inv;
1541 
1542  Address += ( dPhi23_ & ((1<<7)-1)) << (0);
1543  Address += ( dPhi34_ & ((1<<6)-1)) << (0+7);
1544  Address += ( sign23_ & ((1<<1)-1)) << (0+7+6);
1545  Address += ( sign34_ & ((1<<1)-1)) << (0+7+6+1);
1546  Address += ( dTheta24_ & ((1<<3)-1)) << (0+7+6+1+1);
1547  Address += ( CLCT2_ & ((1<<2)-1)) << (0+7+6+1+1+3);
1548  Address += ( CLCT2Sign_ & ((1<<1)-1)) << (0+7+6+1+1+3+2);
1549  Address += ( eta_ & ((1<<5)-1)) << (0+7+6+1+1+3+2+1);
1550  Address += ( Mode_ & ((1<<4)-1)) << (0+7+6+1+1+3+2+1+5);
1551  }
1552 
1553  if (doComp && mode_inv==15) // 1-2-3-4
1554  {
1555  int dPhi12Sign = 1;
1556  int dPhi23Sign = 1;
1557  int dPhi34Sign = 1;
1558 
1559  if (dPhi12<0) dPhi12Sign = -1;
1560  if (dPhi23<0) dPhi23Sign = -1;
1561  if (dPhi34<0) dPhi34Sign = -1;
1562 
1563  dPhi23Sign *= dPhi12Sign;
1564  dPhi34Sign *= dPhi12Sign;
1565  dPhi12Sign = 1;
1566 
1567  // Make Pt LUT Address
1568  int dPhi12_ = getNLBdPhiBin(dPhi12, 7, 512);
1569  int dPhi23_ = getNLBdPhiBin(dPhi23, 5, 256);
1570  int dPhi34_ = getNLBdPhiBin(dPhi34, 6, 256);
1571  int sign23_ = dPhi23Sign > 0 ? 1 : 0;
1572  int sign34_ = dPhi34Sign > 0 ? 1 : 0;
1573  int FR1_ = FR1;
1574  int eta_ = getEtaInt(TrackEta, 5);
1575  int Mode_ = mode_inv;
1576 
1577  Address += ( dPhi12_ & ((1<<7)-1)) << 0;
1578  Address += ( dPhi23_ & ((1<<5)-1)) << (0+7);
1579  Address += ( dPhi34_ & ((1<<6)-1)) << (0+7+5);
1580  Address += ( sign23_ & ((1<<1)-1)) << (0+7+5+6);
1581  Address += ( sign34_ & ((1<<1)-1)) << (0+7+5+6+1);
1582  Address += ( FR1_ & ((1<<1)-1)) << (0+7+5+6+1+1);
1583  Address += ( eta_ & ((1<<5)-1)) << (0+7+5+6+1+1+1);
1584  Address += ( Mode_ & ((1<<4)-1)) << (0+7+5+6+1+1+1+5);
1585  }
1586 
1587  return Address;
1588 }
1589 
1590 
size
Write out results.
std::vector< int > allowedModes_
Definition: PtAssignment.h:22
const TriggerPrimitiveStationMap & getStubs() const
static float getdPhiFromBin(int dPhiBin, int bits, int max=512)
static int getEtaInt(float eta, int bits=5)
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:54
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 float getEta(float eta, int bits=5)
Definition: Event.h:15
float calculatePt(unsigned long Address)
delete x;
Definition: CaloConfig.h:22
void loadL1TForestFromXML(const char *directory, unsigned int numTrees)
Definition: Forest.cc:489
std::vector< int > thetas
static const int ModeVariables_Scheme3[13][6]
Definition: PtAssignment.cc:74
T x() const
Cartesian x coordinate.
double dPhi(double phi1, double phi2)
Definition: JetUtil.h:30
static float getCLCT(float clct)
T z() const
Definition: PV3DBase.h:64
static float getdTheta(float dTheta)
unsigned long calculateAddress(L1TMuon::InternalTrack track, const edm::EventSetup &es, int mode)
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static float getNLBdPhi(float dPhi, int bits, int max=512)
static const int dPhiNLBMap_8bit[256]
double f[11][100]
std::vector< std::vector< int > > deltas
static const int dPhiNLBMap_7bit_256Max[128]
Definition: PtAssignment.cc:98
static const int dPhiNLBMap_8bit_512Max[256]
static const int dPhiNLBMap_7bit_512Max[256]
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 and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
globcontrol glc
Definition: vlib.cc:6
L1TForest forest_[16]
Definition: PtAssignment.h:23
std::vector< int > phis
static int getNLBdPhiBin(float dPhi, int bits, int max=512)
const T & get() const
Definition: EventSetup.h:56
const CSCChamber * chamber(CSCDetId id) const
Return the chamber corresponding to given DetId.
Definition: CSCGeometry.cc:118
static float getEtafromBin(int etaBin, int bits=5)
static const int dPhiNLBMap_5bit[32]
void predictEvent(emtf::Event *e, unsigned int trees)
Definition: Forest.cc:451
static const int dPhiNLBMap_5bit_256Max[32]
Definition: PtAssignment.cc:94
EmtfPtAssignment(const char *tree_dir="L1Trigger/L1TMuon/data/emtf_luts/v_16_02_21/ModeVariables/trees")
Definition: PtAssignment.cc:22
static unsigned int const shift
static const int dPhiNLBMap_6bit_256Max[64]
Definition: PtAssignment.cc:96
std::map< unsigned, TriggerPrimitiveCollection > TriggerPrimitiveStationMap
static const int dPhiNLBMap_7bit[128]
Definition: event.py:1