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
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
00044 produces<trigger::TriggerFilterObjectWithRefs>();
00045 }
00046
00047 HLTJetTag::~HLTJetTag()
00048 {
00049 }
00050
00051
00052
00053
00054
00055
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
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
00072
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
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
00091 if ( (m_minTag <= jet->second) and (jet->second <= m_maxTag) ) {
00092 ++nTag;
00093
00094
00095
00096 filterproduct->addObject(trigger::TriggerBJet, jet->first.castTo<reco::CaloJetRef>() );
00097 }
00098 }
00099
00100
00101 bool accept = (nTag >= m_minJets);
00102
00103
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 }