CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/special/src/HLTHcalNoiseFilter.cc

Go to the documentation of this file.
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 }