00001 #include "PhysicsTools/RecoUtils/plugins/HLTEventSelector.h" 00002 00003 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00004 00005 #include "DataFormats/Common/interface/TriggerResults.h" 00006 #include "FWCore/Common/interface/TriggerNames.h" 00007 00008 HLTEventSelector::HLTEventSelector (const edm::ParameterSet& pset){ 00009 // input collection 00010 triggerResults_ = pset.getParameter<edm::InputTag>("triggerResults"); 00011 // trigger path names 00012 pathNames_ = pset.getParameter< std::vector<std::string> >("pathNames"); 00013 00014 edm::LogInfo("HLTEventSelector") << "constructed with \n" 00015 << " src = " << triggerResults_ << "\n" 00016 << " #pathnames = " << pathNames_.size(); 00017 } 00018 00019 bool 00020 HLTEventSelector::select (const edm::Event& event) const 00021 { 00022 // 00023 // get the trigger results and check validity 00024 // 00025 edm::Handle<edm::TriggerResults> hltHandle; 00026 event.getByLabel(triggerResults_, hltHandle); 00027 if ( !hltHandle.isValid() ) { 00028 edm::LogWarning("HLTEventSelector") << "No trigger results for InputTag " << triggerResults_; 00029 return false; 00030 } 00031 // 00032 // get results 00033 // 00034 const edm::TriggerNames & trgNames = event.triggerNames(*hltHandle); 00035 unsigned int trgSize = trgNames.size(); 00036 // static int first(true); 00037 // if ( first ) { 00038 // first = false; 00039 // std::cout << "Trigger menu" << std::endl; 00040 // for ( unsigned int i=0; i<trgSize; ++i ) { 00041 // std::cout << trgNames.triggerName(i) << std::endl; 00042 // } 00043 // } 00044 // 00045 // example for OR of all specified triggers 00046 // 00047 for ( std::vector<std::string>::const_iterator i=pathNames_.begin(); 00048 i!=pathNames_.end(); ++i ) { 00049 // get index 00050 unsigned int index = trgNames.triggerIndex(*i); 00051 if ( index==trgSize ) { 00052 edm::LogWarning("HLTEventSelector") << "Unknown trigger name " << *i; 00053 // return false; 00054 continue; 00055 } 00056 // if ( !hltHandle->accept(index) ) return false; 00057 if ( hltHandle->accept(index) ) { 00058 LogDebug("HLTEventSelector") << "Event selected by " << *i; 00059 return true; 00060 } 00061 } 00062 // return true; 00063 LogDebug("HLTEventSelector") << "Event rejected"; 00064 return false; 00065 }