3 #include"AliBlastwaveFitSpectra.h"
7 ClassImp(AliBlastwaveFitSpectra);
10 TF1 *AliBlastwaveFitSpectra::fgFuncIntYield = NULL;
11 const char *AliBlastwaveFitSpectra::fgParName[5] = {"T_{FO}","mean #rho","#gamma","mass","norm"};
12 Float_t AliBlastwaveFitSpectra::fgStartValues[3] = {0.1,1.2,1.1};
13 const Float_t AliBlastwaveFitSpectra::fgStepValues[3] = {0.001,0.001,0.001};
14 const Float_t AliBlastwaveFitSpectra::fgMinValues[3] = {0.0001,0.01,0.5};
15 const Float_t AliBlastwaveFitSpectra::fgMaxValues[3] = {1.0,10.0,5};
17 AliBlastwaveFitSpectra::AliBlastwaveFitSpectra(const char *name,Double_t mass) :
18 AliBlastwaveFit(name,mass)
21 fgFuncIntYield = new TF1("fFuncInt2Yield",AliBlastwaveFitSpectra::FunctionIntYield,0,1,5);
22 fgFuncIntYield->SetNpx(100);
27 //------------------------------------------------------------------------------
28 AliBlastwaveFitSpectra::AliBlastwaveFitSpectra() :
29 AliBlastwaveFit("BlastwaveFitSpectra",0.0)
32 fgFuncIntYield = new TF1("fFuncInt2Yield",AliBlastwaveFitSpectra::FunctionIntYield,0,1,5);
33 fgFuncIntYield->SetNpx(100);
38 //------------------------------------------------------------------------------
39 AliBlastwaveFitSpectra::~AliBlastwaveFitSpectra(){
41 //------------------------------------------------------------------------------
42 Double_t AliBlastwaveFitSpectra::FunctionIntYield(Double_t x[],Double_t par[]){
50 Double_t maxrho = par[2]*0.5*(par[3]+2);
52 Double_t mt = TMath::Sqrt(par[0]*par[0]+par[4]*par[4]);
53 Double_t rho = maxrho*TMath::Power(x[0],par[3]);
54 Double_t alfat = (par[0]/par[1])*TMath::SinH(rho);
55 Double_t betat = (mt/par[1])*TMath::CosH(rho);
57 if(betat < 200) results = TMath::BesselI(0,alfat)*TMath::BesselK(1,betat) *x[0];
58 else results = 0.5*TMath::Exp(alfat-betat)/sqrt(alfat*betat) *x[0];
60 return results*par[0]*mt;
62 //------------------------------------------------------------------------------
63 Int_t AliBlastwaveFitSpectra::SetParameter(Int_t ipar,Double_t val){
64 Bool_t status = kTRUE;
66 if(ipar < 0 || ipar > 4) return status;
69 fFunctionYield->SetParameter(ipar,val);
74 //------------------------------------------------------------------------------
75 Int_t AliBlastwaveFitSpectra::SetNormalization(){
76 Bool_t status = kTRUE;
78 TH1 *h = (TH1 *) GetSpectrumObjCopy();
79 if(fFunctionYield && h){
80 fFunctionYield->SetParameter(4,1.0);
83 for (Int_t ibin = 1; ibin <= h->GetNbinsX(); ibin++) {
84 Double_t pt = h->GetBinCenter(ibin);
85 if(pt < GetMaxPt() && pt > GetMinPt() && TMath::Abs(h->GetBinContent(ibin)) > h->GetBinError(ibin)+0.0001){
86 Double_t width = h->GetBinWidth(ibin);
87 intH += h->GetBinContent(ibin)*width;
88 for(Double_t x = -width*0.45;x < width*0.5;x+=width*0.1)
89 intF += EvalYield(pt+x)*width*0.1;
94 if(intF > 0) norm = intH/intF;
95 fFunctionYield->SetParameter(4,norm);
101 //------------------------------------------------------------------------------
102 void AliBlastwaveFitSpectra::SetMass(Double_t mass) {
104 if(fFunctionYield) fFunctionYield->SetParameter(3,fMass);
106 //------------------------------------------------------------------------------
107 void AliBlastwaveFitSpectra::Initialize(){
108 char nameFuncYield[100];
109 snprintf(nameFuncYield,100,"%sFuncYield",GetName());
111 if(fFunctionYield) delete fFunctionYield;
112 fFunctionYield = new TF1(nameFuncYield,Pt,0,6,7);
113 fFunctionYield->SetParameter(3,fMass);
114 fFunctionYield->SetNpx(200);
116 for(Int_t i =0;i < 5;i++) fFunctionYield->SetParName(i,fgParName[i]);
118 //------------------------------------------------------------------------------
119 Double_t AliBlastwaveFitSpectra::Pt(Double_t x[],Double_t par[]){
125 fgFuncIntYield->SetParameter(0,x[0]);
126 fgFuncIntYield->SetParameter(1,par[0]);
127 fgFuncIntYield->SetParameter(2,par[1]);
128 fgFuncIntYield->SetParameter(3,par[2]);
129 fgFuncIntYield->SetParameter(4,par[3]);
132 Double_t res = par[4]*1E+5*fgFuncIntYield->Integral(0.,1.);
136 //------------------------------------------------------------------------------
137 Float_t AliBlastwaveFitSpectra::GetMeanBeta(){
138 TF1 fbeta("fbeta","TMath::TanH([0]*TMath::Power(x,[1]))*x",0,1);
141 Double_t maxrho = fgFuncIntYield->GetParameter(2)*0.5*(fgFuncIntYield->GetParameter(3)+2);
143 fbeta.SetParameter(0,maxrho);
144 fbeta.SetParameter(1,fgFuncIntYield->GetParameter(3));
146 return fbeta.Integral(0.,1.)*2;
148 //------------------------------------------------------------------------------
149 Float_t AliBlastwaveFitSpectra::GetMeanBeta(Double_t par[]){
154 TF1 fbeta("fbeta","TMath::TanH([0]*TMath::Power(x,[1]))*x",0,1);
157 Double_t maxrho = par[1]*0.5*(par[2]+2);
159 fbeta.SetParameter(0,maxrho);
160 fbeta.SetParameter(1,par[2]);
162 return fbeta.Integral(0.,1.)*2;