CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/HLTrigger/btau/src/HLTJetTag.cc

Go to the documentation of this file.
00001 
00015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00016 #include "DataFormats/Common/interface/Handle.h"
00017 #include "DataFormats/Common/interface/RefToBase.h"
00018 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
00019 #include "DataFormats/BTauReco/interface/JetTag.h"
00020 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
00021 #include "HLTrigger/HLTcore/interface/HLTFilter.h"
00022 
00023 #include "HLTJetTag.h"
00024 
00025 //
00026 // constructors and destructor
00027 //
00028 
00029 HLTJetTag::HLTJetTag(const edm::ParameterSet & config) :
00030   m_jetTag(  config.getParameter<edm::InputTag> ("JetTag") ),
00031   m_minTag(  config.getParameter<double>        ("MinTag") ),
00032   m_maxTag(  config.getParameter<double>        ("MaxTag") ),
00033   m_minJets( config.getParameter<int>           ("MinJets") ),
00034   m_saveTag( config.getParameter<bool>          ("SaveTag") ),
00035   m_label(   config.getParameter<std::string>   ("@module_label") )
00036 {
00037 
00038   edm::LogInfo("") << m_label << " (HLTJetTag) trigger cuts: " << std::endl
00039                    << "\ttype of tagged jets used: " << m_jetTag.encode() << std::endl
00040                    << "\tmin/max tag value: [" << m_minTag << ".." << m_maxTag << "]" << std::endl
00041                    << "\tmin no. tagged jets: " << m_minJets << std::endl;
00042 
00043   //register your products
00044   produces<trigger::TriggerFilterObjectWithRefs>();
00045 }
00046 
00047 HLTJetTag::~HLTJetTag()
00048 {
00049 }
00050 
00051 //
00052 // member functions
00053 //
00054 
00055 // ------------ method called to produce the data  ------------
00056 bool
00057 HLTJetTag::filter(edm::Event& event, const edm::EventSetup& setup)
00058 {
00059   using namespace std;
00060   using namespace edm;
00061   using namespace reco;
00062 
00063   // store jets used for triggering.
00064   auto_ptr<trigger::TriggerFilterObjectWithRefs> filterproduct (new trigger::TriggerFilterObjectWithRefs(path(),module()));
00065 
00066   edm::Handle<JetTagCollection> h_jetTag;
00067   event.getByLabel(m_jetTag, h_jetTag);
00068   const reco::JetTagCollection & jetTags = * h_jetTag;
00069 
00070   if (m_saveTag and jetTags.size()) {
00071     // find out which InputTag identifies the jets being tagged, and request it to be stored in the event
00072     // if there are no tagged jets, there is nothing to save
00073     ProductID jetsId = jetTags.begin()->first.id();
00074     edm::Handle<edm::View<reco::Jet> > h_jets;
00075     event.get(jetsId, h_jets);
00076     const edm::Provenance & jets_data = * h_jets.provenance();
00077     edm::InputTag jets_name( jets_data.moduleLabel(), jets_data.productInstanceName(), jets_data.processName() );
00078 
00079     filterproduct->addCollectionTag( jets_name );
00080   }
00081 
00082   // Look at all jets in decreasing order of Et.
00083   int nJet = 0;
00084   int nTag = 0;
00085   for (JetTagCollection::const_iterator jet = jetTags.begin(); jet != jetTags.end(); ++jet) {
00086     LogTrace("") << "Jet " << nJet
00087                  << " : Et = " << jet->first->et()
00088                  << " , tag value = " << jet->second;
00089     ++nJet;
00090     // Check if jet is tagged.
00091     if ( (m_minTag <= jet->second) and (jet->second <= m_maxTag) ) {
00092       ++nTag;
00093 
00094       // Store a reference to the jets which passed tagging cuts
00095       // N.B. this *should* work as we start from a CaloJet in HLT
00096       filterproduct->addObject(trigger::TriggerBJet, jet->first.castTo<reco::CaloJetRef>() );
00097     }
00098   }
00099 
00100   // filter decision
00101   bool accept = (nTag >= m_minJets);
00102 
00103   // put filter object into the Event
00104   event.put(filterproduct);
00105 
00106   edm::LogInfo("") << m_label << " trigger accept ? = " << accept
00107                    << " nTag/nJet = " << nTag << "/" << nJet << std::endl;
00108 
00109   return accept;
00110 }