CMS 3D CMS Logo

QcdPhotonsDQM.cc
Go to the documentation of this file.
1 /*
2  * See header file for a description of this class.
3  *
4  * \author Michael B. Anderson, University of Wisconsin Madison
5  */
6 
8 
12 
16 
18 
20 
21 // Physics Objects
24 
25 // Vertex
27 
28 // For removing ECAL Spikes
32 
35 
36 // Math stuff
39 
40 #include <vector>
41 
42 #include <string>
43 #include <cmath>
44 using namespace std;
45 using namespace edm;
46 using namespace reco;
47 
48 QcdPhotonsDQM::QcdPhotonsDQM(const ParameterSet& parameters) : ecalClusterToolsESGetTokens_{consumesCollector()} {
49  // Get parameters from configuration file
50  theTriggerPathToPass_ = parameters.getParameter<string>("triggerPathToPass");
51  thePlotTheseTriggersToo_ = parameters.getParameter<vector<string> >("plotTheseTriggersToo");
52  theJetCollectionLabel_ = parameters.getParameter<InputTag>("jetCollection");
53  trigTagToken_ = consumes<edm::TriggerResults>(parameters.getUntrackedParameter<edm::InputTag>("trigTag"));
54  thePhotonCollectionToken_ = consumes<reco::PhotonCollection>(parameters.getParameter<InputTag>("photonCollection"));
55  theJetCollectionToken_ = consumes<edm::View<reco::Jet> >(parameters.getParameter<InputTag>("jetCollection"));
56  theVertexCollectionToken_ = consumes<reco::VertexCollection>(parameters.getParameter<InputTag>("vertexCollection"));
57  theMinJetPt_ = parameters.getParameter<double>("minJetPt");
58  theMinPhotonEt_ = parameters.getParameter<double>("minPhotonEt");
59  theRequirePhotonFound_ = parameters.getParameter<bool>("requirePhotonFound");
60  thePlotPhotonMaxEt_ = parameters.getParameter<double>("plotPhotonMaxEt");
61  thePlotPhotonMaxEta_ = parameters.getParameter<double>("plotPhotonMaxEta");
62  thePlotJetMaxEta_ = parameters.getParameter<double>("plotJetMaxEta");
63  theBarrelRecHitTag_ = parameters.getParameter<InputTag>("barrelRecHitTag");
64  theEndcapRecHitTag_ = parameters.getParameter<InputTag>("endcapRecHitTag");
65  theBarrelRecHitToken_ = consumes<EcalRecHitCollection>(parameters.getParameter<InputTag>("barrelRecHitTag"));
66  theEndcapRecHitToken_ = consumes<EcalRecHitCollection>(parameters.getParameter<InputTag>("endcapRecHitTag"));
67 
68  // coverity says...
69  h_deltaEt_photon_jet = nullptr;
70  h_deltaPhi_jet_jet2 = nullptr;
71  h_deltaPhi_photon_jet = nullptr;
72  h_deltaPhi_photon_jet2 = nullptr;
73  h_deltaR_jet_jet2 = nullptr;
74  h_deltaR_photon_jet2 = nullptr;
75  h_jet2_eta = nullptr;
76  h_jet2_pt = nullptr;
77  h_jet2_ptOverPhotonEt = nullptr;
78  h_jet_count = nullptr;
79  h_jet_eta = nullptr;
80  h_jet_pt = nullptr;
81  h_photon_count_bar = nullptr;
82  h_photon_count_end = nullptr;
83  h_photon_et = nullptr;
84  h_photon_et_beforeCuts = nullptr;
85  h_photon_et_jetco = nullptr;
86  h_photon_et_jetcs = nullptr;
87  h_photon_et_jetfo = nullptr;
88  h_photon_et_jetfs = nullptr;
89  h_photon_eta = nullptr;
90  h_triggers_passed = nullptr;
91 }
92 
94 
96  logTraceName = "QcdPhotonAnalyzer";
97 
98  LogTrace(logTraceName) << "Parameters initialization";
99 
100  ibooker.setCurrentFolder("Physics/QcdPhotons"); // Use folder with name of PAG
101 
102  std::stringstream aStringStream;
103  std::string aString;
104  aStringStream << theMinJetPt_;
105  aString = aStringStream.str();
106 
107  // Monitor of triggers passed
108  int numOfTriggersToMonitor = thePlotTheseTriggersToo_.size();
109  h_triggers_passed = ibooker.book1D(
110  "triggers_passed", "Events passing these trigger paths", numOfTriggersToMonitor, 0, numOfTriggersToMonitor);
111  for (int i = 0; i < numOfTriggersToMonitor; i++) {
113  }
114 
115  // Keep the number of plots and number of bins to a minimum!
116  h_photon_et_beforeCuts = ibooker.book1D(
117  "photon_et_beforeCuts", "#gamma with highest E_{T};E_{T}(#gamma) (GeV)", 20, 0., thePlotPhotonMaxEt_);
118  h_photon_et =
119  ibooker.book1D("photon_et", "#gamma with highest E_{T};E_{T}(#gamma) (GeV)", 20, 0., thePlotPhotonMaxEt_);
120  h_photon_eta = ibooker.book1D(
121  "photon_eta", "#gamma with highest E_{T};#eta(#gamma)", 40, -thePlotPhotonMaxEta_, thePlotPhotonMaxEta_);
122  h_photon_count_bar = ibooker.book1D(
123  "photon_count_bar", "Number of #gamma's passing selection (Barrel);Number of #gamma's", 8, -0.5, 7.5);
124  h_photon_count_end = ibooker.book1D(
125  "photon_count_end", "Number of #gamma's passing selection (Endcap);Number of #gamma's", 8, -0.5, 7.5);
126  h_jet_pt =
127  ibooker.book1D("jet_pt",
128  "Jet with highest p_{T} (from " + theJetCollectionLabel_.label() + ");p_{T}(1^{st} jet) (GeV)",
129  20,
130  0.,
132  h_jet_eta = ibooker.book1D("jet_eta",
133  "Jet with highest p_{T} (from " + theJetCollectionLabel_.label() + ");#eta(1^{st} jet)",
134  20,
138  ibooker.book1D("deltaPhi_photon_jet",
139  "#Delta#phi between Highest E_{T} #gamma and jet;#Delta#phi(#gamma,1^{st} jet)",
140  20,
141  0,
142  3.1415926);
143  h_deltaPhi_jet_jet2 = ibooker.book1D("deltaPhi_jet_jet2",
144  "#Delta#phi between Highest E_{T} jet and 2^{nd} "
145  "jet;#Delta#phi(1^{st} jet,2^{nd} jet)",
146  20,
147  0,
148  3.1415926);
149  h_deltaEt_photon_jet = ibooker.book1D("deltaEt_photon_jet",
150  "(E_{T}(#gamma)-p_{T}(jet))/E_{T}(#gamma) when #Delta#phi(#gamma,1^{st} "
151  "jet) > 2.8;#DeltaE_{T}(#gamma,1^{st} jet)/E_{T}(#gamma)",
152  20,
153  -1.0,
154  1.0);
155  h_jet_count =
156  ibooker.book1D("jet_count",
157  "Number of " + theJetCollectionLabel_.label() + " (p_{T} > " + aString + " GeV);Number of Jets",
158  8,
159  -0.5,
160  7.5);
161  h_jet2_pt = ibooker.book1D(
162  "jet2_pt",
163  "Jet with 2^{nd} highest p_{T} (from " + theJetCollectionLabel_.label() + ");p_{T}(2^{nd} jet) (GeV)",
164  20,
165  0.,
167  h_jet2_eta =
168  ibooker.book1D("jet2_eta",
169  "Jet with 2^{nd} highest p_{T} (from " + theJetCollectionLabel_.label() + ");#eta(2^{nd} jet)",
170  20,
173  h_jet2_ptOverPhotonEt = ibooker.book1D(
174  "jet2_ptOverPhotonEt", "p_{T}(2^{nd} highest jet) / E_{T}(#gamma);p_{T}(2^{nd} Jet)/E_{T}(#gamma)", 20, 0.0, 4.0);
175  h_deltaPhi_photon_jet2 = ibooker.book1D("deltaPhi_photon_jet2",
176  "#Delta#phi between Highest E_{T} #gamma and 2^{nd} "
177  "highest jet;#Delta#phi(#gamma,2^{nd} jet)",
178  20,
179  0,
180  3.1415926);
181  h_deltaR_jet_jet2 = ibooker.book1D(
182  "deltaR_jet_jet2", "#DeltaR between Highest Jet and 2^{nd} Highest;#DeltaR(1^{st} jet,2^{nd} jet)", 30, 0, 6.0);
183  h_deltaR_photon_jet2 = ibooker.book1D("deltaR_photon_jet2",
184  "#DeltaR between Highest E_{T} #gamma and 2^{nd} "
185  "jet;#DeltaR(#gamma, 2^{nd} jet)",
186  30,
187  0,
188  6.0);
189 
190  // Photon Et for different jet configurations
191  Float_t bins_et[] = {15, 20, 30, 50, 80};
192  int num_bins_et = 4;
193  h_photon_et_jetcs = ibooker.book1D("photon_et_jetcs",
194  "#gamma with highest E_{T} (#eta(jet)<1.45, "
195  "#eta(#gamma)#eta(jet)>0);E_{T}(#gamma) (GeV)",
196  num_bins_et,
197  bins_et);
198  h_photon_et_jetco = ibooker.book1D("photon_et_jetco",
199  "#gamma with highest E_{T} (#eta(jet)<1.45, "
200  "#eta(#gamma)#eta(jet)<0);E_{T}(#gamma) (GeV)",
201  num_bins_et,
202  bins_et);
203  h_photon_et_jetfs = ibooker.book1D("photon_et_jetfs",
204  "#gamma with highest E_{T} (1.55<#eta(jet)<2.5, "
205  "#eta(#gamma)#eta(jet)>0);E_{T}(#gamma) (GeV)",
206  num_bins_et,
207  bins_et);
208  h_photon_et_jetfo = ibooker.book1D("photon_et_jetfo",
209  "#gamma with highest E_{T} (1.55<#eta(jet)<2.5, "
210  "#eta(#gamma)#eta(jet)<0);E_{T}(#gamma) (GeV)",
211  num_bins_et,
212  bins_et);
213 
214  auto setSumw2 = [](MonitorElement* me) {
215  if (me->getTH1F()->GetSumw2N() == 0) {
216  me->enableSumw2();
217  }
218  };
219 
220  setSumw2(h_photon_et_jetcs);
221  setSumw2(h_photon_et_jetco);
222  setSumw2(h_photon_et_jetfs);
223  setSumw2(h_photon_et_jetfo);
224 }
225 
226 void QcdPhotonsDQM::analyze(const Event& iEvent, const EventSetup& iSetup) {
227  LogTrace(logTraceName) << "Analysis of event # ";
228 
230  // Did event pass HLT paths?
231  Handle<TriggerResults> HLTresults;
232  iEvent.getByToken(trigTagToken_, HLTresults);
233  if (!HLTresults.isValid()) {
234  // LogWarning("") << ">>> TRIGGER collection does not exist !!!";
235  return;
236  }
237  const edm::TriggerNames& trigNames = iEvent.triggerNames(*HLTresults);
238 
239  bool passed_HLT = false;
240 
241  // See if event passed trigger paths
242  // increment that bin in the trigger plot
243  for (unsigned int i = 0; i < thePlotTheseTriggersToo_.size(); i++) {
244  passed_HLT = false;
245  for (unsigned int ti = 0; (ti < trigNames.size()) && !passed_HLT; ++ti) {
246  size_t pos = trigNames.triggerName(ti).find(thePlotTheseTriggersToo_[i]);
247  if (pos == 0)
248  passed_HLT = HLTresults->accept(ti);
249  }
250  if (passed_HLT)
252  }
253 
254  // grab photons
257 
258  // If photon collection is empty, exit
259  if (!photonCollection.isValid())
260  return;
261 
262  // Quit if the event did not pass the HLT path we care about
263  passed_HLT = false;
264  {
265  // bool found=false;
266  for (unsigned int ti = 0; ti < trigNames.size(); ++ti) {
267  size_t pos = trigNames.triggerName(ti).find(theTriggerPathToPass_);
268  if (pos == 0) {
269  passed_HLT = HLTresults->accept(ti);
270  // found=true;
271  break;
272  }
273  }
274 
275  // Assumption: reco photons are ordered by Et
276  for (PhotonCollection::const_iterator recoPhoton = photonCollection->begin(); recoPhoton != photonCollection->end();
277  recoPhoton++) {
278  // stop looping over photons once we get to too low Et
279  if (recoPhoton->et() < theMinPhotonEt_)
280  break;
281 
282  h_photon_et_beforeCuts->Fill(recoPhoton->et());
283  break; // leading photon only
284  }
285 
286  if (!passed_HLT) {
287  return;
288  }
289  }
290 
292 
293  // std::cout << "\tpassed main trigger (" << theTriggerPathToPass_ << ")" <<
294  // std::endl;
295 
297  // Does event have valid vertex?
298  // Get the primary event vertex
299  Handle<VertexCollection> vertexHandle;
300  iEvent.getByToken(theVertexCollectionToken_, vertexHandle);
301  VertexCollection vertexCollection = *(vertexHandle.product());
302  // double vtx_ndof = -1.0;
303  // double vtx_z = 0.0;
304  // bool vtx_isFake = true;
305  // if (vertexCollection.size()>0) {
306  // vtx_ndof = vertexCollection.begin()->ndof();
307  // vtx_z = vertexCollection.begin()->z();
308  // vtx_isFake = false;
309  //}
310  // if (vtx_isFake || fabs(vtx_z)>15 || vtx_ndof<4) return;
311 
312  int nvvertex = 0;
313  for (unsigned int i = 0; i < vertexCollection.size(); ++i) {
314  if (vertexCollection[i].isValid())
315  nvvertex++;
316  }
317  if (nvvertex == 0)
318  return;
319 
321 
322  // std::cout << "\tpassed vertex selection" << std::endl;
323 
325  // Did the event pass certain L1 Technical Trigger bits?
326  // It's probably beam halo
327  // TODO: ADD code
329 
330  // For finding spikes
331  Handle<EcalRecHitCollection> EBReducedRecHits;
332  iEvent.getByToken(theBarrelRecHitToken_, EBReducedRecHits);
333  Handle<EcalRecHitCollection> EEReducedRecHits;
334  iEvent.getByToken(theEndcapRecHitToken_, EEReducedRecHits);
335  EcalClusterLazyTools lazyTool(
337 
338  // Find the highest et "decent" photon
339  float photon_et = -9.0;
340  float photon_eta = -9.0;
341  float photon_phi = -9.0;
342  bool photon_passPhotonID = false;
343  bool found_lead_pho = false;
344  int photon_count_bar = 0;
345  int photon_count_end = 0;
346  // False Assumption: reco photons are ordered by Et
347  // find the photon with highest et
348  auto pho_maxet = std::max_element(
349  photonCollection->begin(),
350  photonCollection->end(),
351  [](const PhotonCollection::value_type& a, const PhotonCollection::value_type& b) { return a.et() < b.et(); });
352  if (pho_maxet != photonCollection->end() && pho_maxet->et() >= theMinPhotonEt_) {
353  /*
354  // Ignore ECAL Spikes
355  const reco::CaloClusterPtr seed = pho_maxet->superCluster()->seed();
356  DetId id = lazyTool.getMaximum(*seed).first; // Cluster shape variables
357  // float time = -999., outOfTimeChi2 = -999., chi2 = -999.; // UNUSED
358  int flags=-1, severity = -1;
359  const EcalRecHitCollection & rechits = ( pho_maxet->isEB() ?
360  *EBReducedRecHits : *EEReducedRecHits);
361  EcalRecHitCollection::const_iterator it = rechits.find( id );
362  if( it != rechits.end() ) {
363  // time = it->time(); // UNUSED
364  // outOfTimeChi2 = it->outOfTimeChi2(); // UNUSED
365  // chi2 = it->chi2(); // UNUSED
366  flags = it->recoFlag();
367 
368  edm::ESHandle<EcalSeverityLevelAlgo> sevlv;
369  iSetup.get<EcalSeverityLevelAlgoRcd>().get(sevlv);
370  severity = sevlv->severityLevel( id, rechits);
371  }
372  bool isNotSpike = ((pho_maxet->isEB() && (severity!=3 && severity!=4 ) &&
373  (flags != 2) ) || pho_maxet->isEE());
374  if (!isNotSpike) continue; // move on to next photon
375  // END of determining ECAL Spikes
376  */
377 
378  bool pho_current_passPhotonID = false;
379  bool pho_current_isEB = pho_maxet->isEB();
380  bool pho_current_isEE = pho_maxet->isEE();
381 
382  if (pho_current_isEB && (pho_maxet->sigmaIetaIeta() < 0.01 || pho_maxet->hadronicOverEm() < 0.05)) {
383  // Photon object in barrel passes photon ID
384  pho_current_passPhotonID = true;
385  photon_count_bar++;
386  } else if (pho_current_isEE && (pho_maxet->hadronicOverEm() < 0.05)) {
387  // Photon object in endcap passes photon ID
388  pho_current_passPhotonID = true;
389  photon_count_end++;
390  }
391 
392  if (!found_lead_pho) {
393  found_lead_pho = true;
394  photon_passPhotonID = pho_current_passPhotonID;
395  photon_et = pho_maxet->et();
396  photon_eta = pho_maxet->eta();
397  photon_phi = pho_maxet->phi();
398  }
399  }
400 
401  // If user requires a photon to be found, but none is, return.
402  // theRequirePhotonFound should pretty much always be set to 'True'
403  // except when running on qcd monte carlo just to see the jets.
404  if (theRequirePhotonFound_ && (!photon_passPhotonID || photon_et < theMinPhotonEt_))
405  return;
406 
408  // Find the highest et jet
411  if (!jetCollection.isValid())
412  return;
413 
414  float jet_pt = -8.0;
415  float jet_eta = -8.0;
416  float jet_phi = -8.0;
417  int jet_count = 0;
418  float jet2_pt = -9.0;
419  float jet2_eta = -9.0;
420  float jet2_phi = -9.0;
421  // Assumption: jets are ordered by Et
422  for (unsigned int i_jet = 0; i_jet < jetCollection->size(); i_jet++) {
423  const Jet* jet = &jetCollection->at(i_jet);
424 
425  float jet_current_pt = jet->pt();
426 
427  // don't care about jets that overlap with the lead photon
428  if (deltaR(jet->eta(), jet->phi(), photon_eta, photon_phi) < 0.5)
429  continue;
430  // stop looping over jets once we get to too low Et
431  if (jet_current_pt < theMinJetPt_)
432  break;
433 
434  jet_count++;
435  if (jet_current_pt > jet_pt) {
436  jet2_pt = jet_pt; // 2nd highest jet get's et from current highest
437  jet2_eta = jet_eta;
438  jet2_phi = jet_phi;
439  jet_pt = jet_current_pt; // current highest jet gets et from the new highest
440  jet_eta = jet->eta();
441  jet_phi = jet->phi();
442  } else if (jet_current_pt > jet2_pt) {
443  jet2_pt = jet_current_pt;
444  jet2_eta = jet->eta();
445  jet2_phi = jet->phi();
446  }
447  }
449 
451  // Fill histograms if a jet found
452  // NOTE: if a photon was required to be found, but wasn't
453  // we wouldn't have made it to this point in the code
454  if (jet_pt > 0.0) {
455  // Photon Plots
456  h_photon_et->Fill(photon_et);
457  h_photon_eta->Fill(photon_eta);
458  h_photon_count_bar->Fill(photon_count_bar);
459  h_photon_count_end->Fill(photon_count_end);
460 
461  // Photon Et hists for different orientations to the jet
462  if (fabs(photon_eta) < 1.45 && photon_passPhotonID) { // Lead photon is in barrel
463  if (fabs(jet_eta) < 1.45) { // jet is in barrel
464  if (photon_eta * jet_eta > 0) {
465  h_photon_et_jetcs->Fill(photon_et);
466  } else {
467  h_photon_et_jetco->Fill(photon_et);
468  }
469  } else if (jet_eta > 1.55 && jet_eta < 2.5) { // jet is in endcap
470  if (photon_eta * jet_eta > 0) {
471  h_photon_et_jetfs->Fill(photon_et);
472  } else {
473  h_photon_et_jetfo->Fill(photon_et);
474  }
475  }
476  } // END of Lead Photon is in Barrel
477 
478  // Jet Plots
479  h_jet_pt->Fill(jet_pt);
480  h_jet_eta->Fill(jet_eta);
481  h_jet_count->Fill(jet_count);
482  h_deltaPhi_photon_jet->Fill(abs(deltaPhi(photon_phi, jet_phi)));
483  if (abs(deltaPhi(photon_phi, jet_phi)) > 2.8)
484  h_deltaEt_photon_jet->Fill((photon_et - jet_pt) / photon_et);
485 
486  // 2nd Highest Jet Plots
487  if (jet2_pt > 0.0) {
488  h_jet2_pt->Fill(jet2_pt);
489  h_jet2_eta->Fill(jet2_eta);
490  h_jet2_ptOverPhotonEt->Fill(jet2_pt / photon_et);
491  h_deltaPhi_photon_jet2->Fill(abs(deltaPhi(photon_phi, jet2_phi)));
492  h_deltaPhi_jet_jet2->Fill(abs(deltaPhi(jet_phi, jet2_phi)));
493  h_deltaR_jet_jet2->Fill(deltaR(jet_eta, jet_phi, jet2_eta, jet2_phi));
494  h_deltaR_photon_jet2->Fill(deltaR(photon_eta, photon_phi, jet2_eta, jet2_phi));
495  }
496  }
497  // End of Filling histograms
499 }
500 
501 // Local Variables:
502 // show-trailing-whitespace: t
503 // truncate-lines: t
504 // End:
bool accept() const
Has at least one path accepted the event?
edm::EDGetTokenT< edm::View< reco::Jet > > theJetCollectionToken_
Definition: QcdPhotonsDQM.h:54
MonitorElement * h_photon_et
Definition: QcdPhotonsDQM.h:72
edm::InputTag theJetCollectionLabel_
Definition: QcdPhotonsDQM.h:51
double thePlotPhotonMaxEta_
Definition: QcdPhotonsDQM.h:60
MonitorElement * h_photon_eta
Definition: QcdPhotonsDQM.h:73
const bool isValid(const Frame &aFrame, const FrameQuality &aQuality, const uint16_t aExpectedPos)
MonitorElement * h_photon_count_bar
Definition: QcdPhotonsDQM.h:74
edm::EDGetTokenT< edm::TriggerResults > trigTagToken_
Definition: QcdPhotonsDQM.h:52
double thePlotJetMaxEta_
Definition: QcdPhotonsDQM.h:61
MonitorElement * h_photon_et_jetco
Definition: QcdPhotonsDQM.h:90
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::vector< std::string > thePlotTheseTriggersToo_
Definition: QcdPhotonsDQM.h:50
edm::EDGetTokenT< reco::VertexCollection > theVertexCollectionToken_
Definition: QcdPhotonsDQM.h:55
double theMinPhotonEt_
Definition: QcdPhotonsDQM.h:57
double theMinJetPt_
Definition: QcdPhotonsDQM.h:56
MonitorElement * h_deltaR_jet_jet2
Definition: QcdPhotonsDQM.h:86
T const * product() const
Definition: Handle.h:70
std::string logTraceName
Definition: QcdPhotonsDQM.h:46
MonitorElement * h_deltaR_photon_jet2
Definition: QcdPhotonsDQM.h:87
MonitorElement * h_photon_et_jetfs
Definition: QcdPhotonsDQM.h:91
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
MonitorElement * h_deltaEt_photon_jet
Definition: QcdPhotonsDQM.h:81
MonitorElement * h_jet_count
Definition: QcdPhotonsDQM.h:78
std::string const & label() const
Definition: InputTag.h:36
MonitorElement * h_jet_eta
Definition: QcdPhotonsDQM.h:77
#define LogTrace(id)
QcdPhotonsDQM(const edm::ParameterSet &)
Constructor.
double thePlotPhotonMaxEt_
Definition: QcdPhotonsDQM.h:59
void Fill(long long x)
MonitorElement * h_photon_et_jetfo
Definition: QcdPhotonsDQM.h:92
MonitorElement * h_jet2_ptOverPhotonEt
Definition: QcdPhotonsDQM.h:82
ESData get(edm::EventSetup const &eventSetup) const
MonitorElement * h_photon_et_jetcs
Definition: QcdPhotonsDQM.h:89
int iEvent
Definition: GenABIO.cc:224
Definition: Jet.py:1
MonitorElement * h_jet2_pt
Definition: QcdPhotonsDQM.h:83
MonitorElement * h_photon_et_beforeCuts
Definition: QcdPhotonsDQM.h:71
MonitorElement * h_jet_pt
Definition: QcdPhotonsDQM.h:76
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
edm::EDGetTokenT< EcalRecHitCollection > theBarrelRecHitToken_
Definition: QcdPhotonsDQM.h:65
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
bool theRequirePhotonFound_
Definition: QcdPhotonsDQM.h:58
MonitorElement * h_photon_count_end
Definition: QcdPhotonsDQM.h:75
static const char *const trigNames[]
Definition: EcalDumpRaw.cc:57
std::string theTriggerPathToPass_
Definition: QcdPhotonsDQM.h:49
MonitorElement * h_jet2_eta
Definition: QcdPhotonsDQM.h:84
MonitorElement * h_deltaPhi_photon_jet2
Definition: QcdPhotonsDQM.h:85
double b
Definition: hdecay.h:118
bool isValid() const
Definition: HandleBase.h:70
EcalClusterLazyTools::ESGetTokens ecalClusterToolsESGetTokens_
Definition: QcdPhotonsDQM.h:67
fixed size matrix
HLT enums.
double a
Definition: hdecay.h:119
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
MonitorElement * h_triggers_passed
Definition: QcdPhotonsDQM.h:70
edm::EDGetTokenT< reco::PhotonCollection > thePhotonCollectionToken_
Definition: QcdPhotonsDQM.h:53
MonitorElement * h_deltaPhi_jet_jet2
Definition: QcdPhotonsDQM.h:80
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
MonitorElement * h_deltaPhi_photon_jet
Definition: QcdPhotonsDQM.h:79
void analyze(const edm::Event &, const edm::EventSetup &) override
Get the analysis.
edm::EDGetTokenT< EcalRecHitCollection > theEndcapRecHitToken_
Definition: QcdPhotonsDQM.h:66
Definition: Run.h:45
~QcdPhotonsDQM() override
Destructor.