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  std::string folder, unsigned int mc,
38  bool createProfile, DQMStore::IGetter & iget) ;
39 
40  FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
41  int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
42  int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
43  bool statistics_ , std::string folder, unsigned int mc,
44  bool createProfile, DQMStore::IBooker & ibook) ;
45 
46  virtual ~FlavourHistograms2D () ;
47 
48 
49  // define arrays (if needed)
50 // void defineArray ( int * dimension , int max , int indexToPlot ) ;
51 
52  // fill entry
53  // For single variables and arrays (for arrays only a single index can be filled)
54  void fill ( const int & flavour, const T & variableX, const G & variableY) const;
55  void fill ( const int & flavour, const T & variableX, const G & variableY, const float & w) const;
56 
57  // For single variables and arrays
58  void fill ( const int & flavour, const T * variableX, const G * variableY) const;
59  void fill ( const int & flavour, const T * variableX, const G * variableY, const float & w) const;
60 
61 
62  void settitle(const char* titleX, const char* titleY) ;
63 
64  // needed for efficiency computations -> this / b
65  // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
66  void divide ( const FlavourHistograms2D<T, G> & bHD ) const ;
67 
68  inline void SetMaximum(const double& max) { theMax = max;}
69  inline void SetMinimum(const double& min) { theMin = min;}
70 
71 
72  // trivial access functions
73  inline std::string baseNameTitle () const { return theBaseNameTitle ; }
75  inline int nBinsX () const { return theNBinsX ; }
76  inline int nBinsY () const { return theNBinsY ; }
77  inline double lowerBoundX () const { return theLowerBoundX ; }
78  inline double upperBoundX () const { return theUpperBoundX ; }
79  inline double lowerBoundY () const { return theLowerBoundY ; }
80  inline double upperBoundY () const { return theUpperBoundY ; }
81  inline bool statistics () const { return theStatistics ; }
82 
83  // access to the histos
84  inline TH2F * histo_all () const { return theHisto_all->getTH2F() ; }
85  inline TH2F * histo_d () const { return theHisto_d ->getTH2F() ; }
86  inline TH2F * histo_u () const { return theHisto_u->getTH2F() ; }
87  inline TH2F * histo_s () const { return theHisto_s->getTH2F() ; }
88  inline TH2F * histo_c () const { return theHisto_c->getTH2F() ; }
89  inline TH2F * histo_b () const { return theHisto_b->getTH2F() ; }
90  inline TH2F * histo_g () const { return theHisto_g->getTH2F() ; }
91  inline TH2F * histo_ni () const { return theHisto_ni->getTH2F() ; }
92  inline TH2F * histo_dus () const { return theHisto_dus->getTH2F() ; }
93  inline TH2F * histo_dusg () const { return theHisto_dusg->getTH2F() ; }
94  inline TH2F * histo_pu () const { return theHisto_pu->getTH2F() ; }
95 
96  TProfile * profile_all () const { return theProfile_all->getTProfile() ; }
97  TProfile * profile_d () const { return theProfile_d ->getTProfile() ; }
98  TProfile * profile_u () const { return theProfile_u->getTProfile() ; }
99  TProfile * profile_s () const { return theProfile_s->getTProfile() ; }
100  TProfile * profile_c () const { return theProfile_c->getTProfile() ; }
101  TProfile * profile_b () const { return theProfile_b->getTProfile() ; }
102  TProfile * profile_g () const { return theProfile_g->getTProfile() ; }
103  TProfile * profile_ni () const { return theProfile_ni->getTProfile() ; }
104  TProfile * profile_dus () const { return theProfile_dus->getTProfile() ; }
105  TProfile * profile_dusg () const { return theProfile_dusg->getTProfile() ; }
106  TProfile * profile_pu () const { return theProfile_pu->getTProfile() ; }
107 
108  std::vector<TH2F*> getHistoVector() const;
109 
110  std::vector<TProfile*> getProfileVector() const;
111 
112 
113 
114 protected:
115 
116  void fillVariable ( const int & flavour , const T & varX , const G & varY , const float & w) const;
117 
118  //
119  // the data members
120  //
121 
122 // T * theVariable ;
123 
124  // for arrays
127  int theIndexToPlot ; // in case that not the complete array has to be plotted
128 
131  int theNBinsX ;
132  int theNBinsY ;
133  double theLowerBoundX ;
134  double theUpperBoundX ;
135  double theLowerBoundY ;
136  double theUpperBoundY ;
138  double theMin, theMax;
139 
140  // the histos
152 
153  // the profiles
165 
166  // DQMStore * dqmStore_;
167 
168 
169  // the canvas to plot
170  private:
172 
173  unsigned int mcPlots_;
175 
176 } ;
177 
178 
179 
180 template <class T, class G>
181 FlavourHistograms2D<T, G>::FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
182  int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
183  int nBinsY_ , double lowerBoundY_ , double upperBoundY_ , std::string folder,
184  unsigned int mc, bool createProfile, DQMStore::IGetter & iget) :
185  // BaseFlavourHistograms2D () ,
186  // theVariable ( variable_ ) ,
187  theMaxDimension(-1), theIndexToPlot(-1), theBaseNameTitle ( baseNameTitle_ ) , theBaseNameDescription ( baseNameDescription_ ) ,
188  theNBinsX ( nBinsX_ ) , theNBinsY (nBinsY_),
189  theLowerBoundX ( lowerBoundX_ ) , theUpperBoundX ( upperBoundX_ ) ,
190  theLowerBoundY ( lowerBoundY_ ) , theUpperBoundY ( upperBoundY_ ) ,
191  theMin(-1.), theMax(-1.), mcPlots_(mc), createProfile_(createProfile)
192 {
193  // defaults for array dimensions
194  theArrayDimension = 0 ;
195 
196  if(mcPlots_%2 == 0) theHisto_all = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "ALL" ) ;
197  else theHisto_all = 0;
198  if (mcPlots_) {
199  if (mcPlots_>2) {
200  theHisto_d = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "D" ) ;
201  theHisto_u = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "U" ) ;
202  theHisto_s = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "S" ) ;
203  theHisto_g = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "G" ) ;
204  theHisto_dus = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "DUS" ) ;
205  }
206  else {
207  theHisto_d = 0;
208  theHisto_u = 0;
209  theHisto_s = 0;
210  theHisto_g = 0;
211  theHisto_dus = 0;
212  }
213  theHisto_c = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "C" ) ;
214  theHisto_b = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "B" ) ;
215  theHisto_ni = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "NI" ) ;
216  theHisto_dusg = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "DUSG") ;
217  theHisto_pu = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "PU" ) ;
218  }
219  else{
220  theHisto_d = 0;
221  theHisto_u = 0;
222  theHisto_s = 0;
223  theHisto_c = 0;
224  theHisto_b = 0;
225  theHisto_g = 0;
226  theHisto_ni = 0;
227  theHisto_dus = 0;
228  theHisto_dusg = 0;
229  theHisto_pu = 0;
230  }
231 
232  if(createProfile_) {
233  if(mcPlots_%2 == 0) theProfile_all = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_ALL");
234  else theProfile_all = 0;
235  if(mcPlots_) {
236  if (mcPlots_>2) {
237  theProfile_d = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_D" ) ;
238  theProfile_u = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_U" ) ;
239  theProfile_s = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_S" ) ;
240  theProfile_g = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_G" ) ;
241  theProfile_dus = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_DUS" ) ;
242  }
243  else {
244  theProfile_d = 0;
245  theProfile_u = 0;
246  theProfile_s = 0;
247  theProfile_g = 0;
248  theProfile_dus = 0;
249  }
250  theProfile_c = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_C" ) ;
251  theProfile_b = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_B" ) ;
252  theProfile_ni = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_NI" ) ;
253  theProfile_dusg = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_DUSG") ;
254  theProfile_pu = iget.get("Btag/" + folder + "/" + theBaseNameTitle + "_Profile_PU" ) ;
255  }
256  else{
257  theProfile_d = 0;
258  theProfile_u = 0;
259  theProfile_s = 0;
260  theProfile_c = 0;
261  theProfile_b = 0;
262  theProfile_g = 0;
263  theProfile_ni = 0;
264  theProfile_dus = 0;
265  theProfile_dusg = 0;
266  theProfile_pu = 0;
267  }
268  }
269  else {
270  theProfile_all = 0;
271  theProfile_d = 0;
272  theProfile_u = 0;
273  theProfile_s = 0;
274  theProfile_c = 0;
275  theProfile_b = 0;
276  theProfile_g = 0;
277  theProfile_ni = 0;
278  theProfile_dus = 0;
279  theProfile_dusg = 0;
280  theProfile_pu = 0;
281  }
282 }
283 
284 template <class T, class G>
285 FlavourHistograms2D<T, G>::FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
286  int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
287  int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
288  bool statistics_ , std::string folder,
289  unsigned int mc, bool createProfile, DQMStore::IBooker & ibook) :
290  theMaxDimension(-1), theIndexToPlot(-1), theBaseNameTitle ( baseNameTitle_ ) , theBaseNameDescription ( baseNameDescription_ ) ,
291  theNBinsX ( nBinsX_ ) , theNBinsY (nBinsY_),
292  theLowerBoundX ( lowerBoundX_ ) , theUpperBoundX ( upperBoundX_ ) ,
293  theLowerBoundY ( lowerBoundY_ ) , theUpperBoundY ( upperBoundY_ ) ,
294  theStatistics ( statistics_ ) , theMin(-1.), theMax(-1.), mcPlots_(mc), createProfile_(createProfile)
295 {
296  // defaults for array dimensions
297  theArrayDimension = 0 ;
298 
299  // book histos
300  HistoProviderDQM prov("Btag",folder,ibook);
302  else theHisto_all = 0;
303  if (mcPlots_) {
304  if (mcPlots_>2) {
310  }
311  else {
312  theHisto_d = 0;
313  theHisto_u = 0;
314  theHisto_s = 0;
315  theHisto_g = 0;
316  theHisto_dus = 0;
317  }
323  }else{
324  theHisto_d = 0;
325  theHisto_u = 0;
326  theHisto_s = 0;
327  theHisto_c = 0;
328  theHisto_b = 0;
329  theHisto_g = 0;
330  theHisto_ni = 0;
331  theHisto_dus = 0;
332  theHisto_dusg = 0;
333  theHisto_pu = 0;
334  }
335 
336  if (createProfile_) {
338  else theProfile_all = 0;
339  if (mcPlots_) {
340  if (mcPlots_>2) {
346  }
347  else {
348  theProfile_d = 0;
349  theProfile_u = 0;
350  theProfile_s = 0;
351  theProfile_g = 0;
352  theProfile_dus = 0;
353  }
359  } else{
360  theProfile_d = 0;
361  theProfile_u = 0;
362  theProfile_s = 0;
363  theProfile_c = 0;
364  theProfile_b = 0;
365  theProfile_g = 0;
366  theProfile_ni = 0;
367  theProfile_dus = 0;
368  theProfile_dusg = 0;
369  theProfile_pu = 0;
370  }
371  } else {
372  theProfile_all = 0;
373  theProfile_d = 0;
374  theProfile_u = 0;
375  theProfile_s = 0;
376  theProfile_c = 0;
377  theProfile_b = 0;
378  theProfile_g = 0;
379  theProfile_ni = 0;
380  theProfile_dus = 0;
381  theProfile_dusg = 0;
382  theProfile_pu = 0;
383  }
384  // statistics if requested
385  if ( theStatistics ) {
386  if(theHisto_all) theHisto_all ->getTH2F()->Sumw2() ;
387  if(createProfile)
388  if(theProfile_all) theProfile_all ->getTProfile()->Sumw2() ;
389  if (mcPlots_) {
390  if (mcPlots_>2) {
391  theHisto_d ->getTH2F()->Sumw2() ;
392  theHisto_u ->getTH2F()->Sumw2() ;
393  theHisto_s ->getTH2F()->Sumw2() ;
394  theHisto_g ->getTH2F()->Sumw2() ;
395  theHisto_dus ->getTH2F()->Sumw2() ;
396  }
397  theHisto_c ->getTH2F()->Sumw2() ;
398  theHisto_b ->getTH2F()->Sumw2() ;
399  theHisto_ni ->getTH2F()->Sumw2() ;
400  theHisto_dusg->getTH2F()->Sumw2() ;
401  theHisto_pu ->getTH2F()->Sumw2() ;
402 
403  if(createProfile) {
404  if (mcPlots_>2) {
405  theProfile_d ->getTProfile()->Sumw2() ;
406  theProfile_u ->getTProfile()->Sumw2() ;
407  theProfile_s ->getTProfile()->Sumw2() ;
408  theProfile_g ->getTProfile()->Sumw2() ;
409  theProfile_dus ->getTProfile()->Sumw2() ;
410  }
411  theProfile_c ->getTProfile()->Sumw2() ;
412  theProfile_b ->getTProfile()->Sumw2() ;
413  theProfile_ni ->getTProfile()->Sumw2() ;
414  theProfile_dusg->getTProfile()->Sumw2() ;
415  theProfile_pu ->getTProfile()->Sumw2() ;
416  }
417  }
418  }
419 }
420 
421 template <class T, class G>
423 
424 // fill entry
425 template <class T, class G> void
426  FlavourHistograms2D<T, G>::fill ( const int & flavour, const T & variableX, const G & variableY, const float & w) const
427 {
428  // For single variables and arrays (for arrays only a single index can be filled)
429  fillVariable ( flavour , variableX , variableY , w ) ;
430 }
431 
432 template <class T, class G> void
433 FlavourHistograms2D<T, G>::fill ( const int & flavour, const T & variableX, const G & variableY) const
434 {
435  fill ( flavour , variableX , variableY , 1. ) ;
436 }
437 
438 template <class T, class G> void
439  FlavourHistograms2D<T, G>::fill ( const int & flavour, const T * variableX, const G * variableY, const float & w) const
440 {
441  if ( theArrayDimension == 0 ) {
442  // single variable
443  fillVariable ( flavour , *variableX, *variableY , w) ;
444  } else {
445  // array
446  int iMax = *theArrayDimension ;
447  if ( *theArrayDimension > theMaxDimension ) iMax = theMaxDimension ;
448  //
449  for ( int i = 0 ; i != iMax ; ++i ) {
450  // check if only one index to be plotted (<0: switched off -> plot all)
451  if ( ( theIndexToPlot < 0 ) || ( i == theIndexToPlot ) ) {
452  fillVariable ( flavour , *(variableX+i) , *(variableY+i) , w) ;
453  }
454  }
455 
456  // if single index to be filled but not enough entries: fill 0.0 (convention!)
457  if ( theIndexToPlot >= iMax ) {
458  // cout << "==>> The index to be filled is too big -> fill 0.0 : " << theBaseNameTitle << " : " << theIndexToPlot << " >= " << iMax << endl ;
459  const T& theZeroT = static_cast<T> ( 0.0) ;
460  const G& theZeroG = static_cast<T> ( 0.0 );
461  fillVariable ( flavour , theZeroT , theZeroG , w ) ;
462  }
463  }
464 }
465 
466 template <class T, class G> void
467  FlavourHistograms2D<T, G>::fill ( const int & flavour, const T * variableX, const G * variableY) const
468 {
469  fill ( flavour, variableX , variableY , 1. );
470 }
471 
472 template <class T, class G>
473 void FlavourHistograms2D<T, G>::settitle(const char* titleX, const char* titleY) {
474  if(theHisto_all) theHisto_all ->setAxisTitle(titleX) ;
475  if(theHisto_all) theHisto_all ->setAxisTitle(titleY, 2) ;
476  if (mcPlots_) {
477 
478  if(theHisto_d) theHisto_d ->setAxisTitle(titleX) ;
479  if(theHisto_u) theHisto_u ->setAxisTitle(titleX) ;
480  if(theHisto_s) theHisto_s ->setAxisTitle(titleX) ;
481  if(theHisto_c) theHisto_c ->setAxisTitle(titleX) ;
482  if(theHisto_b) theHisto_b ->setAxisTitle(titleX) ;
483  if(theHisto_g) theHisto_g ->setAxisTitle(titleX) ;
484  if(theHisto_ni) theHisto_ni ->setAxisTitle(titleX) ;
485  if(theHisto_dus) theHisto_dus ->setAxisTitle(titleX) ;
486  if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleX) ;
487  if(theHisto_d) theHisto_d ->setAxisTitle(titleY, 2) ;
488  if(theHisto_u) theHisto_u ->setAxisTitle(titleY, 2) ;
489  if(theHisto_s) theHisto_s ->setAxisTitle(titleY, 2) ;
490  if(theHisto_c) theHisto_c ->setAxisTitle(titleY, 2) ;
491  if(theHisto_b) theHisto_b ->setAxisTitle(titleY, 2) ;
492  if(theHisto_g) theHisto_g ->setAxisTitle(titleY, 2) ;
493  if(theHisto_ni) theHisto_ni ->setAxisTitle(titleY, 2) ;
494  if(theHisto_dus) theHisto_dus ->setAxisTitle(titleY, 2) ;
495  if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleY, 2) ;
496  if(theHisto_pu) theHisto_pu ->setAxisTitle(titleY, 2) ;
497  }
498 
499  if(createProfile_) {
500  if(theProfile_all) theProfile_all ->setAxisTitle(titleX) ;
501  if(theProfile_all) theProfile_all ->setAxisTitle(titleY, 2) ;
502  if (mcPlots_) {
503 
504  if(theProfile_d) theProfile_d ->setAxisTitle(titleX) ;
505  if(theProfile_u) theProfile_u ->setAxisTitle(titleX) ;
506  if(theProfile_s) theProfile_s ->setAxisTitle(titleX) ;
507  if(theProfile_c) theProfile_c ->setAxisTitle(titleX) ;
508  if(theProfile_b) theProfile_b ->setAxisTitle(titleX) ;
509  if(theProfile_g) theProfile_g ->setAxisTitle(titleX) ;
510  if(theProfile_ni) theProfile_ni ->setAxisTitle(titleX) ;
511  if(theProfile_dus) theProfile_dus ->setAxisTitle(titleX) ;
512  if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleX) ;
513  if(theProfile_d) theProfile_d ->setAxisTitle(titleY, 2) ;
514  if(theProfile_u) theProfile_u ->setAxisTitle(titleY, 2) ;
515  if(theProfile_s) theProfile_s ->setAxisTitle(titleY, 2) ;
516  if(theProfile_c) theProfile_c ->setAxisTitle(titleY, 2) ;
517  if(theProfile_b) theProfile_b ->setAxisTitle(titleY, 2) ;
518  if(theProfile_g) theProfile_g ->setAxisTitle(titleY, 2) ;
519  if(theProfile_ni) theProfile_ni ->setAxisTitle(titleY, 2) ;
520  if(theProfile_dus) theProfile_dus ->setAxisTitle(titleY, 2) ;
521  if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleY, 2) ;
522  if(theProfile_pu) theProfile_pu ->setAxisTitle(titleY, 2) ;
523  }
524  }
525 }
526 
527 // needed for efficiency computations -> this / b
528 // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
529 template <class T, class G>
531  // divide histos using binomial errors
532  //
533  // ATTENTION: It's the responsability of the user to make sure that the HistoDescriptions
534  // involved in this operation have been constructed with the statistics option switched on!!
535  //
536  if(theHisto_all) theHisto_all ->getTH2F()-> Divide ( theHisto_all->getTH2F() , bHD.histo_all () , 1.0 , 1.0 , "b" ) ;
537  if (mcPlots_) {
538  if (mcPlots_>2) {
539  theHisto_d ->getTH2F()-> Divide ( theHisto_d ->getTH2F() , bHD.histo_d () , 1.0 , 1.0 , "b" ) ;
540  theHisto_u ->getTH2F()-> Divide ( theHisto_u ->getTH2F() , bHD.histo_u () , 1.0 , 1.0 , "b" ) ;
541  theHisto_s ->getTH2F()-> Divide ( theHisto_s ->getTH2F() , bHD.histo_s () , 1.0 , 1.0 , "b" ) ;
542  theHisto_g ->getTH2F()-> Divide ( theHisto_g ->getTH2F() , bHD.histo_g () , 1.0 , 1.0 , "b" ) ;
543  theHisto_dus ->getTH2F()-> Divide ( theHisto_dus->getTH2F() , bHD.histo_dus () , 1.0 , 1.0 , "b" ) ;
544  }
545  theHisto_c ->getTH2F()-> Divide ( theHisto_c ->getTH2F() , bHD.histo_c () , 1.0 , 1.0 , "b" ) ;
546  theHisto_b ->getTH2F()-> Divide ( theHisto_b ->getTH2F() , bHD.histo_b () , 1.0 , 1.0 , "b" ) ;
547  theHisto_ni ->getTH2F()-> Divide ( theHisto_ni->getTH2F() , bHD.histo_ni () , 1.0 , 1.0 , "b" ) ;
548  theHisto_dusg ->getTH2F()-> Divide ( theHisto_dusg->getTH2F() , bHD.histo_dusg() , 1.0 , 1.0 , "b" ) ;
549  theHisto_pu ->getTH2F()-> Divide ( theHisto_pu->getTH2F() , bHD.histo_pu () , 1.0 , 1.0 , "b" ) ;
550  }
551 }
552 
553 
554 template <class T, class G>
555  void FlavourHistograms2D<T, G>::fillVariable ( const int & flavour , const T & varX , const G & varY , const float & w) const {
556  // all
557  if(theHisto_all) theHisto_all->Fill ( varX, varY,w ) ;
558  if(createProfile_)
559  //if(theProfile_all) theProfile_all->Fill( varX, varY, w );
560  if(theProfile_all) theProfile_all->Fill( varX, varY);
561 
562  //exit(-1);
563  // flavour specific
564  if (!mcPlots_) return;
565 
566  switch( flavour ) {
567  case 1:
568  if (mcPlots_>2) {
569  theHisto_d->Fill( varX, varY,w );
570  theHisto_dus->Fill( varX, varY,w );
571  }
572  theHisto_dusg->Fill( varX, varY,w );
573  if(createProfile_) {
574  //theProfile_d->Fill(varX, varY,w);
575  //theProfile_dus->Fill(varX, varY,w);
576  //theProfile_dusg->Fill(varX, varY,w);
577  if (mcPlots_>2) {
578  theProfile_d->Fill(varX, varY);
579  theProfile_dus->Fill(varX, varY);
580  }
581  theProfile_dusg->Fill(varX, varY);
582  }
583  return;
584  case 2:
585  if (mcPlots_>2) {
586  theHisto_u->Fill( varX, varY,w );
587  theHisto_dus->Fill( varX, varY,w );
588  }
589  theHisto_dusg->Fill( varX, varY,w );
590  if(createProfile_) {
591  //theProfile_u->Fill(varX, varY,w);
592  //theProfile_dus->Fill(varX, varY,w);
593  //theProfile_dusg->Fill(varX, varY,w);
594  if (mcPlots_>2) {
595  theProfile_u->Fill(varX, varY);
596  theProfile_dus->Fill(varX, varY);
597  }
598  theProfile_dusg->Fill(varX, varY);
599  }
600  return;
601  case 3:
602  if (mcPlots_>2) {
603  theHisto_s->Fill( varX, varY,w );
604  theHisto_dus->Fill( varX, varY,w );
605  }
606  theHisto_dusg->Fill( varX, varY,w );
607  if(createProfile_) {
608  //theProfile_s->Fill(varX, varY,w);
609  //theProfile_dus->Fill(varX, varY,w);
610  //theProfile_dusg->Fill(varX, varY,w);
611  if (mcPlots_>2) {
612  theProfile_s->Fill(varX, varY);
613  theProfile_dus->Fill(varX, varY);
614  }
615  theProfile_dusg->Fill(varX, varY);
616  }
617  return;
618  case 4:
619  theHisto_c->Fill( varX, varY,w );
620  //if(createProfile_) theProfile_c->Fill(varX, varY,w);
621  if(createProfile_) theProfile_c->Fill(varX, varY);
622  return;
623  case 5:
624  theHisto_b->Fill( varX, varY,w );
625  //if(createProfile_) theProfile_b->Fill(varX, varY,w);
626  if(createProfile_) theProfile_b->Fill(varX, varY);
627  return;
628  case 21:
629  if (mcPlots_>2) theHisto_g->Fill( varX, varY,w );
630  theHisto_dusg->Fill( varX, varY,w );
631  if(createProfile_) {
632  //theProfile_g->Fill(varX, varY,w);
633  //theProfile_dusg->Fill(varX, varY,w);
634  if (mcPlots_>2) theProfile_g->Fill(varX, varY);
635  theProfile_dusg->Fill(varX, varY);
636  }
637  return;
638  case 20:
639  theHisto_pu->Fill( varX, varY,w );
640  //if(createProfile_) theProfile_pu->Fill(varX, varY,w);
641  if(createProfile_) theProfile_pu->Fill(varX, varY);
642  return;
643  default:
644  theHisto_ni->Fill( varX, varY,w );
645  //if(createProfile_) theProfile_ni->Fill(varX, varY,w);
646  if(createProfile_) theProfile_ni->Fill(varX, varY);
647  return;
648  }
649 }
650 
651 template <class T, class G>
653 {
654  std::vector<TH2F*> histoVector;
655  if(theHisto_all) histoVector.push_back ( theHisto_all->getTH2F() );
656  if (mcPlots_) {
657  if (mcPlots_>2) {
658  histoVector.push_back ( theHisto_d->getTH2F() );
659  histoVector.push_back ( theHisto_u->getTH2F() );
660  histoVector.push_back ( theHisto_s->getTH2F() );
661  histoVector.push_back ( theHisto_g ->getTH2F() );
662  histoVector.push_back ( theHisto_dus->getTH2F() );
663  }
664  histoVector.push_back ( theHisto_c->getTH2F() );
665  histoVector.push_back ( theHisto_b->getTH2F() );
666  histoVector.push_back ( theHisto_ni->getTH2F() );
667  histoVector.push_back ( theHisto_dusg->getTH2F());
668  histoVector.push_back ( theHisto_pu->getTH2F() );
669  }
670  return histoVector;
671 }
672 
673 template <class T, class G>
674 std::vector<TProfile*> FlavourHistograms2D<T, G>::getProfileVector() const
675 {
676  std::vector<TProfile*> profileVector;
677  if(createProfile_) {
678  if(theProfile_all) profileVector.push_back ( theProfile_all->getTProfile() );
679  if (mcPlots_) {
680  if (mcPlots_>2) {
681  profileVector.push_back ( theProfile_d->getTProfile() );
682  profileVector.push_back ( theProfile_u->getTProfile() );
683  profileVector.push_back ( theProfile_s->getTProfile() );
684  profileVector.push_back ( theProfile_g ->getTProfile() );
685  profileVector.push_back ( theProfile_dus->getTProfile() );
686  }
687  profileVector.push_back ( theProfile_c->getTProfile() );
688  profileVector.push_back ( theProfile_b->getTProfile() );
689  profileVector.push_back ( theProfile_ni->getTProfile() );
690  profileVector.push_back ( theProfile_dusg->getTProfile());
691  profileVector.push_back ( theProfile_pu->getTProfile() );
692  }
693  }
694  return profileVector;
695 }
696 
697 #endif
TProfile * profile_c() const
std::string theBaseNameDescription
MonitorElement * theProfile_s
int i
Definition: DBlmapReader.cc:9
MonitorElement * theProfile_pu
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
const double w
Definition: UKUtility.cc:23
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 * get(const std::string &path)
Definition: DQMStore.cc:302
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)
TProfile * profile_pu() const
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)
std::string baseNameTitle() const
TProfile * profile_b() const
void divide(const FlavourHistograms2D< T, G > &bHD) const
MonitorElement * theHisto_c
MonitorElement * theHisto_pu
void fill(const int &flavour, const T &variableX, const G &variableY) const
MonitorElement * theProfile_all
MonitorElement * theProfile_ni
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
T min(T a, T b)
Definition: MathUtil.h:58
tuple G
Definition: callgraph.py:12
std::vector< TH2F * > getHistoVector() const
MonitorElement * theProfile_d
std::string baseNameDescription() const
TProfile * profile_d() const
MonitorElement * theProfile_dus
TH2F * histo_pu() const
TH2F * histo_ni() const
MonitorElement * theHisto_all
TProfile * profile_ni() const
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
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