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, bool 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 
50  // For single variables and arrays
51  void fill ( const int & flavour, const T * variableX, const G * variableY) const;
52 
53 
54  void settitle(const char* titleX, const char* titleY) ;
55 
56  // needed for efficiency computations -> this / b
57  // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
58  void divide ( const FlavourHistograms2D<T, G> & bHD ) const ;
59 
60  inline void SetMaximum(const double& max) { theMax = max;}
61  inline void SetMinimum(const double& min) { theMin = min;}
62 
63 
64  // trivial access functions
65  inline std::string baseNameTitle () const { return theBaseNameTitle ; }
66  inline std::string baseNameDescription () const { return theBaseNameDescription ; }
67  inline int nBinsX () const { return theNBinsX ; }
68  inline int nBinsY () const { return theNBinsY ; }
69  inline double lowerBoundX () const { return theLowerBoundX ; }
70  inline double upperBoundX () const { return theUpperBoundX ; }
71  inline double lowerBoundY () const { return theLowerBoundY ; }
72  inline double upperBoundY () const { return theUpperBoundY ; }
73  inline bool statistics () const { return theStatistics ; }
74 
75  // access to the histos
76  inline TH2F * histo_all () const { return theHisto_all->getTH2F() ; }
77  inline TH2F * histo_d () const { return theHisto_d ->getTH2F() ; }
78  inline TH2F * histo_u () const { return theHisto_u->getTH2F() ; }
79  inline TH2F * histo_s () const { return theHisto_s->getTH2F() ; }
80  inline TH2F * histo_c () const { return theHisto_c->getTH2F() ; }
81  inline TH2F * histo_b () const { return theHisto_b->getTH2F() ; }
82  inline TH2F * histo_g () const { return theHisto_g->getTH2F() ; }
83  inline TH2F * histo_ni () const { return theHisto_ni->getTH2F() ; }
84  inline TH2F * histo_dus () const { return theHisto_dus->getTH2F() ; }
85  inline TH2F * histo_dusg () const { return theHisto_dusg->getTH2F() ; }
86 
87  TProfile * profile_all () const { return theProfile_all->getTProfile() ; }
88  TProfile * profile_d () const { return theProfile_d ->getTProfile() ; }
89  TProfile * profile_u () const { return theProfile_u->getTProfile() ; }
90  TProfile * profile_s () const { return theProfile_s->getTProfile() ; }
91  TProfile * profile_c () const { return theProfile_c->getTProfile() ; }
92  TProfile * profile_b () const { return theProfile_b->getTProfile() ; }
93  TProfile * profile_g () const { return theProfile_g->getTProfile() ; }
94  TProfile * profile_ni () const { return theProfile_ni->getTProfile() ; }
95  TProfile * profile_dus () const { return theProfile_dus->getTProfile() ; }
96  TProfile * profile_dusg () const { return theProfile_dusg->getTProfile() ; }
97 
98  std::vector<TH2F*> getHistoVector() const;
99 
100  std::vector<TProfile*> getProfileVector() const;
101 
102 
103 
104 protected:
105 
106  void fillVariable ( const int & flavour , const T & varX , const G & varY ) const;
107 
108  //
109  // the data members
110  //
111 
112 // T * theVariable ;
113 
114  // for arrays
117  int theIndexToPlot ; // in case that not the complete array has to be plotted
118 
119  std::string theBaseNameTitle ;
121  int theNBinsX ;
122  int theNBinsY ;
123  double theLowerBoundX ;
124  double theUpperBoundX ;
125  double theLowerBoundY ;
126  double theUpperBoundY ;
128  double theMin, theMax;
129 
130  // the histos
141 
142  // the profiles
153 
154  // DQMStore * dqmStore_;
155 
156 
157  // the canvas to plot
158  private:
160 
161  bool mcPlots_;
163 
164 } ;
165 
166 
167 
168 template <class T, class G>
169 FlavourHistograms2D<T, G>::FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
170  int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
171  int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
172  bool statistics_ ,
173  bool update, std::string folder, bool mc, bool createProfile) :
174  // BaseFlavourHistograms2D () ,
175  // theVariable ( variable_ ) ,
176  theMaxDimension(-1), theIndexToPlot(-1), theBaseNameTitle ( baseNameTitle_ ) , theBaseNameDescription ( baseNameDescription_ ) ,
177  theNBinsX ( nBinsX_ ) , theNBinsY (nBinsY_),
178  theLowerBoundX ( lowerBoundX_ ) , theUpperBoundX ( upperBoundX_ ) ,
179  theLowerBoundY ( lowerBoundY_ ) , theUpperBoundY ( upperBoundY_ ) ,
180  theStatistics ( statistics_ ) , theMin(-1.), theMax(-1.), mcPlots_(mc), createProfile_(createProfile)
181 {
182  // defaults for array dimensions
183  theArrayDimension = 0 ;
184 
185  if (!update) {
186  // book histos
187  HistoProviderDQM prov("Btag",folder);
189  if (mcPlots_) {
199  }else{
200  theHisto_d = 0;
201  theHisto_u = 0;
202  theHisto_s = 0;
203  theHisto_c = 0;
204  theHisto_b = 0;
205  theHisto_g = 0;
206  theHisto_ni = 0;
207  theHisto_dus = 0;
208  theHisto_dusg = 0;
209  }
210 
211  if (createProfile_) {
213  if (mcPlots_) {
223  } else{
224  theProfile_d = 0;
225  theProfile_u = 0;
226  theProfile_s = 0;
227  theProfile_c = 0;
228  theProfile_b = 0;
229  theProfile_g = 0;
230  theProfile_ni = 0;
231  theProfile_dus = 0;
232  theProfile_dusg = 0;
233  }
234  } else {
235  theProfile_all = 0;
236  theProfile_d = 0;
237  theProfile_u = 0;
238  theProfile_s = 0;
239  theProfile_c = 0;
240  theProfile_b = 0;
241  theProfile_g = 0;
242  theProfile_ni = 0;
243  theProfile_dus = 0;
244  theProfile_dusg = 0;
245  }
246  // statistics if requested
247  if ( theStatistics ) {
248  theHisto_all ->getTH2F()->Sumw2() ;
249  if(createProfile)
250  theProfile_all ->getTProfile()->Sumw2() ;
251  if (mcPlots_) {
252  theHisto_d ->getTH2F()->Sumw2() ;
253  theHisto_u ->getTH2F()->Sumw2() ;
254  theHisto_s ->getTH2F()->Sumw2() ;
255  theHisto_c ->getTH2F()->Sumw2() ;
256  theHisto_b ->getTH2F()->Sumw2() ;
257  theHisto_g ->getTH2F()->Sumw2() ;
258  theHisto_ni ->getTH2F()->Sumw2() ;
259  theHisto_dus ->getTH2F()->Sumw2() ;
260  theHisto_dusg->getTH2F()->Sumw2() ;
261 
262  if(createProfile) {
263  theProfile_d ->getTProfile()->Sumw2() ;
264  theProfile_u ->getTProfile()->Sumw2() ;
265  theProfile_s ->getTProfile()->Sumw2() ;
266  theProfile_c ->getTProfile()->Sumw2() ;
267  theProfile_b ->getTProfile()->Sumw2() ;
268  theProfile_g ->getTProfile()->Sumw2() ;
269  theProfile_ni ->getTProfile()->Sumw2() ;
270  theProfile_dus ->getTProfile()->Sumw2() ;
271  theProfile_dusg->getTProfile()->Sumw2() ;
272  }
273  }
274  }
275  } else {
276  HistoProviderDQM prov("Btag",folder);
277  theHisto_all = prov.access(theBaseNameTitle + "ALL" ) ;
278  if (mcPlots_) {
279 
280  theHisto_d = prov.access(theBaseNameTitle + "D" ) ;
281  theHisto_u = prov.access(theBaseNameTitle + "U" ) ;
282  theHisto_s = prov.access(theBaseNameTitle + "S" ) ;
283  theHisto_c = prov.access(theBaseNameTitle + "C" ) ;
284  theHisto_b =prov.access(theBaseNameTitle + "B" ) ;
285  theHisto_g =prov.access(theBaseNameTitle + "G" ) ;
286  theHisto_ni =prov.access(theBaseNameTitle + "NI" ) ;
287  theHisto_dus =prov.access(theBaseNameTitle + "DUS" ) ;
288  theHisto_dusg =prov.access(theBaseNameTitle + "DUSG") ;
289  }
290 
291  if(createProfile_) {
292  theProfile_all = prov.access(theBaseNameTitle + "_Profile_ALL");
293  if(mcPlots_) {
294  theProfile_d = prov.access(theBaseNameTitle + "_Profile_D" ) ;
295  theProfile_u = prov.access(theBaseNameTitle + "_Profile_U" ) ;
296  theProfile_s = prov.access(theBaseNameTitle + "_Profile_S" ) ;
297  theProfile_c = prov.access(theBaseNameTitle + "_Profile_C" ) ;
298  theProfile_b =prov.access(theBaseNameTitle + "_Profile_B" ) ;
299  theProfile_g =prov.access(theBaseNameTitle + "_Profile_G" ) ;
300  theProfile_ni =prov.access(theBaseNameTitle + "_Profile_NI" ) ;
301  theProfile_dus =prov.access(theBaseNameTitle + "_Profile_DUS" ) ;
302  theProfile_dusg =prov.access(theBaseNameTitle + "_Profile_DUSG") ;
303  }
304  }
305  }
306 }
307 
308 
309 template <class T, class G>
311 
312 
313 // define arrays (if needed)
314 // template <class T, class G>
315 // void FlavourHistograms2D<T, G>::defineArray ( int * dimension , int max , int indexToPlot ) {
316 // // indexToPlot < 0 if all to be plotted
317 // theArrayDimension = dimension ;
318 // theMaxDimension = max ;
319 // theIndexToPlot = indexToPlot ;
320 // }
321 
322 // fill entry
323 template <class T, class G> void
324 FlavourHistograms2D<T, G>::fill ( const int & flavour, const T & variableX, const G & variableY) const
325 {
326  // For single variables and arrays (for arrays only a single index can be filled)
327  fillVariable ( flavour , variableX , variableY ) ;
328 }
329 
330 template <class T, class G> void
331 FlavourHistograms2D<T, G>::fill ( const int & flavour, const T * variableX, const G * variableY) const
332 {
333  if ( theArrayDimension == 0 ) {
334  // single variable
335  fillVariable ( flavour , *variableX, *variableY ) ;
336  } else {
337  // array
338  int iMax = *theArrayDimension ;
339  if ( *theArrayDimension > theMaxDimension ) iMax = theMaxDimension ;
340  //
341  for ( int i = 0 ; i != iMax ; ++i ) {
342  // check if only one index to be plotted (<0: switched off -> plot all)
343  if ( ( theIndexToPlot < 0 ) || ( i == theIndexToPlot ) ) {
344  fillVariable ( flavour , *(variableX+i) , *(variableY+i) ) ;
345  }
346  }
347 
348  // if single index to be filled but not enough entries: fill 0.0 (convention!)
349  if ( theIndexToPlot >= iMax ) {
350  // cout << "==>> The index to be filled is too big -> fill 0.0 : " << theBaseNameTitle << " : " << theIndexToPlot << " >= " << iMax << endl ;
351  const T& theZeroT = static_cast<T> ( 0.0) ;
352  const G& theZeroG = static_cast<T> ( 0.0 );
353  fillVariable ( flavour , theZeroT , theZeroG ) ;
354  }
355  }
356 }
357 
358 
359 template <class T, class G>
360 void FlavourHistograms2D<T, G>::settitle(const char* titleX, const char* titleY) {
361  if(theHisto_all) theHisto_all ->setAxisTitle(titleX) ;
362  if(theHisto_all) theHisto_all ->setAxisTitle(titleY, 2) ;
363  if (mcPlots_) {
364 
365  if(theHisto_d) theHisto_d ->setAxisTitle(titleX) ;
366  if(theHisto_u) theHisto_u ->setAxisTitle(titleX) ;
367  if(theHisto_s) theHisto_s ->setAxisTitle(titleX) ;
368  if(theHisto_c) theHisto_c ->setAxisTitle(titleX) ;
369  if(theHisto_b) theHisto_b ->setAxisTitle(titleX) ;
370  if(theHisto_g) theHisto_g ->setAxisTitle(titleX) ;
371  if(theHisto_ni) theHisto_ni ->setAxisTitle(titleX) ;
372  if(theHisto_dus) theHisto_dus ->setAxisTitle(titleX) ;
373  if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleX) ;
374  if(theHisto_d) theHisto_d ->setAxisTitle(titleY, 2) ;
375  if(theHisto_u) theHisto_u ->setAxisTitle(titleY, 2) ;
376  if(theHisto_s) theHisto_s ->setAxisTitle(titleY, 2) ;
377  if(theHisto_c) theHisto_c ->setAxisTitle(titleY, 2) ;
378  if(theHisto_b) theHisto_b ->setAxisTitle(titleY, 2) ;
379  if(theHisto_g) theHisto_g ->setAxisTitle(titleY, 2) ;
380  if(theHisto_ni) theHisto_ni ->setAxisTitle(titleY, 2) ;
381  if(theHisto_dus) theHisto_dus ->setAxisTitle(titleY, 2) ;
382  if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleY, 2) ;
383  }
384 
385  if(createProfile_) {
386  if(theProfile_all) theProfile_all ->setAxisTitle(titleX) ;
387  if(theProfile_all) theProfile_all ->setAxisTitle(titleY, 2) ;
388  if (mcPlots_ == true) {
389 
390  if(theProfile_d) theProfile_d ->setAxisTitle(titleX) ;
391  if(theProfile_u) theProfile_u ->setAxisTitle(titleX) ;
392  if(theProfile_s) theProfile_s ->setAxisTitle(titleX) ;
393  if(theProfile_c) theProfile_c ->setAxisTitle(titleX) ;
394  if(theProfile_b) theProfile_b ->setAxisTitle(titleX) ;
395  if(theProfile_g) theProfile_g ->setAxisTitle(titleX) ;
396  if(theProfile_ni) theProfile_ni ->setAxisTitle(titleX) ;
397  if(theProfile_dus) theProfile_dus ->setAxisTitle(titleX) ;
398  if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleX) ;
399  if(theProfile_d) theProfile_d ->setAxisTitle(titleY, 2) ;
400  if(theProfile_u) theProfile_u ->setAxisTitle(titleY, 2) ;
401  if(theProfile_s) theProfile_s ->setAxisTitle(titleY, 2) ;
402  if(theProfile_c) theProfile_c ->setAxisTitle(titleY, 2) ;
403  if(theProfile_b) theProfile_b ->setAxisTitle(titleY, 2) ;
404  if(theProfile_g) theProfile_g ->setAxisTitle(titleY, 2) ;
405  if(theProfile_ni) theProfile_ni ->setAxisTitle(titleY, 2) ;
406  if(theProfile_dus) theProfile_dus ->setAxisTitle(titleY, 2) ;
407  if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleY, 2) ;
408  }
409  }
410 }
411 
412 // needed for efficiency computations -> this / b
413 // (void : alternative would be not to overwrite the histos but to return a cloned HistoDescription)
414 template <class T, class G>
416  // divide histos using binomial errors
417  //
418  // ATTENTION: It's the responsability of the user to make sure that the HistoDescriptions
419  // involved in this operation have been constructed with the statistics option switched on!!
420  //
421  theHisto_all ->getTH2F()-> Divide ( theHisto_all->getTH2F() , bHD.histo_all () , 1.0 , 1.0 , "b" ) ;
422  if (mcPlots_) {
423  theHisto_d ->getTH2F()-> Divide ( theHisto_d ->getTH2F() , bHD.histo_d () , 1.0 , 1.0 , "b" ) ;
424  theHisto_u ->getTH2F()-> Divide ( theHisto_u ->getTH2F() , bHD.histo_u () , 1.0 , 1.0 , "b" ) ;
425  theHisto_s ->getTH2F()-> Divide ( theHisto_s ->getTH2F() , bHD.histo_s () , 1.0 , 1.0 , "b" ) ;
426  theHisto_c ->getTH2F()-> Divide ( theHisto_c ->getTH2F() , bHD.histo_c () , 1.0 , 1.0 , "b" ) ;
427  theHisto_b ->getTH2F()-> Divide ( theHisto_b ->getTH2F() , bHD.histo_b () , 1.0 , 1.0 , "b" ) ;
428  theHisto_g ->getTH2F()-> Divide ( theHisto_g ->getTH2F() , bHD.histo_g () , 1.0 , 1.0 , "b" ) ;
429  theHisto_ni ->getTH2F()-> Divide ( theHisto_ni->getTH2F() , bHD.histo_ni () , 1.0 , 1.0 , "b" ) ;
430  theHisto_dus ->getTH2F()-> Divide ( theHisto_dus->getTH2F() , bHD.histo_dus () , 1.0 , 1.0 , "b" ) ;
431  theHisto_dusg ->getTH2F()-> Divide ( theHisto_dusg->getTH2F() , bHD.histo_dusg() , 1.0 , 1.0 , "b" ) ;
432  }
433 }
434 
435 
436 template <class T, class G>
437 void FlavourHistograms2D<T, G>::fillVariable ( const int & flavour , const T & varX , const G & varY ) const {
438  // all
439  theHisto_all ->Fill ( varX, varY ) ;
440  if(createProfile_)
441  theProfile_all->Fill( varX, varY );
442  // flavour specific
443  if (!mcPlots_) return;
444 
445  switch( flavour ) {
446  case 1:
447  theHisto_d->Fill( varX, varY );
448  theHisto_dus->Fill( varX, varY );
449  theHisto_dusg->Fill( varX, varY );
450  if(createProfile_) {
451  theProfile_d->Fill(varX, varY);
452  theProfile_dus->Fill(varX, varY);
453  theProfile_dusg->Fill(varX, varY);
454  }
455  return;
456  case 2:
457  theHisto_u->Fill( varX, varY );
458  theHisto_dus->Fill( varX, varY );
459  theHisto_dusg->Fill( varX, varY );
460  if(createProfile_) {
461  theProfile_u->Fill(varX, varY);
462  theProfile_dus->Fill(varX, varY);
463  theProfile_dusg->Fill(varX, varY);
464  }
465  return;
466  case 3:
467  theHisto_s->Fill( varX, varY );
468  theHisto_dus->Fill( varX, varY );
469  theHisto_dusg->Fill( varX, varY );
470  if(createProfile_) {
471  theProfile_s->Fill(varX, varY);
472  theProfile_dus->Fill(varX, varY);
473  theProfile_dusg->Fill(varX, varY);
474  }
475  return;
476  case 4:
477  theHisto_c->Fill( varX, varY );
478  if(createProfile_) theProfile_c->Fill(varX, varY);
479  return;
480  case 5:
481  theHisto_b->Fill( varX, varY );
482  if(createProfile_) theProfile_b->Fill(varX, varY);
483  return;
484  case 21:
485  theHisto_g->Fill( varX, varY );
486  theHisto_dusg->Fill( varX, varY );
487  if(createProfile_) {
488  theProfile_g->Fill(varX, varY);
489  theProfile_dusg->Fill(varX, varY);
490  }
491  return;
492  default:
493  theHisto_ni->Fill( varX, varY );
494  if(createProfile_) theProfile_ni->Fill(varX, varY);
495  return;
496  }
497 }
498 
499 template <class T, class G>
501 {
502  std::vector<TH2F*> histoVector;
503  histoVector.push_back ( theHisto_all->getTH2F() );
504  if (mcPlots_) {
505  histoVector.push_back ( theHisto_d->getTH2F() );
506  histoVector.push_back ( theHisto_u->getTH2F() );
507  histoVector.push_back ( theHisto_s->getTH2F() );
508  histoVector.push_back ( theHisto_c->getTH2F() );
509  histoVector.push_back ( theHisto_b->getTH2F() );
510  histoVector.push_back ( theHisto_g ->getTH2F() );
511  histoVector.push_back ( theHisto_ni->getTH2F() );
512  histoVector.push_back ( theHisto_dus->getTH2F() );
513  histoVector.push_back ( theHisto_dusg->getTH2F());
514  }
515  return histoVector;
516 }
517 
518 template <class T, class G>
519 std::vector<TProfile*> FlavourHistograms2D<T, G>::getProfileVector() const
520 {
521  std::vector<TProfile*> profileVector;
522  if(createProfile_) {
523  profileVector.push_back ( theProfile_all->getTProfile() );
524  if (mcPlots_) {
525  profileVector.push_back ( theProfile_d->getTProfile() );
526  profileVector.push_back ( theProfile_u->getTProfile() );
527  profileVector.push_back ( theProfile_s->getTProfile() );
528  profileVector.push_back ( theProfile_c->getTProfile() );
529  profileVector.push_back ( theProfile_b->getTProfile() );
530  profileVector.push_back ( theProfile_g ->getTProfile() );
531  profileVector.push_back ( theProfile_ni->getTProfile() );
532  profileVector.push_back ( theProfile_dus->getTProfile() );
533  profileVector.push_back ( theProfile_dusg->getTProfile());
534  }
535  }
536  return profileVector;
537 }
538 
539 #endif
void fillVariable(const int &flavour, const T &varX, const G &varY) const
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)
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)
TH2F * getTH2F(void) const
MonitorElement * theProfile_g
TProfile * profile_dusg() const
double upperBoundY() const
MonitorElement * theHisto_b
int flavour(const Candidate &part)
Definition: pdgIdUtils.h:31
TProfile * profile_dus() const
TProfile * profile_g() const
MonitorElement * theHisto_ni
MonitorElement * theHisto_d