#ifndef __GFDSTARXSECTIONS_H #define __GFDSTARXSECTIONS_H // ROOT includes #include #include #include #include #include "GFUtils/GFHistManager.h" #include "GFDstarHistsAnalysisData.h" #include "GFDstarHistsAnalysisMc.h" #include "GFTools/GFFitHistFrac.h" class TFile; // class TH1; // class GFHistManager; // class GFDstarHistsAnalysisMc; // class GFDstarHistsAnalysisData; class GFDstarXSections : public TObject{ public: explicit GFDstarXSections(const char* filePrefix, const char* period = NULL); // before 'per lumi': // GFDstarXSections(const char* fileData, const char* fileMc1, const char* fileMc2, // const char* fileMc3); GFDstarXSections(GFDstarHistsAnalysisData* data, GFDstarHistsAnalysisMc* m1, GFDstarHistsAnalysisMc* m2); virtual ~GFDstarXSections(); void SetTrigger(Int_t trigger); void SetBatch(Bool_t yesNo = kTRUE); void SetFitOrNotFlag(Int_t flag); void SetAcceptFromMc(Bool_t yesNo) {fAcceptFromMc[84-fTrigger] = yesNo;} void SetEffTrigFromMc(Bool_t yesNo) {fEffTrigFromMc[84-fTrigger] = yesNo;} virtual void Print(const char* fileName) const {fHistManager->Print(fileName);} GFDstarHistsAnalysisData* GetDstarHistsAnalysisData() {return fAnalysisData;} GFDstarHistsAnalysisMc* GetDstarHistsAnalysisMc() {return fAnalysisMc;} GFDstarHistsAnalysisMc* GetDstarHistsAnalysisOtherMc() {return fAnalysisOtherMc;} GFHistManager* GetHistManager() {return fHistManager;} TH1* XSectionNorm(const char* var); TH1* XSectionNorm(const char *var1, const char *var2, Int_t firstBin2, Int_t lastBin2); TH1* XSectionDsJetNorm(const char *var, const char* forwBack); TH1* XSectionDsDiJetNorm(const char* var); TH1* XSection(const char* var, Bool_t acceptOnMc = kFALSE); TH1* XSectionDsJet(const char* var, const char* forwBack); TH1* XSectionDsDiJet(const char* var); TH1* XSection(const char* var1, const char* var2, Int_t firstBin2, Int_t lastBin2); TH1* XSectionWgammaP(Bool_t acceptOnMc = kFALSE); // TH1* XSectionWgammaPBoth(Bool_t acceptOnMc = kFALSE); // before 'per lumi' TH1* XSectionTotHist(Bool_t draw = kFALSE, Bool_t acceptOnMc = kFALSE); TArrayD XSectionTot(Bool_t acceptOnMc = kFALSE) const; TArrayD XSectionDsJetTot(const char* forwBack) const; TArrayD XSectionDsDiJetTot() const; TH1* CreateTrigEff(const char* var); TArrayD TotalTrigEff() const; TH1* DataVsMcDstar(const char* variable, Bool_t perBinW, Bool_t log = kFALSE); // pt, eta, phi TH1* DataVsMcDstar(const char* var1, const char* var2, Int_t firstBin, Int_t lastBin, Bool_t perBinW, Bool_t log = kFALSE); // pt, eta, wGammaP TH1* DataVsMcDsJet(const char* variable, const char* forwBack, Bool_t perBinW, Bool_t log = kFALSE); // pt, eta, phi TH1* DataVsMcDsDiJet(const char* variable, Bool_t perBinW, Bool_t log = kFALSE); TH1* DataVsMcTrack(const char* varTrack);//PtK,ThetaPi,PhiPis;LH,Nhit,Start,End,Length,... void DataVsMcTracks(const char* var);// Pt,Theta,Length,Phi,LH, etc. void DataVsMcL4EffSR(const char* var = NULL, Int_t dstar = 1, Int_t fitModeData = 2);//0: class, 1: golden D* TH1* DrawDataVsMC(TH1* hData,TH1* hMc,TH1* hMc2,Bool_t perBinW=kFALSE,Bool_t log=kFALSE); void DataVsMcPtDsOverSumEt(); TH1* DataVsMcTrigEff(const char* var, Int_t TE = -1);//pt,eta,phi,wGammaP,etc.;19/31/default=-1 Double_t NormaliseToData(TH1* hist, GFDstarHistsAnalysisMc* mc,Bool_t accOnMc = 0) const; GFHistArray* FitFractions(TH1* histXSection, GFHistArray* mcHists); Bool_t AcceptFromMc() const {return fAcceptFromMc.At(84-fTrigger);} Bool_t EffTrigFromMc() const {return fEffTrigFromMc.At(84-fTrigger);} Double_t GetLumi() const {return fLumi.At(84-fTrigger);} Int_t GetTrigger() const {return fTrigger;} const TArrayD* GetMcFactors() const {return &fMcFactors;} void SetMergeNBins(Int_t n); protected: void Init(); void InitXSecWgammaP(Bool_t acceptOnMc); TH1* XSectionNormInt(TH1 *hist, const char *sample, const char *var); TH1* XSectionInt(const char* variable, const char* process, Bool_t drawWriteNormMc = kTRUE); TArrayD XSectionTot(const TArrayD& numDstar, Double_t trigEff, Double_t recEff, Double_t accept, Double_t l4Eff, const char* what) const; void DataVsMcTracks(); void SetHistPointerNull(); void SetLumi(const char* per = NULL); const char* GetUnit(const TString &titleShort) const; GFHistManager* fHistManager; GFDstarHistsAnalysisData* fAnalysisData; GFDstarHistsAnalysisMc* fAnalysisMc; GFDstarHistsAnalysisMc* fAnalysisOtherMc; GFFitHistFrac fHistFracFitter; Int_t fTrigger; // which trigger's histograms (83, 84) TArrayD fLumi; TArrayC fAcceptFromMc; TArrayC fEffTrigFromMc; Float_t fReflectCorrection; Float_t fEffDedx; mutable TArrayD fInclXsec; // store inclusive D* X-section TArrayD fMcFactors;// store factors that MCs have to be multiplied TH1* fHistNumDstar; TH1* fHistTrigEff; TH1* fHistRecEff; TH1* fHistAccept; TH1* fHistData1; TH1* fHistData2; TH1* fHistData3; TH1* fHistMc1; TH1* fHistMc2; TH1* fHistMc3; ClassDef(GFDstarXSections,0) // class not to be written on file! }; #endif // __GFDSTARXSECTIONS_H