]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/extra/Plot_XiStarResults.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / extra / Plot_XiStarResults.C
CommitLineData
6bb658a2 1//gROOT->Reset();
2#include <math.h>
3#include <time.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <Riostream.h>
7#include "RooFit.h"
8#include "RooVoigtian.h"
9#include "RooAbsReal.h"
10#include "RooRealVar.h"
11#include "RooComplex.h"
12#include "RooMath.h"
13
14#include "TVector2.h"
15#include "TFile.h"
16#include "TString.h"
17#include "TF1.h"
18#include "TH1.h"
19#include "TH2.h"
20#include "TH3.h"
21#include "TProfile.h"
22#include "TProfile2D.h"
23#include "TMath.h"
24#include "TText.h"
25#include "TRandom3.h"
26#include "TArray.h"
27#include "TLegend.h"
28#include "TStyle.h"
29#include "TMinuit.h"
30
31#include "TCanvas.h"
32#include "TLatex.h"
33#include "TImage.h"
34#include "TGaxis.h"
35#include "TGraphErrors.h"
36#include "TPaveStats.h"
37
38using namespace std;
39
40
41double myLevyPtFunc(Double_t *x, Double_t *par);
42double myMtExpFunc(Double_t *x, Double_t *par);
43double myPtExpFunc(Double_t *x, Double_t *par);
44double myBoltzFunc(Double_t *x, Double_t *par);
45double myPowerLawPtFunc(Double_t *x, Double_t *par);
46double myPowerLawFunc(Double_t *x, Double_t *par);
47double myBoltsBWFunc(Double_t *x, Double_t *par);
48double IntegrandBG(const double *x, const double *p);
49
50void Plot_XiStarResults(){
51
52 TGaxis::SetMaxDigits(3);
53 gStyle->SetOptStat(0);
54 gStyle->SetOptFit(01111);
55
56
57 TFile *filesCutVar[13];
58 TH1D *Spectra_CutVar[13];
59 TF1 *LevyFits_CutVar[13];
60 TH1D *Yields_CutVar[13];
61 TH1D *Eff_CutVar[13];
62 for(int i=0; i<13; i++){
63 TString *name=new TString("CutVariation_");
64 *name += i;
65 name->Append(".root");
66 filesCutVar[i]=new TFile(name->Data());
67 Spectra_CutVar[i] = (TH1D*)filesCutVar[i]->Get("h_Spectrum");
68 Spectra_CutVar[i]->SetDirectory(0);
69 LevyFits_CutVar[i] = (TF1*)filesCutVar[i]->Get("myLevy");
70 Yields_CutVar[i] = (TH1D*)filesCutVar[i]->Get("RawYields");
71 Eff_CutVar[i] = (TH1D*)filesCutVar[i]->Get("Efficiency");
72 }
73 //
74 TFile *filesFitVar[4];
75 TH1D *Spectra_FitVar[4];
76 TF1 *LevyFits_FitVar[4];
77 TH1D *Yields_FitVar[4];
78 for(int i=0; i<4; i++){
79 TString *name=new TString("FitVariation_");
80 *name += i+1;
81 name->Append(".root");
82 filesFitVar[i]=new TFile(name->Data());
83 Spectra_FitVar[i] = (TH1D*)filesFitVar[i]->Get("h_Spectrum");
84 Spectra_FitVar[i]->SetDirectory(0);
85 LevyFits_FitVar[i] = (TF1*)filesFitVar[i]->Get("myLevy");
86 Yields_FitVar[i] = (TH1D*)filesFitVar[i]->Get("RawYields");
87 }
88
89 double FVavg=0;
90 for(int bin=2; bin<=9; bin++){
91 // FV 1 has largest spectrum point variation
92 FVavg += fabs(Spectra_FitVar[0]->GetBinContent(bin)-Spectra_FitVar[1]->GetBinContent(bin))/Spectra_FitVar[0]->GetBinContent(bin);
93 }
94 cout<<"Average point-by-point spectrum variation due to fitting: "<<FVavg/8<<endl;
95
96 double TrackVavg=0;
97 for(int bin=2; bin<=9; bin++){
98 // CutVar 5 has largest spectrum point variation in the "tracking systematic" category
99 TrackVavg += fabs(Spectra_CutVar[0]->GetBinContent(bin)-Spectra_CutVar[5]->GetBinContent(bin))/Spectra_CutVar[0]->GetBinContent(bin);
100 }
101 cout<<"Average point-by-point spectrum variation due to Tracking: "<<TrackVavg/8<<endl;
102
103 double TopologVavg=0;
104 for(int bin=2; bin<=9; bin++){
105 // CutVar 8 has largest spectrum point variation in the "topological systematic" category
106 TopologVavg += fabs(Spectra_CutVar[0]->GetBinContent(bin)-Spectra_CutVar[8]->GetBinContent(bin))/Spectra_CutVar[0]->GetBinContent(bin);
107 }
108 cout<<"Average point-by-point spectrum variation due to Topological Cuts: "<<TopologVavg/8<<endl;
109
110 ////////////////////////////////////
111 TH1D *FinalSpectrum = (TH1D*)Spectra_CutVar[0]->Clone();
112 FinalSpectrum->SetMarkerSize(1.);
113 double StatError[8]={0};
114 for(int ptbin=1; ptbin<=8; ptbin++) StatError[ptbin-1] = FinalSpectrum->GetBinError(ptbin+1);// add 1 since first bin is a dummy
115
116
117 TH1D *PureSysFromCutVar[12];
118 double MeanSysCutVar[12]={0};
119 double sigmaSysCutVar[12]={0};
120 for(int i=0; i<12; i++) {
121 TString *name=new TString("PureSysFromCutVar");
122 *name += i+1;
123 PureSysFromCutVar[i] = new TH1D(name->Data(),"",8,0.5,8.5);
124 PureSysFromCutVar[i]->GetXaxis()->SetTitle("pt bin");
125 PureSysFromCutVar[i]->GetYaxis()->SetTitle("|y_{s}-y_{v}|/y_{s}");
126 }
127
128 //////////////////////////////////////
129 // Sys error assignment for pt bins to be used for mean value fits
130
131 int CutVarLow=1, CutVarHigh=13;
132 for(int i=CutVarLow; i<CutVarHigh; i++){// 1 to 13
133 for(int ptbin=2; ptbin<=9; ptbin++){
134 double SysVar = fabs(FinalSpectrum->GetBinContent(ptbin) - Spectra_CutVar[i]->GetBinContent(ptbin))/FinalSpectrum->GetBinContent(ptbin);
135 double sigma = sqrt(fabs(pow(FinalSpectrum->GetBinError(ptbin),2) - pow(Spectra_CutVar[i]->GetBinError(ptbin),2)));// stat part
136 PureSysFromCutVar[i-1]->SetBinContent(ptbin-1, SysVar);
137 PureSysFromCutVar[i-1]->SetBinError(ptbin-1, sigma/FinalSpectrum->GetBinContent(ptbin));
138 }
139 PureSysFromCutVar[i-1]->Fit("pol0","IMEQ","",0,9);
140 MeanSysCutVar[i-1] = pol0->GetParameter(0);
141 sigmaSysCutVar[i-1] = pol0->GetParError(0);
142 cout<<"Cut Var "<<i<<" Mean Sys = "<<MeanSysCutVar[i-1]<<" += "<<pol0->GetParError(0)<<endl;
143 //cout<<"Chi2/NDF = "<<pol0->GetChisquare()/pol0->GetNDF()<<endl;
144 //TPaveStats *sb2 = (TPaveStats*)(PureSysFromCutVar[i-1]->GetListOfFunctions()->FindObject("stats"));
145 //sb2->SetX1NDC(.2);
146 }
147
148
149 double SysError[9]={0};
150 // Cut Variations
151 //int CutVarN=12;
152 for(int i=CutVarLow; i<CutVarHigh; i++){// 1 to 13
153 for(int ptbin=1; ptbin<=9; ptbin++){
154 if(MeanSysCutVar[i-1] > 0 && MeanSysCutVar[i-1]>sigmaSysCutVar[i-1]) {
155 SysError[ptbin-1] += pow(MeanSysCutVar[i-1]*FinalSpectrum->GetBinContent(ptbin),2) - pow(sigmaSysCutVar[i-1]*FinalSpectrum->GetBinContent(ptbin),2);
156 }
157 }
158 }
159 // Fit Variations
160 for(int i=2; i<3; i++){// now only use i=2 (max deviation). was 0 to 4
161 for(int ptbin=1; ptbin<=9; ptbin++){
162 SysError[ptbin-1] += pow(FinalSpectrum->GetBinContent(ptbin) - Spectra_FitVar[i]->GetBinContent(ptbin),2);
163 }
164 }
165
166 // Add Stat errors and set Final Error
167 for(int ptbin=1; ptbin<=9; ptbin++){
168 double TotError = pow(FinalSpectrum->GetBinError(ptbin),2);// Stat
169 TotError += SysError[ptbin-1];// Add on Sys
170 FinalSpectrum->SetBinError(ptbin, sqrt(TotError));
171 cout<<"Spectrum ptbin:"<<ptbin-1<<" "<<FinalSpectrum->GetBinContent(ptbin)<<" +- "<<FinalSpectrum->GetBinError(ptbin)<<endl;
172 }
173
174 for(int ptbin=1; ptbin<=9; ptbin++) SysError[ptbin-1] = sqrt(SysError[ptbin-1]);
175
176 // print efficiencies
177 for(int ptbin=1; ptbin<=8; ptbin++){
178 cout<<"Efficiency ptbin:"<<ptbin<<" "<<Eff_CutVar[0]->GetBinContent(ptbin)<<" +- "<<Eff_CutVar[0]->GetBinError(ptbin)<<endl;
179 }
180
181 TCanvas *can = new TCanvas("can","can",13,34,700,500);
182 can->Range(-1.25,-0.2625,11.25,2.3625);
183 can->SetFillColor(10);
184 can->SetBorderMode(0);
185 can->SetBorderSize(2);
186 //can->SetGridx();
187 //can->SetGridy();
188 can->SetFrameFillColor(0);
189 can->SetFrameBorderMode(0);
190 can->SetFrameBorderMode(0);
191
192 TLegend *legend = new TLegend(.1,.7,.35,.9,NULL,"brNDC");
193 legend->SetBorderSize(1);
194 legend->SetTextSize(.04);// small .03; large .036
195 //legend->SetLineColor(0);
196 legend->SetFillColor(0);
197 TLegend *legend2 = new TLegend(.35,.62,.9,.72,NULL,"brNDC");
198 legend2->SetBorderSize(1);
199 legend2->SetTextSize(.04);// small .03; large .036
200 //legend2->SetLineColor(0);
201 legend2->SetFillColor(0);
202
203
204 double minFitpoint = 0.8; double maxFitpoint = 5.6;
205
206
207
208 TF1 *myLevy=new TF1("myLevy",myLevyPtFunc,0,8.5,3);
209 myLevy->SetParName(0,"dN/dy");
210 myLevy->SetParName(1,"C");
211 myLevy->SetParName(2,"n");
212 myLevy->SetParameter(0,.008);
213 myLevy->SetParameter(1,.3);
214 myLevy->SetParameter(2,15);
215 myLevy->SetParLimits(0,.001,.2);
216 myLevy->SetParLimits(1,.1,1);
217 myLevy->SetParLimits(2,1,500);
218 myLevy->SetLineColor(1);
219 TF1 *myPtExp = new TF1("myPtExp",myPtExpFunc,0,8.5,2);
220 myPtExp->SetParName(0,"dN/dy");
221 myPtExp->SetParName(1,"C");
222 myPtExp->SetParameter(0,.003);
223 myPtExp->SetParameter(1,.3);
224 myPtExp->SetParLimits(0,0.0001,0.1);
225 myPtExp->SetParLimits(1,.1,1);
226 myPtExp->SetLineColor(2);
227 TF1 *myMtExp = new TF1("myMtExp",myMtExpFunc,0,8.5,2);
228 myMtExp->SetParName(0,"dN/dy");
229 myMtExp->SetParName(1,"C");
230 myMtExp->SetParameter(0,.003);
231 myMtExp->SetParameter(1,.3);
232 myMtExp->SetParLimits(0,0.0001,0.1);
233 myMtExp->SetParLimits(1,.1,1);
234 myMtExp->SetLineColor(4);
235 TF1 *myBoltz = new TF1("myBoltz",myBoltzFunc,0,8.5,2);
236 myBoltz->SetParName(0,"dN/dy");
237 myBoltz->SetParName(1,"C");
238 myBoltz->SetParameter(0,.003);
239 myBoltz->SetParameter(1,.3);
240 myBoltz->SetParLimits(0,0.0001,0.1);
241 myBoltz->SetParLimits(1,.1,1);
242 myBoltz->SetLineColor(6);
243 TF1 *myPowerLawPt=new TF1("myPowerLawPt",myPowerLawPtFunc,0,8.5,3);
244 myPowerLawPt->SetParName(0,"dN/dy");
245 myPowerLawPt->SetParName(1,"pt0");
246 myPowerLawPt->SetParName(2,"n");
247 myPowerLawPt->SetParameter(0,.008);
248 myPowerLawPt->SetParameter(1,50);
249 myPowerLawPt->SetParameter(2,50);
250 myPowerLawPt->SetParLimits(0,.001,.01);
251 myPowerLawPt->SetParLimits(1,1,500);
252 myPowerLawPt->SetParLimits(2,1,500);
253 myPowerLawPt->SetLineColor(7);
254 TF1 *myPowerLaw=new TF1("myPowerLaw",myPowerLawFunc,0,8.5,3);
255 myPowerLaw->SetParName(0,"dN/dy");
256 myPowerLaw->SetParName(1,"pt0");
257 myPowerLaw->SetParName(2,"n");
258 myPowerLaw->SetParameter(0,.008);
259 myPowerLaw->SetParameter(1,50);
260 myPowerLaw->SetParameter(2,50);
261 myPowerLaw->SetParLimits(0,.001,.01);
262 myPowerLaw->SetParLimits(1,1,500);
263 myPowerLaw->SetParLimits(2,1,500);
264 myPowerLaw->SetLineColor(8);
265 TF1 *myBGBlastWave=new TF1("myBGBlastWave",myBoltsBWFunc,0,8.5,5);
266 myBGBlastWave->SetParName(0,"mass");
267 myBGBlastWave->SetParName(1,"beta");
268 myBGBlastWave->SetParName(2,"C");
269 myBGBlastWave->SetParName(3,"n");
270 myBGBlastWave->SetParName(4,"Norm");
271 myBGBlastWave->FixParameter(0,1.5318);
272 myBGBlastWave->SetParameter(1,.3);
273 myBGBlastWave->SetParameter(2,.3);
274 myBGBlastWave->SetParameter(3,5);
275 myBGBlastWave->SetParameter(4,.3);
276 myBGBlastWave->SetParLimits(1,.001,.9);
277 myBGBlastWave->SetParLimits(2,.1,200);
278 myBGBlastWave->SetParLimits(3,.1,200);
279 myBGBlastWave->SetLineColor(9);
280
281
282 FinalSpectrum->Draw();
283 legend->AddEntry(FinalSpectrum,"(#Xi(1530) + cc)/2","p");
284 //legend->AddEntry(FinalSpectrum,"(#Xi(1530) + cc)/2: Current Results","p");
285 FinalSpectrum->Fit(myLevy,"IME","",minFitpoint,maxFitpoint);
286 FinalSpectrum->Fit(myPtExp,"IMEN","",minFitpoint,maxFitpoint);
287 FinalSpectrum->Fit(myMtExp,"IMEN","",minFitpoint,maxFitpoint);
288 FinalSpectrum->Fit(myBoltz,"IMEN","",minFitpoint,maxFitpoint);
289 FinalSpectrum->Fit(myPowerLaw,"IMEN","",minFitpoint,maxFitpoint);
290 FinalSpectrum->Fit(myPowerLawPt,"IMEN","",minFitpoint,maxFitpoint);
291 //FinalSpectrum->Fit(myBGBlastWave,"IME","",minFitpoint,maxFitpoint);
292 myLevy->Draw("same");
293 /*myPtExp->Draw("same");
294 myMtExp->Draw("same");
295 myBoltz->Draw("same");
296 myPowerLaw->Draw("same");
297 myPowerLawPt->Draw("same");*/
298 //myBGBlastWave->Draw("same");
299 //
300 legend->AddEntry(myLevy,"Levy","l");
301 /*legend->AddEntry(myPtExp,"Pt-exp","l");
302 legend->AddEntry(myMtExp,"Mt-exp","l");
303 legend->AddEntry(myBoltz,"Pt-Boltzmann","l");
304 legend->AddEntry(myPowerLaw,"PowerLaw","l");
305 legend->AddEntry(myPowerLawPt,"Pt-PowerLaw","l");
306 */
307 double AvgLowPtExtrap = myLevy->Integral(0,0.8) + myPtExp->Integral(0,0.8) + myPowerLawPt->Integral(0,0.8) + myMtExp->Integral(0,0.8);
308 AvgLowPtExtrap /= 4.;
309 cout<<"Levy Extrap % = "<<myLevy->Integral(0,0.8)/myLevy->Integral(0,10.)<<" Avg Extrap % = "<<AvgLowPtExtrap/myLevy->Integral(0,10.)<<endl;
310 //double LowPtExtrapUncertaintyPercentage = 0.17;// Levy underestimation of Pythia
311 //LowPtExtrapUncertaintyPercentage -= (AvgLowPtExtrap - myLevy->Integral(0,0.8))/myLevy->Integral(0,10.);
312 double High_lowptExtrap = (myPtExp->Integral(0,0.8) + myPowerLawPt->Integral(0,0.8))/2.;
313 double Low_lowptExtrap = myMtExp->Integral(0,0.8);
314 double High_LowPtExtrapUncertaintyPercentage = (High_lowptExtrap - myLevy->Integral(0,0.8))/myLevy->Integral(0,10.);
315 double Low_LowPtExtrapUncertaintyPercentage = (myLevy->Integral(0,0.8) - Low_lowptExtrap)/myLevy->Integral(0,10.);
316 cout<<"high low-pt uncertainty = "<<High_LowPtExtrapUncertaintyPercentage<<endl;
317 cout<<"low low-pt uncertainty = "<<Low_LowPtExtrapUncertaintyPercentage<<endl;
318
319
320 //PureSysFromCutVar->Draw();
321
322
323 double dNdY = myLevy->Integral(0,10);
324 double dNdY_exp = myMtExp->Integral(0,10);
325 double dNdY_Stat = LevyFits_CutVar[0]->GetParError(0);
326 double dNdY_Covered = myLevy->Integral(0.8,5.6);
327 double dNdY_Covered_exp = myMtExp->Integral(0.8,5.6);
328 double dNdY_DataPoints = 0, dNdY_DataPoints_e=0;
329 for(int ii=0; ii<8; ii++){// to explicitly integrate dNdY without fit (Christina's suggestion)
330 dNdY_DataPoints += Spectra_CutVar[0]->GetBinContent(ii+2)*Spectra_CutVar[0]->GetBinWidth(ii+2);
331 dNdY_DataPoints_e += pow(Spectra_CutVar[0]->GetBinError(ii+2)*Spectra_CutVar[0]->GetBinWidth(ii+2),2);
332 }
333 dNdY_DataPoints_e = sqrt(dNdY_DataPoints_e);
334 double dNdYSysPlus = 0;
335 double dNdYSysMinus = 0;
336 double CSys = 0;
337 double nSys = 0;
338 //////////////////////////////////////
339 // Sys errors of Levy parameters
340 double sigma_dNdY_cv[12]={0};
341 double sigma_C_cv[12]={0};
342 double sigma_n_cv[12]={0};
343 double SysVar_dNdY_cv[12]={0};
344 double SysVar_C_cv[12]={0};
345 double SysVar_n_cv[12]={0};
346
347 for(int cv=1; cv<13; cv++){
348 if(MeanSysCutVar[cv-1] > 0 && MeanSysCutVar[cv-1] > sigmaSysCutVar[cv-1]) {// significant deviation
349 sigma_dNdY_cv[cv-1] = sqrt(fabs(pow(LevyFits_CutVar[0]->GetParError(0),2) - pow(LevyFits_CutVar[cv]->GetParError(0),2)));
350 sigma_C_cv[cv-1] = sqrt(fabs(pow(LevyFits_CutVar[0]->GetParError(1),2) - pow(LevyFits_CutVar[cv]->GetParError(1),2)));
351 sigma_n_cv[cv-1] = sqrt(fabs(pow(LevyFits_CutVar[0]->GetParError(2),2) - pow(LevyFits_CutVar[cv]->GetParError(2),2)));
352 SysVar_dNdY_cv[cv-1] = fabs(LevyFits_CutVar[0]->GetParameter(0)-LevyFits_CutVar[cv]->GetParameter(0));
353 SysVar_C_cv[cv-1] = fabs(LevyFits_CutVar[0]->GetParameter(1)-LevyFits_CutVar[cv]->GetParameter(1));
354 SysVar_n_cv[cv-1] = fabs(LevyFits_CutVar[0]->GetParameter(2)-LevyFits_CutVar[cv]->GetParameter(2));
355
356 if(SysVar_dNdY_cv[cv-1] > sigma_dNdY_cv[cv-1]){
357 dNdYSysPlus += pow(SysVar_dNdY_cv[cv-1],2)-pow(sigma_dNdY_cv[i-1],2);
358 dNdYSysMinus += pow(SysVar_dNdY_cv[cv-1],2)-pow(sigma_dNdY_cv[i-1],2);
359 }
360 if(SysVar_C_cv[cv-1] > sigma_C_cv[cv-1]){
361 CSys += pow(SysVar_C_cv[cv-1],2)-pow(sigma_C_cv[cv-1],2);
362 }
363 if(SysVar_n_cv[cv-1] > sigma_n_cv[cv-1]){
364 nSys += pow(SysVar_n_cv[cv-1],2)-pow(sigma_n_cv[cv-1],2);
365 }
366
367 }
368
369 }
370
371
372
373 double sigma_dNdY_fv[4]={0};
374 double sigma_C_fv[4]={0};
375 double sigma_n_fv[4]={0};
376 double SysVar_dNdY_fv[4]={0};
377 double SysVar_C_fv[4]={0};
378 double SysVar_n_fv[4]={0};
379 for(int fv=0; fv<4; fv++){
380 sigma_dNdY_fv[fv] = sqrt(fabs(pow(LevyFits_CutVar[0]->GetParError(0),2) - pow(LevyFits_FitVar[fv]->GetParError(0),2)));
381 SysVar_dNdY_fv[fv] = sqrt(pow(LevyFits_CutVar[0]->GetParameter(0)-LevyFits_FitVar[fv]->GetParameter(0),2));
382 sigma_C_fv[fv] = sqrt(fabs(pow(LevyFits_CutVar[0]->GetParError(1),2) - pow(LevyFits_FitVar[fv]->GetParError(1),2)));
383 SysVar_C_fv[fv] = sqrt(pow(LevyFits_CutVar[0]->GetParameter(1)-LevyFits_FitVar[fv]->GetParameter(1),2));
384 sigma_n_fv[fv] = sqrt(fabs(pow(LevyFits_CutVar[0]->GetParError(2),2) - pow(LevyFits_FitVar[fv]->GetParError(2),2)));
385 SysVar_n_fv[fv] = sqrt(pow(LevyFits_CutVar[0]->GetParameter(2)-LevyFits_FitVar[fv]->GetParameter(2),2));
386
387 if(fv==2){//max case for dN/dy
388 //dNdYSysPlus += pow(LevyFits_CutVar[0]->GetParameter(0)-LevyFits_FitVar[fv]->GetParameter(0),2) - pow(LevyFits_CutVar[0]->GetParError(0)-LevyFits_FitVar[fv]->GetParError(0),2);
389 //dNdYSysMinus += pow(LevyFits_CutVar[0]->GetParameter(0)-LevyFits_FitVar[fv]->GetParameter(0),2) - pow(LevyFits_CutVar[0]->GetParError(0)-LevyFits_FitVar[fv]->GetParError(0),2);
390 dNdYSysPlus += pow(SysVar_dNdY_fv[fv],2) - pow(sigma_dNdY_fv[fv],2);
391 dNdYSysMinus += pow(SysVar_dNdY_fv[fv],2) - pow(sigma_dNdY_fv[fv],2);
392 }
393 //if(fv==2) CSys += pow(LevyFits_CutVar[0]->GetParameter(1)-LevyFits_FitVar[fv]->GetParameter(1),2) - pow(LevyFits_CutVar[0]->GetParError(1)-LevyFits_FitVar[fv]->GetParError(1),2);
394 //if(fv==1) nSys += pow(LevyFits_CutVar[0]->GetParameter(2)-LevyFits_FitVar[fv]->GetParameter(2),2) - pow(LevyFits_CutVar[0]->GetParError(2)-LevyFits_FitVar[fv]->GetParError(2),2);
395 if(fv==2) CSys += pow(SysVar_C_fv[fv],2) - pow(sigma_C_fv[fv],2);
396 if(fv==1) nSys += pow(SysVar_n_fv[fv],2) - pow(sigma_n_fv[fv],2);
397 }
398
399
400 double dNdYSys_forRatio = dNdYSysPlus;
401 dNdYSysPlus += pow(0.062*dNdY,2);// INEL Norm uncertainty
402 dNdYSysPlus += pow(0.04*dNdY,2);// Material Budget uncertainty
403 dNdYSysPlus += pow(0.01*dNdY,2);// Geant3/Fluka correction uncertainty
404
405 dNdYSysPlus += pow(High_LowPtExtrapUncertaintyPercentage * dNdY,2);// extrapolation uncertainty (was LowPtExtrapUncertaintyPercentage * fabs(dNdY-dNdY_Covered))
406 dNdYSys_forRatio += pow(High_LowPtExtrapUncertaintyPercentage * dNdY,2);// extrapolation uncertainty
407 dNdYSysPlus = sqrt(dNdYSysPlus);
408 dNdYSys_forRatio = sqrt(dNdYSys_forRatio);
409 //
410 dNdYSysMinus += pow(0.03*dNdY,2);// INEL Norm uncertainty
411 dNdYSysMinus += pow(0.04*dNdY,2);// Material Budget uncertainty
412 dNdYSysMinus += pow(0.01*dNdY,2);// Geant3/Fluka correction uncertainty
413 dNdYSysMinus += pow(Low_LowPtExtrapUncertaintyPercentage * dNdY,2);// extrapolation uncertainty (40% from Pythia study).
414 dNdYSysMinus = sqrt(dNdYSysMinus);
415
416 CSys = sqrt(CSys);
417 nSys = sqrt(nSys);
418
419 cout<<"dN/dy = "<<dNdY<<" , Covered range = "<<dNdY_Covered<<" , DataPoint Sum = "<<dNdY_DataPoints<<" , stat = "<<dNdY_DataPoints_e<<endl;
420 cout<<"dN/dy stat = "<<dNdY_Stat<<" +sys = "<<dNdYSysPlus<<" -sys = "<<dNdYSysMinus<<endl;
421
422 cout<<"C = "<<myLevy->GetParameter(1)<<" , stat = "<<LevyFits_CutVar[0]->GetParError(1)<<" , sys = "<<CSys<<endl;
423 cout<<"n = "<<myLevy->GetParameter(2)<<" , stat = "<<LevyFits_CutVar[0]->GetParError(2)<<" , sys = "<<nSys<<endl;
424
425 // mean pt
426 double ptEdges[9]={0.8, 1.2, 1.6, 2.0, 2.4, 3.2, 4.0, 4.8, 5.6};
427 double meanpt_def=0, meanpt_Sys1=0, meanpt_Sys2=0, meanpt_Sys3=0;// Sys1 = Spectrum only, Sys2 = bin centers, Sys3 = low-pt extrapolation
428 double yieldSum_def=0, yieldSum_Sys1=0, yieldSum_Sys2=0, yieldSum_Sys3=0;
429 double meanpt_statError=0;
430 meanpt_def += myLevy->Moment(1,0.,0.8) * myLevy->Integral(0,0.8);// low-pt extrapolation
431 yieldSum_def += myLevy->Integral(0,0.8);
432 meanpt_Sys1 += meanpt_def; meanpt_Sys2 += meanpt_def;
433 yieldSum_Sys1 += yieldSum_def; yieldSum_Sys2 += yieldSum_def;
434 meanpt_Sys3 += fabs(myLevy->Integral(0,0.8) - High_LowPtExtrapUncertaintyPercentage*dNdY) * myLevy->Moment(1,0.,0.8);// low-pt extrapolation uncertainty
435 yieldSum_Sys3 += fabs(myLevy->Integral(0,0.8) - High_LowPtExtrapUncertaintyPercentage*dNdY);// low-pt extrapolation uncertainty
436 meanpt_statError += myLevy->Moment(1,0.,0.8) * myLevy->Integral(0,0.8) * myLevy->GetParError(0)/myLevy->GetParameter(0);
437
438
439 double StatErrorPtBins=0;
440 for(int bin=1; bin<=8; bin++){
441 double bin_width = fabs(ptEdges[bin-1]-ptEdges[bin]);
442 meanpt_def += myLevy->Moment(1,ptEdges[bin-1],ptEdges[bin]) * FinalSpectrum->GetBinContent(bin+1)*bin_width;
443 yieldSum_def += FinalSpectrum->GetBinContent(bin+1)*bin_width;
444 meanpt_Sys1 += myLevy->Moment(1,ptEdges[bin-1],ptEdges[bin]) * myLevy->Integral(ptEdges[bin-1],ptEdges[bin]);
445 yieldSum_Sys1 += myLevy->Integral(ptEdges[bin-1],ptEdges[bin]);
446 meanpt_Sys2 += (ptEdges[bin]+ptEdges[bin-1])/2. * FinalSpectrum->GetBinContent(bin+1)*bin_width;
447 yieldSum_Sys2 += FinalSpectrum->GetBinContent(bin+1)*bin_width;
448 meanpt_Sys3 += myLevy->Moment(1,ptEdges[bin-1],ptEdges[bin]) * FinalSpectrum->GetBinContent(bin+1)*bin_width;
449 yieldSum_Sys3 += FinalSpectrum->GetBinContent(bin+1)*bin_width;
450 //
451 StatErrorPtBins += pow(myLevy->Moment(1,ptEdges[bin-1],ptEdges[bin]) * Spectra_CutVar[0]->GetBinError(bin+1)*bin_width,2);
452 }
453
454 meanpt_def += myLevy->Moment(1,5.6,10.) * myLevy->Integral(5.6,10.);// high-pt extrapolation
455 yieldSum_def += myLevy->Integral(5.6,10.);
456 meanpt_Sys1 += myLevy->Moment(1,5.6,10.) * myLevy->Integral(5.6,10.);// high-pt extrapolation
457 yieldSum_Sys1 += myLevy->Integral(5.6,10.);
458 meanpt_Sys2 += myLevy->Moment(1,5.6,10.) * myLevy->Integral(5.6,10.);// high-pt extrapolation
459 yieldSum_Sys2 += myLevy->Integral(5.6,10.);
460 meanpt_Sys3 += fabs(myLevy->Integral(5.6,10.) - High_LowPtExtrapUncertaintyPercentage*myLevy->Integral(5.6,10.))*myLevy->Moment(1,5.6,10.);// high-pt extrapolation
461 yieldSum_Sys3 += fabs(myLevy->Integral(5.6,10.) - High_LowPtExtrapUncertaintyPercentage*myLevy->Integral(5.6,10.));
462 //
463 meanpt_statError += sqrt(StatErrorPtBins);
464 meanpt_statError += myLevy->Moment(1,5.6,10.) * myLevy->Integral(5.6,10.) * myLevy->GetParError(0)/myLevy->GetParameter(0);// high-pt extrapolation
465 meanpt_statError /= yieldSum_def;
466
467 meanpt_def /= yieldSum_def;
468 meanpt_Sys1 /= yieldSum_Sys1;
469 meanpt_Sys2 /= yieldSum_Sys2;
470 meanpt_Sys3 /= yieldSum_Sys3;
471
472 double meanpt_Sys = sqrt(pow(meanpt_def-meanpt_Sys1,2)+pow(meanpt_def-meanpt_Sys2,2)+pow(meanpt_def-meanpt_Sys3,2));
473
474 cout<<"<pt> = "<<meanpt_def<<" , stat = "<<meanpt_statError<<" , sys = "<<meanpt_Sys<<endl;
475
476 /*double meanpt = myLevy->Moment(1,0.,10.);// 0.,30 for full range
477 double meanpt_CoveredLevy = myLevy->Moment(1,0.8,5.6);
478 double mPt_Stat = 0;
479 double mPt_Sys = 0;
480 double mPt_StatSys = 0;
481 double base_C = myLevy->GetParameter(1);
482 double base_n = myLevy->GetParameter(2);
483
484
485 // Sys
486 myLevy->SetParameter(1, base_C + myLevy->GetParError(1));
487 mPt_StatSys += pow(myLevy->Moment(1,0.,10)-meanpt,2);
488 //
489 //
490 myLevy->SetParameter(2, base_n + myLevy->GetParError(2));
491 mPt_StatSys += pow(myLevy->Moment(1,0.,10)-meanpt,2);
492 mPt_StatSys = sqrt(mPt_StatSys);
493 //
494 //
495 // Stat
496 myLevy->SetParameter(1, base_C + LevyFits_CutVar[0]->GetParError(1));
497 mPt_Stat += pow(myLevy->Moment(1,0.,10)-meanpt,2);
498 //
499 //
500 myLevy->SetParameter(2, base_n + LevyFits_CutVar[0]->GetParError(2));
501 mPt_Stat += pow(myLevy->Moment(1,0.,10)-meanpt,2);
502 mPt_Stat = sqrt(mPt_Stat);
503 //
504 myLevy->SetParameter(1, base_C); myLevy->SetParameter(1, base_n);
505
506 cout<<"Levy mean pt = "<<meanpt<<" , stat = "<<mPt_Stat<<" , sys = "<<sqrt( pow(mPt_StatSys,2)-pow(mPt_Stat,2) )<<endl;
507 cout<<"Levy mean pt in covered range = "<<meanpt_CoveredLevy<<endl;
508 */
509
510 double XidNdY = 0.0079;// (Xi^+ + Xi^-)/2. Published
511 double XiStarToXi = dNdY/XidNdY;
512 double XiStarToXi_Stat = sqrt(pow(dNdY_Stat/XidNdY,2) + pow(dNdY*0.0001/pow(XidNdY,2),2));// 0.0001 is stat error of Xi^{\pm}
513 double XiStartoXi_Sys = dNdYSys_forRatio/XidNdY;
514
515
516 cout<<"Xi*/Xi = "<<XiStarToXi<<" , stat = "<<XiStarToXi_Stat<<" , sys = "<<XiStartoXi_Sys<<endl;
517 cout<<endl;
518 cout<<endl;
519
520 //Old QM2011 values for (Xi* + cc)/2
521 double Old_XiStarPoints[8]={0.001259, 0.0008586, 0.0006316, 0.0003604, 1.856e-4, 5.4601e-5, 2.0187e-5, 7.6559e-6};
522 double Old_XiStarPoints_e[8]={2.44e-4, 1.224e-4, 7.136e-5, 3.85e-5, 1.59e-5, 7.49e-6, 3.51e-6, 1.822e-6};
523 double pt_points[8]={1.0, 1.4, 1.8, 2.2, 2.8, 3.6, 4.4, 5.2};
524 double pt_points_e[8]={.2, .2, .2, .2, .4, .4, .4, .4};
525 TGraphErrors *gr_OldXiStar = new TGraphErrors(8, pt_points, Old_XiStarPoints, pt_points_e, Old_XiStarPoints_e);
526 gr_OldXiStar->SetMarkerStyle(21);
527 gr_OldXiStar->SetMarkerColor(2);
528 gr_OldXiStar->SetLineColor(2);
529 double NewOldRatio[8]={0};
530 for(int ii=0; ii<8; ii++){
531 NewOldRatio[ii] = FinalSpectrum->GetBinContent(ii+2)/Old_XiStarPoints[ii];
532 //cout<<FinalSpectrum->GetBinError(ii+2)/FinalSpectrum->GetBinContent(ii+2)<<endl;
533 }
534 TGraph *gr_NewOldRatio = new TGraph(8, pt_points, NewOldRatio);
535 gr_NewOldRatio->SetMarkerStyle(20);
536 gr_NewOldRatio->GetXaxis()->SetTitle("p_{T} (GeV/c)");
537 gr_NewOldRatio->GetYaxis()->SetTitle("New/Old");
538 gr_NewOldRatio->SetTitle("New Spectrum Divided by QM11 Spectrum");
539 //gr_NewOldRatio->Draw("AP");
540
541 //gr_OldXiStar->Draw("P");
542 //legend->AddEntry(gr_OldXiStar,"(#Xi(1530) + cc)/2: QM11 Results","p");
543 // To Fit Old points
544 /*TH1D *h_OldXiStar = (TH1D*)h_Xispectrum->Clone();
545 h_OldXiStar->Add(h_OldXiStar,-1);
546 for(int i=0; i<8; i++){
547 h_OldXiStar->SetBinContent(i+2, Old_XiStarPoints[i]);
548 h_OldXiStar->SetBinError(i+2, Old_XiStarPoints_e[i]);
549 }
550 h_OldXiStar->SetBinContent(1,+100);// first bin has no data
551 h_OldXiStar->Fit(myLevy,"IME","",minFitpoint,maxFitpoint);
552 */
553 //legend->Draw("same");
554
555 double StatPercentage[8]={};
556 double SysPercentage[8]={};
557 double TotErrPercentage[8]={};
558 for(int ii=0; ii<8; ii++){
559 StatPercentage[ii] = StatError[ii]/FinalSpectrum->GetBinContent(ii+2);
560 SysPercentage[ii] = SysError[ii+1]/FinalSpectrum->GetBinContent(ii+2);
561 TotErrPercentage[ii] = sqrt(pow(StatError[ii],2)+pow(SysError[ii+1],2))/FinalSpectrum->GetBinContent(ii+2);
562 }
563 TGraph *gr_StatPercentage = new TGraph(8, pt_points, StatPercentage);
564 gr_StatPercentage->SetMarkerStyle(25);
565 gr_StatPercentage->SetMarkerColor(4);
566 gr_StatPercentage->SetLineColor(4);
567 gr_StatPercentage->GetXaxis()->SetTitle("p_{T} (GeV/c)");
568 gr_StatPercentage->GetYaxis()->SetTitle("Uncertainty (fraction)");
569 gr_StatPercentage->SetTitle("");
570 gr_StatPercentage->SetMinimum(0);
571 gr_StatPercentage->SetMaximum(0.2);// 0.35 to compare with Enrico
572 //gr_StatPercentage->Draw("APC");
573 TGraph *gr_SysPercentage = new TGraph(8, pt_points, SysPercentage);
574 gr_SysPercentage->SetMarkerStyle(25);
575 gr_SysPercentage->SetMarkerColor(2);
576 gr_SysPercentage->SetLineColor(2);
577 //gr_SysPercentage->Draw("PC");
578 TGraph *gr_TotErrPercentage = new TGraph(8, pt_points, TotErrPercentage);
579 gr_TotErrPercentage->SetMarkerStyle(25);
580 gr_TotErrPercentage->SetMarkerColor(1);
581 gr_TotErrPercentage->SetLineColor(1);
582 //gr_TotErrPercentage->Draw("PC");
583 //legend->AddEntry(gr_StatPercentage,"Stat. uncertainty","p");
584 //legend->AddEntry(gr_SysPercentage,"Sys. uncertainty","p");
585 //legend->AddEntry(gr_TotErrPercentage,"#sqrt{Stat^{2}+Sys^{2}}","p");
586 legend->Draw("same");
587
588 ////////////////////////////////
589 // Cut Var
590 for(int var=1; var<13; var++){// 0 to 4 for FitVar, 1 to 13 for CutVar
591 TString *Varname = new TString();
592 if(var==1) Varname->Append("Nclusters TPC");
593 if(var==2) Varname->Append("DCA PV proton");
594 if(var==3) Varname->Append("DCA PV 1st pion");
595 if(var==4) Varname->Append("DCA PV 2nd pion");
596 if(var==5) Varname->Append("DCA PV 3rd pion");
597 if(var==6) Varname->Append("DCA PV 4th pion");
598 if(var==7) Varname->Append("DCA proton-pion");
599 if(var==8) Varname->Append("DCA Lambda-pion");
600 if(var==9) Varname->Append("Decay length xy Lambda");
601 if(var==10) Varname->Append("Decay length xy Xi");
602 if(var==11) Varname->Append("Cos PointingAngle Lambda");
603 if(var==12) Varname->Append("Cos PointingAngle Xi");
604
605 cout<<Varname->Data()<<" & ";
606 cout.precision(2);
607 for(int par=0; par<3; par++) {
608 cout<<100.*(LevyFits_CutVar[var]->GetParameter(par) - LevyFits_CutVar[0]->GetParameter(par))/LevyFits_CutVar[0]->GetParameter(par)<<"(";
609 if(par==0) cout<<100.*sigma_dNdY_cv[var-1]/LevyFits_CutVar[0]->GetParameter(par)<<")"<<" ";
610 if(par==1) cout<<100.*sigma_C_cv[var-1]/LevyFits_CutVar[0]->GetParameter(par)<<")"<<" ";
611 if(par==2) cout<<100.*sigma_n_cv[var-1]/LevyFits_CutVar[0]->GetParameter(par)<<")"<<" ";
612
613 if((par+1)!=3) cout<<"& ";
614 else cout<<" \\\\\ \\hline";
615 }
616 cout<<endl;
617 }
618 cout<<endl;
619
620 //////////////////////////////
621 // Fit Var
622 for(int var=0; var<4; var++){// 0 to 4 for FitVar, 1 to 13 for CutVar
623 TString *Varname = new TString();
624 if(var==0) Varname->Append("Pure Voigtian");
625 if(var==1) Varname->Append("Pure Voigtian w/o bkg subtraction");
626 if(var==2) Varname->Append("bkg norm to the right");
627 if(var==3) Varname->Append("1/2 bin-counting range");
628
629 cout<<Varname->Data()<<" & ";
630 cout.precision(2);
631 for(int par=0; par<3; par++) {
632 cout<<100.*(LevyFits_FitVar[var]->GetParameter(par) - LevyFits_CutVar[0]->GetParameter(par))/(LevyFits_CutVar[0]->GetParameter(par))<<"(";
633 if(par==0) cout<<100.*sigma_dNdY_fv[var]/LevyFits_CutVar[0]->GetParameter(par)<<")"<<" ";
634 if(par==1) cout<<100.*sigma_C_fv[var]/LevyFits_CutVar[0]->GetParameter(par)<<")"<<" ";
635 if(par==2) cout<<100.*sigma_n_fv[var]/LevyFits_CutVar[0]->GetParameter(par)<<")"<<" ";
636
637 if((par+1)!=3) cout<<"& ";
638 else cout<<" \\\\\ \\hline";
639 }
640 cout<<endl;
641 }
642 cout<<endl;
643
644 ///////////////////////////////////////////
645
646 /*
647 cout<<"Yields"<<endl;
648 // print yields
649 for(int var=1; var<=13; var++){
650 TString *Varname = new TString();
651 if(var==1) Varname->Append("Standard ");
652 else {Varname->Append("Cut Var "); *Varname += var-1;}
653
654 cout<<Varname->Data()<<" & ";
655 cout.precision(4);// 4 or 6
656 for(int ptbin=1; ptbin<=8; ptbin++){
657 //cout<<Yields_CutVar[var-1]->GetBinContent(ptbin)/Eff_CutVar[var-1]->GetBinContent(ptbin)<<" ";
658 cout<<Eff_CutVar[var-1]->GetBinContent(ptbin)<<" ";
659 if((ptbin)!=8) cout<<"& ";
660 else cout<<" \\\\\ \\hline";
661 }
662 cout<<endl;
663 }
664 */
665 /* for(int var=1; var<5; var++){
666 TString *Varname = new TString("Fit Var ");
667 *Varname += var;
668 cout<<Varname->Data()<<" & ";
669 cout.precision(6);
670 for(int ptbin=1; ptbin<=8; ptbin++){
671 cout<<Yields_FitVar[var-1]->GetBinContent(ptbin)/Eff_CutVar[0]->GetBinContent(ptbin)<<" ";
672 if((ptbin)!=8) cout<<"& ";
673 else cout<<" \\\\\ \\hline";
674 }
675 cout<<endl;
676 }*/
677 cout<<endl;
678
679 //TString *name=new TString("../AnaNotes/XiStar/XiStar_yield_ErrorsCutVar");
680 //*name += CutVarN;
681 /*TString *name=new TString("../AnaNotes/XiStar/XiStar_CutVarSys");
682 *name += CutVarLow;
683 name->Append(".png");
684 c1->SaveAs(name->Data());*/
685 //TString *name=new TString("../AnaNotes/XiStar/XiStar_CutVarSummary");
686 //*name += CutVarLow;
687 //name->Append(".png");
688 //can->SaveAs(name->Data());
689
690}
691
692
693//________________________________________________________________________
694double myLevyPtFunc(Double_t *x, Double_t *par)
695{
696 Double_t lMass=0;
697 lMass = 1.5318; //Xi* mass
698
699
700 Double_t ldNdy = par[0]; // dN/dy
701 Double_t l2pi = 2*TMath::Pi(); // 2pi (cancels in return statement)
702 Double_t lTemp = par[1]; // Temperature
703 Double_t lPower = par[2]; // power=n
704
705 Double_t lBigCoef = ((lPower-1)*(lPower-2)) / (l2pi*lPower*lTemp*(lPower*lTemp+lMass*(lPower-2)));
706 Double_t lInPower = 1 + (TMath::Sqrt(x[0]*x[0]+lMass*lMass)-lMass) / (lPower*lTemp);
707
708 return l2pi * ldNdy * x[0] * lBigCoef * TMath::Power(lInPower,(-1)*lPower);
709}
710//________________________________________________________________________
711double myMtExpFunc(Double_t *x, Double_t *par)
712{
713 Double_t lMass=0;
714 lMass = 1.5318; //Xi* mass
715
716 return 2*TMath::Pi()*x[0]*par[0]*exp(-TMath::Sqrt(x[0]*x[0]+lMass*lMass)/par[1]);
717}
718//________________________________________________________________________
719double myPtExpFunc(Double_t *x, Double_t *par)
720{
721 return 2*TMath::Pi()*x[0]*par[0]*exp(-x[0]/par[1]);
722}
723//________________________________________________________________________
724double myBoltzFunc(Double_t *x, Double_t *par)
725{
726 Double_t lMass=0;
727 lMass = 1.5318; //Xi* mass
728 Double_t Mt = sqrt(pow(x[0],2)+pow(lMass,2));
729 return par[0]*x[0]*Mt*exp(-Mt/par[1]);
730
731}
732//________________________________________________________________________
733double myPowerLawPtFunc(Double_t *x, Double_t *par)
734{
735 return ( x[0]*par[0]*pow(1+x[0]/par[1], -par[2]) );
736}
737//________________________________________________________________________
738double myPowerLawFunc(Double_t *x, Double_t *par)
739{
740 return ( par[0]*pow(1+x[0]/par[1], -par[2]) );
741}
742//________________________________________________________________________
743double myBoltsBWFunc(Double_t *x, Double_t *par)
744{
745 double pT = x[0];
746 double mass = par[0];
747 double beta = par[1];
748 double temp = par[2];
749 double n = par[3];
750 double norm = par[4];
751
752 static TF1 * fIntBG = 0;
753 if(!fIntBG)
754 fIntBG = new TF1 ("fIntBG", IntegrandBG, 0, 1, 5);
755
756 fIntBG->SetParameters(mass, pT, beta, temp,n);
757 double result = fIntBG->Integral(0,1);
758 return result*norm;
759}
760//________________________________________________________________________
761double IntegrandBG(const double * x, const double* par){
762 double x0 = x[0];
763
764 double mass = par[0];
765 double pT = par[1];
766 double beta_max = par[2];
767 double temp = par[3];
768 Double_t n = par[4];
769
770 // Keep beta within reasonable limits
771 Double_t beta = beta_max * TMath::Power(x0, n);
772 if (beta > 0.9999999999999999) beta = 0.9999999999999999;
773
774 double mT = TMath::Sqrt(mass*mass+pT*pT);
775
776 double rho0 = TMath::ATanH(beta);
777 double arg00 = pT*TMath::SinH(rho0)/temp;
778 if (arg00 > 700.) arg00 = 700.; // avoid FPE
779 double arg01 = mT*TMath::CosH(rho0)/temp;
780 double f0 = x0*mT*TMath::BesselI0(arg00)*TMath::BesselK1(arg01);
781
782 // printf("r=%f, pt=%f, beta_max=%f, temp=%f, n=%f, mt=%f, beta=%f, rho=%f, argI0=%f, argK1=%f\n", x0, pT, beta_max, temp, n, mT, beta, rho0, arg00, arg01);
783
784 return f0;
785}