![]() |
![]() |
00001 // Author: Alfredo Gurrola 00002 //(20/11/08 make MET and JET logic independent /Grigory Safronov) 00003 00004 #include "HLTrigger/special/interface/HLTHcalNoiseFilter.h" 00005 #include "DataFormats/Common/interface/Handle.h" 00006 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00007 #include "DataFormats/CaloTowers/interface/CaloTowerCollection.h" 00008 #include "DataFormats/CaloTowers/interface/CaloTower.h" 00009 #include "DataFormats/JetReco/interface/CaloJetCollection.h" 00010 #include "DataFormats/JetReco/interface/CaloJet.h" 00011 #include "DataFormats/METReco/interface/CaloMET.h" 00012 #include "DataFormats/METReco/interface/CaloMETCollection.h" 00013 #include "DataFormats/Math/interface/deltaR.h" 00014 00015 HLTHcalNoiseFilter::HLTHcalNoiseFilter(const edm::ParameterSet& iConfig) 00016 { 00017 JetSource_ = iConfig.getParameter<edm::InputTag>("JetSource"); 00018 MetSource_ = iConfig.getParameter<edm::InputTag>("MetSource"); 00019 TowerSource_ = iConfig.getParameter<edm::InputTag>("TowerSource"); 00020 useMet_ = iConfig.getParameter<bool>("UseMET"); 00021 useJet_ = iConfig.getParameter<bool>("UseJet"); 00022 MetCut_ = iConfig.getParameter<double>("MetCut"); 00023 JetMinE_ = iConfig.getParameter<double>("JetMinE"); 00024 JetHCALminEnergyFraction_ = iConfig.getParameter<double>("JetHCALminEnergyFraction"); 00025 00026 nAnomalousEvents=0; 00027 nEvents=0; 00028 } 00029 00030 HLTHcalNoiseFilter::~HLTHcalNoiseFilter() { } 00031 00032 bool HLTHcalNoiseFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) 00033 { 00034 using namespace edm; 00035 using namespace reco; 00036 00037 bool isAnomalous_BasedOnMET = false; 00038 bool isAnomalous_BasedOnEnergyFraction=false; 00039 00040 if (useMet_) 00041 { 00042 Handle <CaloMETCollection> metHandle; 00043 iEvent.getByLabel(MetSource_, metHandle); 00044 const CaloMETCollection *metCol = metHandle.product(); 00045 const CaloMET met = metCol->front(); 00046 00047 if(met.pt() > MetCut_) isAnomalous_BasedOnMET=true; 00048 } 00049 00050 if (useJet_) 00051 { 00052 Handle<CaloJetCollection> calojetHandle; 00053 iEvent.getByLabel(JetSource_,calojetHandle); 00054 00055 Handle<CaloTowerCollection> towerHandle; 00056 iEvent.getByLabel(TowerSource_, towerHandle); 00057 00058 std::vector<CaloTower> TowerContainer; 00059 std::vector<CaloJet> JetContainer; 00060 TowerContainer.clear(); 00061 JetContainer.clear(); 00062 CaloTower seedTower; 00063 nEvents++; 00064 for(CaloJetCollection::const_iterator calojetIter = calojetHandle->begin();calojetIter != calojetHandle->end();++calojetIter) { 00065 if( ((calojetIter->et())*cosh(calojetIter->eta()) > JetMinE_) && (calojetIter->energyFractionHadronic() > JetHCALminEnergyFraction_) ) { 00066 JetContainer.push_back(*calojetIter); 00067 double maxTowerE = 0.0; 00068 for(CaloTowerCollection::const_iterator kal = towerHandle->begin(); kal != towerHandle->end(); kal++) { 00069 double dR = deltaR((*calojetIter).eta(),(*calojetIter).phi(),(*kal).eta(),(*kal).phi()); 00070 if( (dR < 0.50) && (kal->p() > maxTowerE) ) { 00071 maxTowerE = kal->p(); 00072 seedTower = *kal; 00073 } 00074 } 00075 TowerContainer.push_back(seedTower); 00076 } 00077 00078 } 00079 if(JetContainer.size() > 0) { 00080 nAnomalousEvents++; 00081 isAnomalous_BasedOnEnergyFraction = true; 00082 } 00083 } 00084 00085 return ((useMet_&&isAnomalous_BasedOnMET)||(useJet_&&isAnomalous_BasedOnEnergyFraction)); 00086 }