--- /dev/null
+///////////////////////////////////////////
+//
+// Macro to plot comparison of different
+// distributions (spectra, correlations)
+// produced in QA trains but different data
+// Based on the plots provided by DrawAnaCaloTrackQA.C
+//
+// To execute: root -q -b -l DrawProductionComparison.C'("Pi0IM_GammaTrackCorr_EMCAL_default","AnalysisResults.root")'
+// The input files must be placed in different directoried,
+// each one defined in the string array "prod"
+// TString prod[] = {"AOD142","AOD115","ESD"};
+// that has to be modified inside the macro.
+// The number of productions has to be specified
+// const Int_t nProd = 3;
+// There is no limitation to the amount of productions
+//
+// Author: Gustavo.Conesa.Balbastre@cern.ch
+//
+//
+
+// Some global variables
+const Int_t nProd = 3;
+TString prod[] = {"AOD142","AOD115","ESD"};
+
+TList *list[nProd];
+TFile *file[nProd];
+TString histoTag = "";
+Int_t color[]={kBlack,kRed,kBlue,kOrange+1,kYellow+1,kGreen+2,kCyan+1,kViolet,kMagenta+2,kGray};
+
+Float_t nEvents[nProd] = 0;
+
+//_______________________________________________________________________
+void DrawProductionComparison(TString listName = "Pi0IM_GammaTrackCorr_EMCAL_default",
+ TString fileName = "AnalysisResults.root")
+{
+
+ printf("Open <%s>; Get List : <%s>\n",fileName.Data(),listName.Data());
+
+ histoTag = listName;
+
+ //Access the file and list of histograms, global variables
+ GetFileAndList(fileName, listName);
+
+ gStyle->SetOptTitle(1);
+ gStyle->SetOptStat(0);
+ gStyle->SetOptFit(000000);
+ gStyle->SetPadRightMargin(0.15);
+ //gStyle->SetPadTopMargin(0.02);
+ //gStyle->SetPadLeftMargin(0.15);
+ gStyle->SetTitleFontSize(0.06);
+
+ // Declare the different histograms, arrays input is production
+ TH1F* hRaw [nProd];
+ TH1F* hCorr[nProd];
+ TH1F* hTM [nProd];
+ TH1F* hShSh[nProd];
+
+ TH1F* hRatRaw [nProd-1];
+ TH1F* hRatCorr[nProd-1];
+ TH1F* hRatTM [nProd-1];
+ TH1F* hRatShSh[nProd-1];
+
+ TH1F* hCen [nProd];
+ TH1F* hRatCen[nProd-1];
+
+ TH1F* hVertex[3][nProd];
+ TH1F* hRatVertex[3][nProd-1];
+
+ TH2F* h2TrackMatchResEtaNeg[nProd];
+ TH2F* h2TrackMatchResEtaPos[nProd];
+ TH2F* h2TrackMatchResPhiNeg[nProd];
+ TH2F* h2TrackMatchResPhiPos[nProd];
+
+ TH1F* hTrackMatchResEtaNeg[nProd];
+ TH1F* hTrackMatchResEtaPos[nProd];
+ TH1F* hTrackMatchResPhiNeg[nProd];
+ TH1F* hTrackMatchResPhiPos[nProd];
+
+ TH1F* hRatTrackMatchResEtaNeg[nProd-1];
+ TH1F* hRatTrackMatchResEtaPos[nProd-1];
+ TH1F* hRatTrackMatchResPhiNeg[nProd-1];
+ TH1F* hRatTrackMatchResPhiPos[nProd-1];
+
+ TH1F * hTrackPt[nProd] ;
+ TH1F * hTrackPtSPD[nProd] ;
+ TH1F * hTrackPtNoSPD[nProd] ;
+ TH1F * hRatTrackPt[nProd-1] ;
+ TH1F * hRatTrackPtSPD[nProd-1] ;
+ TH1F * hRatTrackPtNoSPD[nProd-1] ;
+
+ TH2F * hTrackEtaPhi[nProd] ;
+ TH2F * hTrackEtaPhiSPD[nProd] ;
+ TH2F * hTrackEtaPhiNoSPD[nProd] ;
+ TH1F * hTrackPhi[nProd] ;
+ TH1F * hTrackPhiSPD[nProd] ;
+ TH1F * hTrackPhiNoSPD[nProd] ;
+ TH1F * hRatTrackPhi[nProd-1] ;
+ TH1F * hRatTrackPhiSPD[nProd-1] ;
+ TH1F * hRatTrackPhiNoSPD[nProd-1] ;
+
+ TH2F* h2XE[nProd];
+ TH2F* h2XEUE[nProd];
+ TH1F* hXE[nProd];
+ TH1F* hXEUE[nProd];
+ TH1F* hRatXE[nProd-1];
+ TH1F* hRatXEUE[nProd-1];
+
+
+ // Fill the histograms array for each of the productions, do the comparison ratios
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ // Calorimeter Clusters
+ {
+ hRaw [iprod] = (TH1F*) GetHisto("AnaPhoton_hCut_0_Open" ,iprod);
+ hCorr[iprod] = (TH1F*) GetHisto("AnaPhoton_hCut_4_NCells" ,iprod);
+ hTM [iprod] = (TH1F*) GetHisto("AnaPhoton_hCut_7_Matching",iprod);
+ hShSh[iprod] = (TH1F*) GetHisto("AnaPhoton_hCut_9_PID" ,iprod);
+
+ hRaw [iprod]->Sumw2();
+ hCorr[iprod]->Sumw2();
+ hTM [iprod]->Sumw2();
+ hShSh[iprod]->Sumw2();
+
+ hRaw [iprod]->Scale(1./nEvents[iprod]);
+ hCorr[iprod]->Scale(1./nEvents[iprod]);
+ hTM [iprod]->Scale(1./nEvents[iprod]);
+ hShSh[iprod]->Scale(1./nEvents[iprod]);
+
+ hRaw[iprod]->SetMarkerColor(color[iprod]);
+ hRaw[iprod]->SetMarkerStyle(24);
+
+ hCorr[iprod]->SetTitle("Cluster spectra with/out cuts");
+ hCorr[iprod]->SetYTitle("1/N_{events} dN/dp_{T}");
+ hCorr[iprod]->SetTitleOffset(1.5,"Y");
+ hCorr[iprod]->SetMarkerColor(color[iprod]);
+ hCorr[iprod]->SetMarkerStyle(20);
+ hCorr[iprod]->SetAxisRange(0.,30.,"X");
+ //hCorr[iprod]->SetMaximum(1.1);
+ //hCorr[iprod]->SetMinimum(0);
+
+ hTM [iprod]->SetMarkerColor(color[iprod]);
+ hTM [iprod]->SetMarkerStyle(21);
+
+ hShSh[iprod]->SetMarkerColor(color[iprod]);
+ hShSh[iprod]->SetMarkerStyle(22);
+
+ hRaw [iprod]->SetTitleOffset(1.5,"Y");
+ hTM [iprod]->SetTitleOffset(1.5,"Y");
+ hShSh[iprod]->SetTitleOffset(1.5,"Y");
+ hCorr[iprod]->SetTitleOffset(1.5,"Y");
+
+ if(iprod > 0)
+ {
+ hRatRaw [iprod-1] = (TH1F*)hRaw [iprod]->Clone(Form("hRatRaw%s" ,prod[iprod].Data()));
+ hRatCorr[iprod-1] = (TH1F*)hCorr[iprod]->Clone(Form("hRatCorr%s",prod[iprod].Data()));
+ hRatTM [iprod-1] = (TH1F*)hTM [iprod]->Clone(Form("hRatTM%s" ,prod[iprod].Data()));
+ hRatShSh[iprod-1] = (TH1F*)hShSh[iprod]->Clone(Form("hRatShSh%s",prod[iprod].Data()));
+
+ hRatRaw [iprod-1]->Divide(hRatRaw [iprod-1],hRaw [0],1.000,1,"B");
+ hRatCorr[iprod-1]->Divide(hRatCorr[iprod-1],hCorr[0],0.975,1,"B");
+ hRatTM [iprod-1]->Divide(hRatTM [iprod-1],hTM [0],0.950,1,"B");
+ hRatShSh[iprod-1]->Divide(hRatShSh[iprod-1],hShSh[0],0.925,1,"B");
+ }
+ }
+
+ // Cluster-Track Matching Residuals
+ {
+ h2TrackMatchResEtaNeg[iprod] = (TH2F*) GetHisto("QA_hTrackMatchedDEta" ,iprod);
+ h2TrackMatchResEtaPos[iprod] = (TH2F*) GetHisto("QA_hTrackMatchedDEtaPos",iprod);
+ h2TrackMatchResPhiNeg[iprod] = (TH2F*) GetHisto("QA_hTrackMatchedDPhi" ,iprod);
+ h2TrackMatchResPhiPos[iprod] = (TH2F*) GetHisto("QA_hTrackMatchedDPhiPos",iprod);
+
+ h2TrackMatchResEtaNeg[iprod]->Add(h2TrackMatchResEtaPos[iprod],-1);
+ h2TrackMatchResPhiNeg[iprod]->Add(h2TrackMatchResPhiPos[iprod],-1);
+
+ Float_t binMin = hCorr[iprod]->FindBin(0.5);
+ Float_t binMax = hCorr[iprod]->FindBin(2);
+ hTrackMatchResEtaNeg[iprod] = (TH1F*) h2TrackMatchResEtaNeg[iprod]->ProjectionY(Form("TMProjEtaNeg%s",prod[iprod].Data()),binMin, binMax);
+ hTrackMatchResEtaPos[iprod] = (TH1F*) h2TrackMatchResEtaPos[iprod]->ProjectionY(Form("TMProjEtaPos%s",prod[iprod].Data()),binMin, binMax);
+ hTrackMatchResPhiNeg[iprod] = (TH1F*) h2TrackMatchResPhiNeg[iprod]->ProjectionY(Form("TMProjPhiNeg%s",prod[iprod].Data()),binMin, binMax);
+ hTrackMatchResPhiPos[iprod] = (TH1F*) h2TrackMatchResPhiPos[iprod]->ProjectionY(Form("TMProjPhiPos%s",prod[iprod].Data()),binMin, binMax);
+
+ hTrackMatchResEtaNeg[iprod]->SetXTitle("#Delta #eta");
+ hTrackMatchResEtaNeg[iprod]->SetYTitle("entries / N events");
+ hTrackMatchResEtaNeg[iprod]->SetTitle("Track-cluster #eta residuals, 0.5 < E < 2 GeV");
+ hTrackMatchResEtaNeg[iprod]->SetAxisRange(-0.05,0.05,"X");
+ hTrackMatchResEtaNeg[iprod]->Sumw2();
+ hTrackMatchResEtaNeg[iprod]->SetMarkerStyle(24);
+ hTrackMatchResEtaNeg[iprod]->SetMarkerColor(color[iprod]);
+
+ hTrackMatchResEtaPos[iprod]->Sumw2();
+ hTrackMatchResEtaPos[iprod]->SetAxisRange(-0.05,0.05,"X");
+ hTrackMatchResEtaPos[iprod]->SetMarkerStyle(25);
+ hTrackMatchResEtaPos[iprod]->SetMarkerColor(color[iprod]);
+
+ hTrackMatchResPhiNeg[iprod]->SetXTitle("#Delta #phi");
+ hTrackMatchResPhiNeg[iprod]->SetTitle("Track-cluster #phi residuals, 0.5 < E < 2 GeV");
+ hTrackMatchResPhiNeg[iprod]->SetYTitle("entries / N events");
+ hTrackMatchResPhiNeg[iprod]->SetAxisRange(-0.05,0.05,"X");
+ hTrackMatchResPhiNeg[iprod]->Sumw2();
+ hTrackMatchResPhiNeg[iprod]->SetMarkerStyle(24);
+ hTrackMatchResPhiNeg[iprod]->SetMarkerColor(color[iprod]);
+
+ hTrackMatchResPhiPos[iprod]->Sumw2();
+ hTrackMatchResPhiPos[iprod]->SetAxisRange(-0.05,0.05,"X");
+ hTrackMatchResPhiPos[iprod]->SetMarkerStyle(25);
+ hTrackMatchResPhiPos[iprod]->SetMarkerColor(color[iprod]);
+
+ hTrackMatchResEtaNeg[iprod]->Scale(1./nEvents[iprod]);
+ hTrackMatchResEtaPos[iprod]->Scale(1./nEvents[iprod]);
+ hTrackMatchResPhiNeg[iprod]->Scale(1./nEvents[iprod]);
+ hTrackMatchResPhiPos[iprod]->Scale(1./nEvents[iprod]);
+
+ hTrackMatchResEtaNeg[iprod]->SetTitleOffset(1.5,"Y");
+ hTrackMatchResEtaPos[iprod]->SetTitleOffset(1.5,"Y");
+ hTrackMatchResPhiNeg[iprod]->SetTitleOffset(1.5,"Y");
+ hTrackMatchResPhiPos[iprod]->SetTitleOffset(1.5,"Y");
+
+ if(iprod > 0)
+ {
+ hRatTrackMatchResPhiPos[iprod-1] = (TH1F*)hTrackMatchResPhiPos[iprod]->Clone(Form("hRatPhiPos%s",prod[iprod].Data()));
+ hRatTrackMatchResPhiNeg[iprod-1] = (TH1F*)hTrackMatchResPhiNeg[iprod]->Clone(Form("hRatPhiNeg%s",prod[iprod].Data()));
+ hRatTrackMatchResEtaPos[iprod-1] = (TH1F*)hTrackMatchResEtaPos[iprod]->Clone(Form("hRatEtaPos%s",prod[iprod].Data()));
+ hRatTrackMatchResEtaNeg[iprod-1] = (TH1F*)hTrackMatchResEtaNeg[iprod]->Clone(Form("hRatEtaNeg%s",prod[iprod].Data()));
+
+ hRatTrackMatchResPhiPos[iprod-1]->Divide(hRatTrackMatchResPhiPos[iprod-1],hTrackMatchResPhiPos[0],1.000,1,"B");
+ hRatTrackMatchResPhiNeg[iprod-1]->Divide(hRatTrackMatchResPhiNeg[iprod-1],hTrackMatchResPhiNeg[0],1.000,1,"B");
+ hRatTrackMatchResEtaPos[iprod-1]->Divide(hRatTrackMatchResEtaPos[iprod-1],hTrackMatchResEtaPos[0],1.000,1,"B");
+ hRatTrackMatchResEtaNeg[iprod-1]->Divide(hRatTrackMatchResEtaNeg[iprod-1],hTrackMatchResEtaNeg[0],1.000,1,"B");
+ }
+ }
+
+ // Hybrid Tracks
+ {
+ hTrackPt [iprod] = (TH1F*) GetHisto("AnaHadrons_hPt" ,iprod);
+ hTrackPtSPD [iprod] = (TH1F*) GetHisto("AnaHadrons_hPtSPDRefit" ,iprod);
+ hTrackPtNoSPD [iprod] = (TH1F*) GetHisto("AnaHadrons_hPtNoSPDRefit" ,iprod);
+ hTrackEtaPhiSPD [iprod] = (TH2F*) GetHisto("AnaHadrons_hEtaPhiSPDRefitPt02" ,iprod);
+ hTrackEtaPhiNoSPD[iprod] = (TH2F*) GetHisto("AnaHadrons_hEtaPhiNoSPDRefitPt02",iprod);
+ hTrackEtaPhi [iprod] = (TH2F*) GetHisto("AnaHadrons_hEtaPhiPositive" ,iprod);
+ hTrackEtaPhi [iprod]->Add((TH2F*) GetHisto("AnaHadrons_hEtaPhiNegative" ,iprod));
+
+ hTrackPhiSPD [iprod] = (TH1F*)hTrackEtaPhiSPD [iprod]->ProjectionY(Form("hTrackPhiSPD%s" ,prod[iprod].Data()),0,1000);
+ hTrackPhiNoSPD [iprod] = (TH1F*)hTrackEtaPhiNoSPD[iprod]->ProjectionY(Form("hTrackPhiNoSPD%s",prod[iprod].Data()),0,1000);
+ hTrackPhi [iprod] = (TH1F*)hTrackEtaPhi [iprod]->ProjectionY(Form("hTrackPhi%s" ,prod[iprod].Data()),0,1000);
+
+ hTrackPt [iprod]->Sumw2();
+ hTrackPtSPD [iprod]->Sumw2();
+ hTrackPtNoSPD[iprod]->Sumw2();
+
+ hTrackPt [iprod]->Scale(1./nEvents[iprod]);
+ hTrackPtSPD [iprod]->Scale(1./nEvents[iprod]);
+ hTrackPtNoSPD[iprod]->Scale(1./nEvents[iprod]);
+
+ hTrackPhi [iprod]->Sumw2();
+ hTrackPhiSPD [iprod]->Sumw2();
+ hTrackPhiNoSPD[iprod]->Sumw2();
+
+ hTrackPhi [iprod]->Scale(1./nEvents[iprod]);
+ hTrackPhiSPD [iprod]->Scale(1./nEvents[iprod]);
+ hTrackPhiNoSPD[iprod]->Scale(1./nEvents[iprod]);
+
+ hTrackPt[iprod]->SetTitle("Track spectra with/out SPD");
+ hTrackPt[iprod]->SetYTitle("1/N_{events} dN/dp_{T}");
+ hTrackPt[iprod]->SetTitleOffset(1.5,"Y");
+ hTrackPt[iprod]->SetMarkerColor(color[iprod]);
+ hTrackPt[iprod]->SetMarkerStyle(20);
+ hTrackPt[iprod]->SetAxisRange(0.,30.,"X");
+ //hTrackPt[iprod]->SetMaximum(1.1);
+ //hTrackPt[iprod]->SetMinimum(0);
+
+ hTrackPtSPD[iprod]->SetMarkerColor(color[iprod]);
+ hTrackPtSPD[iprod]->SetMarkerStyle(26);
+
+ hTrackPtNoSPD[iprod]->SetMarkerColor(color[iprod]);
+ hTrackPtNoSPD[iprod]->SetMarkerStyle(25);
+
+ hTrackPhi[iprod]->SetTitle("Track #phi with/out SPD");
+ hTrackPhi[iprod]->SetYTitle("1/N_{events} dN/d#phi");
+ hTrackPhi[iprod]->SetTitleOffset(1.5,"Y");
+ hTrackPhi[iprod]->SetMarkerColor(color[iprod]);
+ hTrackPhi[iprod]->SetMarkerStyle(20);
+ hTrackPhi[iprod]->SetAxisRange(0.,30.,"X");
+ //hTrackPhi[iprod]->SetMaximum(1.1);
+ //hTrackPhi[iprod]->SetMinimum(0);
+
+ hTrackPhiSPD[iprod]->SetMarkerColor(color[iprod]);
+ hTrackPhiSPD[iprod]->SetMarkerStyle(26);
+
+ hTrackPhiNoSPD[iprod]->SetMarkerColor(color[iprod]);
+ hTrackPhiNoSPD[iprod]->SetMarkerStyle(25);
+
+ if(iprod > 0)
+ {
+ hRatTrackPhi [iprod-1] = (TH1F*)hTrackPhi [iprod]->Clone(Form("hRatTrackPhi%s" ,prod[iprod].Data()));
+ hRatTrackPhiNoSPD[iprod-1] = (TH1F*)hTrackPhiNoSPD[iprod]->Clone(Form("hRatTrackPhiNoSPD%s",prod[iprod].Data()));
+ hRatTrackPhiSPD [iprod-1] = (TH1F*)hTrackPhiSPD [iprod]->Clone(Form("hRatTrackPhiSPD%s" ,prod[iprod].Data()));
+
+ hRatTrackPhi [iprod-1]->Divide(hRatTrackPhi [iprod-1],hTrackPhi [0],1.000,1,"B");
+ hRatTrackPhiSPD [iprod-1]->Divide(hRatTrackPhiSPD [iprod-1],hTrackPhiSPD [0],1.000,1,"B");
+ hRatTrackPhiNoSPD[iprod-1]->Divide(hRatTrackPhiNoSPD[iprod-1],hTrackPhiNoSPD[0],1.000,1,"B");
+
+ hRatTrackPt [iprod-1] = (TH1F*)hTrackPt [iprod]->Clone(Form("hRatTrackPt%s" ,prod[iprod].Data()));
+ hRatTrackPtNoSPD[iprod-1] = (TH1F*)hTrackPtNoSPD[iprod]->Clone(Form("hRatTrackPtNoSPD%s",prod[iprod].Data()));
+ hRatTrackPtSPD [iprod-1] = (TH1F*)hTrackPtSPD [iprod]->Clone(Form("hRatTrackPtSPD%s" ,prod[iprod].Data()));
+
+ hRatTrackPt [iprod-1]->Divide(hRatTrackPt [iprod-1],hTrackPt [0],1.000,1,"B");
+ hRatTrackPtSPD [iprod-1]->Divide(hRatTrackPtSPD [iprod-1],hTrackPtSPD [0],1.000,1,"B");
+ hRatTrackPtNoSPD[iprod-1]->Divide(hRatTrackPtNoSPD[iprod-1],hTrackPtNoSPD[0],1.000,1,"B");
+ }
+ }
+
+ // photon-track correlation
+ {
+ h2XE [iprod]= (TH2F*) GetHisto("AnaPhotonHadronCorr_hXECharged",iprod);
+ h2XEUE [iprod]= (TH2F*) GetHisto("AnaPhotonHadronCorr_hXEUeCharged",iprod);
+
+ Float_t minClusterE = 8;
+ TH1F * hLeading = (TH1F*) GetHisto("AnaPhotonHadronCorr_hPtLeading",iprod);
+ Int_t minClusterEBin = hLeading->FindBin(minClusterE);
+ Float_t nTrig = hLeading->Integral(minClusterE,100000);
+
+ hXE [iprod] = (TH1F*)h2XE [iprod]->ProjectionY(Form("hXE%s" ,prod[iprod].Data()),minClusterEBin,1000);
+ hXEUE[iprod] = (TH1F*)h2XEUE[iprod]->ProjectionY(Form("hXEUE%s",prod[iprod].Data()),minClusterEBin,1000);
+
+ hXE [iprod]->Sumw2();
+ hXEUE[iprod]->Sumw2();
+
+ hXE [iprod]->Scale(1./nTrig);
+ hXEUE[iprod]->Scale(1./nTrig);
+
+ hXE[iprod]->SetTitle(Form("#gamma-hadron x_{E}, p_{T,Trig}>%2.1f GeV/c",minClusterE));
+ hXE[iprod]->SetYTitle("1/N_{trigger} dN/dx_{E}");
+ hXE[iprod]->SetTitleOffset(1.5,"Y");
+ hXE[iprod]->SetMarkerColor(color[iprod]);
+ hXE[iprod]->SetMarkerStyle(20);
+ hXE[iprod]->SetAxisRange(0.,1.,"X");
+ //hXE[iprod]->SetMaximum(1.1);
+ //hXE[iprod]->SetMinimum(0);
+
+ hXEUE[iprod]->SetMarkerColor(color[iprod]);
+ hXEUE[iprod]->SetMarkerStyle(25);
+
+ if(iprod > 0)
+ {
+ hRatXE [iprod-1] = (TH1F*)hXE [iprod]->Clone(Form("hRatXE%s" ,prod[iprod].Data()));
+ hRatXEUE[iprod-1] = (TH1F*)hXEUE[iprod]->Clone(Form("hRatXEUE%s",prod[iprod].Data()));
+
+ hRatXE [iprod-1]->Divide(hRatXE [iprod-1],hXE [0],1.000,1,"B");
+ hRatXEUE[iprod-1]->Divide(hRatXEUE[iprod-1],hXEUE[0],1.000,1,"B");
+ }
+ }
+
+ //Centrality
+ {
+ hCen[iprod] = (TH1F*) GetHisto("hCentrality",iprod);
+
+ hCen[iprod]->Sumw2();
+
+ hCen[iprod]->Scale(1./nEvents[iprod]);
+
+ hCen[iprod]->SetTitle("Centrality");
+ hCen[iprod]->SetYTitle("1/N_{events} dN/d centrality");
+ hCen[iprod]->SetTitleOffset(1.5,"Y");
+ hCen[iprod]->SetMarkerColor(color[iprod]);
+ hCen[iprod]->SetMarkerStyle(20);
+ //hCen[iprod]->SetAxisRange(0.,30.,"X");
+ //hCen[iprod]->SetMaximum(1.1);
+ //hCen[iprod]->SetMinimum(0);
+
+ if(iprod > 0)
+ {
+ hRatCen[iprod-1] = (TH1F*)hCen[iprod]->Clone(Form("hRatCen%s" ,prod[iprod].Data()));
+
+ hRatCen[iprod-1]->Divide(hRatCen[iprod-1],hCen [0],1.000,1,"B");
+ }
+ }
+
+ //Vertex
+ {
+ hVertex[0][iprod] = (TH1F*) GetHisto("hZVertex",iprod);
+ hVertex[1][iprod] = (TH1F*) GetHisto("hYVertex",iprod);
+ hVertex[2][iprod] = (TH1F*) GetHisto("hXVertex",iprod);
+
+ for(Int_t ivertex = 0; ivertex < 3; ivertex++)
+ {
+ //hVertex[ivertex][iprod]->Sumw2();
+
+ hVertex[ivertex][iprod]->Scale(1./nEvents[iprod]);
+
+ //hVertex[ivertex][iprod]->SetTitle("Centrality");
+ hVertex[ivertex][iprod]->SetYTitle("1/N_{events} dN/ d vertex");
+ hVertex[ivertex][iprod]->SetTitleOffset(1.5,"Y");
+ hVertex[ivertex][iprod]->SetMarkerColor(color[iprod]);
+ hVertex[ivertex][iprod]->SetLineColor(color[iprod]);
+ hVertex[ivertex][iprod]->SetMarkerStyle(20);
+ hVertex[ivertex][iprod]->SetAxisRange(-15,15.,"X");
+ //hVertex[ivertex][iprod]->SetMaximum(1.1);
+ //hVertex[ivertex][iprod]->SetMinimum(0);
+
+ if(iprod > 0)
+ {
+ hRatVertex[ivertex][iprod-1] = (TH1F*)hVertex[ivertex][iprod]->Clone(Form("hRatVertex%s_%d" ,prod[iprod].Data(),ivertex));
+
+ hRatVertex[ivertex][iprod-1]->Divide(hRatVertex[ivertex][iprod-1],hVertex[ivertex][0],1.000,1,"B");
+ }
+ }
+ }
+
+ }
+
+ /////////////////
+ // Make the plots
+ /////////////////
+
+ //Legend for productions
+ TLegend lprod(0.3,0.475,0.84,0.675);
+ lprod.SetTextSize(0.04);
+ lprod.SetBorderSize(0);
+ lprod.SetFillColor(0);
+
+ //Calimeter Cluster
+ {
+ TCanvas * ccalo = new TCanvas(Form("Cluster_%s",histoTag.Data()),"",1000,500);
+ ccalo->Divide(2,1);
+
+ ccalo->cd(1);
+ gPad->SetLogy();
+
+ hCorr[0]->Draw();
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hRaw [iprod]->Draw("same");
+ hCorr[iprod]->Draw("same");
+ hTM [iprod]->Draw("same");
+ hShSh[iprod]->Draw("same");
+
+ lprod.AddEntry(hRaw[iprod],prod[iprod],"P");
+ }
+
+ lprod.Draw();
+
+ TLegend lcl(0.35,0.7,0.84,0.89);
+ lcl.SetTextSize(0.04);
+ lcl.SetBorderSize(0);
+ lcl.SetFillColor(0);
+ lcl.AddEntry(hRaw [0],"Raw","P");
+ lcl.AddEntry(hCorr[0],"No Exotics + non lin.","P");
+ lcl.AddEntry(hTM [0], "+ Track matching","P");
+ lcl.AddEntry(hShSh[0],"+ #lambda^{2}_{0} < 0.4","P");
+ lcl.Draw();
+
+ ccalo->cd(2);
+ //gPad->SetLogy();
+
+ hRatCorr[0]->SetTitle("Cluster spectra ratio");
+ hRatCorr[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ hRatCorr[0]->SetMinimum(0.850);
+ hRatCorr[0]->SetMaximum(1.025);
+ hRatCorr[0]->Draw("");
+
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatRaw [iprod]->Draw("same");
+ hRatCorr[iprod]->Draw("same");
+ hRatTM [iprod]->Draw("same");
+ hRatShSh[iprod]->Draw("same");
+ }
+
+ TLine l1(0,1,30,1);
+ TLine l2(0,0.975,30,0.975);
+ TLine l3(0,0.95,30,0.95);
+ TLine l4(0,0.925,30,0.925);
+
+ l1.Draw("same");
+ l2.Draw("same");
+ l3.Draw("same");
+ l4.Draw("same");
+
+ ccalo->Print(Form("%s_ClusterSpectraComp.eps",histoTag.Data()));
+ }
+
+ //Cluster-Track Matching Residual
+ {
+ TLine l0(0,hTrackMatchResEtaNeg[0]->GetMinimum(),0,hTrackMatchResEtaNeg[0]->GetMaximum()*1.2);
+
+ TLegend lres(0.6,0.75,0.84,0.89);
+ lres.SetTextSize(0.04);
+ //lres.SetBorderSize(0);
+ lres.SetFillColor(0);
+ lres.AddEntry(hTrackMatchResEtaNeg[0],"Negative","P");
+ lres.AddEntry(hTrackMatchResEtaPos[0],"Positive","P");
+ lres.Draw();
+
+ TCanvas * ccalo2 = new TCanvas(Form("MatchingResiduals_%s",histoTag.Data()),"",500,500);
+ ccalo2->Divide(2,2);
+
+ ccalo2->cd(1);
+ //gPad->SetLogy();
+
+ hTrackMatchResEtaPos[0]->Draw("");
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hTrackMatchResEtaNeg[iprod]->Draw("same");
+ hTrackMatchResEtaPos[iprod]->Draw("same");
+ }
+
+ l0.Draw("same");
+ lres.Draw();
+ lprod.Draw();
+ ccalo2->cd(2);
+
+ hTrackMatchResPhiPos[0]->Draw("");
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hTrackMatchResPhiNeg[iprod]->Draw("same");
+ hTrackMatchResPhiPos[iprod]->Draw("same");
+ }
+
+ l0.Draw("same");
+
+ ccalo2->cd(3);
+ //gPad->SetLogy();
+
+ hRatTrackMatchResEtaPos[0]->SetMaximum(1.25);
+ hRatTrackMatchResEtaPos[0]->SetMinimum(0.98);
+ hRatTrackMatchResEtaPos[0]->Draw("");
+ hRatTrackMatchResEtaPos[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatTrackMatchResEtaNeg[iprod]->Draw("same");
+ hRatTrackMatchResEtaPos[iprod]->Draw("same");
+ }
+
+ //l0.Draw("same");
+
+ ccalo2->cd(4);
+
+ hRatTrackMatchResPhiPos[0]->SetMaximum(1.05);
+ hRatTrackMatchResPhiPos[0]->SetMinimum(0.98);
+ hRatTrackMatchResPhiPos[0]->Draw("");
+ hRatTrackMatchResPhiPos[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatTrackMatchResPhiNeg[iprod]->Draw("same");
+ hRatTrackMatchResPhiPos[iprod]->Draw("same");
+ }
+
+ ccalo2->Print(Form("%s_MatchingResidualsComp.eps",histoTag.Data()));
+ }
+
+ // Hybrid tracks
+ {
+ TLegend ltrack(0.6,0.75,0.84,0.89);
+ ltrack.SetTextSize(0.04);
+ //ltrack.SetBorderSize(0);
+ ltrack.SetFillColor(0);
+ ltrack.AddEntry(hTrackPt [0],"All","P");
+ ltrack.AddEntry(hTrackPtSPD [0],"SPD","P");
+ ltrack.AddEntry(hTrackPtNoSPD[0],"No SPD","P");
+
+ TCanvas * ctrack = new TCanvas(Form("TrackHisto_%s",histoTag.Data()),"",1500,1500);
+ ctrack->Divide(2,2);
+ ctrack->cd(1);
+ gPad->SetLogy();
+ hTrackPt[0]->Draw("");
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hTrackPt [iprod]->Draw("same");
+ hTrackPtSPD [iprod]->Draw("same");
+ hTrackPtNoSPD[iprod]->Draw("same");
+ }
+
+ ltrack.Draw();
+ lprod.Draw();
+
+ ctrack->cd(2);
+
+ hRatTrackPt[0]->SetMaximum(1.05);
+ hRatTrackPt[0]->SetMinimum(0.95);
+ hRatTrackPt[0]->Draw("");
+ hRatTrackPt[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatTrackPt [iprod]->Draw("same");
+ hRatTrackPtSPD [iprod]->Draw("same");
+ hRatTrackPtNoSPD[iprod]->Draw("same");
+ }
+
+ ctrack->cd(3);
+ hTrackPhi[0]->SetMaximum(3.);
+ hTrackPhi[0]->SetMinimum(0.);
+ hTrackPhi[0]->Draw("");
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hTrackPhi [iprod]->Draw("same");
+ hTrackPhiSPD [iprod]->Draw("same");
+ hTrackPhiNoSPD[iprod]->Draw("same");
+ }
+
+ ctrack->cd(4);
+ //gPad->SetLogy();
+
+ hRatTrackPhi[0]->SetMaximum(1.05);
+ hRatTrackPhi[0]->SetMinimum(0.95);
+ hRatTrackPhi[0]->Draw("");
+ hRatTrackPhi[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatTrackPhi [iprod]->Draw("same");
+ hRatTrackPhiSPD [iprod]->Draw("same");
+ hRatTrackPhiNoSPD[iprod]->Draw("same");
+ }
+
+ ctrack->Print(Form("%s_TrackComp.eps",histoTag.Data()));
+ }
+
+ // XE
+ {
+ TLegend lxe(0.6,0.75,0.84,0.89);
+ lxe.SetTextSize(0.04);
+ //lxe.SetBorderSize(0);
+ lxe.SetFillColor(0);
+ lxe.AddEntry(hXE [0],"Signal+bkg","P");
+ lxe.AddEntry(hXEUE[0],"Und. Event","P");
+
+ TCanvas * cxe = new TCanvas(Form("XEHisto_%s",histoTag.Data()),"",1000,500);
+ cxe->Divide(2,1);
+ cxe->cd(1);
+ gPad->SetLogy();
+ hXE[0]->Draw("");
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hXE [iprod]->Draw("same");
+ hXEUE[iprod]->Draw("same");
+ }
+
+ lxe.Draw();
+ lprod.Draw();
+
+ cxe->cd(2);
+
+ hRatXE[0]->SetMaximum(1.05);
+ hRatXE[0]->SetMinimum(0.95);
+ hRatXE[0]->Draw("");
+ hRatXE[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatXE [iprod]->Draw("same");
+ hRatXEUE[iprod]->Draw("same");
+ }
+
+ cxe->Print(Form("%s_XEComp.eps",histoTag.Data()));
+ }
+
+ // Centrality
+ {
+ TCanvas * ccen = new TCanvas(Form("Centrality_%s",histoTag.Data()),"",1000,500);
+ ccen->Divide(2,1);
+
+ ccen->cd(1);
+ //gPad->SetLogy();
+
+ hCen[0]->Draw();
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hCen[iprod]->Draw("same");
+ }
+
+ lprod.Draw();
+
+ ccen->cd(2);
+ //gPad->SetLogy();
+
+ hRatCen[0]->SetTitle("Centrality");
+ hRatCen[0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+ hRatCen[0]->SetMinimum(0.95);
+ hRatCen[0]->SetMaximum(1.05);
+ hRatCen[0]->Draw("");
+
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatCen [iprod]->Draw("same");
+ }
+
+ TLine l1(0,1,100,1);
+
+ l1.Draw("same");
+
+ ccen->Print(Form("%s_CentralityComp.eps",histoTag.Data()));
+ }
+
+ // Vertex
+ {
+ TCanvas * cvertex = new TCanvas(Form("Vertex_%s",histoTag.Data()),"",3*500,2*500);
+ cvertex->Divide(3,2);
+ Int_t npannel = 1;
+ for(Int_t ivertex = 0; ivertex < 3; ivertex++)
+ {
+ cvertex->cd(npannel);
+ //gPad->SetLogy();
+
+ hVertex[ivertex][0]->Draw();
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ hVertex[ivertex][iprod]->Draw("same");
+ }
+
+ lprod.Draw();
+
+ cvertex->cd(npannel+3);
+ //gPad->SetLogy();
+
+ //hRatVertex[ivertex][0]->SetTitle("");
+ hRatVertex[ivertex][0]->SetYTitle(Form("data X / %s",prod[0].Data()));
+// hRatVertex[ivertex][0]->SetMinimum(0.95);
+// hRatVertex[ivertex][0]->SetMaximum(1.05);
+ hRatVertex[ivertex][0]->Draw("");
+
+ for(Int_t iprod = 0; iprod < nProd-1; iprod++)
+ {
+ hRatVertex[ivertex][iprod]->Draw("same");
+ }
+
+ npannel++;
+ }
+ cvertex->Print(Form("%s_VertexComp.eps",histoTag.Data()));
+ }
+
+
+}
+
+//_____________________________________________________
+void GetFileAndList(TString fileName, TString listName)
+{
+
+ for(Int_t iprod = 0; iprod < nProd; iprod++)
+ {
+ file[iprod] = new TFile(Form("%s/%s",prod[iprod].Data(),fileName.Data()),"read");
+ if(file[iprod]->Get("hNEvents"))
+ {
+ nEvents[iprod] = ((TH1F*)file[iprod]->Get("hNEvents"))->GetEntries();
+ printf("%s: nEvents %e\n",prod[iprod].Data(),nEvents[iprod]);
+ }
+
+ TDirectory * dir = (TDirectory*) file[iprod]->Get(listName);
+ if(dir)
+ {
+ list[iprod] = (TList*) dir->Get(listName);
+ nEvents[iprod] = ((TH1F*)list[iprod]->FindObject("hNEvents"))->GetEntries();
+ printf("%s: nEvents %e\n",prod[iprod],nEvents[iprod]);
+ }
+ else list[iprod] = 0;
+ }
+
+}
+
+//___________________________________
+TObject * GetHisto(TString histoName, Int_t iprod)
+{
+ // Check if the list is available, if not get the histo directly from file
+
+ if(list[iprod]) return list[iprod]->FindObject(histoName);
+ else return file[iprod]->Get (histoName);
+}