1 #if !defined(__CINT__) || defined(__MAKECINT__)
10 #include "TGraphAsymmErrors.h"
20 #include <Riostream.h>
71 enum centrality{
kpp,
k07half,
kpPb0100,
k010,
k1020,
k020,
k2040,
k2030,
k3040,
k4050,
k3050,
k5060,
k4060,
k6080,
k4080,
k5080,
k80100,
kpPb020,
kpPb2040,
kpPb4060,
kpPb60100 };
78 Int_t npoints = gr->GetN();
79 for(
Int_t i=0; i<=npoints; i++){
82 if ( TMath::Abs ( x - pt ) < 0.4 ) {
93 Int_t npoints = gr->GetN();
95 for(
Int_t i=0; i<=npoints; i++){
97 if ( TMath::Abs ( x - pt ) < 0.4 ) {
103 uncLow=0.; uncHigh=0.;
106 uncLow = gr->GetErrorYlow(istart)/y;
107 uncHigh = gr->GetErrorYhigh(istart)/y;
119 Int_t hbin = hRaa->FindBin(pt);
121 Double_t stat = hRaa->GetBinError(hbin);
122 Double_t relativeStat = stat / hRaa->GetBinContent(hbin);
126 weightStat = relativeStat;
132 relativeSyst = TMath::Sqrt( ppSystRawYieldCutVar*ppSystRawYieldCutVar + ABSystRawYieldCutVar*ABSystRawYieldCutVar );
135 relativeSyst = TMath::Sqrt( ppSystRawYieldCutVarPid*ppSystRawYieldCutVarPid + ABSystRawYieldCutVar*ABSystRawYieldCutVarPid );
138 relativeSyst = raaSystHigh>raaSystLow ? raaSystHigh : raaSystLow;
142 weight = TMath::Sqrt( weightStat*weightStat + relativeSyst*relativeSyst );
145 return (1.0/(weight*weight));
151 const char* fDplusRaa=
"",
const char* fDplusppRef=
"",
152 const char* fDstarRaa=
"",
const char* fDstarppRef=
"",
154 Bool_t isReadAllPPUnc=
false,
Bool_t isPPRefExtrapD0=
false,
Bool_t isPPRefExtrapDplus=
false,
Bool_t isPPRefExtrapDstar=
false)
159 if(fD0Raa) foutname +=
"Dzero";
160 if(fDplusRaa) foutname +=
"Dplus";
161 if(fDstarRaa) foutname +=
"Dstar";
166 TString ndate = Form(
"%02d%02d%04d",d.GetDay(),d.GetMonth(),d.GetYear());
167 resultFile = fopen( Form(
"%s_result_%s.txt",foutname.Data(),ndate.Data()),
"w");
168 fprintf(resultFile,
"Ptmin (GeV/c) Ptmax (GeV/c) Raa(Daverage) +-(stat) +(syst) - (syst) \n\n");
173 TH1I *hCombinedReferenceFlag[3];
178 TH1D *hDmesonPPRef[3], *hDmesonPPYieldExtrUnc[3], *hDmesonPPCutVarUnc[3], *hDmesonPPIDPUnc[3], *hDmesonPPMCPtUnc[3];
190 gRAB_DmesonAverage_GlobalSystematics->SetNameTitle(
"gRAB_DmesonAverage_GlobalSystematics",
"DmesonAverage GlobalSystematics");
191 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetNameTitle(
"gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis",
"DmesonAverage FeedDownSystematicsElossHypothesis");
192 gRAB_DmesonAverage_ScalingSystematicsPP->SetNameTitle(
"gRAB_DmesonAverage_ScalingSystematicsPP",
"DmesonAverage Scaling uncertainty PP");
193 gRAB_DmesonAverage_DataSystematicsPP->SetNameTitle(
"gRAB_DmesonAverage_DataSystematicsPP",
"DmesonRaaAverage DataSystematicsPP - tracking uncertainty PP");
194 gRAB_DmesonAverage_DataSystematicsAB->SetNameTitle(
"gRAB_DmesonAverage_DataSystematicsAB",
"DmesonRaaAverage DataSystematicsAB - tracking uncertainty AB");
195 gRAB_DmesonAverage_TrackingSystematicsPP->SetNameTitle(
"gRAB_DmesonAverage_TrackingSystematicsPP",
"DmesonRaaAverage tracking uncertainty PP");
196 gRAB_DmesonAverage_TrackingSystematicsAB->SetNameTitle(
"gRAB_DmesonAverage_TrackingSystematicsAB",
"DmesonRaaAverage tracking uncertainty AB");
199 const char *filenamesRaa[3] = { fD0Raa, fDplusRaa, fDstarRaa };
200 const char *filenamesReference[3] = { fD0ppRef, fDplusppRef, fDstarppRef };
201 const char *filenamesSuffixes[3] = {
"Dzero",
"Dplus",
"Dstar" };
202 Bool_t isDmeson[3] = {
true,
true,
true };
204 if(strcmp(filenamesRaa[0],
"")==0) { cout<<
" Dzero not set, error"<<endl;
return; }
209 for(
Int_t j=0; j<3; j++) {
210 if(strcmp(filenamesRaa[j],
"")==0) { isDmeson[j]=
false;
continue; }
211 cout<<
" Reading file "<<filenamesRaa[j]<<
"..."<<endl;
212 TFile *fDRaa = TFile::Open(filenamesRaa[j],
"read");
213 if(!fDRaa){ cout<<
" Error on file !!!!!"<<filenamesRaa[j]<<endl;
return; }
214 hDmesonRaa[j] = (
TH1D*)fDRaa->Get(
"hRABvsPt");
215 hDmesonRaa[j]->SetName(Form(
"%s_%s",hDmesonRaa[j]->GetName(),filenamesSuffixes[j]));
221 gDataSystematicsPP[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_DataSystematicsPP");
222 gDataSystematicsPP[j]->SetName(Form(
"%s_%s",gDataSystematicsPP[j]->GetName(),filenamesSuffixes[j]));
223 gDataSystematicsAB[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_DataSystematicsAB");
224 gDataSystematicsAB[j]->SetName(Form(
"%s_%s",gDataSystematicsAB[j]->GetName(),filenamesSuffixes[j]));
225 gRABFeedDownSystematicsElossHypothesis[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_FeedDownSystematicsElossHypothesis");
226 gRABFeedDownSystematicsElossHypothesis[j]->SetName(Form(
"%s_%s",gRABFeedDownSystematicsElossHypothesis[j]->GetName(),filenamesSuffixes[j]));
227 gRAB_GlobalSystematics[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_GlobalSystematics");
228 gRAB_GlobalSystematics[j]->SetName(Form(
"%s_%s",gRAB_GlobalSystematics[j]->GetName(),filenamesSuffixes[j]));
233 const char *pprefhgnames[6] = {
"fhScaledData",
"gScaledDataSystExtrap",
234 "fhScaledSystRebinYieldExtraction",
"fhScaledSystRebinCutVariation",
"fhScaledSystRebinPIDUnc",
"fhScaledSystRebinMCPt"};
235 Bool_t isPPRefExtrap[3] = { isPPRefExtrapD0, isPPRefExtrapDplus, isPPRefExtrapDstar };
236 for(
Int_t j=0; j<3; j++) {
237 if(strcmp(filenamesReference[j],
"")==0) { isDmeson[j]=
false;
continue; }
238 cout<<
" Reading file "<<filenamesReference[j]<<
"..."<<endl;
239 TFile *fRef = TFile::Open(filenamesReference[j],
"read");
241 gScalingUncPP[j]->SetName(Form(
"%s_%s",gScalingUncPP[j]->GetName(),filenamesSuffixes[j]));
242 if(isPPRefExtrap[j]) {
243 hCombinedReferenceFlag[j] = (
TH1I*)fRef->Get(
"hCombinedReferenceFlag");
244 hCombinedReferenceFlag[j]->SetName(Form(
"%s_%s",hCombinedReferenceFlag[j]->GetName(),filenamesSuffixes[j]));
247 const char*hname=
"fhScaledData";
248 if(isPPRefExtrap[j]) hname=
"hReference";
249 hDmesonPPRef[j] = (
TH1D*)fRef->Get(hname);
250 hDmesonPPRef[j]->SetName(Form(
"%s_%s",hDmesonPPRef[j]->GetName(),filenamesSuffixes[j]));
251 hDmesonPPYieldExtrUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[2]);
252 hDmesonPPYieldExtrUnc[j]->SetName(Form(
"%s_%s",hDmesonPPYieldExtrUnc[j]->GetName(),filenamesSuffixes[j]));
253 hDmesonPPCutVarUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[3]);
254 hDmesonPPCutVarUnc[j]->SetName(Form(
"%s_%s",hDmesonPPCutVarUnc[j]->GetName(),filenamesSuffixes[j]));
255 hDmesonPPIDPUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[4]);
256 hDmesonPPIDPUnc[j]->SetName(Form(
"%s_%s",hDmesonPPIDPUnc[j]->GetName(),filenamesSuffixes[j]));
257 hDmesonPPMCPtUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[5]);
258 hDmesonPPMCPtUnc[j]->SetName(Form(
"%s_%s",hDmesonPPMCPtUnc[j]->GetName(),filenamesSuffixes[j]));
263 cout<<
" Getting instances of AliHFSystErr... "<<endl;
266 ppSyst[0] =
new AliHFSystErr(
"ppSyst_Dzero",
"ppSyst_Dzero");
267 ppSyst[1] =
new AliHFSystErr(
"ppSyst_Dplus",
"ppSyst_Dplus");
268 ppSyst[2] =
new AliHFSystErr(
"ppSyst_Dstar",
"ppSyst_Dstar");
269 for(
Int_t j=0; j<3; j++) {
270 if(!isDmeson[j]) {
delete ppSyst[j];
continue; }
271 ppSyst[j]->
Init(j+1);
274 ppTracking[j][ipt]=0.; ppSystRawYield[j][ipt]=0; ppSystCutVar[j][ipt]=0; ppSystPid[j][ipt]=0.;
285 ABSyst[0] =
new AliHFSystErr(
"ABSyst_Dzero",
"ABSyst_Dzero");
286 ABSyst[1] =
new AliHFSystErr(
"ABSyst_Dplus",
"ABSyst_Dplus");
287 ABSyst[2] =
new AliHFSystErr(
"ABSyst_Dstar",
"ABSyst_Dstar");
289 for(
Int_t j=0; j<3; j++) {
305 if(ccestimator==
kV0A) {
310 }
else if (ccestimator==
kZNA) {
315 }
else if (ccestimator==
kCL1) {
322 cout <<
" Error on the pPb options"<<endl;
329 for(
Int_t j=0; j<3; j++) {
330 if(!isDmeson[j]) {
delete ABSyst[j];
continue; }
331 ABSyst[j]->
Init(j+1);
334 ABTracking[j][ipt]=0.; ABSystRawYield[j][ipt]=0; ABSystCutVar[j][ipt]=0; ABSystPid[j][ipt]=0.;
352 Double_t RaaDmesonStat[3]={0.,0.,0.};
353 Double_t RaaDmesonSystLow[3]={0.,0.,0.};
354 Double_t RaaDmesonSystHigh[3]={0.,0.,0.};
358 Double_t ppSystUncorrLow[3]={0.,0.,0.};
359 Double_t ppSystUncorrHigh[3]={0.,0.,0.};
363 Double_t ppSystRawYieldCutVar[3]={0.,0.,0.};
364 Double_t ppSystRawYieldCutVarPid[3]={0.,0.,0.};
367 Double_t ABSystUncorrLow[3]={0.,0.,0.};
368 Double_t ABSystUncorrHigh[3]={0.,0.,0.};
369 Double_t ABSystRawYieldCutVar[3]={0.,0.,0.};
370 Double_t ABSystRawYieldCutVarPid[3]={0.,0.,0.};
372 Double_t RabFdElossLow[3]={0.,0.,0.};
373 Double_t RabFdElossHigh[3]={0.,0.,0.};
374 Double_t RabGlobalLow[3]={0.,0.,0.};
375 Double_t RabGlobalHigh[3]={0.,0.,0.};
377 Double_t average=0., averageStat=0.;
379 Double_t ppTrackingAv=0., ABTrackingAv=0.;
380 Double_t ppDataSystAvLow=0., ppDataSystAvHigh=0.;
381 Double_t ABDataSystAvLow=0., ABDataSystAvHigh=0.;
382 Double_t scalingLowAv=0., scalingHighAv=0.;
383 Double_t raaSystUncorrLow=0., raaSystUncorrHigh=0.;
384 Double_t raabeautyLow=0., raabeautyHigh=0.;
389 if(
isDebug) cout<<
" Retrieving tracking + rawyield systematics"<<endl;
390 for(
Int_t j=0; j<3; j++) {
391 if(!isDmeson[j])
continue;
392 ppSystRawYieldCutVar[j] = TMath::Sqrt( ppSystRawYield[j][ipt]*ppSystRawYield[j][ipt]
393 + ppSystCutVar[j][ipt]*ppSystCutVar[j][ipt] );
394 ppSystRawYieldCutVarPid[j] = TMath::Sqrt( ppSystRawYield[j][ipt]*ppSystRawYield[j][ipt]
395 + ppSystCutVar[j][ipt]*ppSystCutVar[j][ipt]
396 + ppSystPid[j][ipt]*ppSystPid[j][ipt] );
397 ABSystRawYieldCutVar[j] = TMath::Sqrt( ABSystRawYield[j][ipt]*ABSystRawYield[j][ipt]
398 + ABSystCutVar[j][ipt]*ABSystCutVar[j][ipt] );
399 ABSystRawYieldCutVarPid[j] = TMath::Sqrt( ABSystRawYield[j][ipt]*ABSystRawYield[j][ipt]
400 + ABSystCutVar[j][ipt]*ABSystCutVar[j][ipt]
401 + ABSystPid[j][ipt]*ABSystPid[j][ipt] );
402 if(
isDebug) cout<<
" j="<<j<<
" pt="<< ptval<<
" ppref unc RY+CV="<<ppSystRawYieldCutVar[j]<<
" RY+CV+PID="<<ppSystRawYieldCutVarPid[j]<<endl;
403 if(
isDebug) cout<<
" j="<<j<<
" pt="<< ptval<<
" AB unc RY+CV="<<ABSystRawYieldCutVar[j]<<
" RY+CV+PID="<<ABSystRawYieldCutVarPid[j]<<endl;
407 if(
isDebug) cout<<
" Retrieving all pp reference systematics from the rebinned file"<<endl;
408 for(
Int_t j=0; j<3; j++) {
409 if(!isDmeson[j])
continue;
410 Int_t ibin = hDmesonPPRef[j]->FindBin(ptval);
411 Double_t ppval = hDmesonPPRef[j]->GetBinContent(ibin);
412 Double_t rawyield = hDmesonPPYieldExtrUnc[j]->GetBinContent( hDmesonPPYieldExtrUnc[j]->FindBin(ptval) )/ppval;
413 Double_t cutvar = hDmesonPPCutVarUnc[j]->GetBinContent( hDmesonPPCutVarUnc[j]->FindBin(ptval) )/ppval;
414 Double_t pid = hDmesonPPIDPUnc[j]->GetBinContent( hDmesonPPIDPUnc[j]->FindBin(ptval) )/ppval;
415 ppSystRawYieldCutVar[j] = TMath::Sqrt( rawyield*rawyield + cutvar*cutvar );
416 ppSystRawYieldCutVarPid[j] = TMath::Sqrt( rawyield*rawyield + cutvar*cutvar + pid*pid );
417 if(
isDebug) cout<<
"redo j="<<j<<
" pt="<< ptval<<
" ppref unc RY+CV="<<ppSystRawYieldCutVar[j]<<
" RY+CV+PID="<<ppSystRawYieldCutVarPid[j]<<endl;
421 for(
Int_t j=0; j<3; j++) {
422 if(isPPRefExtrap[j]){
424 Int_t ippbin = hCombinedReferenceFlag[j]->FindBin(ptval);
425 Bool_t flag = hCombinedReferenceFlag[j]->GetBinContent(ippbin);
429 Double_t ppSystTotLow=0., ppSystTotHigh=0.;
431 ppSystRawYieldCutVar[j] = ppSystTotLow > ppSystTotHigh ? ppSystTotLow : ppSystTotHigh ;
432 ppSystRawYieldCutVarPid[j] = ppSystRawYieldCutVar[j];
438 if(
isDebug) cout<<
" Retrieving all Raa values and uncertainties"<<endl;
439 for(
Int_t j=0; j<3; j++) {
441 if(!isDmeson[j])
continue;
442 if(!hDmesonRaa[j])
continue;
443 histoBin = hDmesonRaa[j]->FindBin(ptval);
444 RaaDmeson[j] = hDmesonRaa[j]->GetBinContent( histoBin );
445 if (RaaDmeson[j]<=0)
continue;
446 RaaDmesonStat[j] = hDmesonRaa[j]->GetBinError( histoBin );
450 weight[j] =
GetWeight(averageOption,ptval,hDmesonRaa[j],
451 RaaDmesonSystLow[j],RaaDmesonSystHigh[j],
452 ppSystRawYieldCutVar[j],ppSystRawYieldCutVarPid[j],
453 ABSystRawYieldCutVar[j],ABSystRawYieldCutVarPid[j]);
454 cout<<
" raa "<<filenamesSuffixes[j]<<
" meson = "<<RaaDmeson[j]<<
" +-"<<RaaDmesonStat[j]<<
"(stat) -> (weight="<<weight[j]<<
") ,";
459 if(isPPRefExtrap[j]){
460 Int_t ippbin = hCombinedReferenceFlag[j]->FindBin(ptval);
461 Bool_t flag = hCombinedReferenceFlag[j]->GetBinContent(ippbin);
462 if(
isDebug) cout<<
" bin="<<j<<
" pp ref flag on? "<<flag<<endl;
463 if(flag){ ScalingHigh[j]=0.; ScalingLow[j]=0.; ppTracking[j][ipt]=0.; }
466 ppSystUncorrLow[j] = TMath::Sqrt( ppSystLow[j]*ppSystLow[j]
467 - ScalingLow[j]*ScalingLow[j]
468 - ppTracking[j][ipt]*ppTracking[j][ipt] );
469 ppSystUncorrHigh[j] = TMath::Sqrt( ppSystHigh[j]*ppSystHigh[j]
470 - ScalingHigh[j]*ScalingHigh[j]
471 - ppTracking[j][ipt]*ppTracking[j][ipt] );
475 ABSystUncorrLow[j] = TMath::Sqrt( ABSystLow[j]*ABSystLow[j]
476 - ABTracking[j][ipt]*ABTracking[j][ipt] );
477 ABSystUncorrHigh[j] = TMath::Sqrt( ABSystHigh[j]*ABSystHigh[j]
478 - ABTracking[j][ipt]*ABTracking[j][ipt] );
480 FindGraphRelativeUnc(gRABFeedDownSystematicsElossHypothesis[j],ptval,RabFdElossLow[j],RabFdElossHigh[j]);
484 Double_t testLow = TMath::Sqrt( RabFdElossLow[j]*RabFdElossLow[j] + ABSystLow[j]*ABSystLow[j]
485 + ppSystLow[j]*ppSystLow[j] + ScalingLow[j]*ScalingLow[j] );
486 Double_t testHigh = TMath::Sqrt( RabFdElossHigh[j]*RabFdElossHigh[j] + ABSystHigh[j]*ABSystHigh[j]
487 + ppSystHigh[j]*ppSystHigh[j] + ScalingHigh[j]*ScalingHigh[j] );
488 if (TMath::Abs( testLow - RabGlobalLow[j] ) > 0.015) {
489 cout << endl<<
" >>>> Error on the global Raa uncertainties low : test-sum = "<< testLow<<
", global = "<< RabGlobalLow[j]<<
" ppref="<<ppSystLow[j]<<endl;
491 if (TMath::Abs( testHigh - RabGlobalHigh[j] ) > 0.015) {
492 cout << endl<<
" >>>> Error on the global Raa uncertainties high : test-sum = "<< testHigh<<
", global = "<< RabGlobalHigh[j]<<
" ppref="<<ppSystHigh[j]<<endl<<endl;
502 if(
isDebug) cout<<
" Evaluating the average"<<endl;
503 for(
Int_t j=0; j<3; j++){
504 if(!isDmeson[j])
continue;
505 if( !(RaaDmeson[j]>0.) )
continue;
506 weightTot += weight[j];
508 average += RaaDmeson[j]*weight[j];
510 averageStat += (RaaDmesonStat[j]*weight[j])*(RaaDmesonStat[j]*weight[j]);
512 ppTrackingAv += ppTracking[j][ipt]*RaaDmeson[j]*weight[j];
514 ABTrackingAv += ABTracking[j][ipt]*RaaDmeson[j]*weight[j];
516 scalingLowAv += ScalingLow[j]*RaaDmeson[j]*weight[j];
517 scalingHighAv += ScalingHigh[j]*RaaDmeson[j]*weight[j];
519 raaSystUncorrLow += (ppSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrLow[j]*RaaDmeson[j]*weight[j])
520 + (ABSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrLow[j]*RaaDmeson[j]*weight[j]);
521 raaSystUncorrHigh += (ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j])
522 + (ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j]);
523 ppDataSystAvLow += (ppSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrLow[j]*RaaDmeson[j]*weight[j]);
524 ABDataSystAvLow += (ABSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrLow[j]*RaaDmeson[j]*weight[j]);
525 ppDataSystAvHigh += (ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j]);
526 ABDataSystAvHigh += (ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j]);
528 raabeautyLow += (1-RabFdElossLow[j])*RaaDmeson[j]*weight[j];
529 raabeautyHigh += (1+RabFdElossHigh[j])*RaaDmeson[j]*weight[j];
531 average /= weightTot;
532 averageStat = TMath::Sqrt(averageStat)/weightTot;
533 ppTrackingAv /= weightTot;
534 ABTrackingAv /= weightTot;
535 scalingLowAv /= weightTot;
536 scalingHighAv /= weightTot;
537 raaSystUncorrLow = TMath::Sqrt(raaSystUncorrLow)/weightTot;
538 raaSystUncorrHigh = TMath::Sqrt(raaSystUncorrHigh)/weightTot;
539 ppDataSystAvLow = TMath::Sqrt(ppDataSystAvLow)/weightTot;
540 ppDataSystAvHigh = TMath::Sqrt(ppDataSystAvHigh)/weightTot;
541 ABDataSystAvLow = TMath::Sqrt(ABDataSystAvLow)/weightTot;
542 ABDataSystAvHigh = TMath::Sqrt(ABDataSystAvHigh)/weightTot;
545 raabeautyLow /= weightTot;
546 raabeautyHigh /= weightTot;
547 Double_t RaaBeauty[3] = { average, raabeautyLow, raabeautyHigh };
548 Double_t beautyUncLow = average-TMath::MinElement(3,RaaBeauty);
549 Double_t beautyUncHigh = TMath::MaxElement(3,RaaBeauty)-average;
552 Double_t totalUncLow = TMath::Sqrt( raaSystUncorrLow*raaSystUncorrLow
553 + ppTrackingAv*ppTrackingAv + ABTrackingAv*ABTrackingAv
554 + scalingLowAv*scalingLowAv
555 + beautyUncLow*beautyUncLow );
556 Double_t totalUncHigh = TMath::Sqrt( raaSystUncorrHigh*raaSystUncorrHigh
557 + ppTrackingAv*ppTrackingAv + ABTrackingAv*ABTrackingAv
558 + scalingHighAv*scalingHighAv
559 + beautyUncHigh*beautyUncHigh );
560 if(
isDebug) cout<<
" Raa="<<average<<
" +-"<<averageStat<<
"(stat) +"<<ppDataSystAvHigh<<
" -"<<ppDataSystAvLow<<
" (pp-data) +-"<<ppTrackingAv<<
" (pp-track) +"<<ABDataSystAvHigh<<
" -"<<ABDataSystAvLow<<
" (ab-data) +-"<<ABTrackingAv<<
" (ab-track) +"<<scalingHighAv<<
" -"<<scalingLowAv<<
" (scal) +"<<beautyUncHigh<<
" -"<<beautyUncLow<<
" (fd)"<<endl;
564 histoBin = hDmesonAverageRAB->FindBin(ptval);
565 hDmesonAverageRAB->SetBinContent(histoBin,average);
566 hDmesonAverageRAB->SetBinError(histoBin,averageStat);
567 Double_t ept = hDmesonAverageRAB->GetBinWidth(histoBin)/2.;
569 gRAB_DmesonAverage_GlobalSystematics->SetPoint(ipt,ptval,average);
570 gRAB_DmesonAverage_GlobalSystematics->SetPointError(ipt,ept,ept,totalUncLow,totalUncHigh);
572 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetPoint(ipt,ptval,average);
573 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetPointError(ipt,ept,ept,beautyUncLow,beautyUncHigh);
576 gRAB_DmesonAverage_TrackingSystematicsPP->SetPoint(ipt,ptval,average);
577 gRAB_DmesonAverage_TrackingSystematicsPP->SetPointError(ipt,ept,ept,ppTrackingAv,ppTrackingAv);
578 gRAB_DmesonAverage_TrackingSystematicsAB->SetPoint(ipt,ptval,average);
579 gRAB_DmesonAverage_TrackingSystematicsAB->SetPointError(ipt,ept,ept,ABTrackingAv,ABTrackingAv);
580 gRAB_DmesonAverage_ScalingSystematicsPP->SetPoint(ipt,ptval,average);
581 gRAB_DmesonAverage_ScalingSystematicsPP->SetPointError(ipt,ept,ept,scalingLowAv,scalingHighAv);
582 gRAB_DmesonAverage_DataSystematicsPP->SetPoint(ipt,ptval,average);
583 gRAB_DmesonAverage_DataSystematicsPP->SetPointError(ipt,ept,ept,ppDataSystAvLow,ppDataSystAvHigh);
584 gRAB_DmesonAverage_DataSystematicsAB->SetPoint(ipt,ptval,average);
585 gRAB_DmesonAverage_DataSystematicsAB->SetPointError(ipt,ept,ept,ABDataSystAvLow,ABDataSystAvHigh);
589 cout<<
" pt min (GeV/c), pt max (GeV/c), Raa(Daverage), +- (stat), + (syst) , - (syst) "<<endl;
590 cout<<
ptbinlimits[ipt] <<
" "<<
ptbinlimits[ipt+1]<<
" "<< average<<
" "<< averageStat<<
" "<< totalUncHigh<<
" "<<totalUncLow<<endl;
591 fprintf(resultFile,
"%02.0f %02.0f %2.2f %2.2f %2.2f %2.2f\n",
ptbinlimits[ipt],
ptbinlimits[ipt+1],average,averageStat,totalUncHigh,totalUncLow);
599 TCanvas *cAvCheck =
new TCanvas(
"cAvCheck",
"Average Dmeson check");
600 hDmesonAverageRAB->SetLineColor(kBlack);
601 hDmesonAverageRAB->SetMarkerStyle(20);
602 hDmesonAverageRAB->SetMarkerColor(kBlack);
603 hDmesonAverageRAB->Draw(
"e");
604 for(
Int_t j=0; j<3; j++) {
605 if(!isDmeson[j])
continue;
606 hDmesonRaa[j]->SetLineColor(kBlack);
607 hDmesonRaa[j]->SetMarkerColor(2+j);
608 hDmesonRaa[j]->SetMarkerStyle(21+j);
609 gRAB_GlobalSystematics[j]->SetFillStyle(0);
610 gRAB_GlobalSystematics[j]->SetLineColor(2+j);
611 gRAB_GlobalSystematics[j]->Draw(
"2");
612 hDmesonRaa[j]->Draw(
"esame");
614 gRAB_DmesonAverage_GlobalSystematics->SetFillStyle(0);
615 gRAB_DmesonAverage_GlobalSystematics->SetLineColor(kBlack);
616 gRAB_DmesonAverage_GlobalSystematics->Draw(
"2");
617 hDmesonAverageRAB->Draw(
"esame");
620 TCanvas *cAv =
new TCanvas(
"cAv",
"Average Dmeson");
621 hDmesonAverageRAB->Draw(
"e");
622 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetFillStyle(1001);
623 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetFillColor(kMagenta-7);
624 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->Draw(
"2");
625 gRAB_DmesonAverage_GlobalSystematics->Draw(
"2");
626 hDmesonAverageRAB->Draw(
"esame");
632 TFile *
fout =
new TFile(outfile,
"recreate");
633 hDmesonAverageRAB->Write();
635 gRAB_DmesonAverage_GlobalSystematics->Write();
636 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->Write();
637 gRAB_DmesonAverage_TrackingSystematicsPP->Write();
638 gRAB_DmesonAverage_TrackingSystematicsAB->Write();
639 gRAB_DmesonAverage_ScalingSystematicsPP->Write();
640 gRAB_DmesonAverage_DataSystematicsPP->Write();
641 gRAB_DmesonAverage_DataSystematicsAB->Write();
Double_t GetWeight(Int_t averageoption, Double_t pt, TH1D *hRaa, Double_t raaSystLow, Double_t raaSystHigh, Double_t ppSystRawYieldCutVar, Double_t ppSystRawYieldCutVarPid, Double_t ABSystRawYieldCutVar, Double_t ABSystRawYieldCutVarPid)
Double_t ptbinlimits[nbins+1]
void FindGraphRelativeUnc(TGraphAsymmErrors *gr, Double_t pt, Double_t &uncLow, Double_t &uncHigh)
void SetCentrality(TString centrality)
void SetIsPbPb2010EnergyScan(Bool_t flag)
Double_t GetCutsEffErr(Double_t pt) const
Int_t FindGraphBin(TGraphAsymmErrors *gr, Double_t pt)
Double_t GetTrackingEffErr(Double_t pt) const
void AverageDmesonRaa(const char *fD0Raa="", const char *fD0ppRef="", const char *fDplusRaa="", const char *fDplusppRef="", const char *fDstarRaa="", const char *fDstarppRef="", const char *outfile="", Int_t averageOption=kRelativeStatUnc, Int_t cc=kpPb0100, Int_t ccestimator=kV0M, Bool_t isReadAllPPUnc=false, Bool_t isPPRefExtrapD0=false, Bool_t isPPRefExtrapDplus=false, Bool_t isPPRefExtrapDstar=false)
void Init(Int_t decay)
Function to initialize the variables/histograms.
Double_t GetRawYieldErr(Double_t pt) const
void SetCollisionType(Int_t type)
TFile * fout
input train file
Double_t GetPIDEffErr(Double_t pt) const