00001
00002
00003
00004
00005
00013
00014
00015
00016
00017
00018
00019
00020 #include "FastSimulation/L1CaloTriggerProducer/interface/FastL1RegionMap.h"
00021
00022 FastL1RegionMap::FastL1RegionMap()
00023 {
00024 nTower = 4608;
00025 nRegion = 396;
00026
00027 }
00028
00029 FastL1RegionMap* FastL1RegionMap::theInstance = 0;
00030
00031 FastL1RegionMap*
00032 FastL1RegionMap::getL1RegionMap()
00033 {
00034 if(theInstance == 0)
00035 {
00036 theInstance = new FastL1RegionMap();
00037 }
00038 return theInstance;
00039 }
00040
00041
00042 std::pair<int, int>
00043 FastL1RegionMap::getRegionEtaPhiIndex(CaloTowerDetId tower)
00044 {
00045
00046 return FastL1RegionMap::getRegionEtaPhiIndex(std::pair<int, int>(tower.ieta(), tower.iphi()));
00047 }
00048
00049
00050 int
00051 FastL1RegionMap::getRegionTowerIndex(CaloTowerDetId tower)
00052 {
00053 return FastL1RegionMap::getRegionTowerIndex(std::pair<int, int>(tower.ieta(), tower.iphi()));
00054 }
00055
00056
00057
00058
00059
00060 std::pair<int, int>
00061 FastL1RegionMap::getRegionEtaPhiIndex(std::pair<int, int> EtaPhi)
00062 {
00064
00065
00066
00068
00069
00070
00072
00073
00074
00076
00077
00078
00079
00080 int iTwrEta = EtaPhi.first;
00081 int iTwrPhi = EtaPhi.second;
00082
00083
00084
00085 int iphi=999;
00086 int ieta=999;
00087
00088
00089 if (abs(iTwrEta)<=28) {
00090
00091
00092
00093 iphi = ((iTwrPhi + 1) / 4) % 18;
00094
00095 if (iTwrEta > 0) {
00096 ieta = (iTwrEta - 1) / 4 + 11;
00097 } else {
00098 ieta = (iTwrEta + 1) / 4 + 10;
00099 }
00100 }
00101
00102
00103 if (abs(iTwrEta)>=29 && abs(iTwrEta)<=32) {
00104 iphi = ((iTwrPhi + 1) / 4) % 18;
00105
00106 if (iTwrEta == 29) {
00107 ieta = 18;
00108 }
00109
00110 if (iTwrEta == 30) {
00111 ieta = 19;
00112 }
00113
00114 if (iTwrEta == 31) {
00115 ieta = 20;
00116 }
00117
00118 if (iTwrEta == 32) {
00119 ieta = 21;
00120 }
00121
00122 if (iTwrEta == -29) {
00123 ieta = 3;
00124 }
00125
00126 if (iTwrEta == -30) {
00127 ieta = 2;
00128 }
00129
00130 if (iTwrEta == -31) {
00131 ieta = 1;
00132 }
00133
00134 if (iTwrEta == -32) {
00135 ieta = 0;
00136 }
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165 }
00166
00167 return std::pair<int, int>(ieta, iphi);
00168 }
00169
00170
00171
00172
00173 int
00174 FastL1RegionMap::getRegionTowerIndex(std::pair<int, int> EtaPhi)
00175 {
00176 int iTwrEta = EtaPhi.first;
00177 int iTwrPhi = EtaPhi.second;
00178
00179
00180
00181
00182 int isub = 999;
00183
00184 if (abs(iTwrEta)<=41) {
00185
00186 if (iTwrEta > 0) {
00187 isub = 4*(3 - (iTwrPhi + 1) %4) + ((iTwrEta - 1) % 4) ;
00188 } else {
00189 isub = 4*(3 - (iTwrPhi + 1) %4) + (3 + (iTwrEta+1)%4) ;
00190 }
00191 }
00192
00193 return isub;
00194 }
00195
00196 int
00197 FastL1RegionMap::getRegionTowerIndex(int iEta, int iPhi)
00198 {
00199 return FastL1RegionMap::getRegionTowerIndex(std::pair<int, int>(iEta,iPhi));
00200 }
00201
00202 std::pair<int, int>
00203 FastL1RegionMap::getRegionEtaPhiIndex(int regionId)
00204 {
00205 int ieta = regionId%22;
00206 int iphi = regionId/22;
00207
00208 return std::pair<int, int>(ieta, iphi);
00209 }
00210
00211 int
00212 FastL1RegionMap::getRegionIndex(int ieta, int iphi)
00213 {
00214
00215 std::pair<int, int> ietaphi(ieta,iphi);
00216 std::pair<int, int> iep = getRegionEtaPhiIndex(ietaphi);
00217
00218 int rgnid = iep.second*22 + iep.first;
00219
00220 return rgnid;
00221 }
00222
00223 int
00224 FastL1RegionMap::getRegionIndex(CaloTowerDetId tower)
00225 {
00226 return getRegionIndex(tower.ieta(), tower.iphi());
00227 }
00228
00229
00230 void
00231 FastL1RegionMap::display() {
00232
00233 for (int iRgn=0; iRgn<396; iRgn++) {
00234 if (iRgn%22 == 0) std::cerr << std::endl;
00235 std::cerr << iRgn << " ";
00236 }
00237
00238 for (int iRgn=0; iRgn<396; iRgn++) {
00239 if (iRgn%22 == 0) std::cerr << std::endl;
00240
00241 for (int iTwr=0; iTwr<16; iTwr++) {
00242
00243 if (iTwr%4 == 0) std::cerr << " | ";
00244 std::cerr << iRgn << " ";
00245 }
00246 }
00247
00248 }
00249
00250 std::pair<double, double>
00251 FastL1RegionMap::getRegionCenterEtaPhi(int iRgn)
00252 {
00253
00254 std::pair<int, int> ep = getRegionEtaPhiIndex(iRgn);
00255
00256
00257 double eta = 999.;
00258 double phi = 999.;
00259
00260
00261 if (ep.second <= 9) {
00262
00263 phi = ep.second * 0.349065 ;
00264
00265 } else {
00266
00267 phi = (18-ep.second) * (-0.349065);
00268 }
00269
00270 if (ep.first >= 11 && ep.first <= 15 )
00271 eta = (ep.first-11)*0.349 + 0.1745;
00272
00273 if (ep.first == 16 )
00274 eta = 1.956;
00275 if (ep.first == 17 )
00276 eta = 2.586;
00277 if (ep.first == 18 )
00278 eta = 3.25;
00279 if (ep.first == 19 )
00280 eta = 3.75;
00281 if (ep.first == 20 )
00282 eta = 4.25;
00283 if (ep.first == 21 )
00284 eta = 4.75;
00285
00286 if (ep.first >= 6 && ep.first <= 10 )
00287 eta = (10-ep.first)*(-0.348) - 0.174;
00288 if (ep.first == 5 )
00289 eta = -1.956;
00290 if (ep.first == 4 )
00291 eta = -2.586;
00292 if (ep.first == 3 )
00293 eta = -3.25;
00294 if (ep.first == 2 )
00295 eta = -3.75;
00296 if (ep.first == 1 )
00297 eta = -4.25;
00298 if (ep.first == 0 )
00299 eta = -4.75;
00300
00301
00302
00303
00304
00305 return std::pair<double, double>(eta, phi);
00306 }
00307
00308
00309
00310
00311 int
00312 FastL1RegionMap::convertFromECal_to_HCal_iphi(int iphi_ecal)
00313 {
00314 int iphi = 999;
00315 if (iphi_ecal>=3)
00316 iphi = iphi_ecal - 2;
00317 else if (iphi_ecal==1 || iphi_ecal==2)
00318 iphi = 70 + iphi_ecal;
00319
00320 return iphi;
00321 }
00322
00323
00324
00325
00326 int
00327 FastL1RegionMap::convertFromHCal_to_ECal_iphi(int iphi_hcal)
00328 {
00329 int iphi = 999;
00330 if (iphi_hcal>=1 && iphi_hcal<=70)
00331 iphi = iphi_hcal + 2;
00332 else if (iphi_hcal==71 || iphi_hcal==72)
00333 iphi = iphi_hcal - 70;
00334
00335 return iphi;
00336 }
00337
00338 std::pair<int, int>
00339 FastL1RegionMap::GetTowerNorthEtaPhi(int ieta, int iphi)
00340 {
00341 if (iphi < 72)
00342 return std::pair<int, int>(ieta, iphi+1);
00343 else
00344 return std::pair<int, int>(ieta, 1);
00345 }
00346
00347 std::pair<int, int>
00348 FastL1RegionMap::GetTowerSouthEtaPhi(int ieta, int iphi)
00349 {
00350 if (iphi > 1)
00351 return std::pair<int, int>(ieta, iphi-1);
00352 else
00353 return std::pair<int, int>(ieta, 72);
00354 }
00355
00356 std::pair<int, int>
00357 FastL1RegionMap::GetTowerWestEtaPhi(int ieta, int iphi)
00358 {
00359 if (ieta == 1) return std::pair<int, int>(-1, iphi);
00360
00361 if (ieta > -32)
00362 return std::pair<int, int>(ieta-1, iphi);
00363 else
00364 return std::pair<int, int>(999, iphi);
00365 }
00366
00367 std::pair<int, int>
00368 FastL1RegionMap::GetTowerEastEtaPhi(int ieta, int iphi)
00369 {
00370 if (ieta == -1) return std::pair<int, int>(1, iphi);
00371
00372 if (ieta < 32)
00373 return std::pair<int, int>(ieta+1, iphi);
00374 else
00375 return std::pair<int, int>(999, iphi);
00376 }
00377
00378 std::pair<int, int>
00379 FastL1RegionMap::GetTowerNWEtaPhi(int ieta, int iphi)
00380 {
00381 int iEta = ieta - 1;
00382 int iPhi = iphi + 1;
00383 if (ieta <= -32)
00384 iEta = 999;
00385 if (ieta == 1)
00386 iEta = -1;
00387 if (iphi == 72)
00388 iPhi = 1;
00389
00390 return std::pair<int, int>(iEta, iPhi);
00391 }
00392
00393 std::pair<int, int>
00394 FastL1RegionMap::GetTowerNEEtaPhi(int ieta, int iphi)
00395 {
00396 int iEta = ieta + 1;
00397 int iPhi = iphi + 1;
00398 if (ieta >= 32)
00399 iEta = 999;
00400 if (ieta == -1)
00401 iEta = 1;
00402 if (iphi == 72)
00403 iPhi = 1;
00404
00405 return std::pair<int, int>(iEta, iPhi);
00406 }
00407
00408
00409
00410 std::pair<int, int>
00411 FastL1RegionMap::GetTowerSWEtaPhi(int ieta, int iphi)
00412 {
00413 int iEta = ieta - 1;
00414 int iPhi = iphi - 1;
00415 if (ieta <= -32)
00416 iEta = 999;
00417 if (ieta == 1)
00418 iEta = -1;
00419 if (iphi == 1)
00420 iPhi = 72;
00421
00422 return std::pair<int, int>(iEta, iPhi);
00423 }
00424
00425 std::pair<int, int>
00426 FastL1RegionMap::GetTowerSEEtaPhi(int ieta, int iphi)
00427 {
00428 int iEta = ieta + 1;
00429 int iPhi = iphi - 1;
00430 if (ieta >= 32)
00431 iEta = 999;
00432 if (ieta == -1)
00433 iEta = 1;
00434 if (iphi == 1)
00435 iPhi = 72;
00436
00437 return std::pair<int, int>(iEta, iPhi);
00438 }