/*************************************************************** processCFv2vsPt.C Post Processing of Flow QA task in Analysis QA train Clone copy of v2vsPt_0d.C from Ante Modification Done // sjena To save file and putting ani unique naming convention ***************************************************************/ // Name of the merged, large statistics file obtained with the merging macros: TString mergedFileName = "AnalysisResults.root"; // Final output file name holding correct final results for large statistics sample: TString outputFileName = "AnalysisResults.root"; void processCFv2vsPt(const char *filePath = "AnalysisResults.root", TString suffix="eps", const char *outfile="CFv2vsPt_output.root") { // Load flow libraries: gSystem->Load("libPWGflowBase"); // Let's go: TString mergedFileFullPathName(filePath); TFile *mergedFile = NULL; if(gSystem->AccessPathName(mergedFileFullPathName.Data(),kFileExists)) { cout< if neccessary: if(!(mergedFileName == outputFileName)) { TSystemFile *fileTemp = new TSystemFile(mergedFileFullPathName.Data(),"."); fileTemp->Copy("mergedAnalysisResultsTemp.root"); delete fileTemp; } // Access : mergedFile = TFile::Open(mergedFileFullPathName.Data(),"UPDATE"); } // Accessing the file and updating it: TList* mergedFileKeys = mergedFile->GetListOfKeys(); for(Int_t i=0; iGetEntries(); i++) { TDirectory* directory = dynamic_cast(mergedFile->Get(mergedFileKeys->At(i)->GetName())); if (!directory) continue; TList* listTemp = directory->GetListOfKeys(); if(!listTemp) continue; for (Int_t icent=0; icentGetEntries(); icent++) { TList* list = dynamic_cast(directory->Get(listTemp->At(icent)->GetName())); if (!list) continue; // QC: if(TString(list->GetName()).Contains("QC")) { AliFlowAnalysisWithQCumulants* qc = new AliFlowAnalysisWithQCumulants(); qc->GetOutputHistograms(list); Bool_t bApplyCorrectionForNUA = kFALSE; // apply correction for non-uniform acceptance qc->GetIntFlowFlags()->SetBinContent(3,(Int_t)bApplyCorrectionForNUA); qc->Finish(); directory->Add(list,kTRUE); directory->Write(directory->GetName(),TObject::kSingleKey+TObject::kWriteDelete); } // if(TString(list->GetName()).Contains("QC")) } // for (Int_t icent=0; icentGetEntries(); icent++) } // for(Int_t i=0; iGetEntries(); i++) // Close the final output file: delete mergedFile; // Changing the final name, if neccessary: if(!(mergedFileName == outputFileName)) { TSystemFile *outputFileFinal = new TSystemFile(mergedFileName.Data(),"."); outputFileFinal->Rename(outputFileName.Data()); delete outputFileFinal; TSystemFile *mergedFileFinal = new TSystemFile("mergedAnalysisResultsTemp.root","."); mergedFileFinal->Rename(mergedFileName.Data()); delete mergedFileFinal; } // end of if(!(mergedFileName == outputFileName)) // Finally, make some nice plots...: // Access "v2 vs. pT" histogram from the specified output file: TFile *f = TFile::Open(filePath,"READ"); TDirectoryFile *df = (TDirectoryFile*)f->FindObjectAny("outputQCanalysisTPCstandalone"); TList *l = NULL; TList *listTemp = df->GetListOfKeys(); if(listTemp && listTemp->GetEntries() == 1) { TString listName = listTemp->At(0)->GetName(); df->GetObject(listName.Data(),l); } TList *diffFlowList = dynamic_cast l->FindObject("Differential Flow"); diffFlowList = dynamic_cast diffFlowList->FindObject("Results"); diffFlowList = dynamic_cast diffFlowList->FindObject("Differential flow (POI, p_{T})"); // v2{2} vs. pT: TH1D *v22 = dynamic_cast diffFlowList->FindObject("fDiffFlow, POI, p_{T}, v'{2}"); v22->SetMarkerStyle(kFullCircle); v22->SetMarkerColor(kBlue); v22->SetLineColor(kBlue); // v2{4} vs. pT: TH1D *v24 = dynamic_cast diffFlowList->FindObject("fDiffFlow, POI, p_{T}, v'{4}"); v24->SetMarkerStyle(kFullSquare); v24->SetMarkerColor(kRed); v24->SetLineColor(kRed); // Legend: TLegend *legend = new TLegend(0.15,0.67,0.37,0.87); legend->SetFillStyle(0); // white legend background legend->SetTextSize(0.04); legend->SetBorderSize(0.0); //legend->SetTextFont(22); legend->SetMargin(0.1); //legend->AddEntry(inputValues_g,"theoretical/input values","p"); legend->AddEntry(v22,"v_{2}{2}","p"); legend->AddEntry(v24,"v_{2}{4}","p"); // Style histogram: TH1D *hist = new TH1D("","",10,0.,10.); hist->SetStats(kFALSE); hist->SetTitle(""); hist->GetXaxis()->SetTitle("p_{T}"); hist->GetYaxis()->SetRangeUser(0.0,0.3044); // Final drawing: // v2 vs. pT: TCanvas *c1 = new TCanvas("c1","v2 vs. pT"); hist->Draw(); legend->Draw("same"); v22->Draw("psame"); v24->Draw("psame"); c1->SaveAs(Form("fig_cf_flow_fDiffFlow.%s",suffix.Data())); // Bias from non-uniform azimuthal acceptance (NUA): TList *intFlowList = dynamic_cast l->FindObject("Integrated Flow"); intFlowList = dynamic_cast intFlowList->FindObject("Results"); TH1D *fIntFlowDetectorBias = dynamic_cast intFlowList->FindObject("fIntFlowDetectorBias"); fIntFlowDetectorBias->SetStats(kFALSE); fIntFlowDetectorBias->SetTitle("Quantifying bias from non-uniform acceptance"); fIntFlowDetectorBias->SetFillColor(kBlue-10); fIntFlowDetectorBias->GetXaxis()->SetRangeUser(0.,2.); fIntFlowDetectorBias->GetYaxis()->SetRangeUser(0.8044,1.0544); fIntFlowDetectorBias->SetBinError(1,0.); // stat. errors need to be reimplemented fIntFlowDetectorBias->SetBinError(2,0.); // stat. errors need to be reimplemented // Final drawing: TCanvas *c2 = new TCanvas("c2","NUA"); fIntFlowDetectorBias->Draw(); c2->SaveAs(Form("fig_cf_flow_IntFlowDetectorBias.%s",suffix.Data())); f->Close(); cout<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(); v22->SetName(Form("fig_cf_flow_22", v22->GetName())); // v22->SetName(Form("fig_cf_flow_fDiffFlow22")); v22->Write(); v24->SetName(Form("fig_cf_flow_24", v24->GetName())); // v24->SetName(Form("fig_cf_flow_fDiffFlow24")); v24->Write(); fIntFlowDetectorBias->SetName(Form("fig_cf_flow_IntFlowDetectorBias", fIntFlowDetectorBias->GetName())); fIntFlowDetectorBias->Write(); fout->cd(); fout->Close(); } // void void v2vsPt_0d()