39 fNumOfLowLimFitSteps(6),
41 fNumOfUpLimFitSteps(6),
43 fNumOfnSigmaBinCSteps(11),
44 fnSigmaBinCSteps(0x0),
46 fSigmaMCVariation(0.15),
56 fDrawIndividualFits(kFALSE),
57 fHistoRawYieldDistAll(0x0),
58 fHistoRawYieldTrialAll(0x0),
59 fHistoSigmaTrialAll(0x0),
60 fHistoMeanTrialAll(0x0),
61 fHistoChi2TrialAll(0x0),
62 fHistoRawYieldDistBinCAll(0x0),
63 fHistoRawYieldTrialBinCAll(0x0),
64 fHistoRawYieldDist(0x0),
65 fHistoRawYieldTrial(0x0),
66 fHistoSigmaTrial(0x0),
69 fHistoRawYieldDistBinC(0x0),
70 fHistoRawYieldTrialBinC(0x0),
71 fNtupleMultiTrials(0x0),
76 Int_t rebinStep[4]={3,4,5,6};
77 Double_t minMassStep[6]={1.68,1.70,1.72,1.74,1.76,1.78};
78 Double_t maxMassStep[6]={2.06,2.04,2.02,2.00,1.98,1.96};
79 Double_t nSigmasBC[11]={2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5,7.0};
100 TString funcBkg[
kNBkgFuncCases]={
"Expo",
"Lin",
"Pol2",
"Pol3",
"Pol4",
"Pol5"};
101 TString gausSig[
kNFitConfCases]={
"FixedS",
"FixedSp20",
"FixedSm20",
"FreeS",
"FixedMeanFixedS",
"FixedMeanFreeS"};
106 fHistoRawYieldTrialAll =
new TH1F(Form(
"hRawYieldTrialAll%s",
fSuffix.Data()),
" ; Trial # ; Raw Yield",nCases*totTrials,-0.5,nCases*totTrials-0.5);
107 fHistoSigmaTrialAll =
new TH1F(Form(
"hSigmaTrialAll%s",
fSuffix.Data()),
" ; Trial # ; Sigma (GeV/c^{2})",nCases*totTrials,-0.5,nCases*totTrials-0.5);
108 fHistoMeanTrialAll =
new TH1F(Form(
"hMeanTrialAll%s",
fSuffix.Data()),
" ; Trial # ; Mean (GeV/c^{2})",nCases*totTrials,-0.5,nCases*totTrials-0.5);
109 fHistoChi2TrialAll =
new TH1F(Form(
"hChi2TrialAll%s",
fSuffix.Data()),
" ; Trial # ; #chi^{2}",nCases*totTrials,-0.5,nCases*totTrials-0.5);
125 Int_t theCase=igs*kNBkgFuncCases+ib;
128 fHistoRawYieldTrial[theCase]=
new TH1F(Form(
"hRawYieldTrial%s%s%s",funcBkg[ib].
Data(),gausSig[igs].
Data(),
fSuffix.Data()),
" ; Trial # ; Raw Yield",totTrials,-0.5,totTrials-0.5);
129 fHistoRawYieldTrialBinC[theCase]=
new TH2F(Form(
"hRawYieldTrialBinC%s%s%s",funcBkg[ib].
Data(),gausSig[igs].
Data(),
fSuffix.Data()),
" ; Trial # ; Range for count ; Raw Yield (bin count)",totTrials,-0.5,totTrials-0.5,
fNumOfnSigmaBinCSteps,-0.5,
fNumOfnSigmaBinCSteps-0.5);
130 fHistoSigmaTrial[theCase]=
new TH1F(Form(
"hSigmaTrial%s%s%s",funcBkg[ib].
Data(),gausSig[igs].
Data(),
fSuffix.Data()),
" ; Trial # ; Sigma (GeV/c^{2})",totTrials,-0.5,totTrials-0.5);
131 fHistoMeanTrial[theCase]=
new TH1F(Form(
"hMeanTrial%s%s%s",funcBkg[ib].
Data(),gausSig[igs].
Data(),
fSuffix.Data()),
" ; Trial # ; Mean (GeV/c^{2})",totTrials,-0.5,totTrials-0.5);
132 fHistoChi2Trial[theCase]=
new TH1F(Form(
"hChi2Trial%s%s%s",funcBkg[ib].
Data(),gausSig[igs].
Data(),
fSuffix.Data()),
" ; Trial # ; #chi^{2}",totTrials,-0.5,totTrials-0.5);
140 fNtupleMultiTrials =
new TNtuple(Form(
"ntuMultiTrial%s",
fSuffix.Data()),Form(
"ntuMultiTrial%s",
fSuffix.Data()),
"rebin:minfit:maxfit:bkgfunc:confsig:confmean:chi2:mean:emean:sigma:esigma:rawy:erawy");
150 if(!hOK)
return kFALSE;
163 TH1F* hRebinned=
RebinHisto(hInvMassHisto,rebin,-1);
166 Double_t hmin=TMath::Max(minMassForFit,hRebinned->GetBinLowEdge(2));
169 Double_t hmax=TMath::Min(maxMassForFit,hRebinned->GetBinLowEdge(hRebinned->GetNbinsX()));
179 Int_t theCase=igs*kNBkgFuncCases+
typeb;
181 for(Int_t j=0; j<13; j++) xnt[j]=0.;
231 if(typeb<kNBkgFuncCases){
232 printf(
"****** START FIT OF HISTO %s WITH REBIN %d MASS RANGE %f-%f BACKGROUND FIT FUNCTION=%d CONFIG SIGMA/MEAN=%d\n",hInvMassHisto->GetName(),
rebin,
minMassForFit,
maxMassForFit,
typeb,igs);
238 if(esigma<0.00001) esigma=0.0001;
240 if(epos<0.00001) epos=0.0001;
304 if(minMassBC>minMassForFit &&
305 maxMassBC<maxMassForFit &&
306 minMassBC>(hRebinned->GetXaxis()->GetXmin()) &&
307 maxMassBC<(hRebinned->GetXaxis()->GetXmax())){
309 BinCount(hRebinned,fB1,1,minMassBC,maxMassBC,cnts,ecnts);
336 TFile* outHistos=
new TFile(fileName.Data(),option.Data());
343 for(Int_t ic=0; ic<nCases; ic++){
374 TLatex* tmax=
new TLatex(0.6,0.8,Form(
"max=%.1f",
fMaxYieldGlob));
377 TLatex* tmin=
new TLatex(0.6,0.72,Form(
"min=%.1f",
fMinYieldGlob));
390 Int_t nBinOrig=hOrig->GetNbinsX();
391 Int_t firstBinOrig=1;
392 Int_t lastBinOrig=nBinOrig;
393 Int_t nBinOrigUsed=nBinOrig;
394 Int_t nBinFinal=nBinOrig/reb;
396 firstBinOrig=firstUse;
397 nBinFinal=(nBinOrig-firstUse+1)/reb;
398 nBinOrigUsed=nBinFinal*reb;
399 lastBinOrig=firstBinOrig+nBinOrigUsed-1;
401 Int_t exc=nBinOrigUsed%reb;
405 lastBinOrig=firstBinOrig+nBinOrigUsed-1;
409 printf(
"Rebin from %d bins to %d bins -- Used bins=%d in range %d-%d\n",nBinOrig,nBinFinal,nBinOrigUsed,firstBinOrig,lastBinOrig);
410 Float_t lowLim=hOrig->GetXaxis()->GetBinLowEdge(firstBinOrig);
411 Float_t hiLim=hOrig->GetXaxis()->GetBinUpEdge(lastBinOrig);
412 TH1F* hRebin=
new TH1F(Form(
"%s-rebin%d_%d",hOrig->GetName(),reb,firstUse),hOrig->GetTitle(),nBinFinal,lowLim,hiLim);
413 Int_t lastSummed=firstBinOrig-1;
414 for(Int_t iBin=1;iBin<=nBinFinal; iBin++){
417 for(Int_t iOrigBin=0;iOrigBin<reb;iOrigBin++){
418 sum+=hOrig->GetBinContent(lastSummed+1);
419 sum2+=hOrig->GetBinError(lastSummed+1)*hOrig->GetBinError(lastSummed+1);
422 hRebin->SetBinContent(iBin,sum);
423 hRebin->SetBinError(iBin,TMath::Sqrt(sum2));
431 Int_t minBinSum=h->FindBin(minMass);
432 Int_t maxBinSum=h->FindBin(maxMass);
435 for(Int_t iMB=minBinSum; iMB<=maxBinSum; iMB++){
436 Double_t bkg=fB ? fB->Eval(h->GetBinCenter(iMB))/(Double_t)rebin : 0;
437 cntSig+=(h->GetBinContent(iMB)-bkg);
438 cntErr+=(h->GetBinError(iMB)*h->GetBinError(iMB));
441 ecount=TMath::Sqrt(cntErr);
448 TH1F *hCutTmp=(TH1F*)histoToFit->Clone(
"hCutTmp");
449 for(Int_t ib=1; ib<=hCutTmp->GetNbinsX(); ib++){
450 Double_t xc=hCutTmp->GetBinCenter(ib);
452 hCutTmp->SetBinContent(ib,0.);
453 hCutTmp->SetBinError(ib,0.);
457 hCutTmp->Fit(
"pol2",
"E0",
"",hmin,hmax);
458 TF1* f2=(TF1*)hCutTmp->GetListOfFunctions()->FindObject(
"pol2");
459 TF1* f3=
new TF1(
"myPol3",
"pol3");
460 for(Int_t i=0; i<3;i++) f3->SetParameter(i,f2->GetParameter(i));
461 hCutTmp->Fit(f3,
"E0",
"",hmin,hmax);
462 Double_t quickCount=0.;
463 for(Int_t ib=1; ib<=histoToFit->GetNbinsX(); ib++){
464 Double_t xc=hCutTmp->GetBinCenter(ib);
466 quickCount+=(histoToFit->GetBinContent(ib)-f3->Eval(xc));
469 TF1* fSB=
new TF1(
"fSB",
"[0]*1./(TMath::Sqrt(2.*TMath::Pi())*[2])*TMath::Exp(-(x-[1])*(x-[1])/(2.*[2]*[2]))+[3]+[4]*x+[5]*x*x+[6]*x*x*x");
470 fSB->SetParameter(0,quickCount);
471 fSB->SetParameter(1,
fMassD);
473 for(Int_t j=0; j<4; j++) fSB->SetParameter(j+3,f3->GetParameter(j));
478 fSB->FixParameter(1,
fMassD);
481 fSB->FixParameter(1,
fMassD);
483 histoToFit->Fit(fSB,
"ME0",
"",hmin,hmax);
485 if(fSB->GetParError(0)<0.01*fSB->GetParameter(0))
return kFALSE;
486 if(fSB->GetParError(0)>0.6*fSB->GetParameter(0))
return kFALSE;
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Double_t fMaxYieldGlob
minimum yield
TH1F * fHistoSigmaTrialAll
histo with yield from all trials
TNtuple * fNtupleMultiTrials
histo with bin counts from subsamples of trials
Double_t fMinYieldGlob
tree
TH1F * fHistoRawYieldDistAll
flag for drawing fits
Bool_t fUseLinBkg
switch for exponential background
void SetInitialGaussianMean(Double_t mean)
Double_t * fLowLimFitSteps
number of steps on the min. mass for fit
void DrawHere(TVirtualPad *pd, Double_t nsigma=3, Int_t writeFitInfo=1)
void SetBackHighPolDegree(Int_t deg)
void ConfigurenSigmaBinCSteps(Int_t nSteps, Double_t *values)
TString fSuffix
mass of D meson
TH1F * fHistoMeanTrialAll
histo with gauss sigma from all trials
Int_t fNumOfUpLimFitSteps
Bool_t MassFitter(Bool_t draw=kTRUE)
TH1F ** fHistoRawYieldTrial
histo with yield from subsamples of trials
Double_t fMassD
relative variation of the sigma
TF1 * GetBackgroundFullRangeFunc()
Int_t * fRebinSteps
number of rebin steps
TH2F ** fHistoRawYieldTrialBinC
histo with bin counts from subsamples of trials
TH1F ** fHistoSigmaTrial
histo with yield from subsamples of trials
Int_t fNumOfLowLimFitSteps
void DrawHistos(TCanvas *cry) const
Double_t GetRawYieldError() const
AliHFMassFitterVAR for the fit of invariant mass distribution of charmed mesons.
TH1F ** fHistoRawYieldDist
histo with bin counts from all trials
Double_t * fnSigmaBinCSteps
number of steps on the bin counting
Int_t fFitOption
name to characterize analysis case
void ConfigureLowLimFitSteps(Int_t nSteps, Double_t *values)
Bool_t fDrawIndividualFits
switch for pol5 background
Double_t GetMeanUncertainty() const
Bool_t fUsePol2Bkg
switch for linear background
Bool_t fUsePol5Bkg
switch for pol4 background
TH1F ** fHistoRawYieldDistBinC
histo with chi2 from subsamples of trials
Double_t GetReducedChiSquare() const
void SetReflectionSigmaFactor(Int_t constant)
TH1F * fHistoRawYieldDistBinCAll
histo with chi2 from all trials
Bool_t DoFitWithPol3Bkg(TH1F *histoToFit, Double_t hmin, Double_t hmax, Int_t theCase)
Double_t GetRawYield() const
void SetInitialGaussianSigma(Double_t sigma)
change the default value of the mean
TH1F ** fHistoMeanTrial
histo with gauss sigma from subsamples of trials
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH1F * RebinHisto(TH1D *hOrig, Int_t reb, Int_t firstUse) const
void BinCount(TH1F *h, TF1 *fB, Int_t rebin, Double_t minMass, Double_t maxMass, Double_t &count, Double_t &ecount) const
TH2F * fHistoRawYieldTrialBinCAll
histo with bin counts from all trials
Double_t fSigmaMCVariation
sigma of D meson peak from MC
Bool_t fUsePol3Bkg
switch for pol2 background
void SetFixGaussianSigma(Double_t sigma=0.012, Bool_t fixpar=kTRUE)
Bool_t fUsePol4Bkg
switch for pol3 background
Int_t fNumOfnSigmaBinCSteps
TH1F ** fHistoChi2Trial
histo with gauss mean from subsamples of trials
TH1F * fHistoRawYieldTrialAll
histo with yield from all trials
void ConfigureRebinSteps(Int_t nSteps, Int_t *values)
void ConfigureUpLimFitSteps(Int_t nSteps, Double_t *values)
void SaveToRoot(TString fileName, TString option="recreate") const
Double_t GetSigma() const
virtual ~AliHFMultiTrials()
Bool_t fUseExpoBkg
LL or chi2 fit.
Bool_t DoMultiTrials(TH1D *hInvMassHisto, TPad *thePad=0x0)
void SetFixGaussianMean(Double_t mean=1.865, Bool_t fixpar=kTRUE)
Double_t * fUpLimFitSteps
number of steps on the max. mass for fit
TH1F * fHistoChi2TrialAll
histo with gauss mean from all trials
Double_t GetSigmaUncertainty() const