![]() |
![]() |
00001 00002 #include "PhysicsTools/PatUtils/interface/CaloJetSelector.h" 00003 #include "DataFormats/Math/interface/deltaR.h" 00004 00005 using pat::CaloJetSelector; 00006 00007 //______________________________________________________________________________ 00008 const pat::ParticleStatus 00009 CaloJetSelector::filter( //const unsigned int& index, 00010 // const edm::View<reco::CaloJet>& Jets 00011 const reco::CaloJet& Jet 00012 ) const 00013 { 00014 ParticleStatus result = GOOD; 00015 00018 if (Jet.p4().Pt()<config_.Ptmin) result = BAD; 00019 00021 double eta = fabs(Jet.p4().Eta()); 00022 if (eta>config_.Etamax) result = BAD; 00023 00025 double EMF = Jet.emEnergyFraction(); 00026 if (EMF<config_.EMFmin || 00027 EMF>config_.EMFmax ) result = BAD; 00028 00030 double HadF = Jet.emEnergyFraction(); 00031 double EMvsHadF = 0.; 00032 if (EMF-HadF!=0.) EMvsHadF = (EMF+HadF)/(EMF-HadF); 00033 if (EMvsHadF<config_.EMvsHadFmin || 00034 EMvsHadF>config_.EMvsHadFmax ) result = BAD; 00035 00036 //ratio Energy over Momentum (both from calorimeter) 00037 //Useful? Both come from a lorentz-vector 00038 //double EoverP = 0.; 00039 //if (Jet.p4().P()!=0.) EoverP = Jet.energy() / Jet.p4().P(); 00040 //if (EoverP > config_.EoverPmax) result = BAD; 00041 00043 double n90 = Jet.n90(); 00044 if (n90<config_.N90min || 00045 n90>config_.N90max ) result = BAD; 00046 00048 std::vector<CaloTowerPtr> jetTowers = Jet.getCaloConstituents(); 00049 if (jetTowers.size()<config_.NCaloTowersmin || 00050 jetTowers.size()>config_.NCaloTowersmax ) result = BAD; 00051 00052 //calculate tower related variables: 00053 double MaxEnergyTower = 0., SumTowPt=0., SumTowPtR=0.; 00054 for(std::vector<CaloTowerPtr>::const_iterator tow = jetTowers.begin(), 00055 towend = jetTowers.end(); tow != towend; ++tow){ 00056 00057 SumTowPt += (*tow)->et(); 00058 SumTowPtR += (*tow)->et()*deltaR( Jet.p4().Eta(), Jet.p4().Phi(), 00059 (*tow)->eta(), (*tow)->phi() ); 00060 if ( (*tow)->et() > MaxEnergyTower ) 00061 MaxEnergyTower = (*tow)->et(); 00062 } 00063 00065 double EtTowerMaxOverEtJet = 0.; 00066 if (Jet.p4().Et()!=0.) EtTowerMaxOverEtJet = MaxEnergyTower /Jet.p4().Et(); 00067 if (EtTowerMaxOverEtJet < config_.HighestTowerOverJetmin || 00068 EtTowerMaxOverEtJet > config_.HighestTowerOverJetmax ) result = BAD; 00069 00071 double RWidth = 0.; 00072 if (SumTowPt!=0.) RWidth = SumTowPtR /SumTowPt; 00073 if (RWidth < config_.RWidthmin || 00074 RWidth > config_.RWidthmax ) result = BAD; 00075 00077 double PtJetoverArea = 0.; 00078 if (Jet.towersArea() !=0.) PtJetoverArea = Jet.p4().Pt() / Jet.towersArea(); 00079 if (PtJetoverArea < config_.PtJetOverArea_min || 00080 PtJetoverArea > config_.PtJetOverArea_max ) result = BAD; 00081 00083 double PtToweroverArea = 0.; 00084 if (Jet.towersArea() !=0.) PtToweroverArea = MaxEnergyTower / Jet.towersArea(); 00085 if (PtToweroverArea < config_.PtTowerOverArea_min || 00086 PtToweroverArea > config_.PtTowerOverArea_max ) result = BAD; 00087 00088 return result; 00089 }