00001
00002 #ifndef FlavourHistograms2D_H
00003 #define FlavourHistograms2D_H
00004
00005 #include "DQMServices/Core/interface/DQMStore.h"
00006 #include "DQMServices/Core/interface/MonitorElement.h"
00007 #include "FWCore/ServiceRegistry/interface/Service.h"
00008
00009
00010
00011 #include "TH2F.h"
00012 #include "TProfile.h"
00013 #include "TCanvas.h"
00014 #include "TROOT.h"
00015 #include "TSystem.h"
00016 #include "TStyle.h"
00017
00018 #include "DQMOffline/RecoB/interface/Tools.h"
00019 #include "DQMOffline/RecoB/interface/HistoProviderDQM.h"
00020
00021 #include <iostream>
00022 #include <vector>
00023 #include <string>
00024
00025
00026
00027
00028
00029 template <class T, class G>
00030 class FlavourHistograms2D {
00031
00032 public:
00033
00034 FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
00035 int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
00036 int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
00037 bool statistics_ , bool update, std::string folder, bool mc,
00038 bool createProfile) ;
00039
00040 virtual ~FlavourHistograms2D () ;
00041
00042
00043
00044
00045
00046
00047
00048 void fill ( const int & flavour, const T & variableX, const G & variableY) const;
00049
00050
00051 void fill ( const int & flavour, const T * variableX, const G * variableY) const;
00052
00053
00054 void settitle(const char* titleX, const char* titleY) ;
00055
00056
00057
00058 void divide ( const FlavourHistograms2D<T, G> & bHD ) const ;
00059
00060 inline void SetMaximum(const double& max) { theMax = max;}
00061 inline void SetMinimum(const double& min) { theMin = min;}
00062
00063
00064
00065 inline std::string baseNameTitle () const { return theBaseNameTitle ; }
00066 inline std::string baseNameDescription () const { return theBaseNameDescription ; }
00067 inline int nBinsX () const { return theNBinsX ; }
00068 inline int nBinsY () const { return theNBinsY ; }
00069 inline double lowerBoundX () const { return theLowerBoundX ; }
00070 inline double upperBoundX () const { return theUpperBoundX ; }
00071 inline double lowerBoundY () const { return theLowerBoundY ; }
00072 inline double upperBoundY () const { return theUpperBoundY ; }
00073 inline bool statistics () const { return theStatistics ; }
00074
00075
00076 inline TH2F * histo_all () const { return theHisto_all->getTH2F() ; }
00077 inline TH2F * histo_d () const { return theHisto_d ->getTH2F() ; }
00078 inline TH2F * histo_u () const { return theHisto_u->getTH2F() ; }
00079 inline TH2F * histo_s () const { return theHisto_s->getTH2F() ; }
00080 inline TH2F * histo_c () const { return theHisto_c->getTH2F() ; }
00081 inline TH2F * histo_b () const { return theHisto_b->getTH2F() ; }
00082 inline TH2F * histo_g () const { return theHisto_g->getTH2F() ; }
00083 inline TH2F * histo_ni () const { return theHisto_ni->getTH2F() ; }
00084 inline TH2F * histo_dus () const { return theHisto_dus->getTH2F() ; }
00085 inline TH2F * histo_dusg () const { return theHisto_dusg->getTH2F() ; }
00086
00087 TProfile * profile_all () const { return theProfile_all->getTProfile() ; }
00088 TProfile * profile_d () const { return theProfile_d ->getTProfile() ; }
00089 TProfile * profile_u () const { return theProfile_u->getTProfile() ; }
00090 TProfile * profile_s () const { return theProfile_s->getTProfile() ; }
00091 TProfile * profile_c () const { return theProfile_c->getTProfile() ; }
00092 TProfile * profile_b () const { return theProfile_b->getTProfile() ; }
00093 TProfile * profile_g () const { return theProfile_g->getTProfile() ; }
00094 TProfile * profile_ni () const { return theProfile_ni->getTProfile() ; }
00095 TProfile * profile_dus () const { return theProfile_dus->getTProfile() ; }
00096 TProfile * profile_dusg () const { return theProfile_dusg->getTProfile() ; }
00097
00098 std::vector<TH2F*> getHistoVector() const;
00099
00100 std::vector<TProfile*> getProfileVector() const;
00101
00102
00103
00104 protected:
00105
00106 void fillVariable ( const int & flavour , const T & varX , const G & varY ) const;
00107
00108
00109
00110
00111
00112
00113
00114
00115 int * theArrayDimension ;
00116 int theMaxDimension ;
00117 int theIndexToPlot ;
00118
00119 std::string theBaseNameTitle ;
00120 std::string theBaseNameDescription ;
00121 int theNBinsX ;
00122 int theNBinsY ;
00123 double theLowerBoundX ;
00124 double theUpperBoundX ;
00125 double theLowerBoundY ;
00126 double theUpperBoundY ;
00127 bool theStatistics ;
00128 double theMin, theMax;
00129
00130
00131 MonitorElement *theHisto_all ;
00132 MonitorElement *theHisto_d ;
00133 MonitorElement *theHisto_u ;
00134 MonitorElement *theHisto_s ;
00135 MonitorElement *theHisto_c ;
00136 MonitorElement *theHisto_b ;
00137 MonitorElement *theHisto_g ;
00138 MonitorElement *theHisto_ni ;
00139 MonitorElement *theHisto_dus ;
00140 MonitorElement *theHisto_dusg ;
00141
00142
00143 MonitorElement *theProfile_all ;
00144 MonitorElement *theProfile_d ;
00145 MonitorElement *theProfile_u ;
00146 MonitorElement *theProfile_s ;
00147 MonitorElement *theProfile_c ;
00148 MonitorElement *theProfile_b ;
00149 MonitorElement *theProfile_g ;
00150 MonitorElement *theProfile_ni ;
00151 MonitorElement *theProfile_dus ;
00152 MonitorElement *theProfile_dusg ;
00153
00154
00155
00156
00157
00158 private:
00159 FlavourHistograms2D(){}
00160
00161 bool mcPlots_;
00162 bool createProfile_;
00163
00164 } ;
00165
00166
00167
00168 template <class T, class G>
00169 FlavourHistograms2D<T, G>::FlavourHistograms2D (TString baseNameTitle_ , TString baseNameDescription_ ,
00170 int nBinsX_ , double lowerBoundX_ , double upperBoundX_ ,
00171 int nBinsY_ , double lowerBoundY_ , double upperBoundY_ ,
00172 bool statistics_ ,
00173 bool update, std::string folder, bool mc, bool createProfile) :
00174
00175
00176 theMaxDimension(-1), theIndexToPlot(-1), theBaseNameTitle ( baseNameTitle_ ) , theBaseNameDescription ( baseNameDescription_ ) ,
00177 theNBinsX ( nBinsX_ ) , theNBinsY (nBinsY_),
00178 theLowerBoundX ( lowerBoundX_ ) , theUpperBoundX ( upperBoundX_ ) ,
00179 theLowerBoundY ( lowerBoundY_ ) , theUpperBoundY ( upperBoundY_ ) ,
00180 theStatistics ( statistics_ ) , theMin(-1.), theMax(-1.), mcPlots_(mc), createProfile_(createProfile)
00181 {
00182
00183 theArrayDimension = 0 ;
00184
00185 if (!update) {
00186
00187 HistoProviderDQM prov("Btag",folder);
00188 theHisto_all = (prov.book2D( theBaseNameTitle + "ALL" , theBaseNameDescription + " all jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY )) ;
00189 if (mcPlots_) {
00190 theHisto_d = (prov.book2D ( theBaseNameTitle + "D" , theBaseNameDescription + " d-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY )) ;
00191 theHisto_u = (prov.book2D ( theBaseNameTitle + "U" , theBaseNameDescription + " u-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00192 theHisto_s = (prov.book2D ( theBaseNameTitle + "S" , theBaseNameDescription + " s-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00193 theHisto_c = (prov.book2D ( theBaseNameTitle + "C" , theBaseNameDescription + " c-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00194 theHisto_b = (prov.book2D ( theBaseNameTitle + "B" , theBaseNameDescription + " b-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00195 theHisto_g = (prov.book2D ( theBaseNameTitle + "G" , theBaseNameDescription + " g-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00196 theHisto_ni = (prov.book2D ( theBaseNameTitle + "NI" , theBaseNameDescription + " ni-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00197 theHisto_dus = (prov.book2D ( theBaseNameTitle + "DUS" , theBaseNameDescription + " dus-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00198 theHisto_dusg = (prov.book2D ( theBaseNameTitle + "DUSG" , theBaseNameDescription + " dusg-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00199 }else{
00200 theHisto_d = 0;
00201 theHisto_u = 0;
00202 theHisto_s = 0;
00203 theHisto_c = 0;
00204 theHisto_b = 0;
00205 theHisto_g = 0;
00206 theHisto_ni = 0;
00207 theHisto_dus = 0;
00208 theHisto_dusg = 0;
00209 }
00210
00211 if (createProfile_) {
00212 theProfile_all = (prov.bookProfile( theBaseNameTitle + "_Profile_ALL" , theBaseNameDescription + " all jets" , theNBinsX, theLowerBoundX, theUpperBoundX, theNBinsY, theLowerBoundY, theUpperBoundY));
00213 if (mcPlots_) {
00214 theProfile_d = (prov.bookProfile ( theBaseNameTitle + "_Profile_D" , theBaseNameDescription + " d-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY )) ;
00215 theProfile_u = (prov.bookProfile ( theBaseNameTitle + "_Profile_U" , theBaseNameDescription + " u-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00216 theProfile_s = (prov.bookProfile ( theBaseNameTitle + "_Profile_S" , theBaseNameDescription + " s-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00217 theProfile_c = (prov.bookProfile ( theBaseNameTitle + "_Profile_C" , theBaseNameDescription + " c-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00218 theProfile_b = (prov.bookProfile ( theBaseNameTitle + "_Profile_B" , theBaseNameDescription + " b-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00219 theProfile_g = (prov.bookProfile ( theBaseNameTitle + "_Profile_G" , theBaseNameDescription + " g-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00220 theProfile_ni = (prov.bookProfile ( theBaseNameTitle + "_Profile_NI" , theBaseNameDescription + " ni-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00221 theProfile_dus = (prov.bookProfile ( theBaseNameTitle + "_Profile_DUS" , theBaseNameDescription + " dus-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00222 theProfile_dusg = (prov.bookProfile ( theBaseNameTitle + "_Profile_DUSG" , theBaseNameDescription + " dusg-jets" , theNBinsX , theLowerBoundX , theUpperBoundX , theNBinsY, theLowerBoundY, theUpperBoundY)) ;
00223 } else{
00224 theProfile_d = 0;
00225 theProfile_u = 0;
00226 theProfile_s = 0;
00227 theProfile_c = 0;
00228 theProfile_b = 0;
00229 theProfile_g = 0;
00230 theProfile_ni = 0;
00231 theProfile_dus = 0;
00232 theProfile_dusg = 0;
00233 }
00234 } else {
00235 theProfile_all = 0;
00236 theProfile_d = 0;
00237 theProfile_u = 0;
00238 theProfile_s = 0;
00239 theProfile_c = 0;
00240 theProfile_b = 0;
00241 theProfile_g = 0;
00242 theProfile_ni = 0;
00243 theProfile_dus = 0;
00244 theProfile_dusg = 0;
00245 }
00246
00247 if ( theStatistics ) {
00248 theHisto_all ->getTH2F()->Sumw2() ;
00249 if(createProfile)
00250 theProfile_all ->getTProfile()->Sumw2() ;
00251 if (mcPlots_) {
00252 theHisto_d ->getTH2F()->Sumw2() ;
00253 theHisto_u ->getTH2F()->Sumw2() ;
00254 theHisto_s ->getTH2F()->Sumw2() ;
00255 theHisto_c ->getTH2F()->Sumw2() ;
00256 theHisto_b ->getTH2F()->Sumw2() ;
00257 theHisto_g ->getTH2F()->Sumw2() ;
00258 theHisto_ni ->getTH2F()->Sumw2() ;
00259 theHisto_dus ->getTH2F()->Sumw2() ;
00260 theHisto_dusg->getTH2F()->Sumw2() ;
00261
00262 if(createProfile) {
00263 theProfile_d ->getTProfile()->Sumw2() ;
00264 theProfile_u ->getTProfile()->Sumw2() ;
00265 theProfile_s ->getTProfile()->Sumw2() ;
00266 theProfile_c ->getTProfile()->Sumw2() ;
00267 theProfile_b ->getTProfile()->Sumw2() ;
00268 theProfile_g ->getTProfile()->Sumw2() ;
00269 theProfile_ni ->getTProfile()->Sumw2() ;
00270 theProfile_dus ->getTProfile()->Sumw2() ;
00271 theProfile_dusg->getTProfile()->Sumw2() ;
00272 }
00273 }
00274 }
00275 } else {
00276 HistoProviderDQM prov("Btag",folder);
00277 theHisto_all = prov.access(theBaseNameTitle + "ALL" ) ;
00278 if (mcPlots_) {
00279
00280 theHisto_d = prov.access(theBaseNameTitle + "D" ) ;
00281 theHisto_u = prov.access(theBaseNameTitle + "U" ) ;
00282 theHisto_s = prov.access(theBaseNameTitle + "S" ) ;
00283 theHisto_c = prov.access(theBaseNameTitle + "C" ) ;
00284 theHisto_b =prov.access(theBaseNameTitle + "B" ) ;
00285 theHisto_g =prov.access(theBaseNameTitle + "G" ) ;
00286 theHisto_ni =prov.access(theBaseNameTitle + "NI" ) ;
00287 theHisto_dus =prov.access(theBaseNameTitle + "DUS" ) ;
00288 theHisto_dusg =prov.access(theBaseNameTitle + "DUSG") ;
00289 }
00290
00291 if(createProfile_) {
00292 theProfile_all = prov.access(theBaseNameTitle + "_Profile_ALL");
00293 if(mcPlots_) {
00294 theProfile_d = prov.access(theBaseNameTitle + "_Profile_D" ) ;
00295 theProfile_u = prov.access(theBaseNameTitle + "_Profile_U" ) ;
00296 theProfile_s = prov.access(theBaseNameTitle + "_Profile_S" ) ;
00297 theProfile_c = prov.access(theBaseNameTitle + "_Profile_C" ) ;
00298 theProfile_b =prov.access(theBaseNameTitle + "_Profile_B" ) ;
00299 theProfile_g =prov.access(theBaseNameTitle + "_Profile_G" ) ;
00300 theProfile_ni =prov.access(theBaseNameTitle + "_Profile_NI" ) ;
00301 theProfile_dus =prov.access(theBaseNameTitle + "_Profile_DUS" ) ;
00302 theProfile_dusg =prov.access(theBaseNameTitle + "_Profile_DUSG") ;
00303 }
00304 }
00305 }
00306 }
00307
00308
00309 template <class T, class G>
00310 FlavourHistograms2D<T, G>::~FlavourHistograms2D () {}
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 template <class T, class G> void
00324 FlavourHistograms2D<T, G>::fill ( const int & flavour, const T & variableX, const G & variableY) const
00325 {
00326
00327 fillVariable ( flavour , variableX , variableY ) ;
00328 }
00329
00330 template <class T, class G> void
00331 FlavourHistograms2D<T, G>::fill ( const int & flavour, const T * variableX, const G * variableY) const
00332 {
00333 if ( theArrayDimension == 0 ) {
00334
00335 fillVariable ( flavour , *variableX, *variableY ) ;
00336 } else {
00337
00338 int iMax = *theArrayDimension ;
00339 if ( *theArrayDimension > theMaxDimension ) iMax = theMaxDimension ;
00340
00341 for ( int i = 0 ; i != iMax ; ++i ) {
00342
00343 if ( ( theIndexToPlot < 0 ) || ( i == theIndexToPlot ) ) {
00344 fillVariable ( flavour , *(variableX+i) , *(variableY+i) ) ;
00345 }
00346 }
00347
00348
00349 if ( theIndexToPlot >= iMax ) {
00350
00351 const T& theZeroT = static_cast<T> ( 0.0) ;
00352 const G& theZeroG = static_cast<T> ( 0.0 );
00353 fillVariable ( flavour , theZeroT , theZeroG ) ;
00354 }
00355 }
00356 }
00357
00358
00359 template <class T, class G>
00360 void FlavourHistograms2D<T, G>::settitle(const char* titleX, const char* titleY) {
00361 if(theHisto_all) theHisto_all ->setAxisTitle(titleX) ;
00362 if(theHisto_all) theHisto_all ->setAxisTitle(titleY, 2) ;
00363 if (mcPlots_) {
00364
00365 if(theHisto_d) theHisto_d ->setAxisTitle(titleX) ;
00366 if(theHisto_u) theHisto_u ->setAxisTitle(titleX) ;
00367 if(theHisto_s) theHisto_s ->setAxisTitle(titleX) ;
00368 if(theHisto_c) theHisto_c ->setAxisTitle(titleX) ;
00369 if(theHisto_b) theHisto_b ->setAxisTitle(titleX) ;
00370 if(theHisto_g) theHisto_g ->setAxisTitle(titleX) ;
00371 if(theHisto_ni) theHisto_ni ->setAxisTitle(titleX) ;
00372 if(theHisto_dus) theHisto_dus ->setAxisTitle(titleX) ;
00373 if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleX) ;
00374 if(theHisto_d) theHisto_d ->setAxisTitle(titleY, 2) ;
00375 if(theHisto_u) theHisto_u ->setAxisTitle(titleY, 2) ;
00376 if(theHisto_s) theHisto_s ->setAxisTitle(titleY, 2) ;
00377 if(theHisto_c) theHisto_c ->setAxisTitle(titleY, 2) ;
00378 if(theHisto_b) theHisto_b ->setAxisTitle(titleY, 2) ;
00379 if(theHisto_g) theHisto_g ->setAxisTitle(titleY, 2) ;
00380 if(theHisto_ni) theHisto_ni ->setAxisTitle(titleY, 2) ;
00381 if(theHisto_dus) theHisto_dus ->setAxisTitle(titleY, 2) ;
00382 if(theHisto_dusg)theHisto_dusg->setAxisTitle(titleY, 2) ;
00383 }
00384
00385 if(createProfile_) {
00386 if(theProfile_all) theProfile_all ->setAxisTitle(titleX) ;
00387 if(theProfile_all) theProfile_all ->setAxisTitle(titleY, 2) ;
00388 if (mcPlots_ == true) {
00389
00390 if(theProfile_d) theProfile_d ->setAxisTitle(titleX) ;
00391 if(theProfile_u) theProfile_u ->setAxisTitle(titleX) ;
00392 if(theProfile_s) theProfile_s ->setAxisTitle(titleX) ;
00393 if(theProfile_c) theProfile_c ->setAxisTitle(titleX) ;
00394 if(theProfile_b) theProfile_b ->setAxisTitle(titleX) ;
00395 if(theProfile_g) theProfile_g ->setAxisTitle(titleX) ;
00396 if(theProfile_ni) theProfile_ni ->setAxisTitle(titleX) ;
00397 if(theProfile_dus) theProfile_dus ->setAxisTitle(titleX) ;
00398 if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleX) ;
00399 if(theProfile_d) theProfile_d ->setAxisTitle(titleY, 2) ;
00400 if(theProfile_u) theProfile_u ->setAxisTitle(titleY, 2) ;
00401 if(theProfile_s) theProfile_s ->setAxisTitle(titleY, 2) ;
00402 if(theProfile_c) theProfile_c ->setAxisTitle(titleY, 2) ;
00403 if(theProfile_b) theProfile_b ->setAxisTitle(titleY, 2) ;
00404 if(theProfile_g) theProfile_g ->setAxisTitle(titleY, 2) ;
00405 if(theProfile_ni) theProfile_ni ->setAxisTitle(titleY, 2) ;
00406 if(theProfile_dus) theProfile_dus ->setAxisTitle(titleY, 2) ;
00407 if(theProfile_dusg)theProfile_dusg->setAxisTitle(titleY, 2) ;
00408 }
00409 }
00410 }
00411
00412
00413
00414 template <class T, class G>
00415 void FlavourHistograms2D<T, G>::divide ( const FlavourHistograms2D<T, G> & bHD ) const {
00416
00417
00418
00419
00420
00421 theHisto_all ->getTH2F()-> Divide ( theHisto_all->getTH2F() , bHD.histo_all () , 1.0 , 1.0 , "b" ) ;
00422 if (mcPlots_) {
00423 theHisto_d ->getTH2F()-> Divide ( theHisto_d ->getTH2F() , bHD.histo_d () , 1.0 , 1.0 , "b" ) ;
00424 theHisto_u ->getTH2F()-> Divide ( theHisto_u ->getTH2F() , bHD.histo_u () , 1.0 , 1.0 , "b" ) ;
00425 theHisto_s ->getTH2F()-> Divide ( theHisto_s ->getTH2F() , bHD.histo_s () , 1.0 , 1.0 , "b" ) ;
00426 theHisto_c ->getTH2F()-> Divide ( theHisto_c ->getTH2F() , bHD.histo_c () , 1.0 , 1.0 , "b" ) ;
00427 theHisto_b ->getTH2F()-> Divide ( theHisto_b ->getTH2F() , bHD.histo_b () , 1.0 , 1.0 , "b" ) ;
00428 theHisto_g ->getTH2F()-> Divide ( theHisto_g ->getTH2F() , bHD.histo_g () , 1.0 , 1.0 , "b" ) ;
00429 theHisto_ni ->getTH2F()-> Divide ( theHisto_ni->getTH2F() , bHD.histo_ni () , 1.0 , 1.0 , "b" ) ;
00430 theHisto_dus ->getTH2F()-> Divide ( theHisto_dus->getTH2F() , bHD.histo_dus () , 1.0 , 1.0 , "b" ) ;
00431 theHisto_dusg ->getTH2F()-> Divide ( theHisto_dusg->getTH2F() , bHD.histo_dusg() , 1.0 , 1.0 , "b" ) ;
00432 }
00433 }
00434
00435
00436 template <class T, class G>
00437 void FlavourHistograms2D<T, G>::fillVariable ( const int & flavour , const T & varX , const G & varY ) const {
00438
00439 theHisto_all ->Fill ( varX, varY ) ;
00440 if(createProfile_)
00441 theProfile_all->Fill( varX, varY );
00442
00443 if (!mcPlots_) return;
00444
00445 switch( flavour ) {
00446 case 1:
00447 theHisto_d->Fill( varX, varY );
00448 theHisto_dus->Fill( varX, varY );
00449 theHisto_dusg->Fill( varX, varY );
00450 if(createProfile_) {
00451 theProfile_d->Fill(varX, varY);
00452 theProfile_dus->Fill(varX, varY);
00453 theProfile_dusg->Fill(varX, varY);
00454 }
00455 return;
00456 case 2:
00457 theHisto_u->Fill( varX, varY );
00458 theHisto_dus->Fill( varX, varY );
00459 theHisto_dusg->Fill( varX, varY );
00460 if(createProfile_) {
00461 theProfile_u->Fill(varX, varY);
00462 theProfile_dus->Fill(varX, varY);
00463 theProfile_dusg->Fill(varX, varY);
00464 }
00465 return;
00466 case 3:
00467 theHisto_s->Fill( varX, varY );
00468 theHisto_dus->Fill( varX, varY );
00469 theHisto_dusg->Fill( varX, varY );
00470 if(createProfile_) {
00471 theProfile_s->Fill(varX, varY);
00472 theProfile_dus->Fill(varX, varY);
00473 theProfile_dusg->Fill(varX, varY);
00474 }
00475 return;
00476 case 4:
00477 theHisto_c->Fill( varX, varY );
00478 if(createProfile_) theProfile_c->Fill(varX, varY);
00479 return;
00480 case 5:
00481 theHisto_b->Fill( varX, varY );
00482 if(createProfile_) theProfile_b->Fill(varX, varY);
00483 return;
00484 case 21:
00485 theHisto_g->Fill( varX, varY );
00486 theHisto_dusg->Fill( varX, varY );
00487 if(createProfile_) {
00488 theProfile_g->Fill(varX, varY);
00489 theProfile_dusg->Fill(varX, varY);
00490 }
00491 return;
00492 default:
00493 theHisto_ni->Fill( varX, varY );
00494 if(createProfile_) theProfile_ni->Fill(varX, varY);
00495 return;
00496 }
00497 }
00498
00499 template <class T, class G>
00500 std::vector<TH2F*> FlavourHistograms2D<T, G>::getHistoVector() const
00501 {
00502 std::vector<TH2F*> histoVector;
00503 histoVector.push_back ( theHisto_all->getTH2F() );
00504 if (mcPlots_) {
00505 histoVector.push_back ( theHisto_d->getTH2F() );
00506 histoVector.push_back ( theHisto_u->getTH2F() );
00507 histoVector.push_back ( theHisto_s->getTH2F() );
00508 histoVector.push_back ( theHisto_c->getTH2F() );
00509 histoVector.push_back ( theHisto_b->getTH2F() );
00510 histoVector.push_back ( theHisto_g ->getTH2F() );
00511 histoVector.push_back ( theHisto_ni->getTH2F() );
00512 histoVector.push_back ( theHisto_dus->getTH2F() );
00513 histoVector.push_back ( theHisto_dusg->getTH2F());
00514 }
00515 return histoVector;
00516 }
00517
00518 template <class T, class G>
00519 std::vector<TProfile*> FlavourHistograms2D<T, G>::getProfileVector() const
00520 {
00521 std::vector<TProfile*> profileVector;
00522 if(createProfile_) {
00523 profileVector.push_back ( theProfile_all->getTProfile() );
00524 if (mcPlots_) {
00525 profileVector.push_back ( theProfile_d->getTProfile() );
00526 profileVector.push_back ( theProfile_u->getTProfile() );
00527 profileVector.push_back ( theProfile_s->getTProfile() );
00528 profileVector.push_back ( theProfile_c->getTProfile() );
00529 profileVector.push_back ( theProfile_b->getTProfile() );
00530 profileVector.push_back ( theProfile_g ->getTProfile() );
00531 profileVector.push_back ( theProfile_ni->getTProfile() );
00532 profileVector.push_back ( theProfile_dus->getTProfile() );
00533 profileVector.push_back ( theProfile_dusg->getTProfile());
00534 }
00535 }
00536 return profileVector;
00537 }
00538
00539 #endif