CMS 3D CMS Logo

MuonIsolationDQM.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // MuonIsolationDQM.cc
3 // Package: Muon Isolation DQM
4 // Class: MuonIsolationDQM
5 //
6 /*
7 
8  Description: Muon Isolation DQM class
9 
10  Implementation: This code will accept a data set and generate plots of
11  various quantities relevent to the Muon Isolation module. We will
12  be using the IsoDeposit class, *not* the MuonIsolation struct.
13 
14  The sequence of events is...
15  * initalize statics (which variables to plot, axis limtis, etc.)
16  * run over events
17  * for each event, run over the muons in that event
18  *record IsoDeposit data
19  * transfer data to histograms, profile plots
20  * save histograms to a root file
21 */
22 //#define DEBUG
23 
24 //Class header file
26 
27 //System included files
28 #include <memory>
29 #include <string>
30 #include <typeinfo>
31 #include <utility>
32 
33 //Root included files
34 #include "TH1.h"
35 #include "TH2.h"
36 #include "TProfile.h"
37 
38 //Event framework included files
42 
43 //Other included files
44 
45 //Using declarations
46 using std::pair;
47 using std::string;
48 using std::vector;
49 
50 using namespace std;
51 //
52 //-----------------Constructors---------------------
53 //
54 
56 #ifdef DEBUG
57  cout << " Initialise Constructor " << endl;
58 #endif
59  requireSTAMuon = iConfig.getUntrackedParameter<bool>("requireSTAMuon");
60  requireTRKMuon = iConfig.getUntrackedParameter<bool>("requireTRKMuon");
61  requireGLBMuon = iConfig.getUntrackedParameter<bool>("requireGLBMuon");
62  dirName = iConfig.getParameter<std::string>("directory");
63 
64  //--------Initialize tags-------
65  theMuonCollectionLabel_ =
66  consumes<edm::View<reco::Muon> >(iConfig.getUntrackedParameter<edm::InputTag>("Global_Muon_Label"));
67  theVertexCollectionLabel_ =
68  consumes<reco::VertexCollection>(iConfig.getUntrackedParameter<edm::InputTag>("vertexLabel"));
69 
70  //-------Initialize Counterse----------------
71  nEvents = 0;
72  nSTAMuons = 0;
73  nTRKMuons = 0;
74  nGLBMuons = 0;
75 
76  InitStatics();
77 
78  //------"allocate" space for the data vectors-------
79  h_1D.resize(NUM_VARS);
80  h_2D.resize(NUM_VARS_2D);
81  h_1D_NVTX.resize(NUM_VARS_NVTX);
82 }
83 
84 //
85 //----------Destructor-----------------
86 //
88 #ifdef DEBUG
89  cout << "Calling destructor" << endl;
90 #endif
91  //Deallocate memory
92 }
93 
94 //
95 //------------Methods-----------------------
96 //
98 #ifdef DEBUG
99  cout << " InitStatistics() " << endl;
100 #endif
101  //-----------Initialize primitives-----------
102  S_BIN_WIDTH = 1.0; //in GeV
103  L_BIN_WIDTH = 2.0; //in GeV
104  LOG_BINNING_ENABLED = 1;
105  NUM_LOG_BINS = 15;
106  LOG_BINNING_RATIO = 1.1;
107  //ratio by which each bin is wider than the last for log binning
108  //i.e. bin widths are (x), (r*x), (r^2*x), ..., (r^(nbins)*x)
109 
110  //-------Initialize Titles---------
111  title_sam = ""; //"[Sample b-jet events] ";
112  title_cone = ""; //" [in R=0.3 IsoDeposit Cone]";
113  //The above two pieces of info will be printed on the title of the whole page,
114  //not for each individual histogram
115  // title_cd = "C.D. of ";
116 
117  //-------"Allocate" memory for vectors
118  main_titles.resize(NUM_VARS);
119  axis_titles.resize(NUM_VARS);
120  names.resize(NUM_VARS);
121  param.resize(NUM_VARS, vector<double>(3));
122  isContinuous.resize(NUM_VARS);
123 
124  titles_2D.resize(NUM_VARS_2D);
125  names_2D.resize(NUM_VARS_2D);
126 
127  main_titles_NVtxs.resize(NUM_VARS_NVTX);
128  axis_titles_NVtxs.resize(NUM_VARS_NVTX);
129  names_NVtxs.resize(NUM_VARS_NVTX);
130 
131 #ifdef DEBUG
132  cout << "InitStatistics(): vectors resized " << endl;
133 #endif
134  //-----Titles of the plots-----------
135  main_titles[0] = "Total Tracker Momentum, #Delta R = 0.3";
136  main_titles[1] = "Total EM Cal Energy, #Delta R = 0.3";
137  main_titles[2] = "Total Had Cal Energy, #Delta R = 0.3";
138  main_titles[3] = "Total HO Cal Energy, #Delta R = 0.3";
139  main_titles[4] = "Number of Tracker Tracks, #Delta R = 0.3";
140  main_titles[5] = "Number of Jets around Muon, #Delta R = 0.3";
141  main_titles[6] = "Tracker p_{T} within veto cone, #Delta R = 0.3";
142  main_titles[7] = "EM E_{T} within veto cone, #Delta R = 0.3";
143  main_titles[8] = "Had E_{T} within veto cone, #Delta R = 0.3";
144  main_titles[9] = "HO E_{T} within veto cone, #Delta R = 0.3";
145  main_titles[10] = "Average Momentum per Track, #Delta R = 0.3";
146  main_titles[11] = "Weighted Energy, #Delta R = 0.3";
147 
148  main_titles[12] = "Total Tracker Momentum, #Delta R = 0.5";
149  main_titles[13] = "Total EM Cal Energy, #Delta R = 0.5";
150  main_titles[14] = "Total Had Cal Energy, #Delta R = 0.5";
151  main_titles[15] = "Total HO Cal Energy, #Delta R = 0.5";
152  main_titles[16] = "Number of Tracker Tracks, #Delta R = 0.5";
153  main_titles[17] = "Number of Jets around Muon, #Delta R = 0.5";
154  main_titles[18] = "Tracker p_{T} within veto cone, #Delta R = 0.5";
155  main_titles[19] = "EM E_{T} within veto cone, #Delta R = 0.5";
156  main_titles[20] = "Had E_{T} within veto cone, #Delta R = 0.5";
157  main_titles[21] = "HO E_{T} within veto cone, #Delta R = 0.5";
158  main_titles[22] = "Average Momentum per Track, #Delta R = 0.5";
159  main_titles[23] = "Weighted Energy, #Delta R = 0.5";
160 
161  main_titles[24] = "Relative Detector-Based Isolation, #Delta R = 0.3";
162  main_titles[25] = "Relative Detector-Based Isolation, #Delta R = 0.5";
163 
164  //-----Titles of the plots-----------
165  main_titles[26] = "Sum PF Charged Hadron Pt, #Delta R = 0.3";
166  main_titles[27] = "Sum PF Neutral Hadron Pt, #Delta R = 0.3";
167  main_titles[28] = "Sum PF Photon Et, #Delta R = 0.3";
168  main_titles[29] = "Sum PF Neutral Hadron Pt (Higher Pt threshold), #Delta R = 0.3";
169  main_titles[30] = "Sum PF Photon Et (Higher Pt threshold), #Delta R = 0.3";
170  main_titles[31] = "Sum PF Charged Particles Pt not from PV (for Pu corrections), #Delta R = 0.3";
171 
172  //-----Titles of the plots-----------
173  main_titles[32] = "Sum PF Charged Hadron Pt, #Delta R = 0.4";
174  main_titles[33] = "Sum PF Neutral Hadron Pt, #Delta R = 0.4";
175  main_titles[34] = "Sum PF Photon Et, #Delta R = 0.4";
176  main_titles[35] = "Sum PF Neutral Hadron Pt (Higher Pt threshold), #Delta R = 0.4";
177  main_titles[36] = "Sum PF Photon Et (Higher Pt threshold), #Delta R = 0.4";
178  main_titles[37] = "Sum PF Charged Particles Pt not from PV (for Pu corrections), #Delta R = 0.4";
179 
180  main_titles[38] = "Relative PF Isolation, #Delta R = 0.3";
181  main_titles[39] = "Relative PF Isolation, #Delta R = 0.4";
182 
183  main_titles[40] = "Relative PF Isolation (Higher Pt threshold), #Delta R = 0.3";
184  main_titles[41] = "Relative PF Isolation (Higher Pt threshold), #Delta R = 0.4";
185 
186  main_titles[42] = "Sum DR Isolation Profile for Charged Hadron, #Delta R = 0.4";
187 
188  main_titles[43] = "Sum DR Isolation Profile for Neutral Hadron, #Delta R = 0.4";
189 
190  main_titles[44] = "Sum DR Isolation Profile for Photon, #Delta R = 0.4";
191 
192  main_titles[45] = "Mean DR Isolation Profile for Charged Hadron, #Delta R = 0.4";
193 
194  main_titles[46] = "Mean DR Isolation Profile for Neutral Hadron, #Delta R = 0.4";
195 
196  main_titles[47] = "Mean DR Isolation Profile for Photon, #Delta R = 0.4";
197 
198 #ifdef DEBUG
199  cout << "InitStatistics(): main titles 1D DONE " << endl;
200 #endif
201  titles_2D[0] = "Total Tracker Momentum, #Delta R = 0.3";
202  titles_2D[1] = "Total EM Cal Energy, #Delta R = 0.3";
203  titles_2D[2] = "Total Had Cal Energy, #Delta R = 0.3";
204  titles_2D[3] = "Total HO Cal Energy, #Delta R = 0.3";
205  titles_2D[4] = "Sum PF Charged Hadron Pt, #Delta R = 0.4";
206  titles_2D[5] = "Sum PF Neutral Hadron Pt, #Delta R = 0.4";
207  titles_2D[6] = "Sum PF Photon Et, #Delta R = 0.4";
208  titles_2D[7] = "Sum PF Charged Pt Not from PV, #Delta R = 0.4";
209  titles_2D[8] = "Relative Detector-Based Isolation, #Delta R = 0.4";
210  titles_2D[9] = "Relative PF Isolation, #Delta R = 0.4";
211 
212  main_titles_NVtxs[0] = "Sum PF Neutral Hadron Pt, #DeltaR = 0.4 ( 0 < N_{Vtx} < 15)";
213  main_titles_NVtxs[1] = "Sum PF Neutral Hadron Pt, #DeltaR = 0.4 (15 < N_{Vtx} < 30)";
214  main_titles_NVtxs[2] = "Sum PF Neutral Hadron Pt, #DeltaR = 0.4 (30 < N_{Vtx})";
215  main_titles_NVtxs[3] = "Sum PF Photon Et, #DeltaR = 0.4 ( 0 < N_{Vtx} < 15)";
216  main_titles_NVtxs[4] = "Sum PF Photon Et, #DeltaR = 0.4 (15 < N_{Vtx} < 30)";
217  main_titles_NVtxs[5] = "Sum PF Photon Et, #DeltaR = 0.4 (30 < N_{Vtx})";
218 
219 #ifdef DEBUG
220  cout << "InitStatistics(): main titles 2D DONE " << endl;
221 #endif
222 
223  //------Titles on the X or Y axis------------
224  axis_titles[0] = "#Sigma p_{T} (GeV)";
225  axis_titles[1] = "#Sigma E_{T}^{EM} (GeV)";
226  axis_titles[2] = "#Sigma E_{T}^{Had} (GeV)";
227  axis_titles[3] = "#Sigma E_{T}^{HO} (GeV)";
228  axis_titles[4] = "N_{Tracks}";
229  axis_titles[5] = "N_{Jets}";
230  axis_titles[6] = "#Sigma p_{T,veto} (GeV)";
231  axis_titles[7] = "#Sigma E_{T,veto}^{EM} (GeV)";
232  axis_titles[8] = "#Sigma E_{T,veto}^{Had} (GeV)";
233  axis_titles[9] = "#Sigma E_{T,veto}^{HO} (GeV)";
234  axis_titles[10] = "#Sigma p_{T} / N_{Tracks} (GeV)";
235  axis_titles[11] = "(1.5) X #Sigma E_{T}^{EM} + #Sigma E_{T}^{Had}";
236 
237  axis_titles[12] = "#Sigma p_{T} (GeV)";
238  axis_titles[13] = "#Sigma E_{T}^{EM} (GeV)";
239  axis_titles[14] = "#Sigma E_{T}^{Had} (GeV)";
240  axis_titles[15] = "#Sigma E_{T}^{HO} (GeV)";
241  axis_titles[16] = "N_{Tracks}";
242  axis_titles[17] = "N_{Jets}";
243  axis_titles[18] = "#Sigma p_{T,veto} (GeV)";
244  axis_titles[19] = "#Sigma E_{T,veto}^{EM} (GeV)";
245  axis_titles[20] = "#Sigma E_{T,veto}^{Had} (GeV)";
246  axis_titles[21] = "#Sigma E_{T,veto}^{HO} (GeV)";
247  axis_titles[22] = "#Sigma p_{T} / N_{Tracks} (GeV)";
248  axis_titles[23] = "(1.5) X #Sigma E_{T}^{EM} + #Sigma E_{T}^{Had}";
249 
250  axis_titles[24] = "(#Sigma Tk p_{T} + #Sigma ECAL p_{T} + #Sigma HCAL p_{T})/ Mu p_{T} (GeV)";
251  axis_titles[25] = "(#Sigma Tk p_{T} + #Sigma ECAL p_{T} + #Sigma HCAL p_{T})/ Mu p_{T} (GeV)";
252 
253  axis_titles[26] = "#Sigma PFCharged p_{T}";
254  axis_titles[27] = "#Sigma PFNeutral p_{T}";
255  axis_titles[28] = "#Sigma PFPhoton p_{T}";
256  axis_titles[29] = "#Sigma PFNeutral p_{T}";
257  axis_titles[30] = "#Sigma PFPhoton p_{T}";
258  axis_titles[31] = "#Sigma PFCharged p_{T}";
259 
260  axis_titles[32] = "#Sigma PFCharged p_{T}";
261  axis_titles[33] = "#Sigma PFNeutral p_{T}";
262  axis_titles[34] = "#Sigma PFPhoton p_{T}";
263  axis_titles[35] = "#Sigma PFNeutral p_{T}";
264  axis_titles[36] = "#Sigma PFPhoton p_{T}";
265  axis_titles[37] = "#Sigma PFCharged p_{T}";
266 
267  axis_titles[38] = "(#Sigma PFCharged p_{T} + #Sigma PFNeutral p_{T} + #Sigma PFPhoton p_{T}) Mu p_{T} (GeV)";
268  axis_titles[39] = "(#Sigma PFCharged p_{T} + #Sigma PFNeutral p_{T} + #Sigma PFPhoton p_{T}) Mu p_{T} (GeV)";
269  axis_titles[40] = "(#Sigma PFCharged p_{T} + #Sigma PFNeutral p_{T} + #Sigma PFPhoton p_{T}) Mu p_{T} (GeV)";
270  axis_titles[41] = "(#Sigma PFCharged p_{T} + #Sigma PFNeutral p_{T} + #Sigma PFPhoton p_{T}) Mu p_{T} (GeV)";
271 
272  axis_titles[42] = "#Sigma DR PFCharged";
273  axis_titles[43] = "#Sigma DR PFNeutral";
274  axis_titles[44] = "#Sigma DR PFPhoton";
275 
276  axis_titles[45] = "Mean DR PFCharged";
277  axis_titles[46] = "Mean DR PFNeutral";
278  axis_titles[47] = "Mean DR PFPhoton";
279 
280  axis_titles_NVtxs[0] = "#Sigma PFNeutral p_{T}";
281  axis_titles_NVtxs[1] = "#Sigma PFNeutral p_{T}";
282  axis_titles_NVtxs[2] = "#Sigma PFNeutral p_{T}";
283  axis_titles_NVtxs[3] = "#Sigma PFPhoton p_{T}";
284  axis_titles_NVtxs[4] = "#Sigma PFPhoton p_{T}";
285  axis_titles_NVtxs[5] = "#Sigma PFPhoton p_{T}";
286 
287 #ifdef DEBUG
288  cout << "InitStatistics(): main titles 1D DONE " << endl;
289 #endif
290 
291  //-----------Names given for the root file----------
292  names[0] = "sumPt_R03";
293  names[1] = "emEt_R03";
294  names[2] = "hadEt_R03";
295  names[3] = "hoEt_R03";
296  names[4] = "nTracks_R03";
297  names[5] = "nJets_R03";
298  names[6] = "trackerVetoPt_R03";
299  names[7] = "emVetoEt_R03";
300  names[8] = "hadVetoEt_R03";
301  names[9] = "hoVetoEt_R03";
302  names[10] = "avgPt_R03";
303  names[11] = "weightedEt_R03";
304 
305  names[12] = "sumPt_R05";
306  names[13] = "emEt_R05";
307  names[14] = "hadEt_R05";
308  names[15] = "hoEt_R05";
309  names[16] = "nTracks_R05";
310  names[17] = "nJets_R05";
311  names[18] = "trackerVetoPt_R05";
312  names[19] = "emVetoEt_R05";
313  names[20] = "hadVetoEt_R05";
314  names[21] = "hoVetoEt_R05";
315  names[22] = "avgPt_R05";
316  names[23] = "weightedEt_R05";
317 
318  names[24] = "relDetIso_R03";
319  names[25] = "relDetIso_R05";
320 
321  names[26] = "pfChargedPt_R03";
322  names[27] = "pfNeutralPt_R03";
323  names[28] = "pfPhotonPt_R03";
324  names[29] = "pfNeutralPt_HT_R03";
325  names[30] = "pfPhotonPt_HT_R03";
326  names[31] = "pfChargedPt_PU_R03";
327 
328  names[32] = "pfChargedPt_R04";
329  names[33] = "pfNeutralPt_R04";
330  names[34] = "pfPhotonPt_R04";
331  names[35] = "pfNeutralPt_HT_R04";
332  names[36] = "pfPhotonPt_HT_R04";
333  names[37] = "pfChargedPt_PU_R04";
334 
335  names[38] = "relPFIso_R03";
336  names[39] = "relPFIso_R04";
337 
338  names[40] = "relPFIso_HT_R03";
339  names[41] = "relPFIso_HT_R04";
340 
341  names[42] = "SumDR_PFCharged_R04";
342  names[43] = "SumDR_PFNeutral_R04";
343  names[44] = "SumDR_PFPhoton_R04";
344 
345  names[45] = "MeanDR_PFCharged_R04";
346  names[46] = "MeanDR_PFNeutral_R04";
347  names[47] = "MeanDR_PFPhoton_R04";
348 
349 #ifdef DEBUG
350  cout << "InitStatistics(): names 1D DONE " << endl;
351 #endif
352 
353  names_2D[0] = "SumPt_R03";
354  names_2D[1] = "emEt_R03";
355  names_2D[2] = "hadEt_R03";
356  names_2D[3] = "hoEt_R03";
357  names_2D[4] = "pfChargedPt_R04";
358  names_2D[5] = "pfNeutralPt_R04";
359  names_2D[6] = "pfPhotonPt_R04";
360  names_2D[7] = "pfChargedPUPt_R04";
361  names_2D[8] = "relDetIso_R03";
362  names_2D[9] = "relPFIso_R04";
363 
364 #ifdef DEBUG
365  cout << "InitStatistics(): names 2D DONE " << endl;
366 #endif
367 
368  names_NVtxs[0] = "pfNeutralPt_R04_PV0to15";
369  names_NVtxs[1] = "pfNeutralPt_R04_PV15to30";
370  names_NVtxs[2] = "pfNeutralPt_R04_PV30toInf";
371  names_NVtxs[3] = "pfPhotonPt_R04_PV0to15";
372  names_NVtxs[4] = "pfPhotonPt_R04_PV15to30";
373  names_NVtxs[5] = "pfPhotonPt_R04_PV30toInf";
374 
375  //----------Parameters for binning of histograms---------
376  //param[var][0] is the number of bins
377  //param[var][1] is the low edge of the low bin
378  //param[var][2] is the high edge of the high bin
379  //
380  // maximum value------,
381  // |
382  // V
383  param[0][0] = (int)(20.0 / S_BIN_WIDTH);
384  param[0][1] = 0.0;
385  param[0][2] = param[0][0] * S_BIN_WIDTH;
386  param[1][0] = (int)(20.0 / S_BIN_WIDTH);
387  param[1][1] = 0.0;
388  param[1][2] = param[1][0] * S_BIN_WIDTH;
389  param[2][0] = (int)(20.0 / S_BIN_WIDTH);
390  param[2][1] = 0.0;
391  param[2][2] = param[2][0] * S_BIN_WIDTH;
392  param[3][0] = 20;
393  param[3][1] = 0.0;
394  param[3][2] = 2.0;
395  param[4][0] = 16;
396  param[4][1] = -0.5;
397  param[4][2] = param[4][0] - 0.5;
398  param[5][0] = 4;
399  param[5][1] = -0.5;
400  param[5][2] = param[5][0] - 0.5;
401  param[6][0] = (int)(40.0 / S_BIN_WIDTH);
402  param[6][1] = 0.0;
403  param[6][2] = param[6][0] * S_BIN_WIDTH;
404  param[7][0] = 20;
405  param[7][1] = 0.0;
406  param[7][2] = 10.0;
407  param[8][0] = (int)(20.0 / S_BIN_WIDTH);
408  param[8][1] = 0.0;
409  param[8][2] = param[8][0] * S_BIN_WIDTH;
410  param[9][0] = 20;
411  param[9][1] = 0.0;
412  param[9][2] = 5.0;
413  param[10][0] = (int)(15.0 / S_BIN_WIDTH);
414  param[10][1] = 0.0;
415  param[10][2] = param[10][0] * S_BIN_WIDTH;
416  param[11][0] = (int)(20.0 / S_BIN_WIDTH);
417  param[11][1] = 0.0;
418  param[11][2] = param[11][0] * S_BIN_WIDTH;
419 
420  param[12][0] = (int)(20.0 / S_BIN_WIDTH);
421  param[12][1] = 0.0;
422  param[12][2] = param[12][0] * S_BIN_WIDTH;
423  param[13][0] = (int)(20.0 / S_BIN_WIDTH);
424  param[13][1] = 0.0;
425  param[13][2] = param[13][0] * S_BIN_WIDTH;
426  param[14][0] = (int)(20.0 / S_BIN_WIDTH);
427  param[14][1] = 0.0;
428  param[14][2] = param[14][0] * S_BIN_WIDTH;
429  param[15][0] = 20;
430  param[15][1] = 0.0;
431  param[15][2] = 2.0;
432  param[16][0] = 16;
433  param[16][1] = -0.5;
434  param[16][2] = param[16][0] - 0.5;
435  param[17][0] = 4;
436  param[17][1] = -0.5;
437  param[17][2] = param[17][0] - 0.5;
438  param[18][0] = (int)(40.0 / S_BIN_WIDTH);
439  param[18][1] = 0.0;
440  param[18][2] = param[18][0] * S_BIN_WIDTH;
441  param[19][0] = 20;
442  param[19][1] = 0.0;
443  param[19][2] = 10.0;
444  param[20][0] = (int)(20.0 / S_BIN_WIDTH);
445  param[20][1] = 0.0;
446  param[20][2] = param[20][0] * S_BIN_WIDTH;
447  param[21][0] = 20;
448  param[21][1] = 0.0;
449  param[21][2] = 5.0;
450  param[22][0] = (int)(15.0 / S_BIN_WIDTH);
451  param[22][1] = 0.0;
452  param[22][2] = param[22][0] * S_BIN_WIDTH;
453  param[23][0] = (int)(20.0 / S_BIN_WIDTH);
454  param[23][1] = 0.0;
455  param[23][2] = param[23][0] * S_BIN_WIDTH;
456 
457  param[24][0] = 50;
458  param[24][1] = 0.0;
459  param[24][2] = 1.0;
460  param[25][0] = 50;
461  param[25][1] = 0.0;
462  param[25][2] = 1.0;
463 
464  param[26][0] = (int)(20.0 / S_BIN_WIDTH);
465  param[26][1] = 0.0;
466  param[26][2] = param[26][0] * S_BIN_WIDTH;
467  param[27][0] = (int)(20.0 / S_BIN_WIDTH);
468  param[27][1] = 0.0;
469  param[27][2] = param[27][0] * S_BIN_WIDTH;
470  param[28][0] = (int)(20.0 / S_BIN_WIDTH);
471  param[28][1] = 0.0;
472  param[28][2] = param[28][0] * S_BIN_WIDTH;
473  param[29][0] = (int)(20.0 / S_BIN_WIDTH);
474  param[29][1] = 0.0;
475  param[29][2] = param[29][0] * S_BIN_WIDTH;
476  param[30][0] = (int)(20.0 / S_BIN_WIDTH);
477  param[30][1] = 0.0;
478  param[30][2] = param[30][0] * S_BIN_WIDTH;
479  param[31][0] = (int)(20.0 / S_BIN_WIDTH);
480  param[31][1] = 0.0;
481  param[31][2] = param[31][0] * S_BIN_WIDTH;
482 
483  param[32][0] = (int)(20.0 / S_BIN_WIDTH);
484  param[32][1] = 0.0;
485  param[32][2] = param[32][0] * S_BIN_WIDTH;
486  param[33][0] = (int)(20.0 / S_BIN_WIDTH);
487  param[33][1] = 0.0;
488  param[33][2] = param[33][0] * S_BIN_WIDTH;
489  param[34][0] = (int)(20.0 / S_BIN_WIDTH);
490  param[34][1] = 0.0;
491  param[34][2] = param[34][0] * S_BIN_WIDTH;
492  param[35][0] = (int)(20.0 / S_BIN_WIDTH);
493  param[35][1] = 0.0;
494  param[35][2] = param[35][0] * S_BIN_WIDTH;
495  param[36][0] = (int)(20.0 / S_BIN_WIDTH);
496  param[36][1] = 0.0;
497  param[36][2] = param[36][0] * S_BIN_WIDTH;
498  param[37][0] = (int)(20.0 / S_BIN_WIDTH);
499  param[37][1] = 0.0;
500  param[37][2] = param[37][0] * S_BIN_WIDTH;
501 
502  param[38][0] = 50;
503  param[38][1] = 0.0;
504  param[38][2] = 1.0;
505  param[39][0] = 50;
506  param[39][1] = 0.0;
507  param[39][2] = 1.0;
508 
509  param[40][0] = 50;
510  param[40][1] = 0.0;
511  param[40][2] = 1.0;
512  param[41][0] = 50;
513  param[41][1] = 0.0;
514  param[41][2] = 1.0;
515 
516  param[42][0] = 50;
517  param[42][1] = 0.0;
518  param[42][2] = 5;
519  param[43][0] = 50;
520  param[43][1] = 0.0;
521  param[43][2] = 5;
522  param[44][0] = 50;
523  param[44][1] = 0.0;
524  param[44][2] = 5;
525 
526  param[45][0] = 50;
527  param[45][1] = 0.0;
528  param[45][2] = 0.4;
529  param[46][0] = 50;
530  param[46][1] = 0.0;
531  param[46][2] = 0.4;
532  param[47][0] = 50;
533  param[47][1] = 0.0;
534  param[47][2] = 0.4;
535 
536  //--------------Is the variable continuous (i.e. non-integer)?-------------
537  //---------(Log binning will only be used for continuous variables)--------
538  isContinuous[0] = 1;
539  isContinuous[1] = 1;
540  isContinuous[2] = 1;
541  isContinuous[3] = 1;
542  isContinuous[4] = 0;
543  isContinuous[5] = 0;
544  isContinuous[6] = 1;
545  isContinuous[7] = 1;
546  isContinuous[8] = 1;
547  isContinuous[9] = 1;
548  isContinuous[10] = 1;
549  isContinuous[11] = 1;
550 
551  isContinuous[12] = 1;
552  isContinuous[13] = 1;
553  isContinuous[14] = 1;
554  isContinuous[15] = 1;
555  isContinuous[16] = 0;
556  isContinuous[17] = 0;
557  isContinuous[18] = 1;
558  isContinuous[19] = 1;
559  isContinuous[20] = 1;
560  isContinuous[21] = 1;
561  isContinuous[22] = 1;
562  isContinuous[23] = 1;
563 
564  isContinuous[24] = 1;
565  isContinuous[25] = 1;
566  isContinuous[26] = 1;
567  isContinuous[27] = 1;
568  isContinuous[28] = 1;
569  isContinuous[29] = 1;
570  isContinuous[30] = 1;
571  isContinuous[31] = 1;
572  isContinuous[32] = 1;
573  isContinuous[33] = 1;
574  isContinuous[34] = 1;
575  isContinuous[35] = 1;
576  isContinuous[36] = 1;
577  isContinuous[37] = 1;
578  isContinuous[38] = 1;
579  isContinuous[39] = 1;
580  isContinuous[40] = 1;
581  isContinuous[41] = 1;
582  isContinuous[42] = 1;
583  isContinuous[43] = 1;
584  isContinuous[44] = 1;
585  isContinuous[45] = 1;
586  isContinuous[46] = 1;
587  isContinuous[47] = 1;
588 
589 #ifdef DEBUG
590  cout << "InitStatistics(): DONE " << endl;
591 #endif
592 }
593 
594 // ------------ method called for each event ------------
596  ++nEvents;
597  edm::LogInfo("Tutorial") << "\nInvestigating event #" << nEvents << "\n";
598 #ifdef DEBUG
599  cout << "[MuonIsolationDQM]: analyze()" << endl;
600 #endif
601 
602  // Get Muon Collection
604  iEvent.getByToken(theMuonCollectionLabel_, muons);
605 
606 #ifdef DEBUG
607  cout << "[MuonIsolationDQM]: Number of muons -> " << muons->size() << endl;
608 #endif
609 
610  int theMuonData = muons->size();
611  h_nMuons->Fill(theMuonData);
612 #ifdef DEBUG
613  cout << "[MuonIsolationDQM]: Vertex is Valid" << endl;
614 #endif
615 
616  //Get Vertex Information
617  int _numPV = 0;
619  iEvent.getByToken(theVertexCollectionLabel_, vertexHandle);
620 
621  if (vertexHandle.isValid()) {
622  reco::VertexCollection vertex = *(vertexHandle.product());
623  for (reco::VertexCollection::const_iterator v = vertex.begin(); v != vertex.end(); ++v) {
624  if (v->isFake())
625  continue;
626  if (v->ndof() < 4)
627  continue;
628  if (fabs(v->z()) > 24.0)
629  continue;
630  ++_numPV;
631  }
632  }
633 
634 #ifdef DEBUG
635  cout << "[MuonIsolationDQM]: Vertex is Valid" << endl;
636 #endif
637  // Get Muon Collection
638 
639  //Fill historgams concerning muon isolation
640  for (edm::View<reco::Muon>::const_iterator muon = muons->begin(); muon != muons->end(); ++muon) {
641  if (requireSTAMuon && muon->isStandAloneMuon()) {
642  ++nSTAMuons;
643  RecordData(*muon);
644  FillHistos(_numPV);
645  } else if (requireTRKMuon && muon->isTrackerMuon()) {
646  ++nTRKMuons;
647  RecordData(*muon);
648  FillHistos(_numPV);
649  } else if (requireGLBMuon && muon->isGlobalMuon()) {
650  ++nGLBMuons;
651  RecordData(*muon);
652  FillHistos(_numPV);
653  FillNVtxHistos(_numPV);
654  }
655  }
656 }
657 
658 //---------------Record data for a signle muon's data---------------------
660 #ifdef DEBUG
661  std::cout << "RecordData()" << endl;
662 #endif
663  float MuPt = muon.pt();
664 
665  theData[0] = muon.isolationR03().sumPt;
666  theData[1] = muon.isolationR03().emEt;
667  theData[2] = muon.isolationR03().hadEt;
668  theData[3] = muon.isolationR03().hoEt;
669 
670  theData[4] = muon.isolationR03().nTracks;
671  theData[5] = muon.isolationR03().nJets;
672  theData[6] = muon.isolationR03().trackerVetoPt;
673  theData[7] = muon.isolationR03().emVetoEt;
674  theData[8] = muon.isolationR03().hadVetoEt;
675  theData[9] = muon.isolationR03().hoVetoEt;
676 
677  // make sure nTracks != 0 before filling this one
678  if (theData[4] != 0)
679  theData[10] = (double)theData[0] / (double)theData[4];
680  else
681  theData[10] = -99;
682 
683  theData[11] = 1.5 * theData[1] + theData[2];
684 
685  theData[12] = muon.isolationR05().sumPt;
686  theData[13] = muon.isolationR05().emEt;
687  theData[14] = muon.isolationR05().hadEt;
688  theData[15] = muon.isolationR05().hoEt;
689 
690  theData[16] = muon.isolationR05().nTracks;
691  theData[17] = muon.isolationR05().nJets;
692  theData[18] = muon.isolationR05().trackerVetoPt;
693  theData[19] = muon.isolationR05().emVetoEt;
694  theData[20] = muon.isolationR05().hadVetoEt;
695  theData[21] = muon.isolationR05().hoVetoEt;
696 
697  // make sure nTracks != 0 before filling this one
698  if (theData[16] != 0)
699  theData[22] = (double)theData[12] / (double)theData[16];
700  else
701  theData[22] = -99;
702 
703  theData[23] = 1.5 * theData[13] + theData[14];
704 
705  theData[24] = (theData[0] + theData[1] + theData[2]) / MuPt;
706  theData[25] = (theData[12] + theData[13] + theData[14]) / MuPt;
707 
708  theData[26] = muon.pfIsolationR03().sumChargedHadronPt;
709  theData[27] = muon.pfIsolationR03().sumNeutralHadronEt;
710  theData[28] = muon.pfIsolationR03().sumPhotonEt;
711  theData[29] = muon.pfIsolationR03().sumNeutralHadronEtHighThreshold;
712  theData[30] = muon.pfIsolationR03().sumPhotonEtHighThreshold;
713  theData[31] = muon.pfIsolationR03().sumPUPt;
714 
715  theData[32] = muon.pfIsolationR04().sumChargedHadronPt;
716  theData[33] = muon.pfIsolationR04().sumNeutralHadronEt;
717  theData[34] = muon.pfIsolationR04().sumPhotonEt;
718  theData[35] = muon.pfIsolationR04().sumNeutralHadronEtHighThreshold;
719  theData[36] = muon.pfIsolationR04().sumPhotonEtHighThreshold;
720  theData[37] = muon.pfIsolationR04().sumPUPt;
721 
722  theData[38] = (theData[26] + theData[27] + theData[28]) / MuPt;
723  theData[39] = (theData[32] + theData[33] + theData[34]) / MuPt;
724 
725  theData[40] = (theData[26] + theData[29] + theData[30]) / MuPt;
726  theData[41] = (theData[32] + theData[35] + theData[36]) / MuPt;
727 
728  theData[42] = muon.pfSumDRIsoProfileR04().sumChargedHadronPt;
729  theData[43] = muon.pfSumDRIsoProfileR04().sumNeutralHadronEt;
730  theData[44] = muon.pfSumDRIsoProfileR04().sumPhotonEt;
731  theData[45] = muon.pfMeanDRIsoProfileR04().sumChargedHadronPt;
732  theData[46] = muon.pfMeanDRIsoProfileR04().sumNeutralHadronEt;
733  theData[47] = muon.pfMeanDRIsoProfileR04().sumPhotonEt;
734 
735  //--------------Filling the 2D Histos Data -------- //
736  theData2D[0] = muon.isolationR03().sumPt;
737  theData2D[1] = muon.isolationR03().emEt;
738  theData2D[2] = muon.isolationR03().hadEt;
739  theData2D[3] = muon.isolationR03().hoEt;
740 
741  theData2D[4] = muon.pfIsolationR04().sumChargedHadronPt;
742  theData2D[5] = muon.pfIsolationR04().sumNeutralHadronEt;
743  theData2D[6] = muon.pfIsolationR04().sumPhotonEt;
744  theData2D[7] = muon.pfIsolationR04().sumPUPt;
745 
746  theData2D[8] = theData2D[0] + theData2D[1] + theData2D[2] + theData2D[3] / MuPt; //Det RelIso;
747  theData2D[9] = theData2D[4] + theData2D[5] + theData2D[6] / MuPt; //PF RelIso;
748 
749  //-----------Filling the NVTX 1D HISTOS DATA ------------- //
750  theDataNVtx[0] = muon.pfIsolationR04().sumNeutralHadronEt;
751  theDataNVtx[1] = theDataNVtx[0];
752  theDataNVtx[2] = theDataNVtx[0];
753 
754  theDataNVtx[3] = muon.pfIsolationR04().sumPhotonEt;
755  theDataNVtx[4] = theDataNVtx[3];
756  theDataNVtx[5] = theDataNVtx[3];
757 }
759  edm::Run const& /*iRun*/,
760  edm::EventSetup const& /* iSetup */) {
761  ibooker.cd();
762  ibooker.setCurrentFolder(dirName);
763 
764  ibooker.cd();
765  ibooker.setCurrentFolder(dirName);
766 
767  //---initialize number of muons histogram---
768  h_nMuons = ibooker.book1D("nMuons", title_sam + "Number of Muons", 20, 0., 20.);
769  h_nMuons->setAxisTitle("Number of Muons", XAXIS);
770  h_nMuons->setAxisTitle("Fraction of Events", YAXIS);
771 
772  //---Initialize 1D Histograms---
773  for (int var = 0; var < NUM_VARS; var++) {
774  h_1D[var] = ibooker.book1D(
775  names[var], title_sam + main_titles[var] + title_cone, (int)param[var][0], param[var][1], param[var][2]);
776  h_1D[var]->setAxisTitle(axis_titles[var], XAXIS);
777  // GetTH1FromMonitorElement(h_1D[var])->Sumw2();
778  } //Finish 1D
779 
780  //----Initialize 2D Histograms
781  for (int var = 0; var < NUM_VARS_2D; var++) {
782  h_2D[var] = ibooker.bookProfile(names_2D[var] + "_VsPV", titles_2D[var] + " Vs PV", 50, 0.5, 50.5, 20, 0.0, 20.0);
783 
784  h_2D[var]->setAxisTitle("Number of PV", XAXIS);
785  h_2D[var]->setAxisTitle(titles_2D[var] + " (GeV)", YAXIS);
786  // h_2D[var]->getTH1()->Sumw2();
787  }
788 
789  //-----Initialise PU-Binned histograms
790  for (int var = 0; var < NUM_VARS_NVTX; var++) {
791  h_1D_NVTX[var] = ibooker.book1D(names_NVtxs[var], main_titles_NVtxs[var], 50, 0.0, 10.0);
792  h_1D_NVTX[var]->setAxisTitle(axis_titles_NVtxs[var], XAXIS);
794  }
795 }
796 
798  for (int var = 0; var < NUM_VARS; var++) {
799  double entries = GetTH1FromMonitorElement(h_1D[var])->GetEntries();
800  GetTH1FromMonitorElement(h_1D[var])->Scale(1. / entries);
801  }
802 }
803 
805 #ifdef DEBUG
806  cout << "FillHistos( " << numPV << " )" << endl;
807 #endif
808 
809  //----------Fill 1D histograms---------------
810  for (int var = 0; var < NUM_VARS; var++) {
811  h_1D[var]->Fill(theData[var]);
812  // cd_plots[var]->Fill(theData[var]);//right now, this is a regular PDF (just like h_1D)
813  //OFBin if (theData[var] > param[var][2]) {
814  //OFBin // fill the overflow bin
815  //OFBin overFlowBin = (int) param[var][0] + 1;
816  //OFBin overFlow = GetTH1FromMonitorElement(h_1D[var])->GetBinContent(overFlowBin);
817  //OFBin GetTH1FromMonitorElement(h_1D[var])->SetBinContent(overFlowBin, overFlow + 1);
818  //OFBin }
819  } //Finish 1D
820 
821  for (int var = 0; var < NUM_VARS_2D; var++) {
822  h_2D[var]->Fill(numPV, theData2D[var]);
823  }
824 
825 #ifdef DEBUG
826  cout << "FillHistos( " << numPV << " ): DONE" << endl;
827 #endif
828 }
830  if (PV < 15) {
831  h_1D_NVTX[0]->Fill(theDataNVtx[0]);
832  h_1D_NVTX[3]->Fill(theDataNVtx[3]);
833  }
834  if (PV >= 15 && PV < 30) {
835  h_1D_NVTX[1]->Fill(theDataNVtx[1]);
836  h_1D_NVTX[4]->Fill(theDataNVtx[4]);
837  }
838  if (PV >= 30) {
839  h_1D_NVTX[2]->Fill(theDataNVtx[2]);
840  h_1D_NVTX[5]->Fill(theDataNVtx[5]);
841  }
842 }
843 
845 
846 //define this as a plug-in
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX)
Definition: DQMStore.cc:239
float hadEt
hcal sum-Et
Definition: MuonIsolation.h:8
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
float sumPt
sum-pt of tracks
Definition: MuonIsolation.h:6
float sumNeutralHadronEtHighThreshold
sum pt of neutral hadrons with a higher threshold
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
const MuonPFIsolation & pfSumDRIsoProfileR04() const
Definition: Muon.h:174
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:418
MuonIsolationDQM(const edm::ParameterSet &)
const MuonPFIsolation & pfMeanDRIsoProfileR04() const
Definition: Muon.h:173
float hadVetoEt
hcal sum-et in the veto region in r-phi
Definition: MuonIsolation.h:14
double pt() const final
transverse momentum
std::vector< Vertex > VertexCollection
collection of Vertex objects
Definition: VertexFwd.h:9
float sumPhotonEt
sum pt of PF photons
const MuonIsolation & isolationR05() const
Definition: Muon.h:167
const std::string names[nVars_]
float sumNeutralHadronEt
sum pt of neutral hadrons
float sumPUPt
sum pt of charged Particles not from PV (for Pu corrections)
int iEvent
Definition: GenABIO.cc:224
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void RecordData(const reco::Muon &muon)
const MuonPFIsolation & pfIsolationR03() const
Definition: Muon.h:169
float emEt
ecal sum-Et
Definition: MuonIsolation.h:7
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, char const *option="s")
Definition: DQMStore.cc:333
int nJets
number of jets in the cone
Definition: MuonIsolation.h:11
float hoEt
ho sum-Et
Definition: MuonIsolation.h:9
bool isValid() const
Definition: HandleBase.h:70
~MuonIsolationDQM() override
float hoVetoEt
ho sum-et in the veto region in r-phi
Definition: MuonIsolation.h:15
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
int nTracks
number of tracks in the cone (excluding veto region)
Definition: MuonIsolation.h:10
float emVetoEt
ecal sum-et in the veto region in r-phi
Definition: MuonIsolation.h:13
T const * product() const
Definition: Handle.h:69
const MuonPFIsolation & pfIsolationR04() const
Definition: Muon.h:172
boost::indirect_iterator< typename seq_t::const_iterator > const_iterator
Definition: View.h:86
float sumPhotonEtHighThreshold
sum pt of PF photons with a higher threshold
UInt_t nEvents
Definition: hcalCalib.cc:41
float trackerVetoPt
(sum-)pt inside the veto region in r-phi
Definition: MuonIsolation.h:12
const MuonIsolation & isolationR03() const
Definition: Muon.h:166
Definition: Run.h:45
TH1 * GetTH1FromMonitorElement(MonitorElement *me)
void analyze(const edm::Event &, const edm::EventSetup &) override
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
float sumChargedHadronPt
sum-pt of charged Hadron