CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FlavourHistorgrams2D.h
Go to the documentation of this file.
1 
2 #ifndef FlavourHistograms2D_H
3 #define FlavourHistograms2D_H
4 
8 
9 // #include "BTagPlotPrintC.h"
10 
11 #include "TH2F.h"
12 #include "TProfile.h"
13 #include "TCanvas.h"
14 #include "TROOT.h"
15 #include "TSystem.h"
16 #include "TStyle.h"
17 
20 
21 #include <iostream>
22 #include <vector>
23 #include <string>
24 //class DQMStore;
25 
26 //
27 // class to describe Histo
28 //
29 template <class T, class G>
31 
32 public:
33 
34  FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
35  int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
36  int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
37  bool statistics_ , bool update, std::string folder, unsigned int mc,
38  bool createProfile) ;
39 
40  virtual ~FlavourHistograms2D () ;
41 
42 
43  // define arrays (if needed)
44 // void defineArray ( int * dimension , int max , int indexToPlot ) ;
45 
46  // fill entry
47  // For single variables and arrays (for arrays only a single index can be filled)
48  void fill ( const int & flavour, const T & variableX, const G & variableY) const;
49  void fill ( const int & flavour, const T & variableX, const G & variableY, const float & w) const;
50 
51  // For single variables and arrays
52  void fill ( const int & flavour, const T * variableX, const G * variableY) const;
53  void fill ( const int & flavour, const T * variableX, const G * variableY, const float & w) const;
54 
55 
56  void settitle(const char* titleX, const char* titleY) ;
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 FlavourHistograms2D<T, G> & 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 nBinsX () const { return theNBinsX ; }
70  inline int nBinsY () const { return theNBinsY ; }
71  inline double lowerBoundX () const { return theLowerBoundX ; }
72  inline double upperBoundX () const { return theUpperBoundX ; }
73  inline double lowerBoundY () const { return theLowerBoundY ; }
74  inline double upperBoundY () const { return theUpperBoundY ; }
75  inline bool statistics () const { return theStatistics ; }
76 
77  // access to the histos
78  inline TH2F * histo_all () const { return theHisto_all->getTH2F() ; }
79  inline TH2F * histo_d () const { return theHisto_d ->getTH2F() ; }
80  inline TH2F * histo_u () const { return theHisto_u->getTH2F() ; }
81  inline TH2F * histo_s () const { return theHisto_s->getTH2F() ; }
82  inline TH2F * histo_c () const { return theHisto_c->getTH2F() ; }
83  inline TH2F * histo_b () const { return theHisto_b->getTH2F() ; }
84  inline TH2F * histo_g () const { return theHisto_g->getTH2F() ; }
85  inline TH2F * histo_ni () const { return theHisto_ni->getTH2F() ; }
86  inline TH2F * histo_dus () const { return theHisto_dus->getTH2F() ; }
87  inline TH2F * histo_dusg () const { return theHisto_dusg->getTH2F() ; }
88 
89  TProfile * profile_all () const { return theProfile_all->getTProfile() ; }
90  TProfile * profile_d () const { return theProfile_d ->getTProfile() ; }
91  TProfile * profile_u () const { return theProfile_u->getTProfile() ; }
92  TProfile * profile_s () const { return theProfile_s->getTProfile() ; }
93  TProfile * profile_c () const { return theProfile_c->getTProfile() ; }
94  TProfile * profile_b () const { return theProfile_b->getTProfile() ; }
95  TProfile * profile_g () const { return theProfile_g->getTProfile() ; }
96  TProfile * profile_ni () const { return theProfile_ni->getTProfile() ; }
97  TProfile * profile_dus () const { return theProfile_dus->getTProfile() ; }
98  TProfile * profile_dusg () const { return theProfile_dusg->getTProfile() ; }
99 
100  std::vector<TH2F*> getHistoVector() const;
101 
102  std::vector<TProfile*> getProfileVector() const;
103 
104 
105 
106 protected:
107 
108  void fillVariable ( const int & flavour , const T & varX , const G & varY , const float & w) const;
109 
110  //
111  // the data members
112  //
113 
114 // T * theVariable ;
115 
116  // for arrays
119  int theIndexToPlot ; // in case that not the complete array has to be plotted
120 
123  int theNBinsX ;
124  int theNBinsY ;
125  double theLowerBoundX ;
126  double theUpperBoundX ;
127  double theLowerBoundY ;
128  double theUpperBoundY ;
130  double theMin, theMax;
131 
132  // the histos
143 
144  // the profiles
155 
156  // DQMStore * dqmStore_;
157 
158 
159  // the canvas to plot
160  private:
162 
163  unsigned int mcPlots_;
165 
166 } ;
167 
168 
169 
170 template <class T, class G>
171 FlavourHistograms2D<T, G>::FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
172  int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
173  int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
174  bool statistics_ ,
175  bool update, std::string folder, unsigned int mc, bool createProfile) :
176  // BaseFlavourHistograms2D () ,
177  // theVariable ( variable_ ) ,
178  theMaxDimension(-1), theIndexToPlot(-1), theBaseNameTitle ( baseNameTitle_ ) , theBaseNameDescription ( baseNameDescription_ ) ,
179  theNBinsX ( nBinsX_ ) , theNBinsY (nBinsY_),
180  theLowerBoundX ( lowerBoundX_ ) , theUpperBoundX ( upperBoundX_ ) ,
181  theLowerBoundY ( lowerBoundY_ ) , theUpperBoundY ( upperBoundY_ ) ,
182  theStatistics ( statistics_ ) , theMin(-1.), theMax(-1.), mcPlots_(mc), createProfile_(createProfile)
183 {
184  // defaults for array dimensions
185  theArrayDimension = 0 ;
186 
187  if (!update) {
188  // book histos
189  HistoProviderDQM prov("Btag",folder);
191  else theHisto_all = 0;
192  if (mcPlots_) {
193  if (mcPlots_>2) {
199  }
200  else {
201  theHisto_d = 0;
202  theHisto_u = 0;
203  theHisto_s = 0;
204  theHisto_g = 0;
205  theHisto_dus = 0;
206  }
211  }else{
212  theHisto_d = 0;
213  theHisto_u = 0;
214  theHisto_s = 0;
215  theHisto_c = 0;
216  theHisto_b = 0;
217  theHisto_g = 0;
218  theHisto_ni = 0;
219  theHisto_dus = 0;
220  theHisto_dusg = 0;
221  }
222 
223  if (createProfile_) {
225  else theProfile_all = 0;
226  if (mcPlots_) {
227  if (mcPlots_>2) {
233  }
234  else {
235  theProfile_d = 0;
236  theProfile_u = 0;
237  theProfile_s = 0;
238  theProfile_g = 0;
239  theProfile_dus = 0;
240  }
245  } else{
246  theProfile_d = 0;
247  theProfile_u = 0;
248  theProfile_s = 0;
249  theProfile_c = 0;
250  theProfile_b = 0;
251  theProfile_g = 0;
252  theProfile_ni = 0;
253  theProfile_dus = 0;
254  theProfile_dusg = 0;
255  }
256  } else {
257  theProfile_all = 0;
258  theProfile_d = 0;
259  theProfile_u = 0;
260  theProfile_s = 0;
261  theProfile_c = 0;
262  theProfile_b = 0;
263  theProfile_g = 0;
264  theProfile_ni = 0;
265  theProfile_dus = 0;
266  theProfile_dusg = 0;
267  }
268  // statistics if requested
269  if ( theStatistics ) {
270  if(theHisto_all) theHisto_all ->getTH2F()->Sumw2() ;
271  if(createProfile)
272  if(theProfile_all) theProfile_all ->getTProfile()->Sumw2() ;
273  if (mcPlots_) {
274  if (mcPlots_>2) {
275  theHisto_d ->getTH2F()->Sumw2() ;
276  theHisto_u ->getTH2F()->Sumw2() ;
277  theHisto_s ->getTH2F()->Sumw2() ;
278  theHisto_g ->getTH2F()->Sumw2() ;
279  theHisto_dus ->getTH2F()->Sumw2() ;
280  }
281  theHisto_c ->getTH2F()->Sumw2() ;
282  theHisto_b ->getTH2F()->Sumw2() ;
283  theHisto_ni ->getTH2F()->Sumw2() ;
284  theHisto_dusg->getTH2F()->Sumw2() ;
285 
286  if(createProfile) {
287  if (mcPlots_>2) {
288  theProfile_d ->getTProfile()->Sumw2() ;
289  theProfile_u ->getTProfile()->Sumw2() ;
290  theProfile_s ->getTProfile()->Sumw2() ;
291  theProfile_g ->getTProfile()->Sumw2() ;
292  theProfile_dus ->getTProfile()->Sumw2() ;
293  }
294  theProfile_c ->getTProfile()->Sumw2() ;
295  theProfile_b ->getTProfile()->Sumw2() ;
296  theProfile_ni ->getTProfile()->Sumw2() ;
297  theProfile_dusg->getTProfile()->Sumw2() ;
298  }
299  }
300  }
301  } else {
302  HistoProviderDQM prov("Btag",folder);
303  if(theHisto_all) theHisto_all = prov.access(theBaseNameTitle + "ALL" ) ;
304  if (mcPlots_) {
305  if (mcPlots_>2) {
306  theHisto_d = prov.access(theBaseNameTitle + "D" ) ;
307  theHisto_u = prov.access(theBaseNameTitle + "U" ) ;
308  theHisto_s = prov.access(theBaseNameTitle + "S" ) ;
309  theHisto_g = prov.access(theBaseNameTitle + "G" ) ;
310  theHisto_dus = prov.access(theBaseNameTitle + "DUS" ) ;
311  }
312  theHisto_c = prov.access(theBaseNameTitle + "C" ) ;
313  theHisto_b = prov.access(theBaseNameTitle + "B" ) ;
314  theHisto_ni = prov.access(theBaseNameTitle + "NI" ) ;
315  theHisto_dusg = prov.access(theBaseNameTitle + "DUSG") ;
316  }
317 
318  if(createProfile_) {
319  if(theProfile_all) theProfile_all = prov.access(theBaseNameTitle + "_Profile_ALL");
320  if(mcPlots_) {
321  if (mcPlots_>2) {
322  theProfile_d = prov.access(theBaseNameTitle + "_Profile_D" ) ;
323  theProfile_u = prov.access(theBaseNameTitle + "_Profile_U" ) ;
324  theProfile_s = prov.access(theBaseNameTitle + "_Profile_S" ) ;
325  theProfile_g = prov.access(theBaseNameTitle + "_Profile_G" ) ;
326  theProfile_dus = prov.access(theBaseNameTitle + "_Profile_DUS" ) ;
327  }
328  theProfile_c = prov.access(theBaseNameTitle + "_Profile_C" ) ;
329  theProfile_b = prov.access(theBaseNameTitle + "_Profile_B" ) ;
330  theProfile_ni = prov.access(theBaseNameTitle + "_Profile_NI" ) ;
331  theProfile_dusg = prov.access(theBaseNameTitle + "_Profile_DUSG") ;
332  }
333  }
334  }
335 }
336 
337 
338 template <class T, class G>
340 
341 
342 // define arrays (if needed)
343 // template <class T, class G>
344 // void FlavourHistograms2D<T, G>::defineArray ( int * dimension , int max , int indexToPlot ) {
345 // // indexToPlot < 0 if all to be plotted
346 // theArrayDimension = dimension ;
347 // theMaxDimension = max ;
348 // theIndexToPlot = indexToPlot ;
349 // }
350 
351 // fill entry
352 template <class T, class G> void
353  FlavourHistograms2D<T, G>::fill ( const int & flavour, const T & variableX, const G & variableY, const float & w) const
354 {
355  // For single variables and arrays (for arrays only a single index can be filled)
356  fillVariable ( flavour , variableX , variableY , w ) ;
357 }
358 
359 template <class T, class G> void
360 FlavourHistograms2D<T, G>::fill ( const int & flavour, const T & variableX, const G & variableY) const
361 {
362  fill ( flavour , variableX , variableY , 1. ) ;
363 }
364 
365 template <class T, class G> void
366  FlavourHistograms2D<T, G>::fill ( const int & flavour, const T * variableX, const G * variableY, const float & w) const
367 {
368  if ( theArrayDimension == 0 ) {
369  // single variable
370  fillVariable ( flavour , *variableX, *variableY , w) ;
371  } else {
372  // array
373  int iMax = *theArrayDimension ;
374  if ( *theArrayDimension > theMaxDimension ) iMax = theMaxDimension ;
375  //
376  for ( int i = 0 ; i != iMax ; ++i ) {
377  // check if only one index to be plotted (<0: switched off -> plot all)
378  if ( ( theIndexToPlot < 0 ) || ( i == theIndexToPlot ) ) {
379  fillVariable ( flavour , *(variableX+i) , *(variableY+i) , w) ;
380  }
381  }
382 
383  // if single index to be filled but not enough entries: fill 0.0 (convention!)
384  if ( theIndexToPlot >= iMax ) {
385  // cout << "==>> The index to be filled is too big -> fill 0.0 : " << theBaseNameTitle << " : " << theIndexToPlot << " >= " << iMax << endl ;
386  const T& theZeroT = static_cast<T> ( 0.0) ;
387  const G& theZeroG = static_cast<T> ( 0.0 );
388  fillVariable ( flavour , theZeroT , theZeroG , w ) ;
389  }
390  }
391 }
392 
393 template <class T, class G> void
394  FlavourHistograms2D<T, G>::fill ( const int & flavour, const T * variableX, const G * variableY) const
395 {
396  fill ( flavour, variableX , variableY , 1. );
397 }
398 
399 template <class T, class G>
400 void FlavourHistograms2D<T, G>::settitle(const char* titleX, const char* titleY) {
401  if(theHisto_all) theHisto_all ->setAxisTitle(titleX) ;
402  if(theHisto_all) theHisto_all ->setAxisTitle(titleY, 2) ;
403  if (mcPlots_) {
404 
405  if(theHisto_d) theHisto_d ->setAxisTitle(titleX) ;
406  if(theHisto_u) theHisto_u ->setAxisTitle(titleX) ;
407  if(theHisto_s) theHisto_s ->setAxisTitle(titleX) ;
408  if(theHisto_c) theHisto_c ->setAxisTitle(titleX) ;
409  if(theHisto_b) theHisto_b ->setAxisTitle(titleX) ;
410  if(theHisto_g) theHisto_g ->setAxisTitle(titleX) ;
411  if(theHisto_ni) theHisto_ni ->setAxisTitle(titleX) ;
412  if(theHisto_dus) theHisto_dus ->setAxisTitle(titleX) ;
413  if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleX) ;
414  if(theHisto_d) theHisto_d ->setAxisTitle(titleY, 2) ;
415  if(theHisto_u) theHisto_u ->setAxisTitle(titleY, 2) ;
416  if(theHisto_s) theHisto_s ->setAxisTitle(titleY, 2) ;
417  if(theHisto_c) theHisto_c ->setAxisTitle(titleY, 2) ;
418  if(theHisto_b) theHisto_b ->setAxisTitle(titleY, 2) ;
419  if(theHisto_g) theHisto_g ->setAxisTitle(titleY, 2) ;
420  if(theHisto_ni) theHisto_ni ->setAxisTitle(titleY, 2) ;
421  if(theHisto_dus) theHisto_dus ->setAxisTitle(titleY, 2) ;
422  if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleY, 2) ;
423  }
424 
425  if(createProfile_) {
426  if(theProfile_all) theProfile_all ->setAxisTitle(titleX) ;
427  if(theProfile_all) theProfile_all ->setAxisTitle(titleY, 2) ;
428  if (mcPlots_) {
429 
430  if(theProfile_d) theProfile_d ->setAxisTitle(titleX) ;
431  if(theProfile_u) theProfile_u ->setAxisTitle(titleX) ;
432  if(theProfile_s) theProfile_s ->setAxisTitle(titleX) ;
433  if(theProfile_c) theProfile_c ->setAxisTitle(titleX) ;
434  if(theProfile_b) theProfile_b ->setAxisTitle(titleX) ;
435  if(theProfile_g) theProfile_g ->setAxisTitle(titleX) ;
436  if(theProfile_ni) theProfile_ni ->setAxisTitle(titleX) ;
437  if(theProfile_dus) theProfile_dus ->setAxisTitle(titleX) ;
438  if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleX) ;
439  if(theProfile_d) theProfile_d ->setAxisTitle(titleY, 2) ;
440  if(theProfile_u) theProfile_u ->setAxisTitle(titleY, 2) ;
441  if(theProfile_s) theProfile_s ->setAxisTitle(titleY, 2) ;
442  if(theProfile_c) theProfile_c ->setAxisTitle(titleY, 2) ;
443  if(theProfile_b) theProfile_b ->setAxisTitle(titleY, 2) ;
444  if(theProfile_g) theProfile_g ->setAxisTitle(titleY, 2) ;
445  if(theProfile_ni) theProfile_ni ->setAxisTitle(titleY, 2) ;
446  if(theProfile_dus) theProfile_dus ->setAxisTitle(titleY, 2) ;
447  if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleY, 2) ;
448  }
449  }
450 }
451 
452 // needed for efficiency computations -> this / b
453 // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
454 template <class T, class G>
456  // divide histos using binomial errors
457  //
458  // ATTENTION: It's the responsability of the user to make sure that the HistoDescriptions
459  // involved in this operation have been constructed with the statistics option switched on!!
460  //
461  if(theHisto_all) theHisto_all ->getTH2F()-> Divide ( theHisto_all->getTH2F() , bHD.histo_all () , 1.0 , 1.0 , "b" ) ;
462  if (mcPlots_) {
463  if (mcPlots_>2) {
464  theHisto_d ->getTH2F()-> Divide ( theHisto_d ->getTH2F() , bHD.histo_d () , 1.0 , 1.0 , "b" ) ;
465  theHisto_u ->getTH2F()-> Divide ( theHisto_u ->getTH2F() , bHD.histo_u () , 1.0 , 1.0 , "b" ) ;
466  theHisto_s ->getTH2F()-> Divide ( theHisto_s ->getTH2F() , bHD.histo_s () , 1.0 , 1.0 , "b" ) ;
467  theHisto_g ->getTH2F()-> Divide ( theHisto_g ->getTH2F() , bHD.histo_g () , 1.0 , 1.0 , "b" ) ;
468  theHisto_dus ->getTH2F()-> Divide ( theHisto_dus->getTH2F() , bHD.histo_dus () , 1.0 , 1.0 , "b" ) ;
469  }
470  theHisto_c ->getTH2F()-> Divide ( theHisto_c ->getTH2F() , bHD.histo_c () , 1.0 , 1.0 , "b" ) ;
471  theHisto_b ->getTH2F()-> Divide ( theHisto_b ->getTH2F() , bHD.histo_b () , 1.0 , 1.0 , "b" ) ;
472  theHisto_ni ->getTH2F()-> Divide ( theHisto_ni->getTH2F() , bHD.histo_ni () , 1.0 , 1.0 , "b" ) ;
473  theHisto_dusg ->getTH2F()-> Divide ( theHisto_dusg->getTH2F() , bHD.histo_dusg() , 1.0 , 1.0 , "b" ) ;
474  }
475 }
476 
477 
478 template <class T, class G>
479  void FlavourHistograms2D<T, G>::fillVariable ( const int & flavour , const T & varX , const G & varY , const float & w) const {
480  // all
481  if(theHisto_all) theHisto_all->Fill ( varX, varY,w ) ;
482  if(createProfile_)
483  //if(theProfile_all) theProfile_all->Fill( varX, varY, w );
484  if(theProfile_all) theProfile_all->Fill( varX, varY);
485 
486  //exit(-1);
487  // flavour specific
488  if (!mcPlots_) return;
489 
490  switch( flavour ) {
491  case 1:
492  if (mcPlots_>2) {
493  theHisto_d->Fill( varX, varY,w );
494  theHisto_dus->Fill( varX, varY,w );
495  }
496  theHisto_dusg->Fill( varX, varY,w );
497  if(createProfile_) {
498  //theProfile_d->Fill(varX, varY,w);
499  //theProfile_dus->Fill(varX, varY,w);
500  //theProfile_dusg->Fill(varX, varY,w);
501  if (mcPlots_>2) {
502  theProfile_d->Fill(varX, varY);
503  theProfile_dus->Fill(varX, varY);
504  }
505  theProfile_dusg->Fill(varX, varY);
506  }
507  return;
508  case 2:
509  if (mcPlots_>2) {
510  theHisto_u->Fill( varX, varY,w );
511  theHisto_dus->Fill( varX, varY,w );
512  }
513  theHisto_dusg->Fill( varX, varY,w );
514  if(createProfile_) {
515  //theProfile_u->Fill(varX, varY,w);
516  //theProfile_dus->Fill(varX, varY,w);
517  //theProfile_dusg->Fill(varX, varY,w);
518  if (mcPlots_>2) {
519  theProfile_u->Fill(varX, varY);
520  theProfile_dus->Fill(varX, varY);
521  }
522  theProfile_dusg->Fill(varX, varY);
523  }
524  return;
525  case 3:
526  if (mcPlots_>2) {
527  theHisto_s->Fill( varX, varY,w );
528  theHisto_dus->Fill( varX, varY,w );
529  }
530  theHisto_dusg->Fill( varX, varY,w );
531  if(createProfile_) {
532  //theProfile_s->Fill(varX, varY,w);
533  //theProfile_dus->Fill(varX, varY,w);
534  //theProfile_dusg->Fill(varX, varY,w);
535  if (mcPlots_>2) {
536  theProfile_s->Fill(varX, varY);
537  theProfile_dus->Fill(varX, varY);
538  }
539  theProfile_dusg->Fill(varX, varY);
540  }
541  return;
542  case 4:
543  theHisto_c->Fill( varX, varY,w );
544  //if(createProfile_) theProfile_c->Fill(varX, varY,w);
545  if(createProfile_) theProfile_c->Fill(varX, varY);
546  return;
547  case 5:
548  theHisto_b->Fill( varX, varY,w );
549  //if(createProfile_) theProfile_b->Fill(varX, varY,w);
550  if(createProfile_) theProfile_b->Fill(varX, varY);
551  return;
552  case 21:
553  if (mcPlots_>2) theHisto_g->Fill( varX, varY,w );
554  theHisto_dusg->Fill( varX, varY,w );
555  if(createProfile_) {
556  //theProfile_g->Fill(varX, varY,w);
557  //theProfile_dusg->Fill(varX, varY,w);
558  if (mcPlots_>2) theProfile_g->Fill(varX, varY);
559  theProfile_dusg->Fill(varX, varY);
560  }
561  return;
562  default:
563  theHisto_ni->Fill( varX, varY,w );
564  //if(createProfile_) theProfile_ni->Fill(varX, varY,w);
565  if(createProfile_) theProfile_ni->Fill(varX, varY);
566  return;
567  }
568 }
569 
570 template <class T, class G>
572 {
573  std::vector<TH2F*> histoVector;
574  if(theHisto_all) histoVector.push_back ( theHisto_all->getTH2F() );
575  if (mcPlots_) {
576  if (mcPlots_>2) {
577  histoVector.push_back ( theHisto_d->getTH2F() );
578  histoVector.push_back ( theHisto_u->getTH2F() );
579  histoVector.push_back ( theHisto_s->getTH2F() );
580  histoVector.push_back ( theHisto_g ->getTH2F() );
581  histoVector.push_back ( theHisto_dus->getTH2F() );
582  }
583  histoVector.push_back ( theHisto_c->getTH2F() );
584  histoVector.push_back ( theHisto_b->getTH2F() );
585  histoVector.push_back ( theHisto_ni->getTH2F() );
586  histoVector.push_back ( theHisto_dusg->getTH2F());
587  }
588  return histoVector;
589 }
590 
591 template <class T, class G>
592 std::vector<TProfile*> FlavourHistograms2D<T, G>::getProfileVector() const
593 {
594  std::vector<TProfile*> profileVector;
595  if(createProfile_) {
596  if(theProfile_all) profileVector.push_back ( theProfile_all->getTProfile() );
597  if (mcPlots_) {
598  if (mcPlots_>2) {
599  profileVector.push_back ( theProfile_d->getTProfile() );
600  profileVector.push_back ( theProfile_u->getTProfile() );
601  profileVector.push_back ( theProfile_s->getTProfile() );
602  profileVector.push_back ( theProfile_g ->getTProfile() );
603  profileVector.push_back ( theProfile_dus->getTProfile() );
604  }
605  profileVector.push_back ( theProfile_c->getTProfile() );
606  profileVector.push_back ( theProfile_b->getTProfile() );
607  profileVector.push_back ( theProfile_ni->getTProfile() );
608  profileVector.push_back ( theProfile_dusg->getTProfile());
609  }
610  }
611  return profileVector;
612 }
613 
614 #endif
TProfile * profile_c() const
std::string theBaseNameDescription
MonitorElement * theProfile_s
int i
Definition: DBlmapReader.cc:9
double lowerBoundX() const
TProfile * getTProfile(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
string fill
Definition: lumiContext.py:319
double lowerBoundY() const
MonitorElement * theHisto_g
void SetMaximum(const double &max)
TH2F * histo_all() const
MonitorElement * theProfile_dusg
void settitle(const char *titleX, const char *titleY)
MonitorElement * theHisto_dusg
MonitorElement * theHisto_u
virtual MonitorElement * bookProfile(const std::string &name, const std::string &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
virtual MonitorElement * book2D(const std::string &name, const std::string &title, const int &nchX, const double &lowX, const double &highX, const int &nchY, const double &lowY, const double &highY)
#define min(a, b)
Definition: mlp_lapack.h:161
std::string baseNameTitle() const
TProfile * profile_b() const
void divide(const FlavourHistograms2D< T, G > &bHD) const
MonitorElement * theHisto_c
void fill(const int &flavour, const T &variableX, const G &variableY) const
MonitorElement * theProfile_all
MonitorElement * theProfile_ni
const T & max(const T &a, const T &b)
MonitorElement * theHisto_dus
TH2F * histo_dusg() const
MonitorElement * theProfile_u
MonitorElement * theHisto_s
TH2F * histo_dus() const
std::vector< TProfile * > getProfileVector() const
TProfile * profile_u() const
TProfile * profile_all() const
MonitorElement * theProfile_b
void SetMinimum(const double &min)
MonitorElement * theProfile_c
double upperBoundX() const
std::vector< TH2F * > getHistoVector() const
MonitorElement * theProfile_d
std::string baseNameDescription() const
TProfile * profile_d() const
MonitorElement * theProfile_dus
TH2F * histo_ni() const
MonitorElement * theHisto_all
TProfile * profile_ni() const
#define update(a, b)
TProfile * getTProfile(void) const
TH2F * getTH2F(std::string name, std::string process, std::string rootfolder, DQMStore *dbe_, bool verb, bool clone)
TProfile * profile_s() const
virtual MonitorElement * access(const std::string &name)
T w() const
TH2F * getTH2F(void) const
MonitorElement * theProfile_g
TProfile * profile_dusg() const
double upperBoundY() const
long double T
MonitorElement * theHisto_b
int flavour(const Candidate &part)
Definition: pdgIdUtils.h:31
TProfile * profile_dus() const
void fillVariable(const int &flavour, const T &varX, const G &varY, const float &w) const
TProfile * profile_g() const
MonitorElement * theHisto_ni
MonitorElement * theHisto_d