]>
Commit | Line | Data |
---|---|---|
fabf4d8e | 1 | #ifndef ALIHFMASSFITTER_H |
2 | #define ALIHFMASSFITTER_H | |
3 | /* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * | |
4 | * See cxx source for full Copyright notice */ | |
5 | ||
6 | ///////////////////////////////////////////////////////////// | |
7 | // | |
8 | // AliHFMassFitter for the fit of invariant mass distribution | |
9 | // of charmed mesons | |
10 | // | |
11 | // Author: C.Bianchin, chiara.bianchin@pd.infn.it | |
12 | ///////////////////////////////////////////////////////////// | |
13 | ||
14 | #include <TNamed.h> | |
15 | #include <Riostream.h> | |
16 | #include <TH1F.h> | |
17 | #include <TF1.h> | |
18 | #include <TMath.h> | |
19 | #include <TNtuple.h> | |
20 | #include <TFile.h> | |
21 | #include <TString.h> | |
56cbeefb | 22 | #include <TList.h> |
fabf4d8e | 23 | |
24 | ||
25 | class AliHFMassFitter : public TNamed { | |
26 | ||
27 | public: | |
28 | AliHFMassFitter(); | |
29 | AliHFMassFitter(TH1F* histoToFit, Double_t minvalue, Double_t maxvalue, Int_t rebin=1,Int_t fittypeb=0,Int_t fittypes=0); | |
2f328d65 | 30 | virtual ~AliHFMassFitter(); |
fabf4d8e | 31 | |
74179930 | 32 | AliHFMassFitter(const AliHFMassFitter &mfit); |
33 | AliHFMassFitter& operator=(const AliHFMassFitter &mfit); | |
fabf4d8e | 34 | |
35 | //setters | |
56cbeefb | 36 | void SetHisto(TH1F *histoToFit); |
2f328d65 | 37 | void SetRangeFit(Double_t minvalue, Double_t maxvalue){fminMass=minvalue; fmaxMass=maxvalue;} |
38 | void SetMinRangeFit(Double_t minvalue){fminMass=minvalue;} | |
39 | void SetMaxRangeFit(Double_t maxvalue){fmaxMass=maxvalue;} | |
40 | void SetBinN(Int_t newbinN){fNbin=newbinN;} | |
41 | void SetType(Int_t fittypeb, Int_t fittypes); | |
fabf4d8e | 42 | void SetReflectionSigmaFactor(Int_t constant) {ffactor=constant;} |
43 | void SetInitialGaussianMean(Double_t mean) {fMass=mean;} | |
44 | void SetInitialGaussianSigma(Double_t sigma) {fSigmaSgn=sigma;} | |
45 | void SetSideBands(Bool_t onlysidebands=kTRUE) {fSideBands=onlysidebands;} | |
46 | ||
47 | //getters | |
56cbeefb | 48 | TH1F* GetHistoClone() const; |
a60f573d | 49 | void GetRangeFit(Double_t &minvalue, Double_t &maxvalue) const {minvalue=fminMass; maxvalue=fmaxMass;} |
2f328d65 | 50 | Double_t GetMinRangeFit()const {return fminMass;} |
51 | Double_t GetMaxRangeFit()const {return fmaxMass;} | |
52 | Int_t GetBinN() const {return fNbin;} | |
fabf4d8e | 53 | void GetFitPars(Float_t*) const; |
56cbeefb | 54 | void GetTypeOfFit(Bool_t &background, Int_t &typeb) const {background = fWithBkg; typeb = ftypeOfFit4Bkg;} |
fabf4d8e | 55 | Int_t GetReflectionSigmaFactor() const {return ffactor;} |
0566386c | 56 | Double_t GetMean() const {return fMass;} |
57 | Double_t GetSigma()const {return fSigmaSgn;} | |
34c79b83 | 58 | Double_t GetChiSquare() const; |
b7d4bc49 | 59 | Double_t GetReducedChiSquare() const; |
60 | void GetSideBandsBounds(Int_t&, Int_t&) const; | |
fabf4d8e | 61 | |
ad73ca8f | 62 | void PrintParTitles() const; |
63 | ||
fabf4d8e | 64 | void InitNtuParam(char *ntuname="ntupar"); |
65 | void FillNtuParam(); | |
66 | TNtuple* GetNtuParam() const {return fntuParam;} | |
67 | TNtuple* NtuParamOneShot(char *ntuname="ntupar"); | |
56cbeefb | 68 | void WriteHisto(TString path="./"); |
69 | void WriteNtuple(TString path="./") const; | |
a60f573d | 70 | void DrawFit() const; |
56cbeefb | 71 | void Reset(); |
72 | ||
fabf4d8e | 73 | void Signal(Double_t nOfSigma,Double_t &signal,Double_t &errsignal) const; |
16856d6e | 74 | void Signal(Double_t min,Double_t max,Double_t &signal,Double_t &errsignal) const; |
a60f573d | 75 | void Background(Double_t nOfSigma,Double_t &background,Double_t &errbackground) const; |
16856d6e | 76 | void Background(Double_t min,Double_t max,Double_t &background,Double_t &errbackground) const; |
fabf4d8e | 77 | void Significance(Double_t nOfSigma,Double_t &significance,Double_t &errsignificance) const; |
16856d6e | 78 | void Significance(Double_t min,Double_t max,Double_t &significance,Double_t &errsignificance) const; |
fabf4d8e | 79 | |
80 | Double_t FitFunction4MassDistr (Double_t*, Double_t*); | |
81 | Double_t FitFunction4Sgn (Double_t*, Double_t*); | |
82 | Double_t FitFunction4Bkg (Double_t*, Double_t*); | |
34c79b83 | 83 | Bool_t MassFitter(Bool_t draw=kTRUE); |
fabf4d8e | 84 | void RebinMass(Int_t binground=1); |
85 | ||
86 | ||
87 | private: | |
88 | ||
2f328d65 | 89 | void ComputeParSize(); |
b7d4bc49 | 90 | Bool_t SideBandsBounds(); |
16856d6e | 91 | void AddFunctionsToHisto(); |
2f328d65 | 92 | |
74179930 | 93 | TH1F *fhistoInvMass; // histogram to fit |
fabf4d8e | 94 | Double_t fminMass; // lower mass limit |
95 | Double_t fmaxMass; // upper mass limit | |
96 | Int_t fNbin; // number of bins | |
2f328d65 | 97 | Int_t fParsSize; // size of fFitPars array |
98 | Float_t *fFitPars; //[fParsSize] array of fit parameters | |
fabf4d8e | 99 | Bool_t fWithBkg; // signal+background (kTRUE) or signal only (kFALSE) |
100 | Int_t ftypeOfFit4Bkg; // 0 = exponential; 1 = linear; 2 = pol2 | |
101 | Int_t ftypeOfFit4Sgn; // 0 = gaus; 1 = gaus+gaus broadened | |
102 | Int_t ffactor; // number to multiply to the sigma of the signal to obtain the reflected gaussian | |
103 | TNtuple *fntuParam; // contains fit parameters | |
104 | Double_t fMass; // signal gaussian mean value | |
105 | Double_t fSigmaSgn; // signal gaussian sigma | |
106 | Bool_t fSideBands; // kTRUE = only side bands considered | |
b7d4bc49 | 107 | Int_t fSideBandl; // left side band limit (bin number) |
108 | Int_t fSideBandr; // right side band limit (bin number) | |
56cbeefb | 109 | Int_t fcounter; // internal counter |
ad73ca8f | 110 | TList *fContourGraph; // TList of TGraph containing contour plots |
111 | ClassDef(AliHFMassFitter,3); // class for invariant mass fit | |
fabf4d8e | 112 | }; |
113 | ||
114 | #endif | |
115 | ||
74179930 | 116 |