![]() |
![]() |
00001 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00002 00003 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00004 #include "FWCore/Framework/interface/EDFilter.h" 00005 #include "FWCore/Framework/interface/Event.h" 00006 00007 #include "DataFormats/Common/interface/Handle.h" 00008 #include "FWCore/Framework/interface/ESHandle.h" 00009 #include "FWCore/Framework/interface/EventSetup.h" 00010 00011 #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h" 00012 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h" 00013 00014 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetupFwd.h" 00015 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutSetup.h" 00016 00017 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h" 00018 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerRecord.h" 00019 00020 #include <iostream> 00021 #include <string> 00022 00023 class L1Filter : public edm::EDFilter 00024 { 00025 public: 00026 explicit L1Filter(edm::ParameterSet const&); 00027 00028 virtual ~L1Filter(); 00029 00030 virtual bool filter(edm::Event& e, edm::EventSetup const& c); 00031 void endJob(); 00032 00033 private: 00034 00035 edm::InputTag inputTag_; 00036 bool useAODRecord_; 00037 bool useFinalDecision_; 00038 std::vector<std::string> algos_; 00039 00040 }; 00041 00042 L1Filter::L1Filter(const edm::ParameterSet& ps) : 00043 inputTag_(ps.getParameter< edm::InputTag >("inputTag")), 00044 useAODRecord_(ps.getParameter< bool >("useAODRecord")), 00045 useFinalDecision_(ps.getParameter< bool >("useFinalDecision")), 00046 algos_(ps.getParameter< std::vector<std::string> >("algorithms")) 00047 { 00048 } 00049 00050 L1Filter::~L1Filter() 00051 { 00052 } 00053 00054 bool L1Filter::filter(edm::Event& iEvent, edm::EventSetup const& evSetup) 00055 { 00056 00057 // get menu 00058 edm::ESHandle<L1GtTriggerMenu> menuRcd; 00059 evSetup.get<L1GtTriggerMenuRcd>().get(menuRcd) ; 00060 const L1GtTriggerMenu* menu = menuRcd.product(); 00061 00062 bool passed = false; 00063 std::vector<std::string>::const_iterator algo; 00064 00065 if (useAODRecord_) { 00066 edm::Handle< L1GlobalTriggerRecord > gtRecord; 00067 iEvent.getByLabel(inputTag_, gtRecord); 00068 const DecisionWord dWord = gtRecord->decisionWord(); 00069 00070 if (useFinalDecision_) passed = gtRecord->decision(); 00071 else { 00072 for (algo = algos_.begin(); algo != algos_.end(); ++algo) { 00073 passed |= menu->gtAlgorithmResult( (*algo), dWord); 00074 } 00075 } 00076 } 00077 else { 00078 edm::Handle< L1GlobalTriggerReadoutRecord > gtRecord; 00079 iEvent.getByLabel(inputTag_, gtRecord); 00080 const DecisionWord dWord = gtRecord->decisionWord(); 00081 00082 if (useFinalDecision_) passed = gtRecord->decision(); 00083 else { 00084 for (algo = algos_.begin(); algo != algos_.end(); ++algo) { 00085 passed |= menu->gtAlgorithmResult( (*algo), dWord); 00086 } 00087 } 00088 } 00089 00090 return passed; 00091 00092 } 00093 00094 void L1Filter::endJob() 00095 { 00096 00097 } 00098 00099 #include "FWCore/Framework/interface/MakerMacros.h" 00100 00101 DEFINE_FWK_MODULE(L1Filter);