//_________________________________________________________________________________________________
AliBtoJPSItoEleCDFfitHandler::AliBtoJPSItoEleCDFfitHandler():
+fIsParamFixed(16),
+fPrintStatus(kFALSE),
fUp(0),
fX(0x0),
fM(0x0),
//_________________________________________________________________________________________________
AliBtoJPSItoEleCDFfitHandler::AliBtoJPSItoEleCDFfitHandler(Double_t* decaytime,
Double_t* invariantmass, Int_t ncand) :
+fIsParamFixed(16),
+fPrintStatus(kFALSE),
fUp(0),
fX(decaytime),
fM(invariantmass),
// constructor
//
AliInfo("\n+++\n+++ Minimization object AliBtoJPSItoEleCDFfitHandler created\n+++\n");
- AliInfo("\n+++\n+++ Creating AliBtoJPSItoEleCDFfitFCN object\n+++\n");
fLikely = new AliBtoJPSItoEleCDFfitFCN();
- fLikely->SetCrystalBallParam(kFALSE); //Landau selected; otherwise Crystal Ball is selected
- SetErrorDef(1.);
+ AliInfo("\n+++\n+++ CDF fit function object AliBtoJPSItoEleCDFfitFCN created\n+++\n");
+ AliInfo("Parameter 0 ----> fRadius");
+ AliInfo("Parameter 1 ----> fTheta");
+ AliInfo("Parameter 2 ----> fPhi");
+ AliInfo("Parameter 3 ----> fOneOvLamPlus");
+ AliInfo("Parameter 4 ----> fOneOvLamMinus");
+ AliInfo("Parameter 5 ----> fOneOvLamSym");
+ AliInfo("Parameter 6 ----> fMSlope");
+ AliInfo("Parameter 7 ----> fB");
+ AliInfo("Parameter 8 ----> fFsig");
+ AliInfo("Parameter 9 ----> fMmean");
+ AliInfo("Parameter 10 ----> fNexp");
+ AliInfo("Parameter 11 ----> fSigma");
+ AliInfo("Parameter 12 ----> fAlpha");
+ AliInfo("Parameter 13 ----> fNorm");
+ AliInfo("Parameter 14 ----> fSigmaResol");
+ AliInfo("Parameter 15 ----> fNResol");
AliInfo(Form("\n+++\n+++ Number of candidates ---> %d\n+++\n ", ncand));
}
//___________________________________________________________________________
// Assignment operator
//
if (this!=&c) {
- fUp = c.fUp;
- fX = c.fX;
- fM = c.fM;
- fLikely = c.fLikely;
- fNcand = c.fNcand;
+ fIsParamFixed = c.fIsParamFixed;
+ fPrintStatus = c.fPrintStatus;
+ fUp = c.fUp;
+ fX = c.fX;
+ fM = c.fM;
+ fLikely = c.fLikely;
+ fNcand = c.fNcand;
}
return *this;
}
-//___________________________________________________________________________
+//_______________________________________________________________________________________
AliBtoJPSItoEleCDFfitHandler::AliBtoJPSItoEleCDFfitHandler(const AliBtoJPSItoEleCDFfitHandler& c) :
TNamed(c),
+fIsParamFixed(c.fIsParamFixed),
+fPrintStatus(c.fPrintStatus),
fUp(c.fUp),
fX(c.fX),
fM(c.fM),
// Copy Constructor
//
}
-//________________________________________________________________________
+//_______________________________________________________________________________________
AliBtoJPSItoEleCDFfitHandler::~AliBtoJPSItoEleCDFfitHandler()
{
//
//
delete fLikely;
}
-//_________________________________________________________________________________________________
+//_______________________________________________________________________________________
Int_t AliBtoJPSItoEleCDFfitHandler::DoMinimization()
{
//
// performs the minimization
//
- static TVirtualFitter *fitter = TVirtualFitter::Fitter(this,13);
+ static TVirtualFitter *fitter = TVirtualFitter::Fitter(this,16);
fitter->SetFCN(CDFFunction);
- Double_t startingParamValues[13] =
- /* startfPlus
- startfMinus
- startfSym
- startfOneOvLamPlus
- startfOneOvLamMinus
- startfOneOvLamSym
- startfMSlope
- startfB
- startfFsig
- startfMmean
- startfNexp
- startfSigma
- startfAlpha */
- {5.00e-01,
- TMath::Pi()/4.,
- TMath::Pi()/4.,
- 2.0964360e-03,
- 4.8309180e-03,
- 1.582530e-04,
- -1.5720e-02,
- 0.1800e+00,
- 0.7000e+00,
- 3.0910e+00,
- 1.0500e+00,
- 1.4250e-02,
- 6.758e-01};
-
- fitter->SetParameter(0,"fRadius",startingParamValues[0], 0.01, 0., 1.);
- fitter->SetParameter(1,"fTheta",startingParamValues[1], 0.001, 0., TMath::Pi()/2);
- fitter->SetParameter(2,"fPhi",startingParamValues[2], 0.001, 0., TMath::Pi()/2);
- fitter->SetParameter(3,"fOneOvLamPlus",startingParamValues[3], 0.0001, 0., 5.e-01);
- fitter->SetParameter(4,"fOneOvLamMinus",startingParamValues[4], 0.0001, 0., 5.e-01);
- fitter->SetParameter(5,"fOneOvLamSym",startingParamValues[5], 0.00001, 0., 5.e-01);
- fitter->SetParameter(6,"fMSlope",startingParamValues[6], 0.001, -1.e-00, 1.e+00);
- fitter->SetParameter(7,"fB",startingParamValues[7], 0.1, 0., 1.);
- fitter->SetParameter(8,"fFsig",startingParamValues[8], 0.1, 0., 1.);
- fitter->SetParameter(9,"fMmean",startingParamValues[9], 0.1, 0., 1.e+02);
- fitter->SetParameter(10,"fNexp",startingParamValues[10], 0.1, 0., 1.e+02);
- fitter->SetParameter(11,"fSigma",startingParamValues[11], 0.001, 0., 1.e+02);
- fitter->SetParameter(12,"fAlpha",startingParamValues[12], 0.01, 0., 1.e+02);
- fitter->FixParameter(9);
-
- Double_t arglist[2]={10000,0.5};
+
+ fitter->SetParameter(0,"fRadius",fParamStartValues[0], 1.e-06, 0., 1.);
+ fitter->SetParameter(1,"fTheta",fParamStartValues[1], 1.e-06, 0.,2*TMath::Pi());
+ fitter->SetParameter(2,"fPhi",fParamStartValues[2], 1.e-06, 0.,2*TMath::Pi());
+// fitter->SetParameter(3,"fOneOvLamPlus",fParamStartValues[3], 1.e-10, 0., 5.e+01);
+// fitter->SetParameter(4,"fOneOvLamMinus",fParamStartValues[4], 1.e-10, 0., 5.e+01);
+// fitter->SetParameter(5,"fOneOvLamSym",fParamStartValues[5], 1.e-10, 0., 5.e+01);
+ fitter->SetParameter(3,"fOneOvLamPlus",fParamStartValues[3], 1.e-10, 0.0000001, 5.e+01);
+ fitter->SetParameter(4,"fOneOvLamMinus",fParamStartValues[4], 1.e-10, 0.00000001, 5.e+01);
+ fitter->SetParameter(5,"fOneOvLamSym",fParamStartValues[5], 1.e-10, 0.00000001, 5.e+01);
+ fitter->SetParameter(6,"fMSlope",fParamStartValues[6], 1.e-04, -2.5, 2.5);
+ fitter->SetParameter(7,"fB",fParamStartValues[7], 1.e-08, 0., 1.);
+ fitter->SetParameter(8,"fFsig",fParamStartValues[8], 1.e-08, 0., 1.);
+ fitter->SetParameter(9,"fMmean",fParamStartValues[9], 1.e-08, 0., 1.e+04);
+ fitter->SetParameter(10,"fNexp",fParamStartValues[10], 1.e-08, 0., 1.e+02);
+ fitter->SetParameter(11,"fSigma",fParamStartValues[11], 1.e-08, 0., 1.e+04);
+ fitter->SetParameter(12,"fAlpha",fParamStartValues[12], 1.e-08, 0., 1.e+04);
+ fitter->SetParameter(13,"fNorm",fParamStartValues[13], 1.e-08, 0., 1.e+01);
+ fitter->SetParameter(14,"fSigmaResol",fParamStartValues[14], 1.e-08, 0., 1.e+04);
+ fitter->SetParameter(15,"fNResol",fParamStartValues[15], 1.e-08, 0., 1.e+05);
+
+ for(UInt_t indexparam = 0; indexparam < 16; indexparam++){
+ if(IsParamFixed(indexparam))fitter->FixParameter((Int_t)indexparam);
+ }
+
+ Double_t arglist[2]={10000,1.0};
Int_t iret=fitter->ExecuteCommand("MIGRAD", arglist ,2);
fitter->PrintResults(4,0);
fLikely->SetAllParameters(par);
fLikely->ConvertFromSpherical();
fLikely->ComputeIntegral();
- //printf("\n+++\n+++\n+++\n");
- //fLikely->PrintStatus();
+ if(fPrintStatus)fLikely->PrintStatus();
TStopwatch t;
t.Start();
return;
}
+//_______________________________________________________________________________________
+void AliBtoJPSItoEleCDFfitHandler::SetParamStartValues(Double_t inputparamvalues[16])
+{
+ for(Int_t index=0; index < 16; index++) fParamStartValues[index] = inputparamvalues[index];
+}
+//_______________________________________________________________________________________
+void AliBtoJPSItoEleCDFfitHandler::SetResolutionConstants()
+{
+ //
+ // Sets constants for the resolution function
+ //
+ fLikely->SetResolutionConstants();
+
+}
+//_______________________________________________________________________________________
+void AliBtoJPSItoEleCDFfitHandler::SetCrystalBallFunction(Bool_t okCB)
+{
+ //
+ // Sets the CB as the parametrization for the signal invariant mass spectrum
+ // (otherwise Landau is chosen)
+ //
+ fLikely->SetCrystalBallFunction(okCB);
+}
+//_______________________________________________________________________________________
+void AliBtoJPSItoEleCDFfitHandler::SetMassWndHigh(Double_t limit)
+{
+ //
+ // Sets upper limit for the invariant mass window (under J/PSI mass peak)
+ //
+ fLikely->SetMassWndHigh(limit);
+}
+//_______________________________________________________________________________________
+void AliBtoJPSItoEleCDFfitHandler::SetMassWndLow(Double_t limit)
+{
+ //
+ // Sets lower limit for the invariant mass window (under J/PSI mass peak)
+ //
+ fLikely->SetMassWndLow(limit);
+}
+