00001
00002
00003
00004
00005 #include "CalibCalorimetry/EcalCorrelatedNoiseAnalysisAlgos/interface/TEcnaNumbering.h"
00006
00007
00008
00009
00010
00011
00012
00013 ClassImp(TEcnaNumbering)
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 TEcnaNumbering::TEcnaNumbering() {
00035
00036
00037
00038
00039 Init();
00040 }
00041
00042 TEcnaNumbering::TEcnaNumbering(TEcnaObject* pObjectManager, const TString& SubDet) {
00043
00044
00045
00046
00047 Init();
00048 Long_t i_this = (Long_t)this;
00049 pObjectManager->RegisterPointer("TEcnaNumbering", i_this);
00050
00051
00052 fEcal = 0;
00053 Long_t iParEcal = pObjectManager->GetPointerValue("TEcnaParEcal");
00054 if( iParEcal == 0 )
00055 {fEcal = new TEcnaParEcal(pObjectManager, SubDet.Data()); }
00056 else
00057 {fEcal = (TEcnaParEcal*)iParEcal;}
00058
00059 SetEcalSubDetector(SubDet.Data());
00060 }
00061
00062
00063 TEcnaNumbering::TEcnaNumbering(const TString& SubDet, const TEcnaParEcal* pEcal) {
00064
00065
00066
00067
00068 Init();
00069 SetEcalSubDetector(SubDet.Data(), pEcal);
00070 }
00071
00072
00073 TEcnaNumbering::~TEcnaNumbering() {
00074
00075
00076
00077
00078
00079 if (fT2dSMCrys != 0){delete [] fT2dSMCrys; fCdelete++;}
00080 if (fT1dSMCrys != 0){delete [] fT1dSMCrys; fCdelete++;}
00081 if (fT1dSMTow != 0){delete [] fT1dSMTow; fCdelete++;}
00082 if (fT1dTowEcha != 0){delete [] fT1dTowEcha; fCdelete++;}
00083
00084
00085 if (fT3dDeeCrys != 0){delete [] fT3dDeeCrys; fCdelete++;}
00086 if (fT2dDeeCrys != 0){delete [] fT2dDeeCrys; fCdelete++;}
00087 if (fT1dDeeCrys != 0){delete [] fT1dDeeCrys; fCdelete++;}
00088 if (fT2dDeeSC != 0){delete [] fT2dDeeSC; fCdelete++;}
00089 if (fT1dDeeSC != 0){delete [] fT1dDeeSC; fCdelete++;}
00090 if (fT2dSCEcha != 0){delete [] fT2dSCEcha; fCdelete++;}
00091 if (fT1dSCEcha != 0){delete [] fT1dSCEcha; fCdelete++;}
00092 if (fT2d_jch_JY != 0){delete [] fT2d_jch_JY; fCdelete++;}
00093 if (fT1d_jch_JY != 0){delete [] fT1d_jch_JY; fCdelete++;}
00094 if (fT2d_ich_IX != 0){delete [] fT2d_ich_IX; fCdelete++;}
00095 if (fT1d_ich_IX != 0){delete [] fT1d_ich_IX; fCdelete++;}
00096 if (fT2d_DS != 0){delete [] fT2d_DS; fCdelete++;}
00097 if (fT1d_DS != 0){delete [] fT1d_DS; fCdelete++;}
00098 if (fT2d_DSSC != 0){delete [] fT2d_DSSC; fCdelete++;}
00099 if (fT1d_DSSC != 0){delete [] fT1d_DSSC; fCdelete++;}
00100 if (fT2d_DeeSCCons != 0){delete [] fT2d_DeeSCCons; fCdelete++;}
00101 if (fT1d_DeeSCCons != 0){delete [] fT1d_DeeSCCons; fCdelete++;}
00102 if (fT2d_RecovDeeSC != 0){delete [] fT2d_RecovDeeSC; fCdelete++;}
00103 if (fT1d_RecovDeeSC != 0){delete [] fT1d_RecovDeeSC; fCdelete++;}
00104
00105
00106
00107 }
00108
00109 void TEcnaNumbering::Init()
00110 {
00111
00112
00113
00114 fTTBELL = '\007';
00115 fgMaxCar = 512;
00116
00117
00118 fT2dSMCrys = 0;
00119 fT1dSMCrys = 0;
00120 fT1dSMTow = 0;
00121 fT1dTowEcha = 0;
00122
00123 fCodeChNumberingLvrbBot = "bottom";
00124 fCodeChNumberingLvrbTop = "top";
00125
00126
00127 fT3dDeeCrys = 0;
00128 fT2dDeeCrys = 0;
00129 fT1dDeeCrys = 0;
00130 fT2dDeeSC = 0;
00131 fT1dDeeSC = 0;
00132 fT2dSCEcha = 0;
00133 fT1dSCEcha = 0;
00134 fT2d_jch_JY = 0;
00135 fT1d_jch_JY = 0;
00136 fT2d_ich_IX = 0;
00137 fT1d_ich_IX = 0;
00138 fT2d_DS = 0;
00139 fT1d_DS = 0;
00140 fT2d_DSSC = 0;
00141 fT1d_DSSC = 0;
00142 fT2d_DeeSCCons = 0;
00143 fT1d_DeeSCCons = 0;
00144 fT2d_RecovDeeSC = 0;
00145 fT1d_RecovDeeSC = 0;
00146
00147 fCodeChNumberingITP1Bot = "bottom";
00148 fCodeChNumberingITP2Top = "top";
00149
00150
00151 fEcal = 0;
00152 }
00153
00154
00155 void TEcnaNumbering::SetEcalSubDetector(const TString& SubDet, const TEcnaParEcal* pEcal){
00156
00157
00158 fEcal = 0;
00159 if( pEcal == 0 )
00160 {fEcal = new TEcnaParEcal(SubDet.Data()); ;}
00161 else
00162 {fEcal = (TEcnaParEcal*)pEcal;}
00163
00164 Int_t MaxCar = fgMaxCar;
00165 fFlagSubDet.Resize(MaxCar);
00166 fFlagSubDet = fEcal->GetEcalSubDetector();
00167
00168 if( fFlagSubDet == "EB" ){BuildBarrelCrysTable();}
00169 if( fFlagSubDet == "EE" ){BuildEndcapCrysTable(); BuildEndcapSCTable();}
00170 }
00171
00172 void TEcnaNumbering::SetEcalSubDetector(const TString& SubDet){
00173
00174
00175 Int_t MaxCar = fgMaxCar;
00176 fFlagSubDet.Resize(MaxCar);
00177 fFlagSubDet = fEcal->GetEcalSubDetector();
00178
00179 if( fFlagSubDet == "EB" ){BuildBarrelCrysTable();}
00180 if( fFlagSubDet == "EE" ){BuildEndcapCrysTable(); BuildEndcapSCTable();}
00181 }
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 void TEcnaNumbering::BuildBarrelCrysTable()
00195 {
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215 if ( fT2dSMCrys == 0 )
00216 {
00217 Int_t MaxSMTow = fEcal->MaxTowInSM();
00218 Int_t MaxTowEcha = fEcal->MaxCrysInTow();
00219 Int_t MaxSMCrys = fEcal->MaxCrysInSM();
00220
00221
00222
00223 fT2dSMCrys = new Int_t*[MaxSMTow]; fCnew++;
00224 fT1dSMCrys = new Int_t[MaxSMTow*MaxTowEcha]; fCnew++;
00225 for(Int_t i_SMTow = 0 ; i_SMTow < MaxSMTow ; i_SMTow++){
00226 fT2dSMCrys[i_SMTow] = &fT1dSMCrys[0] + i_SMTow*MaxTowEcha;}
00227 for(Int_t i=0; i<MaxSMTow; i++)
00228 {for(Int_t j=0; j<MaxTowEcha; j++){fT2dSMCrys[i][j]=0;}}
00229
00230 fT1dSMTow = new Int_t[MaxSMCrys]; fCnew++;
00231 for(Int_t i=0; i<MaxSMCrys; i++){fT1dSMTow[i]=0;}
00232
00233 fT1dTowEcha = new Int_t[MaxSMCrys]; fCnew++;
00234 for(Int_t i=0; i<MaxSMCrys; i++){fT1dTowEcha[i]=0;}
00235
00236
00237 Int_t m2 = (Int_t)2;
00238 Int_t m26 = (Int_t)26;
00239
00240
00241 Int_t** jch_type = new Int_t*[m2]; fCnew++;
00242 Int_t* jch_type_d1 = new Int_t[m2*m26]; fCnew++;
00243 for(Int_t i_m2 = 0 ; i_m2 < m2 ; i_m2++){
00244 jch_type[i_m2] = &jch_type_d1[0] + i_m2*m26;}
00245
00246 for(Int_t k=25;k>=21;k--){jch_type[0][k] = 25-k;}
00247 for(Int_t k=16;k<=20;k++){jch_type[0][k] = k-16;}
00248 for(Int_t k=15;k>=11;k--){jch_type[0][k] = 15-k;}
00249 for(Int_t k=6; k<=10;k++){jch_type[0][k] = k-6;}
00250 for(Int_t k=5; k>=1; k--){jch_type[0][k] = 5-k;}
00251
00252 for(Int_t k=1; k<=5; k++){jch_type[1][k] = k-1;}
00253 for(Int_t k=10;k>=6; k--){jch_type[1][k] = 10-k;}
00254 for(Int_t k=11;k<=15;k++){jch_type[1][k] = k-11;}
00255 for(Int_t k=20;k>=16;k--){jch_type[1][k] = 20-k;}
00256 for(Int_t k=21;k<=25;k++){jch_type[1][k] = k-21;}
00257
00258
00259 Int_t** ich_type = new Int_t*[m2]; fCnew++;
00260 Int_t* ich_type_d1 = new Int_t[m2*m26]; fCnew++;
00261 for(Int_t i_m2 = 0 ; i_m2 < m2 ; i_m2++){
00262 ich_type[i_m2] = &ich_type_d1[0] + i_m2*m26;}
00263
00264 for(Int_t k=25;k>=21;k--){ich_type[0][k] = 0;}
00265 for(Int_t k=16;k<=20;k++){ich_type[0][k] = 1;}
00266 for(Int_t k=15;k>=11;k--){ich_type[0][k] = 2;}
00267 for(Int_t k=6; k<=10;k++){ich_type[0][k] = 3;}
00268 for(Int_t k=5; k>=1; k--){ich_type[0][k] = 4;}
00269
00270 for(Int_t k=1; k<=5; k++){ich_type[1][k] = 0;}
00271 for(Int_t k=10;k>=6; k--){ich_type[1][k] = 1;}
00272 for(Int_t k=11;k<=15;k++){ich_type[1][k] = 2;}
00273 for(Int_t k=20;k>=16;k--){ich_type[1][k] = 3;}
00274 for(Int_t k=21;k<=25;k++){ich_type[1][k] = 4;}
00275
00276
00277 Int_t m17 =17;
00278 Int_t* type = new Int_t[m17]; fCnew++;
00279
00280
00281 type[0] = 0;
00282 type[1] = 0;
00283 type[2] = 0;
00284 type[3] = 1;
00285 type[4] = 1;
00286
00287 type[5] = 0;
00288 type[6] = 0;
00289 type[7] = 1;
00290 type[8] = 1;
00291
00292 type[9] = 0;
00293 type[10] = 0;
00294 type[11] = 1;
00295 type[12] = 1;
00296
00297 type[13] = 0;
00298 type[14] = 0;
00299 type[15] = 1;
00300 type[16] = 1;
00301
00302 for(Int_t tow=0; tow<MaxSMTow; tow++)
00303 {
00304 for(Int_t ic=1; ic<=MaxTowEcha; ic++)
00305 {
00306 Int_t jtow = tow % 4;
00307 Int_t itow = tow / 4;
00308
00309 Int_t icrys = itow*5 + ich_type[type[itow]][ic];
00310
00311
00312
00313 Int_t jcrys = jtow*5 + jch_type[type[itow]][ic];
00314
00315
00316
00317 Int_t n1SMCrys = icrys*20+jcrys+1;
00318
00319 fT2dSMCrys[tow][ic-1] = n1SMCrys;
00320 fT1dSMTow[n1SMCrys-1] = tow+1;
00321 fT1dTowEcha[n1SMCrys-1] = ic-1;
00322 }
00323 }
00324
00325
00326 delete [] jch_type; fCdelete++;
00327 delete [] jch_type_d1; fCdelete++;
00328 delete [] ich_type; fCdelete++;
00329 delete [] ich_type_d1; fCdelete++;
00330 delete [] type; fCdelete++;
00331 }
00332 else
00333 {
00334
00335 }
00336 }
00337
00338
00339
00340
00341
00342
00343
00344 Int_t TEcnaNumbering::Get1SMCrysFrom1SMTowAnd0TowEcha(const Int_t& n1SMTow,
00345 const Int_t& i0TowEcha)
00346 {
00347
00348
00349
00350 Int_t n1SMCrys = 0;
00351
00352 if( fT2dSMCrys == 0 ){BuildBarrelCrysTable();}
00353
00354 if (n1SMTow >= 1 && n1SMTow <= fEcal->MaxTowInSM())
00355 {
00356 if (i0TowEcha >=0 && i0TowEcha < fEcal->MaxCrysInTow())
00357 {
00358 n1SMCrys = fT2dSMCrys[n1SMTow-1][i0TowEcha];
00359 }
00360 else
00361 {
00362 n1SMCrys = -2;
00363 cout << "!TEcnaNumbering::Get1SMCrysFrom1SMTowAnd0TowEcha(...)> Electronic Channel in Tower out of range."
00364 << " i0TowEcha = " << i0TowEcha << "(n1SMTow = " << n1SMTow << ")" << fTTBELL << endl;
00365 }
00366 }
00367 else
00368 {
00369 n1SMCrys = -3;
00370 cout << "!TEcnaNumbering::Get1SMCrysFrom1SMTowAnd0TowEcha(...)> Tower number in SM out of range."
00371 << " n1SMTow = " << n1SMTow << "(i0TowEcha = " << i0TowEcha << ")" << fTTBELL << endl;
00372 }
00373
00374 return n1SMCrys;
00375 }
00376
00377
00378
00379
00380
00381
00382
00383 Int_t TEcnaNumbering::Get0TowEchaFrom1SMCrys(const Int_t& n1SMCrys)
00384 {
00385
00386
00387 Int_t i0TowEcha = -1;
00388
00389 if( n1SMCrys >= 1 && n1SMCrys <= fEcal->MaxCrysInSM() )
00390 {
00391 i0TowEcha = fT1dTowEcha[n1SMCrys-1];
00392 }
00393 else
00394 {
00395 i0TowEcha = -2;
00396 cout << "!TEcnaNumbering::Get0TowEchaFrom1SMCrys(...)> Crystal number in SM out of range."
00397 << " n1SMCrys = " << n1SMCrys << fTTBELL << endl;
00398 }
00399 return i0TowEcha;
00400 }
00401
00402 Int_t TEcnaNumbering::Get1SMTowFrom1SMCrys(const Int_t& n1SMCrys)
00403 {
00404
00405
00406 Int_t n1SMtox = 0;
00407
00408 if( n1SMCrys >= 1 && n1SMCrys <= fEcal->MaxCrysInSM() )
00409 {
00410 n1SMtox = fT1dSMTow[n1SMCrys-1];
00411 }
00412 else
00413 {
00414 n1SMtox = -1;
00415 cout << "!TEcnaNumbering::Get1SMTowFrom1SMCrys(...)> Crystal number in SM out of range."
00416 << " n1SMCrys = " << n1SMCrys << fTTBELL << endl;
00417 }
00418 return n1SMtox;
00419 }
00420
00421
00422
00423
00424
00425
00426
00427
00428 Int_t TEcnaNumbering::Get0TowEchaFrom0SMEcha(const Int_t& i0SMEcha)
00429 {
00430
00431
00432 Int_t n1SMTow = i0SMEcha/fEcal->MaxCrysInTow()+1;
00433 Int_t i0TowEcha = i0SMEcha - fEcal->MaxCrysInTow()*(n1SMTow-1);
00434
00435 return i0TowEcha;
00436 }
00437
00438 Int_t TEcnaNumbering::Get1SMTowFrom0SMEcha(const Int_t& i0SMEcha)
00439 {
00440
00441
00442 Int_t n1SMTow = i0SMEcha/fEcal->MaxCrysInTow()+1;
00443
00444 return n1SMTow;
00445 }
00446
00447 Int_t TEcnaNumbering::Get0SMEchaFrom1SMTowAnd0TowEcha(const Int_t& n1SMTow, const Int_t& i0TowEcha)
00448 {
00449
00450
00451 Int_t i0SMEcha = (n1SMTow-1)*fEcal->MaxCrysInTow()+i0TowEcha;
00452
00453 return i0SMEcha;
00454 }
00455
00456
00457
00458
00459
00460 Int_t TEcnaNumbering::GetHashedNumberFromIEtaAndIPhi(const Int_t& IEta, const Int_t& IPhi)
00461 {
00462 Int_t Hashed = 0;
00463
00464 if( IEta > 0 ){Hashed = (85 + IEta - 1)*360 + IPhi - 1;}
00465 if( IEta < 0 ){Hashed = (85 + IEta)*360 + IPhi - 1;}
00466
00467 return Hashed;
00468 }
00469
00470 Int_t TEcnaNumbering::GetIEtaFromHashed(const Int_t& Hashed, const Int_t& SMNumber)
00471 {
00472 Int_t IEta = 0;
00473
00474 if( GetSMHalfBarrel(SMNumber) == "EB+" ){IEta = Hashed/360 - 85 + 1;}
00475 if( GetSMHalfBarrel(SMNumber) == "EB-" ){IEta = 85 + Hashed/360;}
00476
00477 return IEta;
00478 }
00479
00480 Int_t TEcnaNumbering::GetIPhiFromHashed(const Int_t& Hashed)
00481 {
00482 Int_t IPhi = Hashed%360 + 1;
00483
00484 return IPhi;
00485 }
00486
00487
00488
00489
00490
00491 TString TEcnaNumbering::GetStinLvrbType(const Int_t& n1SMTow)
00492 {
00493 TString lvrb_type = GetTowerLvrbType(n1SMTow);
00494 return lvrb_type;
00495 }
00496 TString TEcnaNumbering::GetTowerLvrbType(const Int_t& n1SMTow)
00497 {
00498
00499
00500 TString type = fCodeChNumberingLvrbTop;
00501
00502 if (n1SMTow >= 1 && n1SMTow <= 12){type = fCodeChNumberingLvrbBot;}
00503 if (n1SMTow >= 21 && n1SMTow <= 28){type = fCodeChNumberingLvrbBot;}
00504 if (n1SMTow >= 37 && n1SMTow <= 44){type = fCodeChNumberingLvrbBot;}
00505 if (n1SMTow >= 53 && n1SMTow <= 60){type = fCodeChNumberingLvrbBot;}
00506
00507 return type;
00508 }
00509
00510
00511
00512
00513
00514
00515 Double_t TEcnaNumbering::GetEta(const Int_t& n1EBSM, const Int_t& n1SMTow,
00516 const Int_t& i0TowEcha)
00517 {
00518
00519
00520 Double_t eta = (Double_t)0.;
00521
00522 Int_t max_crys_eta_in_tower = fEcal->MaxCrysEtaInTow();
00523 Int_t max_tow_eta_in_sm = fEcal->MaxTowEtaInSM();
00524 Int_t max_sm_in_barrel = fEcal->MaxSMInEB();
00525
00526 if ( n1EBSM >= 1 && n1EBSM <= max_sm_in_barrel )
00527 {
00528 for (Int_t i_sm_tow_eta = 0; i_sm_tow_eta < max_tow_eta_in_sm; i_sm_tow_eta++)
00529 {
00530 Int_t i_crys_eta_min = (Int_t)(1 + i_sm_tow_eta*(max_crys_eta_in_tower-1));
00531 Int_t i_crys_eta_max = (Int_t)((i_sm_tow_eta+1)*(max_crys_eta_in_tower-1));
00532 Int_t i_crys_eta = (Int_t)(i_sm_tow_eta*max_crys_eta_in_tower);
00533
00534 Double_t d_echa_eta = (Double_t)(i0TowEcha/max_crys_eta_in_tower);
00535
00536 if ( n1SMTow >= i_crys_eta_min && n1SMTow <= i_crys_eta_max )
00537 {
00538 if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbTop)
00539 {eta = (Double_t)(i_crys_eta) + d_echa_eta + 1;}
00540 if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbBot)
00541 {eta = (Double_t)(i_crys_eta+max_crys_eta_in_tower)-d_echa_eta;}
00542 }
00543 }
00544 if ( GetSMHalfBarrel(n1EBSM) == "EB-" ){eta = - eta;}
00545 }
00546 else
00547 {
00548 cout << "TEcnaNumbering::GetEta(...)> SM = " << n1EBSM
00549 << ". Out of range (range = [1," << fEcal->MaxSMInEB() << "])"
00550 << fTTBELL << endl;
00551 }
00552 return eta;
00553 }
00554
00555 Double_t TEcnaNumbering::GetEtaMin(const Int_t& n1EBSM, const Int_t& n1SMTow)
00556 {
00557
00558
00559 Int_t max_tow_eta_in_sm = fEcal->MaxTowEtaInSM();
00560 Int_t max_crys_eta_in_tower = fEcal->MaxCrysEtaInTow();
00561
00562 Double_t eta_min = (Double_t)0.;
00563
00564 for (Int_t i_sm_tow_eta = 0; i_sm_tow_eta < max_tow_eta_in_sm; i_sm_tow_eta++)
00565 {
00566 Int_t i_crys_eta_min = (Int_t)(1 + i_sm_tow_eta*(max_crys_eta_in_tower-1));
00567 Int_t i_crys_eta_max = (Int_t)((i_sm_tow_eta+1)*(max_crys_eta_in_tower-1));
00568 Int_t i_crys_eta = (Int_t)(i_sm_tow_eta*max_crys_eta_in_tower);
00569
00570 if ( n1SMTow >= i_crys_eta_min && n1SMTow <= i_crys_eta_max )
00571 {
00572 if (GetSMHalfBarrel(n1EBSM) == "EB+")
00573 {eta_min = (Double_t)i_crys_eta;}
00574 if (GetSMHalfBarrel(n1EBSM) == "EB-")
00575 {eta_min = -(Double_t)(i_crys_eta + max_crys_eta_in_tower);}
00576 }
00577 }
00578 return eta_min;
00579 }
00580
00581 Double_t TEcnaNumbering::GetEtaMax(const Int_t& n1EBSM, const Int_t& n1SMTow)
00582 {
00583
00584
00585 Int_t max_tow_eta_in_sm = fEcal->MaxTowEtaInSM();
00586 Int_t max_crys_eta_in_tower = fEcal->MaxCrysEtaInTow();
00587
00588 Double_t eta_max = (max_crys_eta_in_tower-1);
00589
00590 for (Int_t i_sm_tow_eta = 0; i_sm_tow_eta < max_tow_eta_in_sm; i_sm_tow_eta++)
00591 {
00592 Int_t i_crys_eta_min = (Int_t)(1 + i_sm_tow_eta*(max_crys_eta_in_tower-1));
00593 Int_t i_crys_eta_max = (Int_t)((i_sm_tow_eta+1)*(max_crys_eta_in_tower-1));
00594 Int_t i_crys_eta = (Int_t)(i_sm_tow_eta*max_crys_eta_in_tower);
00595
00596 if ( n1SMTow >= i_crys_eta_min && n1SMTow <= i_crys_eta_max )
00597 {
00598 if (GetSMHalfBarrel(n1EBSM) == "EB+")
00599 {eta_max = (Double_t)(i_crys_eta + max_crys_eta_in_tower);}
00600 if (GetSMHalfBarrel(n1EBSM) == "EB-")
00601 {eta_max = -(Double_t)i_crys_eta;}
00602 }
00603 }
00604
00605 return eta_max;
00606 }
00607
00608 Double_t TEcnaNumbering::GetIEtaMin(const Int_t& n1EBSM, const Int_t& n1SMTow)
00609 {
00610
00611
00612 Double_t i_eta_min = (Int_t)0.;
00613
00614 if(GetSMHalfBarrel(n1EBSM) == "EB+")
00615 {i_eta_min = (Double_t)GetEtaMin(n1EBSM, n1SMTow)+(Double_t)0.5;}
00616 if(GetSMHalfBarrel(n1EBSM) == "EB-")
00617 {i_eta_min = (Double_t)GetEtaMin(n1EBSM, n1SMTow)-(Double_t)0.5;}
00618
00619 return i_eta_min;
00620 }
00621
00622 Double_t TEcnaNumbering::GetIEtaMax(const Int_t& n1EBSM, const Int_t& n1SMTow)
00623 {
00624
00625
00626 Double_t i_eta_max = (Int_t)0.;
00627
00628 if(GetSMHalfBarrel(n1EBSM) == "EB+")
00629 {i_eta_max = (Double_t)GetEtaMax(n1EBSM, n1SMTow)+(Double_t)0.5;}
00630 if(GetSMHalfBarrel(n1EBSM) == "EB-")
00631 {i_eta_max = (Double_t)GetEtaMax(n1EBSM, n1SMTow)-(Double_t)0.5;}
00632
00633 return i_eta_max;
00634 }
00635
00636 Double_t TEcnaNumbering::GetIEtaMin(const Int_t& n1EBSM)
00637 {
00638
00639
00640 Double_t i_eta_min = (Int_t)0.;
00641
00642 Int_t n1SMTowPlus = (Int_t)1;
00643 Int_t n1SMTowMinus = (Int_t)fEcal->MaxTowInSM();
00644
00645 if( GetSMHalfBarrel(n1EBSM) == "EB+" )
00646 {i_eta_min = (Double_t)GetIEtaMin(n1EBSM, n1SMTowPlus );}
00647 if( GetSMHalfBarrel(n1EBSM) == "EB-" )
00648 {i_eta_min = (Double_t)GetIEtaMin(n1EBSM, n1SMTowMinus);}
00649
00650 return i_eta_min;
00651 }
00652
00653 Double_t TEcnaNumbering::GetIEtaMax(const Int_t& n1EBSM)
00654 {
00655
00656
00657 Double_t i_eta_max = (Int_t)0.;
00658
00659 Int_t n1SMTowPlus = (Int_t)fEcal->MaxTowInSM();
00660 Int_t n1SMTowMinus = (Int_t)1;
00661
00662 if( GetSMHalfBarrel(n1EBSM) == "EB+")
00663 {i_eta_max = (Double_t)GetIEtaMax(n1EBSM, n1SMTowPlus );}
00664 if( GetSMHalfBarrel(n1EBSM) == "EB-")
00665 {i_eta_max = (Double_t)GetIEtaMax(n1EBSM, n1SMTowMinus);}
00666
00667 return i_eta_max;
00668 }
00669
00670
00671
00672
00673
00674
00675
00676 Double_t TEcnaNumbering::GetSMCentralPhi(const Int_t& n1EBSM)
00677 {
00678
00679
00680 Double_t central_phi = (Double_t)10.;
00681
00682 if (GetSMHalfBarrel(n1EBSM) == "EB+"){central_phi = 10. + (Double_t)20.*(n1EBSM-1);}
00683 if (GetSMHalfBarrel(n1EBSM) == "EB-"){central_phi = 10. + (Double_t)20.*(n1EBSM-19);}
00684
00685 return central_phi;
00686 }
00687
00688 Double_t TEcnaNumbering::GetPhiInSM(const Int_t& n1EBSM,
00689 const Int_t& n1SMTow, const Int_t& i0TowEcha)
00690 {
00691
00692
00693 Double_t phi_in_SM = (Double_t)0.;
00694
00695 Int_t rest_temp =(Int_t)(n1SMTow%(fEcal->MaxCrysPhiInTow()-1));
00696
00697 if ( n1EBSM >= 1 && n1EBSM <= fEcal->MaxSMInEB() )
00698 {
00699 if( rest_temp == 1 ){phi_in_SM = (Double_t)15.;}
00700 if( rest_temp == 2 ){phi_in_SM = (Double_t)10.;}
00701 if( rest_temp == 3 ){phi_in_SM = (Double_t)5.;}
00702 if( rest_temp == 0 ){phi_in_SM = (Double_t)0.;}
00703
00704 if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbTop)
00705 {
00706 if( i0TowEcha == 4 || i0TowEcha == 5 || i0TowEcha == 14 || i0TowEcha == 15 || i0TowEcha == 24 )
00707 {phi_in_SM = phi_in_SM + 0;}
00708
00709 if( i0TowEcha == 3 || i0TowEcha == 6 || i0TowEcha == 13 || i0TowEcha == 16 || i0TowEcha == 23 )
00710 {phi_in_SM = phi_in_SM + 1;}
00711
00712 if( i0TowEcha == 2 || i0TowEcha == 7 || i0TowEcha == 12 || i0TowEcha == 17 || i0TowEcha == 22 )
00713 {phi_in_SM = phi_in_SM + 2;}
00714
00715 if( i0TowEcha == 1 || i0TowEcha == 8 || i0TowEcha == 11 || i0TowEcha == 18 || i0TowEcha == 21 )
00716 {phi_in_SM = phi_in_SM + 3;}
00717
00718 if( i0TowEcha == 0 || i0TowEcha == 9 || i0TowEcha == 10 || i0TowEcha == 19 || i0TowEcha == 20 )
00719 {phi_in_SM = phi_in_SM + 4;}
00720 }
00721 if (GetTowerLvrbType(n1SMTow) == fCodeChNumberingLvrbBot)
00722 {
00723 if( i0TowEcha == 20 || i0TowEcha == 19 || i0TowEcha == 10 || i0TowEcha == 9 || i0TowEcha == 0 )
00724 {phi_in_SM = phi_in_SM + 0;}
00725
00726 if( i0TowEcha == 21 || i0TowEcha == 18 || i0TowEcha == 11 || i0TowEcha == 8 || i0TowEcha == 1 )
00727 {phi_in_SM = phi_in_SM + 1;}
00728
00729 if( i0TowEcha == 22 || i0TowEcha == 17 || i0TowEcha == 12 || i0TowEcha == 7 || i0TowEcha == 2 )
00730 {phi_in_SM = phi_in_SM + 2;}
00731
00732 if( i0TowEcha == 23 || i0TowEcha == 16 || i0TowEcha == 13 || i0TowEcha == 6 || i0TowEcha == 3 )
00733 {phi_in_SM = phi_in_SM + 3;}
00734
00735 if( i0TowEcha == 24 || i0TowEcha == 15 || i0TowEcha == 14 || i0TowEcha == 5 || i0TowEcha == 4 )
00736 {phi_in_SM = phi_in_SM + 4;}
00737 }
00738 }
00739 else
00740 {
00741 cout << "TEcnaNumbering::GetPhiInSM(...)> SM = " << n1EBSM
00742 << ". Out of range (range = [1," << fEcal->MaxSMInEB() << "])"
00743 << fTTBELL << endl;
00744 }
00745 phi_in_SM = 20 - phi_in_SM;
00746 return phi_in_SM;
00747 }
00748
00749 Double_t TEcnaNumbering::GetPhi(const Int_t& n1EBSM,
00750 const Int_t& n1SMTow, const Int_t& i0TowEcha)
00751 {
00752
00753
00754 Double_t phi = (Double_t)0.;
00755
00756 if ( n1EBSM >= 1 && n1EBSM <= fEcal->MaxSMInEB() )
00757 {
00758 Double_t phiInSM = GetPhiInSM(n1EBSM, n1SMTow, i0TowEcha);
00759 Double_t phi_start = GetSMCentralPhi(n1EBSM);
00760
00761 phi = 20 - phiInSM + phi_start -(Double_t)10.;
00762 }
00763 else
00764 {
00765 cout << "TEcnaNumbering::GetPhi(...)> SM = " << n1EBSM
00766 << ". Out of range (range = [1," << fEcal->MaxSMInEB() << "])"
00767 << fTTBELL << endl;
00768 }
00769 return phi;
00770 }
00771
00772
00773 Double_t TEcnaNumbering::GetPhiMin(const Int_t& n1EBSM, const Int_t& n1SMTow)
00774 {
00775
00776
00777 Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
00778
00779 Double_t phi_min = (Double_t)0.;
00780 Double_t phi_start = GetSMCentralPhi(n1EBSM);
00781
00782 Int_t rest_temp =(Int_t)(n1SMTow%(max_crys_phi_in_tower-1));
00783
00784 if(GetSMHalfBarrel(n1EBSM) == "EB+")
00785 {
00786 if ( rest_temp == 1 ) {phi_min = phi_start + (Double_t)5.;}
00787 if ( rest_temp == 2 ) {phi_min = phi_start + (Double_t)0.;}
00788 if ( rest_temp == 3 ) {phi_min = phi_start - (Double_t)5.;}
00789 if ( rest_temp == 0 ) {phi_min = phi_start - (Double_t)10.;}
00790 }
00791 if(GetSMHalfBarrel(n1EBSM) == "EB-")
00792 {
00793 if ( rest_temp == 0 ) {phi_min = phi_start + (Double_t)5.;}
00794 if ( rest_temp == 3 ) {phi_min = phi_start + (Double_t)0.;}
00795 if ( rest_temp == 2 ) {phi_min = phi_start - (Double_t)5.;}
00796 if ( rest_temp == 1 ) {phi_min = phi_start - (Double_t)10.;}
00797 }
00798 return phi_min;
00799 }
00800
00801 Double_t TEcnaNumbering::GetPhiMax(const Int_t& n1EBSM, const Int_t& n1SMTow)
00802 {
00803
00804
00805 Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
00806
00807 Double_t phi_max = (Double_t)20.;
00808 Double_t phi_start = GetSMCentralPhi(n1EBSM);
00809
00810 Int_t rest_temp =(Int_t)(n1SMTow%(max_crys_phi_in_tower-1));
00811
00812 if(GetSMHalfBarrel(n1EBSM) == "EB+")
00813 {
00814 if ( rest_temp == 1 ) {phi_max = phi_start + (Double_t)10.;}
00815 if ( rest_temp == 2 ) {phi_max = phi_start + (Double_t)5.;}
00816 if ( rest_temp == 3 ) {phi_max = phi_start - (Double_t)0.;}
00817 if ( rest_temp == 0 ) {phi_max = phi_start - (Double_t)5.;}
00818 }
00819
00820 if(GetSMHalfBarrel(n1EBSM) == "EB-")
00821 {
00822 if ( rest_temp == 0 ) {phi_max = phi_start + (Double_t)10.;}
00823 if ( rest_temp == 3 ) {phi_max = phi_start + (Double_t)5.;}
00824 if ( rest_temp == 2 ) {phi_max = phi_start - (Double_t)0.;}
00825 if ( rest_temp == 1 ) {phi_max = phi_start - (Double_t)5.;}
00826 }
00827
00828 return phi_max;
00829 }
00830
00831 Double_t TEcnaNumbering::GetPhiMin(const Int_t& n1EBSM)
00832 {
00833
00834
00835 Double_t phi_min = GetSMCentralPhi(n1EBSM) - (Double_t)10.;
00836
00837 return phi_min;
00838 }
00839
00840 Double_t TEcnaNumbering::GetPhiMax(const Int_t& n1EBSM)
00841 {
00842
00843
00844 Double_t phi_max = GetSMCentralPhi(n1EBSM) + (Double_t)10.;
00845
00846 return phi_max;
00847 }
00848
00849 Double_t TEcnaNumbering::GetJPhiMin(const Int_t& n1EBSM, const Int_t& n1SMTow)
00850 {
00851
00852
00853 Double_t j_phi_min = (Double_t)1.;
00854 Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
00855 Int_t rest_temp =(Int_t)(n1SMTow%(max_crys_phi_in_tower-1));
00856
00857 if ( rest_temp == 1 ){j_phi_min = (Double_t) 1. - (Double_t)0.5;}
00858 if ( rest_temp == 2 ){j_phi_min = (Double_t) 6. - (Double_t)0.5;}
00859 if ( rest_temp == 3 ){j_phi_min = (Double_t)11. - (Double_t)0.5;}
00860 if ( rest_temp == 0 ){j_phi_min = (Double_t)16. - (Double_t)0.5;}
00861
00862 return j_phi_min;
00863 }
00864
00865 Double_t TEcnaNumbering::GetJPhiMax(const Int_t& n1EBSM, const Int_t& n1SMTow)
00866 {
00867
00868
00869 Double_t j_phi_max = (Double_t)20.;
00870 Int_t max_crys_phi_in_tower = fEcal->MaxCrysPhiInTow();
00871 Int_t rest_temp =(Int_t)(n1SMTow%(max_crys_phi_in_tower-1));
00872
00873 if ( rest_temp == 1 ){j_phi_max = (Double_t) 5. + (Double_t)0.5;}
00874 if ( rest_temp == 2 ){j_phi_max = (Double_t)10. + (Double_t)0.5;}
00875 if ( rest_temp == 3 ){j_phi_max = (Double_t)15. + (Double_t)0.5;}
00876 if ( rest_temp == 0 ){j_phi_max = (Double_t)20. + (Double_t)0.5;}
00877
00878 return j_phi_max;
00879 }
00880
00881
00882 Double_t TEcnaNumbering::GetJPhiMin(const Int_t& n1EBSM)
00883 {
00884
00885
00886 Double_t j_phi_min = (Double_t)1. - (Double_t)0.5;
00887
00888 return j_phi_min;
00889 }
00890
00891 Double_t TEcnaNumbering::GetJPhiMax(const Int_t& n1EBSM)
00892 {
00893
00894
00895 Double_t j_phi_max = (Double_t)20. + (Double_t)0.5;
00896
00897 return j_phi_max;
00898 }
00899
00900
00901
00902
00903
00904
00905
00906
00907 TString TEcnaNumbering::GetXDirectionEB(const Int_t& SMNumber)
00908 {
00909 TString xdirection = "x";
00910
00911 if( GetSMHalfBarrel(SMNumber) == "EB+" ){xdirection = "x";}
00912 if( GetSMHalfBarrel(SMNumber) == "EB-" ){xdirection = "x";}
00913
00914 return xdirection;
00915 }
00916
00917 TString TEcnaNumbering::GetYDirectionEB(const Int_t& SMNumber)
00918 {
00919 TString ydirection = "-x";
00920
00921 if( GetSMHalfBarrel(SMNumber) == "EB+" ){ydirection = "-x";}
00922 if( GetSMHalfBarrel(SMNumber) == "EB-" ){ydirection = "-x";}
00923
00924 return ydirection;
00925 }
00926
00927
00928 TString TEcnaNumbering::GetJYDirectionEB(const Int_t& SMNumber)
00929 {
00930 TString jydirection = "-x";
00931
00932 if( GetSMHalfBarrel(SMNumber) == "EB+" ){jydirection = "x";}
00933 if( GetSMHalfBarrel(SMNumber) == "EB-" ){jydirection = "-x";}
00934
00935 return jydirection;
00936 }
00937
00938
00939 TString TEcnaNumbering::GetSMHalfBarrel(const Int_t& SMNumber)
00940 {
00941
00942
00943 TString type = "EB-";
00944
00945 if ( SMNumber >= 1 && SMNumber <= fEcal->MaxSMInEBPlus() ){type = "EB+";}
00946 if ( SMNumber > fEcal->MaxSMInEBPlus() && SMNumber <= fEcal->MaxSMInEB() ){type = "EB-";}
00947
00948 return type;
00949 }
00950
00951 Int_t TEcnaNumbering::PlusMinusSMNumber(const Int_t& PlusSMNumber)
00952 {
00953 Int_t PMSMNumber = PlusSMNumber;
00954 if( PlusSMNumber > fEcal->MaxSMPhiInEB() ){PMSMNumber = - PlusSMNumber + fEcal->MaxSMPhiInEB();}
00955 return PMSMNumber;
00956 }
00957
00958
00959
00960
00961
00962
00963
00964
00965
00966
00967
00968
00969 void TEcnaNumbering::BuildEndcapCrysTable()
00970 {
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990 if ( fT3dDeeCrys == 0 )
00991 {
00992 Int_t MaxDeeSC = fEcal->MaxSCEcnaInDee();
00993 Int_t MaxSCEcha = fEcal->MaxCrysInSC();
00994 Int_t MaxDeeCrys = fEcal->MaxCrysEcnaInDee();
00995
00996 Int_t MaxDirections = 2;
00997
00998
00999 fT3dDeeCrys = new Int_t**[MaxDeeSC]; fCnew++;
01000 fT2dDeeCrys = new Int_t*[MaxDeeSC*MaxSCEcha]; fCnew++;
01001 fT1dDeeCrys = new Int_t[MaxDeeSC*MaxSCEcha*MaxDirections]; fCnew++;
01002
01003 for(Int_t i_DeeSC = 0; i_DeeSC < MaxDeeSC; i_DeeSC++){
01004 fT3dDeeCrys[i_DeeSC] = &fT2dDeeCrys[0] + i_DeeSC*MaxSCEcha;
01005 for(Int_t i_SCEcha = 0; i_SCEcha < MaxSCEcha; i_SCEcha++){
01006 fT2dDeeCrys[i_DeeSC*MaxSCEcha + i_SCEcha] = &fT1dDeeCrys[0]
01007 + (i_DeeSC*MaxSCEcha + i_SCEcha)*MaxDirections;}}
01008 for(Int_t i=0; i<MaxDeeSC; i++)
01009 {for(Int_t j=0; j<MaxSCEcha; j++)
01010 {for(Int_t k=0; k<MaxDirections; k++){fT3dDeeCrys[i][j][k]=0;}}}
01011
01012 fT2dDeeSC = new Int_t*[MaxDeeCrys]; fCnew++;
01013 fT1dDeeSC = new Int_t[MaxDeeCrys*MaxDirections]; fCnew++;
01014 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxDeeCrys ; i_DeeCrys++){
01015 fT2dDeeSC[i_DeeCrys] = &fT1dDeeSC[0] + i_DeeCrys*MaxDirections;}
01016 for(Int_t i=0; i<MaxDeeCrys; i++)
01017 {for(Int_t j=0; j<MaxDirections; j++){fT2dDeeSC[i][j]=0;}}
01018
01019 fT2dSCEcha = new Int_t*[MaxDeeCrys]; fCnew++;
01020 fT1dSCEcha = new Int_t[MaxDeeCrys*MaxDirections]; fCnew++;
01021 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxDeeCrys ; i_DeeCrys++){
01022 fT2dSCEcha[i_DeeCrys] = &fT1dSCEcha[0] + i_DeeCrys*MaxDirections;}
01023 for(Int_t i=0; i<MaxDeeCrys; i++)
01024 {for(Int_t j=0; j<MaxDirections; j++){fT2dSCEcha[i][j]=0;}}
01025
01026
01027 Int_t MaxTyp = (Int_t)4;
01028 Int_t MaxCrysP1 = (Int_t)(fEcal->MaxCrysInSC()+1);
01029
01030
01031 fT2d_jch_JY = new Int_t*[MaxTyp]; fCnew++;
01032 fT1d_jch_JY = new Int_t[MaxTyp*MaxCrysP1]; fCnew++;
01033 for(Int_t i_MaxTyp = 0 ; i_MaxTyp < MaxTyp ; i_MaxTyp++){
01034 fT2d_jch_JY[i_MaxTyp] = &fT1d_jch_JY[0] + i_MaxTyp*MaxCrysP1;}
01035
01036
01037
01038
01039 for(Int_t k= 5;k>= 1;k--){fT2d_jch_JY[0][k] = 4;}
01040 for(Int_t k=10;k>= 6;k--){fT2d_jch_JY[0][k] = 3;}
01041 for(Int_t k=15;k>=11;k--){fT2d_jch_JY[0][k] = 2;}
01042 for(Int_t k=20;k>=16;k--){fT2d_jch_JY[0][k] = 1;}
01043 for(Int_t k=25;k>=21;k--){fT2d_jch_JY[0][k] = 0;}
01044
01045 for(Int_t k= 5;k>= 1;k--){fT2d_jch_JY[1][k] = 5-k;}
01046 for(Int_t k=10;k>= 6;k--){fT2d_jch_JY[1][k] = 10-k;}
01047 for(Int_t k=15;k>=11;k--){fT2d_jch_JY[1][k] = 15-k;}
01048 for(Int_t k=20;k>=16;k--){fT2d_jch_JY[1][k] = 20-k;}
01049 for(Int_t k=25;k>=21;k--){fT2d_jch_JY[1][k] = 25-k;}
01050
01051 for(Int_t k= 1;k<=5; k++){fT2d_jch_JY[2][k] = 0;}
01052 for(Int_t k= 6;k<=10;k++){fT2d_jch_JY[2][k] = 1;}
01053 for(Int_t k=11;k<=15;k++){fT2d_jch_JY[2][k] = 2;}
01054 for(Int_t k=16;k<=20;k++){fT2d_jch_JY[2][k] = 3;}
01055 for(Int_t k=21;k<=25;k++){fT2d_jch_JY[2][k] = 4;}
01056
01057 for(Int_t k= 1;k<=5; k++){fT2d_jch_JY[3][k] = k-1;}
01058 for(Int_t k= 6;k<=10;k++){fT2d_jch_JY[3][k] = k-6;}
01059 for(Int_t k=11;k<=15;k++){fT2d_jch_JY[3][k] = k-11;}
01060 for(Int_t k=16;k<=20;k++){fT2d_jch_JY[3][k] = k-16;}
01061 for(Int_t k=21;k<=25;k++){fT2d_jch_JY[3][k] = k-21;}
01062
01063
01064 fT2d_ich_IX = new Int_t*[MaxTyp]; fCnew++;
01065 fT1d_ich_IX = new Int_t[MaxTyp*MaxCrysP1]; fCnew++;
01066 for(Int_t i_MaxTyp = 0 ; i_MaxTyp < MaxTyp ; i_MaxTyp++){
01067 fT2d_ich_IX[i_MaxTyp] = &fT1d_ich_IX[0] + i_MaxTyp*MaxCrysP1;}
01068
01069
01070 for(Int_t k= 5;k>= 1;k--){fT2d_ich_IX[0][k] = 5-k;}
01071 for(Int_t k=10;k>= 6;k--){fT2d_ich_IX[0][k] = 10-k;}
01072 for(Int_t k=15;k>=11;k--){fT2d_ich_IX[0][k] = 15-k;}
01073 for(Int_t k=20;k>=16;k--){fT2d_ich_IX[0][k] = 20-k;}
01074 for(Int_t k=25;k>=21;k--){fT2d_ich_IX[0][k] = 25-k;}
01075
01076 for(Int_t k= 5;k>= 1;k--){fT2d_ich_IX[1][k] = 4;}
01077 for(Int_t k=10;k>= 6;k--){fT2d_ich_IX[1][k] = 3;}
01078 for(Int_t k=15;k>=11;k--){fT2d_ich_IX[1][k] = 2;}
01079 for(Int_t k=20;k>=16;k--){fT2d_ich_IX[1][k] = 1;}
01080 for(Int_t k=25;k>=21;k--){fT2d_ich_IX[1][k] = 0;}
01081
01082 for(Int_t k=1; k<=5; k++){fT2d_ich_IX[2][k] = 5-k;}
01083 for(Int_t k=6; k<=10;k++){fT2d_ich_IX[2][k] = 10-k;}
01084 for(Int_t k=11;k<=15;k++){fT2d_ich_IX[2][k] = 15-k;}
01085 for(Int_t k=16;k<=20;k++){fT2d_ich_IX[2][k] = 20-k;}
01086 for(Int_t k=21;k<=25;k++){fT2d_ich_IX[2][k] = 25-k;}
01087
01088 for(Int_t k= 1;k<= 5;k++){fT2d_ich_IX[3][k] = 4;}
01089 for(Int_t k= 6;k<=10;k++){fT2d_ich_IX[3][k] = 3;}
01090 for(Int_t k=11;k<=15;k++){fT2d_ich_IX[3][k] = 2;}
01091 for(Int_t k=16;k<=20;k++){fT2d_ich_IX[3][k] = 1;}
01092 for(Int_t k=21;k<=25;k++){fT2d_ich_IX[3][k] = 0;}
01093
01094
01095 Int_t Nb_DeeSC_JY = fEcal->MaxSCIYInDee();
01096 Int_t** type = new Int_t*[Nb_DeeSC_JY]; fCnew++;
01097 Int_t* type_d1 = new Int_t[Nb_DeeSC_JY*MaxDirections]; fCnew++;
01098 for(Int_t i_DeeSC_JY = 0 ; i_DeeSC_JY < Nb_DeeSC_JY ; i_DeeSC_JY++){
01099 type[i_DeeSC_JY] = &type_d1[0] + i_DeeSC_JY*MaxDirections;}
01100
01101
01102
01103
01104
01105 type[10][0] = 0;
01106 type[11][0] = 0;
01107 type[12][0] = 0;
01108 type[13][0] = 0;
01109 type[14][0] = 0;
01110 type[15][0] = 0;
01111 type[16][0] = 0;
01112 type[17][0] = 0;
01113 type[18][0] = 0;
01114 type[19][0] = 0;
01115
01116 type[10][1] = 1;
01117 type[11][1] = 1;
01118 type[12][1] = 1;
01119 type[13][1] = 1;
01120 type[14][1] = 1;
01121 type[15][1] = 1;
01122 type[16][1] = 1;
01123 type[17][1] = 1;
01124 type[18][1] = 1;
01125 type[19][1] = 1;
01126
01127 type[ 0][1] = 2;
01128 type[ 1][1] = 2;
01129 type[ 2][1] = 2;
01130 type[ 3][1] = 2;
01131 type[ 4][1] = 2;
01132 type[ 5][1] = 2;
01133 type[ 6][1] = 2;
01134 type[ 7][1] = 2;
01135 type[ 8][1] = 2;
01136 type[ 9][1] = 2;
01137
01138 type[ 0][0] = 3;
01139 type[ 1][0] = 3;
01140 type[ 2][0] = 3;
01141 type[ 3][0] = 3;
01142 type[ 4][0] = 3;
01143 type[ 5][0] = 3;
01144 type[ 6][0] = 3;
01145 type[ 7][0] = 3;
01146 type[ 8][0] = 3;
01147 type[ 9][0] = 3;
01148
01149 Int_t Nb_SCCrys_IX = fEcal->MaxCrysIXInSC();
01150 Int_t Nb_SCCrys_JY = fEcal->MaxCrysIYInSC();
01151
01152 for(Int_t kSC=0; kSC<MaxDeeSC; kSC++)
01153 {
01154 for(Int_t n_Echa=1; n_Echa<=MaxSCEcha; n_Echa++)
01155 {
01156 for(Int_t idir=0; idir<2; idir++)
01157 {
01158 Int_t ikSC = kSC / Nb_DeeSC_JY;
01159 Int_t jkSC = kSC % Nb_DeeSC_JY;
01160
01161 Int_t icrys = ikSC*Nb_SCCrys_IX + fT2d_ich_IX[type[jkSC][idir]][n_Echa];
01162
01163
01164
01165
01166 Int_t jcrys = jkSC*Nb_SCCrys_JY + fT2d_jch_JY[type[jkSC][idir]][n_Echa];
01167
01168
01169
01170
01171 Int_t n_DeeCrys = icrys*Nb_DeeSC_JY*Nb_SCCrys_JY+jcrys+1;
01172
01173 fT3dDeeCrys[kSC][n_Echa-1][idir] = n_DeeCrys;
01174 fT2dDeeSC[n_DeeCrys-1][idir] = kSC+1;
01175 fT2dSCEcha[n_DeeCrys-1][idir] = n_Echa;
01176 }
01177 }
01178 }
01179
01180
01181 delete [] type; fCdelete++;
01182 delete [] type_d1; fCdelete++;
01183 }
01184 else
01185 {
01186
01187 }
01188 }
01189
01190 void TEcnaNumbering::BuildEndcapSCTable()
01191 {
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209 Int_t MaxEEDee = fEcal->MaxDeeInEE();
01210 Int_t MaxDeeSC = fEcal->MaxSCEcnaInDee();
01211 Int_t MaxEESCForCons = 2*fEcal->MaxSCForConsInDee();
01212
01213 fT2d_DS = new Int_t*[MaxEEDee]; fCnew++;
01214 fT1d_DS = new Int_t[MaxEEDee*MaxDeeSC]; fCnew++;
01215 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01216 fT2d_DS[i_DeeCrys] = &fT1d_DS[0] + i_DeeCrys*MaxDeeSC;}
01217 for(Int_t i=0; i<MaxEEDee; i++)
01218 {for(Int_t j=0; j<MaxDeeSC; j++){fT2d_DS[i][j]=0;}}
01219
01220 fT2d_DSSC = new Int_t*[MaxEEDee]; fCnew++;
01221 fT1d_DSSC = new Int_t[MaxEEDee*MaxDeeSC]; fCnew++;
01222 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01223 fT2d_DSSC[i_DeeCrys] = &fT1d_DSSC[0] + i_DeeCrys*MaxDeeSC;}
01224 for(Int_t i=0; i<MaxEEDee; i++)
01225 {for(Int_t j=0; j<MaxDeeSC; j++){fT2d_DSSC[i][j]=0;}}
01226
01227 fT2d_DeeSCCons = new Int_t*[MaxEEDee]; fCnew++;
01228 fT1d_DeeSCCons = new Int_t[MaxEEDee*MaxDeeSC]; fCnew++;
01229 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01230 fT2d_DeeSCCons[i_DeeCrys] = &fT1d_DeeSCCons[0] + i_DeeCrys*MaxDeeSC;}
01231 for(Int_t i=0; i<MaxEEDee; i++)
01232 {for(Int_t j=0; j<MaxDeeSC; j++){fT2d_DeeSCCons[i][j]=0;}}
01233
01234 fT2d_RecovDeeSC = new Int_t*[MaxEEDee]; fCnew++;
01235 fT1d_RecovDeeSC = new Int_t[MaxEEDee*MaxEESCForCons]; fCnew++;
01236 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01237 fT2d_RecovDeeSC[i_DeeCrys] = &fT1d_RecovDeeSC[0] + i_DeeCrys*MaxEESCForCons;}
01238 for(Int_t i=0; i<MaxEEDee; i++)
01239 {for(Int_t j=0; j<MaxEESCForCons; j++){fT2d_RecovDeeSC[i][j]=0;}}
01240
01241
01242
01243
01244 Int_t ids = 0;
01245
01246
01247 for(Int_t dee = 1; dee<=4; dee++)
01248 {
01249 if( dee == 1 || dee == 4 ){ids = 1;}
01250 if( dee == 2 || dee == 3 ){ids = 9;}
01251 for(Int_t isc= 13; isc<= 20; isc++)fT2d_DS[dee-1][isc-1] = ids;
01252 for(Int_t isc= 33; isc<= 40; isc++)fT2d_DS[dee-1][isc-1] = ids;
01253 for(Int_t isc= 54; isc<= 60; isc++)fT2d_DS[dee-1][isc-1] = ids;
01254 for(Int_t isc= 75; isc<= 79; isc++)fT2d_DS[dee-1][isc-1] = ids;
01255 for(Int_t isc= 96; isc<= 99; isc++)fT2d_DS[dee-1][isc-1] = ids;
01256 for(Int_t isc=118; isc<=119; isc++)fT2d_DS[dee-1][isc-1] = ids;
01257 }
01258
01259 for(Int_t dee = 1; dee<=4; dee++)
01260 {
01261 if( dee == 1 || dee == 4 ){ids = 2;}
01262 if( dee == 2 || dee == 3 ){ids = 8;}
01263 for(Int_t isc= 32; isc<= 32; isc++)fT2d_DS[dee-1][isc-1] = ids;
01264 for(Int_t isc= 51; isc<= 53; isc++)fT2d_DS[dee-1][isc-1] = ids;
01265 for(Int_t isc= 72; isc<= 74; isc++)fT2d_DS[dee-1][isc-1] = ids;
01266 for(Int_t isc= 92; isc<= 95; isc++)fT2d_DS[dee-1][isc-1] = ids;
01267 for(Int_t isc=112; isc<=117; isc++)fT2d_DS[dee-1][isc-1] = ids;
01268 for(Int_t isc=132; isc<=138; isc++)fT2d_DS[dee-1][isc-1] = ids;
01269 for(Int_t isc=152; isc<=157; isc++)fT2d_DS[dee-1][isc-1] = ids;
01270 for(Int_t isc=173; isc<=176; isc++)fT2d_DS[dee-1][isc-1] = ids;
01271 for(Int_t isc=193; isc<=193; isc++)fT2d_DS[dee-1][isc-1] = ids;
01272 }
01273
01274 for(Int_t dee = 1; dee<=4; dee++)
01275 {
01276 if( dee == 1 || dee == 4 ){ids = 3;}
01277 if( dee == 2 || dee == 3 ){ids = 7;}
01278 for(Int_t isc= 50; isc<= 50; isc++)fT2d_DS[dee-1][isc-1] = ids;
01279 for(Int_t isc= 69; isc<= 71; isc++)fT2d_DS[dee-1][isc-1] = ids;
01280 for(Int_t isc= 88; isc<= 91; isc++)fT2d_DS[dee-1][isc-1] = ids;
01281 for(Int_t isc=108; isc<=111; isc++)fT2d_DS[dee-1][isc-1] = ids;
01282 for(Int_t isc=127; isc<=131; isc++)fT2d_DS[dee-1][isc-1] = ids;
01283 for(Int_t isc=147; isc<=151; isc++)fT2d_DS[dee-1][isc-1] = ids;
01284 for(Int_t isc=166; isc<=172; isc++)fT2d_DS[dee-1][isc-1] = ids;
01285 for(Int_t isc=188; isc<=192; isc++)fT2d_DS[dee-1][isc-1] = ids;
01286 }
01287
01288 for(Int_t dee = 1; dee<=4; dee++)
01289 {
01290 if( dee == 1 || dee == 4 ){ids = 4;}
01291 if( dee == 2 || dee == 3 ){ids = 6;}
01292 for(Int_t isc= 27; isc<= 29; isc++)fT2d_DS[dee-1][isc-1] = ids;
01293 for(Int_t isc= 44; isc<= 49; isc++)fT2d_DS[dee-1][isc-1] = ids;
01294 for(Int_t isc= 62; isc<= 68; isc++)fT2d_DS[dee-1][isc-1] = ids;
01295 for(Int_t isc= 82; isc<= 87; isc++)fT2d_DS[dee-1][isc-1] = ids;
01296 for(Int_t isc=102; isc<=107; isc++)fT2d_DS[dee-1][isc-1] = ids;
01297 for(Int_t isc=123; isc<=126; isc++)fT2d_DS[dee-1][isc-1] = ids;
01298 for(Int_t isc=144; isc<=146; isc++)fT2d_DS[dee-1][isc-1] = ids;
01299 for(Int_t isc=165; isc<=165; isc++)fT2d_DS[dee-1][isc-1] = ids;
01300 }
01301
01302 for(Int_t dee = 1; dee<=4; dee++)
01303 {
01304 for(Int_t isc= 1; isc<= 8; isc++)fT2d_DS[dee-1][isc-1] = 5;
01305 for(Int_t isc= 21; isc<= 26; isc++)fT2d_DS[dee-1][isc-1] = 5;
01306 for(Int_t isc= 41; isc<= 43; isc++)fT2d_DS[dee-1][isc-1] = 5;
01307 }
01308
01309
01310
01311 for(Int_t dee=1; dee<=4; dee++)
01312 {
01313 for(Int_t isc=1; isc<=MaxDeeSC; isc++)
01314 {fT2d_DSSC[dee-1][isc-1] = -1;}
01315
01316 fT2d_DSSC[dee-1][13-1] = 12;
01317 fT2d_DSSC[dee-1][14-1] = 11;
01318 fT2d_DSSC[dee-1][15-1] = 10;
01319 fT2d_DSSC[dee-1][16-1] = 9;
01320 fT2d_DSSC[dee-1][17-1] = 4;
01321 fT2d_DSSC[dee-1][18-1] = 3;
01322 fT2d_DSSC[dee-1][19-1] = 2;
01323 fT2d_DSSC[dee-1][20-1] = 1;
01324
01325 fT2d_DSSC[dee-1][33-1] = 16;
01326 fT2d_DSSC[dee-1][34-1] = 15;
01327 fT2d_DSSC[dee-1][35-1] = 14;
01328 fT2d_DSSC[dee-1][36-1] = 13;
01329 fT2d_DSSC[dee-1][37-1] = 8;
01330 fT2d_DSSC[dee-1][38-1] = 7;
01331 fT2d_DSSC[dee-1][39-1] = 6;
01332 fT2d_DSSC[dee-1][40-1] = 5;
01333
01334 fT2d_DSSC[dee-1][54-1] = 33;
01335 fT2d_DSSC[dee-1][55-1] = 31;
01336 fT2d_DSSC[dee-1][56-1] = 27;
01337 fT2d_DSSC[dee-1][57-1] = 24;
01338 fT2d_DSSC[dee-1][58-1] = 20;
01339 fT2d_DSSC[dee-1][59-1] = 17;
01340 fT2d_DSSC[dee-1][60-1] = 30;
01341
01342 fT2d_DSSC[dee-1][75-1] = 32;
01343 fT2d_DSSC[dee-1][76-1] = 28;
01344 fT2d_DSSC[dee-1][77-1] = 25;
01345 fT2d_DSSC[dee-1][78-1] = 21;
01346 fT2d_DSSC[dee-1][79-1] = 18;
01347
01348 fT2d_DSSC[dee-1][96-1] = 29;
01349 fT2d_DSSC[dee-1][97-1] = 26;
01350 fT2d_DSSC[dee-1][98-1] = 22;
01351 fT2d_DSSC[dee-1][99-1] = 19;
01352
01353 fT2d_DSSC[dee-1][118-1] = 23;
01354 fT2d_DSSC[dee-1][119-1] = 30;
01355
01356
01357 fT2d_DSSC[dee-1][32-1] = 25;
01358
01359 fT2d_DSSC[dee-1][51-1] = 32;
01360 fT2d_DSSC[dee-1][52-1] = 26;
01361 fT2d_DSSC[dee-1][53-1] = 18;
01362
01363 fT2d_DSSC[dee-1][72-1] = 27;
01364 fT2d_DSSC[dee-1][73-1] = 19;
01365 fT2d_DSSC[dee-1][74-1] = 12;
01366
01367 fT2d_DSSC[dee-1][92-1] = 28;
01368 fT2d_DSSC[dee-1][93-1] = 20;
01369 fT2d_DSSC[dee-1][94-1] = 13;
01370 fT2d_DSSC[dee-1][95-1] = 7;
01371
01372 fT2d_DSSC[dee-1][112-1] = 29;
01373 fT2d_DSSC[dee-1][113-1] = 21;
01374 fT2d_DSSC[dee-1][114-1] = 14;
01375 fT2d_DSSC[dee-1][115-1] = 8;
01376 fT2d_DSSC[dee-1][116-1] = 4;
01377 fT2d_DSSC[dee-1][117-1] = 1;
01378
01379 fT2d_DSSC[dee-1][132-1] = 30;
01380 fT2d_DSSC[dee-1][133-1] = 22;
01381 fT2d_DSSC[dee-1][134-1] = 15;
01382 fT2d_DSSC[dee-1][135-1] = 9;
01383 fT2d_DSSC[dee-1][136-1] = 5;
01384 fT2d_DSSC[dee-1][137-1] = 2;
01385 fT2d_DSSC[dee-1][138-1] = 3;
01386
01387 fT2d_DSSC[dee-1][152-1] = 31;
01388 fT2d_DSSC[dee-1][153-1] = 23;
01389 fT2d_DSSC[dee-1][154-1] = 16;
01390 fT2d_DSSC[dee-1][155-1] = 10;
01391 fT2d_DSSC[dee-1][156-1] = 6;
01392 fT2d_DSSC[dee-1][157-1] = 3;
01393
01394 fT2d_DSSC[dee-1][173-1] = 24;
01395 fT2d_DSSC[dee-1][174-1] = 17;
01396 fT2d_DSSC[dee-1][175-1] = 11;
01397 fT2d_DSSC[dee-1][176-1] = 25;
01398
01399 fT2d_DSSC[dee-1][193-1] = 25;
01400
01401
01402 fT2d_DSSC[dee-1][50-1] = 10;
01403
01404 fT2d_DSSC[dee-1][69-1] = 18;
01405 fT2d_DSSC[dee-1][70-1] = 11;
01406 fT2d_DSSC[dee-1][71-1] = 3;
01407
01408 fT2d_DSSC[dee-1][88-1] = 25;
01409 fT2d_DSSC[dee-1][89-1] = 19;
01410 fT2d_DSSC[dee-1][90-1] = 12;
01411 fT2d_DSSC[dee-1][91-1] = 4;
01412
01413 fT2d_DSSC[dee-1][108-1] = 26;
01414 fT2d_DSSC[dee-1][109-1] = 20;
01415 fT2d_DSSC[dee-1][110-1] = 13;
01416 fT2d_DSSC[dee-1][111-1] = 5;
01417
01418 fT2d_DSSC[dee-1][127-1] = 31;
01419 fT2d_DSSC[dee-1][128-1] = 27;
01420 fT2d_DSSC[dee-1][129-1] = 21;
01421 fT2d_DSSC[dee-1][130-1] = 14;
01422 fT2d_DSSC[dee-1][131-1] = 6;
01423
01424 fT2d_DSSC[dee-1][147-1] = 32;
01425 fT2d_DSSC[dee-1][148-1] = 28;
01426 fT2d_DSSC[dee-1][149-1] = 22;
01427 fT2d_DSSC[dee-1][150-1] = 15;
01428 fT2d_DSSC[dee-1][151-1] = 7;
01429
01430 fT2d_DSSC[dee-1][166-1] = 33;
01431 fT2d_DSSC[dee-1][167-1] = 30;
01432 fT2d_DSSC[dee-1][168-1] = 29;
01433 fT2d_DSSC[dee-1][169-1] = 23;
01434 fT2d_DSSC[dee-1][170-1] = 16;
01435 fT2d_DSSC[dee-1][171-1] = 8;
01436 fT2d_DSSC[dee-1][172-1] = 1;
01437
01438 fT2d_DSSC[dee-1][188-1] = 34;
01439 fT2d_DSSC[dee-1][189-1] = 24;
01440 fT2d_DSSC[dee-1][190-1] = 17;
01441 fT2d_DSSC[dee-1][191-1] = 9;
01442 fT2d_DSSC[dee-1][192-1] = 2;
01443
01444
01445 fT2d_DSSC[dee-1][27-1] = 33;
01446 fT2d_DSSC[dee-1][28-1] = 32;
01447 fT2d_DSSC[dee-1][29-1] = 14;
01448
01449 fT2d_DSSC[dee-1][44-1] = 22;
01450 fT2d_DSSC[dee-1][45-1] = 15;
01451 fT2d_DSSC[dee-1][46-1] = 8;
01452 fT2d_DSSC[dee-1][47-1] = 4;
01453 fT2d_DSSC[dee-1][48-1] = 2;
01454 fT2d_DSSC[dee-1][49-1] = 1;
01455
01456 fT2d_DSSC[dee-1][62-1] = 29;
01457 fT2d_DSSC[dee-1][63-1] = 28;
01458 fT2d_DSSC[dee-1][64-1] = 23;
01459 fT2d_DSSC[dee-1][65-1] = 16;
01460 fT2d_DSSC[dee-1][66-1] = 9;
01461 fT2d_DSSC[dee-1][67-1] = 5;
01462 fT2d_DSSC[dee-1][68-1] = 3;
01463
01464 fT2d_DSSC[dee-1][82-1] = 31;
01465 fT2d_DSSC[dee-1][83-1] = 30;
01466 fT2d_DSSC[dee-1][84-1] = 24;
01467 fT2d_DSSC[dee-1][85-1] = 17;
01468 fT2d_DSSC[dee-1][86-1] = 10;
01469 fT2d_DSSC[dee-1][87-1] = 6;
01470
01471 fT2d_DSSC[dee-1][102-1] = 21;
01472 fT2d_DSSC[dee-1][103-1] = 27;
01473 fT2d_DSSC[dee-1][104-1] = 25;
01474 fT2d_DSSC[dee-1][105-1] = 18;
01475 fT2d_DSSC[dee-1][106-1] = 11;
01476 fT2d_DSSC[dee-1][107-1] = 7;
01477
01478 fT2d_DSSC[dee-1][123-1] = 21;
01479 fT2d_DSSC[dee-1][124-1] = 26;
01480 fT2d_DSSC[dee-1][125-1] = 19;
01481 fT2d_DSSC[dee-1][126-1] = 12;
01482
01483 fT2d_DSSC[dee-1][144-1] = 14;
01484 fT2d_DSSC[dee-1][145-1] = 20;
01485 fT2d_DSSC[dee-1][146-1] = 13;
01486
01487 fT2d_DSSC[dee-1][165-1] = 14;
01488
01489
01490 if(dee == 1 || dee == 3)
01491 {
01492 fT2d_DSSC[dee-1][1-1] = 34;
01493 fT2d_DSSC[dee-1][2-1] = 33;
01494 fT2d_DSSC[dee-1][3-1] = 32;
01495 fT2d_DSSC[dee-1][4-1] = 31;
01496 fT2d_DSSC[dee-1][5-1] = 26;
01497 fT2d_DSSC[dee-1][6-1] = 25;
01498 fT2d_DSSC[dee-1][7-1] = 24;
01499 fT2d_DSSC[dee-1][8-1] = 23;
01500
01501 fT2d_DSSC[dee-1][21-1] = 30;
01502 fT2d_DSSC[dee-1][22-1] = 29;
01503 fT2d_DSSC[dee-1][23-1] = 28;
01504 fT2d_DSSC[dee-1][24-1] = 27;
01505 fT2d_DSSC[dee-1][25-1] = 22;
01506 fT2d_DSSC[dee-1][26-1] = 21;
01507
01508 fT2d_DSSC[dee-1][41-1] = 20;
01509 fT2d_DSSC[dee-1][42-1] = 19;
01510 fT2d_DSSC[dee-1][43-1] = 18;
01511 }
01512
01513 if(dee == 2 || dee == 4)
01514 {
01515 fT2d_DSSC[dee-1][1-1] = 17;
01516 fT2d_DSSC[dee-1][2-1] = 16;
01517 fT2d_DSSC[dee-1][3-1] = 15;
01518 fT2d_DSSC[dee-1][4-1] = 14;
01519 fT2d_DSSC[dee-1][5-1] = 9;
01520 fT2d_DSSC[dee-1][6-1] = 8;
01521 fT2d_DSSC[dee-1][7-1] = 7;
01522 fT2d_DSSC[dee-1][8-1] = 6;
01523
01524 fT2d_DSSC[dee-1][21-1] = 13;
01525 fT2d_DSSC[dee-1][22-1] = 12;
01526 fT2d_DSSC[dee-1][23-1] = 11;
01527 fT2d_DSSC[dee-1][24-1] = 10;
01528 fT2d_DSSC[dee-1][25-1] = 5;
01529 fT2d_DSSC[dee-1][26-1] = 4;
01530
01531 fT2d_DSSC[dee-1][41-1] = 3;
01532 fT2d_DSSC[dee-1][42-1] = 2;
01533 fT2d_DSSC[dee-1][43-1] = 1;
01534 }
01535 }
01536
01537
01538
01539
01540 for(Int_t dee=1; dee<=4; dee++)
01541 {for(Int_t isc=1; isc<=MaxDeeSC; isc++)
01542 {fT2d_DeeSCCons[dee-1][isc-1] = -1;}}
01543
01544 for(Int_t i_dee_type=1; i_dee_type<=2; i_dee_type++)
01545 {
01546 Int_t dee = -1;
01547 if( i_dee_type == 1 ){dee = 1;}
01548 if( i_dee_type == 2 ){dee = 3;}
01549
01550
01551
01552 fT2d_DeeSCCons[dee-1][13-1] = 161; fT2d_DeeSCCons[dee][13-1] = 12;
01553 fT2d_DeeSCCons[dee-1][14-1] = 160; fT2d_DeeSCCons[dee][14-1] = 11;
01554 fT2d_DeeSCCons[dee-1][15-1] = 159; fT2d_DeeSCCons[dee][15-1] = 10;
01555 fT2d_DeeSCCons[dee-1][16-1] = 158; fT2d_DeeSCCons[dee][16-1] = 9;
01556 fT2d_DeeSCCons[dee-1][17-1] = 153; fT2d_DeeSCCons[dee][17-1] = 4;
01557 fT2d_DeeSCCons[dee-1][18-1] = 152; fT2d_DeeSCCons[dee][18-1] = 3;
01558 fT2d_DeeSCCons[dee-1][19-1] = 151; fT2d_DeeSCCons[dee][19-1] = 2;
01559 fT2d_DeeSCCons[dee-1][20-1] = 150; fT2d_DeeSCCons[dee][20-1] = 1;
01560
01561 fT2d_DeeSCCons[dee-1][33-1] = 165; fT2d_DeeSCCons[dee][33-1] = 16;
01562 fT2d_DeeSCCons[dee-1][34-1] = 164; fT2d_DeeSCCons[dee][34-1] = 15;
01563 fT2d_DeeSCCons[dee-1][35-1] = 163; fT2d_DeeSCCons[dee][35-1] = 14;
01564 fT2d_DeeSCCons[dee-1][36-1] = 162; fT2d_DeeSCCons[dee][36-1] = 13;
01565 fT2d_DeeSCCons[dee-1][37-1] = 157; fT2d_DeeSCCons[dee][37-1] = 8;
01566 fT2d_DeeSCCons[dee-1][38-1] = 156; fT2d_DeeSCCons[dee][38-1] = 7;
01567 fT2d_DeeSCCons[dee-1][39-1] = 155; fT2d_DeeSCCons[dee][39-1] = 6;
01568 fT2d_DeeSCCons[dee-1][40-1] = 154; fT2d_DeeSCCons[dee][40-1] = 5;
01569
01570 fT2d_DeeSCCons[dee-1][54-1] = 193; fT2d_DeeSCCons[dee][54-1] = 44;
01571 fT2d_DeeSCCons[dee-1][55-1] = 186; fT2d_DeeSCCons[dee][55-1] = 37;
01572 fT2d_DeeSCCons[dee-1][56-1] = 179; fT2d_DeeSCCons[dee][56-1] = 30;
01573 fT2d_DeeSCCons[dee-1][57-1] = 173; fT2d_DeeSCCons[dee][57-1] = 24;
01574 fT2d_DeeSCCons[dee-1][58-1] = 169; fT2d_DeeSCCons[dee][58-1] = 20;
01575 fT2d_DeeSCCons[dee-1][59-1] = 166; fT2d_DeeSCCons[dee][59-1] = 17;
01576 fT2d_DeeSCCons[dee-1][60-1] = 182; fT2d_DeeSCCons[dee][60-1] = 33;
01577
01578 fT2d_DeeSCCons[dee-1][75-1] = 187; fT2d_DeeSCCons[dee][75-1] = 38;
01579 fT2d_DeeSCCons[dee-1][76-1] = 180; fT2d_DeeSCCons[dee][76-1] = 31;
01580 fT2d_DeeSCCons[dee-1][77-1] = 174; fT2d_DeeSCCons[dee][77-1] = 25;
01581 fT2d_DeeSCCons[dee-1][78-1] = 170; fT2d_DeeSCCons[dee][78-1] = 21;
01582 fT2d_DeeSCCons[dee-1][79-1] = 167; fT2d_DeeSCCons[dee][79-1] = 18;
01583
01584 fT2d_DeeSCCons[dee-1][96-1] = 181; fT2d_DeeSCCons[dee][96-1] = 32;
01585 fT2d_DeeSCCons[dee-1][97-1] = 175; fT2d_DeeSCCons[dee][97-1] = 26;
01586 fT2d_DeeSCCons[dee-1][98-1] = 171; fT2d_DeeSCCons[dee][98-1] = 22;
01587 fT2d_DeeSCCons[dee-1][99-1] = 168; fT2d_DeeSCCons[dee][99-1] = 19;
01588
01589 fT2d_DeeSCCons[dee-1][118-1] = 172; fT2d_DeeSCCons[dee][118-1] = 23;
01590 fT2d_DeeSCCons[dee-1][119-1] = 182; fT2d_DeeSCCons[dee][119-1] = 33;
01591
01592
01593 fT2d_DeeSCCons[dee-1][32-1] = 178; fT2d_DeeSCCons[dee][32-1] = 29;
01594
01595 fT2d_DeeSCCons[dee-1][51-1] = 216; fT2d_DeeSCCons[dee][51-1] = 67;
01596 fT2d_DeeSCCons[dee-1][52-1] = 208; fT2d_DeeSCCons[dee][52-1] = 59;
01597 fT2d_DeeSCCons[dee-1][53-1] = 200; fT2d_DeeSCCons[dee][53-1] = 51;
01598
01599 fT2d_DeeSCCons[dee-1][72-1] = 209; fT2d_DeeSCCons[dee][72-1] = 60;
01600 fT2d_DeeSCCons[dee-1][73-1] = 201; fT2d_DeeSCCons[dee][73-1] = 52;
01601 fT2d_DeeSCCons[dee-1][74-1] = 194; fT2d_DeeSCCons[dee][74-1] = 45;
01602
01603 fT2d_DeeSCCons[dee-1][92-1] = 210; fT2d_DeeSCCons[dee][92-1] = 61;
01604 fT2d_DeeSCCons[dee-1][93-1] = 202; fT2d_DeeSCCons[dee][93-1] = 53;
01605 fT2d_DeeSCCons[dee-1][94-1] = 195; fT2d_DeeSCCons[dee][94-1] = 46;
01606 fT2d_DeeSCCons[dee-1][95-1] = 188; fT2d_DeeSCCons[dee][95-1] = 39;
01607
01608 fT2d_DeeSCCons[dee-1][112-1] = 211; fT2d_DeeSCCons[dee][112-1] = 62;
01609 fT2d_DeeSCCons[dee-1][113-1] = 203; fT2d_DeeSCCons[dee][113-1] = 54;
01610 fT2d_DeeSCCons[dee-1][114-1] = 196; fT2d_DeeSCCons[dee][114-1] = 47;
01611 fT2d_DeeSCCons[dee-1][115-1] = 189; fT2d_DeeSCCons[dee][115-1] = 40;
01612 fT2d_DeeSCCons[dee-1][116-1] = 183; fT2d_DeeSCCons[dee][116-1] = 34;
01613 fT2d_DeeSCCons[dee-1][117-1] = 176; fT2d_DeeSCCons[dee][117-1] = 27;
01614
01615 fT2d_DeeSCCons[dee-1][132-1] = 212; fT2d_DeeSCCons[dee][132-1] = 63;
01616 fT2d_DeeSCCons[dee-1][133-1] = 204; fT2d_DeeSCCons[dee][133-1] = 55;
01617 fT2d_DeeSCCons[dee-1][134-1] = 197; fT2d_DeeSCCons[dee][134-1] = 48;
01618 fT2d_DeeSCCons[dee-1][135-1] = 190; fT2d_DeeSCCons[dee][135-1] = 41;
01619 fT2d_DeeSCCons[dee-1][136-1] = 184; fT2d_DeeSCCons[dee][136-1] = 35;
01620 fT2d_DeeSCCons[dee-1][137-1] = 177; fT2d_DeeSCCons[dee][137-1] = 28;
01621 fT2d_DeeSCCons[dee-1][138-1] = 178; fT2d_DeeSCCons[dee][138-1] = 29;
01622
01623 fT2d_DeeSCCons[dee-1][152-1] = 213; fT2d_DeeSCCons[dee][152-1] = 64;
01624 fT2d_DeeSCCons[dee-1][153-1] = 205; fT2d_DeeSCCons[dee][153-1] = 56;
01625 fT2d_DeeSCCons[dee-1][154-1] = 198; fT2d_DeeSCCons[dee][154-1] = 49;
01626 fT2d_DeeSCCons[dee-1][155-1] = 191; fT2d_DeeSCCons[dee][155-1] = 42;
01627 fT2d_DeeSCCons[dee-1][156-1] = 185; fT2d_DeeSCCons[dee][156-1] = 36;
01628 fT2d_DeeSCCons[dee-1][157-1] = 178; fT2d_DeeSCCons[dee][157-1] = 29;
01629
01630 fT2d_DeeSCCons[dee-1][173-1] = 206; fT2d_DeeSCCons[dee][173-1] = 57;
01631 fT2d_DeeSCCons[dee-1][174-1] = 199; fT2d_DeeSCCons[dee][174-1] = 50;
01632 fT2d_DeeSCCons[dee-1][175-1] = 192; fT2d_DeeSCCons[dee][175-1] = 43;
01633 fT2d_DeeSCCons[dee-1][176-1] = 207; fT2d_DeeSCCons[dee][176-1] = 58;
01634
01635 fT2d_DeeSCCons[dee-1][193-1] = 207; fT2d_DeeSCCons[dee][193-1] = 58;
01636
01637
01638 fT2d_DeeSCCons[dee-1][50-1] = 224; fT2d_DeeSCCons[dee][50-1] = 75;
01639
01640 fT2d_DeeSCCons[dee-1][69-1] = 233; fT2d_DeeSCCons[dee][69-1] = 84;
01641 fT2d_DeeSCCons[dee-1][70-1] = 225; fT2d_DeeSCCons[dee][70-1] = 76;
01642 fT2d_DeeSCCons[dee-1][71-1] = 217; fT2d_DeeSCCons[dee][71-1] = 68;
01643
01644 fT2d_DeeSCCons[dee-1][88-1] = 242; fT2d_DeeSCCons[dee][88-1] = 93;
01645 fT2d_DeeSCCons[dee-1][89-1] = 234; fT2d_DeeSCCons[dee][89-1] = 85;
01646 fT2d_DeeSCCons[dee-1][90-1] = 226; fT2d_DeeSCCons[dee][90-1] = 77;
01647 fT2d_DeeSCCons[dee-1][91-1] = 218; fT2d_DeeSCCons[dee][91-1] = 69;
01648
01649 fT2d_DeeSCCons[dee-1][108-1] = 243; fT2d_DeeSCCons[dee][108-1] = 94;
01650 fT2d_DeeSCCons[dee-1][109-1] = 235; fT2d_DeeSCCons[dee][109-1] = 86;
01651 fT2d_DeeSCCons[dee-1][110-1] = 227; fT2d_DeeSCCons[dee][110-1] = 78;
01652 fT2d_DeeSCCons[dee-1][111-1] = 219; fT2d_DeeSCCons[dee][111-1] = 70;
01653
01654 fT2d_DeeSCCons[dee-1][127-1] = 252; fT2d_DeeSCCons[dee][127-1] = 103;
01655 fT2d_DeeSCCons[dee-1][128-1] = 244; fT2d_DeeSCCons[dee][128-1] = 95;
01656 fT2d_DeeSCCons[dee-1][129-1] = 236; fT2d_DeeSCCons[dee][129-1] = 87;
01657 fT2d_DeeSCCons[dee-1][130-1] = 228; fT2d_DeeSCCons[dee][130-1] = 79;
01658 fT2d_DeeSCCons[dee-1][131-1] = 220; fT2d_DeeSCCons[dee][131-1] = 71;
01659
01660 fT2d_DeeSCCons[dee-1][147-1] = 253; fT2d_DeeSCCons[dee][147-1] = 104;
01661 fT2d_DeeSCCons[dee-1][148-1] = 245; fT2d_DeeSCCons[dee][148-1] = 96;
01662 fT2d_DeeSCCons[dee-1][149-1] = 237; fT2d_DeeSCCons[dee][149-1] = 88;
01663 fT2d_DeeSCCons[dee-1][150-1] = 229; fT2d_DeeSCCons[dee][150-1] = 80;
01664 fT2d_DeeSCCons[dee-1][151-1] = 221; fT2d_DeeSCCons[dee][151-1] = 72;
01665
01666 fT2d_DeeSCCons[dee-1][166-1] = 254; fT2d_DeeSCCons[dee][166-1] = 105;
01667 fT2d_DeeSCCons[dee-1][167-1] = 247; fT2d_DeeSCCons[dee][167-1] = 98;
01668 fT2d_DeeSCCons[dee-1][168-1] = 246; fT2d_DeeSCCons[dee][168-1] = 97;
01669 fT2d_DeeSCCons[dee-1][169-1] = 238; fT2d_DeeSCCons[dee][169-1] = 89;
01670 fT2d_DeeSCCons[dee-1][170-1] = 230; fT2d_DeeSCCons[dee][170-1] = 81;
01671 fT2d_DeeSCCons[dee-1][171-1] = 222; fT2d_DeeSCCons[dee][171-1] = 73;
01672 fT2d_DeeSCCons[dee-1][172-1] = 214; fT2d_DeeSCCons[dee][172-1] = 65;
01673
01674 fT2d_DeeSCCons[dee-1][188-1] = 298; fT2d_DeeSCCons[dee][188-1] = 149;
01675 fT2d_DeeSCCons[dee-1][189-1] = 239; fT2d_DeeSCCons[dee][189-1] = 90;
01676 fT2d_DeeSCCons[dee-1][190-1] = 231; fT2d_DeeSCCons[dee][190-1] = 82;
01677 fT2d_DeeSCCons[dee-1][191-1] = 223; fT2d_DeeSCCons[dee][191-1] = 74;
01678 fT2d_DeeSCCons[dee-1][192-1] = 215; fT2d_DeeSCCons[dee][192-1] = 66;
01679
01680
01681 fT2d_DeeSCCons[dee-1][29-1] = 261; fT2d_DeeSCCons[dee][29-1] = 112;
01682 fT2d_DeeSCCons[dee-1][27-1] = 283; fT2d_DeeSCCons[dee][27-1] = 134;
01683 fT2d_DeeSCCons[dee-1][28-1] = 282; fT2d_DeeSCCons[dee][28-1] = 133;
01684
01685 fT2d_DeeSCCons[dee-1][44-1] = 269; fT2d_DeeSCCons[dee][44-1] = 120;
01686 fT2d_DeeSCCons[dee-1][45-1] = 262; fT2d_DeeSCCons[dee][45-1] = 113;
01687 fT2d_DeeSCCons[dee-1][46-1] = 255; fT2d_DeeSCCons[dee][46-1] = 106;
01688 fT2d_DeeSCCons[dee-1][47-1] = 248; fT2d_DeeSCCons[dee][47-1] = 99;
01689 fT2d_DeeSCCons[dee-1][48-1] = 240; fT2d_DeeSCCons[dee][48-1] = 91;
01690 fT2d_DeeSCCons[dee-1][49-1] = 232; fT2d_DeeSCCons[dee][49-1] = 83;
01691
01692 fT2d_DeeSCCons[dee-1][62-1] = 276; fT2d_DeeSCCons[dee][62-1] = 127;
01693 fT2d_DeeSCCons[dee-1][63-1] = 275; fT2d_DeeSCCons[dee][63-1] = 126;
01694 fT2d_DeeSCCons[dee-1][64-1] = 270; fT2d_DeeSCCons[dee][64-1] = 121;
01695 fT2d_DeeSCCons[dee-1][65-1] = 263; fT2d_DeeSCCons[dee][65-1] = 114;
01696 fT2d_DeeSCCons[dee-1][66-1] = 256; fT2d_DeeSCCons[dee][66-1] = 107;
01697 fT2d_DeeSCCons[dee-1][67-1] = 249; fT2d_DeeSCCons[dee][67-1] = 100;
01698 fT2d_DeeSCCons[dee-1][68-1] = 241; fT2d_DeeSCCons[dee][68-1] = 92;
01699
01700 fT2d_DeeSCCons[dee-1][82-1] = 278; fT2d_DeeSCCons[dee][82-1] = 129;
01701 fT2d_DeeSCCons[dee-1][83-1] = 277; fT2d_DeeSCCons[dee][83-1] = 128;
01702 fT2d_DeeSCCons[dee-1][84-1] = 271; fT2d_DeeSCCons[dee][84-1] = 122;
01703 fT2d_DeeSCCons[dee-1][85-1] = 264; fT2d_DeeSCCons[dee][85-1] = 115;
01704 fT2d_DeeSCCons[dee-1][86-1] = 257; fT2d_DeeSCCons[dee][86-1] = 108;
01705 fT2d_DeeSCCons[dee-1][87-1] = 250; fT2d_DeeSCCons[dee][87-1] = 101;
01706
01707 fT2d_DeeSCCons[dee-1][102-1] = 268; fT2d_DeeSCCons[dee][102-1] = 119;
01708 fT2d_DeeSCCons[dee-1][103-1] = 274; fT2d_DeeSCCons[dee][103-1] = 125;
01709 fT2d_DeeSCCons[dee-1][104-1] = 272; fT2d_DeeSCCons[dee][104-1] = 123;
01710 fT2d_DeeSCCons[dee-1][105-1] = 265; fT2d_DeeSCCons[dee][105-1] = 116;
01711 fT2d_DeeSCCons[dee-1][106-1] = 258; fT2d_DeeSCCons[dee][106-1] = 109;
01712 fT2d_DeeSCCons[dee-1][107-1] = 251; fT2d_DeeSCCons[dee][107-1] = 102;
01713
01714 fT2d_DeeSCCons[dee-1][123-1] = 268; fT2d_DeeSCCons[dee][123-1] = 119;
01715 fT2d_DeeSCCons[dee-1][124-1] = 273; fT2d_DeeSCCons[dee][124-1] = 124;
01716 fT2d_DeeSCCons[dee-1][125-1] = 266; fT2d_DeeSCCons[dee][125-1] = 117;
01717 fT2d_DeeSCCons[dee-1][126-1] = 259; fT2d_DeeSCCons[dee][126-1] = 110;
01718
01719 fT2d_DeeSCCons[dee-1][144-1] = 261; fT2d_DeeSCCons[dee][144-1] = 112;
01720 fT2d_DeeSCCons[dee-1][145-1] = 267; fT2d_DeeSCCons[dee][145-1] = 118;
01721 fT2d_DeeSCCons[dee-1][146-1] = 260; fT2d_DeeSCCons[dee][146-1] = 111;
01722
01723 fT2d_DeeSCCons[dee-1][165-1] = 261; fT2d_DeeSCCons[dee][165-1] = 112;
01724
01725
01726 fT2d_DeeSCCons[dee-1][1-1] = 297;
01727 fT2d_DeeSCCons[dee-1][2-1] = 296;
01728 fT2d_DeeSCCons[dee-1][3-1] = 295;
01729 fT2d_DeeSCCons[dee-1][4-1] = 294;
01730 fT2d_DeeSCCons[dee-1][5-1] = 289;
01731 fT2d_DeeSCCons[dee-1][6-1] = 288;
01732 fT2d_DeeSCCons[dee-1][7-1] = 287;
01733 fT2d_DeeSCCons[dee-1][8-1] = 286;
01734
01735 fT2d_DeeSCCons[dee-1][21-1] = 293;
01736 fT2d_DeeSCCons[dee-1][22-1] = 292;
01737 fT2d_DeeSCCons[dee-1][23-1] = 291;
01738 fT2d_DeeSCCons[dee-1][24-1] = 290;
01739 fT2d_DeeSCCons[dee-1][25-1] = 285;
01740 fT2d_DeeSCCons[dee-1][26-1] = 284;
01741
01742 fT2d_DeeSCCons[dee-1][41-1] = 281;
01743 fT2d_DeeSCCons[dee-1][42-1] = 280;
01744 fT2d_DeeSCCons[dee-1][43-1] = 279;
01745
01746
01747 fT2d_DeeSCCons[dee][1-1] = 148;
01748 fT2d_DeeSCCons[dee][2-1] = 147;
01749 fT2d_DeeSCCons[dee][3-1] = 146;
01750 fT2d_DeeSCCons[dee][4-1] = 145;
01751 fT2d_DeeSCCons[dee][5-1] = 140;
01752 fT2d_DeeSCCons[dee][6-1] = 139;
01753 fT2d_DeeSCCons[dee][7-1] = 138;
01754 fT2d_DeeSCCons[dee][8-1] = 137;
01755
01756 fT2d_DeeSCCons[dee][21-1] = 144;
01757 fT2d_DeeSCCons[dee][22-1] = 143;
01758 fT2d_DeeSCCons[dee][23-1] = 142;
01759 fT2d_DeeSCCons[dee][24-1] = 141;
01760 fT2d_DeeSCCons[dee][25-1] = 136;
01761 fT2d_DeeSCCons[dee][26-1] = 135;
01762
01763 fT2d_DeeSCCons[dee][41-1] = 132;
01764 fT2d_DeeSCCons[dee][42-1] = 131;
01765 fT2d_DeeSCCons[dee][43-1] = 130;
01766 }
01767
01768
01769
01770 for(Int_t i0EEDee=0; i0EEDee<MaxEEDee; i0EEDee++)
01771 {
01772 for(Int_t i_ecna=0; i_ecna<MaxDeeSC; i_ecna++)
01773 {
01774
01775
01776 if( fT2d_DeeSCCons[i0EEDee][i_ecna] >= 0 && fT2d_DeeSCCons[i0EEDee][i_ecna] <= MaxEESCForCons )
01777 {
01778 fT2d_RecovDeeSC[i0EEDee][fT2d_DeeSCCons[i0EEDee][i_ecna]-1] = i_ecna+1;
01779 }
01780 }
01781 }
01782 }
01783
01784
01785
01786
01787
01788
01789
01790
01791 Int_t TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(const Int_t& n1DeeSCEcna,
01792 const Int_t& i0SCEcha,
01793 const TString& sDeeDir)
01794 {
01795
01796
01797
01798 Int_t n1DeeCrys = 0;
01799 Int_t i0DeeDir = GetDeeDirIndex(sDeeDir);
01800
01801 if( fT3dDeeCrys == 0 ){BuildEndcapCrysTable();}
01802
01803 if( (n1DeeSCEcna >= 1) && (n1DeeSCEcna <= fEcal->MaxSCEcnaInDee()) )
01804 {
01805 if (i0SCEcha >=0 && i0SCEcha < fEcal->MaxCrysInSC())
01806 {
01807 n1DeeCrys = fT3dDeeCrys[n1DeeSCEcna-1][i0SCEcha][i0DeeDir];
01808 }
01809 else
01810 {
01811 n1DeeCrys = -2;
01812 cout << "!TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(...)> Electronic Channel in SuperCrystal = "
01813 << i0SCEcha+1 << ". Out of range (range = [1," << fEcal->MaxCrysInSC() << "])" << fTTBELL << endl;
01814 }
01815 }
01816 else
01817 {
01818 n1DeeCrys = -3;
01819 cout << "!TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(...)> Super-Crystal number in Dee out of range."
01820 << " n1DeeSCEcna = " << n1DeeSCEcna << fTTBELL << endl;
01821 }
01822
01823 return n1DeeCrys;
01824 }
01825
01826
01827
01828
01829
01830
01831
01832 Int_t TEcnaNumbering::Get1SCEchaFrom1DeeCrys(const Int_t& n1DeeCrys, const TString& sDeeDir)
01833 {
01834
01835
01836 Int_t n1SCEcha = -1;
01837 Int_t iDeeDir = GetDeeDirIndex(sDeeDir);
01838
01839 if( n1DeeCrys >= 1 && n1DeeCrys <= fEcal->MaxCrysEcnaInDee() )
01840 {
01841 n1SCEcha = fT2dSCEcha[n1DeeCrys-1][iDeeDir];
01842 }
01843 else
01844 {
01845 n1SCEcha = -2;
01846 cout << "!TEcnaNumbering::Get1SCEchaFrom1DeeCrys(...)> Crystal number in Dee out of range."
01847 << " n1DeeCrys = " << n1DeeCrys << "(max = " << fEcal->MaxCrysEcnaInDee() << ")" << fTTBELL << endl;
01848 }
01849 return n1SCEcha;
01850 }
01851
01852 Int_t TEcnaNumbering::Get1DeeSCEcnaFrom1DeeCrys(const Int_t& n1DeeCrys, const TString& sDeeDir)
01853 {
01854
01855
01856 Int_t n1DeeSCEcna = 0;
01857 Int_t iDeeDir = GetDeeDirIndex(sDeeDir);
01858
01859 if( n1DeeCrys >= 1 && n1DeeCrys <= fEcal->MaxCrysEcnaInDee() )
01860 {
01861 n1DeeSCEcna = fT2dDeeSC[n1DeeCrys-1][iDeeDir];
01862 }
01863 else
01864 {
01865 n1DeeSCEcna = -1;
01866 cout << "!TEcnaNumbering::Get1DeeSCEcnaFrom1DeeCrys(...)> Crystal number in Dee out of range."
01867 << " n1DeeCrys = " << n1DeeCrys << "(max = " << fEcal->MaxCrysEcnaInDee() << ")" << fTTBELL << endl;
01868 }
01869 return n1DeeSCEcna;
01870 }
01871
01872
01873
01874
01875
01876
01877
01878
01879 Int_t TEcnaNumbering::Get1SCEchaFrom0DeeEcha(const Int_t& i0DeeEcha)
01880 {
01881
01882
01883 Int_t i0DeeSC = i0DeeEcha/fEcal->MaxCrysInSC();
01884 Int_t n1SCEcha = i0DeeEcha - fEcal->MaxCrysInSC()*i0DeeSC + 1;
01885
01886 return n1SCEcha;
01887 }
01888
01889 Int_t TEcnaNumbering::Get1DeeSCEcnaFrom0DeeEcha(const Int_t& i0DeeEcha)
01890 {
01891
01892
01893 Int_t n1DeeSC = i0DeeEcha/fEcal->MaxCrysInSC()+1;
01894
01895 return n1DeeSC;
01896 }
01897
01898
01899
01900
01901
01902
01903
01904
01905
01906
01907
01908
01909 Int_t TEcnaNumbering::GetDSFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna)
01910 {
01911
01912
01913 Int_t data_sector = -1;
01914
01915 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
01916 {
01917 if( n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee() )
01918 {
01919 data_sector = fT2d_DS[n1DeeNumber-1][n1DeeSCEcna-1];
01920 }
01921 else
01922 {
01923 cout << "!TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> n1DeeSCEcna = " << n1DeeSCEcna
01924 << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] )"
01925 << fTTBELL << endl;
01926 }
01927 }
01928 else
01929 {
01930 if( n1DeeNumber != 0 )
01931 {
01932 cout << "!TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
01933 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
01934 << fTTBELL << endl;
01935 }
01936 else
01937 {
01938 cout << "TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
01939 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
01940 << fTTBELL << endl;
01941 }
01942 }
01943 return data_sector;
01944 }
01945
01946 Int_t TEcnaNumbering::GetDSSCFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna,
01947 const Int_t& n1SCEcha)
01948 {
01949
01950 Int_t ds_sc = GetDSSCFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
01951
01952 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 )
01953 {
01954 if( n1SCEcha == 11 )
01955 {
01956 if( ds_sc == 14 ){ds_sc= 21;}
01957 }
01958 if( n1SCEcha == 1 || n1SCEcha == 2 || n1SCEcha == 3 ||
01959 n1SCEcha == 6 || n1SCEcha == 7 )
01960 {
01961 if( ds_sc == 3 ){ds_sc = 25;}
01962 }
01963 }
01964 return ds_sc;
01965 }
01966
01967 Int_t TEcnaNumbering::GetDSSCFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna)
01968 {
01969
01970
01971 Int_t ds_sc = -1;
01972
01973 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
01974 {
01975 if( n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee() )
01976 {
01977 ds_sc = fT2d_DSSC[n1DeeNumber-1][n1DeeSCEcna-1];
01978
01979 }
01980 else
01981 {
01982 cout << "!TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> n1DeeSCEcna = " << n1DeeSCEcna
01983 << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] )"
01984 << fTTBELL << endl;
01985 }
01986 }
01987 else
01988 {
01989 if( n1DeeNumber != 0 )
01990 {
01991 cout << "!TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
01992 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
01993 << fTTBELL << endl;
01994 }
01995 else
01996 {
01997 cout << "TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
01998 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
01999 << fTTBELL << endl;
02000 }
02001 }
02002 return ds_sc;
02003 }
02004
02005 Int_t TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna)
02006 {
02007
02008
02009 Int_t dee_sc_cons = -1;
02010
02011 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
02012 {
02013 if( n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee() )
02014 {
02015 dee_sc_cons = fT2d_DeeSCCons[n1DeeNumber-1][n1DeeSCEcna-1];
02016 }
02017 else
02018 {
02019 cout << "!TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> *** WARNING *** n1DeeSCEcna = " << n1DeeSCEcna
02020 << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee()
02021 << "] ). Nb for const. forced to " << fT2d_DeeSCCons[n1DeeNumber-1][19] << "." << endl;
02022 dee_sc_cons = fT2d_DeeSCCons[n1DeeNumber-1][19];
02023 }
02024 }
02025 else
02026 {
02027 if( n1DeeNumber != 0 )
02028 {
02029 cout << "!TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
02030 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
02031 << fTTBELL << endl;
02032 }
02033 else
02034 {
02035 cout << "TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
02036 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
02037 << fTTBELL << endl;
02038 }
02039 }
02040 return dee_sc_cons;
02041 }
02042
02043 Int_t TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna,
02044 const Int_t& n1SCEcha)
02045 {
02046
02047 Int_t dee_sc_cons = GetDeeSCConsFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
02048
02049 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 )
02050 {
02051 if( n1SCEcha == 11 )
02052 {
02053 if( dee_sc_cons == 261 ){dee_sc_cons = 268;}
02054 if( dee_sc_cons == 112 ){dee_sc_cons = 119;}
02055 }
02056 if( n1SCEcha == 1 || n1SCEcha == 2 || n1SCEcha == 3 ||
02057 n1SCEcha == 6 || n1SCEcha == 7 )
02058 {
02059 if( dee_sc_cons == 178 ){dee_sc_cons = 207;}
02060 if( dee_sc_cons == 29 ){dee_sc_cons = 58;}
02061 }
02062 }
02063 return dee_sc_cons;
02064 }
02065
02066 Int_t TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(const Int_t& n1DeeNumber, const Int_t& DeeSCCons)
02067 {
02068
02069
02070 Int_t dee_sc_ecna = -1;
02071
02072 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
02073 {
02074 Int_t off_set_cons = 0;
02075 if( n1DeeNumber == 1 || n1DeeNumber == 3 ){off_set_cons = fEcal->MaxSCForConsInDee();}
02076
02077 if( DeeSCCons > off_set_cons && DeeSCCons <= fEcal->MaxSCForConsInDee()+off_set_cons )
02078 {
02079 dee_sc_ecna = fT2d_RecovDeeSC[n1DeeNumber-1][DeeSCCons-1];
02080 }
02081 else
02082 {
02083 cout << "!TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> DeeSCCons = " << DeeSCCons
02084 << ". Out of range ( range = [ " << off_set_cons+1
02085 << "," << fEcal->MaxSCForConsInDee()+off_set_cons << "] )"
02086 << fTTBELL << endl;
02087 }
02088 }
02089 else
02090 {
02091 if( n1DeeNumber != 0 )
02092 {
02093 cout << "!TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> n1DeeNumber = " << n1DeeNumber
02094 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
02095 << fTTBELL << endl;
02096 }
02097 else
02098 {
02099 cout << "TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> Dee = " << n1DeeNumber
02100 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
02101 << fTTBELL << endl;
02102 }
02103 }
02104 return dee_sc_ecna;
02105 }
02106
02107 TString TEcnaNumbering::GetSCType(const Int_t& nb_for_cons)
02108 {
02109
02110
02111 TString SCType = "Connected";
02112
02113 if( nb_for_cons == 182 || nb_for_cons == 33 ){SCType = "NotConnected";}
02114
02115 if( nb_for_cons == 178 || nb_for_cons == 29 ){SCType = "NotConnected";}
02116 if( nb_for_cons == 207 || nb_for_cons == 58 ){SCType = "NotConnected";}
02117
02118 if( nb_for_cons == 298 || nb_for_cons == 149 ){SCType = "NotConnected";}
02119
02120 if( nb_for_cons == 261 || nb_for_cons == 112 ){SCType = "NotConnected";}
02121 if( nb_for_cons == 268 || nb_for_cons == 119 ){SCType = "NotConnected";}
02122
02123 if( nb_for_cons == 281 || nb_for_cons == 132 ){SCType = "NotConnected";}
02124
02125 if( nb_for_cons == 161 || nb_for_cons == 12 ){SCType = "NotComplete";}
02126 if( nb_for_cons == 216 || nb_for_cons == 67 ){SCType = "NotComplete";}
02127 if( nb_for_cons == 224 || nb_for_cons == 75 ){SCType = "NotComplete";}
02128 if( nb_for_cons == 286 || nb_for_cons == 137 ){SCType = "NotComplete";}
02129
02130 return SCType;
02131 }
02132
02133 Int_t TEcnaNumbering::StexEchaForCons(const Int_t& n1DeeNumber, const Int_t& i0StexEcha)
02134 {
02135 Int_t n1StexStin = Get1StexStinFrom0StexEcha(i0StexEcha);
02136 return fT2d_DeeSCCons[n1DeeNumber-1][n1StexStin-1];
02137 }
02138
02139
02140
02141
02142
02143
02144
02145
02146 TString TEcnaNumbering::GetSCQuadFrom1DeeSCEcna(const Int_t& n1DeeSCEcna)
02147 {
02148
02149
02150 TString SCQuad = "top";
02151
02152 if (n1DeeSCEcna >= 1 && n1DeeSCEcna <= 10){SCQuad = "bottom";}
02153 if (n1DeeSCEcna >= 21 && n1DeeSCEcna <= 30){SCQuad = "bottom";}
02154 if (n1DeeSCEcna >= 41 && n1DeeSCEcna <= 50){SCQuad = "bottom";}
02155 if (n1DeeSCEcna >= 61 && n1DeeSCEcna <= 70){SCQuad = "bottom";}
02156 if (n1DeeSCEcna >= 81 && n1DeeSCEcna <= 90){SCQuad = "bottom";}
02157 if (n1DeeSCEcna >= 101 && n1DeeSCEcna <= 110){SCQuad = "bottom";}
02158 if (n1DeeSCEcna >= 121 && n1DeeSCEcna <= 130){SCQuad = "bottom";}
02159 if (n1DeeSCEcna >= 141 && n1DeeSCEcna <= 150){SCQuad = "bottom";}
02160 if (n1DeeSCEcna >= 161 && n1DeeSCEcna <= 170){SCQuad = "bottom";}
02161 if (n1DeeSCEcna >= 181 && n1DeeSCEcna <= 190){SCQuad = "bottom";}
02162
02163 return SCQuad;
02164 }
02165 Int_t TEcnaNumbering::GetSCQuadTypeIndex(const TString& SCQuadType, const TString& sDeeDir)
02166 {
02167
02168
02169
02170 Int_t itype = 0;
02171 if ( SCQuadType == "top" && sDeeDir == "right" ){itype = 0;}
02172 if ( SCQuadType == "top" && sDeeDir == "left" ){itype = 1;}
02173 if ( SCQuadType == "bottom" && sDeeDir == "left" ){itype = 2;}
02174 if ( SCQuadType == "bottom" && sDeeDir == "right" ){itype = 3;}
02175 return itype;
02176 }
02177
02178
02179
02180
02181
02182 TString TEcnaNumbering::GetEEDeeEndcap(const Int_t& n1DeeNumber)
02183 {
02184
02185
02186 TString eetype = "EE+";
02187 if ( n1DeeNumber == 1 || n1DeeNumber == 2 ){eetype = "EE+";}
02188 if ( n1DeeNumber == 3 || n1DeeNumber == 4 ){eetype = "EE-";}
02189 return eetype;
02190 }
02191 TString TEcnaNumbering::GetEEDeeType(const Int_t& n1DeeNumber)
02192 {
02193
02194
02195 TString type = "EE+F";
02196 if ( n1DeeNumber == 1 ){type = "EE+F";}
02197 if ( n1DeeNumber == 2 ){type = "EE+N";}
02198 if ( n1DeeNumber == 3 ){type = "EE-N";}
02199 if ( n1DeeNumber == 4 ){type = "EE-F";}
02200 return type;
02201 }
02202
02203 TString TEcnaNumbering::GetDeeDirViewedFromIP(const Int_t& n1DeeNumber)
02204 {
02205
02206
02207
02208 TString sDeeDir = "right";
02209 if ( (n1DeeNumber == 1) || (n1DeeNumber == 3) ){sDeeDir = "right";}
02210 if ( (n1DeeNumber == 2) || (n1DeeNumber == 4) ){sDeeDir = "left" ;}
02211 return sDeeDir;
02212 }
02213 Int_t TEcnaNumbering::GetDeeDirIndex(const TString& sDeeDir)
02214 {
02215
02216
02217
02218 Int_t iDeeDir = 0;
02219 if ( sDeeDir == "right" ){iDeeDir = 0;}
02220 if ( sDeeDir == "left" ){iDeeDir = 1;}
02221 return iDeeDir;
02222 }
02223
02224
02225
02226
02227
02228
02229
02230
02231 Int_t TEcnaNumbering::GetIXCrysInSC(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02232 const Int_t& i0SCEcha)
02233 {
02234
02235
02236 TString SCQuadType = GetSCQuadFrom1DeeSCEcna(DeeSC);
02237 TString sDeeDir = GetDeeDirViewedFromIP(n1DeeNumber);
02238 Int_t type_index = GetSCQuadTypeIndex(SCQuadType, sDeeDir);
02239 Int_t IXCrysInSC = fT2d_ich_IX[type_index][i0SCEcha+1] + 1;
02240 return IXCrysInSC;
02241 }
02242
02243 Int_t TEcnaNumbering::GetIXSCInDee(const Int_t& DeeSC)
02244 {
02245
02246
02247 Int_t IXSCInDee = (DeeSC-1)/fEcal->MaxSCIYInDee() + 1;
02248 return IXSCInDee;
02249 }
02250
02251 Int_t TEcnaNumbering::GetIXCrysInDee(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02252 const Int_t& i0SCEcha)
02253 {
02254
02255
02256 Int_t IXCrysInDee =
02257 (GetIXSCInDee(DeeSC)-1)*fEcal->MaxCrysIXInSC() +
02258 GetIXCrysInSC(n1DeeNumber, DeeSC, i0SCEcha);
02259 return IXCrysInDee;
02260 }
02261
02262 Int_t TEcnaNumbering::GetJYCrysInSC(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02263 const Int_t& i0SCEcha)
02264 {
02265
02266
02267 TString SCQuadType = GetSCQuadFrom1DeeSCEcna(DeeSC);
02268 TString sDeeDir = GetDeeDirViewedFromIP(n1DeeNumber);
02269 Int_t type_index = GetSCQuadTypeIndex(SCQuadType, sDeeDir);
02270 Int_t JYCrysInSC = fT2d_jch_JY[type_index][i0SCEcha+1] + 1;
02271 return JYCrysInSC;
02272 }
02273
02274 Int_t TEcnaNumbering::GetJYSCInDee(const Int_t& DeeSC)
02275 {
02276
02277
02278 Int_t JYSCInDee = (DeeSC-1)%fEcal->MaxSCIYInDee() + 1;
02279 return JYSCInDee;
02280 }
02281
02282 Int_t TEcnaNumbering::GetJYCrysInDee(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02283 const Int_t& i0SCEcha)
02284 {
02285
02286
02287 Int_t JYCrysInDee =
02288 (GetJYSCInDee(DeeSC)-1)*fEcal->MaxCrysIYInSC() +
02289 GetJYCrysInSC(n1DeeNumber, DeeSC, i0SCEcha);
02290 return JYCrysInDee;
02291 }
02292
02293 Int_t TEcnaNumbering::GetMaxSCInDS(const Int_t& DeeDS)
02294 {
02295
02296
02297 Int_t nb_of_sc = -1;
02298 if( DeeDS == 1 || DeeDS == 9 ){nb_of_sc = 33;}
02299 if( DeeDS == 2 || DeeDS == 8 ){nb_of_sc = 32;}
02300 if( DeeDS == 3 || DeeDS == 7 ){nb_of_sc = 34;}
02301 if( DeeDS == 4 || DeeDS == 6 ){nb_of_sc = 33;}
02302 if( DeeDS == 5){nb_of_sc = 34;}
02303 return nb_of_sc;
02304 }
02305
02306
02307
02308
02309
02310
02311
02312 Double_t TEcnaNumbering::GetIIXMin(const Int_t& DeeSC)
02313 {
02314
02315
02316 Double_t IX_min = (Double_t)((DeeSC-1)/fEcal->MaxSCIYInDee())*fEcal->MaxCrysIXInSC() + 1.;
02317 return IX_min;
02318 }
02319
02320 Double_t TEcnaNumbering::GetIIXMax(const Int_t& DeeSC)
02321 {
02322
02323
02324 Double_t IX_max = ((Double_t)((DeeSC-1)/fEcal->MaxSCIYInDee())+1.)*fEcal->MaxCrysIXInSC();
02325 return IX_max;
02326 }
02327
02328 Double_t TEcnaNumbering::GetIIXMin()
02329 {
02330
02331
02332 Double_t i_IX_min = (Int_t)1.;
02333 return i_IX_min;
02334 }
02335
02336 Double_t TEcnaNumbering::GetIIXMax()
02337 {
02338
02339
02340 Double_t i_IX_max = (Int_t)fEcal->MaxSCIXInDee();
02341 return i_IX_max;
02342 }
02343
02344
02345
02346
02347
02348
02349 Double_t TEcnaNumbering::GetJIYMin(const Int_t& n1DeeNumber, const Int_t& DeeSC)
02350 {
02351
02352
02353 Double_t IY_DeeSC = DeeSC%fEcal->MaxSCIYInDee();
02354 if( IY_DeeSC == 0. ){IY_DeeSC = fEcal->MaxSCIYInDee();}
02355
02356 Double_t j_IY_min = (IY_DeeSC-1)*fEcal->MaxCrysIYInSC() + 1.;
02357
02358 return j_IY_min;
02359 }
02360
02361 Double_t TEcnaNumbering::GetJIYMax(const Int_t& n1DeeNumber, const Int_t& DeeSC)
02362 {
02363
02364
02365 Double_t IY_DeeSC = DeeSC%fEcal->MaxSCIYInDee();
02366 if( IY_DeeSC == 0 ){IY_DeeSC = fEcal->MaxSCIYInDee();}
02367
02368 Double_t j_IY_max = IY_DeeSC*fEcal->MaxCrysIYInSC();
02369
02370 return j_IY_max;
02371 }
02372
02373
02374 Double_t TEcnaNumbering::GetJIYMin(const Int_t& n1DeeNumber)
02375 {
02376
02377
02378 Double_t j_IY_min = (Double_t)1.;
02379
02380 return j_IY_min;
02381 }
02382
02383 Double_t TEcnaNumbering::GetJIYMax(const Int_t& n1DeeNumber)
02384 {
02385
02386
02387 Double_t j_IY_max = (Double_t)fEcal->MaxSCIYInDee();
02388
02389 return j_IY_max;
02390 }
02391
02392 TString TEcnaNumbering::GetDeeHalfEndcap(const Int_t& n1DeeNumber)
02393 {
02394
02395
02396 TString type = "EE-";
02397
02398 if ( n1DeeNumber == 1 || n1DeeNumber == 2 ){type = "EE+";}
02399 if ( n1DeeNumber == 3 || n1DeeNumber == 4 ){type = "EE-";}
02400
02401 return type;
02402 }
02403
02404
02405
02406
02407
02408 TString TEcnaNumbering::GetXDirectionEE(const Int_t& n1DeeNumber)
02409 {
02410 TString xdirection = "x";
02411
02412 if( GetEEDeeType(n1DeeNumber) == "EE+F" ){xdirection = "-x";}
02413 if( GetEEDeeType(n1DeeNumber) == "EE+N" ){xdirection = "-x";}
02414 if( GetEEDeeType(n1DeeNumber) == "EE-N" ){xdirection = "x";}
02415 if( GetEEDeeType(n1DeeNumber) == "EE-F" ){xdirection = "x";}
02416
02417 return xdirection;
02418 }
02419
02420 TString TEcnaNumbering::GetYDirectionEE(const Int_t& n1DeeNumber)
02421 {
02422 TString ydirection = "-x";
02423
02424 if( GetEEDeeType(n1DeeNumber) == "endcap+" ){ydirection = "-x";}
02425 if( GetEEDeeType(n1DeeNumber) == "endcap-" ){ydirection = "-x";}
02426
02427 return ydirection;
02428 }
02429
02430
02431 TString TEcnaNumbering::GetJYDirectionEE(const Int_t& n1DeeNumber)
02432 {
02433 TString jydirection = "x";
02434 return jydirection;
02435 }
02436
02437
02438
02439
02440
02441
02442
02443
02444
02445
02446
02447
02448
02449
02450
02451
02452
02453 Int_t TEcnaNumbering::Get1StexStinFrom0StexEcha(const Int_t& i0StexEcha)
02454 {
02455 Int_t n1StexStin = 0;
02456
02457 if( fFlagSubDet == "EB" ){n1StexStin = Get1SMTowFrom0SMEcha(i0StexEcha);}
02458 if( fFlagSubDet == "EE" ){n1StexStin = Get1DeeSCEcnaFrom0DeeEcha(i0StexEcha);}
02459
02460 return n1StexStin;
02461 }
02462
02463 Int_t TEcnaNumbering::Get0StexEchaFrom1StexStinAnd0StinEcha(const Int_t& n1StexStin,
02464 const Int_t& i0StinEcha)
02465 {
02466
02467
02468
02469 Int_t StexEcha = (Int_t)(-1.);
02470
02471 if ( n1StexStin > 0 && n1StexStin <= fEcal->MaxStinEcnaInStex() &&
02472 i0StinEcha >= 0 && i0StinEcha < fEcal->MaxCrysInStin() )
02473 {StexEcha = (n1StexStin-1)*fEcal->MaxCrysInStin() + i0StinEcha;}
02474 else
02475 {
02476 cout << "!TEcnaNumbering::Get0StexEchaFrom1StexStinAnd0StinEcha *** ERROR ***> VALUE"
02477 << " OUT OF RANGE. Forced to -1. Argument values: n1StexStin = " << n1StexStin
02478 << ", channel = " << i0StinEcha
02479 << fTTBELL << endl;
02480 }
02481 return StexEcha;
02482 }
02483 Int_t TEcnaNumbering::Get1StexCrysFrom1StexStinAnd0StinEcha(const Int_t& n1StexStin,
02484 const Int_t& i0StinEcha, const Int_t& StexNumber)
02485 {
02486
02487
02488
02489
02490 Int_t n1StexCrys = (Int_t)0;
02491 if( fFlagSubDet == "EB" ){n1StexCrys = Get1SMCrysFrom1SMTowAnd0TowEcha(n1StexStin, i0StinEcha);}
02492 if( fFlagSubDet == "EE" ){TString sDeeDir = GetDeeDirViewedFromIP(StexNumber);
02493 n1StexCrys = Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(n1StexStin, i0StinEcha, sDeeDir);}
02494
02495 return n1StexCrys;
02496 }
02497
02498
02499
02500
02501
02502
02503 Double_t TEcnaNumbering::GetIHocoMin(const Int_t& Stex, const Int_t& StexStin)
02504 {
02505 Double_t IHocoMin = (Double_t)0.;
02506 if(fFlagSubDet == "EB" ){IHocoMin = GetIEtaMin(Stex, StexStin);}
02507 if(fFlagSubDet == "EE" ){IHocoMin = GetIIXMin(StexStin);}
02508 return IHocoMin;
02509 }
02510
02511 Double_t TEcnaNumbering::GetIHocoMax(const Int_t& Stex, const Int_t& StexStin)
02512 {
02513 Double_t IHocoMax = (Double_t)0.;
02514 if(fFlagSubDet == "EB" ){IHocoMax = GetIEtaMax(Stex, StexStin);}
02515 if(fFlagSubDet == "EE" ){IHocoMax = GetIIXMax(StexStin);}
02516 return IHocoMax;
02517 }
02518
02519 Double_t TEcnaNumbering::GetVecoMin(const Int_t& Stex, const Int_t& StexStin)
02520 {
02521 Double_t IVecoMin = (Double_t)0.;
02522 if(fFlagSubDet == "EB" ){IVecoMin = GetPhiMin(Stex, StexStin);}
02523 if(fFlagSubDet == "EE" ){IVecoMin = GetJIYMin(Stex, StexStin);}
02524 return IVecoMin;
02525 }
02526
02527 Double_t TEcnaNumbering::GetVecoMax(const Int_t& Stex, const Int_t& StexStin)
02528 {
02529 Double_t IVecoMax = (Double_t)0.;
02530 if(fFlagSubDet == "EB" ){IVecoMax = GetPhiMax(Stex, StexStin);}
02531 if(fFlagSubDet == "EE" ){IVecoMax = GetJIYMax(Stex, StexStin);}
02532 return IVecoMax;
02533 }
02534
02535 Double_t TEcnaNumbering::GetJVecoMin(const Int_t& Stex, const Int_t& StexStin)
02536 {
02537 Double_t JVecoMin = (Double_t)0.;
02538 if(fFlagSubDet == "EB" ){JVecoMin = GetJPhiMin(Stex, StexStin);}
02539 if(fFlagSubDet == "EE" ){JVecoMin = GetJIYMin(Stex, StexStin);}
02540 return JVecoMin;
02541 }
02542 Double_t TEcnaNumbering::GetJVecoMax(const Int_t& Stex, const Int_t& StexStin)
02543 {
02544 Double_t JVecoMax = (Double_t)0.;
02545 if(fFlagSubDet == "EB" ){JVecoMax = GetJPhiMax(Stex, StexStin);}
02546 if(fFlagSubDet == "EE" ){JVecoMax = GetJIYMax(Stex, StexStin);}
02547 return JVecoMax;
02548 }
02549
02550
02551
02552
02553
02554 TString TEcnaNumbering::GetStexHalfStas(const Int_t& SMNumber)
02555 {
02556 TString half_stas = "EB? EE?";
02557
02558 if( fFlagSubDet == "EB" ){half_stas = GetSMHalfBarrel(SMNumber);}
02559 if( fFlagSubDet == "EE" ){half_stas = GetDeeHalfEndcap(SMNumber);}
02560
02561 return half_stas;
02562 }
02563
02564
02565
02566
02567
02568 Int_t TEcnaNumbering::GetSMFromFED(const Int_t& FEDNumber)
02569 {
02570 Int_t EBSMNumber = 0;
02571 if( FEDNumber >= 610 && FEDNumber <= 645 ){EBSMNumber = FEDNumber - 609;}
02572 return EBSMNumber;
02573 }
02574
02575 Int_t TEcnaNumbering::GetDSFromFED(const Int_t& FEDNumber)
02576 {
02577 Int_t EEDSNumber = 0;
02578
02579 if( FEDNumber >= 600 && FEDNumber <= 609 ){EEDSNumber = FEDNumber - 599;}
02580 if( FEDNumber >= 646 && FEDNumber <= 655 ){EEDSNumber = FEDNumber - 645;}
02581
02582 return EEDSNumber;
02583 }
02584
02585
02586 Int_t TEcnaNumbering::MaxCrysInStinEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna, const TString& s_option)
02587 {
02588
02589
02590
02591 Int_t max_crys = fEcal->MaxCrysInStin();
02592
02593
02594
02595 if(fFlagSubDet == "EE")
02596 {
02597 Int_t n_for_cons = GetDeeSCConsFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
02598
02599
02600 if( n_for_cons == 12 || n_for_cons == 67 || n_for_cons == 75 || n_for_cons == 137 ||
02601 n_for_cons == 161 || n_for_cons == 216 || n_for_cons == 224 || n_for_cons == 286 ){max_crys = 20;}
02602
02603
02604 if( (n_for_cons == 182 || n_for_cons == 33) && (n1DeeSCEcna == 60 || n1DeeSCEcna == 119) ){max_crys = 10;}
02605
02606 if( (n_for_cons == 178 || n_for_cons == 29) && (n1DeeSCEcna == 138 || n1DeeSCEcna == 157) ){max_crys = 10;}
02607 if( (n_for_cons == 207 || n_for_cons == 58) && (n1DeeSCEcna == 176 || n1DeeSCEcna == 193) ){max_crys = 10;}
02608
02609 if( (n_for_cons == 298 || n_for_cons == 149) && (n1DeeSCEcna == 188) ){max_crys = 10;}
02610
02611 if( (n_for_cons == 261 || n_for_cons == 112) && (n1DeeSCEcna == 144 || n1DeeSCEcna == 165) ){max_crys = 10;}
02612 if( (n_for_cons == 268 || n_for_cons == 119) && (n1DeeSCEcna == 102 || n1DeeSCEcna == 123) ){max_crys = 10;}
02613
02614 if( (n_for_cons == 281 || n_for_cons == 132) && (n1DeeSCEcna == 41) ){max_crys = 10;}
02615
02616
02617 if( s_option == "TEcnaRun" || s_option == "TEcnaRead" )
02618 {
02619 if( s_option == "TEcnaRun" )
02620 {
02621
02622 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 ){max_crys = 5;}
02623 if( n1DeeSCEcna == 10 || n1DeeSCEcna == 11 ){max_crys = 1;}
02624 }
02625 if( s_option == "TEcnaRead" )
02626 {
02627
02628 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 ){max_crys = 5;}
02629 if( n1DeeSCEcna == 10 || n1DeeSCEcna == 11 ){max_crys = 1;}
02630 }
02631 }
02632 else
02633 {
02634 cout << "!TEcnaNumbering::MaxCrysInStinEcna(...)> " << s_option
02635 << ": unknown option." << fTTBELL << endl;
02636 }
02637 }
02638 return max_crys;
02639 }