![]() |
![]() |
00001 00012 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00013 #include "HLTrigger/HLTfilters/interface/HLTSummaryFilter.h" 00014 00015 #include "DataFormats/Common/interface/Handle.h" 00016 00017 #include "FWCore/MessageLogger/interface/MessageLogger.h" 00018 00019 // 00020 // constructors and destructor 00021 // 00022 HLTSummaryFilter::HLTSummaryFilter(const edm::ParameterSet& iConfig) : 00023 summaryTag_ (iConfig.getParameter<edm::InputTag>("summary")), 00024 memberTag_ (iConfig.getParameter<edm::InputTag>("member" )), 00025 cut_ (iConfig.getParameter<std::string> ("cut" )), 00026 min_N_ (iConfig.getParameter<int> ("minN" )), 00027 select_ (cut_ ) 00028 { 00029 edm::LogInfo("HLTSummaryFilter") 00030 << "Summary/member/cut/ncut : " 00031 << summaryTag_.encode() << " " 00032 << memberTag_.encode() << " " 00033 << cut_<< " " << min_N_ ; 00034 00035 //register your products 00036 //produces<trigger::TriggerFilterObjectWithRefs>(); 00037 } 00038 00039 HLTSummaryFilter::~HLTSummaryFilter() 00040 { 00041 } 00042 00043 // 00044 // member functions 00045 // 00046 00047 // ------------ method called to produce the data ------------ 00048 bool 00049 HLTSummaryFilter::filter(edm::Event& iEvent, const edm::EventSetup& iSetup) 00050 { 00051 using namespace std; 00052 using namespace edm; 00053 using namespace reco; 00054 using namespace trigger; 00055 00056 Handle<TriggerEvent> summary; 00057 iEvent.getByLabel(summaryTag_,summary); 00058 00059 if (!summary.isValid()) { 00060 LogError("HLTSummaryFilter") << "Trigger summary product " 00061 << summaryTag_.encode() 00062 << " not found! Filter returns false always"; 00063 return false; 00064 } 00065 00066 size_type n(0); 00067 size_type index(0); 00068 00069 // check if we want to look at a filter and its passing physics objects 00070 index=summary->filterIndex(memberTag_); 00071 if (index<summary->sizeFilters()) { 00072 const Keys& KEYS (summary->filterKeys(index)); 00073 const size_type n1(KEYS.size()); 00074 for (size_type i=0; i!=n1; ++i) { 00075 const TriggerObject& TO( summary->getObjects().at(KEYS[i]) ); 00076 if (select_(TO)) n++; 00077 } 00078 const bool accept(n>=min_N_); 00079 LogInfo("HLTSummaryFilter") 00080 << " Filter objects: " << n << "/" << n1; 00081 return accept; 00082 } 00083 00084 // check if we want to cut on all physics objects of a full "L3" collection 00085 index=summary->collectionIndex(memberTag_); 00086 if (index<summary->sizeCollections()) { 00087 const Keys& KEYS (summary->collectionKeys()); 00088 const size_type n0 (index == 0? 0 : KEYS.at(index-1)); 00089 const size_type n1 (KEYS.at(index)); 00090 for (size_type i=n0; i!=n1; ++i) { 00091 const TriggerObject& TO( summary->getObjects().at(i) ); 00092 if (select_(TO)) n++; 00093 } 00094 const bool accept(n>=min_N_); 00095 LogInfo("HLTSummaryFilter") 00096 << " Collection objects: " << n << "/" <<n1-n0; 00097 return accept; 00098 } 00099 00100 // can't help you, bailing out! 00101 const bool accept (false); 00102 LogInfo("HLTSummaryFilter") << " Default decision: " << accept; 00103 return accept; 00104 00105 } 00106 00107 #include "FWCore/Framework/interface/MakerMacros.h" 00108 DEFINE_FWK_MODULE(HLTSummaryFilter);