CMS 3D CMS Logo

SUSY_HLT_DiJet_MET.cc
Go to the documentation of this file.
8 
10  edm::LogInfo("SUSY_HLT_DiJet_MET") << "Constructor SUSY_HLT_DiJet_MET::SUSY_HLT_DiJet_MET " << std::endl;
11  // Get parameters from configuration file
12  theTrigSummary_ = consumes<trigger::TriggerEvent>(ps.getParameter<edm::InputTag>("trigSummary"));
13  thePfMETCollection_ = consumes<reco::PFMETCollection>(ps.getParameter<edm::InputTag>("pfMETCollection"));
14  theCaloMETCollection_ = consumes<reco::CaloMETCollection>(ps.getParameter<edm::InputTag>("caloMETCollection"));
15  thePfJetCollection_ = consumes<reco::PFJetCollection>(ps.getParameter<edm::InputTag>("pfJetCollection"));
16  theCaloJetCollection_ = consumes<reco::CaloJetCollection>(ps.getParameter<edm::InputTag>("caloJetCollection"));
17  triggerResults_ = consumes<edm::TriggerResults>(ps.getParameter<edm::InputTag>("TriggerResults"));
18  HLTProcess_ = ps.getParameter<std::string>("HLTProcess");
19  triggerPath_ = ps.getParameter<std::string>("TriggerPath");
20  triggerPathAuxiliaryForHadronic_ = ps.getParameter<std::string>("TriggerPathAuxiliaryForHadronic");
21  triggerFilter_ = ps.getParameter<edm::InputTag>("TriggerFilter");
22  triggerJetFilter_ = ps.getParameter<edm::InputTag>("TriggerJetFilter");
23  ptThrJetTrig_ = ps.getUntrackedParameter<double>("PtThrJetTrig");
24  etaThrJetTrig_ = ps.getUntrackedParameter<double>("EtaThrJetTrig");
25  ptThrJet_ = ps.getUntrackedParameter<double>("PtThrJet");
26  etaThrJet_ = ps.getUntrackedParameter<double>("EtaThrJet");
27  metCut_ = ps.getUntrackedParameter<double>("OfflineMetCut");
28 }
29 
31  edm::LogInfo("SUSY_HLT_DiJet_MET") << "Destructor SUSY_HLT_DiJet_MET::~SUSY_HLT_DiJet_MET " << std::endl;
32 }
33 
35  bool changed;
36 
37  if (!fHltConfig.init(run, e, HLTProcess_, changed)) {
38  edm::LogError("SUSY_HLT_DiJet_MET") << "Initialization of HLTConfigProvider failed!!";
39  return;
40  }
41 
42  bool pathFound = false;
43  const std::vector<std::string> allTrigNames = fHltConfig.triggerNames();
44  for (size_t j = 0; j < allTrigNames.size(); ++j) {
45  if (allTrigNames[j].find(triggerPath_) != std::string::npos) {
46  pathFound = true;
47  }
48  }
49 
50  if (!pathFound) {
51  LogDebug("SUSY_HLT_DiJet_MET") << "Path not found"
52  << "\n";
53  return;
54  }
55 
56  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::beginRun" << std::endl;
57 }
58 
60  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::bookHistograms" << std::endl;
61  // book at beginRun
62  bookHistos(ibooker_);
63 }
64 
66  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::analyze" << std::endl;
67 
68  //-------------------------------
69  //--- MET
70  //-------------------------------
71  edm::Handle<reco::PFMETCollection> pfMETCollection;
72  e.getByToken(thePfMETCollection_, pfMETCollection);
73  if (!pfMETCollection.isValid()) {
74  edm::LogError("SUSY_HLT_DiJet_MET") << "invalid collection: PFMET"
75  << "\n";
76  return;
77  }
78  edm::Handle<reco::CaloMETCollection> caloMETCollection;
79  e.getByToken(theCaloMETCollection_, caloMETCollection);
80  if (!caloMETCollection.isValid()) {
81  edm::LogError("SUSY_HLT_DiJet_MET") << "invalid collection: CaloMET"
82  << "\n";
83  return;
84  }
85  //-------------------------------
86  //--- Jets
87  //-------------------------------
88  edm::Handle<reco::PFJetCollection> pfJetCollection;
89  e.getByToken(thePfJetCollection_, pfJetCollection);
90  if (!pfJetCollection.isValid()) {
91  edm::LogError("SUSY_HLT_DiJet_MET") << "invalid collection: PFJets"
92  << "\n";
93  return;
94  }
95  edm::Handle<reco::CaloJetCollection> caloJetCollection;
96  e.getByToken(theCaloJetCollection_, caloJetCollection);
97  if (!caloJetCollection.isValid()) {
98  edm::LogError("SUSY_HLT_DiJet_MET") << "invalid collection: CaloJets"
99  << "\n";
100  return;
101  }
102 
103  //-------------------------------
104  //--- Trigger
105  //-------------------------------
107  e.getByToken(triggerResults_, hltresults);
108  if (!hltresults.isValid()) {
109  edm::LogError("SUSY_HLT_DiJet_MET") << "invalid collection: TriggerResults"
110  << "\n";
111  return;
112  }
113  edm::Handle<trigger::TriggerEvent> triggerSummary;
114  e.getByToken(theTrigSummary_, triggerSummary);
115  if (!triggerSummary.isValid()) {
116  edm::LogError("SUSY_HLT_DiJet_MET") << "invalid collection: TriggerSummary"
117  << "\n";
118  return;
119  }
120 
121  // get online objects
122 
123  size_t filterIndex = triggerSummary->filterIndex(triggerFilter_);
124  size_t jetFilterIndex = triggerSummary->filterIndex(triggerJetFilter_);
126 
127  if (!(filterIndex >= triggerSummary->sizeFilters())) {
128  const trigger::Keys &keys = triggerSummary->filterKeys(filterIndex);
129  for (size_t j = 0; j < keys.size(); ++j) {
130  trigger::TriggerObject foundObject = triggerObjects[keys[j]];
131  h_triggerMet->Fill(foundObject.pt());
132  h_triggerMetPhi->Fill(foundObject.phi());
133  }
134  }
135 
136  std::vector<float> ptJet, etaJet, phiJet;
137  if (!(jetFilterIndex >= triggerSummary->sizeFilters())) {
138  const trigger::Keys &keys_jetfilter = triggerSummary->filterKeys(jetFilterIndex);
139  for (size_t j = 0; j < keys_jetfilter.size(); ++j) {
140  trigger::TriggerObject foundObject = triggerObjects[keys_jetfilter[j]];
141  h_triggerJetPt->Fill(foundObject.pt());
142  h_triggerJetEta->Fill(foundObject.eta());
143  h_triggerJetPhi->Fill(foundObject.phi());
144  if (foundObject.pt() > ptThrJetTrig_ && fabs(foundObject.eta()) < etaThrJetTrig_) {
145  ptJet.push_back(foundObject.pt());
146  etaJet.push_back(foundObject.eta());
147  phiJet.push_back(foundObject.phi());
148  }
149  }
150  }
151 
152  bool hasFired = false;
153  bool hasFiredAuxiliaryForHadronicLeg = false;
154  const edm::TriggerNames &trigNames = e.triggerNames(*hltresults);
155  unsigned int numTriggers = trigNames.size();
156  for (unsigned int hltIndex = 0; hltIndex < numTriggers; ++hltIndex) {
157  if (trigNames.triggerName(hltIndex).find(triggerPath_) != std::string::npos && hltresults->wasrun(hltIndex) &&
158  hltresults->accept(hltIndex))
159  hasFired = true;
160  if (trigNames.triggerName(hltIndex).find(triggerPathAuxiliaryForHadronic_) != std::string::npos &&
161  hltresults->wasrun(hltIndex) && hltresults->accept(hltIndex))
162  hasFiredAuxiliaryForHadronicLeg = true;
163  }
164 
165  if (hasFiredAuxiliaryForHadronicLeg) {
166  int offlineJetCounter = 0;
167  int offlineCentralJets = 0;
168  int nMatch = 0, jet1Index = -1, jet2Index = -1;
169 
170  for (reco::PFJetCollection::const_iterator i_pfjet = pfJetCollection->begin(); i_pfjet != pfJetCollection->end();
171  ++i_pfjet) {
172  if (i_pfjet->pt() > ptThrJet_ && fabs(i_pfjet->eta()) < etaThrJet_) {
173  offlineCentralJets++;
174  if (offlineCentralJets == 2 && pfMETCollection->begin()->et() > metCut_)
175  h_pfJet2PtTurnOn_den->Fill(i_pfjet->pt());
176 
177  for (unsigned int itrigjet = 0; itrigjet < ptJet.size(); ++itrigjet) {
178  if (itrigjet < 2 &&
179  (sqrt((i_pfjet->phi() - phiJet.at(itrigjet)) * (i_pfjet->phi() - phiJet.at(itrigjet)) +
180  (i_pfjet->eta() - etaJet.at(itrigjet)) * (i_pfjet->eta() - etaJet.at(itrigjet))) < 0.4)) {
181  nMatch++;
182  if (nMatch == 1)
183  jet1Index = offlineJetCounter;
184  if (nMatch == 2)
185  jet2Index = offlineJetCounter;
186 
187  if (hasFired) {
188  h_pfJetPt->Fill(i_pfjet->pt());
189  h_pfJetEta->Fill(i_pfjet->eta());
190  h_pfJetPhi->Fill(i_pfjet->phi());
191  if (offlineCentralJets == 2 && pfMETCollection->begin()->et() > metCut_)
192  h_pfJet2PtTurnOn_num->Fill(i_pfjet->pt());
193  }
194 
195  break;
196  }
197  }
198  }
199 
200  offlineJetCounter++;
201  }
202 
203  if (hasFired) {
204  h_pfMetTurnOn_num->Fill(pfMETCollection->begin()->et());
205  h_pfMetPhi->Fill(pfMETCollection->begin()->phi());
206  h_caloMetvsPFMet->Fill(pfMETCollection->begin()->et(), caloMETCollection->begin()->et());
207 
208  if (jet1Index > -1 && jet2Index > -1) {
210  fabs(reco::deltaPhi(pfJetCollection->at(jet1Index).phi(), pfJetCollection->at(jet2Index).phi())));
211  }
212  }
213 
214  h_pfMetTurnOn_den->Fill(pfMETCollection->begin()->et());
215  }
216 
217  ptJet.clear();
218  etaJet.clear();
219  phiJet.clear();
220 }
221 
223  edm::LogInfo("SUSY_HLT_DiJet_MET") << "SUSY_HLT_DiJet_MET::endRun" << std::endl;
224 }
225 
227  ibooker_.cd();
228  ibooker_.setCurrentFolder("HLT/SUSYBSM/" + triggerPath_);
229 
230  // offline quantities
231  h_pfMetPhi = ibooker_.book1D("pfMetPhi", "PF MET Phi", 20, -3.5, 3.5);
232  h_pfJetPt = ibooker_.book1D("pfJetPt", "PF Jet p_{T} (trigger-matched jets, |#eta| < 2.4); GeV", 20, 0.0, 500.0);
233  h_pfJetEta = ibooker_.book1D("pfJetEta", "PF Jet #eta (trigger-matched jets, |#eta| < 2.4)", 20, -3.0, 3.0);
234  h_pfJetPhi = ibooker_.book1D("pfJetPhi", "PF Jet #phi (trigger-matched jets, |#eta| < 2.4)", 20, -3.5, 3.5);
236  ibooker_.book1D("pfJet1Jet2DPhi", "|#Delta#phi| between two leading trigger-matched jets", 20, 0.0, 3.5);
237  h_caloMetvsPFMet = ibooker_.book2D("caloMetvsPFMet", "Calo MET vs PF MET; GeV; GeV", 25, 0.0, 500.0, 25, 0.0, 500.0);
238 
239  // online quantities
240  h_triggerMet = ibooker_.book1D("triggerMet", "Trigger MET; GeV", 20, 0.0, 500.0);
241  h_triggerMetPhi = ibooker_.book1D("triggerMetPhi", "Trigger MET Phi", 20, -3.5, 3.5);
242  h_triggerJetPt = ibooker_.book1D("triggerJetPt", "Trigger Jet p_{T}; GeV", 20, 0.0, 500.0);
243  h_triggerJetEta = ibooker_.book1D("triggerJetEta", "Trigger Jet Eta", 20, -3.0, 3.0);
244  h_triggerJetPhi = ibooker_.book1D("triggerJetPhi", "Trigger Jet Phi", 20, -3.5, 3.5);
245 
246  // num and den hists to be divided in harvesting step to make turn on curves
247  h_pfMetTurnOn_num = ibooker_.book1D("pfMetTurnOn_num", "PF MET", 20, 0.0, 500.0);
248  h_pfMetTurnOn_den = ibooker_.book1D("pfMetTurnOn_den", "PF MET Turn On Denominator", 20, 0.0, 500.0);
250  ibooker_.book1D("pfJet2PtTurnOn_num", "PF Jet2 Pt (NCentralPFJets >= 2, PFMET > 250)", 20, 0.0, 500.0);
251  h_pfJet2PtTurnOn_den = ibooker_.book1D("pfJet2PtTurnOn_den", "PF Jet2 Pt Turn On Denominator", 20, 0.0, 500.0);
252 
253  ibooker_.cd();
254 }
255 
256 // define this as a plug-in
#define LogDebug(id)
constexpr double deltaPhi(double phi1, double phi2)
Definition: deltaPhi.h:22
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool wasrun() const
Was at least one path run?
MonitorElement * h_triggerJetEta
trigger::size_type sizeFilters() const
Definition: TriggerEvent.h:135
edm::InputTag triggerFilter_
edm::EDGetTokenT< reco::CaloJetCollection > theCaloJetCollection_
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:517
float phi() const
Definition: TriggerObject.h:58
MonitorElement * h_pfMetTurnOn_num
MonitorElement * h_pfMetPhi
MonitorElement * h_pfJetPt
bool accept() const
Has at least one path accepted the event?
const std::vector< std::string > & triggerNames() const
names of trigger paths
const Keys & filterKeys(trigger::size_type index) const
Definition: TriggerEvent.h:111
trigger::size_type filterIndex(const edm::InputTag &filterTag) const
find index of filter in data-member vector from filter tag
Definition: TriggerEvent.h:123
MonitorElement * h_caloMetvsPFMet
MonitorElement * h_pfJetEta
Strings::size_type size() const
Definition: TriggerNames.cc:31
float eta() const
Definition: TriggerObject.h:57
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
MonitorElement * h_triggerMetPhi
void bookHistos(DQMStore::IBooker &)
void Fill(long long x)
Single trigger physics object (e.g., an isolated muon)
Definition: TriggerObject.h:22
edm::EDGetTokenT< reco::PFMETCollection > thePfMETCollection_
void endRun(edm::Run const &run, edm::EventSetup const &eSetup) override
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
const TriggerObjectCollection & getObjects() const
Definition: TriggerEvent.h:98
MonitorElement * h_triggerMet
T sqrt(T t)
Definition: SSEVec.h:18
MonitorElement * h_pfJet2PtTurnOn_den
MonitorElement * h_pfJet1Jet2DPhi
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:106
~SUSY_HLT_DiJet_MET() override
bool isValid() const
Definition: HandleBase.h:74
void dqmBeginRun(edm::Run const &, edm::EventSetup const &) override
std::vector< TriggerObject > TriggerObjectCollection
collection of trigger physics objects (e.g., all isolated muons)
Definition: TriggerObject.h:81
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:74
MonitorElement * h_pfJetPhi
edm::InputTag triggerJetFilter_
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
std::string const & triggerName(unsigned int index) const
Definition: TriggerNames.cc:22
std::vector< size_type > Keys
bool init(const edm::Run &iRun, const edm::EventSetup &iSetup, const std::string &processName, bool &changed)
d&#39;tor
HLTConfigProvider fHltConfig
MonitorElement * h_pfJet2PtTurnOn_num
edm::EDGetTokenT< reco::PFJetCollection > thePfJetCollection_
edm::EDGetTokenT< edm::TriggerResults > triggerResults_
edm::EDGetTokenT< reco::CaloMETCollection > theCaloMETCollection_
std::string triggerPathAuxiliaryForHadronic_
MonitorElement * h_pfMetTurnOn_den
void analyze(edm::Event const &e, edm::EventSetup const &eSetup) override
edm::EDGetTokenT< trigger::TriggerEvent > theTrigSummary_
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * h_triggerJetPt
edm::TriggerNames const & triggerNames(edm::TriggerResults const &triggerResults) const override
Definition: Event.cc:256
MonitorElement * h_triggerJetPhi
Definition: Run.h:45
SUSY_HLT_DiJet_MET(const edm::ParameterSet &ps)