]>
Commit | Line | Data |
---|---|---|
3416bb60 | 1 | #include<stdio.h> |
2 | ||
3 | #include"AliBlastwaveFitSpectra2.h" | |
4 | ||
5 | #include"TMath.h" | |
6 | ||
7 | ClassImp(AliBlastwaveFitSpectra2); | |
8 | ||
9 | ||
10 | TF1 *AliBlastwaveFitSpectra2::fgFuncIntYield = NULL; | |
b4912369 | 11 | const char *AliBlastwaveFitSpectra2::fgParName[5] = {"T_{FO}","#beta","#gamma","mass","norm"}; |
12 | Float_t AliBlastwaveFitSpectra2::fgStartValues[3] = {0.1,0.4,1.1}; | |
13 | const Float_t AliBlastwaveFitSpectra2::fgStepValues[3] = {0.001,0.001,0.001}; | |
14 | const Float_t AliBlastwaveFitSpectra2::fgMinValues[3] = {0.0001,0.01,0.1}; | |
15 | const Float_t AliBlastwaveFitSpectra2::fgMaxValues[3] = {1.0,1.0,5}; | |
3416bb60 | 16 | |
17 | AliBlastwaveFitSpectra2::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 | //------------------------------------------------------------------------------ | |
28 | AliBlastwaveFitSpectra2::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 | //------------------------------------------------------------------------------ | |
39 | AliBlastwaveFitSpectra2::~AliBlastwaveFitSpectra2(){ | |
40 | } | |
41 | //------------------------------------------------------------------------------ | |
42 | Double_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 | //------------------------------------------------------------------------------ | |
65 | Int_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 | //------------------------------------------------------------------------------ | |
77 | Int_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 | //------------------------------------------------------------------------------ | |
104 | void AliBlastwaveFitSpectra2::SetMass(Double_t mass) { | |
105 | fMass=mass; | |
106 | if(fFunctionYield) fFunctionYield->SetParameter(3,fMass); | |
107 | } | |
108 | //------------------------------------------------------------------------------ | |
109 | void 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 | //------------------------------------------------------------------------------ | |
121 | Double_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 | 139 | Float_t AliBlastwaveFitSpectra2::GetMeanBeta(){ |
3416bb60 | 140 | return fgFuncIntYield->GetParameter(2); |
141 | } | |
142 | //------------------------------------------------------------------------------ | |
e931d3ab | 143 | Float_t AliBlastwaveFitSpectra2::GetMeanBeta(Double_t par[]){ |
3416bb60 | 144 | return par[1]; |
145 | } |