From 6730d2bde0edd98b207fb4a011842301792f7637 Mon Sep 17 00:00:00 2001 From: wiechula Date: Mon, 18 Mar 2013 23:30:59 +0000 Subject: [PATCH 1/1] o Add fitter for B -> J/psi analysis (Annalisa) --- PWGDQ/CMakelibPWGDQdielectron.pkg | 1 + PWGDQ/PWGDQdielectronLinkDef.h | 1 + .../AliDielectronBtoJPSItoEleCDFfitFCN.cxx | 2 +- .../AliDielectronBtoJPSItoEleCDFfitFCN.h | 13 +- ...iDielectronBtoJPSItoEleCDFfitFCNfitter.cxx | 361 ++++++++++++++++++ ...AliDielectronBtoJPSItoEleCDFfitFCNfitter.h | 91 +++++ 6 files changed, 463 insertions(+), 6 deletions(-) create mode 100644 PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.cxx create mode 100644 PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.h diff --git a/PWGDQ/CMakelibPWGDQdielectron.pkg b/PWGDQ/CMakelibPWGDQdielectron.pkg index 6a6131eb3a8..eeb8c390e7a 100644 --- a/PWGDQ/CMakelibPWGDQdielectron.pkg +++ b/PWGDQ/CMakelibPWGDQdielectron.pkg @@ -59,6 +59,7 @@ set ( SRCS dielectron/AliDielectronEventCuts.cxx dielectron/AliDielectronHelper.cxx dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.cxx + dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.cxx dielectron/AliDielectronBtoJPSItoEleCDFfitHandler.cxx dielectron/AliDielectronBtoJPSItoEle.cxx dielectron/AliDielectronTRDpidCut.cxx diff --git a/PWGDQ/PWGDQdielectronLinkDef.h b/PWGDQ/PWGDQdielectronLinkDef.h index d78576dc5b1..63c5422acbc 100644 --- a/PWGDQ/PWGDQdielectronLinkDef.h +++ b/PWGDQ/PWGDQdielectronLinkDef.h @@ -39,6 +39,7 @@ #pragma link C++ class AliDielectronEventCuts+; #pragma link C++ class AliDielectronHelper+; #pragma link C++ class AliDielectronBtoJPSItoEleCDFfitFCN+; +#pragma link C++ class AliDielectronBtoJPSItoEleCDFfitFCNfitter+; #pragma link C++ class AliDielectronBtoJPSItoEleCDFfitHandler+; #pragma link C++ class AliDielectronBtoJPSItoEle+; #pragma link C++ class AliDielectronTRDpidCut+; diff --git a/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.cxx b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.cxx index b10bde5bcda..72ff24cbe89 100644 --- a/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.cxx +++ b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.cxx @@ -245,7 +245,7 @@ void AliDielectronBtoJPSItoEleCDFfitFCN::PrintStatus() printf("\n"); } //_________________________________________________________________________________________________ -void AliDielectronBtoJPSItoEleCDFfitFCN::SetResolutionConstants(Double_t* resolutionConst, Int_t type) +void AliDielectronBtoJPSItoEleCDFfitFCN::SetResolutionConstants(const Double_t* resolutionConst, Int_t type) { // // Resolution function is parametrized as the sum of two gaussian diff --git a/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.h b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.h index 9b6ca88b606..4054f68953c 100644 --- a/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.h +++ b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCN.h @@ -75,6 +75,8 @@ class AliDielectronBtoJPSItoEleCDFfitFCN : public TNamed { Bool_t GetCrystalBallParam() const { return fCrystalBallParam; } TH1F * GetCsiMcHisto() const { return fhCsiMC; } Double_t GetResWeight(Int_t iW) const { return fWeightType[iW]; } + + Double_t* GetParameters() { return fParameters;} // return pointer to likelihood functions TF1* GetCsiMC(Double_t xmin, Double_t xmax,Double_t normalization); @@ -116,7 +118,7 @@ class AliDielectronBtoJPSItoEleCDFfitFCN : public TNamed { void SetIntegralMassBkg(Double_t integral) { fintmMassBkg = integral; } void SetCsiMC(const TH1F* MCtemplate) {fhCsiMC = (TH1F*)MCtemplate->Clone("fhCsiMC");} - void SetResolutionConstants(Double_t* resolutionConst, Int_t type); + void SetResolutionConstants(const Double_t* resolutionConst, Int_t type); void SetMassWndHigh(Double_t limit) { fMassWndHigh = TDatabasePDG::Instance()->GetParticle(443)->Mass() + limit ;} void SetMassWndLow(Double_t limit) { fMassWndLow = TDatabasePDG::Instance()->GetParticle(443)->Mass() - limit ;} void SetCrystalBallFunction(Bool_t okCB) {fCrystalBallParam = okCB;} @@ -128,6 +130,11 @@ class AliDielectronBtoJPSItoEleCDFfitFCN : public TNamed { void PrintStatus(); + Double_t EvaluateCDFInvMassSigDistr(Double_t m) const ; + Double_t EvaluateCDFInvMassBkgDistr(Double_t m) const; + Double_t ResolutionFunc(Double_t x, Int_t type) const; + Double_t EvaluateCDFDecayTimeBkgDistr(Double_t x, Int_t type) const ; + private: Double_t fParameters[45]; /* par[0] = weightRes; par[1] = fPos; @@ -199,13 +206,10 @@ class AliDielectronBtoJPSItoEleCDFfitFCN : public TNamed { Double_t EvaluateCDFfuncSignalPart(Double_t x, Double_t m, Int_t type) const ; // Signal part Double_t EvaluateCDFDecayTimeSigDistr(Double_t x, Int_t type) const ; Double_t EvaluateCDFDecayTimeSigDistrFunc(const Double_t* x, const Double_t *par) const { return par[0]*EvaluateCDFDecayTimeSigDistr(x[0],(Int_t)par[1]);} - Double_t EvaluateCDFInvMassSigDistr(Double_t m) const ; Double_t EvaluateCDFInvMassSigDistrFunc(const Double_t* x, const Double_t *par) const {return par[0]*EvaluateCDFInvMassSigDistr(x[0])/fintmMassSig;} Double_t EvaluateCDFfuncBkgPart(Double_t x,Double_t m,Int_t type) const ; // Background part - Double_t EvaluateCDFDecayTimeBkgDistr(Double_t x, Int_t type) const ; Double_t EvaluateCDFDecayTimeBkgDistrFunc(const Double_t* x, const Double_t *par) const { return EvaluateCDFDecayTimeBkgDistr(x[0],(Int_t)par[1])*par[0];} Double_t EvaluateCDFDecayTimeBkgDistrFuncAllTypes(const Double_t* x, const Double_t *par) const {return (fWeightType[2]*EvaluateCDFDecayTimeBkgDistr(x[0],2)+fWeightType[1]*EvaluateCDFDecayTimeBkgDistr(x[0],1)+fWeightType[0]*EvaluateCDFDecayTimeBkgDistr(x[0],0))*par[0];} - Double_t EvaluateCDFInvMassBkgDistr(Double_t m) const; Double_t EvaluateCDFInvMassBkgDistrFunc(const Double_t* x, const Double_t *par) const {return par[0]*EvaluateCDFInvMassBkgDistr(x[0])/fintmMassBkg;} Double_t EvaluateCDFInvMassTotalDistr(const Double_t* x, const Double_t *par) const; @@ -222,7 +226,6 @@ class AliDielectronBtoJPSItoEleCDFfitFCN : public TNamed { Double_t FunBkgPos(Double_t x, Int_t type) const ; Double_t FunBkgNeg(Double_t x, Int_t type) const ; Double_t FunBkgSym(Double_t x, Int_t type) const ; - Double_t ResolutionFunc(Double_t x, Int_t type) const; Double_t ResolutionFuncf(const Double_t* x, const Double_t *par) const { return ResolutionFunc(x[0],(Int_t)par[1])*par[0];} Double_t ResolutionFuncAllTypes(const Double_t* x, const Double_t *par) const { return (fWeightType[2]*ResolutionFunc(x[0],2)+fWeightType[1]*ResolutionFunc(x[0],1)+fWeightType[0]*ResolutionFunc(x[0],0))*par[0]; } diff --git a/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.cxx b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.cxx new file mode 100644 index 00000000000..4079622b17a --- /dev/null +++ b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.cxx @@ -0,0 +1,361 @@ +/************************************************************************** + * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * + * * + * Author: The ALICE Off-line Project. * + * Contributors are mentioned in the code where appropriate. * + * * + * Permission to use, copy, modify and distribute this software and its * + * documentation strictly for non-commercial purposes is hereby granted * + * without fee, provided that the above copyright notice appears in all * + * copies and that both the copyright notice and this permission notice * + * appear in the supporting documentation. The authors make no claims * + * about the suitability of this software for any purpose. It is * + * provided "as is" without express or implied warranty. * + **************************************************************************/ +#include "AliDielectronBtoJPSItoEleCDFfitFCNfitter.h" +#include "TArrayD.h" +#include "TFormula.h" +#include "TF1.h" +#include "TF2.h" +#include "TH1F.h" +#include "TH2F.h" +#include "TMath.h" + +AliDielectronBtoJPSItoEleCDFfitFCNfitter::AliDielectronBtoJPSItoEleCDFfitFCNfitter(): + fInvMass(0x0), + fX(0x0), + fX2D(0x0), + fFCN(0x0), + fFitOpt("") +{ + // + // ctor + // + fFCN = new AliDielectronBtoJPSItoEleCDFfitFCN(); + fFCN->SetCrystalBallFunction(kTRUE); + for(Int_t i=0; iSetCrystalBallMmean(massPar[0]); //9 +fFCN->SetCrystalBallNexp(massPar[1]); //10 +fFCN->SetCrystalBallSigma(massPar[2]); //11 +fFCN->SetCrystalBallAlpha(massPar[3]); //12 +fFCN->SetCrystalBallNorm(massPar[4]); //13 + //for(Int_t i=0; iSetBkgInvMassNorm(massPar[0]);//14 +fFCN->SetBkgInvMassMean(massPar[1]);//15 +fFCN->SetBkgInvMassSlope(massPar[2]);//16 +fFCN->SetBkgInvMassConst(massPar[3]);//17 +} +//__________________________________________________________________________________________ +void AliDielectronBtoJPSItoEleCDFfitFCNfitter::GetInvMassParameters(TArrayD &massPar) +{ + // + // Getter of the inv mass total distribution parameters + // + massPar.Reset(); + massPar.Set(kInvMassTotal); + massPar.AddAt(fFCN->GetCrystalBallMmean(),0); //9 + massPar.AddAt(fFCN->GetCrystalBallNexp(),1); //10 + massPar.AddAt(fFCN->GetCrystalBallSigma(),2); //11 + massPar.AddAt(fFCN->GetCrystalBallAlpha(),3); //12 + massPar.AddAt(fFCN->GetCrystalBallNorm(),4); //13 + massPar.AddAt(fFCN->GetBkgInvMassNorm(),5);//14 + massPar.AddAt(fFCN->GetBkgInvMassMean(),6);//15 + massPar.AddAt(fFCN->GetBkgInvMassSlope(),7); //16 + massPar.AddAt(fFCN->GetBkgInvMassConst(),8); //17 +} +//__________________________________________________________________________________________ +void AliDielectronBtoJPSItoEleCDFfitFCNfitter::GetInvMassSignalParameters(TArrayD &massPar) +{ + // + // Getter of the Inv Mass signal distribution parameters + // + massPar.Reset(); + massPar.Set(kInvMassSignal); + massPar.AddAt(fFCN->GetCrystalBallMmean(),0); //9 + massPar.AddAt(fFCN->GetCrystalBallNexp(),1); //10 + massPar.AddAt(fFCN->GetCrystalBallSigma(),2); //11 + massPar.AddAt(fFCN->GetCrystalBallAlpha(),3); //12 + massPar.AddAt(fFCN->GetCrystalBallNorm(),4); //13 + +} +//__________________________________________________________________________________________ +void AliDielectronBtoJPSItoEleCDFfitFCNfitter::GetInvMassBkgParameters(TArrayD &massPar) +{ + // + // Getter of the Inv Mass background distribution parameters + // + massPar.Reset(); + massPar.Set(kInvMassBkg); + massPar.AddAt(fFCN->GetBkgInvMassNorm(),0); //14 + massPar.AddAt(fFCN->GetBkgInvMassMean(),1); //15 + massPar.AddAt(fFCN->GetCrystalBallSigma(),2); //11 + massPar.AddAt(fFCN->GetCrystalBallAlpha(),3); //12 +} + +//__________________________________________________________________________________________ +void AliDielectronBtoJPSItoEleCDFfitFCNfitter::SetPseudoProperBkgParameters(Double_t xBkgPar[7]) +{ + // + // Setter of the psudoproper background distribution parameters + // + fFCN->SetResWeight(xBkgPar[0]);//0 + fFCN->SetFPlus(xBkgPar[1]);//1 + fFCN->SetFMinus(xBkgPar[2]);//2 + fFCN->SetFSym(xBkgPar[3]);//3 + fFCN->SetLamPlus(xBkgPar[4]); //4 + fFCN->SetLamMinus(xBkgPar[5]); // 5 + fFCN->SetLamSym(xBkgPar[6]); // 6 + +} +//__________________________________________________________________________________________ +void AliDielectronBtoJPSItoEleCDFfitFCNfitter::GetPseudoProperBkgParameters(TArrayD &xBkgPar) +{ + // + // Getter of the psudoproper background distribution parameters + // + xBkgPar.Reset(); + xBkgPar.Set(kPseudoBkg); + xBkgPar.AddAt(fFCN->GetResWeight(),0); + xBkgPar.AddAt(fFCN->GetFPlus(),1); + xBkgPar.AddAt(fFCN->GetFMinus(),2); + xBkgPar.AddAt(fFCN->GetFSym(),3); + xBkgPar.AddAt(fFCN->GetLamPlus(),4); + xBkgPar.AddAt(fFCN->GetLamMinus(),5); + xBkgPar.AddAt(fFCN->GetLamSym(),6); +} +//__________________________________________________________________________________________ +TH1F* AliDielectronBtoJPSItoEleCDFfitFCNfitter::FitInvMassSignal(Double_t norm,Double_t mMin, Double_t mMax) +{ + // + // Fit on the invariant mass signal distribution ( Crystal ball params ) + // + if(!fInvMass){ + printf("no histogram...exiting\n"); + return 0x0; + } + + TArrayD pars; + GetInvMassSignalParameters(pars); + + TF1 * invMass = new TF1("invMassSignal",this,&AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFInvMassSignal,mMin,mMax,kInvMassSignal+1); + for(Int_t i=0; iFixParameter(i,pars.At(i)); + else invMass->SetParameter(i,pars.At(i)); + } + invMass->SetParameter(kInvMassSignal,norm); + fInvMass->Fit("invMassSignal",Form("R%s",fFitOpt.Data()),"",mMin,mMax); + return fInvMass; +} +//__________________________________________________________________________________________ +TH1F * AliDielectronBtoJPSItoEleCDFfitFCNfitter::FitInvMass(Double_t norm[2],Double_t mMin, Double_t mMax) +{ + // + // Fit on the invariant mass total distribution + // + if(!fInvMass){ + printf("no histogram...exiting\n"); + return 0x0; + } + + TArrayD pars; + GetInvMassParameters(pars); + + TF1 * invMassTot = new TF1("invMassTot",this,&AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFInvMassTotal,mMin,mMax,11); + + for(Int_t i=0; iFixParameter(i,pars.At(i)); + else invMassTot->SetParameter(i,pars.At(i)); + } + + if(!fParameterInvMassToFix[5]) invMassTot->SetParLimits(5,0,999999999); + + + invMassTot->SetParameter(9,norm[0]); + invMassTot->SetParLimits(9,0,999999999); + invMassTot->SetParameter(10,norm[1]); + invMassTot->SetParLimits(10,0,999999999); + + fInvMass->Fit("invMassTot",Form("R%s",fFitOpt.Data()),"",mMin,mMax); + + //printf("Inv Mass Params : "); + //for(Int_t i=0; i< 11; i++) printf("p%i %f ",i,invMassTot->GetParameter(i)); + //printf("\n"); + + return fInvMass; +} +//__________________________________________________________________________________________ +void AliDielectronBtoJPSItoEleCDFfitFCNfitter::GetPseudoProperParameters(TArrayD &xPar, Int_t type) +{ + // + // Getter of the psudoproper background distribution parameters per dielectron type (FF, FS, SS) + // + xPar.Reset(); + xPar.Set(kPseudo); + xPar.AddAt(fFCN->GetNormGaus1ResFunc(type),0); + xPar.AddAt(fFCN->GetNormGaus2ResFunc(type),3); + xPar.AddAt(fFCN->GetResMean1(type),1); + xPar.AddAt(fFCN->GetResSigma1(type),2); + xPar.AddAt(fFCN->GetResMean2(type),4); + xPar.AddAt(fFCN->GetResSigma2(type),5); + xPar.AddAt(fFCN->GetResAlfa(type),6); + xPar.AddAt(fFCN->GetResLambda(type),7); + xPar.AddAt(fFCN->GetResNormExp(type),8); +} +//__________________________________________________________________________________________ +TH1F * AliDielectronBtoJPSItoEleCDFfitFCNfitter::FitResolutionFunction(Double_t xMin, Double_t xMax, Int_t type, Double_t norm) +{ + // + // Fit on the resolution function distribution per dielectron type + // + if(!fX){ + printf("no Pseudoproper decayhistogram...exiting\n"); + return 0x0; + } + + TArrayD pars; + GetPseudoProperParameters(pars,type); + + TF1 * xPrompt = new TF1("xPrompt",this,&AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFResolutionFunction,xMin,xMax,11); + for(Int_t i=0; iFixParameter(i,pars.At(i)); + else xPrompt->SetParameter(i,pars.At(i)); + printf("%f ",pars.At(i)); + } + printf("\n"); + if(!fParameterXToFix[3]) xPrompt->SetParLimits(3,0,999999999); + xPrompt->FixParameter(9,type); + xPrompt->SetParameter(10,norm); + fX->Fit("xPrompt",Form("R%s",fFitOpt.Data()),"",xMin,xMax); + +// printf("Res Func type %i : ",type); +// for(Int_t i=0; i< 11; i++) printf("p%i %6.3f ",i,xPrompt->GetParameter(i)); +// printf("\n"); + return fX; +} + +//__________________________________________________________________________________________ +TH2F * AliDielectronBtoJPSItoEleCDFfitFCNfitter::FitBkgPsudoProper(Double_t xMin, Double_t xMax, Double_t norm) +{ + // + // Fit on the resolution function distribution of the background ( in 2 D, whose one D is the dielectron + // type) + // + + if(!fX2D){ + printf("no BKG Pseudoproper decay 2D histogram ...exiting\n"); + return 0x0; + } + + TArrayD bkgParam; + GetPseudoProperBkgParameters(bkgParam); + + TF2 *psProperBkgnd = new TF2("bkgPseudoProper",this, + &AliDielectronBtoJPSItoEleCDFfitFCNfitter::PsProperBackFitFunc,xMin,xMax,-0.5,2.5,8,"AliDielectronBtoJPSItoEleCDFfitFCNfitter","PsProperBackFitFunc"); + + for(Int_t i=0; i< kPseudoBkg ; i++) { + if(fParameterXbkgToFix[i]) psProperBkgnd->FixParameter(i,bkgParam.At(i)); + else psProperBkgnd->SetParameter(i,bkgParam.At(i)); + } + psProperBkgnd->SetParameter(kPseudoBkg,norm); + + fX2D->Fit("bkgPseudoProper",Form("R%s",fFitOpt.Data()),"LEGO2",xMin,xMax); + + return fX2D; +} + +//__________________________________________________________________________________________ +Double_t AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFInvMassSignal(const Double_t *x,const Double_t *par) +{ + // + // function + // + SetInvMassSignalParameters(par); + return par[5]*fFCN->EvaluateCDFInvMassSigDistr(x[0]); +} +//__________________________________________________________________________________________ +Double_t AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFInvMassBkg(const Double_t *x,const Double_t *par) +{ + // + // function + // + SetInvMassBkgParameters(par); + return fFCN->EvaluateCDFInvMassBkgDistr(x[0]); +} +//__________________________________________________________________________________________ +Double_t AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFInvMassTotal(const Double_t *x,const Double_t *par) +{ + // + // function (it doesn't use the function integral->pay attention to it) + // + SetInvMassParameters(par); + //return ((EvaluateCDFInvMassSigDistr(x[0])))*par[9] + (EvaluateCDFInvMassBkgDistr(x[0]))*par[10]; + return (((fFCN->EvaluateCDFInvMassSigDistr(x[0])))*par[9] + (1-par[9])*(fFCN->EvaluateCDFInvMassBkgDistr(x[0])))*par[10]; +} +//__________________________________________________________________________________________ +Double_t AliDielectronBtoJPSItoEleCDFfitFCNfitter::CDFResolutionFunction(const Double_t *x,const Double_t *par) +{ + // + // function + // +// Double_t resParam[kPseudo]; +// for(Int_t i=0; iSetResolutionConstants(par,(Int_t)par[9]); + return par[10]*fFCN->ResolutionFunc(x[0],(Int_t)(par[9])); +} +//__________________________________________________________________________________________ +Double_t AliDielectronBtoJPSItoEleCDFfitFCNfitter::PsProperBackFitFunc(const Double_t* x, const Double_t* par) +{ + // + // function + // + Int_t type = TMath::Nint(x[1]); + Double_t params[7]; + for(Int_t i=0; i<7; i++) params[i]=par[i]; + SetPseudoProperBkgParameters(params); + return fFCN->EvaluateCDFDecayTimeBkgDistr(x[0],type)*par[7]*fFCN->GetResWeight(type); +} diff --git a/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.h b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.h new file mode 100644 index 00000000000..27a5e2fa2b2 --- /dev/null +++ b/PWGDQ/dielectron/AliDielectronBtoJPSItoEleCDFfitFCNfitter.h @@ -0,0 +1,91 @@ +#ifndef ALIDIELECTRONBTOJPSITOELECDFFITFCNFITTER_H +#define ALIDIELECTRONBTOJPSITOELECDFFITFCNFITTER_H +/* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. * + * See cxx source for full Copyright notice */ + +//_________________________________________________________________________ +// Class AliDielectronBtoJPSItoEleCDFfitFCNfitter +// Origin: A. Mastroserio +// Interface class to fit invariant mass and pseudoproperdecay length separately +// Contact: Annalisa.Mastroserio@ba.infn.it +//_________________________________________________________________________ + + +#include "AliDielectronBtoJPSItoEleCDFfitFCN.h" +class TF1; +class TF2; +class TH1F; +class TH2F; +class TArrayD; + +class AliDielectronBtoJPSItoEleCDFfitFCNfitter { + + public: + AliDielectronBtoJPSItoEleCDFfitFCNfitter(); + virtual ~AliDielectronBtoJPSItoEleCDFfitFCNfitter(); + + + // INVARIANT MASS + enum {kInvMassSignal=5, kInvMassBkg=4, kInvMassTotal=9}; + + void SetInvMassParameters(const Double_t massPar[kInvMassTotal]); + void GetInvMassParameters(TArrayD &massPar); + void SetInvMassSignalParameters(const Double_t massPar[kInvMassSignal]); + void GetInvMassSignalParameters(TArrayD &massPar); + void SetInvMassBkgParameters(const Double_t massPar[kInvMassBkg]); + void GetInvMassBkgParameters(TArrayD &massPar); + + Double_t CDFInvMassSignal(const Double_t *x, const Double_t *par); + Double_t CDFInvMassBkg(const Double_t *x, const Double_t *par); + Double_t CDFInvMassTotal(const Double_t *x, const Double_t *par); + void SetInvMass(TH1F *mass) {fInvMass=mass;} + void SetParameterToFixInInvMass(Bool_t fixed[kInvMassTotal]) {for(Int_t i=0; iSetCrystalBallFunction(isCB);} + void PrintParamStatus() {fFCN->PrintStatus();} + AliDielectronBtoJPSItoEleCDFfitFCN * GetFCN() {return fFCN;} + + protected : + + TH1F *fInvMass; // 1D inv mass distribution + TH1F *fX; // 1D X distribution + TH2F *fX2D; // 2D X distribution + AliDielectronBtoJPSItoEleCDFfitFCN *fFCN; // fitter + + TString fFitOpt; // fit options + Bool_t fParameterInvMassToFix[kInvMassTotal]; // booleans to fix single parameters + Bool_t fParameterXToFix[kPseudo]; // booleans to fix single parameters + Bool_t fParameterXbkgToFix[kPseudoBkg]; // booleans to fix single parameters + + AliDielectronBtoJPSItoEleCDFfitFCNfitter(const AliDielectronBtoJPSItoEleCDFfitFCNfitter& source); + AliDielectronBtoJPSItoEleCDFfitFCNfitter& operator=(const AliDielectronBtoJPSItoEleCDFfitFCNfitter& source); + + ClassDef (AliDielectronBtoJPSItoEleCDFfitFCNfitter,1); +}; + +#endif -- 2.39.3