const char * tag = "_Hadrons_QA_PbPb";
Float_t gpTMin = 0.51;
Float_t gpTMax = 49.99;
const char* lastFileName = 0;
void* cacheSameEvent = 0;
void* cacheMixedEvent = 0;
void processMakeQA2pc(const char * filename="AnalysisResults", //file name without ".root"
TString suffix = "eps",
const char *outfile="MakeQA2pc_output.root"){
loadlibs();
if (!gGrid && TString(filename).BeginsWith("alien://"))
TGrid::Connect("alien://");
//fill CFContainers
FillParentTHnSparse(Form("%s.root",filename),kFALSE,tag);
Double_t ptTmin[]={0.5,0.5,2.0,2.0};
Double_t ptTmax[]={1.0,1.0,4.0,4.0};
Double_t ptAmin[]={0.5,0.5,2.0,2.0};
Double_t ptAmax[]={1.0,1.0,4.0,4.0};
Int_t centBegin[]={ 0, 60, 0, 60};
Int_t centEnd[]={ 10, 90, 10, 90};
for(Int_t i=0;i<4;i++){
TCanvas *c=new TCanvas(Form("c%d",i),Form("c%d",i),1200,1200);
DrawSameMixedSV(Form("%s_zvtx.root",filename),ptTmin[i],ptTmax[i],ptAmin[i],ptAmax[i],centBegin[i],centEnd[i],8,c,i,outfile);
c->SaveAs(Form("fig_cf_c%d.%s",i,suffix.Data()));
}
TCanvas *ccorr=new TCanvas("ccorr","ccorr",1200,1200);
DrawCorrelation(Form("%s_zvtx.root",filename),ccorr,outfile);
ccorr->SaveAs(Form("fig_cf_ccorr.%s",suffix.Data()));
}
void SetupRanges(void* obj)
{
if (!obj)
return;
((AliUEHistograms*) obj)->SetEtaRange(0, 0);
((AliUEHistograms*) obj)->SetPtRange(gpTMin, gpTMax);
((AliUEHistograms*) obj)->SetCombineMinMax(kTRUE);
}
void DrawCorrelation(const char* fileName,TCanvas *c,const char *outfile){
AliUEHistograms* h = (AliUEHistograms*) GetUEHistogram(fileName);
c->Divide(1,3);
c->cd(1);
gPad->SetLogz();
h->((TH2F*)h->GetCorrelationpT())->DrawCopy("colz")->GetYaxis()->SetRangeUser(0.,20.);
c->cd(2);
h->((TH2F*)h->GetCorrelationEta())->DrawCopy("colz")->GetYaxis()->SetRangeUser(-1.5,1.5);
c->cd(3);
h->((TH2F*)h->GetCorrelationPhi())->DrawCopy("colz");
//Added by sjena
TFile *fout = TFile::Open(outfile,"UPDATE");
fout->ls();
TDirectoryFile *cdd = NULL;
cdd = (TDirectoryFile*)fout->Get("CF");
if(!cdd) {
Printf("Warning: CF
doesn't exist, creating a new one");
cdd = (TDirectoryFile*)fout->mkdir("CF");
}
cdd->cd();
cdd->ls();
TH2F *h1 = (TH2F*)h->((TH2F*)h->GetCorrelationpT())->Clone();
TH2F *h2 = (TH2F*)h->((TH2F*)h->GetCorrelationEta())->Clone();
TH2F *h3 = (TH2F*)h->((TH2F*)h->GetCorrelationPhi())->Clone();
h1->Write();
h2->Write();
h3->Write();
fout->Close();
}
void DrawSameMixed(const char* fileName,Double_t ptTmin,Double_t ptTmax,Double_t ptAmin,Double_t ptAmax,Int_t centBegin,Int_t centEnd,Int_t step = 8,TCanvas *c)
{
c->Divide(3, 3);
TPaveText* paveText = new TPaveText(0.2, 0.9, 1., 1., "BRNDC");
paveText->SetTextSize(0.04);
paveText->SetFillColor(0);
paveText->SetShadowColor(0);
paveText->SetBorderSize(0);
paveText->SetFillStyle(0);
paveText->AddText(Form("%.1fcd(1);
gPad->SetLeftMargin(0.15);
hist1->SetTitle("");
hist1->GetYaxis()->SetRangeUser(-1.79, 1.79);
hist1->GetZaxis()->SetTitleOffset(1.8);
hist1->GetXaxis()->SetTitleOffset(1.5);
hist1->GetYaxis()->SetTitleOffset(2);
hist1->GetZaxis()->SetTitle("same event pairs (a.u.)");
hist1->SetStats(kFALSE);
hist1->DrawCopy("SURF1");
paveText->Draw();
c->cd(4);
((TH2*) hist1)->ProjectionX()->DrawCopy();
c->cd(7);
((TH2*) hist1)->ProjectionY()->DrawCopy();
hist2 = hist1;
GetDistAndFlow(hMixed, &hist1, step, centBegin, centEnd, ptTmin, ptTmax);
NormalizeToBinWidth(hist1);
c->cd(2);
gPad->SetLeftMargin(0.15);
hist1->SetTitle("");
hist1->GetYaxis()->SetRangeUser(-1.79, 1.79);
hist1->GetZaxis()->SetTitleOffset(1.8);
hist1->GetXaxis()->SetTitleOffset(1.5);
hist1->GetYaxis()->SetTitleOffset(2);
hist1->GetZaxis()->SetTitle("mixed event pairs (a.u.)");
hist1->SetStats(kFALSE);
hist1->DrawCopy("SURF1");
c->cd(5);
((TH2*) hist1)->ProjectionX()->DrawCopy();
c->cd(8);
((TH2*) hist1)->ProjectionY()->DrawCopy();
c->cd(3);
gPad->SetLeftMargin(0.15);
hist2->GetZaxis()->SetTitle("same/mixed event pairs (a.u.)");
hist2->Divide(hist1);
hist2->DrawCopy("SURF1");
c->cd(6);
((TH2*) hist2)->ProjectionX()->DrawCopy();
c->cd(9);
((TH2*) hist2)->ProjectionY()->DrawCopy();
}
void DrawSameMixedSV(const char* fileName,Double_t ptTmin,Double_t ptTmax,Double_t ptAmin,Double_t ptAmax,Int_t centBegin,Int_t centEnd,Int_t step = 8,TCanvas *c, Int_t key, const char *outfile)
{
c->Divide(3, 3);
TPaveText* paveText = new TPaveText(0.2, 0.9, 1., 1., "BRNDC");
paveText->SetTextSize(0.04);
paveText->SetFillColor(0);
paveText->SetShadowColor(0);
paveText->SetBorderSize(0);
paveText->SetFillStyle(0);
paveText->AddText(Form("%.1fcd(1);
gPad->SetLeftMargin(0.15);
hist1->SetTitle("");
hist1->GetYaxis()->SetRangeUser(-1.79, 1.79);
hist1->GetZaxis()->SetTitleOffset(1.8);
hist1->GetXaxis()->SetTitleOffset(1.5);
hist1->GetYaxis()->SetTitleOffset(2);
hist1->GetZaxis()->SetTitle("same event pairs (a.u.)");
hist1->SetStats(kFALSE);
hist1->DrawCopy("SURF1");
//added by sjena
TFile *fout = TFile::Open(outfile,"UPDATE");
fout->ls();
TDirectoryFile *cdd = NULL;
cdd = (TDirectoryFile*)fout->Get("CF");
if(!cdd) {
Printf("Warning: CF doesn't exist, creating a new one");
cdd = (TDirectoryFile*)fout->mkdir("CF");
}
cdd->cd();
cdd->ls();
TH1D *h1 = (TH1D*)hist1->Clone();
h1->SetName(Form("fig_cf_cr1_%d",key));
h1->SetTitle(hist1->GetName());
h1->Write();
paveText->Draw();
c->cd(4);
((TH2*) hist1)->ProjectionX()->DrawCopy();
TH2D *h2 = (TH2D*)((TH2*) hist1)->ProjectionX();
h2->SetTitle(h2->GetName());
h2->SetName(Form("fig_cf_cr2_%d", key));
h2->Write();
c->cd(7);
((TH2*) hist1)->ProjectionY()->DrawCopy();
//ofile->cd();
TH2D *h3 = (TH2D*)((TH2*) hist1)->ProjectionY();
h3->SetTitle(h3->GetName());
h3->SetName(Form("fig_cf_cr3_%d",key));
h3->Write();
hist2 = hist1;
GetDistAndFlow(hMixed, &hist1, step, centBegin, centEnd, ptTmin, ptTmax);
NormalizeToBinWidth(hist1);
c->cd(2);
gPad->SetLeftMargin(0.15);
hist1->SetTitle("");
hist1->GetYaxis()->SetRangeUser(-1.79, 1.79);
hist1->GetZaxis()->SetTitleOffset(1.8);
hist1->GetXaxis()->SetTitleOffset(1.5);
hist1->GetYaxis()->SetTitleOffset(2);
hist1->GetZaxis()->SetTitle("mixed event pairs (a.u.)");
hist1->SetStats(kFALSE);
hist1->DrawCopy("SURF1");
//ofile->cd();
TH1D *h4 = (TH1D*)hist1->Clone();
h4->SetTitle(hist1->GetName());
h4->SetName(Form("fig_cf_cr4_%d",key));
h4->Write();
c->cd(5);
((TH2*) hist1)->ProjectionX()->DrawCopy();
//ofile->cd();
TH2D *h5 = (TH2D*)((TH2*) hist1)->ProjectionX();
h5->SetTitle(h5->GetName());
h5->SetName(Form("fig_cf_cr5_%d",key));
h5->Write();
c->cd(8);
((TH2*) hist1)->ProjectionY()->DrawCopy();
//ofile->cd();
TH2D *h6 = (TH2D*)((TH2*) hist1)->ProjectionY();
h6->SetTitle(h6->GetName());
h6->SetName(Form("fig_cf_cr6_%d",key));
h6->Write();
c->cd(3);
gPad->SetLeftMargin(0.15);
hist2->GetZaxis()->SetTitle("same/mixed event pairs (a.u.)");
hist2->Divide(hist1);
hist2->DrawCopy("SURF1");
//ofile->cd();
TH1D *h7 = (TH1D*)hist2->Clone();
h7->SetTitle(hist2->GetName());
h7->SetName(Form("fig_cf_cr7_%d",key));
h7->Write();
c->cd(6);
((TH2*) hist2)->ProjectionX()->DrawCopy();
//ofile->cd();
TH2D *h8 = (TH2D*)((TH2*) hist2)->ProjectionX();
h8->SetTitle(h8->GetName());
h8->SetName(Form("fig_cf_cr8_%d",key));
h8->Write();
c->cd(9);
((TH2*) hist2)->ProjectionY()->DrawCopy();
//ofile->cd();
TH2D *h9 = (TH2D*)((TH2*) hist2)->ProjectionY();
h9->SetTitle(h9->GetName());
h9->SetName(Form("fig_cf_cr9_%d",key));
h9->Write();
fout->Close();
}
void loadlibs()
{
gSystem->Load("libANALYSIS");
gSystem->Load("libANALYSISalice");
gSystem->Load("libCORRFW");
gSystem->Load("libPWGTools");
gSystem->Load("libPWGCFCorrelationsBase");
}
void FillParentTHnSparse(const char* fileName, Bool_t reduce = kFALSE, const char* tag = "")
{
if (TString(fileName).BeginsWith("alien:"))
TGrid::Connect("alien:");
loadlibs();
TList* list = 0;
AliUEHistograms* h = (AliUEHistograms*) GetUEHistogram(fileName, &list, kFALSE, tag);
Printf("We have %d axes", ((AliTHn*) h->GetUEHist(2)->GetTrackHist(0)->GetNVar()));
if (reduce)
((AliTHn*) h->GetUEHist(2)->GetTrackHist(0))->ReduceAxis();
((AliTHn*) h->GetUEHist(2)->GetTrackHist(0))->FillParent();
((AliTHn*) h->GetUEHist(2)->GetTrackHist(0))->DeleteContainers();
AliUEHistograms* hMixed = (AliUEHistograms*) GetUEHistogram(fileName, 0, kTRUE, tag);
if (reduce)
((AliTHn*) hMixed->GetUEHist(2)->GetTrackHist(0))->ReduceAxis();
((AliTHn*) hMixed->GetUEHist(2)->GetTrackHist(0))->FillParent();
((AliTHn*) hMixed->GetUEHist(2)->GetTrackHist(0))->DeleteContainers();
TString newFileName(fileName);
if (TString(fileName).BeginsWith("alien:"))
newFileName = gSystem->BaseName(newFileName);
newFileName.ReplaceAll(".root", "");
if (reduce)
newFileName += "_.root";
else
newFileName += "_zvtx.root";
file3 = TFile::Open(newFileName, "RECREATE");
file3->mkdir("PWG4_PhiCorrelations");
file3->cd("PWG4_PhiCorrelations");
list->Write("histosPhiCorrelations", TObject::kSingleKey);
file3->Close();
}
void* GetUEHistogram(const char* fileName, TList** listRef = 0, Bool_t mixed = kFALSE, const char* tag = "")
{
if (!lastFileName || strcmp(lastFileName, fileName) != 0)
{
lastFileName = fileName;
file = TFile::Open(fileName);
if (!file)
return 0;
list = (TList*) gFile->Get("PWG4_LeadingTrackUE/histosLeadingTrackUE");
if (!list)
list = (TList*) gFile->Get(Form("PWG4_PhiCorrelations/histosPhiCorrelations%s", tag));
if (!list)
list = (TList*) gFile->Get("PWG4_PhiCorrelations/histosPhiCorrelations_Syst");
if (!list)
return 0;
if (listRef)
*listRef = list;
cacheMixedEvent = list->FindObject("AliUEHistogramsMixed");
cacheSameEvent = list->FindObject("AliUEHistogramsSame");
if (mixed)
return cacheMixedEvent;
if (list->FindObject("AliUEHistograms"))
return list->FindObject("AliUEHistograms");
return cacheSameEvent;
}
else
{
Printf("GetUEHistogram --> Using cache for %s", fileName);
if (mixed)
return cacheMixedEvent;
else
return cacheSameEvent;
}
}
Int_t gHistCount = 0;
void GetDistAndFlow(void* hVoid, TH1** hist, Int_t step, Int_t centralityBegin, Int_t centralityEnd, Float_t ptBegin, Float_t ptEnd)
{
h = (AliUEHistograms*) hVoid;
Int_t centralityBeginBin = 0;
Int_t centralityEndBin = -1;
if (centralityEnd >= centralityBegin)
{
centralityBeginBin = h->GetUEHist(2)->GetEventHist()->GetGrid(step)->GetGrid()->GetAxis(1)->FindBin(0.01 + centralityBegin);
centralityEndBin = h->GetUEHist(2)->GetEventHist()->GetGrid(step)->GetGrid()->GetAxis(1)->FindBin(-0.01 + centralityEnd);
}
// 2d same and mixed event
TH2* sameTwoD = h->GetUEHist(2)->GetUEHist(step, 0, ptBegin, ptEnd, centralityBeginBin, centralityEndBin, 1, kFALSE);
TString histName;
histName.Form("GetDistAndFlow%d", gHistCount++);
*hist = sameTwoD;
TString str;
str.Form("%.1f < p_{T,trig} < %.1f", ptBegin - 0.01, ptEnd + 0.01);
TString str2;
str2.Form("%.2f < p_{T,assoc} < %.2f", gpTMin - 0.01, gpTMax + 0.01);
TString newTitle;
newTitle.Form("%s - %s - %d-%d%%", str.Data(), str2.Data(), centralityBegin, centralityEnd);
(*hist)->SetTitle(newTitle);
}
void NormalizeToBinWidth(TH1* hist)
{
//
// normalizes a 1-d histogram to its bin width
//
if (hist->GetDimension() == 1)
{
for (Int_t i=1; i<=hist->GetNbinsX(); ++i)
{
hist->SetBinContent(i, hist->GetBinContent(i) / hist->GetBinWidth(i));
hist->SetBinError(i, hist->GetBinError(i) / hist->GetBinWidth(i));
}
}
else if (hist->GetDimension() == 2)
{
for (Int_t i=1; i<=hist->GetNbinsX(); ++i)
{
for (Int_t j=1; j<=hist->GetNbinsY(); ++j)
{
hist->SetBinContent(i, j, hist->GetBinContent(i, j) / hist->GetXaxis()->GetBinWidth(i) / hist->GetYaxis()->GetBinWidth(j));
hist->SetBinError(i, j, hist->GetBinError(i) / hist->GetXaxis()->GetBinWidth(i) / hist->GetYaxis()->GetBinWidth(j));
}
}
}
}