]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/FLOW/blastwave/AliBlastwaveFitSpectra2.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGCF / FLOW / blastwave / AliBlastwaveFitSpectra2.cxx
CommitLineData
3416bb60 1#include<stdio.h>
2
3#include"AliBlastwaveFitSpectra2.h"
4
5#include"TMath.h"
6
7ClassImp(AliBlastwaveFitSpectra2);
8
9
10TF1 *AliBlastwaveFitSpectra2::fgFuncIntYield = NULL;
b4912369 11const char *AliBlastwaveFitSpectra2::fgParName[5] = {"T_{FO}","#beta","#gamma","mass","norm"};
12Float_t AliBlastwaveFitSpectra2::fgStartValues[3] = {0.1,0.4,1.1};
13const Float_t AliBlastwaveFitSpectra2::fgStepValues[3] = {0.001,0.001,0.001};
14const Float_t AliBlastwaveFitSpectra2::fgMinValues[3] = {0.0001,0.01,0.1};
15const Float_t AliBlastwaveFitSpectra2::fgMaxValues[3] = {1.0,1.0,5};
3416bb60 16
17AliBlastwaveFitSpectra2::AliBlastwaveFitSpectra2(const char *name,Double_t mass) :
18 AliBlastwaveFit(name,mass)
19{
20 if(!fgFuncIntYield){
21 fgFuncIntYield = new TF1("fFuncInt2Yield",AliBlastwaveFitSpectra2::FunctionIntYield,0,1,5);
22 fgFuncIntYield->SetNpx(100);
23 }
24
25 Initialize();
26}
27//------------------------------------------------------------------------------
28AliBlastwaveFitSpectra2::AliBlastwaveFitSpectra2() :
29 AliBlastwaveFit("BlastwaveFitSpectra2",0.0)
30{
31 if(!fgFuncIntYield){
32 fgFuncIntYield = new TF1("fFuncInt2Yield",AliBlastwaveFitSpectra2::FunctionIntYield,0,1,5);
33 fgFuncIntYield->SetNpx(100);
34 }
35
36 Initialize();
37}
38//------------------------------------------------------------------------------
39AliBlastwaveFitSpectra2::~AliBlastwaveFitSpectra2(){
40}
41//------------------------------------------------------------------------------
42Double_t AliBlastwaveFitSpectra2::FunctionIntYield(Double_t x[],Double_t par[]){
43 // x[0] = r/R
44 // par[0] = pt
45 // par[1] = T
46 // par[2] = beta_av
47 // par[3] = R_power
48 // par[4] = mass
49
50 Double_t maxrho = par[2]*0.5*(par[3]+2);
51
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 if(rho > 0.9999999999999999) rho = 0.9999999999999999;
55 rho = TMath::ATanH(rho);
56 Double_t alfat = (par[0]/par[1])*TMath::SinH(rho);
57 Double_t betat = (mt/par[1])*TMath::CosH(rho);
58 Double_t results;
59 if(betat < 200) results = TMath::BesselI(0,alfat)*TMath::BesselK(1,betat) *x[0];
60 else results = 0.5*TMath::Exp(alfat-betat)/sqrt(alfat*betat) *x[0];
61
62 return results*par[0]*mt;
63}
64//------------------------------------------------------------------------------
65Int_t AliBlastwaveFitSpectra2::SetParameter(Int_t ipar,Double_t val){
66 Bool_t status = kTRUE;
67
68 if(ipar < 0 || ipar > 4) return status;
69
70 if(fFunctionYield){
71 fFunctionYield->SetParameter(ipar,val);
72 status = kFALSE;
73 }
74 return status;
75}
76//------------------------------------------------------------------------------
77Int_t AliBlastwaveFitSpectra2::SetNormalization(){
78 Bool_t status = kTRUE;
79
80 TH1 *h = (TH1 *) GetSpectrumObjCopy();
81 if(fFunctionYield && h){
82 fFunctionYield->SetParameter(4,1.0);
83 Double_t intH=0;
84 Double_t intF=0;
85 for (Int_t ibin = 1; ibin <= h->GetNbinsX(); ibin++) {
86 Double_t pt = h->GetBinCenter(ibin);
87 if(pt < GetMaxPt() && pt > GetMinPt() && TMath::Abs(h->GetBinContent(ibin)) > h->GetBinError(ibin)+0.0001){
88 Double_t width = h->GetBinWidth(ibin);
89 intH += h->GetBinContent(ibin)*width;
90 for(Double_t x = -width*0.45;x < width*0.5;x+=width*0.1)
91 intF += EvalYield(pt+x)*width*0.1;
92 }
93 }
94
95 Double_t norm = 1;
96 if(intF > 0) norm = intH/intF;
97 fFunctionYield->SetParameter(4,norm);
98 status = kFALSE;
99 }
100
101 return status;
102}
103//------------------------------------------------------------------------------
104void AliBlastwaveFitSpectra2::SetMass(Double_t mass) {
105 fMass=mass;
106 if(fFunctionYield) fFunctionYield->SetParameter(3,fMass);
107}
108//------------------------------------------------------------------------------
109void AliBlastwaveFitSpectra2::Initialize(){
110 char nameFuncYield[100];
111 snprintf(nameFuncYield,100,"%sFuncYield",GetName());
112
113 if(fFunctionYield) delete fFunctionYield;
114 fFunctionYield = new TF1(nameFuncYield,Pt,0,6,7);
115 fFunctionYield->SetParameter(3,fMass);
116 fFunctionYield->SetNpx(200);
117
118 for(Int_t i =0;i < 5;i++) fFunctionYield->SetParName(i,fgParName[i]);
119}
120//------------------------------------------------------------------------------
121Double_t AliBlastwaveFitSpectra2::Pt(Double_t x[],Double_t par[]){
122 // par[0] = T_fo
123 // par[1] = beta_av
124 // par[2] = R_power
125 // par[3] = mass
126
127 fgFuncIntYield->SetParameter(0,x[0]);
128 fgFuncIntYield->SetParameter(1,par[0]);
129 fgFuncIntYield->SetParameter(2,par[1]);
130 fgFuncIntYield->SetParameter(3,par[2]);
131 fgFuncIntYield->SetParameter(4,par[3]);
132
133
134 Double_t res = par[4]*1E+5*fgFuncIntYield->Integral(0.,1.);
135
136 return res;
137}
138//------------------------------------------------------------------------------
e931d3ab 139Float_t AliBlastwaveFitSpectra2::GetMeanBeta(){
3416bb60 140 return fgFuncIntYield->GetParameter(2);
141}
142//------------------------------------------------------------------------------
e931d3ab 143Float_t AliBlastwaveFitSpectra2::GetMeanBeta(Double_t par[]){
3416bb60 144 return par[1];
145}