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 */
8 /////////////////////////////////////////////////////////////
10 // AliHFMassFitter for the fit of invariant mass distribution
13 // Author: C.Bianchin, chiara.bianchin@pd.infn.it
14 /////////////////////////////////////////////////////////////
26 class AliHFMassFitter : public TNamed {
30 AliHFMassFitter(const TH1F* histoToFit, Double_t minvalue, Double_t maxvalue, Int_t rebin=1,Int_t fittypeb=0,Int_t fittypes=0);
31 virtual ~AliHFMassFitter();
33 AliHFMassFitter(const AliHFMassFitter &mfit);
34 AliHFMassFitter& operator=(const AliHFMassFitter &mfit);
37 void SetHisto(const TH1F *histoToFit);
38 void SetRangeFit(Double_t minvalue, Double_t maxvalue){fminMass=minvalue; fmaxMass=maxvalue; CheckRangeFit();}
39 void SetMinRangeFit(Double_t minvalue){fminMass=minvalue;printf("CheckRangeFit after SetMaxRangeFit is also set\n");}
40 void SetMaxRangeFit(Double_t maxvalue){fmaxMass=maxvalue;printf("CheckRangeFit after SetMinRangeFit is also set\n");}
41 void SetBinN(Int_t newbinN){fNbin=newbinN;}
42 void SetType(Int_t fittypeb, Int_t fittypes);
43 void SetReflectionSigmaFactor(Int_t constant) {ffactor=constant;}
44 void SetInitialGaussianMean(Double_t mean) {fMass=mean;} // change the default value of the mean
45 void SetInitialGaussianSigma(Double_t sigma) {fSigmaSgn=sigma;} // change the default value of the sigma
46 void SetSideBands(Bool_t onlysidebands=kTRUE) {fSideBands=onlysidebands;} // consider only side bands
47 void SetFixParam(Bool_t *fixpar){fFixPar=fixpar;}
48 void SetDefaultFixParam();
49 Bool_t SetFixThisParam(Int_t thispar,Bool_t fixpar);
50 void SetFixGaussianMean(Double_t mean=1.865,Bool_t fixpar=kTRUE){SetInitialGaussianMean(mean); SetFixThisParam(fNFinalPars-2,fixpar);}
51 void SetFixGaussianSigma(Double_t sigma=0.012, Bool_t fixpar=kTRUE){SetInitialGaussianSigma(sigma); SetFixThisParam(fNFinalPars-1,fixpar);}
54 TH1F* GetHistoClone() const; //return the histogram
55 void GetRangeFit(Double_t &minvalue, Double_t &maxvalue) const {minvalue=fminMass; maxvalue=fmaxMass;}
56 Double_t GetMinRangeFit()const {return fminMass;}
57 Double_t GetMaxRangeFit()const {return fmaxMass;}
58 Int_t GetBinN() const {return fNbin;}
59 void GetFitPars(Float_t* pars) const;
60 Int_t GetNFinalPars() const {return fNFinalPars;}
61 void GetTypeOfFit(Bool_t &background, Int_t &typeb) const {background = fWithBkg; typeb = ftypeOfFit4Bkg;}
62 Int_t GetReflectionSigmaFactor() const {return ffactor;}
63 Double_t GetMean() const {return fMass;}
64 Double_t GetMeanUncertainty() const {return fMassErr;}
65 Double_t GetSigma()const {return fSigmaSgn;}
66 Double_t GetSigmaUncertainty()const { return fSigmaSgnErr;}
67 Double_t GetRawYield()const {return fRawYield;}
68 Double_t GetRawYieldError()const {return fRawYieldErr;}
69 Double_t GetChiSquare() const;
70 Double_t GetReducedChiSquare() const;
71 void GetSideBandsBounds(Int_t& lb, Int_t& hb) const;
72 Bool_t* GetFixParam()const {return fFixPar;}
73 Bool_t GetFixThisParam(Int_t thispar)const;
74 TVirtualPad* GetPad(Double_t nsigma=3,Int_t writeFitInfo=1)const;
76 void PrintParTitles() const;
78 void InitNtuParam(TString ntuname="ntupar"); // initialize TNtuple to store the parameters
79 void FillNtuParam(); //Fill the TNtuple with the current parameters
80 TNtuple* GetNtuParam() const {return fntuParam;} // return the TNtuple
81 TNtuple* NtuParamOneShot(TString ntuname="ntupar"); // the three functions above all together
82 void WriteHisto(TString path="./") const; // write the histogram
83 void WriteNtuple(TString path="./") const; // write the TNtuple
84 void WriteCanvas(TString userIDstring="",TString path="./",Double_t nsigma=3,Int_t writeFitInfo=1,Bool_t draw=kFALSE) const; //write the canvas in a root file
85 void DrawHere(TVirtualPad* pd,Double_t nsigma=3,Int_t writeFitInfo=1) const;
86 void DrawFit(Double_t nsigma=3) const;
89 void IntS(Float_t *valuewitherror) const; // integral of signal given my the fit with error
90 Double_t IntTot() const {return fhistoInvMass->Integral("width");} // return total integral of the histogram
91 void Signal(Double_t nOfSigma,Double_t &signal,Double_t &errsignal) const; // signal in nsigma with error
92 void Signal(Double_t min,Double_t max,Double_t &signal,Double_t &errsignal) const; // signal in (min, max) with error
93 void Background(Double_t nOfSigma,Double_t &background,Double_t &errbackground) const; // backgournd in nsigma with error
94 void Background(Double_t min,Double_t max,Double_t &background,Double_t &errbackground) const; // backgournd in (min, max) with error
95 void Significance(Double_t nOfSigma,Double_t &significance,Double_t &errsignificance) const; // significance in nsigma with error
96 void Significance(Double_t min,Double_t max,Double_t &significance,Double_t &errsignificance) const; // significance in (min, max) with error
98 Double_t FitFunction4MassDistr (Double_t* x, Double_t* par);
99 Double_t FitFunction4Sgn (Double_t* x, Double_t* par);
100 Double_t FitFunction4Bkg (Double_t* x, Double_t* par);
101 Bool_t MassFitter(Bool_t draw=kTRUE);
102 Bool_t RefitWithBkgOnly(Bool_t draw=kTRUE);
103 void RebinMass(Int_t bingroup=1);
104 TF1* GetBackgroundFullRangeFunc(){
105 return fhistoInvMass->GetFunction("funcbkgFullRange");
107 TF1* GetBackgroundRecalcFunc(){
108 return fhistoInvMass->GetFunction("funcbkgRecalc");
111 return fhistoInvMass->GetFunction("funcmass");
117 void PlotFit(TVirtualPad* pd,Double_t nsigma=3,Int_t writeFitInfo=1)const;
119 void ComputeParSize();
120 void ComputeNFinalPars();
121 Bool_t SideBandsBounds();
122 Bool_t CheckRangeFit();
123 void AddFunctionsToHisto();
125 TH1F* fhistoInvMass; // histogram to fit
126 Double_t fminMass; // lower mass limit
127 Double_t fmaxMass; // upper mass limit
128 Int_t fminBinMass; // bin corresponding to fminMass
129 Int_t fmaxBinMass; // bin corresponding to fmaxMass
130 Int_t fNbin; // number of bins
131 Int_t fParsSize; // size of fFitPars array
132 Int_t fNFinalPars; // number of parameters of the final function
133 Float_t* fFitPars; //[fParsSize] array of fit parameters
134 Bool_t fWithBkg; // signal+background (kTRUE) or signal only (kFALSE)
135 Int_t ftypeOfFit4Bkg; // 0 = exponential; 1 = linear; 2 = pol2
136 Int_t ftypeOfFit4Sgn; // 0 = gaus; 1 = gaus+gaus broadened
137 Int_t ffactor; // number to multiply to the sigma of the signal to obtain the reflected gaussian
138 TNtuple* fntuParam; // contains fit parameters
139 Double_t fMass; // signal gaussian mean value
140 Double_t fMassErr; // err signal gaussian mean value
141 Double_t fSigmaSgn; // signal gaussian sigma
142 Double_t fSigmaSgnErr; // err signal gaussian sigma
143 Double_t fRawYield; // signal gaussian integral
144 Double_t fRawYieldErr; // err on signal gaussian integral
145 Bool_t fSideBands; // kTRUE = only side bands considered
146 Bool_t* fFixPar; //[fNFinalPars] for each par if kTRUE it is fixed in fit
147 Int_t fSideBandl; // left side band limit (bin number)
148 Int_t fSideBandr; // right side band limit (bin number)
149 Int_t fcounter; // internal counter
150 TList* fContourGraph; // TList of TGraph containing contour plots
152 ClassDef(AliHFMassFitter,6); // class for invariant mass fit