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