CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuIsoValidation.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 // MuIsoValidation.cc
3 // Package: Muon Isolation Validation
4 // Class: MuIsoValidation
5 //
6 /*
7 
8 
9  Description: Muon Isolation Validation class
10 
11  Implementation: This code will accept a data set and generate plots of
12  various quantities relevent to the Muon Isolation module. We will
13  be using the IsoDeposit class, *not* the MuonIsolation struct.
14 
15  The sequence of events is...
16  * initalize statics (which variables to plot, axis limtis, etc.)
17  * run over events
18  * for each event, run over the muons in that event
19  *record IsoDeposit data
20  * transfer data to histograms, profile plots
21  * save histograms to a root file
22 
23  Easy-peasy.
24 
25 */
26 //
27 // Original Author: "C. Jess Riedel", UC Santa Barbara
28 // Created: Tue Jul 17 15:58:24 CDT 2007
29 //
30 
31 //Class header file
33 
34 //System included files
35 #include <memory>
36 #include <string>
37 #include <typeinfo>
38 #include <utility>
39 
40 //Root included files
41 #include "TH1.h"
42 #include "TH2.h"
43 #include "TProfile.h"
44 
45 //Event framework included files
49 
50 //Other included files
52 
53 //Using declarations
54 using std::vector;
55 using std::pair;
56 using std::string;
57 
58 
59 
60 //
61 //-----------------Constructors---------------------
62 //
64 {
65 
66  // rootfilename = iConfig.getUntrackedParameter<string>("rootfilename"); // comment out for inclusion
67  requireCombinedMuon = iConfig.getUntrackedParameter<bool>("requireCombinedMuon");
68  dirName = iConfig.getParameter<std::string>("directory");
69  // subDirName = iConfig.getParameter<std::string>("@module_label");
70 
71  // dirName += subDirName;
72 
73  //--------Initialize tags-------
74  Muon_Tag = iConfig.getUntrackedParameter<edm::InputTag>("Global_Muon_Label");
75 
76  //-------Initialize counters----------------
77  nEvents = 0;
78  nIncMuons = 0;
79  // nCombinedMuons = 0;
80 
81  InitStatics();
82 
83  //Set up DAQ
84  dbe = 0;
86 
87  //------"allocate" space for the data vectors-------
88 
89  /*
90  h_1D is a 2D vector with indices [var][muon#]
91  cd_plots is a 2D vector with indices [var][muon#]
92  h_2D is a 3D vector with indices [var][var][muon#]
93  p_2D is a 3D vector with indices [var][var][muon#]
94  */
95  //NOTE:the total number of muons and events is initially unknown,
96  // so that dimension is not initialized. Hence, theMuonData
97  // needs no resizing.
98 
99  h_1D.resize (NUM_VARS);
100  cd_plots.resize(NUM_VARS);
101  // h_2D.resize(NUM_VARS, vector<MonitorElement*> (NUM_VARS));
102  p_2D.resize(NUM_VARS, vector<MonitorElement*>(NUM_VARS));
103 
104  dbe->cd();
105 }
106 
107 //
108 //----------Destructor-----------------
109 //
111 
112  //Deallocate memory
113 
114 }
115 
116 //
117 //------------Methods-----------------------
118 //
120 
121  //-----------Initialize primatives-----------
122  S_BIN_WIDTH = 1.0;//in GeV
123  L_BIN_WIDTH = 2.0;//in GeV
125  NUM_LOG_BINS = 15;
126  LOG_BINNING_RATIO = 1.1;//ratio by which each bin is wider than the last for log binning
127  //i.e. bin widths are (x), (r*x), (r^2*x), ..., (r^(nbins)*x)
128 
129 
130  //-------Initialize Titles---------
131  title_sam = "";//"[Sample b-jet events] ";
132  title_cone = "";//" [in R=0.3 IsoDeposit Cone]";
133  //The above two pieces of info will be printed on the title of the whole page,
134  //not for each individual histogram
135  title_cd = "C.D. of ";
136 
137  //-------"Allocate" memory for vectors
138  main_titles.resize(NUM_VARS);
139  axis_titles.resize(NUM_VARS);
140  names.resize(NUM_VARS);
141  param.resize(NUM_VARS, vector<double>(3) );
142  isContinuous.resize(NUM_VARS);
143  cdCompNeeded.resize(NUM_VARS);
144 
145  //-----Titles of the plots-----------
146  main_titles[0 ] = "Total Tracker Momentum";
147  main_titles[1 ] = "Total EM Cal Energy";
148  main_titles[2 ] = "Total Had Cal Energy";
149  main_titles[3 ] = "Total HO Cal Energy";
150  main_titles[4 ] = "Number of Tracker Tracks";
151  main_titles[5 ] = "Number of Jets around Muon";
152  main_titles[6 ] = "Tracker p_{T} within veto cone";
153  main_titles[7 ] = "EM E_{T} within veto cone";
154  main_titles[8 ] = "Had E_{T} within veto cone";
155  main_titles[9 ] = "HO E_{T} within veto cone";
156  main_titles[10] = "Muon p_{T}";
157  main_titles[11] = "Muon #eta";
158  main_titles[12] = "Muon #phi";
159  main_titles[13] = "Average Momentum per Track ";
160  main_titles[14] = "Weighted Energy";
161  main_titles[15] = "PF Sum of Charged Hadron Pt";
162  main_titles[16] = "PF Sum of Total Hadron Pt";
163  main_titles[17] = "PF Sum of E,Mu Pt";
164  main_titles[18] = "PF Sum of Neutral Hadron Et";
165  main_titles[19] = "PF Sum of Photon Et";
166  main_titles[20] = "PF Sum of Pt from non-PV";
167 
168  //------Titles on the X or Y axis------------
169  axis_titles[0 ] = "#Sigma p_{T} (GeV)";
170  axis_titles[1 ] = "#Sigma E_{T}^{EM} (GeV)";
171  axis_titles[2 ] = "#Sigma E_{T}^{Had} (GeV)";
172  axis_titles[3 ] = "#Sigma E_{T}^{HO} (GeV)";
173  axis_titles[4 ] = "N_{Tracks}";
174  axis_titles[5 ] = "N_{Jets}";
175  axis_titles[6 ] = "#Sigma p_{T,veto} (GeV)";
176  axis_titles[7 ] = "#Sigma E_{T,veto}^{EM} (GeV)";
177  axis_titles[8 ] = "#Sigma E_{T,veto}^{Had} (GeV)";
178  axis_titles[9 ] = "#Sigma E_{T,veto}^{HO} (GeV)";
179  axis_titles[10] = "p_{T,#mu} (GeV)";
180  axis_titles[11] = "#eta_{#mu}";
181  axis_titles[12] = "#phi_{#mu}";
182  axis_titles[13] = "#Sigma p_{T} / N_{Tracks} (GeV)";
183  axis_titles[14] = "(1.5) X #Sigma E_{T}^{EM} + #Sigma E_{T}^{Had}";
184  axis_titles[15] = "#Sigma p_{T}^{PFHadCha} (GeV)";
185  axis_titles[16] = "#Sigma p_{T}^{PFTotCha} (GeV)";
186  axis_titles[17] = "#Sigma p_{T}^{PFEMu} (GeV)";
187  axis_titles[18] = "#Sigma E_{T}^{PFHadNeu} (GeV)";
188  axis_titles[19] = "#Sigma E_{T}^{PFPhot} (GeV)";
189  axis_titles[20] = "#Sigma p_{T}^{PFPU} (GeV)";
190 
191  //-----------Names given for the root file----------
192  names[0 ] = "sumPt";
193  names[1 ] = "emEt";
194  names[2 ] = "hadEt";
195  names[3 ] = "hoEt";
196  names[4 ] = "nTracks";
197  names[5 ] = "nJets";
198  names[6 ] = "trackerVetoPt";
199  names[7 ] = "emVetoEt";
200  names[8 ] = "hadVetoEt";
201  names[9 ] = "hoVetoEt";
202  names[10] = "muonPt";
203  names[11] = "muonEta";
204  names[12] = "muonPhi";
205  names[13] = "avgPt";
206  names[14] = "weightedEt";
207  names[15] = "PFsumChargedHadronPt";
208  names[16] = "PFsumChargedTotalPt";
209  names[17] = "PFsumEMuPt";
210  names[18] = "PFsumNeutralHadronEt";
211  names[19] = "PFsumPhotonEt";
212  names[20] = "PFsumPUPt";
213 
214  //----------Parameters for binning of histograms---------
215  //param[var][0] is the number of bins
216  //param[var][1] is the low edge of the low bin
217  //param[var][2] is the high edge of the high bin
218  //
219  // maximum value------,
220  // |
221  // V
222  param[0 ][0]= (int)( 20.0/S_BIN_WIDTH); param[0 ][1]= 0.0; param[0 ][2]= param[0 ][0]*S_BIN_WIDTH;
223  param[1 ][0]= (int)( 20.0/S_BIN_WIDTH); param[1 ][1]= 0.0; param[1 ][2]= param[1 ][0]*S_BIN_WIDTH;
224  param[2 ][0]= (int)( 20.0/S_BIN_WIDTH); param[2 ][1]= 0.0; param[2 ][2]= param[2 ][0]*S_BIN_WIDTH;
225  param[3 ][0]= 20; param[3 ][1]= 0.0; param[3 ][2]= 2.0;
226  param[4 ][0]= 16; param[4 ][1]= -0.5; param[4 ][2]= param[4 ][0]-0.5;
227  param[5 ][0]= 4; param[5 ][1]= -0.5; param[5 ][2]= param[5 ][0]-0.5;
228  param[6 ][0]= (int)( 40.0/S_BIN_WIDTH); param[6 ][1]= 0.0; param[6 ][2]= param[6 ][0]*S_BIN_WIDTH;
229  param[7 ][0]= 20; param[7 ][1]= 0.0; param[7 ][2]= 10.0;
230  param[8 ][0]= (int)( 20.0/S_BIN_WIDTH); param[8 ][1]= 0.0; param[8 ][2]= param[8 ][0]*S_BIN_WIDTH;
231  param[9 ][0]= 20; param[9 ][1]= 0.0; param[9 ][2]= 5.0;
232  param[10][0]= (int)( 40.0/S_BIN_WIDTH); param[10][1]= 0.0; param[10][2]= param[10][0]*S_BIN_WIDTH;
233  param[11][0]= 24; param[11][1]= -2.4; param[11][2]= 2.4;
234  param[12][0]= 32; param[12][1]= -3.2; param[12][2]= 3.2;
235  param[13][0]= (int)( 15.0/S_BIN_WIDTH); param[13][1]= 0.0; param[13][2]= param[13][0]*S_BIN_WIDTH;
236  param[14][0]= (int)( 20.0/S_BIN_WIDTH); param[14][1]= 0.0; param[14][2]= param[14][0]*S_BIN_WIDTH;
237  param[15][0]= (int)( 20.0/S_BIN_WIDTH); param[15][1]= 0.0; param[15][2]= param[15][0]*S_BIN_WIDTH;
238  param[16][0]= (int)( 20.0/S_BIN_WIDTH); param[15][1]= 0.0; param[16][2]= param[16][0]*S_BIN_WIDTH;
239  param[17][0]= (int)( 20.0/S_BIN_WIDTH)+1; param[17][1]= -S_BIN_WIDTH; param[17][2]= param[17][0]*S_BIN_WIDTH;
240  param[18][0]= (int)( 20.0/S_BIN_WIDTH); param[18][1]= 0.0; param[18][2]= param[18][0]*S_BIN_WIDTH;
241  param[19][0]= (int)( 20.0/S_BIN_WIDTH); param[19][1]= 0.0; param[19][2]= param[19][0]*S_BIN_WIDTH;
242  param[20][0]= (int)( 20.0/S_BIN_WIDTH); param[20][1]= 0.0; param[20][2]= param[20][0]*S_BIN_WIDTH;
243 
244  //--------------Is the variable continuous (i.e. non-integer)?-------------
245  //---------(Log binning will only be used for continuous variables)--------
246  isContinuous[0 ] = 1;
247  isContinuous[1 ] = 1;
248  isContinuous[2 ] = 1;
249  isContinuous[3 ] = 1;
250  isContinuous[4 ] = 0;
251  isContinuous[5 ] = 0;
252  isContinuous[6 ] = 1;
253  isContinuous[7 ] = 1;
254  isContinuous[8 ] = 1;
255  isContinuous[9 ] = 1;
256  isContinuous[10] = 1;
257  isContinuous[11] = 1;
258  isContinuous[12] = 1;
259  isContinuous[13] = 1;
260  isContinuous[14] = 1;
261  isContinuous[15] = 1;
262  isContinuous[16] = 1;
263  isContinuous[17] = 1;
264  isContinuous[18] = 1;
265  isContinuous[19] = 1;
266  isContinuous[20] = 1;
267 
268  //----Should the cumulative distribution be calculated for this variable?-----
269  cdCompNeeded[0 ] = 1;
270  cdCompNeeded[1 ] = 1;
271  cdCompNeeded[2 ] = 1;
272  cdCompNeeded[3 ] = 1;
273  cdCompNeeded[4 ] = 1;
274  cdCompNeeded[5 ] = 1;
275  cdCompNeeded[6 ] = 1;
276  cdCompNeeded[7 ] = 1;
277  cdCompNeeded[8 ] = 1;
278  cdCompNeeded[9 ] = 1;
279  cdCompNeeded[10] = 0;
280  cdCompNeeded[11] = 0;
281  cdCompNeeded[12] = 0;
282  cdCompNeeded[13] = 1;
283  cdCompNeeded[14] = 1;
284  cdCompNeeded[15] = 1;
285  cdCompNeeded[16] = 1;
286  cdCompNeeded[17] = 1;
287  cdCompNeeded[18] = 1;
288  cdCompNeeded[19] = 1;
289  cdCompNeeded[20] = 1;
290 }
291 
292 
293 // ------------ method called for each event ------------
295 
296  ++nEvents;
297  edm::LogInfo("Tutorial") << "\nInvestigating event #" << nEvents<<"\n";
298 
299  // Get Muon Collection
300  edm::Handle<edm::View<reco::Muon> > muonsHandle; //
301  iEvent.getByLabel(Muon_Tag, muonsHandle);
302 
303  //Fill event entry in histogram of number of muons
304  edm::LogInfo("Tutorial") << "Number of Muons: " << muonsHandle->size();
305  theMuonData = muonsHandle->size();
307 
308  //Fill historgams concerning muon isolation
309  uint iMuon=0;
310  dbe->setCurrentFolder(dirName.c_str());
311  for (MuonIterator muon = muonsHandle->begin(); muon != muonsHandle->end(); ++muon, ++iMuon ) {
312  ++nIncMuons;
313  if (requireCombinedMuon) {
314  if (muon->combinedMuon().isNull()) continue;
315  }
316  // ++nCombinedMuons;
317  RecordData(muon);
318  FillHistos();
319  }
320  dbe->cd();
321 
322 }
323 
324 //---------------Record data for a signle muon's data---------------------
326 
327 
328  theData[0] = muon->isolationR03().sumPt;
329  theData[1] = muon->isolationR03().emEt;
330  theData[2] = muon->isolationR03().hadEt;
331  theData[3] = muon->isolationR03().hoEt;
332 
333  theData[4] = muon->isolationR03().nTracks;
334  theData[5] = muon->isolationR03().nJets;
335  theData[6] = muon->isolationR03().trackerVetoPt;
336  theData[7] = muon->isolationR03().emVetoEt;
337  theData[8] = muon->isolationR03().hadVetoEt;
338  theData[9] = muon->isolationR03().hoVetoEt;
339 
340  theData[10] = muon->pt();
341  theData[11] = muon->eta();
342  theData[12] = muon->phi();
343 
344  // make sure nTracks != 0 before filling this one
345  if (theData[4] != 0) theData[13] = (double)theData[0] / (double)theData[4];
346  else theData[13] = -99;
347 
348  theData[14] = 1.5 * theData[1] + theData[2];
349 
350  // Now PF isolation
351  theData[15] = -99.;
352  theData[16] = -99.;
353  theData[17] = -99.;
354  theData[18] = -99.;
355  theData[19] = -99.;
356  theData[20] = -99.;
357  if ( muon->isPFMuon() && muon->isPFIsolationValid() ) {
358  theData[15] = muon->pfIsolationR03().sumChargedHadronPt;
359  theData[16] = muon->pfIsolationR03().sumChargedParticlePt;
360  theData[17] = muon->pfIsolationR03().sumChargedParticlePt-muon->pfIsolationR03().sumChargedHadronPt;
361  theData[18] = muon->pfIsolationR03().sumNeutralHadronEt;
362  theData[19] = muon->pfIsolationR03().sumPhotonEt;
363  theData[20] = muon->pfIsolationR03().sumPUPt;
364  }
365 
366 }
367 
368 // ------------ method called once each job just before starting event loop ------------
369 void
371 {
372 
373  edm::LogInfo("Tutorial") << "\n#########################################\n\n"
374  << "Lets get started! "
375  << "\n\n#########################################\n";
376  dbe->setCurrentFolder(dirName.c_str());
377  InitHistos();
378  dbe->cd();
379 
380 }
381 
382 // ------------ method called once each job just after ending the event loop ------------
383 void
385 
386  // check if ME still there (and not killed by MEtoEDM for memory saving)
387  if( dbe )
388  {
389  // check existence of first histo in the list
390  if (! dbe->get(dirName+"/nMuons")) return;
391  }
392  else
393  return;
394 
395  edm::LogInfo("Tutorial") << "\n#########################################\n\n"
396  << "Total Number of Events: " << nEvents
397  << "\nTotal Number of Muons: " << nIncMuons
398  << "\n\n#########################################\n"
399  << "\nInitializing Histograms...\n";
400 
401  edm::LogInfo("Tutorial") << "\nIntializing Finished. Filling...\n";
402  NormalizeHistos();
403  edm::LogInfo("Tutorial") << "\nFilled. Saving...\n";
404  // dbe->save(rootfilename); // comment out for incorporation
405  edm::LogInfo("Tutorial") << "\nSaved. Peace, homie, I'm out.\n";
406 
407 }
408 
410 
411  //---initialize number of muons histogram---
412  h_nMuons = dbe->book1D("nMuons", title_sam + "Number of Muons", 20, 0., 20.);
413  h_nMuons->setAxisTitle("Number of Muons",XAXIS);
414  h_nMuons->setAxisTitle("Fraction of Events",YAXIS);
415 
416 
417  //---Initialize 1D Histograms---
418  for(int var = 0; var < NUM_VARS; var++){
419  h_1D[var] = dbe->book1D(
420  names[var],
421  title_sam + main_titles[var] + title_cone,
422  (int)param[var][0],
423  param[var][1],
424  param[var][2]
425  );
426  h_1D[var]->setAxisTitle(axis_titles[var],XAXIS);
427  h_1D[var]->setAxisTitle("Fraction of Muons",YAXIS);
428  GetTH1FromMonitorElement(h_1D[var])->Sumw2();
429 
430  if (cdCompNeeded[var]) {
431  cd_plots[var] = dbe->book1D(
432  names[var] + "_cd",
434  (int)param[var][0],
435  param[var][1],
436  param[var][2]
437  );
438  cd_plots[var]->setAxisTitle(axis_titles[var],XAXIS);
439  cd_plots[var]->setAxisTitle("Fraction of Muons",YAXIS);
440  GetTH1FromMonitorElement(cd_plots[var])->Sumw2();
441  }
442  }//Finish 1D
443 
444  //---Initialize 2D Histograms---
445  for(int var1 = 0; var1 < NUM_VARS; var1++){
446  for(int var2 = 0; var2 < NUM_VARS; var2++){
447  if(var1 == var2) continue;
448 
449  /* h_2D[var1][var2] = dbe->book2D(
450  names[var1] + "_" + names[var2] + "_s",
451  //title is in "y-var vs. x-var" format
452  title_sam + main_titles[var2] + " <vs> " + main_titles[var1] + title_cone,
453  (int)param[var1][0],
454  param[var1][1],
455  param[var1][2],
456  (int)param[var2][0],
457  param[var2][1],
458  param[var2][2]
459  );
460  */
461  //Monitor elements is weird and takes y axis parameters as well
462  //as x axis parameters for a 1D profile plot
463  p_2D[var1][var2] = dbe->bookProfile(
464  names[var1] + "_" + names[var2],
465  title_sam + main_titles[var2] + " <vs> " + main_titles[var1] + title_cone,
466  (int)param[var1][0],
467  param[var1][1],
468  param[var1][2],
469  (int)param[var2][0], //documentation says this is disregarded
470  param[var2][1], //does this do anything?
471  param[var2][2], //does this do anything?
472  " " //profile errors = spread/sqrt(num_datums)
473  );
474 
475  if(LOG_BINNING_ENABLED && isContinuous[var1]){
476  Double_t * bin_edges = new Double_t[NUM_LOG_BINS+1];
477  // nbins+1 because there is one more edge than there are bins
478  MakeLogBinsForProfile(bin_edges, param[var1][1], param[var1][2]);
479  GetTProfileFromMonitorElement(p_2D[var1][var2])->SetBins(NUM_LOG_BINS, bin_edges);
480  delete[] bin_edges;
481  }
482  /* h_2D[var1][var2]->setAxisTitle(axis_titles[var1],XAXIS);
483  h_2D[var1][var2]->setAxisTitle(axis_titles[var2],YAXIS);
484  GetTH2FromMonitorElement(h_2D[var1][var2])->Sumw2();
485  */
486 
487  p_2D[var1][var2]->setAxisTitle(axis_titles[var1],XAXIS);
488  p_2D[var1][var2]->setAxisTitle(axis_titles[var2],YAXIS);
489  // GetTProfileFromMonitorElement(p_2D[var1][var2])->Sumw2();
490  }
491  }//Finish 2D
492 
493 
494 
495  //avg pT not defined for zero tracks.
496  //MonitorElement is inflxible and won't let me change the
497  //number of bins! I guess all I'm doing here is changing
498  //range of the x axis when it is printed, not the actual
499  //bins that are filled
500  p_2D[4][9]->setAxisRange(0.5,15.5,XAXIS);
501 
502 }
503 
505  const double max){
506 
507  const double &r = LOG_BINNING_RATIO;
508  const int &nbins = NUM_LOG_BINS;
509 
510  const double first_bin_width = (r > 1.0) ? //so we don't divide by zero
511  (max - min)*(1-r)/(1-pow(r,nbins)) :
512  (max - min)/nbins;
513 
514  bin_edges[0] = min;
515  bin_edges[1] = min + first_bin_width;
516  for(int n = 2; n<nbins; ++n){
517  bin_edges[n] = bin_edges[n-1] + (bin_edges[n-1] - bin_edges[n-2])*r;
518  }
519  bin_edges[nbins] = max;
520 }
521 
523  for(int var=0; var<NUM_VARS; var++){
524  //turn cd_plots into CDF's
525  //underflow -> bin #0. overflow -> bin #(nbins+1)
526  //0th bin doesn't need changed
527 
528  //----normalize------
529  double entries = GetTH1FromMonitorElement(h_1D[var])->GetEntries();
530  if (entries==0)continue;
531  GetTH1FromMonitorElement(h_1D[var])->Scale(1./entries);
532 
533  if (cdCompNeeded[var]) {
534  int n_max = int(param[var][0])+1;
535  for(int n=1; n<=n_max; ++n){
536  cd_plots[var]->setBinContent(n, cd_plots[var]->getBinContent(n) + cd_plots[var]->getBinContent(n-1)); //Integrate.
537  }
538  //----normalize------
539  GetTH1FromMonitorElement(cd_plots[var])->Scale(1./entries);
540  }
541  }
542 }
543 
545 
546  int overFlowBin;
547  double overFlow = 0;
548 
549  //----------Fill 1D histograms---------------
550  for(int var=0; var<NUM_VARS; var++){
551  h_1D[var]->Fill(theData[var]);
552  if (cdCompNeeded[var]) cd_plots[var]->Fill(theData[var]);//right now, this is a regular PDF (just like h_1D)
553  if (theData[var] > param[var][2]) {
554  // fill the overflow bin
555  overFlowBin = (int) param[var][0] + 1;
556  overFlow = GetTH1FromMonitorElement(h_1D[var])->GetBinContent(overFlowBin);
557  GetTH1FromMonitorElement(h_1D[var])->SetBinContent(overFlowBin, overFlow + 1);
558  }
559  }//Finish 1D
560 
561  //----------Fill 2D histograms---------------
562  for(int var1=0; var1<NUM_VARS; ++var1){
563  for(int var2=0; var2<NUM_VARS; ++var2){
564  if(var1 == var2) continue;
565  //change below to regular int interating!
566  // h_2D[var1][var2]->Fill(theData[var1], theData[var2]);
567  p_2D[var1][var2]->Fill(theData[var1], theData[var2]);
568  }
569  }//Finish 2D
570 }
571 
573  return me->getTH1();
574 }
575 
577  return me->getTH2F();
578 }
579 
581  return me->getTProfile();
582 }
583 
584 
585 //define this as a plug-in
void RecordData(MuonIterator muon)
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
std::vector< int > isContinuous
TH1 * GetTH1FromMonitorElement(MonitorElement *me)
std::vector< std::vector< MonitorElement * > > p_2D
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:717
std::vector< std::string > names
std::string title_cd
void cd(void)
go to top directory (ie. root)
Definition: DQMStore.cc:406
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
edm::View< reco::Muon >::const_iterator MuonIterator
std::vector< std::string > main_titles
TH2 * GetTH2FromMonitorElement(MonitorElement *me)
double theData[NUM_VARS]
virtual void beginJob()
MuIsoValidation(const edm::ParameterSet &)
#define min(a, b)
Definition: mlp_lapack.h:161
std::vector< MonitorElement * > h_1D
TProfile * GetTProfileFromMonitorElement(MonitorElement *me)
void Fill(long long x)
MonitorElement * h_nMuons
virtual void analyze(const edm::Event &, const edm::EventSetup &)
int iEvent
Definition: GenABIO.cc:243
std::string title_sam
const T & max(const T &a, const T &b)
std::vector< MonitorElement * > cd_plots
std::string dirName
std::string title_cone
TH1 * getTH1(void) const
MonitorElement * bookProfile(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, const char *option="s")
Definition: DQMStore.cc:1031
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1468
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:356
static const int NUM_VARS
std::vector< std::vector< double > > param
TProfile * getTProfile(void) const
void MakeLogBinsForProfile(Double_t *bin_edges, const double min, const double max)
std::vector< std::string > axis_titles
TH2F * getTH2F(void) const
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
edm::InputTag Muon_Tag
virtual void endJob()
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:429
std::vector< int > cdCompNeeded