1 #if !defined(__CINT__) || defined(__MAKECINT__) 10 #include "TGraphAsymmErrors.h" 20 #include <Riostream.h> 72 enum centrality{
kpp,
k07half,
kpPb0100,
k010,
k1020,
k020,
k2040,
k2030,
k3040,
k4050,
k3050,
k5060,
k4060,
k6080,
k4080,
k5080,
k80100,
kpPb020,
kpPb2040,
kpPb4060,
kpPb60100 };
79 Int_t npoints = gr->GetN();
80 for(
Int_t i=0; i<=npoints; i++){
83 if ( TMath::Abs ( x - pt ) < 0.4 ) {
94 Int_t npoints = gr->GetN();
96 for(
Int_t i=0; i<=npoints; i++){
98 if ( TMath::Abs ( x - pt ) < 0.4 ) {
104 uncLow=0.; uncHigh=0.;
107 uncLow = gr->GetErrorYlow(istart)/y;
108 uncHigh = gr->GetErrorYhigh(istart)/y;
122 Int_t hbin = hRaa->FindBin(pt);
124 Double_t stat = hRaa->GetBinError(hbin);
125 Double_t relativeStat = stat / hRaa->GetBinContent(hbin);
129 weightStat = relativeStat;
135 weightStat = relativeStat;
136 relativeSyst = TMath::Sqrt( ppSystRawYieldCutVar*ppSystRawYieldCutVar + ABSystRawYieldCutVar*ABSystRawYieldCutVar );
139 weightStat = relativeStat;
140 relativeSyst = TMath::Sqrt( ppSystRawYieldCutVarPid*ppSystRawYieldCutVarPid + ABSystRawYieldCutVar*ABSystRawYieldCutVarPid );
143 weightStat = relativeStat;
144 relativeSyst = TMath::Sqrt( ppSystRawYield*ppSystRawYield + ABSystRawYield*ABSystRawYield );
147 weightStat = relativeStat;
148 relativeSyst = raaSystHigh>raaSystLow ? raaSystHigh : raaSystLow;
152 weight = TMath::Sqrt( weightStat*weightStat + relativeSyst*relativeSyst );
155 return (1.0/(weight*weight));
161 const char* fDplusRaa=
"",
const char* fDplusppRef=
"",
162 const char* fDstarRaa=
"",
const char* fDstarppRef=
"",
164 Bool_t isReadAllPPUnc=
false,
Bool_t isPPRefExtrapD0=
false,
Bool_t isPPRefExtrapDplus=
false,
Bool_t isPPRefExtrapDstar=
false)
169 if(fD0Raa) foutname +=
"Dzero";
170 if(fDplusRaa) foutname +=
"Dplus";
171 if(fDstarRaa) foutname +=
"Dstar";
178 TString ndate = Form(
"%02d%02d%04d",d.GetDay(),d.GetMonth(),d.GetYear());
179 resultFile = fopen( Form(
"%s_result_%s.txt",foutname.Data(),ndate.Data()),
"w");
180 fprintf(resultFile,
"Ptmin (GeV/c) Ptmax (GeV/c) Raa(Daverage) +-(stat) +(syst) - (syst) \n\n");
185 TH1I *hCombinedReferenceFlag[3];
190 TH1D *hDmesonPPRef[3], *hDmesonPPYieldExtrUnc[3], *hDmesonPPCutVarUnc[3], *hDmesonPPIDPUnc[3], *hDmesonPPMCPtUnc[3];
202 gRAB_DmesonAverage_GlobalSystematics->SetNameTitle(
"gRAB_DmesonAverage_GlobalSystematics",
"DmesonAverage GlobalSystematics");
203 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetNameTitle(
"gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis",
"DmesonAverage FeedDownSystematicsElossHypothesis");
204 gRAB_DmesonAverage_ScalingSystematicsPP->SetNameTitle(
"gRAB_DmesonAverage_ScalingSystematicsPP",
"DmesonAverage Scaling uncertainty PP");
205 gRAB_DmesonAverage_DataSystematicsPP->SetNameTitle(
"gRAB_DmesonAverage_DataSystematicsPP",
"DmesonRaaAverage DataSystematicsPP - tracking uncertainty PP");
206 gRAB_DmesonAverage_DataSystematicsAB->SetNameTitle(
"gRAB_DmesonAverage_DataSystematicsAB",
"DmesonRaaAverage DataSystematicsAB - tracking uncertainty AB");
207 gRAB_DmesonAverage_TrackingSystematicsPP->SetNameTitle(
"gRAB_DmesonAverage_TrackingSystematicsPP",
"DmesonRaaAverage tracking uncertainty PP");
208 gRAB_DmesonAverage_TrackingSystematicsAB->SetNameTitle(
"gRAB_DmesonAverage_TrackingSystematicsAB",
"DmesonRaaAverage tracking uncertainty AB");
211 const char *filenamesRaa[3] = { fD0Raa, fDplusRaa, fDstarRaa };
212 const char *filenamesReference[3] = { fD0ppRef, fDplusppRef, fDstarppRef };
213 const char *filenamesSuffixes[3] = {
"Dzero",
"Dplus",
"Dstar" };
214 Bool_t isDmeson[3] = {
true,
true,
true };
216 if(strcmp(filenamesRaa[0],
"")==0) { cout<<
" Dzero not set, error"<<endl;
return; }
225 for(
Int_t j=0; j<3; j++) {
226 if(strcmp(filenamesRaa[j],
"")==0) { isDmeson[j]=
false;
continue; }
227 cout<<
" Reading file "<<filenamesRaa[j]<<
"..."<<endl;
228 TFile *fDRaa = TFile::Open(filenamesRaa[j],
"read");
229 if(!fDRaa){ cout<<
" Error on file !!!!!"<<filenamesRaa[j]<<endl;
return; }
230 hDmesonRaa[j] = (
TH1D*)fDRaa->Get(
"hRABvsPt");
231 hDmesonRaa[j]->SetName(Form(
"%s_%s",hDmesonRaa[j]->GetName(),filenamesSuffixes[j]));
237 gDataSystematicsPP[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_DataSystematicsPP");
238 gDataSystematicsPP[j]->SetName(Form(
"%s_%s",gDataSystematicsPP[j]->GetName(),filenamesSuffixes[j]));
239 gDataSystematicsAB[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_DataSystematicsAB");
240 gDataSystematicsAB[j]->SetName(Form(
"%s_%s",gDataSystematicsAB[j]->GetName(),filenamesSuffixes[j]));
241 gRABFeedDownSystematicsElossHypothesis[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_FeedDownSystematicsElossHypothesis");
242 gRABFeedDownSystematicsElossHypothesis[j]->SetName(Form(
"%s_%s",gRABFeedDownSystematicsElossHypothesis[j]->GetName(),filenamesSuffixes[j]));
243 gRAB_GlobalSystematics[j] = (
TGraphAsymmErrors*)fDRaa->Get(
"gRAB_GlobalSystematics");
244 gRAB_GlobalSystematics[j]->SetName(Form(
"%s_%s",gRAB_GlobalSystematics[j]->GetName(),filenamesSuffixes[j]));
245 Bool_t shouldDelete=kFALSE;
246 if(fDRaa->Get(
"AliHFSystErrPP")){
248 printf(
"AliHFSystErr object for meson %d in pp (%s) read from HFPtSpectrumRaa output file\n",j,ppSyst[j]->GetTitle());
250 printf(
"Create instance of AliHFSystErr for meson %d in pp \n",j);
251 ppSyst[j] =
new AliHFSystErr(Form(
"ppSyst_%d",j),Form(
"ppSyst_%d",j));
253 ppSyst[j]->
Init(j+1);
258 ppTracking[j][ipt]=0.; ppSystRawYield[j][ipt]=0; ppSystCutVar[j][ipt]=0; ppSystPid[j][ipt]=0.;
264 if(shouldDelete)
delete ppSyst[j];
266 if(fDRaa->Get(
"AliHFSystErrAA")){
268 printf(
"AliHFSystErr object for meson %d in AA (%s) read from HFPtSpectrumRaa output file\n",j,ppSyst[j]->GetTitle());
270 printf(
"Create instance of AliHFSystErr for meson %d in AA \n",j);
271 ABSyst[j] =
new AliHFSystErr(Form(
"ABSyst_%d",j),Form(
"ABSyst_%d",j));
287 if(ccestimator==
kV0A) {
292 }
else if (ccestimator==
kZNA) {
297 }
else if (ccestimator==
kCL1) {
304 cout <<
" Error on the pPb options"<<endl;
309 ABSyst[j]->
Init(j+1);
314 ABTracking[j][ipt]=0.; ABSystRawYield[j][ipt]=0; ABSystCutVar[j][ipt]=0; ABSystPid[j][ipt]=0.;
320 if(shouldDelete)
delete ABSyst[j];
326 const char *pprefhgnames[6] = {
"fhScaledData",
"gScaledDataSystExtrap",
327 "fhScaledSystRebinYieldExtraction",
"fhScaledSystRebinCutVariation",
"fhScaledSystRebinPIDUnc",
"fhScaledSystRebinMCPt"};
328 Bool_t isPPRefExtrap[3] = { isPPRefExtrapD0, isPPRefExtrapDplus, isPPRefExtrapDstar };
329 for(
Int_t j=0; j<3; j++) {
330 if(strcmp(filenamesReference[j],
"")==0) { isDmeson[j]=
false;
continue; }
331 cout<<
" Reading file "<<filenamesReference[j]<<
"..."<<endl;
332 TFile *fRef = TFile::Open(filenamesReference[j],
"read");
334 gScalingUncPP[j]->SetName(Form(
"%s_%s",gScalingUncPP[j]->GetName(),filenamesSuffixes[j]));
335 if(isPPRefExtrap[j]) {
336 hCombinedReferenceFlag[j] = (
TH1I*)fRef->Get(
"hCombinedReferenceFlag");
337 hCombinedReferenceFlag[j]->SetName(Form(
"%s_%s",hCombinedReferenceFlag[j]->GetName(),filenamesSuffixes[j]));
340 const char*hname=
"fhScaledData";
341 if(isPPRefExtrap[j]) hname=
"hReference";
342 hDmesonPPRef[j] = (
TH1D*)fRef->Get(hname);
343 hDmesonPPRef[j]->SetName(Form(
"%s_%s",hDmesonPPRef[j]->GetName(),filenamesSuffixes[j]));
344 hDmesonPPYieldExtrUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[2]);
345 hDmesonPPYieldExtrUnc[j]->SetName(Form(
"%s_%s",hDmesonPPYieldExtrUnc[j]->GetName(),filenamesSuffixes[j]));
346 hDmesonPPCutVarUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[3]);
347 hDmesonPPCutVarUnc[j]->SetName(Form(
"%s_%s",hDmesonPPCutVarUnc[j]->GetName(),filenamesSuffixes[j]));
348 hDmesonPPIDPUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[4]);
349 hDmesonPPIDPUnc[j]->SetName(Form(
"%s_%s",hDmesonPPIDPUnc[j]->GetName(),filenamesSuffixes[j]));
350 hDmesonPPMCPtUnc[j] = (
TH1D*)fRef->Get(pprefhgnames[5]);
351 hDmesonPPMCPtUnc[j]->SetName(Form(
"%s_%s",hDmesonPPMCPtUnc[j]->GetName(),filenamesSuffixes[j]));
365 Double_t RaaDmesonStat[3]={0.,0.,0.};
366 Double_t RaaDmesonSystLow[3]={0.,0.,0.};
367 Double_t RaaDmesonSystHigh[3]={0.,0.,0.};
371 Double_t ppSystUncorrLow[3]={0.,0.,0.};
372 Double_t ppSystUncorrHigh[3]={0.,0.,0.};
376 Double_t ppSystRawYieldOnly[3]={0.,0.,0.};
377 Double_t ppSystRawYieldCutVar[3]={0.,0.,0.};
378 Double_t ppSystRawYieldCutVarPid[3]={0.,0.,0.};
381 Double_t ABSystUncorrLow[3]={0.,0.,0.};
382 Double_t ABSystUncorrHigh[3]={0.,0.,0.};
383 Double_t ABSystRawYieldOnly[3]={0.,0.,0.};
384 Double_t ABSystRawYieldCutVar[3]={0.,0.,0.};
385 Double_t ABSystRawYieldCutVarPid[3]={0.,0.,0.};
387 Double_t RabFdElossLow[3]={0.,0.,0.};
388 Double_t RabFdElossHigh[3]={0.,0.,0.};
389 Double_t RabGlobalLow[3]={0.,0.,0.};
390 Double_t RabGlobalHigh[3]={0.,0.,0.};
392 Double_t average=0., averageStat=0.;
394 Double_t ppTrackingAv=0., ABTrackingAv=0.;
395 Double_t ppDataSystAvLow=0., ppDataSystAvHigh=0.;
396 Double_t ABDataSystAvLow=0., ABDataSystAvHigh=0.;
397 Double_t scalingLowAv=0., scalingHighAv=0.;
398 Double_t raaSystUncorrLow=0., raaSystUncorrHigh=0.;
399 Double_t raabeautyLow=0., raabeautyHigh=0.;
404 if(
isDebug) cout<<
" Retrieving tracking + rawyield systematics"<<endl;
405 for(
Int_t j=0; j<3; j++) {
406 if(!isDmeson[j])
continue;
407 ppSystRawYieldOnly[j] = ppSystRawYield[j][ipt];
408 ppSystRawYieldCutVar[j] = TMath::Sqrt( ppSystRawYield[j][ipt]*ppSystRawYield[j][ipt]
409 + ppSystCutVar[j][ipt]*ppSystCutVar[j][ipt] );
410 ppSystRawYieldCutVarPid[j] = TMath::Sqrt( ppSystRawYield[j][ipt]*ppSystRawYield[j][ipt]
411 + ppSystCutVar[j][ipt]*ppSystCutVar[j][ipt]
412 + ppSystPid[j][ipt]*ppSystPid[j][ipt] );
413 ABSystRawYieldOnly[j] = ABSystRawYield[j][ipt];
414 ABSystRawYieldCutVar[j] = TMath::Sqrt( ABSystRawYield[j][ipt]*ABSystRawYield[j][ipt]
415 + ABSystCutVar[j][ipt]*ABSystCutVar[j][ipt] );
416 ABSystRawYieldCutVarPid[j] = TMath::Sqrt( ABSystRawYield[j][ipt]*ABSystRawYield[j][ipt]
417 + ABSystCutVar[j][ipt]*ABSystCutVar[j][ipt]
418 + ABSystPid[j][ipt]*ABSystPid[j][ipt] );
419 if(
isDebug) cout<<
" j="<<j<<
" pt="<< ptval<<
" ppref unc RY+CV="<<ppSystRawYieldCutVar[j]<<
" RY+CV+PID="<<ppSystRawYieldCutVarPid[j]<<endl;
420 if(
isDebug) cout<<
" j="<<j<<
" pt="<< ptval<<
" AB unc RY+CV="<<ABSystRawYieldCutVar[j]<<
" RY+CV+PID="<<ABSystRawYieldCutVarPid[j]<<endl;
424 if(
isDebug) cout<<
" Retrieving all pp reference systematics from the rebinned file"<<endl;
425 for(
Int_t j=0; j<3; j++) {
426 if(!isDmeson[j])
continue;
427 Int_t ibin = hDmesonPPRef[j]->FindBin(ptval);
428 Double_t ppval = hDmesonPPRef[j]->GetBinContent(ibin);
429 Double_t rawyield = hDmesonPPYieldExtrUnc[j]->GetBinContent( hDmesonPPYieldExtrUnc[j]->FindBin(ptval) )/ppval;
430 Double_t cutvar = hDmesonPPCutVarUnc[j]->GetBinContent( hDmesonPPCutVarUnc[j]->FindBin(ptval) )/ppval;
431 Double_t pid = hDmesonPPIDPUnc[j]->GetBinContent( hDmesonPPIDPUnc[j]->FindBin(ptval) )/ppval;
432 ppSystRawYieldCutVar[j] = TMath::Sqrt( rawyield*rawyield + cutvar*cutvar );
433 ppSystRawYieldCutVarPid[j] = TMath::Sqrt( rawyield*rawyield + cutvar*cutvar + pid*pid );
434 if(
isDebug) cout<<
"redo j="<<j<<
" pt="<< ptval<<
" ppref unc RY+CV="<<ppSystRawYieldCutVar[j]<<
" RY+CV+PID="<<ppSystRawYieldCutVarPid[j]<<endl;
438 for(
Int_t j=0; j<3; j++) {
439 if(isPPRefExtrap[j]){
441 Int_t ippbin = hCombinedReferenceFlag[j]->FindBin(ptval);
442 Bool_t flag = hCombinedReferenceFlag[j]->GetBinContent(ippbin);
446 Double_t ppSystTotLow=0., ppSystTotHigh=0.;
448 ppSystRawYieldCutVar[j] = ppSystTotLow > ppSystTotHigh ? ppSystTotLow : ppSystTotHigh ;
449 ppSystRawYieldCutVarPid[j] = ppSystRawYieldCutVar[j];
450 ppSystRawYieldOnly[j] = ppSystRawYieldCutVar[j];
456 if(
isDebug) cout<<
" Retrieving all Raa values and uncertainties"<<endl;
457 for(
Int_t j=0; j<3; j++) {
459 if(!isDmeson[j])
continue;
460 if(!hDmesonRaa[j])
continue;
461 histoBin = hDmesonRaa[j]->FindBin(ptval);
462 RaaDmeson[j] = hDmesonRaa[j]->GetBinContent( histoBin );
463 if (RaaDmeson[j]<=0)
continue;
464 RaaDmesonStat[j] = hDmesonRaa[j]->GetBinError( histoBin );
468 weight[j] =
GetWeight(averageOption,ptval,hDmesonRaa[j],
469 RaaDmesonSystLow[j],RaaDmesonSystHigh[j],
470 ppSystRawYieldOnly[j],ppSystRawYieldCutVar[j],ppSystRawYieldCutVarPid[j],
471 ABSystRawYieldOnly[j],ABSystRawYieldCutVar[j],ABSystRawYieldCutVarPid[j]);
472 cout<<
" raa "<<filenamesSuffixes[j]<<
" meson = "<<RaaDmeson[j]<<
" +-"<<RaaDmesonStat[j]<<
"(stat) -> (weight="<<weight[j]<<
") ,";
477 if(isPPRefExtrap[j]){
478 Int_t ippbin = hCombinedReferenceFlag[j]->FindBin(ptval);
479 Bool_t flag = hCombinedReferenceFlag[j]->GetBinContent(ippbin);
480 if(
isDebug) cout<<
" bin="<<j<<
" pp ref flag on? "<<flag;
481 if(flag){ ScalingHigh[j]=0.; ScalingLow[j]=0.; ppTracking[j][ipt]=0.; }
484 cout<<
"weight set to 0";
488 ppSystUncorrLow[j] = TMath::Sqrt( ppSystLow[j]*ppSystLow[j]
489 - ScalingLow[j]*ScalingLow[j]
490 - ppTracking[j][ipt]*ppTracking[j][ipt] );
491 ppSystUncorrHigh[j] = TMath::Sqrt( ppSystHigh[j]*ppSystHigh[j]
492 - ScalingHigh[j]*ScalingHigh[j]
493 - ppTracking[j][ipt]*ppTracking[j][ipt] );
497 ABSystUncorrLow[j] = TMath::Sqrt( ABSystLow[j]*ABSystLow[j]
498 - ABTracking[j][ipt]*ABTracking[j][ipt] );
499 ABSystUncorrHigh[j] = TMath::Sqrt( ABSystHigh[j]*ABSystHigh[j]
500 - ABTracking[j][ipt]*ABTracking[j][ipt] );
502 FindGraphRelativeUnc(gRABFeedDownSystematicsElossHypothesis[j],ptval,RabFdElossLow[j],RabFdElossHigh[j]);
506 Double_t testLow = TMath::Sqrt( RabFdElossLow[j]*RabFdElossLow[j] + ABSystLow[j]*ABSystLow[j]
507 + ppSystLow[j]*ppSystLow[j] + ScalingLow[j]*ScalingLow[j] );
508 Double_t testHigh = TMath::Sqrt( RabFdElossHigh[j]*RabFdElossHigh[j] + ABSystHigh[j]*ABSystHigh[j]
509 + ppSystHigh[j]*ppSystHigh[j] + ScalingHigh[j]*ScalingHigh[j] );
510 if (TMath::Abs( testLow - RabGlobalLow[j] ) > 0.015) {
511 cout << endl<<
" >>>> Error on the global Raa uncertainties low : test-sum = "<< testLow<<
", global = "<< RabGlobalLow[j]<<
" ppref="<<ppSystLow[j]<<endl;
513 if (TMath::Abs( testHigh - RabGlobalHigh[j] ) > 0.015) {
514 cout << endl<<
" >>>> Error on the global Raa uncertainties high : test-sum = "<< testHigh<<
", global = "<< RabGlobalHigh[j]<<
" ppref="<<ppSystHigh[j]<<endl<<endl;
525 if(
isDebug) cout<<
" Evaluating the average"<<endl;
526 for(
Int_t j=0; j<3; j++){
527 if(!isDmeson[j])
continue;
528 if( !(RaaDmeson[j]>0.) )
continue;
529 weightTot += weight[j];
531 average += RaaDmeson[j]*weight[j];
533 averageStat += (RaaDmesonStat[j]*weight[j])*(RaaDmesonStat[j]*weight[j]);
535 ppTrackingAv += ppTracking[j][ipt]*RaaDmeson[j]*weight[j];
537 ABTrackingAv += ABTracking[j][ipt]*RaaDmeson[j]*weight[j];
539 scalingLowAv += ScalingLow[j]*RaaDmeson[j]*weight[j];
540 scalingHighAv += ScalingHigh[j]*RaaDmeson[j]*weight[j];
542 raaSystUncorrLow += (ppSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrLow[j]*RaaDmeson[j]*weight[j])
543 + (ABSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrLow[j]*RaaDmeson[j]*weight[j]);
544 raaSystUncorrHigh += (ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j])
545 + (ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j]);
546 ppDataSystAvLow += (ppSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrLow[j]*RaaDmeson[j]*weight[j]);
547 ABDataSystAvLow += (ABSystUncorrLow[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrLow[j]*RaaDmeson[j]*weight[j]);
548 ppDataSystAvHigh += (ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ppSystUncorrHigh[j]*RaaDmeson[j]*weight[j]);
549 ABDataSystAvHigh += (ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j])*(ABSystUncorrHigh[j]*RaaDmeson[j]*weight[j]);
551 raabeautyLow += (1-RabFdElossLow[j])*RaaDmeson[j]*weight[j];
552 raabeautyHigh += (1+RabFdElossHigh[j])*RaaDmeson[j]*weight[j];
554 average /= weightTot;
555 averageStat = TMath::Sqrt(averageStat)/weightTot;
556 ppTrackingAv /= weightTot;
557 ABTrackingAv /= weightTot;
558 scalingLowAv /= weightTot;
559 scalingHighAv /= weightTot;
560 raaSystUncorrLow = TMath::Sqrt(raaSystUncorrLow)/weightTot;
561 raaSystUncorrHigh = TMath::Sqrt(raaSystUncorrHigh)/weightTot;
562 ppDataSystAvLow = TMath::Sqrt(ppDataSystAvLow)/weightTot;
563 ppDataSystAvHigh = TMath::Sqrt(ppDataSystAvHigh)/weightTot;
564 ABDataSystAvLow = TMath::Sqrt(ABDataSystAvLow)/weightTot;
565 ABDataSystAvHigh = TMath::Sqrt(ABDataSystAvHigh)/weightTot;
568 raabeautyLow /= weightTot;
569 raabeautyHigh /= weightTot;
570 Double_t RaaBeauty[3] = { average, raabeautyLow, raabeautyHigh };
571 Double_t beautyUncLow = average-TMath::MinElement(3,RaaBeauty);
572 Double_t beautyUncHigh = TMath::MaxElement(3,RaaBeauty)-average;
575 Double_t totalUncLow = TMath::Sqrt( raaSystUncorrLow*raaSystUncorrLow
576 + ppTrackingAv*ppTrackingAv + ABTrackingAv*ABTrackingAv
577 + scalingLowAv*scalingLowAv
578 + beautyUncLow*beautyUncLow );
579 Double_t totalUncHigh = TMath::Sqrt( raaSystUncorrHigh*raaSystUncorrHigh
580 + ppTrackingAv*ppTrackingAv + ABTrackingAv*ABTrackingAv
581 + scalingHighAv*scalingHighAv
582 + beautyUncHigh*beautyUncHigh );
583 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;
587 histoBin = hDmesonAverageRAB->FindBin(ptval);
588 hDmesonAverageRAB->SetBinContent(histoBin,average);
589 hDmesonAverageRAB->SetBinError(histoBin,averageStat);
590 Double_t ept = hDmesonAverageRAB->GetBinWidth(histoBin)/2.;
592 gRAB_DmesonAverage_GlobalSystematics->SetPoint(ipt,ptval,average);
593 gRAB_DmesonAverage_GlobalSystematics->SetPointError(ipt,ept,ept,totalUncLow,totalUncHigh);
595 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetPoint(ipt,ptval,average);
596 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetPointError(ipt,ept,ept,beautyUncLow,beautyUncHigh);
599 gRAB_DmesonAverage_TrackingSystematicsPP->SetPoint(ipt,ptval,average);
600 gRAB_DmesonAverage_TrackingSystematicsPP->SetPointError(ipt,ept,ept,ppTrackingAv,ppTrackingAv);
601 gRAB_DmesonAverage_TrackingSystematicsAB->SetPoint(ipt,ptval,average);
602 gRAB_DmesonAverage_TrackingSystematicsAB->SetPointError(ipt,ept,ept,ABTrackingAv,ABTrackingAv);
603 gRAB_DmesonAverage_ScalingSystematicsPP->SetPoint(ipt,ptval,average);
604 gRAB_DmesonAverage_ScalingSystematicsPP->SetPointError(ipt,ept,ept,scalingLowAv,scalingHighAv);
605 gRAB_DmesonAverage_DataSystematicsPP->SetPoint(ipt,ptval,average);
606 gRAB_DmesonAverage_DataSystematicsPP->SetPointError(ipt,ept,ept,ppDataSystAvLow,ppDataSystAvHigh);
607 gRAB_DmesonAverage_DataSystematicsAB->SetPoint(ipt,ptval,average);
608 gRAB_DmesonAverage_DataSystematicsAB->SetPointError(ipt,ept,ept,ABDataSystAvLow,ABDataSystAvHigh);
612 cout<<
" pt min (GeV/c), pt max (GeV/c), Raa(Daverage), +- (stat), + (syst) , - (syst) "<<endl;
613 cout<<
ptbinlimits[ipt] <<
" "<<
ptbinlimits[ipt+1]<<
" "<< average<<
" "<< averageStat<<
" "<< totalUncHigh<<
" "<<totalUncLow<<endl;
614 fprintf(resultFile,
"%02.0f %02.0f %5.3f %5.3f %5.3f %5.3f\n",
ptbinlimits[ipt],
ptbinlimits[ipt+1],average,averageStat,totalUncHigh,totalUncLow);
622 TH2F* hempty=
new TH2F(
"hempty",
" ; p_{T} (GeV/c} ; Nucl. modif. fact.",100,0.,
ptbinlimits[nbins],100,0.,2.);
625 TCanvas *cAvCheck =
new TCanvas(
"cAvCheck",
"Average Dmeson check");
627 hDmesonAverageRAB->SetLineColor(kBlack);
628 hDmesonAverageRAB->SetMarkerStyle(20);
629 hDmesonAverageRAB->SetMarkerColor(kBlack);
630 hDmesonAverageRAB->Draw(
"esame");
631 for(
Int_t j=0; j<3; j++) {
632 if(!isDmeson[j])
continue;
633 hDmesonRaa[j]->SetLineColor(kBlack);
634 hDmesonRaa[j]->SetMarkerColor(2+j);
635 hDmesonRaa[j]->SetMarkerStyle(21+j);
636 gRAB_GlobalSystematics[j]->SetFillStyle(0);
637 gRAB_GlobalSystematics[j]->SetLineColor(2+j);
638 gRAB_GlobalSystematics[j]->Draw(
"2");
639 hDmesonRaa[j]->Draw(
"esame");
641 gRAB_DmesonAverage_GlobalSystematics->SetFillStyle(0);
642 gRAB_DmesonAverage_GlobalSystematics->SetLineColor(kBlack);
643 gRAB_DmesonAverage_GlobalSystematics->Draw(
"2");
644 hDmesonAverageRAB->Draw(
"esame");
646 cAvCheck->SaveAs(Form(
"%s_result_%s.gif",foutname.Data(),ndate.Data()));
648 TCanvas *cAv =
new TCanvas(
"cAv",
"Average Dmeson");
649 hDmesonAverageRAB->Draw(
"e");
650 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetFillStyle(1001);
651 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->SetFillColor(kMagenta-7);
652 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->Draw(
"2");
653 gRAB_DmesonAverage_GlobalSystematics->Draw(
"2");
654 hDmesonAverageRAB->Draw(
"esame");
660 TFile *
fout =
new TFile(Form(
"HFPtSpectrumRaa_%s_%s.root",foutname.Data(),ndate.Data()),
"recreate");
661 hDmesonAverageRAB->Write();
663 gRAB_DmesonAverage_GlobalSystematics->Write();
664 gRAB_DmesonAverage_FeedDownSystematicsElossHypothesis->Write();
665 gRAB_DmesonAverage_TrackingSystematicsPP->Write();
666 gRAB_DmesonAverage_TrackingSystematicsAB->Write();
667 gRAB_DmesonAverage_ScalingSystematicsPP->Write();
668 gRAB_DmesonAverage_DataSystematicsPP->Write();
669 gRAB_DmesonAverage_DataSystematicsAB->Write();
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 SetIsPass4Analysis(Bool_t flag)
Double_t GetWeight(Int_t averageoption, Double_t pt, TH1D *hRaa, Double_t raaSystLow, Double_t raaSystHigh, Double_t ppSystRawYield, Double_t ppSystRawYieldCutVar, Double_t ppSystRawYieldCutVarPid, Double_t ABSystRawYield, Double_t ABSystRawYieldCutVar, Double_t ABSystRawYieldCutVarPid)
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
void SetRunNumber(Int_t number)
Double_t GetPIDEffErr(Double_t pt) const