ROOT logo
const Int_t numberOfCentralityBins = 8;
TString centralityArray[numberOfCentralityBins] = {"0-10","10-20","20-30","30-40","40-50","50-60","60-70","70-80"};


void drawBalanceFunctionPsiEventMixing(const char* lhcPeriod = "LHC11h",
				       Int_t gTrainID = 208,			      
				       Int_t gCentrality = 1,
				       Double_t psiMin = -0.5, 
				       Double_t psiMax = 3.5) {
  // Macro that draws the fit results for the 
  // correlation functions from the balance function analysis
  // Author: m.weber@cern.ch

  gROOT->LoadMacro("~/SetPlotStyle.C");
  SetPlotStyle();
  gStyle->SetPalette(1,0);

  //Load the PWG2ebye library
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libEventMixing.so");
  gSystem->Load("libCORRFW.so");
  gSystem->Load("libPWGTools.so");
  gSystem->Load("libPWGCFebye.so");

  const Int_t kNPtBins = 3;
  Double_t ptBins[kNPtBins+1] = {1.0,2.0,3.0,4.0};

  TString type[3] = {"PN","NN","PP"}

  TCanvas *cEM = new TCanvas("cEM","",1200,900);
  cEM->Divide(3,3);

  TFile *inFile  = NULL; 
  TH2D *hTMPData = NULL;
  TH2D *hTMPEM = NULL;
  TH1D *hTMPData1D = NULL;
  TH1D *hTMPEM1D = NULL;
  TH1D *hTMPRatio1D = NULL;

  // Loop over pt bins
  Double_t ptTriggerMin = 0.0;
  Double_t ptTriggerMax = 0.;
  Double_t ptAssociatedMin = 0.0;
  Double_t ptAssociatedMax = 0.0;
  TString inFileName = "";
  
  for(Int_t i = 0; i < kNPtBins; i++){

      cout<<" PROCESSING PT BIN "<<i<<" "<<endl;

      ptTriggerMin = ptBins[i];
      ptTriggerMax = ptBins[i+1];
      ptAssociatedMin = ptBins[i];
      ptAssociatedMax = ptBins[i+1];


      //Latex
      TString centralityLatex = "Centrality: ";
      centralityLatex += centralityArray[gCentrality-1]; 
      centralityLatex += "%";
      
      TString psiLatex;
      if((psiMin == -0.5)&&(psiMax == 0.5))
	psiLatex = " -7.5^{o} < #varphi - #Psi_{2} < 7.5^{o}"; 
      else if((psiMin == 0.5)&&(psiMax == 1.5))
	psiLatex = " 37.5^{o} < #varphi - #Psi_{2} < 52.5^{o}"; 
      else if((psiMin == 1.5)&&(psiMax == 2.5))
	psiLatex = " 82.5^{o} < #varphi - #Psi_{2} < 97.5^{o}"; 
      else 
	psiLatex = " 0^{o} < #varphi - #Psi_{2} < 180^{o}"; 
      
      TString pttLatex = Form("%.1f",ptTriggerMin);
      pttLatex += " < p_{T,trig} < "; pttLatex += Form("%.1f",ptTriggerMax);
      pttLatex += " GeV/c";
      
      TString ptaLatex = Form("%.1f",ptAssociatedMin);
      ptaLatex += " < p_{T,assoc} < "; ptaLatex += Form("%.1f",ptAssociatedMax);
      ptaLatex += " GeV/c";
      
      TLatex *latexInfo1 = new TLatex();
      latexInfo1->SetNDC();
      latexInfo1->SetTextSize(0.045);
      latexInfo1->SetTextColor(1);
      
      // Open input file
      inFileName = Form("PbPb/%s/Train%d/Centrality%d/correlationFunction",lhcPeriod,gTrainID,gCentrality);
      inFileName += ".Centrality";  
      inFileName += gCentrality; inFileName += ".Psi";
      if((psiMin == -0.5)&&(psiMax == 0.5)) inFileName += "InPlane.Ptt";
      else if((psiMin == 0.5)&&(psiMax == 1.5)) inFileName += "Intermediate.Ptt";
      else if((psiMin == 1.5)&&(psiMax == 2.5)) inFileName += "OutOfPlane.Ptt";
      else if((psiMin == 2.5)&&(psiMax == 3.5)) inFileName += "Rest.PttFrom";
      else inFileName += "All.PttFrom";
      inFileName += Form("%.1f",ptTriggerMin); inFileName += "To"; 
      inFileName += Form("%.1f",ptTriggerMax); inFileName += "PtaFrom";
      inFileName += Form("%.1f",ptAssociatedMin); inFileName += "To"; 
      inFileName += Form("%.1f",ptAssociatedMax); 
      inFileName += ".root";
      inFile = TFile::Open(inFileName.Data(),"read");
      inFile->ls();

      for(Int_t j = 0; j < 3; j++){

	hTMPData = (TH2D*)inFile->Get(Form("gHist%sRaw",type[j].Data()));
	hTMPEM   = (TH2D*)inFile->Get(Form("gHist%sMixed",type[j].Data()));
	
	cEM->cd(3*j+i+1);
	hTMPData1D = (TH1D*)hTMPData->ProjectionX(Form("hTMP%d%d",i,j),33,39);
	hTMPEM1D = (TH1D*)hTMPEM->ProjectionX(Form("hTMPEM%d%d",i,j),33,39);
	hTMPData1D->Fit("pol1","0","0",0,1.6);
	hTMPEM1D->Fit("pol1","0","0",0,1.6);
	hTMPRatio1D = (TH1D*)hTMPData1D->Clone(Form("hTMPRatio%d%d",i,j));
	hTMPRatio1D->Divide(hTMPEM1D);
	hTMPData1D->Divide(hTMPData1D->GetFunction("pol1"));
	hTMPEM1D->Divide(hTMPEM1D->GetFunction("pol1"));
	hTMPData1D->SetMinimum(0.8);
	hTMPData1D->SetMaximum(1.2);
	hTMPData1D->GetXaxis()->SetRangeUser(0,1.6);
	hTMPData1D->Draw();
	hTMPEM1D->SetMarkerColor(2);
	hTMPEM1D->SetLineColor(2);
	hTMPEM1D->Draw("same");
	hTMPRatio1D->SetMarkerColor(4);
	hTMPRatio1D->SetLineColor(4);
	hTMPRatio1D->Draw("same");


	TLegend *legend1 = new TLegend(0.24,0.17,0.5,0.4,"","brNDC");
	setupLegend(legend1,0.065);
	legend1->AddEntry(hTMPRatio1D,"Correlation Function","lp");
	legend1->AddEntry(hTMPEM1D,"Event Mixing/Pol1(EM)","lp");
	legend1->AddEntry(hTMPData1D,"Raw Data/Pol1(Raw)","lp");	  
	legend1->Draw();


	latexInfo1->DrawLatex(0.24,0.82,centralityLatex.Data());
	latexInfo1->DrawLatex(0.24,0.76,pttLatex.Data());
	latexInfo1->DrawLatex(0.24,0.70,ptaLatex.Data());
      }
      
  }

  cEM->SaveAs(Form(Form("PbPb/%s/Train%d/figs/eventMixingDivided_Cent%d.eps",lhcPeriod,gTrainID,gCentrality)));

}

