CMS 3D CMS Logo

TEcnaNumbering.cc
Go to the documentation of this file.
1 //----------Author's Name: B.Fabbro, F.X.Gentit + EB table from P.Jarry DSM/IRFU/SPP CEA-Saclay
2 //----------Copyright:Those valid for CEA software
3 //----------Modified:28/01/2014
4 
6 
7 //--------------------------------------
8 // TEcnaNumbering.cc
9 // Class creation: 30 September 2005
10 // Documentation: see TEcnaNumbering.h
11 //--------------------------------------
12 
14 //-------------------------------------------------------------------------------------------------------
15 //
16 // Building of the numbering for the Ecal channels (EB and EE)
17 //
18 // Convention for the names used here and in the other "TEcna" classes:
19 //
20 // Name Number Reference set Range Comment
21 //
22 // SMTow : Tower number in SuperModule [1,68] (phi,eta) progression
23 // SMCrys : Crystal number in SuperModule [1,1700] (phi,eta) progression
24 // SMEcha : Electronic channel number in SuperModule [0,1699] S shape data reading order
25 // TowEcha: Electronic channel number in Tower [0,24] S shape data reading order
26 //
27 // DeeSC : super-crystal(SC) number in Dee [1,200] (IY,IX) progression
28 // DeeCrys: Crystal number in Dee matrix [1,5000] (IY,IX) progression
29 // DeeEcha: Electronic channel number in Dee matrix [0,4999] (IY,IX) progression (starting from 0)
30 // SCEcha : Electronic channel number in SC [1,25] Crystal numbering for construction
31 //-------------------------------------------------------------------------------------------------------
32 
33 //====================================== constructors =========================================
35  // Constructor without argument: call to method Init()
36 
37  // std::cout << "[Info Management] CLASS: TEcnaNumbering. CREATE OBJECT: this = " << this << std::endl;
38 
39  Init();
40 }
41 
42 TEcnaNumbering::TEcnaNumbering(TEcnaObject* pObjectManager, const TString& SubDet) {
43  // Constructor with argument: call to methods Init() and SetEcalSubDetector(const TString&)
44 
45  // std::cout << "[Info Management] CLASS: TEcnaNumbering. CREATE OBJECT: this = " << this << std::endl;
46 
47  Init();
48  Long_t i_this = (Long_t)this;
49  pObjectManager->RegisterPointer("TEcnaNumbering", i_this);
50 
51  //............................ fEcal => to be changed in fParEcal
52  fEcal = nullptr;
53  Long_t iParEcal = pObjectManager->GetPointerValue("TEcnaParEcal");
54  if (iParEcal == 0) {
55  fEcal = new TEcnaParEcal(pObjectManager, SubDet.Data()); /*fCnew++*/
56  } else {
57  fEcal = (TEcnaParEcal*)iParEcal;
58  }
59 
60  SetEcalSubDetector(SubDet.Data());
61 }
62 
63 TEcnaNumbering::TEcnaNumbering(const TString& SubDet, const TEcnaParEcal* pEcal) {
64  // Constructor with argument: call to methods Init() and SetEcalSubDetector(const TString&)
65 
66  // std::cout << "[Info Management] CLASS: TEcnaNumbering. CREATE OBJECT: this = " << this << std::endl;
67 
68  Init();
69  SetEcalSubDetector(SubDet.Data(), pEcal);
70 }
71 
72 //====================================== destructor =========================================
74  //destructor
75 
76  //if (fEcal != 0){delete fEcal; fCdelete++;}
77 
78  //....................... Barrel
79  if (fT2dSMCrys != nullptr) {
80  delete[] fT2dSMCrys;
81  fCdelete++;
82  }
83  if (fT1dSMCrys != nullptr) {
84  delete[] fT1dSMCrys;
85  fCdelete++;
86  }
87  if (fT1dSMTow != nullptr) {
88  delete[] fT1dSMTow;
89  fCdelete++;
90  }
91  if (fT1dTowEcha != nullptr) {
92  delete[] fT1dTowEcha;
93  fCdelete++;
94  }
95 
96  //....................... Endcap
97  if (fT3dDeeCrys != nullptr) {
98  delete[] fT3dDeeCrys;
99  fCdelete++;
100  }
101  if (fT2dDeeCrys != nullptr) {
102  delete[] fT2dDeeCrys;
103  fCdelete++;
104  }
105  if (fT1dDeeCrys != nullptr) {
106  delete[] fT1dDeeCrys;
107  fCdelete++;
108  }
109  if (fT2dDeeSC != nullptr) {
110  delete[] fT2dDeeSC;
111  fCdelete++;
112  }
113  if (fT1dDeeSC != nullptr) {
114  delete[] fT1dDeeSC;
115  fCdelete++;
116  }
117  if (fT2dSCEcha != nullptr) {
118  delete[] fT2dSCEcha;
119  fCdelete++;
120  }
121  if (fT1dSCEcha != nullptr) {
122  delete[] fT1dSCEcha;
123  fCdelete++;
124  }
125  if (fT2d_jch_JY != nullptr) {
126  delete[] fT2d_jch_JY;
127  fCdelete++;
128  }
129  if (fT1d_jch_JY != nullptr) {
130  delete[] fT1d_jch_JY;
131  fCdelete++;
132  }
133  if (fT2d_ich_IX != nullptr) {
134  delete[] fT2d_ich_IX;
135  fCdelete++;
136  }
137  if (fT1d_ich_IX != nullptr) {
138  delete[] fT1d_ich_IX;
139  fCdelete++;
140  }
141  if (fT2d_DS != nullptr) {
142  delete[] fT2d_DS;
143  fCdelete++;
144  }
145  if (fT1d_DS != nullptr) {
146  delete[] fT1d_DS;
147  fCdelete++;
148  }
149  if (fT2d_DSSC != nullptr) {
150  delete[] fT2d_DSSC;
151  fCdelete++;
152  }
153  if (fT1d_DSSC != nullptr) {
154  delete[] fT1d_DSSC;
155  fCdelete++;
156  }
157  if (fT2d_DeeSCCons != nullptr) {
158  delete[] fT2d_DeeSCCons;
159  fCdelete++;
160  }
161  if (fT1d_DeeSCCons != nullptr) {
162  delete[] fT1d_DeeSCCons;
163  fCdelete++;
164  }
165  if (fT2d_RecovDeeSC != nullptr) {
166  delete[] fT2d_RecovDeeSC;
167  fCdelete++;
168  }
169  if (fT1d_RecovDeeSC != nullptr) {
170  delete[] fT1d_RecovDeeSC;
171  fCdelete++;
172  }
173 
174  // std::cout << "[Info Management] CLASS: TEcnaNumbering. DESTROY OBJECT: this = " << this << std::endl;
175 }
176 //------------------------------------------------------------- Init()
178  //Set default values and build crystal numbering table
179 
180  //.............................. Initialisations
181  fTTBELL = '\007';
182  fgMaxCar = (Int_t)512;
183 
184  //....................... Barrel
185  fT2dSMCrys = nullptr;
186  fT1dSMCrys = nullptr;
187  fT1dSMTow = nullptr;
188  fT1dTowEcha = nullptr;
189 
190  fCodeChNumberingLvrbBot = "bottom";
191  fCodeChNumberingLvrbTop = "top";
192 
193  //....................... Endcap
194  fT3dDeeCrys = nullptr;
195  fT2dDeeCrys = nullptr;
196  fT1dDeeCrys = nullptr;
197  fT2dDeeSC = nullptr;
198  fT1dDeeSC = nullptr;
199  fT2dSCEcha = nullptr;
200  fT1dSCEcha = nullptr;
201  fT2d_jch_JY = nullptr;
202  fT1d_jch_JY = nullptr;
203  fT2d_ich_IX = nullptr;
204  fT1d_ich_IX = nullptr;
205  fT2d_DS = nullptr;
206  fT1d_DS = nullptr;
207  fT2d_DSSC = nullptr;
208  fT1d_DSSC = nullptr;
209  fT2d_DeeSCCons = nullptr;
210  fT1d_DeeSCCons = nullptr;
211  fT2d_RecovDeeSC = nullptr;
212  fT1d_RecovDeeSC = nullptr;
213 
214  fCodeChNumberingITP1Bot = "bottom"; // ==> Type 1 Interface plate IPT1 (a faire)
215  fCodeChNumberingITP2Top = "top"; // ==> Type 2 Interface plate IPT2 (a faire)
216 
217  //------------------ Init pointers on the CNA objects
218  fEcal = nullptr;
219 }
220 // end of Init()
221 //------------------------------------------------------------- SetEcalSubDetector(...)
222 void TEcnaNumbering::SetEcalSubDetector(const TString& SubDet, const TEcnaParEcal* pEcal) {
223  //Set the current subdetector flag and the current subdetector parameters
224 
225  fEcal = nullptr;
226  if (pEcal == nullptr) {
227  fEcal = new TEcnaParEcal(SubDet.Data()); /*fCnew++*/
228  ;
229  } else {
230  fEcal = (TEcnaParEcal*)pEcal;
231  }
232 
233  Int_t MaxCar = fgMaxCar;
234  fFlagSubDet.Resize(MaxCar);
235  fFlagSubDet = fEcal->GetEcalSubDetector(); // fFlagSubDet = "EB" or "EE"
236 
237  if (fFlagSubDet == "EB") {
239  }
240  if (fFlagSubDet == "EE") {
243  }
244 }
245 
247  //Set the current subdetector flag and the current subdetector parameters
248 
249  Int_t MaxCar = fgMaxCar;
250  fFlagSubDet.Resize(MaxCar);
251  fFlagSubDet = fEcal->GetEcalSubDetector(); // fFlagSubDet = "EB" or "EE"
252 
253  if (fFlagSubDet == "EB") {
255  }
256  if (fFlagSubDet == "EE") {
259  }
260 }
261 
262 //====================================================================================================
263 //
264 //
265 // B A R R E L
266 //
267 //
268 //====================================================================================================
269 //
270 // SMCrys <-> (SMTow, TowEcha) correspondance table (from Patrick Jarry)
271 //
272 //====================================================================================================
274  // Build the correspondance table: SMCrys <-> (SMTow, TowEcha) for the ECAL BARREL
275  //
276  // From CMS Internal Note "CMS ECAL Barrel channel numbering"
277  //
278  // Name Number Reference set Range Comment
279  //
280  // SMTow : Tower number in SuperModule [1,68] (phi,eta) progression
281  // SMCrys : Crystal number in SuperModule [1,1700] (phi,eta) progression
282  // SMEcha : Electronic channel number in SuperModule [0,1699] S shape data reading order
283  //
284  // TowEcha: Electronic channel number in Tower [0,24] S shape data reading order
285  //
286  //
287  // fill the 2D array: fT2dSMCrys[n_SMTow][n_TowEcha]
288  //
289  // and the 1d arrays: fT1dSMTow[i_SMCrys] and fT1dTowEcha[i_SMCrys]
290  //
291  //-----------------------------------------------------------------------------------------------------
292 
293  if (fT2dSMCrys == nullptr) {
294  Int_t MaxSMTow = fEcal->MaxTowInSM();
295  Int_t MaxTowEcha = fEcal->MaxCrysInTow();
296  Int_t MaxSMCrys = fEcal->MaxCrysInSM();
297 
298  //................... Allocation and Init CrysNumbersTable
299 
300  fT2dSMCrys = new Int_t*[MaxSMTow];
301  fCnew++;
302  fT1dSMCrys = new Int_t[MaxSMTow * MaxTowEcha];
303  fCnew++;
304  for (Int_t i_SMTow = 0; i_SMTow < MaxSMTow; i_SMTow++) {
305  fT2dSMCrys[i_SMTow] = &fT1dSMCrys[0] + i_SMTow * MaxTowEcha;
306  }
307  for (Int_t i = 0; i < MaxSMTow; i++) {
308  for (Int_t j = 0; j < MaxTowEcha; j++) {
309  fT2dSMCrys[i][j] = 0;
310  }
311  }
312 
313  fT1dSMTow = new Int_t[MaxSMCrys];
314  fCnew++;
315  for (Int_t i = 0; i < MaxSMCrys; i++) {
316  fT1dSMTow[i] = 0;
317  }
318 
319  fT1dTowEcha = new Int_t[MaxSMCrys];
320  fCnew++;
321  for (Int_t i = 0; i < MaxSMCrys; i++) {
322  fT1dTowEcha[i] = 0;
323  }
324 
325  //........................ Build table
326  Int_t m2 = (Int_t)2;
327  Int_t m26 = (Int_t)26;
328 
329  // Int_t jch_type[2][26];
330  Int_t** jch_type = new Int_t*[m2];
331  fCnew++;
332  Int_t* jch_type_d1 = new Int_t[m2 * m26];
333  fCnew++;
334  for (Int_t i_m2 = 0; i_m2 < m2; i_m2++) {
335  jch_type[i_m2] = &jch_type_d1[0] + i_m2 * m26;
336  }
337 
338  for (Int_t k = 25; k >= 21; k--) {
339  jch_type[0][k] = 25 - k;
340  } // k = 25,24,23,22,21 -> jch_type[0][k] = 0,1,2,3,4
341  for (Int_t k = 16; k <= 20; k++) {
342  jch_type[0][k] = k - 16;
343  } // k = 16,17,18,19,20 -> jch_type[0][k] = 0,1,2,3,4
344  for (Int_t k = 15; k >= 11; k--) {
345  jch_type[0][k] = 15 - k;
346  } // k = 15,14,12,13,11 -> jch_type[0][k] = 0,1,2,3,4
347  for (Int_t k = 6; k <= 10; k++) {
348  jch_type[0][k] = k - 6;
349  } // k = 6, 7, 8, 9,10 -> jch_type[0][k] = 0,1,2,3,4
350  for (Int_t k = 5; k >= 1; k--) {
351  jch_type[0][k] = 5 - k;
352  } // k = 5, 4, 3, 2, 1 -> jch_type[0][k] = 0,1,2,3,4
353 
354  for (Int_t k = 1; k <= 5; k++) {
355  jch_type[1][k] = k - 1;
356  } // k = 1, 2, 3, 4, 5 -> jch_type[1][k] = 0,1,2,3,4
357  for (Int_t k = 10; k >= 6; k--) {
358  jch_type[1][k] = 10 - k;
359  } // k = 10, 9, 8, 7, 6 -> jch_type[1][k] = 0,1,2,3,4
360  for (Int_t k = 11; k <= 15; k++) {
361  jch_type[1][k] = k - 11;
362  } // k = 11,12,13,14,15 -> jch_type[1][k] = 0,1,2,3,4
363  for (Int_t k = 20; k >= 16; k--) {
364  jch_type[1][k] = 20 - k;
365  } // k = 20,19,18,17,16 -> jch_type[1][k] = 0,1,2,3,4
366  for (Int_t k = 21; k <= 25; k++) {
367  jch_type[1][k] = k - 21;
368  } // k = 21,22,23,24,25 -> jch_type[1][k] = 0,1,2,3,4
369 
370  // Int_t ich_type[2][26];
371  Int_t** ich_type = new Int_t*[m2];
372  fCnew++;
373  Int_t* ich_type_d1 = new Int_t[m2 * m26];
374  fCnew++;
375  for (Int_t i_m2 = 0; i_m2 < m2; i_m2++) {
376  ich_type[i_m2] = &ich_type_d1[0] + i_m2 * m26;
377  }
378 
379  for (Int_t k = 25; k >= 21; k--) {
380  ich_type[0][k] = 0;
381  } // k = 25,24,23,22,21 -> ich_type[0][k] = 0
382  for (Int_t k = 16; k <= 20; k++) {
383  ich_type[0][k] = 1;
384  } // k = 16,17,18,19,20 -> ich_type[0][k] = 1
385  for (Int_t k = 15; k >= 11; k--) {
386  ich_type[0][k] = 2;
387  } // k = 15,14,12,13,11 -> ich_type[0][k] = 2
388  for (Int_t k = 6; k <= 10; k++) {
389  ich_type[0][k] = 3;
390  } // k = 6, 7, 8, 9,10 -> ich_type[0][k] = 3
391  for (Int_t k = 5; k >= 1; k--) {
392  ich_type[0][k] = 4;
393  } // k = 5, 4, 3, 2, 1 -> ich_type[0][k] = 4
394 
395  for (Int_t k = 1; k <= 5; k++) {
396  ich_type[1][k] = 0;
397  } // k = 1, 2, 3, 4, 5 -> ich_type[1][k] = 0
398  for (Int_t k = 10; k >= 6; k--) {
399  ich_type[1][k] = 1;
400  } // k = 10, 9, 8, 7, 6 -> ich_type[1][k] = 1
401  for (Int_t k = 11; k <= 15; k++) {
402  ich_type[1][k] = 2;
403  } // k = 11,12,13,14,15 -> ich_type[1][k] = 2
404  for (Int_t k = 20; k >= 16; k--) {
405  ich_type[1][k] = 3;
406  } // k = 20,19,18,17,16 -> ich_type[1][k] = 3
407  for (Int_t k = 21; k <= 25; k++) {
408  ich_type[1][k] = 4;
409  } // k = 21,22,23,24,25 -> ich_type[1][k] = 4
410 
411  // Int_t type[17]={0,0,0,1,1, 0,0,1,1, 0,0,1,1, 0,0,1,1};
412  Int_t m17 = 17;
413  Int_t* type = new Int_t[m17];
414  fCnew++;
415 
416  // 0 -> LVRB at the bottom, 1 -> LVRB at the top
417  type[0] = 0; // M1
418  type[1] = 0;
419  type[2] = 0;
420  type[3] = 1;
421  type[4] = 1;
422 
423  type[5] = 0; // M2
424  type[6] = 0;
425  type[7] = 1;
426  type[8] = 1;
427 
428  type[9] = 0; // M3
429  type[10] = 0;
430  type[11] = 1;
431  type[12] = 1;
432 
433  type[13] = 0; // M4
434  type[14] = 0;
435  type[15] = 1;
436  type[16] = 1;
437 
438  for (Int_t tow = 0; tow < MaxSMTow; tow++) // tow = 0 to 67 (MaxSMTow = 68)
439  {
440  for (Int_t ic = 1; ic <= MaxTowEcha; ic++) // ic = 1 to 25 (MaxTowEcha = 25)
441  {
442  Int_t jtow = tow % 4; // jtow = 0,1,2,3
443  Int_t itow = tow / 4; // itow = 0 to 16
444 
445  Int_t icrys = itow * 5 + ich_type[type[itow]][ic]; // type[0->16] = 0,1 ,
446  // ich_type[0->1][1->25] = 0,1,2,3,4
447  // icrys = 0 to 84 (=> eta)
448 
449  Int_t jcrys = jtow * 5 + jch_type[type[itow]][ic]; // type[0->16] = 0,1 ,
450  // jch_type[0->1][1->25] = 0,1,2,3,4
451  // jcrys = 0 to 19 (=> phi)
452 
453  Int_t n1SMCrys = icrys * 20 + jcrys + 1; // n1SMCrys = 1 to 1700
454 
455  fT2dSMCrys[tow][ic - 1] = n1SMCrys; // fT2dSMCrys[] : range = [1,1700]
456  fT1dSMTow[n1SMCrys - 1] = tow + 1; // fT1dSMTow[] : range = [1,68]
457  fT1dTowEcha[n1SMCrys - 1] = ic - 1; // fT1dTowEcha[] : range = [0,24]
458  }
459  }
460  // std::cout << "#TEcnaNumbering::TBuildBarrelCrysTable()> Crys Table Building done" << std::endl;
461 
462  delete[] jch_type;
463  fCdelete++;
464  delete[] jch_type_d1;
465  fCdelete++;
466  delete[] ich_type;
467  fCdelete++;
468  delete[] ich_type_d1;
469  fCdelete++;
470  delete[] type;
471  fCdelete++;
472  } else {
473  // std::cout << "#TEcnaNumbering::TBuildBarrelCrysTable()> No Building of Crys Table since it is already done." << std::endl;
474  }
475 }
476 
477 //===============================================================================
478 //
479 // GetSMCrysFrom1SMTowAnd0TowEcha
480 // GetSMCrysFromSMEcha
481 //
482 //===============================================================================
483 Int_t TEcnaNumbering::Get1SMCrysFrom1SMTowAnd0TowEcha(const Int_t& n1SMTow, const Int_t& i0TowEcha) {
484  //get crystal number in SM from tower number in SM
485  // and from Electronic Channel number in tower
486 
487  Int_t n1SMCrys = 0;
488 
489  if (fT2dSMCrys == nullptr) {
491  }
492 
493  if (n1SMTow >= 1 && n1SMTow <= fEcal->MaxTowInSM()) {
494  if (i0TowEcha >= 0 && i0TowEcha < fEcal->MaxCrysInTow()) {
495  n1SMCrys = fT2dSMCrys[n1SMTow - 1][i0TowEcha];
496  } else {
497  n1SMCrys = -2; // Electronic Cnannel in Tower out of range
498  std::cout << "!TEcnaNumbering::Get1SMCrysFrom1SMTowAnd0TowEcha(...)> Electronic Channel in Tower out of range."
499  << " i0TowEcha = " << i0TowEcha << "(n1SMTow = " << n1SMTow << ")" << fTTBELL << std::endl;
500  }
501  } else {
502  n1SMCrys = -3; // Tower number in SM out of range
503  std::cout << "!TEcnaNumbering::Get1SMCrysFrom1SMTowAnd0TowEcha(...)> Tower number in SM out of range."
504  << " n1SMTow = " << n1SMTow << "(i0TowEcha = " << i0TowEcha << ")" << fTTBELL << std::endl;
505  }
506 
507  return n1SMCrys; // Range = [1,1700]
508 }
509 
510 //===============================================================================
511 //
512 // Get0TowEchaFrom1SMCrys, Get1SMTowFrom1SMCrys
513 //
514 //===============================================================================
515 
516 Int_t TEcnaNumbering::Get0TowEchaFrom1SMCrys(const Int_t& n1SMCrys) {
517  // get Electronic Channel number in Tower from Crystal number in SuperModule
518 
519  Int_t i0TowEcha = -1;
520 
521  if (n1SMCrys >= 1 && n1SMCrys <= fEcal->MaxCrysInSM()) {
522  i0TowEcha = fT1dTowEcha[n1SMCrys - 1];
523  } else {
524  i0TowEcha = -2;
525  std::cout << "!TEcnaNumbering::Get0TowEchaFrom1SMCrys(...)> Crystal number in SM out of range."
526  << " n1SMCrys = " << n1SMCrys << fTTBELL << std::endl;
527  }
528  return i0TowEcha; // range = [0,24]
529 }
530 
531 Int_t TEcnaNumbering::Get1SMTowFrom1SMCrys(const Int_t& n1SMCrys) {
532  // get Tower number in SM (range [1,68]) from Crystal number in SuperModule (range [1,1700])
533 
534  Int_t n1SMtox = 0;
535 
536  if (n1SMCrys >= 1 && n1SMCrys <= fEcal->MaxCrysInSM()) {
537  n1SMtox = fT1dSMTow[n1SMCrys - 1];
538  } else {
539  n1SMtox = -1;
540  std::cout << "!TEcnaNumbering::Get1SMTowFrom1SMCrys(...)> Crystal number in SM out of range."
541  << " n1SMCrys = " << n1SMCrys << fTTBELL << std::endl;
542  }
543  return n1SMtox; // range = [1,68]
544 }
545 
546 //===============================================================================
547 //
548 // Get0TowEchaFrom0SMEcha
549 // Get1SMTowFrom0SMEcha
550 //
551 //===============================================================================
552 
553 Int_t TEcnaNumbering::Get0TowEchaFrom0SMEcha(const Int_t& i0SMEcha) {
554  //get electronic channel number in tower from electronic channel number in SM
555 
556  Int_t n1SMTow = i0SMEcha / fEcal->MaxCrysInTow() + 1;
557  Int_t i0TowEcha = i0SMEcha - fEcal->MaxCrysInTow() * (n1SMTow - 1);
558 
559  return i0TowEcha; // range = [0,24]
560 }
561 
562 Int_t TEcnaNumbering::Get1SMTowFrom0SMEcha(const Int_t& i0SMEcha) {
563  //get tower number from electronic channel number in SM
564 
565  Int_t n1SMTow = i0SMEcha / fEcal->MaxCrysInTow() + 1;
566 
567  return n1SMTow; // range = [1,68]
568 }
569 
570 Int_t TEcnaNumbering::Get0SMEchaFrom1SMTowAnd0TowEcha(const Int_t& n1SMTow, const Int_t& i0TowEcha) {
571  //get tower number from electronic channel number in SM
572 
573  Int_t i0SMEcha = (n1SMTow - 1) * fEcal->MaxCrysInTow() + i0TowEcha;
574 
575  return i0SMEcha;
576 }
577 //===========================================================================
578 //
579 // GetHashedNumberFromIEtaAndIPhi
580 //
581 //===========================================================================
582 Int_t TEcnaNumbering::GetHashedNumberFromIEtaAndIPhi(const Int_t& IEta, const Int_t& IPhi) {
583  Int_t Hashed = 0;
584 
585  if (IEta > 0) {
586  Hashed = (85 + IEta - 1) * 360 + IPhi - 1;
587  }
588  if (IEta < 0) {
589  Hashed = (85 + IEta) * 360 + IPhi - 1;
590  }
591 
592  return Hashed;
593 }
594 
595 Int_t TEcnaNumbering::GetIEtaFromHashed(const Int_t& Hashed, const Int_t& SMNumber) {
596  Int_t IEta = 0;
597 
598  if (GetSMHalfBarrel(SMNumber) == "EB+") {
599  IEta = Hashed / 360 - 85 + 1;
600  }
601  if (GetSMHalfBarrel(SMNumber) == "EB-") {
602  IEta = 85 + Hashed / 360;
603  }
604 
605  return IEta;
606 }
607 
608 Int_t TEcnaNumbering::GetIPhiFromHashed(const Int_t& Hashed) {
609  Int_t IPhi = Hashed % 360 + 1;
610 
611  return IPhi;
612 }
613 //===========================================================================
614 //
615 // GetTowerLvrbType
616 //
617 //===========================================================================
618 TString TEcnaNumbering::GetStinLvrbType(const Int_t& n1SMTow) {
619  TString lvrb_type = GetTowerLvrbType(n1SMTow);
620  return lvrb_type;
621 }
622 TString TEcnaNumbering::GetTowerLvrbType(const Int_t& n1SMTow) {
623  //gives the LVRB type of the crystal numbering of tower
624 
625  TString type = fCodeChNumberingLvrbTop; // => default value
626 
627  if (n1SMTow >= 1 && n1SMTow <= 12) {
629  }
630  if (n1SMTow >= 21 && n1SMTow <= 28) {
632  }
633  if (n1SMTow >= 37 && n1SMTow <= 44) {
635  }
636  if (n1SMTow >= 53 && n1SMTow <= 60) {
638  }
639 
640  return type;
641 }
642 
643 //==============================================================================
644 //
645 // GetEta, GetEtaMin, GetEtaMax, GetIEtaMin, GetIEtaMax
646 //
647 //==============================================================================
648 Double_t TEcnaNumbering::GetEta(const Int_t& n1EBSM, const Int_t& n1SMTow, const Int_t& i0TowEcha) {
649  //Gives Eta for a given (n1EBSM, n1SMTow, i0TowEcha)
650 
651  Double_t eta = (Double_t)0.;
652 
653  Int_t max_crys_eta_in_tower = fEcal->MaxCrysEtaInTow();
654  Int_t max_tow_eta_in_sm = fEcal->MaxTowEtaInSM();
655  Int_t max_sm_in_barrel = fEcal->MaxSMInEB();
656 
657  if (n1EBSM >= 1 && n1EBSM <= max_sm_in_barrel) {
658  for (Int_t i_sm_tow_eta = 0; i_sm_tow_eta < max_tow_eta_in_sm; i_sm_tow_eta++) {
659  Int_t i_crys_eta_min = (Int_t)(1 + i_sm_tow_eta * (max_crys_eta_in_tower - 1));
660  Int_t i_crys_eta_max = (Int_t)((i_sm_tow_eta + 1) * (max_crys_eta_in_tower - 1));
661  Int_t i_crys_eta = (Int_t)(i_sm_tow_eta * max_crys_eta_in_tower);
662  // = 0,..,16 -> last xtal in eta for the previous tower
663  Double_t d_echa_eta = (Double_t)(i0TowEcha / max_crys_eta_in_tower); // = 0,1,2,3,4
664 
665  if (n1SMTow >= i_crys_eta_min && n1SMTow <= i_crys_eta_max) {
666  if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbTop) {
667  eta = (Double_t)(i_crys_eta) + d_echa_eta + 1;
668  }
669  if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbBot) {
670  eta = (Double_t)(i_crys_eta + max_crys_eta_in_tower) - d_echa_eta;
671  }
672  }
673  }
674  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
675  eta = -eta;
676  }
677  } else {
678  std::cout << "TEcnaNumbering::GetEta(...)> SM = " << n1EBSM << ". Out of range (range = [1," << fEcal->MaxSMInEB()
679  << "])" << fTTBELL << std::endl;
680  }
681  return eta;
682 }
683 //-------------------------------------------------------------------------------------
684 Double_t TEcnaNumbering::GetEtaMin(const Int_t& n1EBSM, const Int_t& n1SMTow) {
685  //Gives EtaMin for a given Tower
686 
687  Int_t max_tow_eta_in_sm = fEcal->MaxTowEtaInSM();
688  Int_t max_crys_eta_in_tower = fEcal->MaxCrysEtaInTow();
689 
690  Double_t eta_min = (Double_t)0.;
691 
692  for (Int_t i_sm_tow_eta = 0; i_sm_tow_eta < max_tow_eta_in_sm; i_sm_tow_eta++) {
693  Int_t i_crys_eta_min = (Int_t)(1 + i_sm_tow_eta * (max_crys_eta_in_tower - 1));
694  Int_t i_crys_eta_max = (Int_t)((i_sm_tow_eta + 1) * (max_crys_eta_in_tower - 1));
695  Int_t i_crys_eta = (Int_t)(i_sm_tow_eta * max_crys_eta_in_tower);
696 
697  if (n1SMTow >= i_crys_eta_min && n1SMTow <= i_crys_eta_max) {
698  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
699  eta_min = (Double_t)i_crys_eta;
700  }
701  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
702  eta_min = -(Double_t)(i_crys_eta + max_crys_eta_in_tower);
703  }
704  }
705  }
706  return eta_min;
707 }
708 //------------------------------------------------------------------------------------
709 Double_t TEcnaNumbering::GetEtaMax(const Int_t& n1EBSM, const Int_t& n1SMTow) {
710  //Gives EtaMax for a given Tower
711 
712  Int_t max_tow_eta_in_sm = fEcal->MaxTowEtaInSM();
713  Int_t max_crys_eta_in_tower = fEcal->MaxCrysEtaInTow();
714 
715  Double_t eta_max = (max_crys_eta_in_tower - 1);
716 
717  for (Int_t i_sm_tow_eta = 0; i_sm_tow_eta < max_tow_eta_in_sm; i_sm_tow_eta++) {
718  Int_t i_crys_eta_min = (Int_t)(1 + i_sm_tow_eta * (max_crys_eta_in_tower - 1));
719  Int_t i_crys_eta_max = (Int_t)((i_sm_tow_eta + 1) * (max_crys_eta_in_tower - 1));
720  Int_t i_crys_eta = (Int_t)(i_sm_tow_eta * max_crys_eta_in_tower);
721 
722  if (n1SMTow >= i_crys_eta_min && n1SMTow <= i_crys_eta_max) {
723  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
724  eta_max = (Double_t)(i_crys_eta + max_crys_eta_in_tower);
725  }
726  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
727  eta_max = -(Double_t)i_crys_eta;
728  }
729  }
730  }
731 
732  return eta_max;
733 }
734 
735 Double_t TEcnaNumbering::GetIEtaMin(const Int_t& n1EBSM, const Int_t& n1SMTow) {
736  //Gives IEtaMin for a given (n1EBSM, n1SMTow)
737 
738  Double_t i_eta_min = (Int_t)0.;
739 
740  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
741  i_eta_min = (Double_t)GetEtaMin(n1EBSM, n1SMTow) + (Double_t)0.5;
742  }
743  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
744  i_eta_min = (Double_t)GetEtaMin(n1EBSM, n1SMTow) - (Double_t)0.5;
745  }
746 
747  return i_eta_min;
748 }
749 
750 Double_t TEcnaNumbering::GetIEtaMax(const Int_t& n1EBSM, const Int_t& n1SMTow) {
751  //Gives IEtaMax for a given (n1EBSM, n1SMTow)
752 
753  Double_t i_eta_max = (Int_t)0.;
754 
755  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
756  i_eta_max = (Double_t)GetEtaMax(n1EBSM, n1SMTow) + (Double_t)0.5;
757  }
758  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
759  i_eta_max = (Double_t)GetEtaMax(n1EBSM, n1SMTow) - (Double_t)0.5;
760  }
761 
762  return i_eta_max;
763 }
764 
765 Double_t TEcnaNumbering::GetIEtaMin(const Int_t& n1EBSM) {
766  //Gives IEtaMin for a given (n1EBSM)
767 
768  Double_t i_eta_min = (Int_t)0.;
769 
770  Int_t n1SMTowPlus = (Int_t)1;
771  Int_t n1SMTowMinus = (Int_t)fEcal->MaxTowInSM();
772 
773  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
774  i_eta_min = (Double_t)GetIEtaMin(n1EBSM, n1SMTowPlus);
775  }
776  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
777  i_eta_min = (Double_t)GetIEtaMin(n1EBSM, n1SMTowMinus);
778  }
779 
780  return i_eta_min;
781 }
782 
783 Double_t TEcnaNumbering::GetIEtaMax(const Int_t& n1EBSM) {
784  //Gives IEtaMax for a given (n1EBSM)
785 
786  Double_t i_eta_max = (Int_t)0.;
787 
788  Int_t n1SMTowPlus = (Int_t)fEcal->MaxTowInSM();
789  Int_t n1SMTowMinus = (Int_t)1;
790 
791  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
792  i_eta_max = (Double_t)GetIEtaMax(n1EBSM, n1SMTowPlus);
793  }
794  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
795  i_eta_max = (Double_t)GetIEtaMax(n1EBSM, n1SMTowMinus);
796  }
797 
798  return i_eta_max;
799 }
800 
801 //==============================================================================
802 //
803 // GetSMCentralPhi, GetPhiInSM, GetPhi,
804 // GetPhiMin, GetPhiMax, GetIPhiMin, GetIPhiMax
805 //
806 //==============================================================================
807 Double_t TEcnaNumbering::GetSMCentralPhi(const Int_t& n1EBSM) {
808  //Gives the central phi value of the SuperModule
809 
810  Double_t central_phi = (Double_t)10.; // DEFAULT = SM1
811 
812  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
813  central_phi = 10. + (Double_t)20. * (n1EBSM - 1);
814  }
815  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
816  central_phi = 10. + (Double_t)20. * (n1EBSM - 19);
817  }
818 
819  return central_phi;
820 }
821 //------------------------------------------------------------------------------------
822 Double_t TEcnaNumbering::GetPhiInSM(const Int_t& n1EBSM, const Int_t& n1SMTow, const Int_t& i0TowEcha) {
823  //Gives Phi for a given (n1EBSM, n1SMTow, i0TowEcha)
824 
825  Double_t phi_in_SM = (Double_t)0.;
826 
827  Int_t rest_temp = (Int_t)(n1SMTow % (fEcal->MaxCrysPhiInTow() - 1)); // "Phi" of the tower = 1,2,3,0
828 
829  if (n1EBSM >= 1 && n1EBSM <= fEcal->MaxSMInEB()) {
830  if (rest_temp == 1) {
831  phi_in_SM = (Double_t)15.;
832  }
833  if (rest_temp == 2) {
834  phi_in_SM = (Double_t)10.;
835  }
836  if (rest_temp == 3) {
837  phi_in_SM = (Double_t)5.;
838  }
839  if (rest_temp == 0) {
840  phi_in_SM = (Double_t)0.;
841  }
842 
843  if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbTop) {
844  if (i0TowEcha == 4 || i0TowEcha == 5 || i0TowEcha == 14 || i0TowEcha == 15 || i0TowEcha == 24) {
845  phi_in_SM = phi_in_SM + 0;
846  }
847 
848  if (i0TowEcha == 3 || i0TowEcha == 6 || i0TowEcha == 13 || i0TowEcha == 16 || i0TowEcha == 23) {
849  phi_in_SM = phi_in_SM + 1;
850  }
851 
852  if (i0TowEcha == 2 || i0TowEcha == 7 || i0TowEcha == 12 || i0TowEcha == 17 || i0TowEcha == 22) {
853  phi_in_SM = phi_in_SM + 2;
854  }
855 
856  if (i0TowEcha == 1 || i0TowEcha == 8 || i0TowEcha == 11 || i0TowEcha == 18 || i0TowEcha == 21) {
857  phi_in_SM = phi_in_SM + 3;
858  }
859 
860  if (i0TowEcha == 0 || i0TowEcha == 9 || i0TowEcha == 10 || i0TowEcha == 19 || i0TowEcha == 20) {
861  phi_in_SM = phi_in_SM + 4;
862  }
863  }
864  if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbBot) {
865  if (i0TowEcha == 20 || i0TowEcha == 19 || i0TowEcha == 10 || i0TowEcha == 9 || i0TowEcha == 0) {
866  phi_in_SM = phi_in_SM + 0;
867  }
868 
869  if (i0TowEcha == 21 || i0TowEcha == 18 || i0TowEcha == 11 || i0TowEcha == 8 || i0TowEcha == 1) {
870  phi_in_SM = phi_in_SM + 1;
871  }
872 
873  if (i0TowEcha == 22 || i0TowEcha == 17 || i0TowEcha == 12 || i0TowEcha == 7 || i0TowEcha == 2) {
874  phi_in_SM = phi_in_SM + 2;
875  }
876 
877  if (i0TowEcha == 23 || i0TowEcha == 16 || i0TowEcha == 13 || i0TowEcha == 6 || i0TowEcha == 3) {
878  phi_in_SM = phi_in_SM + 3;
879  }
880 
881  if (i0TowEcha == 24 || i0TowEcha == 15 || i0TowEcha == 14 || i0TowEcha == 5 || i0TowEcha == 4) {
882  phi_in_SM = phi_in_SM + 4;
883  }
884  }
885  } else {
886  std::cout << "TEcnaNumbering::GetPhiInSM(...)> SM = " << n1EBSM << ". Out of range (range = [1,"
887  << fEcal->MaxSMInEB() << "])" << fTTBELL << std::endl;
888  }
889  phi_in_SM = 20 - phi_in_SM;
890  return phi_in_SM;
891 }
892 //---------------------------------------------------------------------------------------
893 Double_t TEcnaNumbering::GetPhi(const Int_t& n1EBSM, const Int_t& n1SMTow, const Int_t& i0TowEcha) {
894  //Gives Phi for a given (n1EBSM, n1SMTow, i0TowEcha)
895 
896  Double_t phi = (Double_t)0.;
897 
898  if (n1EBSM >= 1 && n1EBSM <= fEcal->MaxSMInEB()) {
899  Double_t phiInSM = GetPhiInSM(n1EBSM, n1SMTow, i0TowEcha);
900  Double_t phi_start = GetSMCentralPhi(n1EBSM);
901 
902  phi = 20 - phiInSM + phi_start - (Double_t)10.;
903  } else {
904  std::cout << "TEcnaNumbering::GetPhi(...)> SM = " << n1EBSM << ". Out of range (range = [1," << fEcal->MaxSMInEB()
905  << "])" << fTTBELL << std::endl;
906  }
907  return phi;
908 }
909 
910 //-----------------------------------------------------------------------------------------
911 Double_t TEcnaNumbering::GetPhiMin(const Int_t& n1EBSM, const Int_t& n1SMTow) {
912  //Gives PhiMin for a given Tower
913 
914  Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
915 
916  Double_t phi_min = (Double_t)0.; // DEFAULT
917  Double_t phi_start = GetSMCentralPhi(n1EBSM);
918 
919  Int_t rest_temp = (Int_t)(n1SMTow % (max_crys_phi_in_tower - 1));
920 
921  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
922  if (rest_temp == 1) {
923  phi_min = phi_start + (Double_t)5.;
924  }
925  if (rest_temp == 2) {
926  phi_min = phi_start + (Double_t)0.;
927  }
928  if (rest_temp == 3) {
929  phi_min = phi_start - (Double_t)5.;
930  }
931  if (rest_temp == 0) {
932  phi_min = phi_start - (Double_t)10.;
933  }
934  }
935  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
936  if (rest_temp == 0) {
937  phi_min = phi_start + (Double_t)5.;
938  }
939  if (rest_temp == 3) {
940  phi_min = phi_start + (Double_t)0.;
941  }
942  if (rest_temp == 2) {
943  phi_min = phi_start - (Double_t)5.;
944  }
945  if (rest_temp == 1) {
946  phi_min = phi_start - (Double_t)10.;
947  }
948  }
949  return phi_min;
950 }
951 //-----------------------------------------------------------------------------------------
952 Double_t TEcnaNumbering::GetPhiMax(const Int_t& n1EBSM, const Int_t& n1SMTow) {
953  //Gives PhiMax for a given Tower
954 
955  Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
956 
957  Double_t phi_max = (Double_t)20.; // DEFAULT
958  Double_t phi_start = GetSMCentralPhi(n1EBSM);
959 
960  Int_t rest_temp = (Int_t)(n1SMTow % (max_crys_phi_in_tower - 1));
961 
962  if (GetSMHalfBarrel(n1EBSM) == "EB+") {
963  if (rest_temp == 1) {
964  phi_max = phi_start + (Double_t)10.;
965  }
966  if (rest_temp == 2) {
967  phi_max = phi_start + (Double_t)5.;
968  }
969  if (rest_temp == 3) {
970  phi_max = phi_start - (Double_t)0.;
971  }
972  if (rest_temp == 0) {
973  phi_max = phi_start - (Double_t)5.;
974  }
975  }
976 
977  if (GetSMHalfBarrel(n1EBSM) == "EB-") {
978  if (rest_temp == 0) {
979  phi_max = phi_start + (Double_t)10.;
980  }
981  if (rest_temp == 3) {
982  phi_max = phi_start + (Double_t)5.;
983  }
984  if (rest_temp == 2) {
985  phi_max = phi_start - (Double_t)0.;
986  }
987  if (rest_temp == 1) {
988  phi_max = phi_start - (Double_t)5.;
989  }
990  }
991 
992  return phi_max;
993 }
994 //-----------------------------------------------------------------------------------------
995 Double_t TEcnaNumbering::GetPhiMin(const Int_t& n1EBSM) {
996  //Gives PhiMin for a given SuperModule
997 
998  Double_t phi_min = GetSMCentralPhi(n1EBSM) - (Double_t)10.;
999 
1000  return phi_min;
1001 }
1002 //-----------------------------------------------------------------------------------------
1003 Double_t TEcnaNumbering::GetPhiMax(const Int_t& n1EBSM) {
1004  //Gives PhiMax for a given SuperModule
1005 
1006  Double_t phi_max = GetSMCentralPhi(n1EBSM) + (Double_t)10.;
1007 
1008  return phi_max;
1009 }
1010 //-----------------------------------------------------------------------------------------
1011 Double_t TEcnaNumbering::GetJPhiMin(const Int_t& n1EBSM, const Int_t& n1SMTow) {
1012  //Gives JPhiMin for a given Tower
1013 
1014  Double_t j_phi_min = (Double_t)1.;
1015  Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
1016  Int_t rest_temp = (Int_t)(n1SMTow % (max_crys_phi_in_tower - 1));
1017 
1018  if (rest_temp == 1) {
1019  j_phi_min = (Double_t)1. - (Double_t)0.5;
1020  }
1021  if (rest_temp == 2) {
1022  j_phi_min = (Double_t)6. - (Double_t)0.5;
1023  }
1024  if (rest_temp == 3) {
1025  j_phi_min = (Double_t)11. - (Double_t)0.5;
1026  }
1027  if (rest_temp == 0) {
1028  j_phi_min = (Double_t)16. - (Double_t)0.5;
1029  }
1030 
1031  return j_phi_min;
1032 }
1033 //-----------------------------------------------------------------------------------------
1034 Double_t TEcnaNumbering::GetJPhiMax(const Int_t& n1EBSM, const Int_t& n1SMTow) {
1035  //Gives JPhiMax for a given Tower
1036 
1037  Double_t j_phi_max = (Double_t)20.;
1038  Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
1039  Int_t rest_temp = (Int_t)(n1SMTow % (max_crys_phi_in_tower - 1));
1040 
1041  if (rest_temp == 1) {
1042  j_phi_max = (Double_t)5. + (Double_t)0.5;
1043  }
1044  if (rest_temp == 2) {
1045  j_phi_max = (Double_t)10. + (Double_t)0.5;
1046  }
1047  if (rest_temp == 3) {
1048  j_phi_max = (Double_t)15. + (Double_t)0.5;
1049  }
1050  if (rest_temp == 0) {
1051  j_phi_max = (Double_t)20. + (Double_t)0.5;
1052  }
1053 
1054  return j_phi_max;
1055 }
1056 
1057 //-----------------------------------------------------------------------------------------
1058 Double_t TEcnaNumbering::GetJPhiMin(const Int_t& n1EBSM) {
1059  //Gives JPhiMin for a given SuperModule
1060 
1061  Double_t j_phi_min = (Double_t)1. - (Double_t)0.5;
1062 
1063  return j_phi_min;
1064 }
1065 //-----------------------------------------------------------------------------------------
1066 Double_t TEcnaNumbering::GetJPhiMax(const Int_t& n1EBSM) {
1067  //Gives JPhiMax for a given SuperModule
1068 
1069  Double_t j_phi_max = (Double_t)20. + (Double_t)0.5;
1070 
1071  return j_phi_max;
1072 }
1073 
1074 //==============================================================================
1075 //
1076 // GetXDirectionEB, GetYDirectionEB, GetJYDirectionEB
1077 //
1078 //==============================================================================
1079 
1080 //------------------------------------------------------------------
1081 TString TEcnaNumbering::GetXDirectionEB(const Int_t& SMNumber) {
1082  TString xdirection = "x"; // DEFAULT
1083 
1084  if (GetSMHalfBarrel(SMNumber) == "EB+") {
1085  xdirection = "x";
1086  }
1087  if (GetSMHalfBarrel(SMNumber) == "EB-") {
1088  xdirection = "x";
1089  }
1090 
1091  return xdirection;
1092 }
1093 //---------------------------------------------------------
1094 TString TEcnaNumbering::GetYDirectionEB(const Int_t& SMNumber) {
1095  TString ydirection = "-x"; // DEFAULT
1096 
1097  if (GetSMHalfBarrel(SMNumber) == "EB+") {
1098  ydirection = "-x";
1099  }
1100  if (GetSMHalfBarrel(SMNumber) == "EB-") {
1101  ydirection = "-x";
1102  }
1103 
1104  return ydirection;
1105 }
1106 
1107 //---------------------------------------------------------
1108 TString TEcnaNumbering::GetJYDirectionEB(const Int_t& SMNumber) {
1109  TString jydirection = "-x"; // DEFAULT
1110 
1111  if (GetSMHalfBarrel(SMNumber) == "EB+") {
1112  jydirection = "x";
1113  }
1114  if (GetSMHalfBarrel(SMNumber) == "EB-") {
1115  jydirection = "-x";
1116  }
1117 
1118  return jydirection;
1119 }
1120 
1121 //============================================================================
1122 TString TEcnaNumbering::GetSMHalfBarrel(const Int_t& SMNumber) {
1123  //gives the half-barrel of the SM ("EB+" or "EB-")
1124 
1125  TString type = "EB-"; // => default value
1126 
1127  if (SMNumber >= 1 && SMNumber <= fEcal->MaxSMInEBPlus()) {
1128  type = "EB+";
1129  }
1130  if (SMNumber > fEcal->MaxSMInEBPlus() && SMNumber <= fEcal->MaxSMInEB()) {
1131  type = "EB-";
1132  }
1133 
1134  return type;
1135 }
1136 
1137 Int_t TEcnaNumbering::PlusMinusSMNumber(const Int_t& PlusSMNumber) {
1138  Int_t PMSMNumber = PlusSMNumber;
1139  if (PlusSMNumber > fEcal->MaxSMPhiInEB()) {
1140  PMSMNumber = -PlusSMNumber + fEcal->MaxSMPhiInEB();
1141  }
1142  return PMSMNumber;
1143 }
1144 //====================================================================================================
1145 //
1146 //
1147 // E N D C A P
1148 //
1149 //
1150 //====================================================================================================
1151 //
1152 // DeeCrys <-> (DeeSC, SCEcha) correspondance table
1153 // (from the barrel table given by Patrick Jarry)
1154 //
1155 //====================================================================================================
1157  // Build the correspondance table: DeeCrys <-> (DeeSC, SCEcha) for the ECAL ENDCAP
1158  //
1159  // From CMS Internal Note "CMS ECAL Endcap channel numbering"
1160  //
1161  // Name Number Reference set Range Comment
1162  //
1163  // DeeSC : Super-Crystal (SC) number in Dee [1,200] (IY,IX) progression
1164  // DeeCrys : Crystal number in Dee [1,5000] (IY,IX) progression
1165  // DeeEcha : Electronic channel number in Dee [0,4999] Crystal numbering for construction
1166  //
1167  // SCEcha : Electronic channel number in SC [1,25] Crystal numbering for construction
1168  //
1169  //
1170  // fill the 3D array: fT3dDeeCrys[n_DeeSC][n_SCEcha][2]
1171  //
1172  // and the 2d arrays: fT2dDeeSC[n_DeeCrys][2] and fT2dSCEcha[n_DeeCrys][2]
1173  //
1174  //------------------------------------------------------------------------------------------------------
1175 
1176  if (fT3dDeeCrys == nullptr) {
1177  Int_t MaxDeeSC = fEcal->MaxSCEcnaInDee(); // fEcal->MaxSCEcnaInDee() = 200
1178  Int_t MaxSCEcha = fEcal->MaxCrysInSC();
1179  Int_t MaxDeeCrys = fEcal->MaxCrysEcnaInDee();
1180 
1181  Int_t MaxDirections = 2; // (2 directions: left and right)
1182 
1183  //................... Allocation and Init CrysNumbersTable
1184  fT3dDeeCrys = new Int_t**[MaxDeeSC];
1185  fCnew++;
1186  fT2dDeeCrys = new Int_t*[MaxDeeSC * MaxSCEcha];
1187  fCnew++;
1188  fT1dDeeCrys = new Int_t[MaxDeeSC * MaxSCEcha * MaxDirections];
1189  fCnew++;
1190 
1191  for (Int_t i_DeeSC = 0; i_DeeSC < MaxDeeSC; i_DeeSC++) {
1192  fT3dDeeCrys[i_DeeSC] = &fT2dDeeCrys[0] + i_DeeSC * MaxSCEcha;
1193  for (Int_t i_SCEcha = 0; i_SCEcha < MaxSCEcha; i_SCEcha++) {
1194  fT2dDeeCrys[i_DeeSC * MaxSCEcha + i_SCEcha] =
1195  &fT1dDeeCrys[0] + (i_DeeSC * MaxSCEcha + i_SCEcha) * MaxDirections;
1196  }
1197  }
1198  for (Int_t i = 0; i < MaxDeeSC; i++) {
1199  for (Int_t j = 0; j < MaxSCEcha; j++) {
1200  for (Int_t k = 0; k < MaxDirections; k++) {
1201  fT3dDeeCrys[i][j][k] = 0;
1202  }
1203  }
1204  }
1205 
1206  fT2dDeeSC = new Int_t*[MaxDeeCrys];
1207  fCnew++;
1208  fT1dDeeSC = new Int_t[MaxDeeCrys * MaxDirections];
1209  fCnew++;
1210  for (Int_t i_DeeCrys = 0; i_DeeCrys < MaxDeeCrys; i_DeeCrys++) {
1211  fT2dDeeSC[i_DeeCrys] = &fT1dDeeSC[0] + i_DeeCrys * MaxDirections;
1212  }
1213  for (Int_t i = 0; i < MaxDeeCrys; i++) {
1214  for (Int_t j = 0; j < MaxDirections; j++) {
1215  fT2dDeeSC[i][j] = 0;
1216  }
1217  }
1218 
1219  fT2dSCEcha = new Int_t*[MaxDeeCrys];
1220  fCnew++;
1221  fT1dSCEcha = new Int_t[MaxDeeCrys * MaxDirections];
1222  fCnew++;
1223  for (Int_t i_DeeCrys = 0; i_DeeCrys < MaxDeeCrys; i_DeeCrys++) {
1224  fT2dSCEcha[i_DeeCrys] = &fT1dSCEcha[0] + i_DeeCrys * MaxDirections;
1225  }
1226  for (Int_t i = 0; i < MaxDeeCrys; i++) {
1227  for (Int_t j = 0; j < MaxDirections; j++) {
1228  fT2dSCEcha[i][j] = 0;
1229  }
1230  }
1231 
1232  //................................ Build table
1233  Int_t MaxTyp = (Int_t)4;
1234  Int_t MaxCrysP1 = (Int_t)(fEcal->MaxCrysInSC() + 1);
1235 
1236  // Int_t fT2d_jch_JY[type][Echa+1]: JY in the SC as a function of type and Echa+1
1237  fT2d_jch_JY = new Int_t*[MaxTyp];
1238  fCnew++;
1239  fT1d_jch_JY = new Int_t[MaxTyp * MaxCrysP1];
1240  fCnew++;
1241  for (Int_t i_MaxTyp = 0; i_MaxTyp < MaxTyp; i_MaxTyp++) {
1242  fT2d_jch_JY[i_MaxTyp] = &fT1d_jch_JY[0] + i_MaxTyp * MaxCrysP1;
1243  }
1244 
1245  // type: 0=(top/right), 1=(top/left), 2=(bottom/left), 3=(bottom/right),
1246 
1247  //................. top/right
1248  for (Int_t k = 5; k >= 1; k--) {
1249  fT2d_jch_JY[0][k] = 4;
1250  } // k = 5, 4, 3, 2, 1 -> fT2d_jch_JY[0][k] = 4
1251  for (Int_t k = 10; k >= 6; k--) {
1252  fT2d_jch_JY[0][k] = 3;
1253  } // k = 10, 9, 8, 7, 6 -> fT2d_jch_JY[0][k] = 3
1254  for (Int_t k = 15; k >= 11; k--) {
1255  fT2d_jch_JY[0][k] = 2;
1256  } // k = 15,14,13,12,11 -> fT2d_jch_JY[0][k] = 2
1257  for (Int_t k = 20; k >= 16; k--) {
1258  fT2d_jch_JY[0][k] = 1;
1259  } // k = 20,19,18,17,16 -> fT2d_jch_JY[0][k] = 1
1260  for (Int_t k = 25; k >= 21; k--) {
1261  fT2d_jch_JY[0][k] = 0;
1262  } // k = 25,24,23,22,21 -> fT2d_jch_JY[0][k] = 0
1263  //................. top/left
1264  for (Int_t k = 5; k >= 1; k--) {
1265  fT2d_jch_JY[1][k] = 5 - k;
1266  } // k = 5, 4, 3, 2, 1 -> fT2d_jch_JY[1][k] = 0,1,2,3,4
1267  for (Int_t k = 10; k >= 6; k--) {
1268  fT2d_jch_JY[1][k] = 10 - k;
1269  } // k = 10, 9, 8, 7, 6 -> fT2d_jch_JY[1][k] = 0,1,2,3,4
1270  for (Int_t k = 15; k >= 11; k--) {
1271  fT2d_jch_JY[1][k] = 15 - k;
1272  } // k = 15,14,13,12,11 -> fT2d_jch_JY[1][k] = 0,1,2,3,4
1273  for (Int_t k = 20; k >= 16; k--) {
1274  fT2d_jch_JY[1][k] = 20 - k;
1275  } // k = 20,19,18,17,16 -> fT2d_jch_JY[1][k] = 0,1,2,3,4
1276  for (Int_t k = 25; k >= 21; k--) {
1277  fT2d_jch_JY[1][k] = 25 - k;
1278  } // k = 25,24,23,22,21 -> fT2d_jch_JY[1][k] = 0,1,2,3,4
1279  //................. bottom/left
1280  for (Int_t k = 1; k <= 5; k++) {
1281  fT2d_jch_JY[2][k] = 0;
1282  } // k = 1, 2, 3, 4, 5 -> fT2d_jch_JY[2][k] = 0
1283  for (Int_t k = 6; k <= 10; k++) {
1284  fT2d_jch_JY[2][k] = 1;
1285  } // k = 6, 7, 8, 9,10 -> fT2d_jch_JY[2][k] = 1
1286  for (Int_t k = 11; k <= 15; k++) {
1287  fT2d_jch_JY[2][k] = 2;
1288  } // k = 11,12,13,14,15 -> fT2d_jch_JY[2][k] = 2
1289  for (Int_t k = 16; k <= 20; k++) {
1290  fT2d_jch_JY[2][k] = 3;
1291  } // k = 16,17,18,19,20 -> fT2d_jch_JY[2][k] = 3
1292  for (Int_t k = 21; k <= 25; k++) {
1293  fT2d_jch_JY[2][k] = 4;
1294  } // k = 21,22,23,24,25 -> fT2d_jch_JY[2][k] = 4
1295  //................. bottom/right
1296  for (Int_t k = 1; k <= 5; k++) {
1297  fT2d_jch_JY[3][k] = k - 1;
1298  } // k = 1, 2, 3, 4, 5 -> fT2d_jch_JY[3][k] = 0,1,2,3,4
1299  for (Int_t k = 6; k <= 10; k++) {
1300  fT2d_jch_JY[3][k] = k - 6;
1301  } // k = 6, 7, 8, 9,10 -> fT2d_jch_JY[3][k] = 0,1,2,3,4
1302  for (Int_t k = 11; k <= 15; k++) {
1303  fT2d_jch_JY[3][k] = k - 11;
1304  } // k = 11,12,13,14,15 -> fT2d_jch_JY[3][k] = 0,1,2,3,4
1305  for (Int_t k = 16; k <= 20; k++) {
1306  fT2d_jch_JY[3][k] = k - 16;
1307  } // k = 16,17,18,19,20 -> fT2d_jch_JY[3][k] = 0,1,2,3,4
1308  for (Int_t k = 21; k <= 25; k++) {
1309  fT2d_jch_JY[3][k] = k - 21;
1310  } // k = 21,22,23,24,25 -> fT2d_jch_JY[3][k] = 0,1,2,3,4
1311 
1312  // Int_t fT2d_ich_IX[type][Echa+1]: IX in the SC as a function of type and Echa+1
1313  fT2d_ich_IX = new Int_t*[MaxTyp];
1314  fCnew++;
1315  fT1d_ich_IX = new Int_t[MaxTyp * MaxCrysP1];
1316  fCnew++;
1317  for (Int_t i_MaxTyp = 0; i_MaxTyp < MaxTyp; i_MaxTyp++) {
1318  fT2d_ich_IX[i_MaxTyp] = &fT1d_ich_IX[0] + i_MaxTyp * MaxCrysP1;
1319  }
1320 
1321  //................. top/right
1322  for (Int_t k = 5; k >= 1; k--) {
1323  fT2d_ich_IX[0][k] = 5 - k;
1324  } // k = 5, 4, 3, 2, 1 -> fT2d_ich_IX[0][k] = 0,1,2,3,4
1325  for (Int_t k = 10; k >= 6; k--) {
1326  fT2d_ich_IX[0][k] = 10 - k;
1327  } // k = 10, 9, 8, 7, 6 -> fT2d_ich_IX[0][k] = 0,1,2,3,4
1328  for (Int_t k = 15; k >= 11; k--) {
1329  fT2d_ich_IX[0][k] = 15 - k;
1330  } // k = 15,14,13,12,11 -> fT2d_ich_IX[0][k] = 0,1,2,3,4
1331  for (Int_t k = 20; k >= 16; k--) {
1332  fT2d_ich_IX[0][k] = 20 - k;
1333  } // k = 20,19,18,17,16 -> fT2d_ich_IX[0][k] = 0,1,2,3,4
1334  for (Int_t k = 25; k >= 21; k--) {
1335  fT2d_ich_IX[0][k] = 25 - k;
1336  } // k = 25,24,23,22,21 -> fT2d_ich_IX[0][k] = 0,1,2,3,4
1337  //................. top/left
1338  for (Int_t k = 5; k >= 1; k--) {
1339  fT2d_ich_IX[1][k] = 4;
1340  } // k = 5, 4, 3, 2, 1 -> fT2d_ich_IX[1][k] = 4
1341  for (Int_t k = 10; k >= 6; k--) {
1342  fT2d_ich_IX[1][k] = 3;
1343  } // k = 10, 9, 8, 7, 6 -> fT2d_ich_IX[1][k] = 3
1344  for (Int_t k = 15; k >= 11; k--) {
1345  fT2d_ich_IX[1][k] = 2;
1346  } // k = 15,14,13,12,11 -> fT2d_ich_IX[1][k] = 2
1347  for (Int_t k = 20; k >= 16; k--) {
1348  fT2d_ich_IX[1][k] = 1;
1349  } // k = 20,19,18,17,16 -> fT2d_ich_IX[1][k] = 1
1350  for (Int_t k = 25; k >= 21; k--) {
1351  fT2d_ich_IX[1][k] = 0;
1352  } // k = 25,24,23,22,21 -> fT2d_ich_IX[1][k] = 0
1353  //................. bottom/left
1354  for (Int_t k = 1; k <= 5; k++) {
1355  fT2d_ich_IX[2][k] = 5 - k;
1356  } // k = 1, 2, 3, 4, 5 -> fT2d_ich_IX[2][k] = 0,1,2,3,4
1357  for (Int_t k = 6; k <= 10; k++) {
1358  fT2d_ich_IX[2][k] = 10 - k;
1359  } // k = 6, 7, 8, 9,10 -> fT2d_ich_IX[2][k] = 0,1,2,3,4
1360  for (Int_t k = 11; k <= 15; k++) {
1361  fT2d_ich_IX[2][k] = 15 - k;
1362  } // k = 11,12,13,14,15 -> fT2d_ich_IX[2][k] = 0,1,2,3,4
1363  for (Int_t k = 16; k <= 20; k++) {
1364  fT2d_ich_IX[2][k] = 20 - k;
1365  } // k = 16,17,18,19,20 -> fT2d_ich_IX[2][k] = 0,1,2,3,4
1366  for (Int_t k = 21; k <= 25; k++) {
1367  fT2d_ich_IX[2][k] = 25 - k;
1368  } // k = 21,22,23,24,25 -> fT2d_ich_IX[2][k] = 0,1,2,3,4
1369  //................. bottom/right
1370  for (Int_t k = 1; k <= 5; k++) {
1371  fT2d_ich_IX[3][k] = 4;
1372  } // k = 1, 2, 3, 4, 5 -> fT2d_ich_IX[3][k] = 4
1373  for (Int_t k = 6; k <= 10; k++) {
1374  fT2d_ich_IX[3][k] = 3;
1375  } // k = 6, 7, 8, 9,10 -> fT2d_ich_IX[3][k] = 3
1376  for (Int_t k = 11; k <= 15; k++) {
1377  fT2d_ich_IX[3][k] = 2;
1378  } // k = 11,12,13,14,15 -> fT2d_ich_IX[3][k] = 2
1379  for (Int_t k = 16; k <= 20; k++) {
1380  fT2d_ich_IX[3][k] = 1;
1381  } // k = 16,17,18,19,20 -> fT2d_ich_IX[3][k] = 1
1382  for (Int_t k = 21; k <= 25; k++) {
1383  fT2d_ich_IX[3][k] = 0;
1384  } // k = 21,22,23,24,25 -> fT2d_ich_IX[3][k] = 0
1385 
1386  //............................................ type
1387  Int_t Nb_DeeSC_JY = fEcal->MaxSCIYInDee();
1388  Int_t** type = new Int_t*[Nb_DeeSC_JY];
1389  fCnew++;
1390  Int_t* type_d1 = new Int_t[Nb_DeeSC_JY * MaxDirections];
1391  fCnew++;
1392  for (Int_t i_DeeSC_JY = 0; i_DeeSC_JY < Nb_DeeSC_JY; i_DeeSC_JY++) {
1393  type[i_DeeSC_JY] = &type_d1[0] + i_DeeSC_JY * MaxDirections;
1394  }
1395 
1396  // bottom = (0,9), top = (10,19)
1397  // right = 0 , left = 1
1398  // type = Quadrant number - 1
1399 
1400  type[10][0] = 0; // Q1 top right
1401  type[11][0] = 0;
1402  type[12][0] = 0;
1403  type[13][0] = 0;
1404  type[14][0] = 0;
1405  type[15][0] = 0;
1406  type[16][0] = 0;
1407  type[17][0] = 0;
1408  type[18][0] = 0;
1409  type[19][0] = 0;
1410 
1411  type[10][1] = 1; // Q2 top left
1412  type[11][1] = 1;
1413  type[12][1] = 1;
1414  type[13][1] = 1;
1415  type[14][1] = 1;
1416  type[15][1] = 1;
1417  type[16][1] = 1;
1418  type[17][1] = 1;
1419  type[18][1] = 1;
1420  type[19][1] = 1;
1421 
1422  type[0][1] = 2; // Q3 : bottom left
1423  type[1][1] = 2;
1424  type[2][1] = 2;
1425  type[3][1] = 2;
1426  type[4][1] = 2;
1427  type[5][1] = 2;
1428  type[6][1] = 2;
1429  type[7][1] = 2;
1430  type[8][1] = 2;
1431  type[9][1] = 2;
1432 
1433  type[0][0] = 3; // Q4 : bottom right
1434  type[1][0] = 3;
1435  type[2][0] = 3;
1436  type[3][0] = 3;
1437  type[4][0] = 3;
1438  type[5][0] = 3;
1439  type[6][0] = 3;
1440  type[7][0] = 3;
1441  type[8][0] = 3;
1442  type[9][0] = 3;
1443 
1444  Int_t Nb_SCCrys_IX = fEcal->MaxCrysIXInSC();
1445  Int_t Nb_SCCrys_JY = fEcal->MaxCrysIYInSC();
1446 
1447  for (Int_t kSC = 0; kSC < MaxDeeSC; kSC++) // kSC = 0 to 199 (MaxDeeSC = 200)
1448  {
1449  for (Int_t n_Echa = 1; n_Echa <= MaxSCEcha; n_Echa++) // n_Echa = 1 to 25 (MaxSCEcha = 25)
1450  {
1451  for (Int_t idir = 0; idir < 2; idir++) {
1452  Int_t ikSC = kSC / Nb_DeeSC_JY; // ikSC = 0 to 9
1453  Int_t jkSC = kSC % Nb_DeeSC_JY; // jkSC = 0,1,2,..,19
1454 
1455  Int_t icrys = ikSC * Nb_SCCrys_IX + fT2d_ich_IX[type[jkSC][idir]][n_Echa];
1456  // type[0->9][1->2] = 0,1,2,3
1457  // fT2d_ich_IX[0->3][1->25] = 0,1,2,3,4
1458  // icrys = 0 to 49 (=> IX)
1459 
1460  Int_t jcrys = jkSC * Nb_SCCrys_JY + fT2d_jch_JY[type[jkSC][idir]][n_Echa];
1461  // type[0->9][1->2] = 0,1,2,3
1462  // fT2d_jch_JY[0->3][1->25] = 0,1,2,3,4
1463  // jcrys = 0 to 99 (=> IY)
1464 
1465  Int_t n_DeeCrys = icrys * Nb_DeeSC_JY * Nb_SCCrys_JY + jcrys + 1; // n_DeeCrys = 1 to 5000
1466 
1467  fT3dDeeCrys[kSC][n_Echa - 1][idir] = n_DeeCrys; // fT3dDeeCrys[][][] : range = [1,5000]
1468  fT2dDeeSC[n_DeeCrys - 1][idir] = kSC + 1; // fT2dDeeSC[][] : range = [1,200]
1469  fT2dSCEcha[n_DeeCrys - 1][idir] = n_Echa; // fT2dSCEcha[][] : range = [1,25]
1470  }
1471  }
1472  }
1473  // std::cout << "#TEcnaNumbering::TBuildEndcapCrysTable()> Crys Table Building done" << std::endl;
1474 
1475  delete[] type;
1476  fCdelete++;
1477  delete[] type_d1;
1478  fCdelete++;
1479  } else {
1480  // std::cout << "#TEcnaNumbering::TBuildEndcapCrysTable()> No Building of Crys Table since it is already done " << std::endl;
1481  }
1482 }
1483 
1485  // Build the correspondance table: (Dee, DeeSC) <-> (DS , DSSC) for the ECAL ENDCAP
1486  //
1487  // From CMS Internal Note "CMS ECAL Endcap channel numbering"
1488  //
1489  // Name Number Reference set Range Comment
1490  //
1491  // Dee : Dee number [1,4]
1492  // DeeSC : Super-Crystal (SC) number in Dee [1,200] (IY,IX) progression
1493  // DS : Data Sector number in EE + or - [1,9] (IY,IX) progression
1494  // DSSC : Super-Crystal (SC) number in Data Sector [1,32] Crystal numbering in data sector
1495  // DeeSCCons: Super-Crystal (SC) number for construction [1,297]
1496  //
1497  // fill the 2d arrays: fT2d_DS[4][200], fT2d_DSSC[4][200] and fT2d_DeeSCCons[4][200]
1498  //
1499  //------------------------------------------------------------------------------------------------------
1500 
1501  //.................. Allocations and Init
1502  Int_t MaxEEDee = fEcal->MaxDeeInEE();
1503  Int_t MaxDeeSC = fEcal->MaxSCEcnaInDee();
1504  Int_t MaxEESCForCons = 2 * fEcal->MaxSCForConsInDee();
1505 
1506  fT2d_DS = new Int_t*[MaxEEDee];
1507  fCnew++; // = DS[Dee - 1, CNA_SCInDee - 1]
1508  fT1d_DS = new Int_t[MaxEEDee * MaxDeeSC];
1509  fCnew++;
1510  for (Int_t i_DeeCrys = 0; i_DeeCrys < MaxEEDee; i_DeeCrys++) {
1511  fT2d_DS[i_DeeCrys] = &fT1d_DS[0] + i_DeeCrys * MaxDeeSC;
1512  }
1513  for (Int_t i = 0; i < MaxEEDee; i++) {
1514  for (Int_t j = 0; j < MaxDeeSC; j++) {
1515  fT2d_DS[i][j] = 0;
1516  }
1517  }
1518 
1519  fT2d_DSSC = new Int_t*[MaxEEDee];
1520  fCnew++; // = SCInDS[Dee - 1, CNA_SCInDee - 1]
1521  fT1d_DSSC = new Int_t[MaxEEDee * MaxDeeSC];
1522  fCnew++;
1523  for (Int_t i_DeeCrys = 0; i_DeeCrys < MaxEEDee; i_DeeCrys++) {
1524  fT2d_DSSC[i_DeeCrys] = &fT1d_DSSC[0] + i_DeeCrys * MaxDeeSC;
1525  }
1526  for (Int_t i = 0; i < MaxEEDee; i++) {
1527  for (Int_t j = 0; j < MaxDeeSC; j++) {
1528  fT2d_DSSC[i][j] = 0;
1529  }
1530  }
1531 
1532  fT2d_DeeSCCons = new Int_t*[MaxEEDee];
1533  fCnew++; // = SCConsInDee[Dee - 1, CNA_SCInDee - 1]
1534  fT1d_DeeSCCons = new Int_t[MaxEEDee * MaxDeeSC];
1535  fCnew++;
1536  for (Int_t i_DeeCrys = 0; i_DeeCrys < MaxEEDee; i_DeeCrys++) {
1537  fT2d_DeeSCCons[i_DeeCrys] = &fT1d_DeeSCCons[0] + i_DeeCrys * MaxDeeSC;
1538  }
1539  for (Int_t i = 0; i < MaxEEDee; i++) {
1540  for (Int_t j = 0; j < MaxDeeSC; j++) {
1541  fT2d_DeeSCCons[i][j] = 0;
1542  }
1543  }
1544 
1545  fT2d_RecovDeeSC = new Int_t*[MaxEEDee];
1546  fCnew++; // = CNA_SCInDee[Dee - 1, SCConsInDee - 1]
1547  fT1d_RecovDeeSC = new Int_t[MaxEEDee * MaxEESCForCons];
1548  fCnew++;
1549  for (Int_t i_DeeCrys = 0; i_DeeCrys < MaxEEDee; i_DeeCrys++) {
1550  fT2d_RecovDeeSC[i_DeeCrys] = &fT1d_RecovDeeSC[0] + i_DeeCrys * MaxEESCForCons;
1551  }
1552  for (Int_t i = 0; i < MaxEEDee; i++) {
1553  for (Int_t j = 0; j < MaxEESCForCons; j++) {
1554  fT2d_RecovDeeSC[i][j] = 0;
1555  }
1556  }
1557 
1558  //.............................. Data sector (DS) numbers: fT2d_DS[][]
1559  // isc = ECNA numbers
1560 
1561  Int_t ids = 0;
1562 
1563  //........... (D1,S1)=(D2,S9)=(D3,S9)=(D4,S1)
1564  for (Int_t dee = 1; dee <= 4; dee++) {
1565  if (dee == 1 || dee == 4) {
1566  ids = 1;
1567  }
1568  if (dee == 2 || dee == 3) {
1569  ids = 9;
1570  }
1571  for (Int_t isc = 13; isc <= 20; isc++)
1572  fT2d_DS[dee - 1][isc - 1] = ids;
1573  for (Int_t isc = 33; isc <= 40; isc++)
1574  fT2d_DS[dee - 1][isc - 1] = ids;
1575  for (Int_t isc = 54; isc <= 60; isc++)
1576  fT2d_DS[dee - 1][isc - 1] = ids;
1577  for (Int_t isc = 75; isc <= 79; isc++)
1578  fT2d_DS[dee - 1][isc - 1] = ids;
1579  for (Int_t isc = 96; isc <= 99; isc++)
1580  fT2d_DS[dee - 1][isc - 1] = ids;
1581  for (Int_t isc = 118; isc <= 119; isc++)
1582  fT2d_DS[dee - 1][isc - 1] = ids;
1583  }
1584  //........... (D1,S2)=(D2,S8)=(D3,S8)=(D4,S2)
1585  for (Int_t dee = 1; dee <= 4; dee++) {
1586  if (dee == 1 || dee == 4) {
1587  ids = 2;
1588  }
1589  if (dee == 2 || dee == 3) {
1590  ids = 8;
1591  }
1592  for (Int_t isc = 32; isc <= 32; isc++)
1593  fT2d_DS[dee - 1][isc - 1] = ids;
1594  for (Int_t isc = 51; isc <= 53; isc++)
1595  fT2d_DS[dee - 1][isc - 1] = ids;
1596  for (Int_t isc = 72; isc <= 74; isc++)
1597  fT2d_DS[dee - 1][isc - 1] = ids;
1598  for (Int_t isc = 92; isc <= 95; isc++)
1599  fT2d_DS[dee - 1][isc - 1] = ids;
1600  for (Int_t isc = 112; isc <= 117; isc++)
1601  fT2d_DS[dee - 1][isc - 1] = ids;
1602  for (Int_t isc = 132; isc <= 138; isc++)
1603  fT2d_DS[dee - 1][isc - 1] = ids;
1604  for (Int_t isc = 152; isc <= 157; isc++)
1605  fT2d_DS[dee - 1][isc - 1] = ids;
1606  for (Int_t isc = 173; isc <= 176; isc++)
1607  fT2d_DS[dee - 1][isc - 1] = ids;
1608  for (Int_t isc = 193; isc <= 193; isc++)
1609  fT2d_DS[dee - 1][isc - 1] = ids;
1610  }
1611  //........... (D1,S3)=(D2,S7)=(D3,S7)=(D4,S3)
1612  for (Int_t dee = 1; dee <= 4; dee++) {
1613  if (dee == 1 || dee == 4) {
1614  ids = 3;
1615  }
1616  if (dee == 2 || dee == 3) {
1617  ids = 7;
1618  }
1619  for (Int_t isc = 50; isc <= 50; isc++)
1620  fT2d_DS[dee - 1][isc - 1] = ids;
1621  for (Int_t isc = 69; isc <= 71; isc++)
1622  fT2d_DS[dee - 1][isc - 1] = ids;
1623  for (Int_t isc = 88; isc <= 91; isc++)
1624  fT2d_DS[dee - 1][isc - 1] = ids;
1625  for (Int_t isc = 108; isc <= 111; isc++)
1626  fT2d_DS[dee - 1][isc - 1] = ids;
1627  for (Int_t isc = 127; isc <= 131; isc++)
1628  fT2d_DS[dee - 1][isc - 1] = ids;
1629  for (Int_t isc = 147; isc <= 151; isc++)
1630  fT2d_DS[dee - 1][isc - 1] = ids;
1631  for (Int_t isc = 166; isc <= 172; isc++)
1632  fT2d_DS[dee - 1][isc - 1] = ids;
1633  for (Int_t isc = 188; isc <= 192; isc++)
1634  fT2d_DS[dee - 1][isc - 1] = ids;
1635  }
1636  //........... (D1,S4)=(D2,S6)=(D3,S6)=(D4,S4)
1637  for (Int_t dee = 1; dee <= 4; dee++) {
1638  if (dee == 1 || dee == 4) {
1639  ids = 4;
1640  }
1641  if (dee == 2 || dee == 3) {
1642  ids = 6;
1643  }
1644  for (Int_t isc = 27; isc <= 29; isc++)
1645  fT2d_DS[dee - 1][isc - 1] = ids;
1646  for (Int_t isc = 44; isc <= 49; isc++)
1647  fT2d_DS[dee - 1][isc - 1] = ids;
1648  for (Int_t isc = 62; isc <= 68; isc++)
1649  fT2d_DS[dee - 1][isc - 1] = ids;
1650  for (Int_t isc = 82; isc <= 87; isc++)
1651  fT2d_DS[dee - 1][isc - 1] = ids;
1652  for (Int_t isc = 102; isc <= 107; isc++)
1653  fT2d_DS[dee - 1][isc - 1] = ids;
1654  for (Int_t isc = 123; isc <= 126; isc++)
1655  fT2d_DS[dee - 1][isc - 1] = ids;
1656  for (Int_t isc = 144; isc <= 146; isc++)
1657  fT2d_DS[dee - 1][isc - 1] = ids;
1658  for (Int_t isc = 165; isc <= 165; isc++)
1659  fT2d_DS[dee - 1][isc - 1] = ids;
1660  }
1661  //........... (D1,S5)=(D2,S5)=(D3,S5)=(D4,S5)
1662  for (Int_t dee = 1; dee <= 4; dee++) {
1663  for (Int_t isc = 1; isc <= 8; isc++)
1664  fT2d_DS[dee - 1][isc - 1] = 5;
1665  for (Int_t isc = 21; isc <= 26; isc++)
1666  fT2d_DS[dee - 1][isc - 1] = 5;
1667  for (Int_t isc = 41; isc <= 43; isc++)
1668  fT2d_DS[dee - 1][isc - 1] = 5;
1669  }
1670 
1671  //............................................ SC numbers in Data Sectors: fT2d_DSSC[][]
1672  // fT2d_DSSC[dee-1][SC ECNA number - 1] = SC number in DS;
1673  for (Int_t dee = 1; dee <= 4; dee++) {
1674  for (Int_t isc = 1; isc <= MaxDeeSC; isc++) {
1675  fT2d_DSSC[dee - 1][isc - 1] = -1;
1676  }
1677  //.......................................... S1 (D1,D4), S9 (D2,D3) ; 33 SC's
1678  fT2d_DSSC[dee - 1][13 - 1] = 12;
1679  fT2d_DSSC[dee - 1][14 - 1] = 11;
1680  fT2d_DSSC[dee - 1][15 - 1] = 10;
1681  fT2d_DSSC[dee - 1][16 - 1] = 9;
1682  fT2d_DSSC[dee - 1][17 - 1] = 4;
1683  fT2d_DSSC[dee - 1][18 - 1] = 3;
1684  fT2d_DSSC[dee - 1][19 - 1] = 2;
1685  fT2d_DSSC[dee - 1][20 - 1] = 1;
1686 
1687  fT2d_DSSC[dee - 1][33 - 1] = 16;
1688  fT2d_DSSC[dee - 1][34 - 1] = 15;
1689  fT2d_DSSC[dee - 1][35 - 1] = 14;
1690  fT2d_DSSC[dee - 1][36 - 1] = 13;
1691  fT2d_DSSC[dee - 1][37 - 1] = 8;
1692  fT2d_DSSC[dee - 1][38 - 1] = 7;
1693  fT2d_DSSC[dee - 1][39 - 1] = 6;
1694  fT2d_DSSC[dee - 1][40 - 1] = 5;
1695 
1696  fT2d_DSSC[dee - 1][54 - 1] = 33;
1697  fT2d_DSSC[dee - 1][55 - 1] = 31;
1698  fT2d_DSSC[dee - 1][56 - 1] = 27;
1699  fT2d_DSSC[dee - 1][57 - 1] = 24;
1700  fT2d_DSSC[dee - 1][58 - 1] = 20;
1701  fT2d_DSSC[dee - 1][59 - 1] = 17;
1702  fT2d_DSSC[dee - 1][60 - 1] = 30; // (182a, 33a for construction)
1703 
1704  fT2d_DSSC[dee - 1][75 - 1] = 32;
1705  fT2d_DSSC[dee - 1][76 - 1] = 28;
1706  fT2d_DSSC[dee - 1][77 - 1] = 25;
1707  fT2d_DSSC[dee - 1][78 - 1] = 21;
1708  fT2d_DSSC[dee - 1][79 - 1] = 18;
1709 
1710  fT2d_DSSC[dee - 1][96 - 1] = 29;
1711  fT2d_DSSC[dee - 1][97 - 1] = 26;
1712  fT2d_DSSC[dee - 1][98 - 1] = 22;
1713  fT2d_DSSC[dee - 1][99 - 1] = 19;
1714 
1715  fT2d_DSSC[dee - 1][118 - 1] = 23;
1716  fT2d_DSSC[dee - 1][119 - 1] = 30; // (182b, 33b for construction)
1717 
1718  //.......................................... S2 (D1,D4), S8(D2,D3) ; 32 SC's
1719  fT2d_DSSC[dee - 1][32 - 1] = 25; // also 3; // ( (207c, 58c) also (178c, 29c) for construction)
1720 
1721  fT2d_DSSC[dee - 1][51 - 1] = 32;
1722  fT2d_DSSC[dee - 1][52 - 1] = 26;
1723  fT2d_DSSC[dee - 1][53 - 1] = 18;
1724 
1725  fT2d_DSSC[dee - 1][72 - 1] = 27;
1726  fT2d_DSSC[dee - 1][73 - 1] = 19;
1727  fT2d_DSSC[dee - 1][74 - 1] = 12;
1728 
1729  fT2d_DSSC[dee - 1][92 - 1] = 28;
1730  fT2d_DSSC[dee - 1][93 - 1] = 20;
1731  fT2d_DSSC[dee - 1][94 - 1] = 13;
1732  fT2d_DSSC[dee - 1][95 - 1] = 7;
1733 
1734  fT2d_DSSC[dee - 1][112 - 1] = 29;
1735  fT2d_DSSC[dee - 1][113 - 1] = 21;
1736  fT2d_DSSC[dee - 1][114 - 1] = 14;
1737  fT2d_DSSC[dee - 1][115 - 1] = 8;
1738  fT2d_DSSC[dee - 1][116 - 1] = 4;
1739  fT2d_DSSC[dee - 1][117 - 1] = 1;
1740 
1741  fT2d_DSSC[dee - 1][132 - 1] = 30;
1742  fT2d_DSSC[dee - 1][133 - 1] = 22;
1743  fT2d_DSSC[dee - 1][134 - 1] = 15;
1744  fT2d_DSSC[dee - 1][135 - 1] = 9;
1745  fT2d_DSSC[dee - 1][136 - 1] = 5;
1746  fT2d_DSSC[dee - 1][137 - 1] = 2;
1747  fT2d_DSSC[dee - 1][138 - 1] = 3; // (178a, 29a for construction)
1748 
1749  fT2d_DSSC[dee - 1][152 - 1] = 31;
1750  fT2d_DSSC[dee - 1][153 - 1] = 23;
1751  fT2d_DSSC[dee - 1][154 - 1] = 16;
1752  fT2d_DSSC[dee - 1][155 - 1] = 10;
1753  fT2d_DSSC[dee - 1][156 - 1] = 6;
1754  fT2d_DSSC[dee - 1][157 - 1] = 3; // (178b, 29b for construction)
1755 
1756  fT2d_DSSC[dee - 1][173 - 1] = 24;
1757  fT2d_DSSC[dee - 1][174 - 1] = 17;
1758  fT2d_DSSC[dee - 1][175 - 1] = 11;
1759  fT2d_DSSC[dee - 1][176 - 1] = 25; // (207a, 58a for construction)
1760 
1761  fT2d_DSSC[dee - 1][193 - 1] = 25; // (207b, 58b for construction)
1762 
1763  //.......................................... S3 (D1,D4), S7 (D2,D3) ; 34 SC's
1764  fT2d_DSSC[dee - 1][50 - 1] = 10;
1765 
1766  fT2d_DSSC[dee - 1][69 - 1] = 18;
1767  fT2d_DSSC[dee - 1][70 - 1] = 11;
1768  fT2d_DSSC[dee - 1][71 - 1] = 3;
1769 
1770  fT2d_DSSC[dee - 1][88 - 1] = 25;
1771  fT2d_DSSC[dee - 1][89 - 1] = 19;
1772  fT2d_DSSC[dee - 1][90 - 1] = 12;
1773  fT2d_DSSC[dee - 1][91 - 1] = 4;
1774 
1775  fT2d_DSSC[dee - 1][108 - 1] = 26;
1776  fT2d_DSSC[dee - 1][109 - 1] = 20;
1777  fT2d_DSSC[dee - 1][110 - 1] = 13;
1778  fT2d_DSSC[dee - 1][111 - 1] = 5;
1779 
1780  fT2d_DSSC[dee - 1][127 - 1] = 31;
1781  fT2d_DSSC[dee - 1][128 - 1] = 27;
1782  fT2d_DSSC[dee - 1][129 - 1] = 21;
1783  fT2d_DSSC[dee - 1][130 - 1] = 14;
1784  fT2d_DSSC[dee - 1][131 - 1] = 6;
1785 
1786  fT2d_DSSC[dee - 1][147 - 1] = 32;
1787  fT2d_DSSC[dee - 1][148 - 1] = 28;
1788  fT2d_DSSC[dee - 1][149 - 1] = 22;
1789  fT2d_DSSC[dee - 1][150 - 1] = 15;
1790  fT2d_DSSC[dee - 1][151 - 1] = 7;
1791 
1792  fT2d_DSSC[dee - 1][166 - 1] = 33;
1793  fT2d_DSSC[dee - 1][167 - 1] = 30;
1794  fT2d_DSSC[dee - 1][168 - 1] = 29;
1795  fT2d_DSSC[dee - 1][169 - 1] = 23;
1796  fT2d_DSSC[dee - 1][170 - 1] = 16;
1797  fT2d_DSSC[dee - 1][171 - 1] = 8;
1798  fT2d_DSSC[dee - 1][172 - 1] = 1;
1799 
1800  fT2d_DSSC[dee - 1][188 - 1] = 34; // (298a, 149a for construction)
1801  fT2d_DSSC[dee - 1][189 - 1] = 24;
1802  fT2d_DSSC[dee - 1][190 - 1] = 17;
1803  fT2d_DSSC[dee - 1][191 - 1] = 9;
1804  fT2d_DSSC[dee - 1][192 - 1] = 2;
1805 
1806  //.......................................... S4 (D1,D4), S6 (D2,D3) ; 33 SC's
1807  fT2d_DSSC[dee - 1][27 - 1] = 33;
1808  fT2d_DSSC[dee - 1][28 - 1] = 32;
1809  fT2d_DSSC[dee - 1][29 - 1] = 14; // also 21; // ( (261a, 112a) also (268a, 119a) for construction)
1810 
1811  fT2d_DSSC[dee - 1][44 - 1] = 22;
1812  fT2d_DSSC[dee - 1][45 - 1] = 15;
1813  fT2d_DSSC[dee - 1][46 - 1] = 8;
1814  fT2d_DSSC[dee - 1][47 - 1] = 4;
1815  fT2d_DSSC[dee - 1][48 - 1] = 2;
1816  fT2d_DSSC[dee - 1][49 - 1] = 1;
1817 
1818  fT2d_DSSC[dee - 1][62 - 1] = 29;
1819  fT2d_DSSC[dee - 1][63 - 1] = 28;
1820  fT2d_DSSC[dee - 1][64 - 1] = 23;
1821  fT2d_DSSC[dee - 1][65 - 1] = 16;
1822  fT2d_DSSC[dee - 1][66 - 1] = 9;
1823  fT2d_DSSC[dee - 1][67 - 1] = 5;
1824  fT2d_DSSC[dee - 1][68 - 1] = 3;
1825 
1826  fT2d_DSSC[dee - 1][82 - 1] = 31;
1827  fT2d_DSSC[dee - 1][83 - 1] = 30;
1828  fT2d_DSSC[dee - 1][84 - 1] = 24;
1829  fT2d_DSSC[dee - 1][85 - 1] = 17;
1830  fT2d_DSSC[dee - 1][86 - 1] = 10;
1831  fT2d_DSSC[dee - 1][87 - 1] = 6;
1832 
1833  fT2d_DSSC[dee - 1][102 - 1] = 21; // (268c, 119c for construction)
1834  fT2d_DSSC[dee - 1][103 - 1] = 27;
1835  fT2d_DSSC[dee - 1][104 - 1] = 25;
1836  fT2d_DSSC[dee - 1][105 - 1] = 18;
1837  fT2d_DSSC[dee - 1][106 - 1] = 11;
1838  fT2d_DSSC[dee - 1][107 - 1] = 7;
1839 
1840  fT2d_DSSC[dee - 1][123 - 1] = 21; // (268b, 119b for construction)
1841  fT2d_DSSC[dee - 1][124 - 1] = 26;
1842  fT2d_DSSC[dee - 1][125 - 1] = 19;
1843  fT2d_DSSC[dee - 1][126 - 1] = 12;
1844 
1845  fT2d_DSSC[dee - 1][144 - 1] = 14; // (261c, 112c for construction)
1846  fT2d_DSSC[dee - 1][145 - 1] = 20;
1847  fT2d_DSSC[dee - 1][146 - 1] = 13;
1848 
1849  fT2d_DSSC[dee - 1][165 - 1] = 14; // (261b, 112b for construction)
1850 
1851  //.......................................... S5 (2*17 = 34 SC's)
1852  if (dee == 1 || dee == 3) {
1853  fT2d_DSSC[dee - 1][1 - 1] = 34;
1854  fT2d_DSSC[dee - 1][2 - 1] = 33;
1855  fT2d_DSSC[dee - 1][3 - 1] = 32;
1856  fT2d_DSSC[dee - 1][4 - 1] = 31;
1857  fT2d_DSSC[dee - 1][5 - 1] = 26;
1858  fT2d_DSSC[dee - 1][6 - 1] = 25;
1859  fT2d_DSSC[dee - 1][7 - 1] = 24;
1860  fT2d_DSSC[dee - 1][8 - 1] = 23;
1861 
1862  fT2d_DSSC[dee - 1][21 - 1] = 30;
1863  fT2d_DSSC[dee - 1][22 - 1] = 29;
1864  fT2d_DSSC[dee - 1][23 - 1] = 28;
1865  fT2d_DSSC[dee - 1][24 - 1] = 27;
1866  fT2d_DSSC[dee - 1][25 - 1] = 22;
1867  fT2d_DSSC[dee - 1][26 - 1] = 21;
1868 
1869  fT2d_DSSC[dee - 1][41 - 1] = 20; // (281a for construction)
1870  fT2d_DSSC[dee - 1][42 - 1] = 19;
1871  fT2d_DSSC[dee - 1][43 - 1] = 18;
1872  }
1873 
1874  if (dee == 2 || dee == 4) {
1875  fT2d_DSSC[dee - 1][1 - 1] = 17;
1876  fT2d_DSSC[dee - 1][2 - 1] = 16;
1877  fT2d_DSSC[dee - 1][3 - 1] = 15;
1878  fT2d_DSSC[dee - 1][4 - 1] = 14;
1879  fT2d_DSSC[dee - 1][5 - 1] = 9;
1880  fT2d_DSSC[dee - 1][6 - 1] = 8;
1881  fT2d_DSSC[dee - 1][7 - 1] = 7;
1882  fT2d_DSSC[dee - 1][8 - 1] = 6;
1883 
1884  fT2d_DSSC[dee - 1][21 - 1] = 13;
1885  fT2d_DSSC[dee - 1][22 - 1] = 12;
1886  fT2d_DSSC[dee - 1][23 - 1] = 11;
1887  fT2d_DSSC[dee - 1][24 - 1] = 10;
1888  fT2d_DSSC[dee - 1][25 - 1] = 5;
1889  fT2d_DSSC[dee - 1][26 - 1] = 4;
1890 
1891  fT2d_DSSC[dee - 1][41 - 1] = 3; // (132a for construction)
1892  fT2d_DSSC[dee - 1][42 - 1] = 2;
1893  fT2d_DSSC[dee - 1][43 - 1] = 1;
1894  }
1895  }
1896  //............................... Numbers for construction: fT2d_DeeSCCons[][]
1897  // fT2d_DeeSCCons[dee-1][SC ECNA number - 1] = SC number for construction;
1898 
1899  //............................... init to -1
1900  for (Int_t dee = 1; dee <= 4; dee++) {
1901  for (Int_t isc = 1; isc <= MaxDeeSC; isc++) {
1902  fT2d_DeeSCCons[dee - 1][isc - 1] = -1;
1903  }
1904  }
1905 
1906  for (Int_t i_dee_type = 1; i_dee_type <= 2; i_dee_type++) {
1907  Int_t dee = -1;
1908  if (i_dee_type == 1) {
1909  dee = 1;
1910  }
1911  if (i_dee_type == 2) {
1912  dee = 3;
1913  }
1914 
1915  //.......................................... (D1,S1 or D3,S9) AND (D2,S9 or D4,S1)
1916  // number in comment = fT2d_DSSC[dee-1][SC ECNA nb - 1] (= SC number in DS)
1917  fT2d_DeeSCCons[dee - 1][13 - 1] = 161;
1918  fT2d_DeeSCCons[dee][13 - 1] = 12; // 12;
1919  fT2d_DeeSCCons[dee - 1][14 - 1] = 160;
1920  fT2d_DeeSCCons[dee][14 - 1] = 11; // 11;
1921  fT2d_DeeSCCons[dee - 1][15 - 1] = 159;
1922  fT2d_DeeSCCons[dee][15 - 1] = 10; // 10;
1923  fT2d_DeeSCCons[dee - 1][16 - 1] = 158;
1924  fT2d_DeeSCCons[dee][16 - 1] = 9; // 9;
1925  fT2d_DeeSCCons[dee - 1][17 - 1] = 153;
1926  fT2d_DeeSCCons[dee][17 - 1] = 4; // 4;
1927  fT2d_DeeSCCons[dee - 1][18 - 1] = 152;
1928  fT2d_DeeSCCons[dee][18 - 1] = 3; // 3;
1929  fT2d_DeeSCCons[dee - 1][19 - 1] = 151;
1930  fT2d_DeeSCCons[dee][19 - 1] = 2; // 2;
1931  fT2d_DeeSCCons[dee - 1][20 - 1] = 150;
1932  fT2d_DeeSCCons[dee][20 - 1] = 1; // 1;
1933 
1934  fT2d_DeeSCCons[dee - 1][33 - 1] = 165;
1935  fT2d_DeeSCCons[dee][33 - 1] = 16; // 16;
1936  fT2d_DeeSCCons[dee - 1][34 - 1] = 164;
1937  fT2d_DeeSCCons[dee][34 - 1] = 15; // 15;
1938  fT2d_DeeSCCons[dee - 1][35 - 1] = 163;
1939  fT2d_DeeSCCons[dee][35 - 1] = 14; // 14;
1940  fT2d_DeeSCCons[dee - 1][36 - 1] = 162;
1941  fT2d_DeeSCCons[dee][36 - 1] = 13; // 13;
1942  fT2d_DeeSCCons[dee - 1][37 - 1] = 157;
1943  fT2d_DeeSCCons[dee][37 - 1] = 8; // 8;
1944  fT2d_DeeSCCons[dee - 1][38 - 1] = 156;
1945  fT2d_DeeSCCons[dee][38 - 1] = 7; // 7;
1946  fT2d_DeeSCCons[dee - 1][39 - 1] = 155;
1947  fT2d_DeeSCCons[dee][39 - 1] = 6; // 6;
1948  fT2d_DeeSCCons[dee - 1][40 - 1] = 154;
1949  fT2d_DeeSCCons[dee][40 - 1] = 5; // 5;
1950 
1951  fT2d_DeeSCCons[dee - 1][54 - 1] = 193;
1952  fT2d_DeeSCCons[dee][54 - 1] = 44; // 33;
1953  fT2d_DeeSCCons[dee - 1][55 - 1] = 186;
1954  fT2d_DeeSCCons[dee][55 - 1] = 37; // 31;
1955  fT2d_DeeSCCons[dee - 1][56 - 1] = 179;
1956  fT2d_DeeSCCons[dee][56 - 1] = 30; // 27;
1957  fT2d_DeeSCCons[dee - 1][57 - 1] = 173;
1958  fT2d_DeeSCCons[dee][57 - 1] = 24; // 24;
1959  fT2d_DeeSCCons[dee - 1][58 - 1] = 169;
1960  fT2d_DeeSCCons[dee][58 - 1] = 20; // 20;
1961  fT2d_DeeSCCons[dee - 1][59 - 1] = 166;
1962  fT2d_DeeSCCons[dee][59 - 1] = 17; // 17;
1963  fT2d_DeeSCCons[dee - 1][60 - 1] = 182;
1964  fT2d_DeeSCCons[dee][60 - 1] = 33; // 30; // 182a ; 33a;
1965 
1966  fT2d_DeeSCCons[dee - 1][75 - 1] = 187;
1967  fT2d_DeeSCCons[dee][75 - 1] = 38; // 32;
1968  fT2d_DeeSCCons[dee - 1][76 - 1] = 180;
1969  fT2d_DeeSCCons[dee][76 - 1] = 31; // 28;
1970  fT2d_DeeSCCons[dee - 1][77 - 1] = 174;
1971  fT2d_DeeSCCons[dee][77 - 1] = 25; // 25;
1972  fT2d_DeeSCCons[dee - 1][78 - 1] = 170;
1973  fT2d_DeeSCCons[dee][78 - 1] = 21; // 21;
1974  fT2d_DeeSCCons[dee - 1][79 - 1] = 167;
1975  fT2d_DeeSCCons[dee][79 - 1] = 18; // 18;
1976 
1977  fT2d_DeeSCCons[dee - 1][96 - 1] = 181;
1978  fT2d_DeeSCCons[dee][96 - 1] = 32; // 29;
1979  fT2d_DeeSCCons[dee - 1][97 - 1] = 175;
1980  fT2d_DeeSCCons[dee][97 - 1] = 26; // 26;
1981  fT2d_DeeSCCons[dee - 1][98 - 1] = 171;
1982  fT2d_DeeSCCons[dee][98 - 1] = 22; // 22;
1983  fT2d_DeeSCCons[dee - 1][99 - 1] = 168;
1984  fT2d_DeeSCCons[dee][99 - 1] = 19; // 19;
1985 
1986  fT2d_DeeSCCons[dee - 1][118 - 1] = 172;
1987  fT2d_DeeSCCons[dee][118 - 1] = 23; // 23;
1988  fT2d_DeeSCCons[dee - 1][119 - 1] = 182;
1989  fT2d_DeeSCCons[dee][119 - 1] = 33; // 30; // 182b ; 33b;
1990 
1991  //.......................................... (D1,S2 or D3,S8) AND (D2,S8 or D4,S2)
1992  fT2d_DeeSCCons[dee - 1][32 - 1] = 178;
1993  fT2d_DeeSCCons[dee][32 - 1] = 29; // 25-3; // 178c-207c ; 29c-58c;
1994 
1995  fT2d_DeeSCCons[dee - 1][51 - 1] = 216;
1996  fT2d_DeeSCCons[dee][51 - 1] = 67; // 32;
1997  fT2d_DeeSCCons[dee - 1][52 - 1] = 208;
1998  fT2d_DeeSCCons[dee][52 - 1] = 59; // 26;
1999  fT2d_DeeSCCons[dee - 1][53 - 1] = 200;
2000  fT2d_DeeSCCons[dee][53 - 1] = 51; // 18;
2001 
2002  fT2d_DeeSCCons[dee - 1][72 - 1] = 209;
2003  fT2d_DeeSCCons[dee][72 - 1] = 60; // 27;
2004  fT2d_DeeSCCons[dee - 1][73 - 1] = 201;
2005  fT2d_DeeSCCons[dee][73 - 1] = 52; // 19;
2006  fT2d_DeeSCCons[dee - 1][74 - 1] = 194;
2007  fT2d_DeeSCCons[dee][74 - 1] = 45; // 12;
2008 
2009  fT2d_DeeSCCons[dee - 1][92 - 1] = 210;
2010  fT2d_DeeSCCons[dee][92 - 1] = 61; // 28;
2011  fT2d_DeeSCCons[dee - 1][93 - 1] = 202;
2012  fT2d_DeeSCCons[dee][93 - 1] = 53; // 20;
2013  fT2d_DeeSCCons[dee - 1][94 - 1] = 195;
2014  fT2d_DeeSCCons[dee][94 - 1] = 46; // 13;
2015  fT2d_DeeSCCons[dee - 1][95 - 1] = 188;
2016  fT2d_DeeSCCons[dee][95 - 1] = 39; // 7;
2017 
2018  fT2d_DeeSCCons[dee - 1][112 - 1] = 211;
2019  fT2d_DeeSCCons[dee][112 - 1] = 62; // 29;
2020  fT2d_DeeSCCons[dee - 1][113 - 1] = 203;
2021  fT2d_DeeSCCons[dee][113 - 1] = 54; // 21;
2022  fT2d_DeeSCCons[dee - 1][114 - 1] = 196;
2023  fT2d_DeeSCCons[dee][114 - 1] = 47; // 14;
2024  fT2d_DeeSCCons[dee - 1][115 - 1] = 189;
2025  fT2d_DeeSCCons[dee][115 - 1] = 40; // 8;
2026  fT2d_DeeSCCons[dee - 1][116 - 1] = 183;
2027  fT2d_DeeSCCons[dee][116 - 1] = 34; // 4;
2028  fT2d_DeeSCCons[dee - 1][117 - 1] = 176;
2029  fT2d_DeeSCCons[dee][117 - 1] = 27; // 1;
2030 
2031  fT2d_DeeSCCons[dee - 1][132 - 1] = 212;
2032  fT2d_DeeSCCons[dee][132 - 1] = 63; // 30;
2033  fT2d_DeeSCCons[dee - 1][133 - 1] = 204;
2034  fT2d_DeeSCCons[dee][133 - 1] = 55; // 22;
2035  fT2d_DeeSCCons[dee - 1][134 - 1] = 197;
2036  fT2d_DeeSCCons[dee][134 - 1] = 48; // 15;
2037  fT2d_DeeSCCons[dee - 1][135 - 1] = 190;
2038  fT2d_DeeSCCons[dee][135 - 1] = 41; // 9;
2039  fT2d_DeeSCCons[dee - 1][136 - 1] = 184;
2040  fT2d_DeeSCCons[dee][136 - 1] = 35; // 5;
2041  fT2d_DeeSCCons[dee - 1][137 - 1] = 177;
2042  fT2d_DeeSCCons[dee][137 - 1] = 28; // 2;
2043  fT2d_DeeSCCons[dee - 1][138 - 1] = 178;
2044  fT2d_DeeSCCons[dee][138 - 1] = 29; // 3; // 178a ; 29a;
2045 
2046  fT2d_DeeSCCons[dee - 1][152 - 1] = 213;
2047  fT2d_DeeSCCons[dee][152 - 1] = 64; // 31;
2048  fT2d_DeeSCCons[dee - 1][153 - 1] = 205;
2049  fT2d_DeeSCCons[dee][153 - 1] = 56; // 23;
2050  fT2d_DeeSCCons[dee - 1][154 - 1] = 198;
2051  fT2d_DeeSCCons[dee][154 - 1] = 49; // 16;
2052  fT2d_DeeSCCons[dee - 1][155 - 1] = 191;
2053  fT2d_DeeSCCons[dee][155 - 1] = 42; // 10;
2054  fT2d_DeeSCCons[dee - 1][156 - 1] = 185;
2055  fT2d_DeeSCCons[dee][156 - 1] = 36; // 6;
2056  fT2d_DeeSCCons[dee - 1][157 - 1] = 178;
2057  fT2d_DeeSCCons[dee][157 - 1] = 29; // 3; // 178b ; 29b;
2058 
2059  fT2d_DeeSCCons[dee - 1][173 - 1] = 206;
2060  fT2d_DeeSCCons[dee][173 - 1] = 57; // 24;
2061  fT2d_DeeSCCons[dee - 1][174 - 1] = 199;
2062  fT2d_DeeSCCons[dee][174 - 1] = 50; // 17;
2063  fT2d_DeeSCCons[dee - 1][175 - 1] = 192;
2064  fT2d_DeeSCCons[dee][175 - 1] = 43; // 11;
2065  fT2d_DeeSCCons[dee - 1][176 - 1] = 207;
2066  fT2d_DeeSCCons[dee][176 - 1] = 58; // 25; // 58a ; 207a;
2067 
2068  fT2d_DeeSCCons[dee - 1][193 - 1] = 207;
2069  fT2d_DeeSCCons[dee][193 - 1] = 58; // 25; // 58b ; 207b;
2070 
2071  //.......................................... (D1,S3 or D3,S7) AND (D2,S7 or D4,S3)
2072  fT2d_DeeSCCons[dee - 1][50 - 1] = 224;
2073  fT2d_DeeSCCons[dee][50 - 1] = 75; // 10;
2074 
2075  fT2d_DeeSCCons[dee - 1][69 - 1] = 233;
2076  fT2d_DeeSCCons[dee][69 - 1] = 84; // 18;
2077  fT2d_DeeSCCons[dee - 1][70 - 1] = 225;
2078  fT2d_DeeSCCons[dee][70 - 1] = 76; // 11;
2079  fT2d_DeeSCCons[dee - 1][71 - 1] = 217;
2080  fT2d_DeeSCCons[dee][71 - 1] = 68; // 3;
2081 
2082  fT2d_DeeSCCons[dee - 1][88 - 1] = 242;
2083  fT2d_DeeSCCons[dee][88 - 1] = 93; // 25;
2084  fT2d_DeeSCCons[dee - 1][89 - 1] = 234;
2085  fT2d_DeeSCCons[dee][89 - 1] = 85; // 19;
2086  fT2d_DeeSCCons[dee - 1][90 - 1] = 226;
2087  fT2d_DeeSCCons[dee][90 - 1] = 77; // 12;
2088  fT2d_DeeSCCons[dee - 1][91 - 1] = 218;
2089  fT2d_DeeSCCons[dee][91 - 1] = 69; // 4;
2090 
2091  fT2d_DeeSCCons[dee - 1][108 - 1] = 243;
2092  fT2d_DeeSCCons[dee][108 - 1] = 94; // 26;
2093  fT2d_DeeSCCons[dee - 1][109 - 1] = 235;
2094  fT2d_DeeSCCons[dee][109 - 1] = 86; // 20;
2095  fT2d_DeeSCCons[dee - 1][110 - 1] = 227;
2096  fT2d_DeeSCCons[dee][110 - 1] = 78; // 13;
2097  fT2d_DeeSCCons[dee - 1][111 - 1] = 219;
2098  fT2d_DeeSCCons[dee][111 - 1] = 70; // 5;
2099 
2100  fT2d_DeeSCCons[dee - 1][127 - 1] = 252;
2101  fT2d_DeeSCCons[dee][127 - 1] = 103; // 31;
2102  fT2d_DeeSCCons[dee - 1][128 - 1] = 244;
2103  fT2d_DeeSCCons[dee][128 - 1] = 95; // 27;
2104  fT2d_DeeSCCons[dee - 1][129 - 1] = 236;
2105  fT2d_DeeSCCons[dee][129 - 1] = 87; // 21;
2106  fT2d_DeeSCCons[dee - 1][130 - 1] = 228;
2107  fT2d_DeeSCCons[dee][130 - 1] = 79; // 14;
2108  fT2d_DeeSCCons[dee - 1][131 - 1] = 220;
2109  fT2d_DeeSCCons[dee][131 - 1] = 71; // 6;
2110 
2111  fT2d_DeeSCCons[dee - 1][147 - 1] = 253;
2112  fT2d_DeeSCCons[dee][147 - 1] = 104; // 32;
2113  fT2d_DeeSCCons[dee - 1][148 - 1] = 245;
2114  fT2d_DeeSCCons[dee][148 - 1] = 96; // 28;
2115  fT2d_DeeSCCons[dee - 1][149 - 1] = 237;
2116  fT2d_DeeSCCons[dee][149 - 1] = 88; // 22;
2117  fT2d_DeeSCCons[dee - 1][150 - 1] = 229;
2118  fT2d_DeeSCCons[dee][150 - 1] = 80; // 15;
2119  fT2d_DeeSCCons[dee - 1][151 - 1] = 221;
2120  fT2d_DeeSCCons[dee][151 - 1] = 72; // 7;
2121 
2122  fT2d_DeeSCCons[dee - 1][166 - 1] = 254;
2123  fT2d_DeeSCCons[dee][166 - 1] = 105; // 33;
2124  fT2d_DeeSCCons[dee - 1][167 - 1] = 247;
2125  fT2d_DeeSCCons[dee][167 - 1] = 98; // 30;
2126  fT2d_DeeSCCons[dee - 1][168 - 1] = 246;
2127  fT2d_DeeSCCons[dee][168 - 1] = 97; // 29;
2128  fT2d_DeeSCCons[dee - 1][169 - 1] = 238;
2129  fT2d_DeeSCCons[dee][169 - 1] = 89; // 23;
2130  fT2d_DeeSCCons[dee - 1][170 - 1] = 230;
2131  fT2d_DeeSCCons[dee][170 - 1] = 81; // 16;
2132  fT2d_DeeSCCons[dee - 1][171 - 1] = 222;
2133  fT2d_DeeSCCons[dee][171 - 1] = 73; // 8;
2134  fT2d_DeeSCCons[dee - 1][172 - 1] = 214;
2135  fT2d_DeeSCCons[dee][172 - 1] = 65; // 1;
2136 
2137  fT2d_DeeSCCons[dee - 1][188 - 1] = 298;
2138  fT2d_DeeSCCons[dee][188 - 1] = 149; // 24; // 298a ; 149a;
2139  fT2d_DeeSCCons[dee - 1][189 - 1] = 239;
2140  fT2d_DeeSCCons[dee][189 - 1] = 90; // 24;
2141  fT2d_DeeSCCons[dee - 1][190 - 1] = 231;
2142  fT2d_DeeSCCons[dee][190 - 1] = 82; // 17;
2143  fT2d_DeeSCCons[dee - 1][191 - 1] = 223;
2144  fT2d_DeeSCCons[dee][191 - 1] = 74; // 9;
2145  fT2d_DeeSCCons[dee - 1][192 - 1] = 215;
2146  fT2d_DeeSCCons[dee][192 - 1] = 66; // 2;
2147 
2148  //.......................................... (D1,S4 or D3,S6) AND (D2,S6 or D4,S4)
2149  fT2d_DeeSCCons[dee - 1][29 - 1] = 261;
2150  fT2d_DeeSCCons[dee][29 - 1] = 112; // 14-21; // 261a-268a ; 112a-119a;
2151  fT2d_DeeSCCons[dee - 1][27 - 1] = 283;
2152  fT2d_DeeSCCons[dee][27 - 1] = 134; // 33;
2153  fT2d_DeeSCCons[dee - 1][28 - 1] = 282;
2154  fT2d_DeeSCCons[dee][28 - 1] = 133; // 32;
2155 
2156  fT2d_DeeSCCons[dee - 1][44 - 1] = 269;
2157  fT2d_DeeSCCons[dee][44 - 1] = 120; // 22;
2158  fT2d_DeeSCCons[dee - 1][45 - 1] = 262;
2159  fT2d_DeeSCCons[dee][45 - 1] = 113; // 15;
2160  fT2d_DeeSCCons[dee - 1][46 - 1] = 255;
2161  fT2d_DeeSCCons[dee][46 - 1] = 106; // 8;
2162  fT2d_DeeSCCons[dee - 1][47 - 1] = 248;
2163  fT2d_DeeSCCons[dee][47 - 1] = 99; // 4;
2164  fT2d_DeeSCCons[dee - 1][48 - 1] = 240;
2165  fT2d_DeeSCCons[dee][48 - 1] = 91; // 2;
2166  fT2d_DeeSCCons[dee - 1][49 - 1] = 232;
2167  fT2d_DeeSCCons[dee][49 - 1] = 83; // 1;
2168 
2169  fT2d_DeeSCCons[dee - 1][62 - 1] = 276;
2170  fT2d_DeeSCCons[dee][62 - 1] = 127; // 29;
2171  fT2d_DeeSCCons[dee - 1][63 - 1] = 275;
2172  fT2d_DeeSCCons[dee][63 - 1] = 126; // 28;
2173  fT2d_DeeSCCons[dee - 1][64 - 1] = 270;
2174  fT2d_DeeSCCons[dee][64 - 1] = 121; // 23;
2175  fT2d_DeeSCCons[dee - 1][65 - 1] = 263;
2176  fT2d_DeeSCCons[dee][65 - 1] = 114; // 16;
2177  fT2d_DeeSCCons[dee - 1][66 - 1] = 256;
2178  fT2d_DeeSCCons[dee][66 - 1] = 107; // 9;
2179  fT2d_DeeSCCons[dee - 1][67 - 1] = 249;
2180  fT2d_DeeSCCons[dee][67 - 1] = 100; // 5;
2181  fT2d_DeeSCCons[dee - 1][68 - 1] = 241;
2182  fT2d_DeeSCCons[dee][68 - 1] = 92; // 3;
2183 
2184  fT2d_DeeSCCons[dee - 1][82 - 1] = 278;
2185  fT2d_DeeSCCons[dee][82 - 1] = 129; // 31;
2186  fT2d_DeeSCCons[dee - 1][83 - 1] = 277;
2187  fT2d_DeeSCCons[dee][83 - 1] = 128; // 30;
2188  fT2d_DeeSCCons[dee - 1][84 - 1] = 271;
2189  fT2d_DeeSCCons[dee][84 - 1] = 122; // 24;
2190  fT2d_DeeSCCons[dee - 1][85 - 1] = 264;
2191  fT2d_DeeSCCons[dee][85 - 1] = 115; // 17;
2192  fT2d_DeeSCCons[dee - 1][86 - 1] = 257;
2193  fT2d_DeeSCCons[dee][86 - 1] = 108; // 10;
2194  fT2d_DeeSCCons[dee - 1][87 - 1] = 250;
2195  fT2d_DeeSCCons[dee][87 - 1] = 101; // 6;
2196 
2197  fT2d_DeeSCCons[dee - 1][102 - 1] = 268;
2198  fT2d_DeeSCCons[dee][102 - 1] = 119; // 21; // 268c ; 119c;
2199  fT2d_DeeSCCons[dee - 1][103 - 1] = 274;
2200  fT2d_DeeSCCons[dee][103 - 1] = 125; // 27;
2201  fT2d_DeeSCCons[dee - 1][104 - 1] = 272;
2202  fT2d_DeeSCCons[dee][104 - 1] = 123; // 25;
2203  fT2d_DeeSCCons[dee - 1][105 - 1] = 265;
2204  fT2d_DeeSCCons[dee][105 - 1] = 116; // 18;
2205  fT2d_DeeSCCons[dee - 1][106 - 1] = 258;
2206  fT2d_DeeSCCons[dee][106 - 1] = 109; // 11;
2207  fT2d_DeeSCCons[dee - 1][107 - 1] = 251;
2208  fT2d_DeeSCCons[dee][107 - 1] = 102; // 7;
2209 
2210  fT2d_DeeSCCons[dee - 1][123 - 1] = 268;
2211  fT2d_DeeSCCons[dee][123 - 1] = 119; // 27; // 268b ; 119b;
2212  fT2d_DeeSCCons[dee - 1][124 - 1] = 273;
2213  fT2d_DeeSCCons[dee][124 - 1] = 124; // 26;
2214  fT2d_DeeSCCons[dee - 1][125 - 1] = 266;
2215  fT2d_DeeSCCons[dee][125 - 1] = 117; // 19;
2216  fT2d_DeeSCCons[dee - 1][126 - 1] = 259;
2217  fT2d_DeeSCCons[dee][126 - 1] = 110; // 12;
2218 
2219  fT2d_DeeSCCons[dee - 1][144 - 1] = 261;
2220  fT2d_DeeSCCons[dee][144 - 1] = 112; // 27; // 261c ; 112c;
2221  fT2d_DeeSCCons[dee - 1][145 - 1] = 267;
2222  fT2d_DeeSCCons[dee][145 - 1] = 118; // 20;
2223  fT2d_DeeSCCons[dee - 1][146 - 1] = 260;
2224  fT2d_DeeSCCons[dee][146 - 1] = 111; // 13;
2225 
2226  fT2d_DeeSCCons[dee - 1][165 - 1] = 261;
2227  fT2d_DeeSCCons[dee][165 - 1] = 112; // 27; // 261b ; 112b;
2228 
2229  //.......................................... D1 or D3, right half of S5
2230  fT2d_DeeSCCons[dee - 1][1 - 1] = 297; // 34;
2231  fT2d_DeeSCCons[dee - 1][2 - 1] = 296; // 33;
2232  fT2d_DeeSCCons[dee - 1][3 - 1] = 295; // 32;
2233  fT2d_DeeSCCons[dee - 1][4 - 1] = 294; // 31;
2234  fT2d_DeeSCCons[dee - 1][5 - 1] = 289; // 26;
2235  fT2d_DeeSCCons[dee - 1][6 - 1] = 288; // 25;
2236  fT2d_DeeSCCons[dee - 1][7 - 1] = 287; // 24;
2237  fT2d_DeeSCCons[dee - 1][8 - 1] = 286; // 23;
2238 
2239  fT2d_DeeSCCons[dee - 1][21 - 1] = 293; // 30;
2240  fT2d_DeeSCCons[dee - 1][22 - 1] = 292; // 29;
2241  fT2d_DeeSCCons[dee - 1][23 - 1] = 291; // 28;
2242  fT2d_DeeSCCons[dee - 1][24 - 1] = 290; // 27;
2243  fT2d_DeeSCCons[dee - 1][25 - 1] = 285; // 22;
2244  fT2d_DeeSCCons[dee - 1][26 - 1] = 284; // 21;
2245 
2246  fT2d_DeeSCCons[dee - 1][41 - 1] = 281; // 20; // 281a
2247  fT2d_DeeSCCons[dee - 1][42 - 1] = 280; // 19;
2248  fT2d_DeeSCCons[dee - 1][43 - 1] = 279; // 18;
2249 
2250  //.......................................... D2 or D4, left half of S5
2251  fT2d_DeeSCCons[dee][1 - 1] = 148; // 17;
2252  fT2d_DeeSCCons[dee][2 - 1] = 147; // 16;
2253  fT2d_DeeSCCons[dee][3 - 1] = 146; // 15;
2254  fT2d_DeeSCCons[dee][4 - 1] = 145; // 14;
2255  fT2d_DeeSCCons[dee][5 - 1] = 140; // 9;
2256  fT2d_DeeSCCons[dee][6 - 1] = 139; // 8;
2257  fT2d_DeeSCCons[dee][7 - 1] = 138; // 7;
2258  fT2d_DeeSCCons[dee][8 - 1] = 137; // 6;
2259 
2260  fT2d_DeeSCCons[dee][21 - 1] = 144; // 13;
2261  fT2d_DeeSCCons[dee][22 - 1] = 143; // 12;
2262  fT2d_DeeSCCons[dee][23 - 1] = 142; // 11;
2263  fT2d_DeeSCCons[dee][24 - 1] = 141; // 10;
2264  fT2d_DeeSCCons[dee][25 - 1] = 136; // 5;
2265  fT2d_DeeSCCons[dee][26 - 1] = 135; // 4;
2266 
2267  fT2d_DeeSCCons[dee][41 - 1] = 132; // 3; // 132a
2268  fT2d_DeeSCCons[dee][42 - 1] = 131; // 2;
2269  fT2d_DeeSCCons[dee][43 - 1] = 130; // 1;
2270  }
2271 
2272  //........................ ECNA numbers from numbers for constructions: fT2d_RecovDeeSC[][]
2273 
2274  for (Int_t i0EEDee = 0; i0EEDee < MaxEEDee; i0EEDee++) {
2275  for (Int_t i_ecna = 0; i_ecna < MaxDeeSC; i_ecna++) {
2276  //....... test to avoid the -1 init value in 2nd index of array fT2d_RecovDeeSC[][]
2277  // (part of the matrix without real SC counterpart)
2278  if (fT2d_DeeSCCons[i0EEDee][i_ecna] >= 0 && fT2d_DeeSCCons[i0EEDee][i_ecna] <= MaxEESCForCons) {
2279  fT2d_RecovDeeSC[i0EEDee][fT2d_DeeSCCons[i0EEDee][i_ecna] - 1] = i_ecna + 1;
2280  }
2281  }
2282  }
2283 }
2284 //------------ (end of BuildEndcapSCTable) -------------------------
2285 
2286 //===============================================================================
2287 //
2288 // Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha
2289 // GetDeeCrysFromDeeEcha
2290 //
2291 //===============================================================================
2293  const Int_t& i0SCEcha,
2294  const TString& sDeeDir) {
2295  //get crystal number in Dee from SC number in Dee
2296  // and from Electronic Channel number in super-crystal
2297 
2298  Int_t n1DeeCrys = 0;
2299  Int_t i0DeeDir = GetDeeDirIndex(sDeeDir);
2300 
2301  if (fT3dDeeCrys == nullptr) {
2303  }
2304 
2305  if ((n1DeeSCEcna >= 1) && (n1DeeSCEcna <= fEcal->MaxSCEcnaInDee())) {
2306  if (i0SCEcha >= 0 && i0SCEcha < fEcal->MaxCrysInSC()) {
2307  n1DeeCrys = fT3dDeeCrys[n1DeeSCEcna - 1][i0SCEcha][i0DeeDir];
2308  } else {
2309  n1DeeCrys = -2; // Electronic Cnannel in Super-Crystal out of range
2310  std::cout << "!TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(...)> Electronic Channel in SuperCrystal = "
2311  << i0SCEcha + 1 << ". Out of range (range = [1," << fEcal->MaxCrysInSC() << "])" << fTTBELL
2312  << std::endl;
2313  }
2314  } else {
2315  n1DeeCrys = -3; // Super-Crystal number in Dee out of range
2316  std::cout << "!TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(...)> Super-Crystal number in Dee out of range."
2317  << " n1DeeSCEcna = " << n1DeeSCEcna << fTTBELL << std::endl;
2318  }
2319 
2320  return n1DeeCrys; // Range = [1,5000]
2321 }
2322 
2323 //===============================================================================
2324 //
2325 // Get1SCEchaFrom1DeeCrys, Get1DeeSCEcnaFrom1DeeCrys
2326 //
2327 //===============================================================================
2328 
2329 Int_t TEcnaNumbering::Get1SCEchaFrom1DeeCrys(const Int_t& n1DeeCrys, const TString& sDeeDir) {
2330  // get Electronic Channel number in Super-Crystal from Crystal ECNA number in Dee
2331 
2332  Int_t n1SCEcha = -1;
2333  Int_t iDeeDir = GetDeeDirIndex(sDeeDir);
2334 
2335  if (n1DeeCrys >= 1 && n1DeeCrys <= fEcal->MaxCrysEcnaInDee()) {
2336  n1SCEcha = fT2dSCEcha[n1DeeCrys - 1][iDeeDir];
2337  } else {
2338  n1SCEcha = -2;
2339  std::cout << "!TEcnaNumbering::Get1SCEchaFrom1DeeCrys(...)> Crystal number in Dee out of range."
2340  << " n1DeeCrys = " << n1DeeCrys << "(max = " << fEcal->MaxCrysEcnaInDee() << ")" << fTTBELL << std::endl;
2341  }
2342  return n1SCEcha; // range = [1,25]
2343 }
2344 
2345 Int_t TEcnaNumbering::Get1DeeSCEcnaFrom1DeeCrys(const Int_t& n1DeeCrys, const TString& sDeeDir) {
2346  // get Super-Crystal number in Dee from Crystal number in Dee
2347 
2348  Int_t n1DeeSCEcna = 0;
2349  Int_t iDeeDir = GetDeeDirIndex(sDeeDir);
2350 
2351  if (n1DeeCrys >= 1 && n1DeeCrys <= fEcal->MaxCrysEcnaInDee()) {
2352  n1DeeSCEcna = fT2dDeeSC[n1DeeCrys - 1][iDeeDir];
2353  } else {
2354  n1DeeSCEcna = -1;
2355  std::cout << "!TEcnaNumbering::Get1DeeSCEcnaFrom1DeeCrys(...)> Crystal number in Dee out of range."
2356  << " n1DeeCrys = " << n1DeeCrys << "(max = " << fEcal->MaxCrysEcnaInDee() << ")" << fTTBELL << std::endl;
2357  }
2358  return n1DeeSCEcna; // range = [1,200]
2359 }
2360 
2361 //===============================================================================
2362 //
2363 // GetSCEchaFromDeeEcha
2364 // Get1DeeSCEcnaFromDeeEcha
2365 //
2366 //===============================================================================
2367 
2368 Int_t TEcnaNumbering::Get1SCEchaFrom0DeeEcha(const Int_t& i0DeeEcha) {
2369  //get electronic channel number in super-crystal from electronic channel number in Dee
2370 
2371  Int_t i0DeeSC = i0DeeEcha / fEcal->MaxCrysInSC();
2372  Int_t n1SCEcha = i0DeeEcha - fEcal->MaxCrysInSC() * i0DeeSC + 1;
2373 
2374  return n1SCEcha; // range = [1,25]
2375 }
2376 
2377 Int_t TEcnaNumbering::Get1DeeSCEcnaFrom0DeeEcha(const Int_t& i0DeeEcha) {
2378  //get super-crystal number from electronic channel number in Dee
2379 
2380  Int_t n1DeeSC = i0DeeEcha / fEcal->MaxCrysInSC() + 1;
2381 
2382  return n1DeeSC; // range = [1,200]
2383 }
2384 
2385 //--------------------------------------------------------------------------------
2386 //
2387 // Correspondance (n1DeeNumber, DeeSC) <-> (DS, DSSC, DeeSCCons)
2388 //
2389 // GetDSFrom1DeeSCEcna, GetDSSCFrom1DeeSCEcna,
2390 // GetDeeSCConsFrom1DeeSCEcna, Get1DeeSCEcnaFromDeeSCCons
2391 //
2392 // Get the values from the relevant arrays
2393 // with cross-check of the index values in argument
2394 //--------------------------------------------------------------------------------
2395 
2396 Int_t TEcnaNumbering::GetDSFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna) {
2397  // Get Data Sector number from SC ECNA number in Dee
2398 
2399  Int_t data_sector = -1;
2400 
2401  if (n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE()) {
2402  if (n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee()) {
2403  data_sector = fT2d_DS[n1DeeNumber - 1][n1DeeSCEcna - 1];
2404  } else {
2405  std::cout << "!TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> n1DeeSCEcna = " << n1DeeSCEcna
2406  << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] )" << fTTBELL << std::endl;
2407  }
2408  } else {
2409  if (n1DeeNumber != 0) {
2410  std::cout << "!TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
2411  << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )" << fTTBELL << std::endl;
2412  } else {
2413  std::cout << "TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber << ". Out of range (range = [1,"
2414  << fEcal->MaxDeeInEE() << "])" << fTTBELL << std::endl;
2415  }
2416  }
2417  return data_sector;
2418 }
2419 //..........................................................................................
2420 Int_t TEcnaNumbering::GetDSSCFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna, const Int_t& n1SCEcha) {
2421  //.......... Get the correct SC number for the unconnected SC's (inner border)
2422  Int_t ds_sc = GetDSSCFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
2423 
2424  if (n1DeeSCEcna == 29 || n1DeeSCEcna == 32) {
2425  if (n1SCEcha == 11) {
2426  if (ds_sc == 14) {
2427  ds_sc = 21;
2428  } // 14 <=> 261/BR OR 112/BL
2429  }
2430  if (n1SCEcha == 1 || n1SCEcha == 2 || n1SCEcha == 3 || n1SCEcha == 6 || n1SCEcha == 7) {
2431  if (ds_sc == 3) {
2432  ds_sc = 25;
2433  } // 3 <=> 178/TR OR 29/TL
2434  }
2435  }
2436  return ds_sc;
2437 }
2438 //..........................................................................................
2439 Int_t TEcnaNumbering::GetDSSCFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna) {
2440  // Get SC number in Data Sector from SC Ecna number in Dee
2441 
2442  Int_t ds_sc = -1;
2443 
2444  if (n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE()) {
2445  if (n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee()) {
2446  ds_sc = fT2d_DSSC[n1DeeNumber - 1][n1DeeSCEcna - 1]; // 25 (not 3) or 14 (not 21) if n1DeeSCEcna = 32 or 29
2447  // 25 and 14 => 5 Xtals, 3 and 21 => 1 Xtal
2448  } else {
2449  std::cout << "!TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> n1DeeSCEcna = " << n1DeeSCEcna
2450  << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] )" << fTTBELL << std::endl;
2451  }
2452  } else {
2453  if (n1DeeNumber != 0) {
2454  std::cout << "!TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
2455  << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )" << fTTBELL << std::endl;
2456  } else {
2457  std::cout << "TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber << ". Out of range (range = [1,"
2458  << fEcal->MaxDeeInEE() << "])" << fTTBELL << std::endl;
2459  }
2460  }
2461  return ds_sc;
2462 }
2463 //..........................................................................................
2464 Int_t TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna) {
2465  // Get SC number for Construction in Dee from SC ECNA number in Dee
2466 
2467  Int_t dee_sc_cons = -1;
2468 
2469  if (n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE()) {
2470  if (n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee()) {
2471  dee_sc_cons = fT2d_DeeSCCons[n1DeeNumber - 1][n1DeeSCEcna - 1];
2472  } else {
2473  std::cout << "!TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> *** WARNING *** n1DeeSCEcna = " << n1DeeSCEcna
2474  << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] ). Nb for const. forced to "
2475  << fT2d_DeeSCCons[n1DeeNumber - 1][19] << "." << std::endl;
2476  dee_sc_cons = fT2d_DeeSCCons[n1DeeNumber - 1][19];
2477  }
2478  } else {
2479  if (n1DeeNumber != 0) {
2480  std::cout << "!TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
2481  << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )" << fTTBELL << std::endl;
2482  } else {
2483  std::cout << "TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
2484  << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])" << fTTBELL << std::endl;
2485  }
2486  }
2487  return dee_sc_cons;
2488 }
2489 //..........................................................................................
2490 Int_t TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(const Int_t& n1DeeNumber,
2491  const Int_t& n1DeeSCEcna,
2492  const Int_t& n1SCEcha) {
2493  //.......... Get the correct SC number (for cons) for the unconnected SC's (inner border)
2494  Int_t dee_sc_cons = GetDeeSCConsFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
2495 
2496  if (n1DeeSCEcna == 29 || n1DeeSCEcna == 32) {
2497  if (n1SCEcha == 11) {
2498  if (dee_sc_cons == 261) {
2499  dee_sc_cons = 268;
2500  } // 261<=>14/BR
2501  if (dee_sc_cons == 112) {
2502  dee_sc_cons = 119;
2503  } // 112<=>14/BL
2504  }
2505  if (n1SCEcha == 1 || n1SCEcha == 2 || n1SCEcha == 3 || n1SCEcha == 6 || n1SCEcha == 7) {
2506  if (dee_sc_cons == 178) {
2507  dee_sc_cons = 207;
2508  } // 178<=>3/TR
2509  if (dee_sc_cons == 29) {
2510  dee_sc_cons = 58;
2511  } // 29<=>3/TL
2512  }
2513  }
2514  return dee_sc_cons;
2515 }
2516 //..........................................................................................
2517 Int_t TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(const Int_t& n1DeeNumber, const Int_t& DeeSCCons) {
2518  // Get SC Ecna number in Dee from SC number for Construction in Dee
2519 
2520  Int_t dee_sc_ecna = -1;
2521 
2522  if (n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE()) {
2523  Int_t off_set_cons = 0;
2524  if (n1DeeNumber == 1 || n1DeeNumber == 3) {
2525  off_set_cons = fEcal->MaxSCForConsInDee();
2526  }
2527 
2528  if (DeeSCCons > off_set_cons && DeeSCCons <= fEcal->MaxSCForConsInDee() + off_set_cons) {
2529  dee_sc_ecna = fT2d_RecovDeeSC[n1DeeNumber - 1][DeeSCCons - 1];
2530  } else {
2531  std::cout << "!TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> DeeSCCons = " << DeeSCCons
2532  << ". Out of range ( range = [ " << off_set_cons + 1 << "," << fEcal->MaxSCForConsInDee() + off_set_cons
2533  << "] )" << fTTBELL << std::endl;
2534  }
2535  } else {
2536  if (n1DeeNumber != 0) {
2537  std::cout << "!TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> n1DeeNumber = " << n1DeeNumber
2538  << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )" << fTTBELL << std::endl;
2539  } else {
2540  std::cout << "TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> Dee = " << n1DeeNumber
2541  << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])" << fTTBELL << std::endl;
2542  }
2543  }
2544  return dee_sc_ecna;
2545 }
2546 
2547 TString TEcnaNumbering::GetSCType(const Int_t& nb_for_cons) {
2548  // gives the special not connected SC's
2549 
2550  TString SCType = "Connected"; // => default type
2551 
2552  if (nb_for_cons == 182 || nb_for_cons == 33) {
2553  SCType = "NotConnected";
2554  } // (D1,S1) (D3,S9) || (D2,S9) (D4,S1)
2555 
2556  if (nb_for_cons == 178 || nb_for_cons == 29) {
2557  SCType = "NotConnected";
2558  } // (D1,S2) (D3,S8) || (D2,S8) (D4,S2)
2559  if (nb_for_cons == 207 || nb_for_cons == 58) {
2560  SCType = "NotConnected";
2561  }
2562 
2563  if (nb_for_cons == 298 || nb_for_cons == 149) {
2564  SCType = "NotConnected";
2565  } // (D1,S3) (D3,S7) || (D2,S7) (D4,S3)
2566 
2567  if (nb_for_cons == 261 || nb_for_cons == 112) {
2568  SCType = "NotConnected";
2569  } // (D1,S4) (D3,S6) || (D2,S6) (D4,S4)
2570  if (nb_for_cons == 268 || nb_for_cons == 119) {
2571  SCType = "NotConnected";
2572  }
2573 
2574  if (nb_for_cons == 281 || nb_for_cons == 132) {
2575  SCType = "NotConnected";
2576  } // (D1,S5) (D3,S5) || (D2,S5) (D4,S5)
2577 
2578  if (nb_for_cons == 161 || nb_for_cons == 12) {
2579  SCType = "NotComplete";
2580  } // (D1,S1) (D3,S9) || (D2,S9) (D4,S1)
2581  if (nb_for_cons == 216 || nb_for_cons == 67) {
2582  SCType = "NotComplete";
2583  } // (D1,S2) (D3,S8) || (D2,S8) (D4,S2)
2584  if (nb_for_cons == 224 || nb_for_cons == 75) {
2585  SCType = "NotComplete";
2586  } // (D1,S3) (D3,S7) || (D2,S7) (D4,S3)
2587  if (nb_for_cons == 286 || nb_for_cons == 137) {
2588  SCType = "NotComplete";
2589  } // (D1,S5) (D3,S5) || (D2,S5) (D4,S5)
2590 
2591  return SCType;
2592 }
2593 
2594 Int_t TEcnaNumbering::StexEchaForCons(const Int_t& n1DeeNumber, const Int_t& i0StexEcha) {
2595  Int_t n1StexStin = Get1StexStinFrom0StexEcha(i0StexEcha);
2596  return fT2d_DeeSCCons[n1DeeNumber - 1][n1StexStin - 1];
2597 }
2598 // return -1 if the SC does not correspond to a real SC; return the number for construction otherwise
2599 
2600 //===========================================================================
2601 //
2602 // GetSCQuadFrom1DeeSCEcna
2603 //
2604 //===========================================================================
2605 
2606 TString TEcnaNumbering::GetSCQuadFrom1DeeSCEcna(const Int_t& n1DeeSCEcna) {
2607  //gives the quadrant type ("top" or "bottom") from the SC number in Dee
2608 
2609  TString SCQuad = "top"; // => default value
2610 
2611  if (n1DeeSCEcna >= 1 && n1DeeSCEcna <= 10) {
2612  SCQuad = "bottom";
2613  }
2614  if (n1DeeSCEcna >= 21 && n1DeeSCEcna <= 30) {
2615  SCQuad = "bottom";
2616  }
2617  if (n1DeeSCEcna >= 41 && n1DeeSCEcna <= 50) {
2618  SCQuad = "bottom";
2619  }
2620  if (n1DeeSCEcna >= 61 && n1DeeSCEcna <= 70) {
2621  SCQuad = "bottom";
2622  }
2623  if (n1DeeSCEcna >= 81 && n1DeeSCEcna <= 90) {
2624  SCQuad = "bottom";
2625  }
2626  if (n1DeeSCEcna >= 101 && n1DeeSCEcna <= 110) {
2627  SCQuad = "bottom";
2628  }
2629  if (n1DeeSCEcna >= 121 && n1DeeSCEcna <= 130) {
2630  SCQuad = "bottom";
2631  }
2632  if (n1DeeSCEcna >= 141 && n1DeeSCEcna <= 150) {
2633  SCQuad = "bottom";
2634  }
2635  if (n1DeeSCEcna >= 161 && n1DeeSCEcna <= 170) {
2636  SCQuad = "bottom";
2637  }
2638  if (n1DeeSCEcna >= 181 && n1DeeSCEcna <= 190) {
2639  SCQuad = "bottom";
2640  }
2641 
2642  return SCQuad;
2643 }
2644 Int_t TEcnaNumbering::GetSCQuadTypeIndex(const TString& SCQuadType, const TString& sDeeDir) {
2645  //gives the index of the SC quadrant type (top/right, top/left, bottom/left, bottom/right)
2646  // = quadrant number - 1
2647 
2648  Int_t itype = 0; // => default
2649  if (SCQuadType == "top" && sDeeDir == "right") {
2650  itype = 0;
2651  }
2652  if (SCQuadType == "top" && sDeeDir == "left") {
2653  itype = 1;
2654  }
2655  if (SCQuadType == "bottom" && sDeeDir == "left") {
2656  itype = 2;
2657  }
2658  if (SCQuadType == "bottom" && sDeeDir == "right") {
2659  itype = 3;
2660  }
2661  return itype;
2662 }
2663 //===========================================================================
2664 //
2665 // GetEEDeeType, GetDeeDirViewedFromIP
2666 //
2667 //===========================================================================
2668 TString TEcnaNumbering::GetEEDeeEndcap(const Int_t& n1DeeNumber) {
2669  //gives the Endcap (EE+ or EE-) of the Dee (H. Heath, CMS NOTE 2006/027)
2670 
2671  TString eetype = "EE+"; // => default
2672  if (n1DeeNumber == 1 || n1DeeNumber == 2) {
2673  eetype = "EE+";
2674  }
2675  if (n1DeeNumber == 3 || n1DeeNumber == 4) {
2676  eetype = "EE-";
2677  }
2678  return eetype;
2679 }
2680 TString TEcnaNumbering::GetEEDeeType(const Int_t& n1DeeNumber) {
2681  //gives the EE +/- and Forward/Near of the Dee (H. Heath, CMS NOTE 2006/027)
2682 
2683  TString type = "EE+F"; // => default
2684  if (n1DeeNumber == 1) {
2685  type = "EE+F";
2686  }
2687  if (n1DeeNumber == 2) {
2688  type = "EE+N";
2689  }
2690  if (n1DeeNumber == 3) {
2691  type = "EE-N";
2692  }
2693  if (n1DeeNumber == 4) {
2694  type = "EE-F";
2695  }
2696  return type;
2697 }
2698 
2699 TString TEcnaNumbering::GetDeeDirViewedFromIP(const Int_t& n1DeeNumber) {
2700  //gives the direction (left/right) of the IX axis of the Dee
2701  // looking from the interaction point
2702 
2703  TString sDeeDir = "right"; // => default
2704  if ((n1DeeNumber == 1) || (n1DeeNumber == 3)) {
2705  sDeeDir = "right";
2706  }
2707  if ((n1DeeNumber == 2) || (n1DeeNumber == 4)) {
2708  sDeeDir = "left";
2709  }
2710  return sDeeDir;
2711 }
2712 Int_t TEcnaNumbering::GetDeeDirIndex(const TString& sDeeDir) {
2713  //gives the index of the direction (left,right) of the IX axis of the Dee
2714  // looking from the interaction point (right = 0, left = 1)
2715 
2716  Int_t iDeeDir = 0; // => default
2717  if (sDeeDir == "right") {
2718  iDeeDir = 0;
2719  }
2720  if (sDeeDir == "left") {
2721  iDeeDir = 1;
2722  }
2723  return iDeeDir;
2724 }
2725 
2726 //==============================================================================
2727 //
2728 // GetIXCrysInSC, GetJYCrysInSC
2729 // GetIXSCInDee, GetJYSCInDee
2730 // GetIXCrysInDee, GetJYCrysInDConsFrom1DeeSCEcna(fStexNumber, StexStinEcna);
2731 //
2732 //==============================================================================
2733 Int_t TEcnaNumbering::GetIXCrysInSC(const Int_t& n1DeeNumber, const Int_t& DeeSC, const Int_t& i0SCEcha) {
2734  //Gives Crys IX in SC for a given (n1DeeNumber, DeeSC, i0SCEcha)
2735 
2736  TString SCQuadType = GetSCQuadFrom1DeeSCEcna(DeeSC);
2737  TString sDeeDir = GetDeeDirViewedFromIP(n1DeeNumber);
2738  Int_t type_index = GetSCQuadTypeIndex(SCQuadType, sDeeDir);
2739  Int_t IXCrysInSC = fT2d_ich_IX[type_index][i0SCEcha + 1] + 1;
2740  return IXCrysInSC; // possible values: 1,2,3,4,5
2741 }
2742 
2743 Int_t TEcnaNumbering::GetIXSCInDee(const Int_t& DeeSC) {
2744  //Gives SC IX in Dee for a given (DeeSC)
2745 
2746  Int_t IXSCInDee = (DeeSC - 1) / fEcal->MaxSCIYInDee() + 1;
2747  return IXSCInDee; // possible values: 1,2,...,9,10
2748 }
2749 
2750 Int_t TEcnaNumbering::GetIXCrysInDee(const Int_t& n1DeeNumber, const Int_t& DeeSC, const Int_t& i0SCEcha) {
2751  //Gives Crys IX in Dee for a given (n1DeeNumber, DeeSC, i0SCEcha)
2752 
2753  Int_t IXCrysInDee = (GetIXSCInDee(DeeSC) - 1) * fEcal->MaxCrysIXInSC() + GetIXCrysInSC(n1DeeNumber, DeeSC, i0SCEcha);
2754  return IXCrysInDee; // possible values: 1,2,...,49,50
2755 }
2756 //---------------------------------------------------------------------------------
2757 Int_t TEcnaNumbering::GetJYCrysInSC(const Int_t& n1DeeNumber, const Int_t& DeeSC, const Int_t& i0SCEcha) {
2758  //Gives Crys JY in SC for a given (n1DeeNumber, DeeSC, i0SCEcha)
2759 
2760  TString SCQuadType = GetSCQuadFrom1DeeSCEcna(DeeSC);
2761  TString sDeeDir = GetDeeDirViewedFromIP(n1DeeNumber);
2762  Int_t type_index = GetSCQuadTypeIndex(SCQuadType, sDeeDir);
2763  Int_t JYCrysInSC = fT2d_jch_JY[type_index][i0SCEcha + 1] + 1;
2764  return JYCrysInSC; // possible values: 1,2,3,4,5
2765 }
2766 
2767 Int_t TEcnaNumbering::GetJYSCInDee(const Int_t& DeeSC) {
2768  //Gives SC JY in Dee for a given (n1DeeNumber, DeeSC, i0SCEcha)
2769 
2770  Int_t JYSCInDee = (DeeSC - 1) % fEcal->MaxSCIYInDee() + 1;
2771  return JYSCInDee; // possible values: 1,2,...,19,20
2772 }
2773 
2774 Int_t TEcnaNumbering::GetJYCrysInDee(const Int_t& n1DeeNumber, const Int_t& DeeSC, const Int_t& i0SCEcha) {
2775  //Gives Crys JY in Dee for a given (n1DeeNumber, DeeSC, i0SCEcha)
2776 
2777  Int_t JYCrysInDee = (GetJYSCInDee(DeeSC) - 1) * fEcal->MaxCrysIYInSC() + GetJYCrysInSC(n1DeeNumber, DeeSC, i0SCEcha);
2778  return JYCrysInDee; // possible values: 1,2,...,99,100
2779 }
2780 //---------------------------------------------------------------------------------
2781 Int_t TEcnaNumbering::GetMaxSCInDS(const Int_t& DeeDS) {
2782  // Gives the number of SC's in Data Sector DeeDS
2783 
2784  Int_t nb_of_sc = -1;
2785  if (DeeDS == 1 || DeeDS == 9) {
2786  nb_of_sc = 33;
2787  }
2788  if (DeeDS == 2 || DeeDS == 8) {
2789  nb_of_sc = 32;
2790  }
2791  if (DeeDS == 3 || DeeDS == 7) {
2792  nb_of_sc = 34;
2793  }
2794  if (DeeDS == 4 || DeeDS == 6) {
2795  nb_of_sc = 33;
2796  }
2797  if (DeeDS == 5) {
2798  nb_of_sc = 34;
2799  }
2800  return nb_of_sc;
2801 }
2802 
2803 //==============================================================================
2804 //
2805 // GetIXMin, GetIXMax, GetIIXMin, GetIIXMax
2806 //
2807 //==============================================================================
2808 Double_t TEcnaNumbering::GetIIXMin(const Int_t& DeeSC) {
2809  //Gives IIXMin for a given DeeSC , unit = crystal
2810 
2811  Double_t IX_min = (Double_t)((DeeSC - 1) / fEcal->MaxSCIYInDee()) * fEcal->MaxCrysIXInSC() + 1.;
2812  return IX_min;
2813 }
2814 
2815 Double_t TEcnaNumbering::GetIIXMax(const Int_t& DeeSC) {
2816  //Gives IIXMax for a given DeeSC , unit = crystal
2817 
2818  Double_t IX_max = ((Double_t)((DeeSC - 1) / fEcal->MaxSCIYInDee()) + 1.) * fEcal->MaxCrysIXInSC();
2819  return IX_max;
2820 }
2821 
2823  //Gives IIXMin for Dee , unit = Super-crystal
2824 
2825  Double_t i_IX_min = (Int_t)1.;
2826  return i_IX_min;
2827 }
2828 
2830  //Gives IIXMax for Dee , unit = Super-crystal
2831 
2832  Double_t i_IX_max = (Int_t)fEcal->MaxSCIXInDee();
2833  return i_IX_max;
2834 }
2835 
2836 //==============================================================================
2837 //
2838 // GetIIYMin, GetIIYMax
2839 //
2840 //==============================================================================
2841 Double_t TEcnaNumbering::GetJIYMin(const Int_t& n1DeeNumber, const Int_t& DeeSC) {
2842  //Gives JIYMin for a given Super-Crystal
2843 
2844  Double_t IY_DeeSC = DeeSC % fEcal->MaxSCIYInDee();
2845  if (IY_DeeSC == 0.) {
2846  IY_DeeSC = fEcal->MaxSCIYInDee();
2847  }
2848 
2849  Double_t j_IY_min = (IY_DeeSC - 1) * fEcal->MaxCrysIYInSC() + 1.;
2850 
2851  return j_IY_min;
2852 }
2853 //-----------------------------------------------------------------------------------------
2854 Double_t TEcnaNumbering::GetJIYMax(const Int_t& n1DeeNumber, const Int_t& DeeSC) {
2855  //Gives JIYMax for a given Super-Crystal
2856 
2857  Double_t IY_DeeSC = DeeSC % fEcal->MaxSCIYInDee();
2858  if (IY_DeeSC == 0) {
2859  IY_DeeSC = fEcal->MaxSCIYInDee();
2860  }
2861 
2862  Double_t j_IY_max = IY_DeeSC * fEcal->MaxCrysIYInSC();
2863 
2864  return j_IY_max;
2865 }
2866 
2867 //-----------------------------------------------------------------------------------------
2868 Double_t TEcnaNumbering::GetJIYMin(const Int_t& n1DeeNumber) {
2869  //Gives JIYMin for a given Dee
2870 
2871  Double_t j_IY_min = (Double_t)1.;
2872 
2873  return j_IY_min;
2874 }
2875 //-----------------------------------------------------------------------------------------
2876 Double_t TEcnaNumbering::GetJIYMax(const Int_t& n1DeeNumber) {
2877  //Gives JIYMax for a given Dee
2878 
2879  Double_t j_IY_max = (Double_t)fEcal->MaxSCIYInDee();
2880 
2881  return j_IY_max;
2882 }
2883 //=====================================================================
2884 TString TEcnaNumbering::GetDeeHalfEndcap(const Int_t& n1DeeNumber) {
2885  //gives the half-endcap of the Dee ("EE+" or "EE-")
2886 
2887  TString type = "EE-"; // => default value
2888 
2889  if (n1DeeNumber == 1 || n1DeeNumber == 2) {
2890  type = "EE+";
2891  }
2892  if (n1DeeNumber == 3 || n1DeeNumber == 4) {
2893  type = "EE-";
2894  }
2895 
2896  return type;
2897 }
2898 //==============================================================================
2899 //
2900 // GetXDirectionEE, GetYDirectionEE, GetJYDirectionEE
2901 //
2902 //==============================================================================
2903 TString TEcnaNumbering::GetXDirectionEE(const Int_t& n1DeeNumber) {
2904  TString xdirection = "x"; // DEFAULT
2905 
2906  if (GetEEDeeType(n1DeeNumber) == "EE+F") {
2907  xdirection = "-x";
2908  } // Dee 1
2909  if (GetEEDeeType(n1DeeNumber) == "EE+N") {
2910  xdirection = "-x";
2911  } // Dee 2
2912  if (GetEEDeeType(n1DeeNumber) == "EE-N") {
2913  xdirection = "x";
2914  } // Dee 3
2915  if (GetEEDeeType(n1DeeNumber) == "EE-F") {
2916  xdirection = "x";
2917  } // Dee 4
2918 
2919  return xdirection;
2920 }
2921 //---------------------------------------------------------
2922 TString TEcnaNumbering::GetYDirectionEE(const Int_t& n1DeeNumber) {
2923  TString ydirection = "-x"; // DEFAULT
2924 
2925  if (GetEEDeeType(n1DeeNumber) == "endcap+") {
2926  ydirection = "-x";
2927  }
2928  if (GetEEDeeType(n1DeeNumber) == "endcap-") {
2929  ydirection = "-x";
2930  }
2931 
2932  return ydirection;
2933 }
2934 
2935 //---------------------------------------------------------
2936 TString TEcnaNumbering::GetJYDirectionEE(const Int_t& n1DeeNumber) {
2937  TString jydirection = "x"; // ALWAYS IN THIS CASE
2938  return jydirection;
2939 }
2940 
2941 //==========================================================================================================
2942 //
2943 //
2944 // B A R R E L A N D E N D C A P
2945 //
2946 //
2947 //
2948 //==========================================================================================================
2949 //===============================================================================
2950 //
2951 // Get1StexStinFrom0StexEcha
2952 // // GetStinEchaFromStexEcha
2953 // Get0StexEchaFrom1StexStinAnd0StinEcha
2954 // Get1StexCrysFrom1StexStinAnd0StinEcha
2955 //
2956 //===============================================================================
2957 Int_t TEcnaNumbering::Get1StexStinFrom0StexEcha(const Int_t& i0StexEcha) {
2958  Int_t n1StexStin = 0;
2959 
2960  if (fFlagSubDet == "EB") {
2961  n1StexStin = Get1SMTowFrom0SMEcha(i0StexEcha);
2962  }
2963  if (fFlagSubDet == "EE") {
2964  n1StexStin = Get1DeeSCEcnaFrom0DeeEcha(i0StexEcha);
2965  }
2966 
2967  return n1StexStin;
2968 }
2969 
2970 Int_t TEcnaNumbering::Get0StexEchaFrom1StexStinAnd0StinEcha(const Int_t& n1StexStin, const Int_t& i0StinEcha) {
2971  // Electronic Channel number in Stex from Stin number in Stex
2972  // and from Electronic Channel number in Stin
2973 
2974  Int_t StexEcha = (Int_t)(-1.);
2975 
2976  if (n1StexStin > 0 && n1StexStin <= fEcal->MaxStinEcnaInStex() && i0StinEcha >= 0 &&
2977  i0StinEcha < fEcal->MaxCrysInStin()) {
2978  StexEcha = (n1StexStin - 1) * fEcal->MaxCrysInStin() + i0StinEcha;
2979  } else {
2980  std::cout << "!TEcnaNumbering::Get0StexEchaFrom1StexStinAnd0StinEcha *** ERROR ***> VALUE"
2981  << " OUT OF RANGE. Forced to -1. Argument values: n1StexStin = " << n1StexStin
2982  << ", channel = " << i0StinEcha << fTTBELL << std::endl;
2983  }
2984  return StexEcha;
2985 }
2987  const Int_t& i0StinEcha,
2988  const Int_t& StexNumber) {
2989  // Crystal number in Stex from Stin number in Stex
2990  // and from Electronic Channel number in Stin (for the StexNumber_th Stex)
2991  // argument StexNumber used only in "EE" case
2992 
2993  Int_t n1StexCrys = (Int_t)0;
2994  if (fFlagSubDet == "EB") {
2995  n1StexCrys = Get1SMCrysFrom1SMTowAnd0TowEcha(n1StexStin, i0StinEcha);
2996  }
2997  if (fFlagSubDet == "EE") {
2998  TString sDeeDir = GetDeeDirViewedFromIP(StexNumber);
2999  n1StexCrys = Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(n1StexStin, i0StinEcha, sDeeDir);
3000  }
3001 
3002  return n1StexCrys;
3003 }
3004 //===============================================================================
3005 //
3006 // GetIHocoMin, GetIHocoMax, GetVecoMin, GetVecoMax
3007 // GetJVecoMin, GetJVecoMax
3008 //
3009 //===============================================================================
3010 Double_t TEcnaNumbering::GetIHocoMin(const Int_t& Stex, const Int_t& StexStin) {
3011  Double_t IHocoMin = (Double_t)0.;
3012  if (fFlagSubDet == "EB") {
3013  IHocoMin = GetIEtaMin(Stex, StexStin);
3014  }
3015  if (fFlagSubDet == "EE") {
3016  IHocoMin = GetIIXMin(StexStin);
3017  }
3018  return IHocoMin;
3019 }
3020 
3021 Double_t TEcnaNumbering::GetIHocoMax(const Int_t& Stex, const Int_t& StexStin) {
3022  Double_t IHocoMax = (Double_t)0.;
3023  if (fFlagSubDet == "EB") {
3024  IHocoMax = GetIEtaMax(Stex, StexStin);
3025  }
3026  if (fFlagSubDet == "EE") {
3027  IHocoMax = GetIIXMax(StexStin);
3028  }
3029  return IHocoMax;
3030 }
3031 
3032 Double_t TEcnaNumbering::GetVecoMin(const Int_t& Stex, const Int_t& StexStin) {
3033  Double_t IVecoMin = (Double_t)0.;
3034  if (fFlagSubDet == "EB") {
3035  IVecoMin = GetPhiMin(Stex, StexStin);
3036  }
3037  if (fFlagSubDet == "EE") {
3038  IVecoMin = GetJIYMin(Stex, StexStin);
3039  }
3040  return IVecoMin;
3041 }
3042 
3043 Double_t TEcnaNumbering::GetVecoMax(const Int_t& Stex, const Int_t& StexStin) {
3044  Double_t IVecoMax = (Double_t)0.;
3045  if (fFlagSubDet == "EB") {
3046  IVecoMax = GetPhiMax(Stex, StexStin);
3047  }
3048  if (fFlagSubDet == "EE") {
3049  IVecoMax = GetJIYMax(Stex, StexStin);
3050  }
3051  return IVecoMax;
3052 }
3053 
3054 Double_t TEcnaNumbering::GetJVecoMin(const Int_t& Stex, const Int_t& StexStin) {
3055  Double_t JVecoMin = (Double_t)0.;
3056  if (fFlagSubDet == "EB") {
3057  JVecoMin = GetJPhiMin(Stex, StexStin);
3058  }
3059  if (fFlagSubDet == "EE") {
3060  JVecoMin = GetJIYMin(Stex, StexStin);
3061  } // not used
3062  return JVecoMin;
3063 }
3064 Double_t TEcnaNumbering::GetJVecoMax(const Int_t& Stex, const Int_t& StexStin) {
3065  Double_t JVecoMax = (Double_t)0.;
3066  if (fFlagSubDet == "EB") {
3067  JVecoMax = GetJPhiMax(Stex, StexStin);
3068  }
3069  if (fFlagSubDet == "EE") {
3070  JVecoMax = GetJIYMax(Stex, StexStin);
3071  } // not used
3072  return JVecoMax;
3073 }
3074 //===========================================================================
3075 //
3076 // GetStexHalfBarrel
3077 //
3078 //===========================================================================
3079 TString TEcnaNumbering::GetStexHalfStas(const Int_t& SMNumber) {
3080  TString half_stas = "EB? EE?";
3081 
3082  if (fFlagSubDet == "EB") {
3083  half_stas = GetSMHalfBarrel(SMNumber);
3084  }
3085  if (fFlagSubDet == "EE") {
3086  half_stas = GetDeeHalfEndcap(SMNumber);
3087  }
3088 
3089  return half_stas;
3090 }
3091 //===========================================================================
3092 //
3093 // GetSMFromFED, GetDSFromFED
3094 //
3095 //===========================================================================
3096 Int_t TEcnaNumbering::GetSMFromFED(const Int_t& FEDNumber) {
3097  Int_t EBSMNumber = 0; // SM = Super Module
3098  if (FEDNumber >= 610 && FEDNumber <= 645) {
3099  EBSMNumber = FEDNumber - 609;
3100  }
3101  return EBSMNumber;
3102 }
3103 
3104 Int_t TEcnaNumbering::GetDSFromFED(const Int_t& FEDNumber) {
3105  Int_t EEDSNumber = 0; // DS = Data Sector
3106 
3107  if (FEDNumber >= 600 && FEDNumber <= 609) {
3108  EEDSNumber = FEDNumber - 599;
3109  }
3110  if (FEDNumber >= 646 && FEDNumber <= 655) {
3111  EEDSNumber = FEDNumber - 645;
3112  }
3113 
3114  return EEDSNumber;
3115 }
3116 
3117 //--------------------------------------------
3118 Int_t TEcnaNumbering::MaxCrysInStinEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna, const TString& s_option) {
3119  // Number of Xtals in "Ecna SC" for not complete and not connected SC's.
3120  // Also valid for all connected and complete SC's and for towers of EB
3121 
3122  Int_t max_crys = fEcal->MaxCrysInStin(); // valid for EB and for connected and complete SC's of EE
3123 
3124  // Number of Xtals in SC for not complete and not connected SC's
3125 
3126  if (fFlagSubDet == "EE") {
3127  Int_t n_for_cons = GetDeeSCConsFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
3128 
3129  //............ not complete SC's (inner border)
3130  if (n_for_cons == 12 || n_for_cons == 67 || n_for_cons == 75 || n_for_cons == 137 || n_for_cons == 161 ||
3131  n_for_cons == 216 || n_for_cons == 224 || n_for_cons == 286) {
3132  max_crys = 20;
3133  }
3134 
3135  //............ not connected SC's
3136  if ((n_for_cons == 182 || n_for_cons == 33) && (n1DeeSCEcna == 60 || n1DeeSCEcna == 119)) {
3137  max_crys = 10;
3138  }
3139 
3140  if ((n_for_cons == 178 || n_for_cons == 29) && (n1DeeSCEcna == 138 || n1DeeSCEcna == 157)) {
3141  max_crys = 10;
3142  }
3143  if ((n_for_cons == 207 || n_for_cons == 58) && (n1DeeSCEcna == 176 || n1DeeSCEcna == 193)) {
3144  max_crys = 10;
3145  }
3146 
3147  if ((n_for_cons == 298 || n_for_cons == 149) && (n1DeeSCEcna == 188)) {
3148  max_crys = 10;
3149  }
3150 
3151  if ((n_for_cons == 261 || n_for_cons == 112) && (n1DeeSCEcna == 144 || n1DeeSCEcna == 165)) {
3152  max_crys = 10;
3153  }
3154  if ((n_for_cons == 268 || n_for_cons == 119) && (n1DeeSCEcna == 102 || n1DeeSCEcna == 123)) {
3155  max_crys = 10;
3156  }
3157 
3158  if ((n_for_cons == 281 || n_for_cons == 132) && (n1DeeSCEcna == 41)) {
3159  max_crys = 10;
3160  }
3161 
3162  //............. not connected and mixed Ecna SC's
3163  if (s_option == "TEcnaRun" || s_option == "TEcnaRead") {
3164  if (s_option == "TEcnaRun") {
3165  // special translation of Xtal 11 of SCEcna 29 and 32 to respectively Xtal 11 of SCEcna 10 and 11
3166  if (n1DeeSCEcna == 29 || n1DeeSCEcna == 32) {
3167  max_crys = 5;
3168  }
3169  if (n1DeeSCEcna == 10 || n1DeeSCEcna == 11) {
3170  max_crys = 1;
3171  }
3172  }
3173  if (s_option == "TEcnaRead") {
3174  //if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 ){max_crys = 6;}
3175  if (n1DeeSCEcna == 29 || n1DeeSCEcna == 32) {
3176  max_crys = 5;
3177  }
3178  if (n1DeeSCEcna == 10 || n1DeeSCEcna == 11) {
3179  max_crys = 1;
3180  }
3181  }
3182  } else {
3183  std::cout << "!TEcnaNumbering::MaxCrysInStinEcna(...)> " << s_option << ": unknown option." << fTTBELL
3184  << std::endl;
3185  }
3186  }
3187  return max_crys;
3188 }
Double_t GetEtaMax(const Int_t &, const Int_t &)
Int_t MaxCrysPhiInTow()
Int_t Get1StexStinFrom0StexEcha(const Int_t &)
Int_t * fT1dSCEcha
Int_t MaxCrysInSM()
Int_t MaxSCIYInDee()
Int_t MaxCrysEtaInTow()
void BuildBarrelCrysTable()
Int_t ** fT2d_DS
TString GetSCQuadFrom1DeeSCEcna(const Int_t &)
Int_t MaxCrysEcnaInDee()
Double_t GetVecoMin(const Int_t &, const Int_t &)
Int_t Get0SMEchaFrom1SMTowAnd0TowEcha(const Int_t &, const Int_t &)
Int_t Get1DeeSCEcnaFromDeeSCCons(const Int_t &, const Int_t &)
Double_t GetPhiMin(const Int_t &, const Int_t &)
Int_t GetSMFromFED(const Int_t &)
TString GetYDirectionEB(const Int_t &)
TString GetSMHalfBarrel(const Int_t &)
TString GetDeeDirViewedFromIP(const Int_t &)
TString GetJYDirectionEB(const Int_t &)
Double_t GetJPhiMax(const Int_t &, const Int_t &)
Int_t Get1DeeSCEcnaFrom0DeeEcha(const Int_t &)
TString GetEEDeeType(const Int_t &)
TString GetStinLvrbType(const Int_t &)
Double_t GetPhiMax(const Int_t &, const Int_t &)
Int_t MaxSMInEBPlus()
Int_t Get1SCEchaFrom0DeeEcha(const Int_t &)
Int_t * fT1dDeeCrys
Int_t * fT1d_ich_IX
Int_t ** fT2d_ich_IX
Double_t GetEtaMin(const Int_t &, const Int_t &)
Int_t Get0TowEchaFrom1SMCrys(const Int_t &)
Int_t ** fT2d_RecovDeeSC
Int_t GetIXSCInDee(const Int_t &)
Double_t GetIHocoMin(const Int_t &, const Int_t &)
Int_t Get1DeeSCEcnaFrom1DeeCrys(const Int_t &, const TString &)
Int_t MaxSCIXInDee()
Int_t * fT1d_DeeSCCons
Int_t GetHashedNumberFromIEtaAndIPhi(const Int_t &, const Int_t &)
Int_t Get1SMTowFrom1SMCrys(const Int_t &)
Bool_t RegisterPointer(const TString &, const Long_t &)
Definition: TEcnaObject.cc:100
Int_t GetJYSCInDee(const Int_t &)
TString GetXDirectionEE(const Int_t &)
Int_t ** fT2dDeeSC
void BuildEndcapCrysTable()
Int_t MaxSMPhiInEB()
TString GetTowerLvrbType(const Int_t &)
Double_t GetJVecoMin(const Int_t &, const Int_t &)
TEcnaParEcal * fEcal
Int_t ** fT2d_DSSC
Int_t MaxCrysIXInSC()
Int_t Get0TowEchaFrom0SMEcha(const Int_t &)
Double_t GetJIYMax(const Int_t &, const Int_t &)
Int_t GetJYCrysInDee(const Int_t &, const Int_t &, const Int_t &)
Int_t Get1SCEchaFrom1DeeCrys(const Int_t &, const TString &)
TString GetDeeHalfEndcap(const Int_t &)
Double_t GetJPhiMin(const Int_t &, const Int_t &)
Int_t * fT1dSMCrys
TString GetYDirectionEE(const Int_t &)
Int_t Get1SMTowFrom0SMEcha(const Int_t &)
Int_t GetDSSCFrom1DeeSCEcna(const Int_t &, const Int_t &, const Int_t &)
Int_t ** fT2d_jch_JY
Int_t GetDSFromFED(const Int_t &)
Double_t GetVecoMax(const Int_t &, const Int_t &)
Int_t MaxCrysInStin()
Int_t StexEchaForCons(const Int_t &, const Int_t &)
Int_t MaxTowEtaInSM()
Double_t GetJIYMin(const Int_t &, const Int_t &)
Int_t MaxSCEcnaInDee()
Int_t GetDSFrom1DeeSCEcna(const Int_t &, const Int_t &)
Int_t GetDeeSCConsFrom1DeeSCEcna(const Int_t &, const Int_t &)
Int_t Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(const Int_t &, const Int_t &, const TString &)
Int_t MaxCrysIYInSC()
Double_t GetEta(const Int_t &, const Int_t &, const Int_t &)
Int_t Get1SMCrysFrom1SMTowAnd0TowEcha(const Int_t &, const Int_t &)
Int_t MaxCrysInStinEcna(const Int_t &, const Int_t &, const TString &)
Int_t MaxCrysInTow()
Double_t GetIIXMax()
TString fCodeChNumberingITP2Top
Int_t GetIXCrysInSC(const Int_t &, const Int_t &, const Int_t &)
Double_t GetIEtaMin(const Int_t &, const Int_t &)
Int_t GetIPhiFromHashed(const Int_t &)
Int_t * fT1d_RecovDeeSC
Int_t GetMaxSCInDS(const Int_t &)
Double_t GetPhiInSM(const Int_t &, const Int_t &, const Int_t &)
Int_t GetSCQuadTypeIndex(const TString &, const TString &)
Int_t MaxSCForConsInDee()
Int_t GetIEtaFromHashed(const Int_t &, const Int_t &)
Int_t * fT1d_jch_JY
Int_t * fT1dTowEcha
Int_t GetJYCrysInSC(const Int_t &, const Int_t &, const Int_t &)
Int_t ** fT2d_DeeSCCons
Double_t GetPhi(const Int_t &, const Int_t &, const Int_t &)
TString GetSCType(const Int_t &)
Double_t GetIHocoMax(const Int_t &, const Int_t &)
TString fFlagSubDet
Int_t MaxCrysInSC()
Int_t ** fT2dDeeCrys
Int_t GetDeeDirIndex(const TString &)
Int_t MaxDeeInEE()
Int_t GetIXCrysInDee(const Int_t &, const Int_t &, const Int_t &)
Int_t MaxSMInEB()
Int_t PlusMinusSMNumber(const Int_t &)
Int_t Get0StexEchaFrom1StexStinAnd0StinEcha(const Int_t &, const Int_t &)
Int_t ** fT2dSMCrys
Double_t GetIEtaMax(const Int_t &, const Int_t &)
TString GetStexHalfStas(const Int_t &)
TString GetEEDeeEndcap(const Int_t &)
Double_t GetIIXMin()
TString GetEcalSubDetector()
TString fCodeChNumberingITP1Bot
Double_t GetSMCentralPhi(const Int_t &)
TString fCodeChNumberingLvrbBot
TString GetJYDirectionEE(const Int_t &)
Double_t GetJVecoMax(const Int_t &, const Int_t &)
void SetEcalSubDetector(const TString &)
Int_t Get1StexCrysFrom1StexStinAnd0StinEcha(const Int_t &, const Int_t &, const Int_t &)
TString fCodeChNumberingLvrbTop
TString GetXDirectionEB(const Int_t &)
Long_t GetPointerValue(const TString &)
Definition: TEcnaObject.cc:209
ClassImp(TEcnaNumbering)
~TEcnaNumbering() override
Int_t *** fT3dDeeCrys
Int_t ** fT2dSCEcha
Int_t MaxTowInSM()