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