//____________________________________________________________//
void setupLegend(TLegend *currentLegend=0,float currentTextSize=0.07){
  currentLegend->SetTextFont(42);
  currentLegend->SetBorderSize(0);
  currentLegend->SetFillStyle(0);
  currentLegend->SetFillColor(0);
  currentLegend->SetMargin(0.25);
  currentLegend->SetTextSize(currentTextSize);
  currentLegend->SetEntrySeparation(0.5);
  return;
}
 drawBalanceFunctionPsiEventMixing.C:1
 drawBalanceFunctionPsiEventMixing.C:2
 drawBalanceFunctionPsiEventMixing.C:3
 drawBalanceFunctionPsiEventMixing.C:4
 drawBalanceFunctionPsiEventMixing.C:5
 drawBalanceFunctionPsiEventMixing.C:6
 drawBalanceFunctionPsiEventMixing.C:7
 drawBalanceFunctionPsiEventMixing.C:8
 drawBalanceFunctionPsiEventMixing.C:9
 drawBalanceFunctionPsiEventMixing.C:10
 drawBalanceFunctionPsiEventMixing.C:11
 drawBalanceFunctionPsiEventMixing.C:12
 drawBalanceFunctionPsiEventMixing.C:13
 drawBalanceFunctionPsiEventMixing.C:14
 drawBalanceFunctionPsiEventMixing.C:15
 drawBalanceFunctionPsiEventMixing.C:16
 drawBalanceFunctionPsiEventMixing.C:17
 drawBalanceFunctionPsiEventMixing.C:18
 drawBalanceFunctionPsiEventMixing.C:19
 drawBalanceFunctionPsiEventMixing.C:20
 drawBalanceFunctionPsiEventMixing.C:21
 drawBalanceFunctionPsiEventMixing.C:22
 drawBalanceFunctionPsiEventMixing.C:23
 drawBalanceFunctionPsiEventMixing.C:24
 drawBalanceFunctionPsiEventMixing.C:25
 drawBalanceFunctionPsiEventMixing.C:26
 drawBalanceFunctionPsiEventMixing.C:27
 drawBalanceFunctionPsiEventMixing.C:28
 drawBalanceFunctionPsiEventMixing.C:29
 drawBalanceFunctionPsiEventMixing.C:30
 drawBalanceFunctionPsiEventMixing.C:31
 drawBalanceFunctionPsiEventMixing.C:32
 drawBalanceFunctionPsiEventMixing.C:33
 drawBalanceFunctionPsiEventMixing.C:34
 drawBalanceFunctionPsiEventMixing.C:35
 drawBalanceFunctionPsiEventMixing.C:36
 drawBalanceFunctionPsiEventMixing.C:37
 drawBalanceFunctionPsiEventMixing.C:38
 drawBalanceFunctionPsiEventMixing.C:39
 drawBalanceFunctionPsiEventMixing.C:40
 drawBalanceFunctionPsiEventMixing.C:41
 drawBalanceFunctionPsiEventMixing.C:42
 drawBalanceFunctionPsiEventMixing.C:43
 drawBalanceFunctionPsiEventMixing.C:44
 drawBalanceFunctionPsiEventMixing.C:45
 drawBalanceFunctionPsiEventMixing.C:46
 drawBalanceFunctionPsiEventMixing.C:47
 drawBalanceFunctionPsiEventMixing.C:48
 drawBalanceFunctionPsiEventMixing.C:49
 drawBalanceFunctionPsiEventMixing.C:50
 drawBalanceFunctionPsiEventMixing.C:51
 drawBalanceFunctionPsiEventMixing.C:52
 drawBalanceFunctionPsiEventMixing.C:53
 drawBalanceFunctionPsiEventMixing.C:54
 drawBalanceFunctionPsiEventMixing.C:55
 drawBalanceFunctionPsiEventMixing.C:56
 drawBalanceFunctionPsiEventMixing.C:57
 drawBalanceFunctionPsiEventMixing.C:58
 drawBalanceFunctionPsiEventMixing.C:59
 drawBalanceFunctionPsiEventMixing.C:60
 drawBalanceFunctionPsiEventMixing.C:61
 drawBalanceFunctionPsiEventMixing.C:62
 drawBalanceFunctionPsiEventMixing.C:63
 drawBalanceFunctionPsiEventMixing.C:64
 drawBalanceFunctionPsiEventMixing.C:65
 drawBalanceFunctionPsiEventMixing.C:66
 drawBalanceFunctionPsiEventMixing.C:67
 drawBalanceFunctionPsiEventMixing.C:68
 drawBalanceFunctionPsiEventMixing.C:69
 drawBalanceFunctionPsiEventMixing.C:70
 drawBalanceFunctionPsiEventMixing.C:71
 drawBalanceFunctionPsiEventMixing.C:72
 drawBalanceFunctionPsiEventMixing.C:73
 drawBalanceFunctionPsiEventMixing.C:74
 drawBalanceFunctionPsiEventMixing.C:75
 drawBalanceFunctionPsiEventMixing.C:76
 drawBalanceFunctionPsiEventMixing.C:77
 drawBalanceFunctionPsiEventMixing.C:78
 drawBalanceFunctionPsiEventMixing.C:79
 drawBalanceFunctionPsiEventMixing.C:80
 drawBalanceFunctionPsiEventMixing.C:81
 drawBalanceFunctionPsiEventMixing.C:82
 drawBalanceFunctionPsiEventMixing.C:83
 drawBalanceFunctionPsiEventMixing.C:84
 drawBalanceFunctionPsiEventMixing.C:85
 drawBalanceFunctionPsiEventMixing.C:86
 drawBalanceFunctionPsiEventMixing.C:87
 drawBalanceFunctionPsiEventMixing.C:88
 drawBalanceFunctionPsiEventMixing.C:89
 drawBalanceFunctionPsiEventMixing.C:90
 drawBalanceFunctionPsiEventMixing.C:91
 drawBalanceFunctionPsiEventMixing.C:92
 drawBalanceFunctionPsiEventMixing.C:93
 drawBalanceFunctionPsiEventMixing.C:94
 drawBalanceFunctionPsiEventMixing.C:95
 drawBalanceFunctionPsiEventMixing.C:96
 drawBalanceFunctionPsiEventMixing.C:97
 drawBalanceFunctionPsiEventMixing.C:98
 drawBalanceFunctionPsiEventMixing.C:99
 drawBalanceFunctionPsiEventMixing.C:100
 drawBalanceFunctionPsiEventMixing.C:101
 drawBalanceFunctionPsiEventMixing.C:102
 drawBalanceFunctionPsiEventMixing.C:103
 drawBalanceFunctionPsiEventMixing.C:104
 drawBalanceFunctionPsiEventMixing.C:105
 drawBalanceFunctionPsiEventMixing.C:106
 drawBalanceFunctionPsiEventMixing.C:107
 drawBalanceFunctionPsiEventMixing.C:108
 drawBalanceFunctionPsiEventMixing.C:109
 drawBalanceFunctionPsiEventMixing.C:110
 drawBalanceFunctionPsiEventMixing.C:111
 drawBalanceFunctionPsiEventMixing.C:112
 drawBalanceFunctionPsiEventMixing.C:113
 drawBalanceFunctionPsiEventMixing.C:114
 drawBalanceFunctionPsiEventMixing.C:115
 drawBalanceFunctionPsiEventMixing.C:116
 drawBalanceFunctionPsiEventMixing.C:117
 drawBalanceFunctionPsiEventMixing.C:118
 drawBalanceFunctionPsiEventMixing.C:119
 drawBalanceFunctionPsiEventMixing.C:120
 drawBalanceFunctionPsiEventMixing.C:121
 drawBalanceFunctionPsiEventMixing.C:122
 drawBalanceFunctionPsiEventMixing.C:123
 drawBalanceFunctionPsiEventMixing.C:124
 drawBalanceFunctionPsiEventMixing.C:125
 drawBalanceFunctionPsiEventMixing.C:126
 drawBalanceFunctionPsiEventMixing.C:127
 drawBalanceFunctionPsiEventMixing.C:128
 drawBalanceFunctionPsiEventMixing.C:129
 drawBalanceFunctionPsiEventMixing.C:130
 drawBalanceFunctionPsiEventMixing.C:131
 drawBalanceFunctionPsiEventMixing.C:132
 drawBalanceFunctionPsiEventMixing.C:133
 drawBalanceFunctionPsiEventMixing.C:134
 drawBalanceFunctionPsiEventMixing.C:135
 drawBalanceFunctionPsiEventMixing.C:136
 drawBalanceFunctionPsiEventMixing.C:137
 drawBalanceFunctionPsiEventMixing.C:138
 drawBalanceFunctionPsiEventMixing.C:139
 drawBalanceFunctionPsiEventMixing.C:140
 drawBalanceFunctionPsiEventMixing.C:141
 drawBalanceFunctionPsiEventMixing.C:142
 drawBalanceFunctionPsiEventMixing.C:143
 drawBalanceFunctionPsiEventMixing.C:144
 drawBalanceFunctionPsiEventMixing.C:145
 drawBalanceFunctionPsiEventMixing.C:146
 drawBalanceFunctionPsiEventMixing.C:147
 drawBalanceFunctionPsiEventMixing.C:148
 drawBalanceFunctionPsiEventMixing.C:149
 drawBalanceFunctionPsiEventMixing.C:150
 drawBalanceFunctionPsiEventMixing.C:151
 drawBalanceFunctionPsiEventMixing.C:152
 drawBalanceFunctionPsiEventMixing.C:153
 drawBalanceFunctionPsiEventMixing.C:154
 drawBalanceFunctionPsiEventMixing.C:155
 drawBalanceFunctionPsiEventMixing.C:156
 drawBalanceFunctionPsiEventMixing.C:157
 drawBalanceFunctionPsiEventMixing.C:158
 drawBalanceFunctionPsiEventMixing.C:159