CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/HLTfilters/src/HLTSummaryFilter.cc

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