![]() |
![]() |
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 }