CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FlavourHistorgrams.h
Go to the documentation of this file.
1 
2 #ifndef FlavourHistograms_H
3 #define FlavourHistograms_H
4 
8 
9 // #include "BTagPlotPrintC.h"
10 
11 #include "TH1F.h"
12 #include "TCanvas.h"
13 #include "TROOT.h"
14 #include "TSystem.h"
15 #include "TStyle.h"
16 
19 #include <iostream>
20 #include <string>
21 
22 //class DQMStore;
23 
24 //
25 // class to describe Histo
26 //
27 template <class T>
29 
30 public:
31 
32  FlavourHistograms (const std::string& baseNameTitle_ , const std::string& baseNameDescription_ ,
33  const int& nBins_ , const double& lowerBound_ , const double& upperBound_ ,
34  const bool& statistics_ , const bool& plotLog_ , const bool& plotNormalized_ ,
35  const std::string& plotFirst_ , const bool& update, const std::string& folder, const unsigned int& mc) ;
36 
37  virtual ~FlavourHistograms () ;
38 
39 
40  // define arrays (if needed)
41 // void defineArray ( int * dimension , int max , int indexToPlot ) ;
42 
43  // fill entry
44  // For single variables and arrays (for arrays only a single index can be filled)
45  void fill ( const int & flavour, const T & variable) const;
46  void fill ( const int & flavour, const T & variable, const T & w) const;
47 
48  // For single variables and arrays
49  void fill ( const int & flavour, const T * variable) const;
50 
51 
52  void settitle(const char* title) ;
53 
54  void plot (TPad * theCanvas = 0) ;
55 
56  void epsPlot(const std::string& name);
57 
58  // needed for efficiency computations -> this / b
59  // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
60  void divide ( const FlavourHistograms<T> & bHD ) const ;
61 
62  inline void SetMaximum(const double& max) { theMax = max;}
63  inline void SetMinimum(const double& min) { theMin = min;}
64 
65 
66  // trivial access functions
67  inline std::string baseNameTitle () const { return theBaseNameTitle ; }
69  inline int nBins () const { return theNBins ; }
70  inline double lowerBound () const { return theLowerBound ; }
71  inline double upperBound () const { return theUpperBound ; }
72  inline bool statistics () const { return theStatistics ; }
73  inline bool plotLog () const { return thePlotLog ; }
74  inline bool plotNormalized () const { return thePlotNormalized ; }
75  inline std::string plotFirst () const { return thePlotFirst ; }
76  inline int* arrayDimension () const { return theArrayDimension; }
77  inline int maxDimension () const {return theMaxDimension; }
78  inline int indexToPlot () const {return theIndexToPlot; }
79 
80  // access to the histos
81  inline TH1F * histo_all () const { return theHisto_all->getTH1F() ; }
82  inline TH1F * histo_d () const { return theHisto_d ->getTH1F() ; }
83  inline TH1F * histo_u () const { return theHisto_u->getTH1F() ; }
84  inline TH1F * histo_s () const { return theHisto_s->getTH1F() ; }
85  inline TH1F * histo_c () const { return theHisto_c->getTH1F() ; }
86  inline TH1F * histo_b () const { return theHisto_b->getTH1F() ; }
87  inline TH1F * histo_g () const { return theHisto_g->getTH1F() ; }
88  inline TH1F * histo_ni () const { return theHisto_ni->getTH1F() ; }
89  inline TH1F * histo_dus () const { return theHisto_dus->getTH1F() ; }
90  inline TH1F * histo_dusg () const { return theHisto_dusg->getTH1F() ; }
91 
92  std::vector<TH1F*> getHistoVector() const;
93 
94 
95 protected:
96 
97  void fillVariable ( const int & flavour , const T & var , const T & w) const;
98 
99  //
100  // the data members
101  //
102 
103 // T * theVariable ;
104 
105  // for arrays
108  int theIndexToPlot ; // in case that not the complete array has to be plotted
109 
112  int theNBins ;
113  double theLowerBound ;
114  double theUpperBound ;
116  bool thePlotLog ;
118  std::string thePlotFirst ; // one character; gives flavour to plot first: l (light) , c , b
119  double theMin, theMax;
120 
121  // the histos
132 
133  // DQMStore * dqmStore_;
134 
135 
136  // the canvas to plot
137  TCanvas* theCanvas ;
138  private:
140 
141  unsigned int mcPlots_;
142 
143 } ;
144 
145 template <class T>
146 FlavourHistograms<T>::FlavourHistograms (const std::string& baseNameTitle_ , const std::string& baseNameDescription_ ,
147  const int& nBins_ , const double& lowerBound_ , const double& upperBound_ ,
148  const bool& statistics_ , const bool& plotLog_ , const bool& plotNormalized_ ,
149  const std::string& plotFirst_, const bool& update, const std::string& folder, const unsigned int& mc) :
150  // BaseFlavourHistograms () ,
151  // theVariable ( variable_ ) ,
152  theMaxDimension(-1), theIndexToPlot(-1), theBaseNameTitle ( baseNameTitle_ ) , theBaseNameDescription ( baseNameDescription_ ) ,
153  theNBins ( nBins_ ) , theLowerBound ( lowerBound_ ) , theUpperBound ( upperBound_ ) ,
154  theStatistics ( statistics_ ) , thePlotLog ( plotLog_ ) , thePlotNormalized ( plotNormalized_ ) ,
155  thePlotFirst ( plotFirst_ ), theMin(-1.), theMax(-1.), mcPlots_(mc)
156 {
157  // defaults for array dimensions
158  theArrayDimension = 0 ;
159 
160  // check plot order string
161  if ( thePlotFirst == "l" || thePlotFirst == "c" || thePlotFirst == "b" ) {
162  // OK
163  }
164  else {
165  // not correct: print warning and set default (l)
166  std::cout << "FlavourHistograms::FlavourHistograms : thePlotFirst was not correct : " << thePlotFirst << std::endl ;
167  std::cout << "FlavourHistograms::FlavourHistograms : Set it to default value (l)! " << std::endl ;
168  thePlotFirst = "l" ;
169  }
170 
171  if (!update) {
172  // book histos
173  HistoProviderDQM prov("Btag",folder);
174  if(mcPlots_%2==0) theHisto_all = (prov.book1D( theBaseNameTitle + "ALL" , theBaseNameDescription + " all jets" , theNBins , theLowerBound , theUpperBound )) ;
175  else theHisto_all = 0;
176  if (mcPlots_) {
177  if(mcPlots_>2) {
183  }
184  else{
185  theHisto_d = 0;
186  theHisto_u = 0;
187  theHisto_s = 0;
188  theHisto_g = 0;
189  theHisto_dus = 0;
190  }
195  }else{
196  theHisto_d = 0;
197  theHisto_u = 0;
198  theHisto_s = 0;
199  theHisto_c = 0;
200  theHisto_b = 0;
201  theHisto_g = 0;
202  theHisto_ni = 0;
203  theHisto_dus = 0;
204  theHisto_dusg = 0;
205  }
206 
207  // statistics if requested
208  if ( theStatistics ) {
209  if(theHisto_all) theHisto_all ->getTH1F()->Sumw2() ;
210  if (mcPlots_ ) {
211  if (mcPlots_>2 ) {
212  theHisto_d ->getTH1F()->Sumw2() ;
213  theHisto_u ->getTH1F()->Sumw2() ;
214  theHisto_s ->getTH1F()->Sumw2() ;
215  theHisto_g ->getTH1F()->Sumw2() ;
216  theHisto_dus ->getTH1F()->Sumw2() ;
217  }
218  theHisto_c ->getTH1F()->Sumw2() ;
219  theHisto_b ->getTH1F()->Sumw2() ;
220  theHisto_ni ->getTH1F()->Sumw2() ;
221  theHisto_dusg->getTH1F()->Sumw2() ;
222  }
223  }
224  } else {
225  HistoProviderDQM prov("Btag",folder);
226  if(theHisto_all) theHisto_all = prov.access(theBaseNameTitle + "ALL" ) ;
227  if (mcPlots_) {
228  if (mcPlots_>2 ) {
229  theHisto_d = prov.access(theBaseNameTitle + "D" ) ;
230  theHisto_u = prov.access(theBaseNameTitle + "U" ) ;
231  theHisto_s = prov.access(theBaseNameTitle + "S" ) ;
232  theHisto_g = prov.access(theBaseNameTitle + "G" ) ;
233  theHisto_dus = prov.access(theBaseNameTitle + "DUS" ) ;
234  }
235  theHisto_c = prov.access(theBaseNameTitle + "C" ) ;
236  theHisto_b = prov.access(theBaseNameTitle + "B" ) ;
237  theHisto_ni = prov.access(theBaseNameTitle + "NI" ) ;
238  theHisto_dusg = prov.access(theBaseNameTitle + "DUSG") ;
239  }
240  }
241 
242  // defaults for other data members
243  theCanvas = 0 ;
244 }
245 
246 
247 template <class T>
249  // delete the canvas*/
250  delete theCanvas ;
251 }
252 
253 
254 // define arrays (if needed)
255 // template <class T>
256 // void FlavourHistograms<T>::defineArray ( int * dimension , int max , int indexToPlot ) {
257 // // indexToPlot < 0 if all to be plotted
258 // theArrayDimension = dimension ;
259 // theMaxDimension = max ;
260 // theIndexToPlot = indexToPlot ;
261 // }
262 
263 // fill entry
264 template <class T> void
265 FlavourHistograms<T>::fill ( const int & flavour, const T & variable) const
266 {
267  // For single variables and arrays (for arrays only a single index can be filled)
268  fillVariable ( flavour , variable, 1.) ;
269 }
270 
271 template <class T> void
272 FlavourHistograms<T>::fill ( const int & flavour, const T & variable, const T & w) const
273 {
274  // For single variables and arrays (for arrays only a single index can be filled)
275  fillVariable ( flavour , variable, w) ;
276 }
277 
278 template <class T> void
279 FlavourHistograms<T>::fill ( const int & flavour, const T * variable) const
280 {
281  if ( theArrayDimension == 0 ) {
282  // single variable
283  fillVariable ( flavour , *variable, 1.) ;
284  } else {
285  // array
286  int iMax = (*theArrayDimension > theMaxDimension) ? theMaxDimension : *theArrayDimension ;
287  //
288  for ( int i = 0 ; i != iMax ; ++i ) {
289  // check if only one index to be plotted (<0: switched off -> plot all)
290  if ( ( theIndexToPlot < 0 ) || ( i == theIndexToPlot ) ) {
291  fillVariable ( flavour , *(variable+i) , 1.) ;
292  }
293  }
294 
295  // if single index to be filled but not enough entries: fill 0.0 (convention!)
296  if ( theIndexToPlot >= iMax ) {
297  // cout << "==>> The index to be filled is too big -> fill 0.0 : " << theBaseNameTitle << " : " << theIndexToPlot << " >= " << iMax << endl ;
298  const T& theZero = static_cast<T> ( 0.0 ) ;
299  fillVariable ( flavour , theZero , 1.) ;
300  }
301  }
302 }
303 
304 
305 template <class T>
307  if(theHisto_all) theHisto_all ->setAxisTitle(title) ;
308  if (mcPlots_) {
309  if (mcPlots_>2 ) {
310  theHisto_d ->setAxisTitle(title) ;
311  theHisto_u ->setAxisTitle(title) ;
312  theHisto_s ->setAxisTitle(title) ;
313  theHisto_g ->setAxisTitle(title) ;
314  theHisto_dus ->setAxisTitle(title) ;
315  }
316  theHisto_c ->setAxisTitle(title) ;
317  theHisto_b ->setAxisTitle(title) ;
318  theHisto_ni ->setAxisTitle(title) ;
319  theHisto_dusg->setAxisTitle(title) ;
320  }
321 }
322 
323 
324 template <class T>
325 void FlavourHistograms<T>::plot (TPad * theCanvas /* = 0 */) {
326 
327 //fixme:
328  bool btppNI = false;
329  bool btppColour = true;
330 
331  if (theCanvas)
332  theCanvas->cd();
333 
334  RecoBTag::setTDRStyle()->cd();
335  gPad->UseCurrentStyle();
336 // if ( !btppTitle ) gStyle->SetOptTitle ( 0 ) ;
337 //
338 // // here: plot histograms in a canvas
339 // theCanvas = new TCanvas ( "C" + theBaseNameTitle , "C" + theBaseNameDescription ,
340 // btppXCanvas , btppYCanvas ) ;
341 // theCanvas->SetFillColor ( 0 ) ;
342 // theCanvas->cd ( 1 ) ;
343  gPad->SetLogy ( 0 ) ;
344  if ( thePlotLog ) gPad->SetLogy ( 1 ) ;
345  gPad->SetGridx ( 0 ) ;
346  gPad->SetGridy ( 0 ) ;
347  gPad->SetTitle ( 0 ) ;
348 
349  MonitorElement * histo[4];
350  int col[4], lineStyle[4], markerStyle[4];
351  int lineWidth = 1 ;
352 
353  const double markerSize = gPad->GetWh() * gPad->GetHNDC() / 500.;
354 
355  // default (l)
356  histo[0] = theHisto_dusg ;
357  //CW histo_1 = theHisto_dus ;
358  histo[1] = theHisto_b ;
359  histo[2] = theHisto_c ;
360  histo[3]= 0 ;
361 
362  double max = theMax;
363  if (theMax<=0.) {
364  max = theHisto_dusg->getTH1F()->GetMaximum();
365  if (theHisto_b->getTH1F()->GetMaximum() > max) max = theHisto_b->getTH1F()->GetMaximum();
366  if (theHisto_c->getTH1F()->GetMaximum() > max) max = theHisto_c->getTH1F()->GetMaximum();
367  }
368 
369  if (btppNI) {
370  histo[3] = theHisto_ni ;
371  if (theHisto_ni->getTH1F()->GetMaximum() > max) max = theHisto_ni->getTH1F()->GetMaximum();
372  }
373 
374  if ( btppColour ) { // print colours
375  col[0] = 4 ;
376  col[1] = 2 ;
377  col[2] = 6 ;
378  col[3] = 3 ;
379  lineStyle[0] = 1 ;
380  lineStyle[1] = 1 ;
381  lineStyle[2] = 1 ;
382  lineStyle[3] = 1 ;
383  markerStyle[0] = 20 ;
384  markerStyle[1] = 21 ;
385  markerStyle[2] = 22 ;
386  markerStyle[3] = 23 ;
387  lineWidth = 1 ;
388  }
389  else { // different marker/line styles
390  col[1] = 1 ;
391  col[2] = 1 ;
392  col[3] = 1 ;
393  col[0] = 1 ;
394  lineStyle[0] = 2 ;
395  lineStyle[1] = 1 ;
396  lineStyle[2] = 3 ;
397  lineStyle[3] = 4 ;
398  markerStyle[0] = 20 ;
399  markerStyle[1] = 21 ;
400  markerStyle[2] = 22 ;
401  markerStyle[3] = 23 ;
402  }
403 
404  // if changing order (NI stays always last)
405 
406  // c to plot first
407  if ( thePlotFirst == "c" ) {
408  histo[0] = theHisto_c ;
409  if ( btppColour ) col[0] = 6 ;
410  if ( !btppColour ) lineStyle[0] = 3 ;
411  histo[2] = theHisto_dusg ;
412  if ( btppColour ) col[2] = 4 ;
413  if ( !btppColour ) lineStyle[2] = 2 ;
414  }
415 
416  // b to plot first
417  if ( thePlotFirst == "b" ) {
418  histo[0] = theHisto_b ;
419  if ( btppColour ) col[0] = 2 ;
420  if ( !btppColour ) lineStyle[0] = 1 ;
421  histo[1] = theHisto_dusg ;
422  if ( btppColour ) col[1] = 4 ;
423  if ( !btppColour ) lineStyle[1] = 2 ;
424  }
425 
426 
427  histo[0] ->getTH1F()->GetXaxis()->SetTitle ( theBaseNameDescription.c_str() ) ;
428  histo[0] ->getTH1F()->GetYaxis()->SetTitle ( "Arbitrary Units" ) ;
429  histo[0] ->getTH1F()->GetYaxis()->SetTitleOffset(1.25) ;
430 
431  for (int i=0; i != 4; ++i) {
432  if (histo[i]== 0 ) continue;
433  histo[i] ->getTH1F()->SetStats ( false ) ;
434  histo[i] ->getTH1F()->SetLineStyle ( lineStyle[i] ) ;
435  histo[i] ->getTH1F()->SetLineWidth ( lineWidth ) ;
436  histo[i] ->getTH1F()->SetLineColor ( col[i] ) ;
437  histo[i] ->getTH1F()->SetMarkerStyle ( markerStyle[i] ) ;
438  histo[i] ->getTH1F()->SetMarkerColor ( col[i] ) ;
439  histo[i] ->getTH1F()->SetMarkerSize ( markerSize ) ;
440  }
441 
442  if ( thePlotNormalized ) {
443 // cout <<histo[0]->GetEntries() <<" "<< histo[1]->GetEntries() <<" "<< histo[2]->GetEntries()<<" "<<histo[3]->GetEntries()<<endl;
444  if (histo[0]->getTH1F()->GetEntries() != 0) {histo[0]->getTH1F() ->DrawNormalized() ;} else { histo[0]->getTH1F() ->SetMaximum(1.0);
445 histo[0] ->getTH1F()->Draw() ;}
446  if (histo[1]->getTH1F()->GetEntries() != 0) histo[1] ->getTH1F()->DrawNormalized("Same") ;
447  if (histo[2]->getTH1F()->GetEntries() != 0) histo[2]->getTH1F() ->DrawNormalized("Same") ;
448  if ((histo[3] != 0) && (histo[3]->getTH1F()->GetEntries() != 0)) histo[3] ->getTH1F()->DrawNormalized("Same") ;
449  }
450  else {
451  histo[0]->getTH1F()->SetMaximum(max*1.05);
452  if (theMin!=-1.) histo[0]->getTH1F()->SetMinimum(theMin);
453  histo[0]->getTH1F()->Draw() ;
454  histo[1]->getTH1F()->Draw("Same") ;
455  histo[2]->getTH1F()->Draw("Same") ;
456  if ( histo[3] != 0 ) histo[3]->getTH1F()->Draw("Same") ;
457  }
458 
459 }
460 
461 template <class T>
463 {
464  TCanvas tc(theBaseNameTitle.c_str() , theBaseNameDescription.c_str());
465 
466  plot(&tc);
467  tc.Print((name + theBaseNameTitle + ".eps").c_str());
468 }
469 
470 
471 // needed for efficiency computations -> this / b
472 // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
473 template <class T>
475  // divide histos using binomial errors
476  //
477  // ATTENTION: It's the responsability of the user to make sure that the HistoDescriptions
478  // involved in this operation have been constructed with the statistics option switched on!!
479  //
480  if(theHisto_all) theHisto_all ->getTH1F()-> Divide ( theHisto_all->getTH1F() , bHD.histo_all () , 1.0 , 1.0 , "b" ) ;
481  if (mcPlots_) {
482  if (mcPlots_>2 ) {
483  theHisto_d ->getTH1F()-> Divide ( theHisto_d ->getTH1F() , bHD.histo_d () , 1.0 , 1.0 , "b" ) ;
484  theHisto_u ->getTH1F()-> Divide ( theHisto_u ->getTH1F() , bHD.histo_u () , 1.0 , 1.0 , "b" ) ;
485  theHisto_s ->getTH1F()-> Divide ( theHisto_s ->getTH1F() , bHD.histo_s () , 1.0 , 1.0 , "b" ) ;
486  theHisto_g ->getTH1F()-> Divide ( theHisto_g ->getTH1F() , bHD.histo_g () , 1.0 , 1.0 , "b" ) ;
487  theHisto_dus ->getTH1F()-> Divide ( theHisto_dus->getTH1F() , bHD.histo_dus () , 1.0 , 1.0 , "b" ) ;
488  }
489  theHisto_c ->getTH1F()-> Divide ( theHisto_c ->getTH1F() , bHD.histo_c () , 1.0 , 1.0 , "b" ) ;
490  theHisto_b ->getTH1F()-> Divide ( theHisto_b ->getTH1F() , bHD.histo_b () , 1.0 , 1.0 , "b" ) ;
491  theHisto_ni ->getTH1F()-> Divide ( theHisto_ni->getTH1F() , bHD.histo_ni () , 1.0 , 1.0 , "b" ) ;
492  theHisto_dusg ->getTH1F()-> Divide ( theHisto_dusg->getTH1F() , bHD.histo_dusg() , 1.0 , 1.0 , "b" ) ;
493  }
494 }
495 
496 
497 template <class T>
498 void FlavourHistograms<T>::fillVariable ( const int & flavour , const T & var , const T & w) const {
499 
500  // all, except for the Jet Multiplicity which is not filled for each jets but for each events
501  if( (theBaseNameDescription != "Jet Multiplicity" || flavour == -1) && theHisto_all) theHisto_all->Fill ( var ,w) ;
502 
503  // flavour specific
504  if (!mcPlots_ || (theBaseNameDescription == "Jet Multiplicity" && flavour == -1)) return;
505 
506  switch(flavour) {
507  case 1:
508  if (mcPlots_>2 ) {
509  theHisto_d->Fill( var ,w);
510  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dus->Fill( var ,w);
511  }
512  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dusg->Fill( var ,w);
513  return;
514  case 2:
515  if (mcPlots_>2 ) {
516  theHisto_u->Fill( var ,w);
517  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dus->Fill( var ,w);
518  }
519  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dusg->Fill( var ,w);
520  return;
521  case 3:
522  if (mcPlots_>2 ) {
523  theHisto_s->Fill( var ,w);
524  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dus->Fill( var ,w);
525  }
526  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dusg->Fill( var ,w);
527  return;
528  case 4:
529  theHisto_c->Fill( var ,w);
530  return;
531  case 5:
532  theHisto_b->Fill( var ,w);
533  return;
534  case 21:
535  if (mcPlots_>2 ) theHisto_g->Fill( var ,w);
536  if(theBaseNameDescription != "Jet Multiplicity") theHisto_dusg->Fill( var ,w);
537  return;
538  case 123:
539  if (mcPlots_>2 && theBaseNameDescription == "Jet Multiplicity") theHisto_dus->Fill( var ,w);
540  return;
541  case 12321:
542  if (theBaseNameDescription == "Jet Multiplicity") theHisto_dusg->Fill( var ,w);
543  return;
544  default:
545  theHisto_ni->Fill( var ,w);
546  return;
547  }
548 }
549 
550 template <class T>
551 std::vector<TH1F*> FlavourHistograms<T>::getHistoVector() const
552 {
553  std::vector<TH1F*> histoVector;
554  if(theHisto_all) histoVector.push_back ( theHisto_all->getTH1F() );
555  if (mcPlots_) {
556  if (mcPlots_>2 ) {
557  histoVector.push_back ( theHisto_d->getTH1F() );
558  histoVector.push_back ( theHisto_u->getTH1F() );
559  histoVector.push_back ( theHisto_s->getTH1F() );
560  histoVector.push_back ( theHisto_g ->getTH1F() );
561  histoVector.push_back ( theHisto_dus->getTH1F() );
562  }
563  histoVector.push_back ( theHisto_c->getTH1F() );
564  histoVector.push_back ( theHisto_b->getTH1F() );
565  histoVector.push_back ( theHisto_ni->getTH1F() );
566  histoVector.push_back ( theHisto_dusg->getTH1F());
567  }
568  return histoVector;
569 }
570 #endif
double lowerBound() const
int i
Definition: DBlmapReader.cc:9
MonitorElement * theHisto_g
void plot(TPad *theCanvas=0)
MonitorElement * theHisto_c
void SetMinimum(const double &min)
TH1F * histo_all() const
TStyle * setTDRStyle()
Definition: Tools.cc:287
MonitorElement * theHisto_u
int maxDimension() const
TH1F * histo_c() const
void fill(const int &flavour, const T &variable) const
MonitorElement * theHisto_all
std::string baseNameDescription() const
TH1F * histo_dus() const
std::vector< TH1F * > getHistoVector() const
TH1F * histo_b() const
TH1F * histo_g() const
void SetMaximum(const double &max)
void epsPlot(const std::string &name)
virtual MonitorElement * book1D(const std::string &name, const std::string &title, const int &nchX, const double &lowX, const double &highX)
const T & max(const T &a, const T &b)
std::string baseNameTitle() const
void settitle(const char *title)
TH1F * histo_d() const
TH1F * getTH1F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
int * arrayDimension() const
MonitorElement * theHisto_d
MonitorElement * theHisto_dusg
std::string theBaseNameDescription
TH1F * getTH1F(void) const
MonitorElement * theHisto_b
TH1F * histo_s() const
int indexToPlot() const
TH1F * histo_ni() const
void divide(const FlavourHistograms< T > &bHD) const
std::string plotFirst() const
bool plotNormalized() const
bool plotLog() const
std::string theBaseNameTitle
#define update(a, b)
void fillVariable(const int &flavour, const T &var, const T &w) const
TH1F * histo_u() const
tuple cout
Definition: gather_cfg.py:121
virtual MonitorElement * access(const std::string &name)
T w() const
double upperBound() const
MonitorElement * theHisto_s
int col
Definition: cuy.py:1008
bool statistics() const
long double T
int flavour(const Candidate &part)
Definition: pdgIdUtils.h:31
TH1F * histo_dusg() const
MonitorElement * theHisto_dus
MonitorElement * theHisto_ni