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 Int_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
00952
00953
00954
00955
00956
00957
00958
00959
00960
00961
00962
00963 void TEcnaNumbering::BuildEndcapCrysTable()
00964 {
00965
00966
00967
00968
00969
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984 if ( fT3dDeeCrys == 0 )
00985 {
00986 Int_t MaxDeeSC = fEcal->MaxSCEcnaInDee();
00987 Int_t MaxSCEcha = fEcal->MaxCrysInSC();
00988 Int_t MaxDeeCrys = fEcal->MaxCrysEcnaInDee();
00989
00990 Int_t MaxDirections = 2;
00991
00992
00993 fT3dDeeCrys = new Int_t**[MaxDeeSC]; fCnew++;
00994 fT2dDeeCrys = new Int_t*[MaxDeeSC*MaxSCEcha]; fCnew++;
00995 fT1dDeeCrys = new Int_t[MaxDeeSC*MaxSCEcha*MaxDirections]; fCnew++;
00996
00997 for(Int_t i_DeeSC = 0; i_DeeSC < MaxDeeSC; i_DeeSC++){
00998 fT3dDeeCrys[i_DeeSC] = &fT2dDeeCrys[0] + i_DeeSC*MaxSCEcha;
00999 for(Int_t i_SCEcha = 0; i_SCEcha < MaxSCEcha; i_SCEcha++){
01000 fT2dDeeCrys[i_DeeSC*MaxSCEcha + i_SCEcha] = &fT1dDeeCrys[0]
01001 + (i_DeeSC*MaxSCEcha + i_SCEcha)*MaxDirections;}}
01002 for(Int_t i=0; i<MaxDeeSC; i++)
01003 {for(Int_t j=0; j<MaxSCEcha; j++)
01004 {for(Int_t k=0; k<MaxDirections; k++){fT3dDeeCrys[i][j][k]=0;}}}
01005
01006 fT2dDeeSC = new Int_t*[MaxDeeCrys]; fCnew++;
01007 fT1dDeeSC = new Int_t[MaxDeeCrys*MaxDirections]; fCnew++;
01008 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxDeeCrys ; i_DeeCrys++){
01009 fT2dDeeSC[i_DeeCrys] = &fT1dDeeSC[0] + i_DeeCrys*MaxDirections;}
01010 for(Int_t i=0; i<MaxDeeCrys; i++)
01011 {for(Int_t j=0; j<MaxDirections; j++){fT2dDeeSC[i][j]=0;}}
01012
01013 fT2dSCEcha = new Int_t*[MaxDeeCrys]; fCnew++;
01014 fT1dSCEcha = new Int_t[MaxDeeCrys*MaxDirections]; fCnew++;
01015 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxDeeCrys ; i_DeeCrys++){
01016 fT2dSCEcha[i_DeeCrys] = &fT1dSCEcha[0] + i_DeeCrys*MaxDirections;}
01017 for(Int_t i=0; i<MaxDeeCrys; i++)
01018 {for(Int_t j=0; j<MaxDirections; j++){fT2dSCEcha[i][j]=0;}}
01019
01020
01021 Int_t MaxTyp = (Int_t)4;
01022 Int_t MaxCrysP1 = (Int_t)(fEcal->MaxCrysInSC()+1);
01023
01024
01025 fT2d_jch_JY = new Int_t*[MaxTyp]; fCnew++;
01026 fT1d_jch_JY = new Int_t[MaxTyp*MaxCrysP1]; fCnew++;
01027 for(Int_t i_MaxTyp = 0 ; i_MaxTyp < MaxTyp ; i_MaxTyp++){
01028 fT2d_jch_JY[i_MaxTyp] = &fT1d_jch_JY[0] + i_MaxTyp*MaxCrysP1;}
01029
01030
01031
01032
01033 for(Int_t k= 5;k>= 1;k--){fT2d_jch_JY[0][k] = 4;}
01034 for(Int_t k=10;k>= 6;k--){fT2d_jch_JY[0][k] = 3;}
01035 for(Int_t k=15;k>=11;k--){fT2d_jch_JY[0][k] = 2;}
01036 for(Int_t k=20;k>=16;k--){fT2d_jch_JY[0][k] = 1;}
01037 for(Int_t k=25;k>=21;k--){fT2d_jch_JY[0][k] = 0;}
01038
01039 for(Int_t k= 5;k>= 1;k--){fT2d_jch_JY[1][k] = 5-k;}
01040 for(Int_t k=10;k>= 6;k--){fT2d_jch_JY[1][k] = 10-k;}
01041 for(Int_t k=15;k>=11;k--){fT2d_jch_JY[1][k] = 15-k;}
01042 for(Int_t k=20;k>=16;k--){fT2d_jch_JY[1][k] = 20-k;}
01043 for(Int_t k=25;k>=21;k--){fT2d_jch_JY[1][k] = 25-k;}
01044
01045 for(Int_t k= 1;k<=5; k++){fT2d_jch_JY[2][k] = 0;}
01046 for(Int_t k= 6;k<=10;k++){fT2d_jch_JY[2][k] = 1;}
01047 for(Int_t k=11;k<=15;k++){fT2d_jch_JY[2][k] = 2;}
01048 for(Int_t k=16;k<=20;k++){fT2d_jch_JY[2][k] = 3;}
01049 for(Int_t k=21;k<=25;k++){fT2d_jch_JY[2][k] = 4;}
01050
01051 for(Int_t k= 1;k<=5; k++){fT2d_jch_JY[3][k] = k-1;}
01052 for(Int_t k= 6;k<=10;k++){fT2d_jch_JY[3][k] = k-6;}
01053 for(Int_t k=11;k<=15;k++){fT2d_jch_JY[3][k] = k-11;}
01054 for(Int_t k=16;k<=20;k++){fT2d_jch_JY[3][k] = k-16;}
01055 for(Int_t k=21;k<=25;k++){fT2d_jch_JY[3][k] = k-21;}
01056
01057
01058 fT2d_ich_IX = new Int_t*[MaxTyp]; fCnew++;
01059 fT1d_ich_IX = new Int_t[MaxTyp*MaxCrysP1]; fCnew++;
01060 for(Int_t i_MaxTyp = 0 ; i_MaxTyp < MaxTyp ; i_MaxTyp++){
01061 fT2d_ich_IX[i_MaxTyp] = &fT1d_ich_IX[0] + i_MaxTyp*MaxCrysP1;}
01062
01063
01064 for(Int_t k= 5;k>= 1;k--){fT2d_ich_IX[0][k] = 5-k;}
01065 for(Int_t k=10;k>= 6;k--){fT2d_ich_IX[0][k] = 10-k;}
01066 for(Int_t k=15;k>=11;k--){fT2d_ich_IX[0][k] = 15-k;}
01067 for(Int_t k=20;k>=16;k--){fT2d_ich_IX[0][k] = 20-k;}
01068 for(Int_t k=25;k>=21;k--){fT2d_ich_IX[0][k] = 25-k;}
01069
01070 for(Int_t k= 5;k>= 1;k--){fT2d_ich_IX[1][k] = 4;}
01071 for(Int_t k=10;k>= 6;k--){fT2d_ich_IX[1][k] = 3;}
01072 for(Int_t k=15;k>=11;k--){fT2d_ich_IX[1][k] = 2;}
01073 for(Int_t k=20;k>=16;k--){fT2d_ich_IX[1][k] = 1;}
01074 for(Int_t k=25;k>=21;k--){fT2d_ich_IX[1][k] = 0;}
01075
01076 for(Int_t k=1; k<=5; k++){fT2d_ich_IX[2][k] = 5-k;}
01077 for(Int_t k=6; k<=10;k++){fT2d_ich_IX[2][k] = 10-k;}
01078 for(Int_t k=11;k<=15;k++){fT2d_ich_IX[2][k] = 15-k;}
01079 for(Int_t k=16;k<=20;k++){fT2d_ich_IX[2][k] = 20-k;}
01080 for(Int_t k=21;k<=25;k++){fT2d_ich_IX[2][k] = 25-k;}
01081
01082 for(Int_t k= 1;k<= 5;k++){fT2d_ich_IX[3][k] = 4;}
01083 for(Int_t k= 6;k<=10;k++){fT2d_ich_IX[3][k] = 3;}
01084 for(Int_t k=11;k<=15;k++){fT2d_ich_IX[3][k] = 2;}
01085 for(Int_t k=16;k<=20;k++){fT2d_ich_IX[3][k] = 1;}
01086 for(Int_t k=21;k<=25;k++){fT2d_ich_IX[3][k] = 0;}
01087
01088
01089 Int_t Nb_DeeSC_JY = fEcal->MaxSCIYInDee();
01090 Int_t** type = new Int_t*[Nb_DeeSC_JY]; fCnew++;
01091 Int_t* type_d1 = new Int_t[Nb_DeeSC_JY*MaxDirections]; fCnew++;
01092 for(Int_t i_DeeSC_JY = 0 ; i_DeeSC_JY < Nb_DeeSC_JY ; i_DeeSC_JY++){
01093 type[i_DeeSC_JY] = &type_d1[0] + i_DeeSC_JY*MaxDirections;}
01094
01095
01096
01097
01098
01099 type[10][0] = 0;
01100 type[11][0] = 0;
01101 type[12][0] = 0;
01102 type[13][0] = 0;
01103 type[14][0] = 0;
01104 type[15][0] = 0;
01105 type[16][0] = 0;
01106 type[17][0] = 0;
01107 type[18][0] = 0;
01108 type[19][0] = 0;
01109
01110 type[10][1] = 1;
01111 type[11][1] = 1;
01112 type[12][1] = 1;
01113 type[13][1] = 1;
01114 type[14][1] = 1;
01115 type[15][1] = 1;
01116 type[16][1] = 1;
01117 type[17][1] = 1;
01118 type[18][1] = 1;
01119 type[19][1] = 1;
01120
01121 type[ 0][1] = 2;
01122 type[ 1][1] = 2;
01123 type[ 2][1] = 2;
01124 type[ 3][1] = 2;
01125 type[ 4][1] = 2;
01126 type[ 5][1] = 2;
01127 type[ 6][1] = 2;
01128 type[ 7][1] = 2;
01129 type[ 8][1] = 2;
01130 type[ 9][1] = 2;
01131
01132 type[ 0][0] = 3;
01133 type[ 1][0] = 3;
01134 type[ 2][0] = 3;
01135 type[ 3][0] = 3;
01136 type[ 4][0] = 3;
01137 type[ 5][0] = 3;
01138 type[ 6][0] = 3;
01139 type[ 7][0] = 3;
01140 type[ 8][0] = 3;
01141 type[ 9][0] = 3;
01142
01143 Int_t Nb_SCCrys_IX = fEcal->MaxCrysIXInSC();
01144 Int_t Nb_SCCrys_JY = fEcal->MaxCrysIYInSC();
01145
01146 for(Int_t kSC=0; kSC<MaxDeeSC; kSC++)
01147 {
01148 for(Int_t n_Echa=1; n_Echa<=MaxSCEcha; n_Echa++)
01149 {
01150 for(Int_t idir=0; idir<2; idir++)
01151 {
01152 Int_t ikSC = kSC / Nb_DeeSC_JY;
01153 Int_t jkSC = kSC % Nb_DeeSC_JY;
01154
01155 Int_t icrys = ikSC*Nb_SCCrys_IX + fT2d_ich_IX[type[jkSC][idir]][n_Echa];
01156
01157
01158
01159
01160 Int_t jcrys = jkSC*Nb_SCCrys_JY + fT2d_jch_JY[type[jkSC][idir]][n_Echa];
01161
01162
01163
01164
01165 Int_t n_DeeCrys = icrys*Nb_DeeSC_JY*Nb_SCCrys_JY+jcrys+1;
01166
01167 fT3dDeeCrys[kSC][n_Echa-1][idir] = n_DeeCrys;
01168 fT2dDeeSC[n_DeeCrys-1][idir] = kSC+1;
01169 fT2dSCEcha[n_DeeCrys-1][idir] = n_Echa;
01170 }
01171 }
01172 }
01173
01174
01175 delete [] type; fCdelete++;
01176 delete [] type_d1; fCdelete++;
01177 }
01178 else
01179 {
01180
01181 }
01182 }
01183
01184 void TEcnaNumbering::BuildEndcapSCTable()
01185 {
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203 Int_t MaxEEDee = fEcal->MaxDeeInEE();
01204 Int_t MaxDeeSC = fEcal->MaxSCEcnaInDee();
01205 Int_t MaxEESCForCons = 2*fEcal->MaxSCForConsInDee();
01206
01207 fT2d_DS = new Int_t*[MaxEEDee]; fCnew++;
01208 fT1d_DS = new Int_t[MaxEEDee*MaxDeeSC]; fCnew++;
01209 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01210 fT2d_DS[i_DeeCrys] = &fT1d_DS[0] + i_DeeCrys*MaxDeeSC;}
01211 for(Int_t i=0; i<MaxEEDee; i++)
01212 {for(Int_t j=0; j<MaxDeeSC; j++){fT2d_DS[i][j]=0;}}
01213
01214 fT2d_DSSC = new Int_t*[MaxEEDee]; fCnew++;
01215 fT1d_DSSC = new Int_t[MaxEEDee*MaxDeeSC]; fCnew++;
01216 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01217 fT2d_DSSC[i_DeeCrys] = &fT1d_DSSC[0] + i_DeeCrys*MaxDeeSC;}
01218 for(Int_t i=0; i<MaxEEDee; i++)
01219 {for(Int_t j=0; j<MaxDeeSC; j++){fT2d_DSSC[i][j]=0;}}
01220
01221 fT2d_DeeSCCons = new Int_t*[MaxEEDee]; fCnew++;
01222 fT1d_DeeSCCons = new Int_t[MaxEEDee*MaxDeeSC]; fCnew++;
01223 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01224 fT2d_DeeSCCons[i_DeeCrys] = &fT1d_DeeSCCons[0] + i_DeeCrys*MaxDeeSC;}
01225 for(Int_t i=0; i<MaxEEDee; i++)
01226 {for(Int_t j=0; j<MaxDeeSC; j++){fT2d_DeeSCCons[i][j]=0;}}
01227
01228 fT2d_RecovDeeSC = new Int_t*[MaxEEDee]; fCnew++;
01229 fT1d_RecovDeeSC = new Int_t[MaxEEDee*MaxEESCForCons]; fCnew++;
01230 for(Int_t i_DeeCrys = 0 ; i_DeeCrys < MaxEEDee ; i_DeeCrys++){
01231 fT2d_RecovDeeSC[i_DeeCrys] = &fT1d_RecovDeeSC[0] + i_DeeCrys*MaxEESCForCons;}
01232 for(Int_t i=0; i<MaxEEDee; i++)
01233 {for(Int_t j=0; j<MaxEESCForCons; j++){fT2d_RecovDeeSC[i][j]=0;}}
01234
01235
01236
01237
01238 Int_t ids = 0;
01239
01240
01241 for(Int_t dee = 1; dee<=4; dee++)
01242 {
01243 if( dee == 1 || dee == 4 ){ids = 1;}
01244 if( dee == 2 || dee == 3 ){ids = 9;}
01245 for(Int_t isc= 13; isc<= 20; isc++)fT2d_DS[dee-1][isc-1] = ids;
01246 for(Int_t isc= 33; isc<= 40; isc++)fT2d_DS[dee-1][isc-1] = ids;
01247 for(Int_t isc= 54; isc<= 60; isc++)fT2d_DS[dee-1][isc-1] = ids;
01248 for(Int_t isc= 75; isc<= 79; isc++)fT2d_DS[dee-1][isc-1] = ids;
01249 for(Int_t isc= 96; isc<= 99; isc++)fT2d_DS[dee-1][isc-1] = ids;
01250 for(Int_t isc=118; isc<=119; isc++)fT2d_DS[dee-1][isc-1] = ids;
01251 }
01252
01253 for(Int_t dee = 1; dee<=4; dee++)
01254 {
01255 if( dee == 1 || dee == 4 ){ids = 2;}
01256 if( dee == 2 || dee == 3 ){ids = 8;}
01257 for(Int_t isc= 32; isc<= 32; isc++)fT2d_DS[dee-1][isc-1] = ids;
01258 for(Int_t isc= 51; isc<= 53; isc++)fT2d_DS[dee-1][isc-1] = ids;
01259 for(Int_t isc= 72; isc<= 74; isc++)fT2d_DS[dee-1][isc-1] = ids;
01260 for(Int_t isc= 92; isc<= 95; isc++)fT2d_DS[dee-1][isc-1] = ids;
01261 for(Int_t isc=112; isc<=117; isc++)fT2d_DS[dee-1][isc-1] = ids;
01262 for(Int_t isc=132; isc<=138; isc++)fT2d_DS[dee-1][isc-1] = ids;
01263 for(Int_t isc=152; isc<=157; isc++)fT2d_DS[dee-1][isc-1] = ids;
01264 for(Int_t isc=173; isc<=176; isc++)fT2d_DS[dee-1][isc-1] = ids;
01265 for(Int_t isc=193; isc<=193; isc++)fT2d_DS[dee-1][isc-1] = ids;
01266 }
01267
01268 for(Int_t dee = 1; dee<=4; dee++)
01269 {
01270 if( dee == 1 || dee == 4 ){ids = 3;}
01271 if( dee == 2 || dee == 3 ){ids = 7;}
01272 for(Int_t isc= 50; isc<= 50; isc++)fT2d_DS[dee-1][isc-1] = ids;
01273 for(Int_t isc= 69; isc<= 71; isc++)fT2d_DS[dee-1][isc-1] = ids;
01274 for(Int_t isc= 88; isc<= 91; isc++)fT2d_DS[dee-1][isc-1] = ids;
01275 for(Int_t isc=108; isc<=111; isc++)fT2d_DS[dee-1][isc-1] = ids;
01276 for(Int_t isc=127; isc<=131; isc++)fT2d_DS[dee-1][isc-1] = ids;
01277 for(Int_t isc=147; isc<=151; isc++)fT2d_DS[dee-1][isc-1] = ids;
01278 for(Int_t isc=166; isc<=172; isc++)fT2d_DS[dee-1][isc-1] = ids;
01279 for(Int_t isc=188; isc<=192; isc++)fT2d_DS[dee-1][isc-1] = ids;
01280 }
01281
01282 for(Int_t dee = 1; dee<=4; dee++)
01283 {
01284 if( dee == 1 || dee == 4 ){ids = 4;}
01285 if( dee == 2 || dee == 3 ){ids = 6;}
01286 for(Int_t isc= 27; isc<= 29; isc++)fT2d_DS[dee-1][isc-1] = ids;
01287 for(Int_t isc= 44; isc<= 49; isc++)fT2d_DS[dee-1][isc-1] = ids;
01288 for(Int_t isc= 62; isc<= 68; isc++)fT2d_DS[dee-1][isc-1] = ids;
01289 for(Int_t isc= 82; isc<= 87; isc++)fT2d_DS[dee-1][isc-1] = ids;
01290 for(Int_t isc=102; isc<=107; isc++)fT2d_DS[dee-1][isc-1] = ids;
01291 for(Int_t isc=123; isc<=126; isc++)fT2d_DS[dee-1][isc-1] = ids;
01292 for(Int_t isc=144; isc<=146; isc++)fT2d_DS[dee-1][isc-1] = ids;
01293 for(Int_t isc=165; isc<=165; isc++)fT2d_DS[dee-1][isc-1] = ids;
01294 }
01295
01296 for(Int_t dee = 1; dee<=4; dee++)
01297 {
01298 for(Int_t isc= 1; isc<= 8; isc++)fT2d_DS[dee-1][isc-1] = 5;
01299 for(Int_t isc= 21; isc<= 26; isc++)fT2d_DS[dee-1][isc-1] = 5;
01300 for(Int_t isc= 41; isc<= 43; isc++)fT2d_DS[dee-1][isc-1] = 5;
01301 }
01302
01303
01304
01305 for(Int_t dee=1; dee<=4; dee++)
01306 {
01307 for(Int_t isc=1; isc<=MaxDeeSC; isc++)
01308 {fT2d_DSSC[dee-1][isc-1] = -1;}
01309
01310 fT2d_DSSC[dee-1][13-1] = 12;
01311 fT2d_DSSC[dee-1][14-1] = 11;
01312 fT2d_DSSC[dee-1][15-1] = 10;
01313 fT2d_DSSC[dee-1][16-1] = 9;
01314 fT2d_DSSC[dee-1][17-1] = 4;
01315 fT2d_DSSC[dee-1][18-1] = 3;
01316 fT2d_DSSC[dee-1][19-1] = 2;
01317 fT2d_DSSC[dee-1][20-1] = 1;
01318
01319 fT2d_DSSC[dee-1][33-1] = 16;
01320 fT2d_DSSC[dee-1][34-1] = 15;
01321 fT2d_DSSC[dee-1][35-1] = 14;
01322 fT2d_DSSC[dee-1][36-1] = 13;
01323 fT2d_DSSC[dee-1][37-1] = 8;
01324 fT2d_DSSC[dee-1][38-1] = 7;
01325 fT2d_DSSC[dee-1][39-1] = 6;
01326 fT2d_DSSC[dee-1][40-1] = 5;
01327
01328 fT2d_DSSC[dee-1][54-1] = 33;
01329 fT2d_DSSC[dee-1][55-1] = 31;
01330 fT2d_DSSC[dee-1][56-1] = 27;
01331 fT2d_DSSC[dee-1][57-1] = 24;
01332 fT2d_DSSC[dee-1][58-1] = 20;
01333 fT2d_DSSC[dee-1][59-1] = 17;
01334 fT2d_DSSC[dee-1][60-1] = 30;
01335
01336 fT2d_DSSC[dee-1][75-1] = 32;
01337 fT2d_DSSC[dee-1][76-1] = 28;
01338 fT2d_DSSC[dee-1][77-1] = 25;
01339 fT2d_DSSC[dee-1][78-1] = 21;
01340 fT2d_DSSC[dee-1][79-1] = 18;
01341
01342 fT2d_DSSC[dee-1][96-1] = 29;
01343 fT2d_DSSC[dee-1][97-1] = 26;
01344 fT2d_DSSC[dee-1][98-1] = 22;
01345 fT2d_DSSC[dee-1][99-1] = 19;
01346
01347 fT2d_DSSC[dee-1][118-1] = 23;
01348 fT2d_DSSC[dee-1][119-1] = 30;
01349
01350
01351 fT2d_DSSC[dee-1][32-1] = 25;
01352
01353 fT2d_DSSC[dee-1][51-1] = 32;
01354 fT2d_DSSC[dee-1][52-1] = 26;
01355 fT2d_DSSC[dee-1][53-1] = 18;
01356
01357 fT2d_DSSC[dee-1][72-1] = 27;
01358 fT2d_DSSC[dee-1][73-1] = 19;
01359 fT2d_DSSC[dee-1][74-1] = 12;
01360
01361 fT2d_DSSC[dee-1][92-1] = 28;
01362 fT2d_DSSC[dee-1][93-1] = 20;
01363 fT2d_DSSC[dee-1][94-1] = 13;
01364 fT2d_DSSC[dee-1][95-1] = 7;
01365
01366 fT2d_DSSC[dee-1][112-1] = 29;
01367 fT2d_DSSC[dee-1][113-1] = 21;
01368 fT2d_DSSC[dee-1][114-1] = 14;
01369 fT2d_DSSC[dee-1][115-1] = 8;
01370 fT2d_DSSC[dee-1][116-1] = 4;
01371 fT2d_DSSC[dee-1][117-1] = 1;
01372
01373 fT2d_DSSC[dee-1][132-1] = 30;
01374 fT2d_DSSC[dee-1][133-1] = 22;
01375 fT2d_DSSC[dee-1][134-1] = 15;
01376 fT2d_DSSC[dee-1][135-1] = 9;
01377 fT2d_DSSC[dee-1][136-1] = 5;
01378 fT2d_DSSC[dee-1][137-1] = 2;
01379 fT2d_DSSC[dee-1][138-1] = 3;
01380
01381 fT2d_DSSC[dee-1][152-1] = 31;
01382 fT2d_DSSC[dee-1][153-1] = 23;
01383 fT2d_DSSC[dee-1][154-1] = 16;
01384 fT2d_DSSC[dee-1][155-1] = 10;
01385 fT2d_DSSC[dee-1][156-1] = 6;
01386 fT2d_DSSC[dee-1][157-1] = 3;
01387
01388 fT2d_DSSC[dee-1][173-1] = 24;
01389 fT2d_DSSC[dee-1][174-1] = 17;
01390 fT2d_DSSC[dee-1][175-1] = 11;
01391 fT2d_DSSC[dee-1][176-1] = 25;
01392
01393 fT2d_DSSC[dee-1][193-1] = 25;
01394
01395
01396 fT2d_DSSC[dee-1][50-1] = 10;
01397
01398 fT2d_DSSC[dee-1][69-1] = 18;
01399 fT2d_DSSC[dee-1][70-1] = 11;
01400 fT2d_DSSC[dee-1][71-1] = 3;
01401
01402 fT2d_DSSC[dee-1][88-1] = 25;
01403 fT2d_DSSC[dee-1][89-1] = 19;
01404 fT2d_DSSC[dee-1][90-1] = 12;
01405 fT2d_DSSC[dee-1][91-1] = 4;
01406
01407 fT2d_DSSC[dee-1][108-1] = 26;
01408 fT2d_DSSC[dee-1][109-1] = 20;
01409 fT2d_DSSC[dee-1][110-1] = 13;
01410 fT2d_DSSC[dee-1][111-1] = 5;
01411
01412 fT2d_DSSC[dee-1][127-1] = 31;
01413 fT2d_DSSC[dee-1][128-1] = 27;
01414 fT2d_DSSC[dee-1][129-1] = 21;
01415 fT2d_DSSC[dee-1][130-1] = 14;
01416 fT2d_DSSC[dee-1][131-1] = 6;
01417
01418 fT2d_DSSC[dee-1][147-1] = 32;
01419 fT2d_DSSC[dee-1][148-1] = 28;
01420 fT2d_DSSC[dee-1][149-1] = 22;
01421 fT2d_DSSC[dee-1][150-1] = 15;
01422 fT2d_DSSC[dee-1][151-1] = 7;
01423
01424 fT2d_DSSC[dee-1][166-1] = 33;
01425 fT2d_DSSC[dee-1][167-1] = 30;
01426 fT2d_DSSC[dee-1][168-1] = 29;
01427 fT2d_DSSC[dee-1][169-1] = 23;
01428 fT2d_DSSC[dee-1][170-1] = 16;
01429 fT2d_DSSC[dee-1][171-1] = 8;
01430 fT2d_DSSC[dee-1][172-1] = 1;
01431
01432 fT2d_DSSC[dee-1][188-1] = 34;
01433 fT2d_DSSC[dee-1][189-1] = 24;
01434 fT2d_DSSC[dee-1][190-1] = 17;
01435 fT2d_DSSC[dee-1][191-1] = 9;
01436 fT2d_DSSC[dee-1][192-1] = 2;
01437
01438
01439 fT2d_DSSC[dee-1][27-1] = 33;
01440 fT2d_DSSC[dee-1][28-1] = 32;
01441 fT2d_DSSC[dee-1][29-1] = 14;
01442
01443 fT2d_DSSC[dee-1][44-1] = 22;
01444 fT2d_DSSC[dee-1][45-1] = 15;
01445 fT2d_DSSC[dee-1][46-1] = 8;
01446 fT2d_DSSC[dee-1][47-1] = 4;
01447 fT2d_DSSC[dee-1][48-1] = 2;
01448 fT2d_DSSC[dee-1][49-1] = 1;
01449
01450 fT2d_DSSC[dee-1][62-1] = 29;
01451 fT2d_DSSC[dee-1][63-1] = 28;
01452 fT2d_DSSC[dee-1][64-1] = 23;
01453 fT2d_DSSC[dee-1][65-1] = 16;
01454 fT2d_DSSC[dee-1][66-1] = 9;
01455 fT2d_DSSC[dee-1][67-1] = 5;
01456 fT2d_DSSC[dee-1][68-1] = 3;
01457
01458 fT2d_DSSC[dee-1][82-1] = 31;
01459 fT2d_DSSC[dee-1][83-1] = 30;
01460 fT2d_DSSC[dee-1][84-1] = 24;
01461 fT2d_DSSC[dee-1][85-1] = 17;
01462 fT2d_DSSC[dee-1][86-1] = 10;
01463 fT2d_DSSC[dee-1][87-1] = 6;
01464
01465 fT2d_DSSC[dee-1][102-1] = 21;
01466 fT2d_DSSC[dee-1][103-1] = 27;
01467 fT2d_DSSC[dee-1][104-1] = 25;
01468 fT2d_DSSC[dee-1][105-1] = 18;
01469 fT2d_DSSC[dee-1][106-1] = 11;
01470 fT2d_DSSC[dee-1][107-1] = 7;
01471
01472 fT2d_DSSC[dee-1][123-1] = 21;
01473 fT2d_DSSC[dee-1][124-1] = 26;
01474 fT2d_DSSC[dee-1][125-1] = 19;
01475 fT2d_DSSC[dee-1][126-1] = 12;
01476
01477 fT2d_DSSC[dee-1][144-1] = 14;
01478 fT2d_DSSC[dee-1][145-1] = 20;
01479 fT2d_DSSC[dee-1][146-1] = 13;
01480
01481 fT2d_DSSC[dee-1][165-1] = 14;
01482
01483
01484 if(dee == 1 || dee == 3)
01485 {
01486 fT2d_DSSC[dee-1][1-1] = 34;
01487 fT2d_DSSC[dee-1][2-1] = 33;
01488 fT2d_DSSC[dee-1][3-1] = 32;
01489 fT2d_DSSC[dee-1][4-1] = 31;
01490 fT2d_DSSC[dee-1][5-1] = 26;
01491 fT2d_DSSC[dee-1][6-1] = 25;
01492 fT2d_DSSC[dee-1][7-1] = 24;
01493 fT2d_DSSC[dee-1][8-1] = 23;
01494
01495 fT2d_DSSC[dee-1][21-1] = 30;
01496 fT2d_DSSC[dee-1][22-1] = 29;
01497 fT2d_DSSC[dee-1][23-1] = 28;
01498 fT2d_DSSC[dee-1][24-1] = 27;
01499 fT2d_DSSC[dee-1][25-1] = 22;
01500 fT2d_DSSC[dee-1][26-1] = 21;
01501
01502 fT2d_DSSC[dee-1][41-1] = 20;
01503 fT2d_DSSC[dee-1][42-1] = 19;
01504 fT2d_DSSC[dee-1][43-1] = 18;
01505 }
01506
01507 if(dee == 2 || dee == 4)
01508 {
01509 fT2d_DSSC[dee-1][1-1] = 17;
01510 fT2d_DSSC[dee-1][2-1] = 16;
01511 fT2d_DSSC[dee-1][3-1] = 15;
01512 fT2d_DSSC[dee-1][4-1] = 14;
01513 fT2d_DSSC[dee-1][5-1] = 9;
01514 fT2d_DSSC[dee-1][6-1] = 8;
01515 fT2d_DSSC[dee-1][7-1] = 7;
01516 fT2d_DSSC[dee-1][8-1] = 6;
01517
01518 fT2d_DSSC[dee-1][21-1] = 13;
01519 fT2d_DSSC[dee-1][22-1] = 12;
01520 fT2d_DSSC[dee-1][23-1] = 11;
01521 fT2d_DSSC[dee-1][24-1] = 10;
01522 fT2d_DSSC[dee-1][25-1] = 5;
01523 fT2d_DSSC[dee-1][26-1] = 4;
01524
01525 fT2d_DSSC[dee-1][41-1] = 3;
01526 fT2d_DSSC[dee-1][42-1] = 2;
01527 fT2d_DSSC[dee-1][43-1] = 1;
01528 }
01529 }
01530
01531
01532
01533
01534 for(Int_t dee=1; dee<=4; dee++)
01535 {for(Int_t isc=1; isc<=MaxDeeSC; isc++)
01536 {fT2d_DeeSCCons[dee-1][isc-1] = -1;}}
01537
01538 for(Int_t i_dee_type=1; i_dee_type<=2; i_dee_type++)
01539 {
01540 Int_t dee = -1;
01541 if( i_dee_type == 1 ){dee = 1;}
01542 if( i_dee_type == 2 ){dee = 3;}
01543
01544
01545
01546 fT2d_DeeSCCons[dee-1][13-1] = 161; fT2d_DeeSCCons[dee][13-1] = 12;
01547 fT2d_DeeSCCons[dee-1][14-1] = 160; fT2d_DeeSCCons[dee][14-1] = 11;
01548 fT2d_DeeSCCons[dee-1][15-1] = 159; fT2d_DeeSCCons[dee][15-1] = 10;
01549 fT2d_DeeSCCons[dee-1][16-1] = 158; fT2d_DeeSCCons[dee][16-1] = 9;
01550 fT2d_DeeSCCons[dee-1][17-1] = 153; fT2d_DeeSCCons[dee][17-1] = 4;
01551 fT2d_DeeSCCons[dee-1][18-1] = 152; fT2d_DeeSCCons[dee][18-1] = 3;
01552 fT2d_DeeSCCons[dee-1][19-1] = 151; fT2d_DeeSCCons[dee][19-1] = 2;
01553 fT2d_DeeSCCons[dee-1][20-1] = 150; fT2d_DeeSCCons[dee][20-1] = 1;
01554
01555 fT2d_DeeSCCons[dee-1][33-1] = 165; fT2d_DeeSCCons[dee][33-1] = 16;
01556 fT2d_DeeSCCons[dee-1][34-1] = 164; fT2d_DeeSCCons[dee][34-1] = 15;
01557 fT2d_DeeSCCons[dee-1][35-1] = 163; fT2d_DeeSCCons[dee][35-1] = 14;
01558 fT2d_DeeSCCons[dee-1][36-1] = 162; fT2d_DeeSCCons[dee][36-1] = 13;
01559 fT2d_DeeSCCons[dee-1][37-1] = 157; fT2d_DeeSCCons[dee][37-1] = 8;
01560 fT2d_DeeSCCons[dee-1][38-1] = 156; fT2d_DeeSCCons[dee][38-1] = 7;
01561 fT2d_DeeSCCons[dee-1][39-1] = 155; fT2d_DeeSCCons[dee][39-1] = 6;
01562 fT2d_DeeSCCons[dee-1][40-1] = 154; fT2d_DeeSCCons[dee][40-1] = 5;
01563
01564 fT2d_DeeSCCons[dee-1][54-1] = 193; fT2d_DeeSCCons[dee][54-1] = 44;
01565 fT2d_DeeSCCons[dee-1][55-1] = 186; fT2d_DeeSCCons[dee][55-1] = 37;
01566 fT2d_DeeSCCons[dee-1][56-1] = 179; fT2d_DeeSCCons[dee][56-1] = 30;
01567 fT2d_DeeSCCons[dee-1][57-1] = 173; fT2d_DeeSCCons[dee][57-1] = 24;
01568 fT2d_DeeSCCons[dee-1][58-1] = 169; fT2d_DeeSCCons[dee][58-1] = 20;
01569 fT2d_DeeSCCons[dee-1][59-1] = 166; fT2d_DeeSCCons[dee][59-1] = 17;
01570 fT2d_DeeSCCons[dee-1][60-1] = 182; fT2d_DeeSCCons[dee][60-1] = 33;
01571
01572 fT2d_DeeSCCons[dee-1][75-1] = 187; fT2d_DeeSCCons[dee][75-1] = 38;
01573 fT2d_DeeSCCons[dee-1][76-1] = 180; fT2d_DeeSCCons[dee][76-1] = 31;
01574 fT2d_DeeSCCons[dee-1][77-1] = 174; fT2d_DeeSCCons[dee][77-1] = 25;
01575 fT2d_DeeSCCons[dee-1][78-1] = 170; fT2d_DeeSCCons[dee][78-1] = 21;
01576 fT2d_DeeSCCons[dee-1][79-1] = 167; fT2d_DeeSCCons[dee][79-1] = 18;
01577
01578 fT2d_DeeSCCons[dee-1][96-1] = 181; fT2d_DeeSCCons[dee][96-1] = 32;
01579 fT2d_DeeSCCons[dee-1][97-1] = 175; fT2d_DeeSCCons[dee][97-1] = 26;
01580 fT2d_DeeSCCons[dee-1][98-1] = 171; fT2d_DeeSCCons[dee][98-1] = 22;
01581 fT2d_DeeSCCons[dee-1][99-1] = 168; fT2d_DeeSCCons[dee][99-1] = 19;
01582
01583 fT2d_DeeSCCons[dee-1][118-1] = 172; fT2d_DeeSCCons[dee][118-1] = 23;
01584 fT2d_DeeSCCons[dee-1][119-1] = 182; fT2d_DeeSCCons[dee][119-1] = 33;
01585
01586
01587 fT2d_DeeSCCons[dee-1][32-1] = 178; fT2d_DeeSCCons[dee][32-1] = 29;
01588
01589 fT2d_DeeSCCons[dee-1][51-1] = 216; fT2d_DeeSCCons[dee][51-1] = 67;
01590 fT2d_DeeSCCons[dee-1][52-1] = 208; fT2d_DeeSCCons[dee][52-1] = 59;
01591 fT2d_DeeSCCons[dee-1][53-1] = 200; fT2d_DeeSCCons[dee][53-1] = 51;
01592
01593 fT2d_DeeSCCons[dee-1][72-1] = 209; fT2d_DeeSCCons[dee][72-1] = 60;
01594 fT2d_DeeSCCons[dee-1][73-1] = 201; fT2d_DeeSCCons[dee][73-1] = 52;
01595 fT2d_DeeSCCons[dee-1][74-1] = 194; fT2d_DeeSCCons[dee][74-1] = 45;
01596
01597 fT2d_DeeSCCons[dee-1][92-1] = 210; fT2d_DeeSCCons[dee][92-1] = 61;
01598 fT2d_DeeSCCons[dee-1][93-1] = 202; fT2d_DeeSCCons[dee][93-1] = 53;
01599 fT2d_DeeSCCons[dee-1][94-1] = 195; fT2d_DeeSCCons[dee][94-1] = 46;
01600 fT2d_DeeSCCons[dee-1][95-1] = 188; fT2d_DeeSCCons[dee][95-1] = 39;
01601
01602 fT2d_DeeSCCons[dee-1][112-1] = 211; fT2d_DeeSCCons[dee][112-1] = 62;
01603 fT2d_DeeSCCons[dee-1][113-1] = 203; fT2d_DeeSCCons[dee][113-1] = 54;
01604 fT2d_DeeSCCons[dee-1][114-1] = 196; fT2d_DeeSCCons[dee][114-1] = 47;
01605 fT2d_DeeSCCons[dee-1][115-1] = 189; fT2d_DeeSCCons[dee][115-1] = 40;
01606 fT2d_DeeSCCons[dee-1][116-1] = 183; fT2d_DeeSCCons[dee][116-1] = 34;
01607 fT2d_DeeSCCons[dee-1][117-1] = 176; fT2d_DeeSCCons[dee][117-1] = 27;
01608
01609 fT2d_DeeSCCons[dee-1][132-1] = 212; fT2d_DeeSCCons[dee][132-1] = 63;
01610 fT2d_DeeSCCons[dee-1][133-1] = 204; fT2d_DeeSCCons[dee][133-1] = 55;
01611 fT2d_DeeSCCons[dee-1][134-1] = 197; fT2d_DeeSCCons[dee][134-1] = 48;
01612 fT2d_DeeSCCons[dee-1][135-1] = 190; fT2d_DeeSCCons[dee][135-1] = 41;
01613 fT2d_DeeSCCons[dee-1][136-1] = 184; fT2d_DeeSCCons[dee][136-1] = 35;
01614 fT2d_DeeSCCons[dee-1][137-1] = 177; fT2d_DeeSCCons[dee][137-1] = 28;
01615 fT2d_DeeSCCons[dee-1][138-1] = 178; fT2d_DeeSCCons[dee][138-1] = 29;
01616
01617 fT2d_DeeSCCons[dee-1][152-1] = 213; fT2d_DeeSCCons[dee][152-1] = 64;
01618 fT2d_DeeSCCons[dee-1][153-1] = 205; fT2d_DeeSCCons[dee][153-1] = 56;
01619 fT2d_DeeSCCons[dee-1][154-1] = 198; fT2d_DeeSCCons[dee][154-1] = 49;
01620 fT2d_DeeSCCons[dee-1][155-1] = 191; fT2d_DeeSCCons[dee][155-1] = 42;
01621 fT2d_DeeSCCons[dee-1][156-1] = 185; fT2d_DeeSCCons[dee][156-1] = 36;
01622 fT2d_DeeSCCons[dee-1][157-1] = 178; fT2d_DeeSCCons[dee][157-1] = 29;
01623
01624 fT2d_DeeSCCons[dee-1][173-1] = 206; fT2d_DeeSCCons[dee][173-1] = 57;
01625 fT2d_DeeSCCons[dee-1][174-1] = 199; fT2d_DeeSCCons[dee][174-1] = 50;
01626 fT2d_DeeSCCons[dee-1][175-1] = 192; fT2d_DeeSCCons[dee][175-1] = 43;
01627 fT2d_DeeSCCons[dee-1][176-1] = 207; fT2d_DeeSCCons[dee][176-1] = 58;
01628
01629 fT2d_DeeSCCons[dee-1][193-1] = 207; fT2d_DeeSCCons[dee][193-1] = 58;
01630
01631
01632 fT2d_DeeSCCons[dee-1][50-1] = 224; fT2d_DeeSCCons[dee][50-1] = 75;
01633
01634 fT2d_DeeSCCons[dee-1][69-1] = 233; fT2d_DeeSCCons[dee][69-1] = 84;
01635 fT2d_DeeSCCons[dee-1][70-1] = 225; fT2d_DeeSCCons[dee][70-1] = 76;
01636 fT2d_DeeSCCons[dee-1][71-1] = 217; fT2d_DeeSCCons[dee][71-1] = 68;
01637
01638 fT2d_DeeSCCons[dee-1][88-1] = 242; fT2d_DeeSCCons[dee][88-1] = 93;
01639 fT2d_DeeSCCons[dee-1][89-1] = 234; fT2d_DeeSCCons[dee][89-1] = 85;
01640 fT2d_DeeSCCons[dee-1][90-1] = 226; fT2d_DeeSCCons[dee][90-1] = 77;
01641 fT2d_DeeSCCons[dee-1][91-1] = 218; fT2d_DeeSCCons[dee][91-1] = 69;
01642
01643 fT2d_DeeSCCons[dee-1][108-1] = 243; fT2d_DeeSCCons[dee][108-1] = 94;
01644 fT2d_DeeSCCons[dee-1][109-1] = 235; fT2d_DeeSCCons[dee][109-1] = 86;
01645 fT2d_DeeSCCons[dee-1][110-1] = 227; fT2d_DeeSCCons[dee][110-1] = 78;
01646 fT2d_DeeSCCons[dee-1][111-1] = 219; fT2d_DeeSCCons[dee][111-1] = 70;
01647
01648 fT2d_DeeSCCons[dee-1][127-1] = 252; fT2d_DeeSCCons[dee][127-1] = 103;
01649 fT2d_DeeSCCons[dee-1][128-1] = 244; fT2d_DeeSCCons[dee][128-1] = 95;
01650 fT2d_DeeSCCons[dee-1][129-1] = 236; fT2d_DeeSCCons[dee][129-1] = 87;
01651 fT2d_DeeSCCons[dee-1][130-1] = 228; fT2d_DeeSCCons[dee][130-1] = 79;
01652 fT2d_DeeSCCons[dee-1][131-1] = 220; fT2d_DeeSCCons[dee][131-1] = 71;
01653
01654 fT2d_DeeSCCons[dee-1][147-1] = 253; fT2d_DeeSCCons[dee][147-1] = 104;
01655 fT2d_DeeSCCons[dee-1][148-1] = 245; fT2d_DeeSCCons[dee][148-1] = 96;
01656 fT2d_DeeSCCons[dee-1][149-1] = 237; fT2d_DeeSCCons[dee][149-1] = 88;
01657 fT2d_DeeSCCons[dee-1][150-1] = 229; fT2d_DeeSCCons[dee][150-1] = 80;
01658 fT2d_DeeSCCons[dee-1][151-1] = 221; fT2d_DeeSCCons[dee][151-1] = 72;
01659
01660 fT2d_DeeSCCons[dee-1][166-1] = 254; fT2d_DeeSCCons[dee][166-1] = 105;
01661 fT2d_DeeSCCons[dee-1][167-1] = 247; fT2d_DeeSCCons[dee][167-1] = 98;
01662 fT2d_DeeSCCons[dee-1][168-1] = 246; fT2d_DeeSCCons[dee][168-1] = 97;
01663 fT2d_DeeSCCons[dee-1][169-1] = 238; fT2d_DeeSCCons[dee][169-1] = 89;
01664 fT2d_DeeSCCons[dee-1][170-1] = 230; fT2d_DeeSCCons[dee][170-1] = 81;
01665 fT2d_DeeSCCons[dee-1][171-1] = 222; fT2d_DeeSCCons[dee][171-1] = 73;
01666 fT2d_DeeSCCons[dee-1][172-1] = 214; fT2d_DeeSCCons[dee][172-1] = 65;
01667
01668 fT2d_DeeSCCons[dee-1][188-1] = 298; fT2d_DeeSCCons[dee][188-1] = 149;
01669 fT2d_DeeSCCons[dee-1][189-1] = 239; fT2d_DeeSCCons[dee][189-1] = 90;
01670 fT2d_DeeSCCons[dee-1][190-1] = 231; fT2d_DeeSCCons[dee][190-1] = 82;
01671 fT2d_DeeSCCons[dee-1][191-1] = 223; fT2d_DeeSCCons[dee][191-1] = 74;
01672 fT2d_DeeSCCons[dee-1][192-1] = 215; fT2d_DeeSCCons[dee][192-1] = 66;
01673
01674
01675 fT2d_DeeSCCons[dee-1][29-1] = 261; fT2d_DeeSCCons[dee][29-1] = 112;
01676 fT2d_DeeSCCons[dee-1][27-1] = 283; fT2d_DeeSCCons[dee][27-1] = 134;
01677 fT2d_DeeSCCons[dee-1][28-1] = 282; fT2d_DeeSCCons[dee][28-1] = 133;
01678
01679 fT2d_DeeSCCons[dee-1][44-1] = 269; fT2d_DeeSCCons[dee][44-1] = 120;
01680 fT2d_DeeSCCons[dee-1][45-1] = 262; fT2d_DeeSCCons[dee][45-1] = 113;
01681 fT2d_DeeSCCons[dee-1][46-1] = 255; fT2d_DeeSCCons[dee][46-1] = 106;
01682 fT2d_DeeSCCons[dee-1][47-1] = 248; fT2d_DeeSCCons[dee][47-1] = 99;
01683 fT2d_DeeSCCons[dee-1][48-1] = 240; fT2d_DeeSCCons[dee][48-1] = 91;
01684 fT2d_DeeSCCons[dee-1][49-1] = 232; fT2d_DeeSCCons[dee][49-1] = 83;
01685
01686 fT2d_DeeSCCons[dee-1][62-1] = 276; fT2d_DeeSCCons[dee][62-1] = 127;
01687 fT2d_DeeSCCons[dee-1][63-1] = 275; fT2d_DeeSCCons[dee][63-1] = 126;
01688 fT2d_DeeSCCons[dee-1][64-1] = 270; fT2d_DeeSCCons[dee][64-1] = 121;
01689 fT2d_DeeSCCons[dee-1][65-1] = 263; fT2d_DeeSCCons[dee][65-1] = 114;
01690 fT2d_DeeSCCons[dee-1][66-1] = 256; fT2d_DeeSCCons[dee][66-1] = 107;
01691 fT2d_DeeSCCons[dee-1][67-1] = 249; fT2d_DeeSCCons[dee][67-1] = 100;
01692 fT2d_DeeSCCons[dee-1][68-1] = 241; fT2d_DeeSCCons[dee][68-1] = 92;
01693
01694 fT2d_DeeSCCons[dee-1][82-1] = 278; fT2d_DeeSCCons[dee][82-1] = 129;
01695 fT2d_DeeSCCons[dee-1][83-1] = 277; fT2d_DeeSCCons[dee][83-1] = 128;
01696 fT2d_DeeSCCons[dee-1][84-1] = 271; fT2d_DeeSCCons[dee][84-1] = 122;
01697 fT2d_DeeSCCons[dee-1][85-1] = 264; fT2d_DeeSCCons[dee][85-1] = 115;
01698 fT2d_DeeSCCons[dee-1][86-1] = 257; fT2d_DeeSCCons[dee][86-1] = 108;
01699 fT2d_DeeSCCons[dee-1][87-1] = 250; fT2d_DeeSCCons[dee][87-1] = 101;
01700
01701 fT2d_DeeSCCons[dee-1][102-1] = 268; fT2d_DeeSCCons[dee][102-1] = 119;
01702 fT2d_DeeSCCons[dee-1][103-1] = 274; fT2d_DeeSCCons[dee][103-1] = 125;
01703 fT2d_DeeSCCons[dee-1][104-1] = 272; fT2d_DeeSCCons[dee][104-1] = 123;
01704 fT2d_DeeSCCons[dee-1][105-1] = 265; fT2d_DeeSCCons[dee][105-1] = 116;
01705 fT2d_DeeSCCons[dee-1][106-1] = 258; fT2d_DeeSCCons[dee][106-1] = 109;
01706 fT2d_DeeSCCons[dee-1][107-1] = 251; fT2d_DeeSCCons[dee][107-1] = 102;
01707
01708 fT2d_DeeSCCons[dee-1][123-1] = 268; fT2d_DeeSCCons[dee][123-1] = 119;
01709 fT2d_DeeSCCons[dee-1][124-1] = 273; fT2d_DeeSCCons[dee][124-1] = 124;
01710 fT2d_DeeSCCons[dee-1][125-1] = 266; fT2d_DeeSCCons[dee][125-1] = 117;
01711 fT2d_DeeSCCons[dee-1][126-1] = 259; fT2d_DeeSCCons[dee][126-1] = 110;
01712
01713 fT2d_DeeSCCons[dee-1][144-1] = 261; fT2d_DeeSCCons[dee][144-1] = 112;
01714 fT2d_DeeSCCons[dee-1][145-1] = 267; fT2d_DeeSCCons[dee][145-1] = 118;
01715 fT2d_DeeSCCons[dee-1][146-1] = 260; fT2d_DeeSCCons[dee][146-1] = 111;
01716
01717 fT2d_DeeSCCons[dee-1][165-1] = 261; fT2d_DeeSCCons[dee][165-1] = 112;
01718
01719
01720 fT2d_DeeSCCons[dee-1][1-1] = 297;
01721 fT2d_DeeSCCons[dee-1][2-1] = 296;
01722 fT2d_DeeSCCons[dee-1][3-1] = 295;
01723 fT2d_DeeSCCons[dee-1][4-1] = 294;
01724 fT2d_DeeSCCons[dee-1][5-1] = 289;
01725 fT2d_DeeSCCons[dee-1][6-1] = 288;
01726 fT2d_DeeSCCons[dee-1][7-1] = 287;
01727 fT2d_DeeSCCons[dee-1][8-1] = 286;
01728
01729 fT2d_DeeSCCons[dee-1][21-1] = 293;
01730 fT2d_DeeSCCons[dee-1][22-1] = 292;
01731 fT2d_DeeSCCons[dee-1][23-1] = 291;
01732 fT2d_DeeSCCons[dee-1][24-1] = 290;
01733 fT2d_DeeSCCons[dee-1][25-1] = 285;
01734 fT2d_DeeSCCons[dee-1][26-1] = 284;
01735
01736 fT2d_DeeSCCons[dee-1][41-1] = 281;
01737 fT2d_DeeSCCons[dee-1][42-1] = 280;
01738 fT2d_DeeSCCons[dee-1][43-1] = 279;
01739
01740
01741 fT2d_DeeSCCons[dee][1-1] = 148;
01742 fT2d_DeeSCCons[dee][2-1] = 147;
01743 fT2d_DeeSCCons[dee][3-1] = 146;
01744 fT2d_DeeSCCons[dee][4-1] = 145;
01745 fT2d_DeeSCCons[dee][5-1] = 140;
01746 fT2d_DeeSCCons[dee][6-1] = 139;
01747 fT2d_DeeSCCons[dee][7-1] = 138;
01748 fT2d_DeeSCCons[dee][8-1] = 137;
01749
01750 fT2d_DeeSCCons[dee][21-1] = 144;
01751 fT2d_DeeSCCons[dee][22-1] = 143;
01752 fT2d_DeeSCCons[dee][23-1] = 142;
01753 fT2d_DeeSCCons[dee][24-1] = 141;
01754 fT2d_DeeSCCons[dee][25-1] = 136;
01755 fT2d_DeeSCCons[dee][26-1] = 135;
01756
01757 fT2d_DeeSCCons[dee][41-1] = 132;
01758 fT2d_DeeSCCons[dee][42-1] = 131;
01759 fT2d_DeeSCCons[dee][43-1] = 130;
01760 }
01761
01762
01763
01764 for(Int_t i0EEDee=0; i0EEDee<MaxEEDee; i0EEDee++)
01765 {
01766 for(Int_t i_ecna=0; i_ecna<MaxDeeSC; i_ecna++)
01767 {
01768
01769
01770 if( fT2d_DeeSCCons[i0EEDee][i_ecna] >= 0 && fT2d_DeeSCCons[i0EEDee][i_ecna] <= MaxEESCForCons )
01771 {
01772 fT2d_RecovDeeSC[i0EEDee][fT2d_DeeSCCons[i0EEDee][i_ecna]-1] = i_ecna+1;
01773 }
01774 }
01775 }
01776 }
01777
01778
01779
01780
01781
01782
01783
01784
01785 Int_t TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(const Int_t& n1DeeSCEcna,
01786 const Int_t& i0SCEcha,
01787 const TString sDeeDir)
01788 {
01789
01790
01791
01792 Int_t n1DeeCrys = 0;
01793 Int_t i0DeeDir = GetDeeDirIndex(sDeeDir);
01794
01795 if( fT3dDeeCrys == 0 ){BuildEndcapCrysTable();}
01796
01797 if( (n1DeeSCEcna >= 1) && (n1DeeSCEcna <= fEcal->MaxSCEcnaInDee()) )
01798 {
01799 if (i0SCEcha >=0 && i0SCEcha < fEcal->MaxCrysInSC())
01800 {
01801 n1DeeCrys = fT3dDeeCrys[n1DeeSCEcna-1][i0SCEcha][i0DeeDir];
01802 }
01803 else
01804 {
01805 n1DeeCrys = -2;
01806 cout << "!TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(...)> Electronic Channel in SuperCrystal = "
01807 << i0SCEcha+1 << ". Out of range (range = [1," << fEcal->MaxCrysInSC() << "])" << fTTBELL << endl;
01808 }
01809 }
01810 else
01811 {
01812 n1DeeCrys = -3;
01813 cout << "!TEcnaNumbering::Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(...)> Super-Crystal number in Dee out of range."
01814 << " n1DeeSCEcna = " << n1DeeSCEcna << fTTBELL << endl;
01815 }
01816
01817 return n1DeeCrys;
01818 }
01819
01820
01821
01822
01823
01824
01825
01826 Int_t TEcnaNumbering::Get1SCEchaFrom1DeeCrys(const Int_t& n1DeeCrys, const TString sDeeDir)
01827 {
01828
01829
01830 Int_t n1SCEcha = -1;
01831 Int_t iDeeDir = GetDeeDirIndex(sDeeDir);
01832
01833 if( n1DeeCrys >= 1 && n1DeeCrys <= fEcal->MaxCrysEcnaInDee() )
01834 {
01835 n1SCEcha = fT2dSCEcha[n1DeeCrys-1][iDeeDir];
01836 }
01837 else
01838 {
01839 n1SCEcha = -2;
01840 cout << "!TEcnaNumbering::Get1SCEchaFrom1DeeCrys(...)> Crystal number in Dee out of range."
01841 << " n1DeeCrys = " << n1DeeCrys << "(max = " << fEcal->MaxCrysEcnaInDee() << ")" << fTTBELL << endl;
01842 }
01843 return n1SCEcha;
01844 }
01845
01846 Int_t TEcnaNumbering::Get1DeeSCEcnaFrom1DeeCrys(const Int_t& n1DeeCrys, const TString sDeeDir)
01847 {
01848
01849
01850 Int_t n1DeeSCEcna = 0;
01851 Int_t iDeeDir = GetDeeDirIndex(sDeeDir);
01852
01853 if( n1DeeCrys >= 1 && n1DeeCrys <= fEcal->MaxCrysEcnaInDee() )
01854 {
01855 n1DeeSCEcna = fT2dDeeSC[n1DeeCrys-1][iDeeDir];
01856 }
01857 else
01858 {
01859 n1DeeSCEcna = -1;
01860 cout << "!TEcnaNumbering::Get1DeeSCEcnaFrom1DeeCrys(...)> Crystal number in Dee out of range."
01861 << " n1DeeCrys = " << n1DeeCrys << "(max = " << fEcal->MaxCrysEcnaInDee() << ")" << fTTBELL << endl;
01862 }
01863 return n1DeeSCEcna;
01864 }
01865
01866
01867
01868
01869
01870
01871
01872
01873 Int_t TEcnaNumbering::Get1SCEchaFrom0DeeEcha(const Int_t& i0DeeEcha)
01874 {
01875
01876
01877 Int_t i0DeeSC = i0DeeEcha/fEcal->MaxCrysInSC();
01878 Int_t n1SCEcha = i0DeeEcha - fEcal->MaxCrysInSC()*i0DeeSC + 1;
01879
01880 return n1SCEcha;
01881 }
01882
01883 Int_t TEcnaNumbering::Get1DeeSCEcnaFrom0DeeEcha(const Int_t& i0DeeEcha)
01884 {
01885
01886
01887 Int_t n1DeeSC = i0DeeEcha/fEcal->MaxCrysInSC()+1;
01888
01889 return n1DeeSC;
01890 }
01891
01892
01893
01894
01895
01896
01897
01898
01899
01900
01901
01902
01903 Int_t TEcnaNumbering::GetDSFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna)
01904 {
01905
01906
01907 Int_t data_sector = -1;
01908
01909 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
01910 {
01911 if( n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee() )
01912 {
01913 data_sector = fT2d_DS[n1DeeNumber-1][n1DeeSCEcna-1];
01914 }
01915 else
01916 {
01917 cout << "!TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> n1DeeSCEcna = " << n1DeeSCEcna
01918 << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] )"
01919 << fTTBELL << endl;
01920 }
01921 }
01922 else
01923 {
01924 if( n1DeeNumber != 0 )
01925 {
01926 cout << "!TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
01927 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
01928 << fTTBELL << endl;
01929 }
01930 else
01931 {
01932 cout << "TEcnaNumbering::GetDSFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
01933 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
01934 << fTTBELL << endl;
01935 }
01936 }
01937 return data_sector;
01938 }
01939
01940 Int_t TEcnaNumbering::GetDSSCFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna,
01941 const Int_t& n1SCEcha)
01942 {
01943
01944 Int_t ds_sc = GetDSSCFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
01945
01946 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 )
01947 {
01948 if( n1SCEcha == 11 )
01949 {
01950 if( ds_sc == 14 ){ds_sc= 21;}
01951 }
01952 if( n1SCEcha == 1 || n1SCEcha == 2 || n1SCEcha == 3 ||
01953 n1SCEcha == 6 || n1SCEcha == 7 )
01954 {
01955 if( ds_sc == 3 ){ds_sc = 25;}
01956 }
01957 }
01958 return ds_sc;
01959 }
01960
01961 Int_t TEcnaNumbering::GetDSSCFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna)
01962 {
01963
01964
01965 Int_t ds_sc = -1;
01966
01967 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
01968 {
01969 if( n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee() )
01970 {
01971 ds_sc = fT2d_DSSC[n1DeeNumber-1][n1DeeSCEcna-1];
01972
01973 }
01974 else
01975 {
01976 cout << "!TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> n1DeeSCEcna = " << n1DeeSCEcna
01977 << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee() << "] )"
01978 << fTTBELL << endl;
01979 }
01980 }
01981 else
01982 {
01983 if( n1DeeNumber != 0 )
01984 {
01985 cout << "!TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
01986 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
01987 << fTTBELL << endl;
01988 }
01989 else
01990 {
01991 cout << "TEcnaNumbering::GetDSSCFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
01992 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
01993 << fTTBELL << endl;
01994 }
01995 }
01996 return ds_sc;
01997 }
01998
01999 Int_t TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna)
02000 {
02001
02002
02003 Int_t dee_sc_cons = -1;
02004
02005 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
02006 {
02007 if( n1DeeSCEcna > 0 && n1DeeSCEcna <= fEcal->MaxSCEcnaInDee() )
02008 {
02009 dee_sc_cons = fT2d_DeeSCCons[n1DeeNumber-1][n1DeeSCEcna-1];
02010 }
02011 else
02012 {
02013 cout << "!TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> *** WARNING *** n1DeeSCEcna = " << n1DeeSCEcna
02014 << ". Out of range ( range = [1," << fEcal->MaxSCEcnaInDee()
02015 << "] ). Nb for const. forced to " << fT2d_DeeSCCons[n1DeeNumber-1][19] << "." << endl;
02016 dee_sc_cons = fT2d_DeeSCCons[n1DeeNumber-1][19];
02017 }
02018 }
02019 else
02020 {
02021 if( n1DeeNumber != 0 )
02022 {
02023 cout << "!TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> n1DeeNumber = " << n1DeeNumber
02024 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
02025 << fTTBELL << endl;
02026 }
02027 else
02028 {
02029 cout << "TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(...)> Dee = " << n1DeeNumber
02030 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
02031 << fTTBELL << endl;
02032 }
02033 }
02034 return dee_sc_cons;
02035 }
02036
02037 Int_t TEcnaNumbering::GetDeeSCConsFrom1DeeSCEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna,
02038 const Int_t& n1SCEcha)
02039 {
02040
02041 Int_t dee_sc_cons = GetDeeSCConsFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
02042
02043 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 )
02044 {
02045 if( n1SCEcha == 11 )
02046 {
02047 if( dee_sc_cons == 261 ){dee_sc_cons = 268;}
02048 if( dee_sc_cons == 112 ){dee_sc_cons = 119;}
02049 }
02050 if( n1SCEcha == 1 || n1SCEcha == 2 || n1SCEcha == 3 ||
02051 n1SCEcha == 6 || n1SCEcha == 7 )
02052 {
02053 if( dee_sc_cons == 178 ){dee_sc_cons = 207;}
02054 if( dee_sc_cons == 29 ){dee_sc_cons = 58;}
02055 }
02056 }
02057 return dee_sc_cons;
02058 }
02059
02060 Int_t TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(const Int_t& n1DeeNumber, const Int_t& DeeSCCons)
02061 {
02062
02063
02064 Int_t dee_sc_ecna = -1;
02065
02066 if( n1DeeNumber > 0 && n1DeeNumber <= fEcal->MaxDeeInEE() )
02067 {
02068 Int_t off_set_cons = 0;
02069 if( n1DeeNumber == 1 || n1DeeNumber == 3 ){off_set_cons = fEcal->MaxSCForConsInDee();}
02070
02071 if( DeeSCCons > off_set_cons && DeeSCCons <= fEcal->MaxSCForConsInDee()+off_set_cons )
02072 {
02073 dee_sc_ecna = fT2d_RecovDeeSC[n1DeeNumber-1][DeeSCCons-1];
02074 }
02075 else
02076 {
02077 cout << "!TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> DeeSCCons = " << DeeSCCons
02078 << ". Out of range ( range = [ " << off_set_cons+1
02079 << "," << fEcal->MaxSCForConsInDee()+off_set_cons << "] )"
02080 << fTTBELL << endl;
02081 }
02082 }
02083 else
02084 {
02085 if( n1DeeNumber != 0 )
02086 {
02087 cout << "!TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> n1DeeNumber = " << n1DeeNumber
02088 << ". Out of range ( range = [1," << fEcal->MaxDeeInEE() << "] )"
02089 << fTTBELL << endl;
02090 }
02091 else
02092 {
02093 cout << "TEcnaNumbering::Get1DeeSCEcnaFromDeeSCCons(...)> Dee = " << n1DeeNumber
02094 << ". Out of range (range = [1," << fEcal->MaxDeeInEE() << "])"
02095 << fTTBELL << endl;
02096 }
02097 }
02098 return dee_sc_ecna;
02099 }
02100
02101 TString TEcnaNumbering::GetSCType(const Int_t& nb_for_cons)
02102 {
02103
02104
02105 TString SCType = "Connected";
02106
02107 if( nb_for_cons == 182 || nb_for_cons == 33 ){SCType = "NotConnected";}
02108
02109 if( nb_for_cons == 178 || nb_for_cons == 29 ){SCType = "NotConnected";}
02110 if( nb_for_cons == 207 || nb_for_cons == 58 ){SCType = "NotConnected";}
02111
02112 if( nb_for_cons == 298 || nb_for_cons == 149 ){SCType = "NotConnected";}
02113
02114 if( nb_for_cons == 261 || nb_for_cons == 112 ){SCType = "NotConnected";}
02115 if( nb_for_cons == 268 || nb_for_cons == 119 ){SCType = "NotConnected";}
02116
02117 if( nb_for_cons == 281 || nb_for_cons == 132 ){SCType = "NotConnected";}
02118
02119 if( nb_for_cons == 161 || nb_for_cons == 12 ){SCType = "NotComplete";}
02120 if( nb_for_cons == 216 || nb_for_cons == 67 ){SCType = "NotComplete";}
02121 if( nb_for_cons == 224 || nb_for_cons == 75 ){SCType = "NotComplete";}
02122 if( nb_for_cons == 286 || nb_for_cons == 137 ){SCType = "NotComplete";}
02123
02124 return SCType;
02125 }
02126
02127 Int_t TEcnaNumbering::StexEchaForCons(const Int_t& n1DeeNumber, const Int_t& i0StexEcha)
02128 {
02129 Int_t n1StexStin = Get1StexStinFrom0StexEcha(i0StexEcha);
02130 return fT2d_DeeSCCons[n1DeeNumber-1][n1StexStin-1];
02131 }
02132
02133
02134
02135
02136
02137
02138
02139
02140 TString TEcnaNumbering::GetSCQuadFrom1DeeSCEcna(const Int_t& n1DeeSCEcna)
02141 {
02142
02143
02144 TString SCQuad = "top";
02145
02146 if (n1DeeSCEcna >= 1 && n1DeeSCEcna <= 10){SCQuad = "bottom";}
02147 if (n1DeeSCEcna >= 21 && n1DeeSCEcna <= 30){SCQuad = "bottom";}
02148 if (n1DeeSCEcna >= 41 && n1DeeSCEcna <= 50){SCQuad = "bottom";}
02149 if (n1DeeSCEcna >= 61 && n1DeeSCEcna <= 70){SCQuad = "bottom";}
02150 if (n1DeeSCEcna >= 81 && n1DeeSCEcna <= 90){SCQuad = "bottom";}
02151 if (n1DeeSCEcna >= 101 && n1DeeSCEcna <= 110){SCQuad = "bottom";}
02152 if (n1DeeSCEcna >= 121 && n1DeeSCEcna <= 130){SCQuad = "bottom";}
02153 if (n1DeeSCEcna >= 141 && n1DeeSCEcna <= 150){SCQuad = "bottom";}
02154 if (n1DeeSCEcna >= 161 && n1DeeSCEcna <= 170){SCQuad = "bottom";}
02155 if (n1DeeSCEcna >= 181 && n1DeeSCEcna <= 190){SCQuad = "bottom";}
02156
02157 return SCQuad;
02158 }
02159 Int_t TEcnaNumbering::GetSCQuadTypeIndex(const TString SCQuadType, const TString sDeeDir)
02160 {
02161
02162
02163
02164 Int_t itype = 0;
02165 if ( SCQuadType == "top" && sDeeDir == "right" ){itype = 0;}
02166 if ( SCQuadType == "top" && sDeeDir == "left" ){itype = 1;}
02167 if ( SCQuadType == "bottom" && sDeeDir == "left" ){itype = 2;}
02168 if ( SCQuadType == "bottom" && sDeeDir == "right" ){itype = 3;}
02169 return itype;
02170 }
02171
02172
02173
02174
02175
02176 TString TEcnaNumbering::GetEEDeeEndcap(const Int_t& n1DeeNumber)
02177 {
02178
02179
02180 TString eetype = "EE+";
02181 if ( n1DeeNumber == 1 || n1DeeNumber == 2 ){eetype = "EE+";}
02182 if ( n1DeeNumber == 3 || n1DeeNumber == 4 ){eetype = "EE-";}
02183 return eetype;
02184 }
02185 TString TEcnaNumbering::GetEEDeeType(const Int_t& n1DeeNumber)
02186 {
02187
02188
02189 TString type = "EE+F";
02190 if ( n1DeeNumber == 1 ){type = "EE+F";}
02191 if ( n1DeeNumber == 2 ){type = "EE+N";}
02192 if ( n1DeeNumber == 3 ){type = "EE-N";}
02193 if ( n1DeeNumber == 4 ){type = "EE-F";}
02194 return type;
02195 }
02196
02197 TString TEcnaNumbering::GetDeeDirViewedFromIP(const Int_t& n1DeeNumber)
02198 {
02199
02200
02201
02202 TString sDeeDir = "right";
02203 if ( (n1DeeNumber == 1) || (n1DeeNumber == 3) ){sDeeDir = "right";}
02204 if ( (n1DeeNumber == 2) || (n1DeeNumber == 4) ){sDeeDir = "left" ;}
02205 return sDeeDir;
02206 }
02207 Int_t TEcnaNumbering::GetDeeDirIndex(const TString sDeeDir)
02208 {
02209
02210
02211
02212 Int_t iDeeDir = 0;
02213 if ( sDeeDir == "right" ){iDeeDir = 0;}
02214 if ( sDeeDir == "left" ){iDeeDir = 1;}
02215 return iDeeDir;
02216 }
02217
02218
02219
02220
02221
02222
02223
02224
02225 Int_t TEcnaNumbering::GetIXCrysInSC(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02226 const Int_t& i0SCEcha)
02227 {
02228
02229
02230 TString SCQuadType = GetSCQuadFrom1DeeSCEcna(DeeSC);
02231 TString sDeeDir = GetDeeDirViewedFromIP(n1DeeNumber);
02232 Int_t type_index = GetSCQuadTypeIndex(SCQuadType, sDeeDir);
02233 Int_t IXCrysInSC = fT2d_ich_IX[type_index][i0SCEcha+1] + 1;
02234 return IXCrysInSC;
02235 }
02236
02237 Int_t TEcnaNumbering::GetIXSCInDee(const Int_t& DeeSC)
02238 {
02239
02240
02241 Int_t IXSCInDee = (DeeSC-1)/fEcal->MaxSCIYInDee() + 1;
02242 return IXSCInDee;
02243 }
02244
02245 Int_t TEcnaNumbering::GetIXCrysInDee(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02246 const Int_t& i0SCEcha)
02247 {
02248
02249
02250 Int_t IXCrysInDee =
02251 (GetIXSCInDee(DeeSC)-1)*fEcal->MaxCrysIXInSC() +
02252 GetIXCrysInSC(n1DeeNumber, DeeSC, i0SCEcha);
02253 return IXCrysInDee;
02254 }
02255
02256 Int_t TEcnaNumbering::GetJYCrysInSC(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02257 const Int_t& i0SCEcha)
02258 {
02259
02260
02261 TString SCQuadType = GetSCQuadFrom1DeeSCEcna(DeeSC);
02262 TString sDeeDir = GetDeeDirViewedFromIP(n1DeeNumber);
02263 Int_t type_index = GetSCQuadTypeIndex(SCQuadType, sDeeDir);
02264 Int_t JYCrysInSC = fT2d_jch_JY[type_index][i0SCEcha+1] + 1;
02265 return JYCrysInSC;
02266 }
02267
02268 Int_t TEcnaNumbering::GetJYSCInDee(const Int_t& DeeSC)
02269 {
02270
02271
02272 Int_t JYSCInDee = (DeeSC-1)%fEcal->MaxSCIYInDee() + 1;
02273 return JYSCInDee;
02274 }
02275
02276 Int_t TEcnaNumbering::GetJYCrysInDee(const Int_t& n1DeeNumber, const Int_t& DeeSC,
02277 const Int_t& i0SCEcha)
02278 {
02279
02280
02281 Int_t JYCrysInDee =
02282 (GetJYSCInDee(DeeSC)-1)*fEcal->MaxCrysIYInSC() +
02283 GetJYCrysInSC(n1DeeNumber, DeeSC, i0SCEcha);
02284 return JYCrysInDee;
02285 }
02286
02287 Int_t TEcnaNumbering::GetMaxSCInDS(const Int_t& DeeDS)
02288 {
02289
02290
02291 Int_t nb_of_sc = -1;
02292 if( DeeDS == 1 || DeeDS == 9 ){nb_of_sc = 33;}
02293 if( DeeDS == 2 || DeeDS == 8 ){nb_of_sc = 32;}
02294 if( DeeDS == 3 || DeeDS == 7 ){nb_of_sc = 34;}
02295 if( DeeDS == 4 || DeeDS == 6 ){nb_of_sc = 33;}
02296 if( DeeDS == 5){nb_of_sc = 34;}
02297 return nb_of_sc;
02298 }
02299
02300
02301
02302
02303
02304
02305
02306 Double_t TEcnaNumbering::GetIIXMin(const Int_t& DeeSC)
02307 {
02308
02309
02310 Double_t IX_min = (Double_t)((DeeSC-1)/fEcal->MaxSCIYInDee())*fEcal->MaxCrysIXInSC() + 1.;
02311 return IX_min;
02312 }
02313
02314 Double_t TEcnaNumbering::GetIIXMax(const Int_t& DeeSC)
02315 {
02316
02317
02318 Double_t IX_max = ((Double_t)((DeeSC-1)/fEcal->MaxSCIYInDee())+1.)*fEcal->MaxCrysIXInSC();
02319 return IX_max;
02320 }
02321
02322 Double_t TEcnaNumbering::GetIIXMin()
02323 {
02324
02325
02326 Double_t i_IX_min = (Int_t)1.;
02327 return i_IX_min;
02328 }
02329
02330 Double_t TEcnaNumbering::GetIIXMax()
02331 {
02332
02333
02334 Double_t i_IX_max = (Int_t)fEcal->MaxSCIXInDee();
02335 return i_IX_max;
02336 }
02337
02338
02339
02340
02341
02342
02343 Double_t TEcnaNumbering::GetJIYMin(const Int_t& n1DeeNumber, const Int_t& DeeSC)
02344 {
02345
02346
02347 Double_t IY_DeeSC = DeeSC%fEcal->MaxSCIYInDee();
02348 if( IY_DeeSC == 0. ){IY_DeeSC = fEcal->MaxSCIYInDee();}
02349
02350 Double_t j_IY_min = (IY_DeeSC-1)*fEcal->MaxCrysIYInSC() + 1.;
02351
02352 return j_IY_min;
02353 }
02354
02355 Double_t TEcnaNumbering::GetJIYMax(const Int_t& n1DeeNumber, const Int_t& DeeSC)
02356 {
02357
02358
02359 Double_t IY_DeeSC = DeeSC%fEcal->MaxSCIYInDee();
02360 if( IY_DeeSC == 0 ){IY_DeeSC = fEcal->MaxSCIYInDee();}
02361
02362 Double_t j_IY_max = IY_DeeSC*fEcal->MaxCrysIYInSC();
02363
02364 return j_IY_max;
02365 }
02366
02367
02368 Double_t TEcnaNumbering::GetJIYMin(const Int_t& n1DeeNumber)
02369 {
02370
02371
02372 Double_t j_IY_min = (Double_t)1.;
02373
02374 return j_IY_min;
02375 }
02376
02377 Double_t TEcnaNumbering::GetJIYMax(const Int_t& n1DeeNumber)
02378 {
02379
02380
02381 Double_t j_IY_max = (Double_t)fEcal->MaxSCIYInDee();
02382
02383 return j_IY_max;
02384 }
02385
02386 TString TEcnaNumbering::GetDeeHalfEndcap(const Int_t& n1DeeNumber)
02387 {
02388
02389
02390 TString type = "EE-";
02391
02392 if ( n1DeeNumber == 1 || n1DeeNumber == 2 ){type = "EE+";}
02393 if ( n1DeeNumber == 3 || n1DeeNumber == 4 ){type = "EE-";}
02394
02395 return type;
02396 }
02397
02398
02399
02400
02401
02402 TString TEcnaNumbering::GetXDirectionEE(const Int_t& n1DeeNumber)
02403 {
02404 TString xdirection = "x";
02405
02406 if( GetEEDeeType(n1DeeNumber) == "EE+F" ){xdirection = "-x";}
02407 if( GetEEDeeType(n1DeeNumber) == "EE+N" ){xdirection = "-x";}
02408 if( GetEEDeeType(n1DeeNumber) == "EE-N" ){xdirection = "x";}
02409 if( GetEEDeeType(n1DeeNumber) == "EE-F" ){xdirection = "x";}
02410
02411 return xdirection;
02412 }
02413
02414 TString TEcnaNumbering::GetYDirectionEE(const Int_t& n1DeeNumber)
02415 {
02416 TString ydirection = "-x";
02417
02418 if( GetEEDeeType(n1DeeNumber) == "endcap+" ){ydirection = "-x";}
02419 if( GetEEDeeType(n1DeeNumber) == "endcap-" ){ydirection = "-x";}
02420
02421 return ydirection;
02422 }
02423
02424
02425 TString TEcnaNumbering::GetJYDirectionEE(const Int_t& n1DeeNumber)
02426 {
02427 TString jydirection = "x";
02428 return jydirection;
02429 }
02430
02431
02432
02433
02434
02435
02436
02437
02438
02439
02440
02441
02442
02443
02444
02445
02446
02447 Int_t TEcnaNumbering::Get1StexStinFrom0StexEcha(const Int_t& i0StexEcha)
02448 {
02449 Int_t n1StexStin = 0;
02450
02451 if( fFlagSubDet == "EB" ){n1StexStin = Get1SMTowFrom0SMEcha(i0StexEcha);}
02452 if( fFlagSubDet == "EE" ){n1StexStin = Get1DeeSCEcnaFrom0DeeEcha(i0StexEcha);}
02453
02454 return n1StexStin;
02455 }
02456
02457 Int_t TEcnaNumbering::Get0StexEchaFrom1StexStinAnd0StinEcha(const Int_t& n1StexStin,
02458 const Int_t& i0StinEcha)
02459 {
02460
02461
02462
02463 Int_t StexEcha = (Int_t)(-1.);
02464
02465 if ( n1StexStin > 0 && n1StexStin <= fEcal->MaxStinEcnaInStex() &&
02466 i0StinEcha >= 0 && i0StinEcha < fEcal->MaxCrysInStin() )
02467 {StexEcha = (n1StexStin-1)*fEcal->MaxCrysInStin() + i0StinEcha;}
02468 else
02469 {
02470 cout << "!TEcnaNumbering::Get0StexEchaFrom1StexStinAnd0StinEcha *** ERROR ***> VALUE"
02471 << " OUT OF RANGE. Forced to -1. Argument values: n1StexStin = " << n1StexStin
02472 << ", channel = " << i0StinEcha
02473 << fTTBELL << endl;
02474 }
02475 return StexEcha;
02476 }
02477 Int_t TEcnaNumbering::Get1StexCrysFrom1StexStinAnd0StinEcha(const Int_t& n1StexStin,
02478 const Int_t& i0StinEcha, const Int_t& StexNumber)
02479 {
02480
02481
02482
02483
02484 Int_t n1StexCrys = (Int_t)0;
02485 if( fFlagSubDet == "EB" ){n1StexCrys = Get1SMCrysFrom1SMTowAnd0TowEcha(n1StexStin, i0StinEcha);}
02486 if( fFlagSubDet == "EE" ){TString sDeeDir = GetDeeDirViewedFromIP(StexNumber);
02487 n1StexCrys = Get1DeeCrysFrom1DeeSCEcnaAnd0SCEcha(n1StexStin, i0StinEcha, sDeeDir);}
02488
02489 return n1StexCrys;
02490 }
02491
02492
02493
02494
02495
02496
02497 Double_t TEcnaNumbering::GetIHocoMin(const Int_t& Stex, const Int_t& StexStin)
02498 {
02499 Double_t IHocoMin = (Double_t)0.;
02500 if(fFlagSubDet == "EB" ){IHocoMin = GetIEtaMin(Stex, StexStin);}
02501 if(fFlagSubDet == "EE" ){IHocoMin = GetIIXMin(StexStin);}
02502 return IHocoMin;
02503 }
02504
02505 Double_t TEcnaNumbering::GetIHocoMax(const Int_t& Stex, const Int_t& StexStin)
02506 {
02507 Double_t IHocoMax = (Double_t)0.;
02508 if(fFlagSubDet == "EB" ){IHocoMax = GetIEtaMax(Stex, StexStin);}
02509 if(fFlagSubDet == "EE" ){IHocoMax = GetIIXMax(StexStin);}
02510 return IHocoMax;
02511 }
02512
02513 Double_t TEcnaNumbering::GetVecoMin(const Int_t& Stex, const Int_t& StexStin)
02514 {
02515 Double_t IVecoMin = (Double_t)0.;
02516 if(fFlagSubDet == "EB" ){IVecoMin = GetPhiMin(Stex, StexStin);}
02517 if(fFlagSubDet == "EE" ){IVecoMin = GetJIYMin(Stex, StexStin);}
02518 return IVecoMin;
02519 }
02520
02521 Double_t TEcnaNumbering::GetVecoMax(const Int_t& Stex, const Int_t& StexStin)
02522 {
02523 Double_t IVecoMax = (Double_t)0.;
02524 if(fFlagSubDet == "EB" ){IVecoMax = GetPhiMax(Stex, StexStin);}
02525 if(fFlagSubDet == "EE" ){IVecoMax = GetJIYMax(Stex, StexStin);}
02526 return IVecoMax;
02527 }
02528
02529 Double_t TEcnaNumbering::GetJVecoMin(const Int_t& Stex, const Int_t& StexStin)
02530 {
02531 Double_t JVecoMin = (Double_t)0.;
02532 if(fFlagSubDet == "EB" ){JVecoMin = GetJPhiMin(Stex, StexStin);}
02533 if(fFlagSubDet == "EE" ){JVecoMin = GetJIYMin(Stex, StexStin);}
02534 return JVecoMin;
02535 }
02536 Double_t TEcnaNumbering::GetJVecoMax(const Int_t& Stex, const Int_t& StexStin)
02537 {
02538 Double_t JVecoMax = (Double_t)0.;
02539 if(fFlagSubDet == "EB" ){JVecoMax = GetJPhiMax(Stex, StexStin);}
02540 if(fFlagSubDet == "EE" ){JVecoMax = GetJIYMax(Stex, StexStin);}
02541 return JVecoMax;
02542 }
02543
02544
02545
02546
02547
02548 TString TEcnaNumbering::GetStexHalfStas(const Int_t& SMNumber)
02549 {
02550 TString half_stas = "EB? EE?";
02551
02552 if( fFlagSubDet == "EB" ){half_stas = GetSMHalfBarrel(SMNumber);}
02553 if( fFlagSubDet == "EE" ){half_stas = GetDeeHalfEndcap(SMNumber);}
02554
02555 return half_stas;
02556 }
02557
02558
02559
02560
02561
02562 Int_t TEcnaNumbering::GetSMFromFED(const Int_t& FEDNumber)
02563 {
02564 Int_t EBSMNumber = 0;
02565 if( FEDNumber >= 610 && FEDNumber <= 645 ){EBSMNumber = FEDNumber - 609;}
02566 return EBSMNumber;
02567 }
02568
02569 Int_t TEcnaNumbering::GetDSFromFED(const Int_t& FEDNumber)
02570 {
02571 Int_t EEDSNumber = 0;
02572
02573 if( FEDNumber >= 600 && FEDNumber <= 609 ){EEDSNumber = FEDNumber - 599;}
02574 if( FEDNumber >= 646 && FEDNumber <= 655 ){EEDSNumber = FEDNumber - 645;}
02575
02576 return EEDSNumber;
02577 }
02578
02579
02580 Int_t TEcnaNumbering::MaxCrysInStinEcna(const Int_t& n1DeeNumber, const Int_t& n1DeeSCEcna, const TString s_option)
02581 {
02582
02583
02584
02585 Int_t max_crys = fEcal->MaxCrysInStin();
02586
02587
02588
02589 if(fFlagSubDet == "EE")
02590 {
02591 Int_t n_for_cons = GetDeeSCConsFrom1DeeSCEcna(n1DeeNumber, n1DeeSCEcna);
02592
02593
02594 if( n_for_cons == 12 || n_for_cons == 67 || n_for_cons == 75 || n_for_cons == 137 ||
02595 n_for_cons == 161 || n_for_cons == 216 || n_for_cons == 224 || n_for_cons == 286 ){max_crys = 20;}
02596
02597
02598 if( (n_for_cons == 182 || n_for_cons == 33) && (n1DeeSCEcna == 60 || n1DeeSCEcna == 119) ){max_crys = 10;}
02599
02600 if( (n_for_cons == 178 || n_for_cons == 29) && (n1DeeSCEcna == 138 || n1DeeSCEcna == 157) ){max_crys = 10;}
02601 if( (n_for_cons == 207 || n_for_cons == 58) && (n1DeeSCEcna == 176 || n1DeeSCEcna == 193) ){max_crys = 10;}
02602
02603 if( (n_for_cons == 298 || n_for_cons == 149) && (n1DeeSCEcna == 188) ){max_crys = 10;}
02604
02605 if( (n_for_cons == 261 || n_for_cons == 112) && (n1DeeSCEcna == 144 || n1DeeSCEcna == 165) ){max_crys = 10;}
02606 if( (n_for_cons == 268 || n_for_cons == 119) && (n1DeeSCEcna == 102 || n1DeeSCEcna == 123) ){max_crys = 10;}
02607
02608 if( (n_for_cons == 281 || n_for_cons == 132) && (n1DeeSCEcna == 41) ){max_crys = 10;}
02609
02610
02611 if( s_option == "TEcnaRun" || s_option == "TEcnaRead" )
02612 {
02613 if( s_option == "TEcnaRun" )
02614 {
02615
02616 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 ){max_crys = 5;}
02617 if( n1DeeSCEcna == 10 || n1DeeSCEcna == 11 ){max_crys = 1;}
02618 }
02619 if( s_option == "TEcnaRead" )
02620 {
02621
02622 if( n1DeeSCEcna == 29 || n1DeeSCEcna == 32 ){max_crys = 5;}
02623 if( n1DeeSCEcna == 10 || n1DeeSCEcna == 11 ){max_crys = 1;}
02624 }
02625 }
02626 else
02627 {
02628 cout << "!TEcnaNumbering::MaxCrysInStinEcna(...)> " << s_option
02629 << ": unknown option." << fTTBELL << endl;
02630 }
02631 }
02632 return max_crys;
02633 }