CMS 3D CMS Logo

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

Go to the documentation of this file.
00001 #include "HLTrigger/special/interface/HLTEcalPhiSymFilter.h"
00002 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00003 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005 #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h"
00006 #include "CondFormats/DataRecord/interface/EcalChannelStatusRcd.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "FWCore/Framework/interface/EventSetup.h"
00009 
00010 HLTEcalPhiSymFilter::HLTEcalPhiSymFilter(const edm::ParameterSet& iConfig)
00011 {
00012   barrelHits_ = iConfig.getParameter< edm::InputTag > ("barrelHitCollection");
00013   endcapHits_ = iConfig.getParameter< edm::InputTag > ("endcapHitCollection");
00014   phiSymBarrelHits_ = 
00015     iConfig.getParameter< std::string > ("phiSymBarrelHitCollection");
00016   phiSymEndcapHits_ = 
00017     iConfig.getParameter< std::string > ("phiSymEndcapHitCollection");
00018   eCut_barl_ = iConfig.getParameter< double > ("eCut_barrel");
00019   eCut_endc_ = iConfig.getParameter< double > ("eCut_endcap");
00020   eCut_barl_high_=iConfig.getParameter< double > ("eCut_barrel_high");
00021   eCut_endc_high_=iConfig.getParameter< double > ("eCut_endcap_high");
00022 
00023   statusThreshold_ = iConfig.getParameter<uint32_t> ("statusThreshold");
00024   useRecoFlag_ =  iConfig.getParameter<bool>("useRecoFlag");
00025 
00026   //register your products
00027   produces< EBRecHitCollection >(phiSymBarrelHits_);
00028   produces< EERecHitCollection >(phiSymEndcapHits_);
00029   produces<trigger::TriggerFilterObjectWithRefs>();
00030 
00031 
00032 }
00033 
00034 
00035 HLTEcalPhiSymFilter::~HLTEcalPhiSymFilter()
00036 {
00037  
00038 
00039 }
00040 
00041 
00042 // ------------ method called to produce the data  ------------
00043 bool
00044 HLTEcalPhiSymFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup)
00045 {
00046 
00047 
00048   using namespace edm;
00049   using namespace std;
00050   
00051   edm::ESHandle<EcalChannelStatus> csHandle;
00052   if (! useRecoFlag_) iSetup.get<EcalChannelStatusRcd>().get(csHandle);
00053   const EcalChannelStatus& channelStatus = *csHandle; 
00054   
00055 
00056 
00057   Handle<EBRecHitCollection> barrelRecHitsHandle;
00058   Handle<EERecHitCollection> endcapRecHitsHandle;
00059 
00060   
00061   iEvent.getByLabel(barrelHits_,barrelRecHitsHandle);
00062   iEvent.getByLabel(endcapHits_,endcapRecHitsHandle);
00063  
00064   //Create empty output collections
00065   std::auto_ptr< EBRecHitCollection > phiSymEBRecHitCollection( new EBRecHitCollection );
00066   std::auto_ptr< EERecHitCollection > phiSymEERecHitCollection( new EERecHitCollection );
00067 
00068   // The Filter object. We don't really need to put anything into it, but we 
00069   // write an empty one for consistency
00070   std::auto_ptr<trigger::TriggerFilterObjectWithRefs> 
00071       filterproduct (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00072   
00073 
00074   //Select interesting EcalRecHits (barrel)
00075   EBRecHitCollection::const_iterator itb;
00076   for (itb=barrelRecHitsHandle->begin(); itb!=barrelRecHitsHandle->end(); itb++) {
00077     if (itb->energy() >= eCut_barl_) {
00078       uint16_t statusCode = 0; 
00079       if (useRecoFlag_) statusCode=itb->recoFlag();
00080       else statusCode = channelStatus[itb->id().rawId()].getStatusCode();
00081       if ( statusCode <=statusThreshold_ ) 
00082         phiSymEBRecHitCollection->push_back(*itb);
00083       else if  (itb->energy() >= eCut_barl_high_ ) 
00084         phiSymEBRecHitCollection->push_back(*itb);
00085     }
00086   }
00087   
00088   //Select interesting EcalRecHits (endcaps)
00089   EERecHitCollection::const_iterator ite;
00090   for (ite=endcapRecHitsHandle->begin(); ite!=endcapRecHitsHandle->end(); ite++) {
00091     if (ite->energy() >= eCut_endc_) {
00092        uint16_t statusCode = 0; 
00093        if (useRecoFlag_) statusCode=ite->recoFlag();
00094        else statusCode =channelStatus[ite->id().rawId()].getStatusCode(); 
00095        if ( statusCode <=statusThreshold_ ) 
00096          phiSymEERecHitCollection->push_back(*ite);
00097        else if  (ite->energy() >= eCut_endc_high_ ) 
00098          phiSymEERecHitCollection->push_back(*ite);
00099     }
00100   }
00101 
00102   if ((!phiSymEBRecHitCollection->size() ) && (!phiSymEERecHitCollection->size())) 
00103     return false;
00104   
00105   //Put selected information in the event
00106   iEvent.put( phiSymEBRecHitCollection, phiSymBarrelHits_);
00107   iEvent.put( phiSymEERecHitCollection, phiSymEndcapHits_);
00108   
00109   iEvent.put(filterproduct);
00110    
00111   return true;
00112 
00113 }