CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/L1Trigger/Skimmer/src/L1Filter.cc

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