- Timestamp:
- May 18, 2009, 6:52:13 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/interface/SmearUtil.h
r383 r392 260 260 261 261 /// Lepton isolation based on calorimetry (optional. Default: off) 262 float CaloIsolation(const D_Particle& part, const D_CaloTowerList & towers );262 float CaloIsolation(const D_Particle& part, const D_CaloTowerList & towers, const float iPhi, const float iEta); 263 263 264 264 //********************* returns a segmented value for eta and phi, for calo towers ***** -
trunk/src/SmearUtil.cc
r384 r392 121 121 ISOL_Cone = 0.5; //Cone for isolation criteria 122 122 ISOL_Calo_ET = 1E99; //minimal tower energy for isolation criteria. Default off = 1E99 123 ISOL_Calo_Grid = 3; //Grid size (N x N) for calorimetric isolation 123 ISOL_Calo_Grid = 3; //Grid size (N x N) for calorimetric isolation -- should be odd 124 124 125 125 // General jet variable … … 592 592 else if(strstr(temp_string.c_str(),"PdgTableFilename")) {curstring >> varname >> svalue; PdgTableFilename = svalue;} 593 593 } 594 594 595 if(ISOL_Calo_Grid%2 ==0) { 596 ISOL_Calo_Grid++; 597 cout <<"** WARNING: ISOL_Calo_Grid is not odd. Set it to "<< ISOL_Calo_Grid << " **" << endl; 598 } 599 595 600 //jet stuffs not defined in the input datacard 596 601 JET_overlap = 0.75; … … 1226 1231 1227 1232 // ******* Calorimetric isolation 1228 float RESOLution::CaloIsolation(const D_Particle& part, const D_CaloTowerList & towers ) {1233 float RESOLution::CaloIsolation(const D_Particle& part, const D_CaloTowerList & towers, const float iPhi, const float iEta) { 1229 1234 // etrat, which is a percentage between 00 and 99. It is the ratio of the transverse energy 1230 1235 // in a 3Ã3 grid surrounding the muon to the pT of the muon. For well-isolated muons, both ptiso and etrat will be small. 1231 1236 if(ISOL_Calo_ET>1E10) return UNDEFINED; // avoid doing anything unreasonable... 1232 float et rat=0;1237 float et_sum=0; 1233 1238 // available parameters: ISOL_Calo_ET , ISOL_Calo_Grid 1234 /* for(unsigned int i=0; i < towers.size(); i++) { 1235 if(towers[i].E > ISOL_Calo_ET) { 1236 float genDeltaR = DeltaR(part.Phi(),part.Eta(),towers[i].getPhi(),towers[i].getEta()); 1237 if(genDeltaR < ISOL_Calo_Cone) { 1238 ptiso += towers[i].getET(); 1239 } 1240 } 1241 } // loop on towers 1242 ptiso -= 1243 */ 1244 etrat = 100*etrat/part.Pt(); 1239 // Get the EtaCalo/PhiCalo of the muon ; 1240 // transform it into iEta/iPhi to get the towers, and their neighbourh (i-1, i-2, etc) 1241 1242 unsigned int N = ISOL_Calo_Grid; 1243 int index= iUNDEFINED; // index of the central tower of the grid in TOWER_eta_edges[.]; 1244 // !! TOWER_eta_edges is only with eta>0 1245 // finds the index of the central tower of the NxN grid 1246 for (unsigned int i=1; i< TOWER_number+1; i++) { 1247 if(fabs(iEta) >= TOWER_eta_edges[i-1] && fabs(iEta) < TOWER_eta_edges[i]) { 1248 index = i-1; 1249 break; 1250 } 1251 } 1252 if(index != iUNDEFINED) { 1253 // finds the size in phi of the cells for this eta 1254 float dphi = TOWER_dphi[index]*pi/180.; // in rad 1255 1256 //cout << "Grid " << " ----------\n"; 1257 for (unsigned int i_eta=0; i_eta<N; i_eta++) { 1258 unsigned int real_index = (iEta>0) ? index+i_eta-(N-1)/2 : index+1+i_eta-(N-1)/2 ; 1259 float eta_ith_tower = TOWER_eta_edges[real_index]; 1260 if(iEta<0) eta_ith_tower *= -1; 1261 1262 for (unsigned int i_phi=0; i_phi<N; i_phi++) { 1263 float phi_ith_tower = iPhi + (float)(i_phi - (N-1.)/2.)*dphi; 1264 D_CaloTower calMuon(towers.getElement(eta_ith_tower,phi_ith_tower)); 1265 if(calMuon.getEta() != UNDEFINED && calMuon.getE() > ISOL_Calo_ET) { 1266 et_sum += calMuon.getE(); 1267 //cout << "eta/phi = " << eta_ith_tower << "\t" << phi_ith_tower << "\t" << calMuon.getE() << " GeV" << endl; 1268 } 1269 //else cout << "eta/phi = " << eta_ith_tower << "\t" << phi_ith_tower << "\tnot active\n"; 1270 } 1271 1272 } // NxN grid 1273 //cout << "-----------" << etrat << endl; 1274 } 1275 else if (CEN_max_mu < CEN_max_calo_fwd) 1276 cout << "** ERROR in RESOLution::CaloIsolation: 'muon'-tower not found! **" << endl; 1277 // should never happen ! this would be a bug 1278 //cout << "etrat = " << et_sum << "\t Pt=" << part.Pt() << endl; 1279 1280 // should return a number between 0 and 99 (due to LHCO definitions) 1281 // which is Pt(muon) / sum(ET) 1282 float etrat = 0.; 1283 if(et_sum==0) etrat = 99.; 1284 else if(et_sum>0) etrat = 100*part.Pt()/et_sum; 1245 1285 if(etrat<0) cout << "Error: negative etrat in CaloIsolation (" << etrat <<")\n"; 1246 else if(etrat>99) cout << "Error: etrat shoud be in [0;99] in CaloIsolation (" << etrat <<")\n"; 1286 //else if(etrat>99) cout << "Error: etrat should be in [0;99] in CaloIsolation (" << etrat <<")\n"; 1287 if(etrat>99) etrat = 99; 1247 1288 return etrat; 1248 1289 }
Note:
See TracChangeset
for help on using the changeset viewer.