]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG2/EBYE/macros/readBalanceFunction.C
Modifications in the output of the BF task (merging) - Michael Weber
[u/mrichter/AliRoot.git] / PWG2 / EBYE / macros / readBalanceFunction.C
index 84b339fe870c8bac7b345d55c3ac814386b1c4d4..1e47f3645865f9ea36315d577a3d8f9df1cbca9b 100644 (file)
-void readBalanceFunction() {
-  //Macro to read the output of the BF analysis:
-  //i) Merges the output of each sub-job
-  //ii) Prints and draws the final output
-  //iii) Printd the details of the BF analysis (i.e. type, bins,...)
-  //iv) Reads the QA part of the analysis
-  //Author: Panos.Christakoglou@cern.ch
+const TString gBFAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"};
+
+void readBalanceFunction(Bool_t bHistos = kTRUE, TString inFile = "AnalysisResults.root") {
+  // Macro to read the output of the BF analysis:  MW: CHANGE THIS!!!!
+  //i) Prints and draws the final BF output
+  //ii) Plots the QA part of the analysis
+  //iii) store BF in output file
+  //Author: Panos.Christakoglou@cern.ch, m.weber@cern.ch
   //Loading the needed libraries
   gSystem->Load("libProofPlayer.so");
   gSystem->Load("libANALYSIS.so");
   gSystem->Load("libANALYSISalice.so");
   gSystem->Load("libPWG2ebye.so");
 
-
   //Draw BF              
-  drawBF();
-
-  //Print BF config
-  //printBFConfig();     
+  drawBF(bHistos,inFile);
 
   //Merge the output
   //mergeOutput("/alice/cern.ch/user/p/pchrist/Balance/pp/7TeV/LHC10b/output/");
 }
 
 //___________________________________________________________//
-void drawBF() {
-  //Function to draw the BF object
-  TFile *f = TFile::Open("AnalysisResults.118558.root");
+void drawBF(Bool_t bHistos = kTRUE, TString inFile = "AnalysisResults.root") {
+  //Function to draw the BF objects and write them into the output file
+
+  Int_t maximumCanvases = 10;
+  Int_t iCanvas         = 0;
+  TCanvas *cQA[10];
+  TCanvas *cBF[10];
+  TCanvas *cBFS[10];
+
+  // get the file
+  TFile *f = TFile::Open(inFile.Data());
   if(!f) {
     Printf("File not found!!!");
     break;
   }
 
-  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWG2EbyE.outputBalanceFunctionAnalysis.root"));
+  // get the BF output directory
+  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWG2EbyE.outputBalanceFunctionAnalysis"));
   if(!dir) {
     Printf("Output directory not found!!!");
     break;
   }
 
-  AliBalance *bf = dynamic_cast<AliBalance *>(dir->Get("AliBalance"));
-  if(!bf) {
-    Printf("BF object not found!!!");
-    break;
+  // loop over all lists and plot the BF and QA
+  TList *list = NULL;
+  TString listName;
+  TIter nextkey( dir->GetListOfKeys() );
+  TKey *key;
+
+  AliBalance *bf[10][7];
+  AliBalance *bfs[10][7];
+  TGraphErrors *gbf[10][7];
+  TGraphErrors *gbfs[10][7];
+
+  TH1D *fHistP[7]; //N+
+  TH1D *fHistN[7]; //N-
+  TH1D *fHistPN[7]; //N+-
+  TH1D *fHistNP[7]; //N-+
+  TH1D *fHistPP[7]; //N++
+  TH1D *fHistNN[7]; //N--
+
+  while ( (key = (TKey*)nextkey())) {
+
+    list = (TList*)key->ReadObj();
+    listName = TString(list->GetName());
+
+    cout<<"Processing list "<<listName<<endl;
+
+    // ----------------------------------------------------
+    // plot QA histograms
+    if(listName.Contains("QA")){     
+
+      iCanvas ++;
+      if(iCanvas == 10) {cout<<"TOO MANY LISTS --> increase MAXIMUM"<<endl; return;}
+      cQA[iCanvas] = new TCanvas(listName,listName);
+      cQA[iCanvas]->Divide(3,3);
+
+      cQA[iCanvas]->cd(1);
+      TH1F* histVx = (TH1F*)list->FindObject("fHistVx");
+      if(histVx){
+       histVx->SetFillColor(9);
+       histVx->Draw();
+      }
+      cQA[iCanvas]->cd(2);
+      TH1F* histVy = (TH1F*)list->FindObject("fHistVy");
+      if(histVy){
+       histVy->SetFillColor(9);
+       histVy->Draw();
+      }
+      
+      cQA[iCanvas]->cd(3);
+      TH1F* histVz = (TH1F*)list->FindObject("fHistVz");
+      if(histVz){
+       histVz->SetFillColor(9);
+       histVz->Draw();
+      }
+      
+      cQA[iCanvas]->cd(4);
+      TH1F* histEventStats = (TH1F*)list->FindObject("fHistEventStats");
+      if(histEventStats){
+       histEventStats->SetFillColor(9);
+       histEventStats->Draw();
+      }
+      
+      cQA[iCanvas]->cd(5);
+      cQA[iCanvas]->cd(5)->SetLogz();
+      TH2F* histClus = (TH2F*)list->FindObject("fHistClus");
+      if(histClus) histClus->Draw("colz");
+      
+      cQA[iCanvas]->cd(6);
+      cQA[iCanvas]->cd(6)->SetLogz();
+      TH2F* histDCA = (TH2F*)list->FindObject("fHistDCA");  
+      if(histDCA) histDCA->Draw("colz");
+      
+      cQA[iCanvas]->cd(7);
+      TH1F* histPt = (TH1F*)list->FindObject("fHistPt");
+      if(histPt){
+       histPt->SetFillColor(9);
+       histPt->Draw();
+      }
+      
+      cQA[iCanvas]->cd(8);
+      TH1F* histEta = (TH1F*)list->FindObject("fHistEta");
+      if(histEta){
+       histEta->SetFillColor(9);
+       histEta->Draw();
+      }
+      
+      cQA[iCanvas]->cd(9);
+      TH1F* histPhi = (TH1F*)list->FindObject("fHistPhi");
+      if(histPhi){
+       histPhi->SetFillColor(9);
+       histPhi->Draw();
+      }
+    }
+    // ----------------------------------------------------
+
+    // ----------------------------------------------------
+    // calculate and plot BF 
+    if(listName.Contains("BF_")){
+      cBF[iCanvas] = new TCanvas(listName,listName);
+      cBF[iCanvas]->Divide(3,3);
+
+      for(Int_t a = 0; a < 7; a++){
+
+       cout<<"ANALYSE "<<gBFAnalysisType[a]<<endl;
+
+       // create the BF object
+       bf[iCanvas][a]  = new AliBalance();
+
+       fHistP[a] = (TH1D*)list->FindObject(Form("fHistP%s",gBFAnalysisType[a].Data()));
+       fHistN[a] = (TH1D*)list->FindObject(Form("fHistP%s",gBFAnalysisType[a].Data()));
+       fHistPP[a] = (TH1D*)list->FindObject(Form("fHistPP%s",gBFAnalysisType[a].Data()));
+       fHistPN[a] = (TH1D*)list->FindObject(Form("fHistPN%s",gBFAnalysisType[a].Data()));
+       fHistNP[a] = (TH1D*)list->FindObject(Form("fHistNP%s",gBFAnalysisType[a].Data()));
+       fHistNN[a] = (TH1D*)list->FindObject(Form("fHistNN%s",gBFAnalysisType[a].Data()));
+
+       // set the binning (p1 doesn't play a role --> 0)
+       bf[iCanvas][a]->SetNumberOfBins(a,fHistNN[a]->GetNbinsX());
+       bf[iCanvas][a]->SetInterval(0,0,a,fHistNN[a]->GetBinCenter(1) - fHistNN[a]->GetBinWidth(1)/2,fHistNN[a]->GetBinCenter(fHistNN[a]->GetNbinsX()) + fHistNN[a]->GetBinWidth(1)/2);
+
+       // set the members for each bin in histogram
+       for(Int_t ibin = 1; ibin <= fHistNN[a]->GetNbinsX(); ibin++){
+         bf[iCanvas][a]->SetNpp(a,ibin-1,fHistPP[a]->GetBinContent(ibin));
+         bf[iCanvas][a]->SetNpn(a,ibin-1,fHistPN[a]->GetBinContent(ibin));
+         bf[iCanvas][a]->SetNnp(a,ibin-1,fHistNP[a]->GetBinContent(ibin));
+         bf[iCanvas][a]->SetNnn(a,ibin-1,fHistNN[a]->GetBinContent(ibin));
+       }
+       bf[iCanvas][a]->SetNp(a,fHistP[a]->GetEntries());
+       bf[iCanvas][a]->SetNn(a,fHistN[a]->GetEntries());
+
+       gbf[iCanvas][a] = bf[iCanvas][a]->drawBalance(a);
+       gbf[iCanvas][a]->SetName(Form("%s_BF_%s",listName.Data(),gBFAnalysisType[a].Data()));
+
+       cBF[iCanvas]->cd(a+1);
+       gbf[iCanvas][a]->SetMarkerStyle(20);
+
+       if(!bHistos){
+         gbf[iCanvas][a]->Draw("AP");
+       }
+       else{
+         fHistPP[a]->Draw();
+         fHistPN[a]->SetLineColor(2);
+         fHistPN[a]->Draw("same");
+         fHistNP[a]->SetLineColor(4);
+         fHistNP[a]->Draw("same");
+         fHistNN[a]->SetLineColor(8);
+         fHistNN[a]->Draw("same");
+       }
+      }
+    }
+    // ----------------------------------------------------
+
+    // ----------------------------------------------------
+    // calculate and plot BF (shuffled)
+    if(listName.Contains("BFShuffled")){
+  
+      cBFS[iCanvas] = new TCanvas(listName,listName);
+      cBFS[iCanvas]->Divide(3,3);
+
+      for(Int_t a = 0; a < 7; a++){
+
+       // create the BF object
+       bfs[iCanvas][a]  = new AliBalance();
+
+       fHistP[a] = (TH1D*)list->FindObject(Form("fHistP%s_shuffle",gBFAnalysisType[a].Data()));
+       fHistN[a] = (TH1D*)list->FindObject(Form("fHistP%s_shuffle",gBFAnalysisType[a].Data()));
+       fHistPP[a] = (TH1D*)list->FindObject(Form("fHistPP%s_shuffle",gBFAnalysisType[a].Data()));
+       fHistPN[a] = (TH1D*)list->FindObject(Form("fHistPN%s_shuffle",gBFAnalysisType[a].Data()));
+       fHistNP[a] = (TH1D*)list->FindObject(Form("fHistNP%s_shuffle",gBFAnalysisType[a].Data()));
+       fHistNN[a] = (TH1D*)list->FindObject(Form("fHistNN%s_shuffle",gBFAnalysisType[a].Data()));
+
+       // set the binning (p1 doesn't play a role --> 0)
+       bfs[iCanvas][a]->SetNumberOfBins(a,fHistNN[a]->GetNbinsX());
+       bfs[iCanvas][a]->SetInterval(0,0,a,fHistNN[a]->GetBinCenter(1) - fHistNN[a]->GetBinWidth(1)/2,fHistNN[a]->GetBinCenter(fHistNN[a]->GetNbinsX()) + fHistNN[a]->GetBinWidth(1)/2);
+
+       // set the members for each bin in histogram
+       for(Int_t ibin = 1; ibin <= fHistNN[a]->GetNbinsX(); ibin++){
+         bfs[iCanvas][a]->SetNpp(a,ibin-1,fHistPP[a]->GetBinContent(ibin));
+         bfs[iCanvas][a]->SetNpn(a,ibin-1,fHistPN[a]->GetBinContent(ibin));
+         bfs[iCanvas][a]->SetNnp(a,ibin-1,fHistNP[a]->GetBinContent(ibin));
+         bfs[iCanvas][a]->SetNnn(a,ibin-1,fHistNN[a]->GetBinContent(ibin));
+       }
+       bfs[iCanvas][a]->SetNp(a,fHistP[a]->GetEntries());
+       bfs[iCanvas][a]->SetNn(a,fHistN[a]->GetEntries());
+
+       gbfs[iCanvas][a] = bf[iCanvas][a]->drawBalance(a);
+       gbfs[iCanvas][a]->SetName(Form("%s_BF_%s",listName.Data(),gBFAnalysisType[a].Data()));
+
+       cBFS[iCanvas]->cd(a+1);
+       gbfs[iCanvas][a]->SetMarkerStyle(20);
+       if(!bHistos){
+         gbf[iCanvas][a]->Draw("AP");
+       }
+       else{
+         fHistPP[a]->Draw();
+         fHistPN[a]->SetLineColor(2);
+         fHistPN[a]->Draw("same");
+         fHistNP[a]->SetLineColor(4);
+         fHistNP[a]->Draw("same");
+         fHistNN[a]->SetLineColor(8);
+         fHistNN[a]->Draw("same");
+       }
+      }
+    }
+    // ----------------------------------------------------
   }
 
-  bf->PrintResults();
-  TGraphErrors *gr = bf->DrawBalance();
-  gr->SetMarkerStyle(24);
-
-  TCanvas *c1 = new TCanvas("c1","Balance Function",0,0,500,500);
-  c1->SetFillColor(10); c1->SetHighLightColor(10);
-
-  TH2F *hEmpty = new TH2F("hEmpty","",1000,-1000,1000,1000,-0.2,1.0);
-  hEmpty->SetStats(kFALSE);
-  hEmpty->GetXaxis()->SetTitle(gr->GetXaxis()->GetTitle());
-  hEmpty->GetYaxis()->SetTitle(gr->GetYaxis()->GetTitle());
-  hEmpty->GetXaxis()->SetRangeUser(gr->GetXaxis()->GetXmin(),
-                                   gr->GetXaxis()->GetXmax());
-  hEmpty->GetYaxis()->SetRangeUser(gr->GetYaxis()->GetXmin(),
-                                   gr->GetYaxis()->GetXmax());
-  hEmpty->Draw();
-  gr->Draw("P");
+  TFile *fOut = TFile::Open(Form("Histograms_%s",inFile.Data()),"RECREATE");
+  fOut->cd();
+  for(Int_t i = 0; i < iCanvas; i++){
+    for(Int_t a = 0; a < 7; a++){
+      gbf[iCanvas][a]->Write();
+      gbfs[iCanvas][a]->Write();
+    }
+  }
 }
 
 //___________________________________________________________//