ROOT logo
//=====================================================//
//Macro that reads the output of the flow analysis and 
//retrieves the QC and the MH containers.
//The macro produces an output called outputMH.root 
//that contains the four histograms related to the 
//3 particle correlator and the two integrated v2{2,QC} 
//and v2{4,QC}
//Author: Panos.Christakoglou@cern.ch

const Int_t nCentralityBins = 9;
TString strCentralityBins[nCentralityBins] = {"0-5","5-10","10-20",
					      "20-30","30-40","40-50",
					      "50-60","60-70","70-80"};

void plotMHCentrality(const char* filename = "AnalysisResults.root",
		      const char* systemType = "PbPb",
		      Bool_t isPID = kTRUE,
		      Int_t charge = 1) {
  gStyle->SetPalette(1,0);

  //----------------------------------------------------------
  // >>>>>>>>>>> Load libraries <<<<<<<<<<<<<< 
  //----------------------------------------------------------
  gSystem->AddIncludePath("-I$ROOTSYS/include");
  gSystem->Load("libGeom");
  gSystem->Load("libVMC");
  gSystem->Load("libXMLIO");
  gSystem->Load("libPhysics");
  
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libPWGflowBase.so");
  gSystem->Load("libPWGflowTasks.so");

  AliFlowTrackCuts::PIDsource sourcePID = AliFlowTrackCuts::kTOFbayesian;
  AliPID::EParticleType particleType=AliPID::kPion;

  //----------------------------------------------------------
  // >>>>>>>>>>> Open file - Get objects <<<<<<<<<<<<<< 
  //----------------------------------------------------------
  TFile *fInput = TFile::Open(filename);
  if(!fInput) {
    Printf("File not found!!!");
    break;
  }
  //fInput->ls();

  //Get the TList of the MH
  TList *listMH = GetMHResults(fInput,systemType,isPID,
			       sourcePID,particleType,charge);

  //Get the TList of the QC
  TList *listQC = GetQCResults(fInput,systemType,isPID,
			       sourcePID,particleType,charge);

  //Get the TList of the SP
  //TList *listSP = GetSPResults(fInput,systemType,isPID,
  //sourcePID,particleType,charge);

  TFile *fOutput = TFile::Open("outputMH.root","recreate");
  listMH->Write();
  listQC->Write();
  listSP->Write();
  fOutput->Close();
}

//____________________________________________________________//
TList *GetSPResults(TFile *fInput,
		    const char* systemType = 0x0,
		    Bool_t isPID = kTRUE,
		    AliFlowTrackCuts::PIDsource sourcePID = AliFlowTrackCuts::kTOFbayesian,
		    AliPID::EParticleType particleType=AliPID::kPion,
		    Int_t charge = 0) {
  //Function that reads the TDirectoryFile of the MH
  //and returns a TList with the relevant plots.
  TList *listOutput = new TList();
  listOutput->SetName("listSP");

  //______________________________________________________________//
  //Global variables
  AliFlowCommonHistResults *commonHistRes;
  TString gAliFlowCommonHistName;

  //______________________________________________________________//
  //Get the TDirectoryFile
  TString directoryNameSP = 0;
  directoryNameSP = "outputSPanalysis"; 
  TDirectoryFile *outputSPanalysis = dynamic_cast<TDirectoryFile *>(fInput->Get(directoryNameSP.Data()));
  if(!outputSPanalysis) {
    Printf("SP directory not found!!!");
    break;
  }
  //outputSPanalysis->ls();

  //______________________________________________________________//
  //Get the TList
  TString listNameSP = 0;
  TList *cobjSP;
  for(Int_t iCentralityBin = 0; iCentralityBin < nCentralityBins; iCentralityBin++) {
    //for(Int_t iCentralityBin = 0; iCentralityBin < 1; iCentralityBin++) {
    listNameSP = "cobjSP_"; 
    listNameSP += systemType;
    listNameSP += "_";
    listNameSP += strCentralityBins[iCentralityBin];
    if(isPID) {
      listNameSP += AliFlowTrackCuts::PIDsourceName(sourcePID);
      listNameSP += "_";
      listNameSP += AliPID::ParticleName(particleType);
    }
    else {
      listNameSP += "AllCharged";
    }
    if (charge < 0) listNameSP += "-";
    if (charge > 0) listNameSP += "+" ;
    cobjSP = dynamic_cast<TList *>(outputSPanalysis->Get(listNameSP.Data()));
    if(!cobjSP) {
      Printf("SP object list not found!!!");
      break;
    }
    
    //Common hist for SP
    Double_t nAnalyzedEvents = 0.;
    AliFlowCommonHist *commonHistSP = dynamic_cast<AliFlowCommonHist *>(cobjSP->FindObject("AliFlowCommonHistSP"));
    if(commonHistSP) {
      TList *clistSPCommonHist = dynamic_cast<TList *>(commonHistSP->GetHistList());
      if(clistSPCommonHist) {
	TH1F *gHistMultRPSP = dynamic_cast<TH1F *>(clistSPCommonHist->FindObject("Control_Flow_MultRP_AliFlowCommonHistSP"));
	if(gHistMultRPSP)
	  nAnalyzedEvents = gHistMultRPSP->GetEntries();
      }
    }

    //Integrated flow RP
    gAliFlowCommonHistName = "AliFlowCommonHistResultsSP";
    commonHistRes = dynamic_cast<AliFlowCommonHistResults *>(cobjSP->FindObject(gAliFlowCommonHistName.Data()));
    //Printf("AliFlowCommonHist name %s",gAliFlowCommonHistName[0].Data());
    TH1D *histSP = commonHistRes->GetHistIntFlowRP();
    histSP->SetName("fHistIntegratedFlowRPSP");
    
    //______________________________________________________________//
    //Print the results
    Printf("\n============================================================");
    Printf("Analyzed events: %d",(Int_t)nAnalyzedEvents);
    Printf("v2(SP): %lf +- %lf",histSP->GetBinContent(1),
	   histSP->GetBinError(1));
    Printf("============================================================");

    TList *dirOutput = new TList();
    dirOutput->SetName(listNameSP.Data());
    dirOutput->Add(histSP);
    listOutput->Add(dirOutput);
  }//loop over centrality bins TLists

  return listOutput;
}

//____________________________________________________________//
TList *GetQCResults(TFile *fInput,
		    const char* systemType = 0x0,
		    Bool_t isPID = kTRUE,
		    AliFlowTrackCuts::PIDsource sourcePID = AliFlowTrackCuts::kTOFbayesian,
		    AliPID::EParticleType particleType=AliPID::kPion,
		    Int_t charge = 0) {
  //Function that reads the TDirectoryFile of the QC
  //and returns a TList with the relevant plots.
  TList *listOutput = new TList();
  listOutput->SetName("listQC");

  //______________________________________________________________//
  //Global variables
  const Int_t nQCMethods = 4;
  AliFlowCommonHistResults *commonHistRes[nQCMethods];
  TString methodIntegratedFlowQC[nQCMethods] = {"2ndOrderQC",
						"4thOrderQC",
						"6thOrderQC",
						"8thOrderQC"};
  TString gAliFlowCommonHistName[nQCMethods];

  //______________________________________________________________//
  //Get the TDirectoryFile
  TString directoryNameQC = 0;
  directoryNameQC = "outputQCanalysis"; 
  TDirectoryFile *outputQCanalysis = dynamic_cast<TDirectoryFile *>(fInput->Get(directoryNameQC.Data()));
  if(!outputQCanalysis) {
    Printf("QC directory not found!!!");
    break;
  }
  //outputQCanalysis->ls();

  //______________________________________________________________//
  //Get the TList
  TString listNameQC = 0;
  TList *cobjQC;
  for(Int_t iCentralityBin = 0; iCentralityBin < nCentralityBins; iCentralityBin++) {
    //for(Int_t iCentralityBin = 0; iCentralityBin < 1; iCentralityBin++) {
    listNameQC = "cobjQC_"; 
    listNameQC += systemType;
    listNameQC += "_";
    listNameQC += strCentralityBins[iCentralityBin];
    if(isPID) {
      listNameQC += AliFlowTrackCuts::PIDsourceName(sourcePID);
      listNameQC += "_";
      listNameQC += AliPID::ParticleName(particleType);
    }
    else {
      listNameQC += "AllCharged";
    }
    if (charge < 0) listNameQC += "-";
    if (charge > 0) listNameQC += "+";

    cobjQC = dynamic_cast<TList *>(outputQCanalysis->Get(listNameQC.Data()));
    if(!cobjQC) {
      Printf("QC object list not found!!!");
      break;
    }
    
    //Common hist for QC
    Double_t nAnalyzedEvents = 0.;
    AliFlowCommonHist *commonHistQC = dynamic_cast<AliFlowCommonHist *>(cobjQC->FindObject("AliFlowCommonHistQC"));
    if(commonHistQC) {
      TList *clistQCCommonHist = dynamic_cast<TList *>(commonHistQC->GetHistList());
      if(clistQCCommonHist) {
	TH1F *gHistMultRPQC = dynamic_cast<TH1F *>(clistQCCommonHist->FindObject("Control_Flow_MultRP_AliFlowCommonHistQC"));
	if(gHistMultRPQC)
	  nAnalyzedEvents = gHistMultRPQC->GetEntries();
      }
    }

    //2nd order QC
    gAliFlowCommonHistName[0] = "AliFlowCommonHistResults";
    gAliFlowCommonHistName[0] += methodIntegratedFlowQC[0].Data();
    commonHistRes[0] = dynamic_cast<AliFlowCommonHistResults *>(cobjQC->FindObject(gAliFlowCommonHistName[0].Data()));
    //Printf("AliFlowCommonHist name %s",gAliFlowCommonHistName[0].Data());
    TH1D *histQC_2 = commonHistRes[0]->GetHistIntFlowRP();
    histQC_2->SetName("fHistIntegratedFlowRPQC_2");
    
    //4th order QC
    gAliFlowCommonHistName[1] = "AliFlowCommonHistResults";
    gAliFlowCommonHistName[1] += methodIntegratedFlowQC[1].Data();
    commonHistRes[1] = dynamic_cast<AliFlowCommonHistResults *>(cobjQC->FindObject(gAliFlowCommonHistName[1].Data()));
    //Printf("AliFlowCommonHist name %s",gAliFlowCommonHistName[1].Data());
    TH1D *histQC_4 = commonHistRes[1]->GetHistIntFlowRP();
    histQC_4->SetName("fHistIntegratedFlowRPQC_4");
    
    //6th order QC
    gAliFlowCommonHistName[2] = "AliFlowCommonHistResults";
    gAliFlowCommonHistName[2] += methodIntegratedFlowQC[2].Data();
    commonHistRes[2] = dynamic_cast<AliFlowCommonHistResults *>(cobjQC->FindObject(gAliFlowCommonHistName[2].Data()));
    //Printf("AliFlowCommonHist name %s",gAliFlowCommonHistName[2].Data());
    TH1D *histQC_6 = commonHistRes[2]->GetHistIntFlowRP();
    histQC_6->SetName("fHistIntegratedFlowRPQC_6");
    
    //8th order QC
    gAliFlowCommonHistName[3] = "AliFlowCommonHistResults";
    gAliFlowCommonHistName[3] += methodIntegratedFlowQC[3].Data();
    commonHistRes[3] = dynamic_cast<AliFlowCommonHistResults *>(cobjQC->FindObject(gAliFlowCommonHistName[3].Data()));
    //Printf("AliFlowCommonHist name %s",gAliFlowCommonHistName[3].Data());
    TH1D *histQC_8 = commonHistRes[3]->GetHistIntFlowRP();
    histQC_8->SetName("fHistIntegratedFlowRPQC_8");
    
    TString gHistEventsName = "gHistEvents";
    gHistEventsName += strCentralityBins[iCentralityBin];
    TH1D *gHistEvents = new TH1D(gHistEventsName.Data(),
				 ";;N_{analyzed events}",
				 1,0.5,1.5);
    gHistEvents->SetBinContent(1,nAnalyzedEvents);

    //______________________________________________________________//
    //Print the results
    Printf("\n============================================================");
    Printf("Analyzed events: %d",(Int_t)nAnalyzedEvents);
    Printf("v2(2,QC): %lf +- %lf",histQC_2->GetBinContent(1),
	   histQC_2->GetBinError(1));
    Printf("v2(4,QC): %lf +- %lf",histQC_4->GetBinContent(1),
	   histQC_4->GetBinError(1));
    Printf("v2(6,QC): %lf +- %lf",histQC_6->GetBinContent(1),
	   histQC_6->GetBinError(1));
    Printf("v2(8,QC): %lf +- %lf",histQC_8->GetBinContent(1),
	   histQC_8->GetBinError(1));
    Printf("============================================================");

    TList *dirOutput = new TList();
    dirOutput->SetName(listNameQC.Data());
    dirOutput->Add(histQC_2);
    dirOutput->Add(histQC_4);
    dirOutput->Add(histQC_6);
    dirOutput->Add(histQC_8);
    dirOutput->Add(gHistEvents);
    listOutput->Add(dirOutput);
  }//loop over centrality bins TLists

  return listOutput;
}

//____________________________________________________________//
TList *GetMHResults(TFile *fInput,
		    const char* systemType = 0x0,
		    Bool_t isPID = kTRUE,
		    AliFlowTrackCuts::PIDsource sourcePID = AliFlowTrackCuts::kTOFbayesian,
		    AliPID::EParticleType particleType=AliPID::kPion,
		    Int_t charge = 0) {
  //Function that reads the TDirectoryFile of the MH
  //and returns a TList with the relevant plots.
  TList *listOutput = new TList();
  listOutput->SetName("listMH");

  //______________________________________________________________//
  //Get the TDirectoryFile
  TString directoryNameMH = 0;
  directoryNameMH = "outputMHanalysis"; 
  TDirectoryFile *outputMHanalysis = dynamic_cast<TDirectoryFile *>(fInput->Get(directoryNameMH.Data()));
  if(!outputMHanalysis) {
    Printf("MH directory not found!!!");
    break;
  }
  //outputMHanalysis->ls();

  //______________________________________________________________//
  //Get the TList
  TString listNameMH = 0;
  TList *cobjMH;
  TCanvas *c[nCentralityBins];
  for(Int_t iCentralityBin = 0; iCentralityBin < nCentralityBins; iCentralityBin++) {
    //for(Int_t iCentralityBin = 0; iCentralityBin < 1; iCentralityBin++) {
    listNameMH = "cobjMH_"; 
    listNameMH += systemType;
    listNameMH += "_";
    listNameMH += strCentralityBins[iCentralityBin];
    if(isPID) {
      listNameMH += AliFlowTrackCuts::PIDsourceName(sourcePID);
      listNameMH += "_";
      listNameMH += AliPID::ParticleName(particleType);
    }
    else {
      listNameMH += "AllCharged";
    }
    if (charge < 0) listNameMH += "-";
    if (charge > 0) listNameMH += "+";

    //Printf("%s",listNameMH.Data());
    cobjMH = dynamic_cast<TList *>(outputMHanalysis->Get(listNameMH.Data()));
    if(!cobjMH) {
      Printf("MH object list not found!!!");
      break;
    }
    //cobjMH->ls();
    
    //______________________________________________________________//
    //Get the daughter TLists
    TList *listWeights = dynamic_cast<TList *>(cobjMH->FindObject("Weights"));
    //listWeights->ls();
    TList *listProfiles = dynamic_cast<TList *>(cobjMH->FindObject("Profiles"));
    //listProfiles->ls();
    TList *listResults = dynamic_cast<TList *>(cobjMH->FindObject("Results"));
    //listResults->ls();

    if((!listWeights)||(!listProfiles)||(!listResults)) {
      Printf("MH output lists not found!!!");
      break;
    }
    
    //______________________________________________________________//
    TProfile *fAnalysisSettings = dynamic_cast<TProfile *>(cobjMH->FindObject("fAnalysisSettings"));

    //______________________________________________________________//
    //Get the objects from the Results list
    TH1D *f3pCorrelatorHist = dynamic_cast<TH1D *>(listResults->FindObject("f3pCorrelatorHist"));
    TH1D *fDetectorBiasHist = dynamic_cast<TH1D *>(listResults->FindObject("fDetectorBiasHist"));
    TH1D *f3pCorrelatorVsMHist = dynamic_cast<TH1D *>(listResults->FindObject("f3pCorrelatorVsMHist"));
    TH1D *fDetectorBiasVsMHist = dynamic_cast<TH1D *>(listResults->FindObject("fDetectorBiasVsMHist"));
    
    //______________________________________________________________//
    //Get the objects from the Profile list
    TProfile *f3pCorrelatorPro = dynamic_cast<TProfile *>(listProfiles->FindObject("f3pCorrelatorPro"));
    TProfile *fNonIsotropicTermsPro = dynamic_cast<TProfile *>(listProfiles->FindObject("fNonIsotropicTermsPro"));
    TProfile *f3pCorrelatorVsMPro = dynamic_cast<TProfile *>(listProfiles->FindObject("f3pCorrelatorVsMPro"));
    TProfile2D *fNonIsotropicTermsVsMPro = dynamic_cast<TProfile2D *>(listProfiles->FindObject("fNonIsotropicTermsVsMPro"));
    TProfile *f3pCorrelatorVsPtSumPro = dynamic_cast<TProfile *>(listProfiles->FindObject("f3pCorrelatorVsPtSumPro"));
    TProfile *f3pCorrelatorVsPtDiffPro = dynamic_cast<TProfile *>(listProfiles->FindObject("f3pCorrelatorVsPtDiffPro"));
    
    Double_t g3pCorrelatorValue = 0., g3pCorrelatorError = 0.;
    GetCorrelatorAndError(f3pCorrelatorVsPtSumPro,
			  g3pCorrelatorValue,
			  g3pCorrelatorError,1,17);
    TString g3pHistName = "g3pHistName";
    g3pHistName += strCentralityBins[iCentralityBin];
    TH1D *g3pHist = new TH1D(g3pHistName,
			     ";;#LT#LTcos(#psi_{1}+#psi_{2}-2#phi_{3}#GT#GT",
			     1,0.5,1.5);
    g3pHist->SetBinContent(1,g3pCorrelatorValue);
    g3pHist->SetBinError(1,g3pCorrelatorError);

    //______________________________________________________________//
    //Draw the differential 3p correlator
    c[iCentralityBin] = new TCanvas(listNameMH.Data(),listNameMH.Data(),
				    iCentralityBin*50,
				    iCentralityBin*50,
				    500,500);
    c[iCentralityBin]->SetHighLightColor(10); 
    c[iCentralityBin]->SetFillColor(10);
    f3pCorrelatorVsPtDiffPro->DrawCopy("E");

    //if(iCentralityBin == 8) {
    //for(Int_t iBin = 1; iBin <= f3pCorrelatorVsPtDiffPro->GetNbinsX(); iBin++) {
	//if(f3pCorrelatorVsPtDiffPro->GetBinContent(iBin) != 0.) 
	//Printf("Entries: %lf - Error: %lf - Value: %lf",
	//f3pCorrelatorVsPtDiffPro->GetBinEntries(iBin),
	//f3pCorrelatorVsPtDiffPro->GetBinError(iBin),
	//f3pCorrelatorVsPtDiffPro->GetBinContent(iBin));
	//}
    //}

    //______________________________________________________________//
    //Print the results
    Printf("============================================================");
    Printf("=========================Bin: %s=========================",strCentralityBins[iCentralityBin].Data());
    cout<<"<cos(psi1 + psi2 - 2phi3)>: "<<
      g3pCorrelatorValue <<
      " +- " <<
      g3pCorrelatorError << endl;
    cout<<"<cos(phi1 + phi2 - 2phi3)>: "<<
      f3pCorrelatorHist->GetBinContent(1) <<
      " +- " <<
      f3pCorrelatorHist->GetBinError(1)<<endl;
    Printf("============================================================");

    TList *dirOutput = new TList();
    dirOutput->SetName(listNameMH.Data());
    dirOutput->Add(f3pCorrelatorHist);
    //dirOutput->Add(f3pCorrelatorVsMHist);
    dirOutput->Add(f3pCorrelatorVsPtSumPro);
    dirOutput->Add(f3pCorrelatorVsPtDiffPro);
    dirOutput->Add(g3pHist);
    listOutput->Add(dirOutput);
  }//loop over centrality bins TLists

  //listOutput->ls();
  return listOutput;
}

//____________________________________________________________//
void GetCorrelatorAndError(TProfile *g3pCorrelatorVsPt,
			   Double_t &g3pCorrelatorValue,
			   Double_t &g3pCorrelatorError,
			   Int_t iBinLow = 0,
			   Int_t iBinHigh = 0) {
  //Function to return the average value of the 3p correlator 
  //<cos(psi1 + psi2 - 2phi3)> and its error.
  //The first argument is one of the 3p TProfile objects vs pt.
  //The second and third argument give the integral and its error.
  //The fourth and fifth, if specified, indicate the lowest and 
  //highest bin the calculation should be performed for.
  Int_t gBinLow = 1, gBinHigh = g3pCorrelatorVsPt->GetNbinsX();
  if(iBinLow) gBinLow = iBinLow;
  if(iBinHigh) gBinHigh = iBinHigh;
  
  Double_t gSumXi = 0.;
  Double_t gSumYi = 0.;
  Double_t gSumXiYi = 0.;
  Double_t gSumXiYi2 = 0.;
  Double_t gSumXi2Yi2 = 0.;
  Double_t gSumDeltaXi2 = 0.;
  Double_t gSumYi2DeltaXi2 = 0.;
  Double_t dError = 0.; //Flow code driven error calculation

  Double_t kSumBi = 0., kSumBi2DeltaYi2 = 0.;
  Double_t kSumYiBi = 0., kSumYi2DeltaBi2 = 0.;
  Double_t kSumDeltaBi2 = 0.;

 for(Int_t iBin = gBinLow; iBin <= gBinHigh; iBin++) {
    gSumXi += g3pCorrelatorVsPt->GetBinEntries(iBin);
    gSumYi += g3pCorrelatorVsPt->GetBinContent(iBin);
    gSumXiYi += g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinContent(iBin);
    gSumXiYi2 += g3pCorrelatorVsPt->GetBinEntries(iBin)*TMath::Power(g3pCorrelatorVsPt->GetBinContent(iBin),2);
    gSumXi2Yi2 += TMath::Power(g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinContent(iBin),2);
    gSumDeltaXi2 += TMath::Power(g3pCorrelatorVsPt->GetBinError(iBin),2);
    gSumYi2DeltaXi2 += TMath::Power(g3pCorrelatorVsPt->GetBinContent(iBin),2) + TMath::Power(g3pCorrelatorVsPt->GetBinError(iBin),2);

    dError += g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinError(iBin)*g3pCorrelatorVsPt->GetBinError(iBin);  

    //new error calculation
    kSumBi += g3pCorrelatorVsPt->GetBinEntries(iBin);
    kSumYiBi += g3pCorrelatorVsPt->GetBinEntries(iBin)*g3pCorrelatorVsPt->GetBinContent(iBin);
    kSumBi2DeltaYi2 += TMath::Power(g3pCorrelatorVsPt->GetBinEntries(iBin),2)*TMath::Power(g3pCorrelatorVsPt->GetBinError(iBin),2);
    kSumYi2DeltaBi2 += TMath::Power(g3pCorrelatorVsPt->GetBinContent(iBin),2)*TMath::Power(TMath::Sqrt(g3pCorrelatorVsPt->GetBinEntries(iBin)),2);  
    kSumDeltaBi2 += TMath::Power(TMath::Sqrt(g3pCorrelatorVsPt->GetBinEntries(iBin)),2);
  }
  
  g3pCorrelatorValue = -1000.;
  g3pCorrelatorError = 1000.;
  
  if(gSumXi != 0.)
    g3pCorrelatorValue = gSumXiYi/gSumXi;
  if((gSumXi != 0.)&&(gSumXiYi != 0.))
    g3pCorrelatorError = TMath::Abs((gSumXiYi/gSumXi))*TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumYi2DeltaXi2)/gSumXiYi),2) + TMath::Power((gSumDeltaXi2/gSumXi),2));
    //g3pCorrelatorError = TMath::Sqrt((1./TMath::Power(kSumBi,2))*(kSumBi2DeltaYi2 + kSumYi2DeltaBi2 + TMath::Power(kSumYiBi,2)*kSumDeltaBi2/TMath::Power(kSumBi,2)));
  if(gSumXi != 0.)
    dError /= TMath::Power(gSumXi,2);
  dError = TMath::Sqrt(dError);
  g3pCorrelatorError = dError;

  return;
}

 plotMHCentrality.C:1
 plotMHCentrality.C:2
 plotMHCentrality.C:3
 plotMHCentrality.C:4
 plotMHCentrality.C:5
 plotMHCentrality.C:6
 plotMHCentrality.C:7
 plotMHCentrality.C:8
 plotMHCentrality.C:9
 plotMHCentrality.C:10
 plotMHCentrality.C:11
 plotMHCentrality.C:12
 plotMHCentrality.C:13
 plotMHCentrality.C:14
 plotMHCentrality.C:15
 plotMHCentrality.C:16
 plotMHCentrality.C:17
 plotMHCentrality.C:18
 plotMHCentrality.C:19
 plotMHCentrality.C:20
 plotMHCentrality.C:21
 plotMHCentrality.C:22
 plotMHCentrality.C:23
 plotMHCentrality.C:24
 plotMHCentrality.C:25
 plotMHCentrality.C:26
 plotMHCentrality.C:27
 plotMHCentrality.C:28
 plotMHCentrality.C:29
 plotMHCentrality.C:30
 plotMHCentrality.C:31
 plotMHCentrality.C:32
 plotMHCentrality.C:33
 plotMHCentrality.C:34
 plotMHCentrality.C:35
 plotMHCentrality.C:36
 plotMHCentrality.C:37
 plotMHCentrality.C:38
 plotMHCentrality.C:39
 plotMHCentrality.C:40
 plotMHCentrality.C:41
 plotMHCentrality.C:42
 plotMHCentrality.C:43
 plotMHCentrality.C:44
 plotMHCentrality.C:45
 plotMHCentrality.C:46
 plotMHCentrality.C:47
 plotMHCentrality.C:48
 plotMHCentrality.C:49
 plotMHCentrality.C:50
 plotMHCentrality.C:51
 plotMHCentrality.C:52
 plotMHCentrality.C:53
 plotMHCentrality.C:54
 plotMHCentrality.C:55
 plotMHCentrality.C:56
 plotMHCentrality.C:57
 plotMHCentrality.C:58
 plotMHCentrality.C:59
 plotMHCentrality.C:60
 plotMHCentrality.C:61
 plotMHCentrality.C:62
 plotMHCentrality.C:63
 plotMHCentrality.C:64
 plotMHCentrality.C:65
 plotMHCentrality.C:66
 plotMHCentrality.C:67
 plotMHCentrality.C:68
 plotMHCentrality.C:69
 plotMHCentrality.C:70
 plotMHCentrality.C:71
 plotMHCentrality.C:72
 plotMHCentrality.C:73
 plotMHCentrality.C:74
 plotMHCentrality.C:75
 plotMHCentrality.C:76
 plotMHCentrality.C:77
 plotMHCentrality.C:78
 plotMHCentrality.C:79
 plotMHCentrality.C:80
 plotMHCentrality.C:81
 plotMHCentrality.C:82
 plotMHCentrality.C:83
 plotMHCentrality.C:84
 plotMHCentrality.C:85
 plotMHCentrality.C:86
 plotMHCentrality.C:87
 plotMHCentrality.C:88
 plotMHCentrality.C:89
 plotMHCentrality.C:90
 plotMHCentrality.C:91
 plotMHCentrality.C:92
 plotMHCentrality.C:93
 plotMHCentrality.C:94
 plotMHCentrality.C:95
 plotMHCentrality.C:96
 plotMHCentrality.C:97
 plotMHCentrality.C:98
 plotMHCentrality.C:99
 plotMHCentrality.C:100
 plotMHCentrality.C:101
 plotMHCentrality.C:102
 plotMHCentrality.C:103
 plotMHCentrality.C:104
 plotMHCentrality.C:105
 plotMHCentrality.C:106
 plotMHCentrality.C:107
 plotMHCentrality.C:108
 plotMHCentrality.C:109
 plotMHCentrality.C:110
 plotMHCentrality.C:111
 plotMHCentrality.C:112
 plotMHCentrality.C:113
 plotMHCentrality.C:114
 plotMHCentrality.C:115
 plotMHCentrality.C:116
 plotMHCentrality.C:117
 plotMHCentrality.C:118
 plotMHCentrality.C:119
 plotMHCentrality.C:120
 plotMHCentrality.C:121
 plotMHCentrality.C:122
 plotMHCentrality.C:123
 plotMHCentrality.C:124
 plotMHCentrality.C:125
 plotMHCentrality.C:126
 plotMHCentrality.C:127
 plotMHCentrality.C:128
 plotMHCentrality.C:129
 plotMHCentrality.C:130
 plotMHCentrality.C:131
 plotMHCentrality.C:132
 plotMHCentrality.C:133
 plotMHCentrality.C:134
 plotMHCentrality.C:135
 plotMHCentrality.C:136
 plotMHCentrality.C:137
 plotMHCentrality.C:138
 plotMHCentrality.C:139
 plotMHCentrality.C:140
 plotMHCentrality.C:141
 plotMHCentrality.C:142
 plotMHCentrality.C:143
 plotMHCentrality.C:144
 plotMHCentrality.C:145
 plotMHCentrality.C:146
 plotMHCentrality.C:147
 plotMHCentrality.C:148
 plotMHCentrality.C:149
 plotMHCentrality.C:150
 plotMHCentrality.C:151
 plotMHCentrality.C:152
 plotMHCentrality.C:153
 plotMHCentrality.C:154
 plotMHCentrality.C:155
 plotMHCentrality.C:156
 plotMHCentrality.C:157
 plotMHCentrality.C:158
 plotMHCentrality.C:159
 plotMHCentrality.C:160
 plotMHCentrality.C:161
 plotMHCentrality.C:162
 plotMHCentrality.C:163
 plotMHCentrality.C:164
 plotMHCentrality.C:165
 plotMHCentrality.C:166
 plotMHCentrality.C:167
 plotMHCentrality.C:168
 plotMHCentrality.C:169
 plotMHCentrality.C:170
 plotMHCentrality.C:171
 plotMHCentrality.C:172
 plotMHCentrality.C:173
 plotMHCentrality.C:174
 plotMHCentrality.C:175
 plotMHCentrality.C:176
 plotMHCentrality.C:177
 plotMHCentrality.C:178
 plotMHCentrality.C:179
 plotMHCentrality.C:180
 plotMHCentrality.C:181
 plotMHCentrality.C:182
 plotMHCentrality.C:183
 plotMHCentrality.C:184
 plotMHCentrality.C:185
 plotMHCentrality.C:186
 plotMHCentrality.C:187
 plotMHCentrality.C:188
 plotMHCentrality.C:189
 plotMHCentrality.C:190
 plotMHCentrality.C:191
 plotMHCentrality.C:192
 plotMHCentrality.C:193
 plotMHCentrality.C:194
 plotMHCentrality.C:195
 plotMHCentrality.C:196
 plotMHCentrality.C:197
 plotMHCentrality.C:198
 plotMHCentrality.C:199
 plotMHCentrality.C:200
 plotMHCentrality.C:201
 plotMHCentrality.C:202
 plotMHCentrality.C:203
 plotMHCentrality.C:204
 plotMHCentrality.C:205
 plotMHCentrality.C:206
 plotMHCentrality.C:207
 plotMHCentrality.C:208
 plotMHCentrality.C:209
 plotMHCentrality.C:210
 plotMHCentrality.C:211
 plotMHCentrality.C:212
 plotMHCentrality.C:213
 plotMHCentrality.C:214
 plotMHCentrality.C:215
 plotMHCentrality.C:216
 plotMHCentrality.C:217
 plotMHCentrality.C:218
 plotMHCentrality.C:219
 plotMHCentrality.C:220
 plotMHCentrality.C:221
 plotMHCentrality.C:222
 plotMHCentrality.C:223
 plotMHCentrality.C:224
 plotMHCentrality.C:225
 plotMHCentrality.C:226
 plotMHCentrality.C:227
 plotMHCentrality.C:228
 plotMHCentrality.C:229
 plotMHCentrality.C:230
 plotMHCentrality.C:231
 plotMHCentrality.C:232
 plotMHCentrality.C:233
 plotMHCentrality.C:234
 plotMHCentrality.C:235
 plotMHCentrality.C:236
 plotMHCentrality.C:237
 plotMHCentrality.C:238
 plotMHCentrality.C:239
 plotMHCentrality.C:240
 plotMHCentrality.C:241
 plotMHCentrality.C:242
 plotMHCentrality.C:243
 plotMHCentrality.C:244
 plotMHCentrality.C:245
 plotMHCentrality.C:246
 plotMHCentrality.C:247
 plotMHCentrality.C:248
 plotMHCentrality.C:249
 plotMHCentrality.C:250
 plotMHCentrality.C:251
 plotMHCentrality.C:252
 plotMHCentrality.C:253
 plotMHCentrality.C:254
 plotMHCentrality.C:255
 plotMHCentrality.C:256
 plotMHCentrality.C:257
 plotMHCentrality.C:258
 plotMHCentrality.C:259
 plotMHCentrality.C:260
 plotMHCentrality.C:261
 plotMHCentrality.C:262
 plotMHCentrality.C:263
 plotMHCentrality.C:264
 plotMHCentrality.C:265
 plotMHCentrality.C:266
 plotMHCentrality.C:267
 plotMHCentrality.C:268
 plotMHCentrality.C:269
 plotMHCentrality.C:270
 plotMHCentrality.C:271
 plotMHCentrality.C:272
 plotMHCentrality.C:273
 plotMHCentrality.C:274
 plotMHCentrality.C:275
 plotMHCentrality.C:276
 plotMHCentrality.C:277
 plotMHCentrality.C:278
 plotMHCentrality.C:279
 plotMHCentrality.C:280
 plotMHCentrality.C:281
 plotMHCentrality.C:282
 plotMHCentrality.C:283
 plotMHCentrality.C:284
 plotMHCentrality.C:285
 plotMHCentrality.C:286
 plotMHCentrality.C:287
 plotMHCentrality.C:288
 plotMHCentrality.C:289
 plotMHCentrality.C:290
 plotMHCentrality.C:291
 plotMHCentrality.C:292
 plotMHCentrality.C:293
 plotMHCentrality.C:294
 plotMHCentrality.C:295
 plotMHCentrality.C:296
 plotMHCentrality.C:297
 plotMHCentrality.C:298
 plotMHCentrality.C:299
 plotMHCentrality.C:300
 plotMHCentrality.C:301
 plotMHCentrality.C:302
 plotMHCentrality.C:303
 plotMHCentrality.C:304
 plotMHCentrality.C:305
 plotMHCentrality.C:306
 plotMHCentrality.C:307
 plotMHCentrality.C:308
 plotMHCentrality.C:309
 plotMHCentrality.C:310
 plotMHCentrality.C:311
 plotMHCentrality.C:312
 plotMHCentrality.C:313
 plotMHCentrality.C:314
 plotMHCentrality.C:315
 plotMHCentrality.C:316
 plotMHCentrality.C:317
 plotMHCentrality.C:318
 plotMHCentrality.C:319
 plotMHCentrality.C:320
 plotMHCentrality.C:321
 plotMHCentrality.C:322
 plotMHCentrality.C:323
 plotMHCentrality.C:324
 plotMHCentrality.C:325
 plotMHCentrality.C:326
 plotMHCentrality.C:327
 plotMHCentrality.C:328
 plotMHCentrality.C:329
 plotMHCentrality.C:330
 plotMHCentrality.C:331
 plotMHCentrality.C:332
 plotMHCentrality.C:333
 plotMHCentrality.C:334
 plotMHCentrality.C:335
 plotMHCentrality.C:336
 plotMHCentrality.C:337
 plotMHCentrality.C:338
 plotMHCentrality.C:339
 plotMHCentrality.C:340
 plotMHCentrality.C:341
 plotMHCentrality.C:342
 plotMHCentrality.C:343
 plotMHCentrality.C:344
 plotMHCentrality.C:345
 plotMHCentrality.C:346
 plotMHCentrality.C:347
 plotMHCentrality.C:348
 plotMHCentrality.C:349
 plotMHCentrality.C:350
 plotMHCentrality.C:351
 plotMHCentrality.C:352
 plotMHCentrality.C:353
 plotMHCentrality.C:354
 plotMHCentrality.C:355
 plotMHCentrality.C:356
 plotMHCentrality.C:357
 plotMHCentrality.C:358
 plotMHCentrality.C:359
 plotMHCentrality.C:360
 plotMHCentrality.C:361
 plotMHCentrality.C:362
 plotMHCentrality.C:363
 plotMHCentrality.C:364
 plotMHCentrality.C:365
 plotMHCentrality.C:366
 plotMHCentrality.C:367
 plotMHCentrality.C:368
 plotMHCentrality.C:369
 plotMHCentrality.C:370
 plotMHCentrality.C:371
 plotMHCentrality.C:372
 plotMHCentrality.C:373
 plotMHCentrality.C:374
 plotMHCentrality.C:375
 plotMHCentrality.C:376
 plotMHCentrality.C:377
 plotMHCentrality.C:378
 plotMHCentrality.C:379
 plotMHCentrality.C:380
 plotMHCentrality.C:381
 plotMHCentrality.C:382
 plotMHCentrality.C:383
 plotMHCentrality.C:384
 plotMHCentrality.C:385
 plotMHCentrality.C:386
 plotMHCentrality.C:387
 plotMHCentrality.C:388
 plotMHCentrality.C:389
 plotMHCentrality.C:390
 plotMHCentrality.C:391
 plotMHCentrality.C:392
 plotMHCentrality.C:393
 plotMHCentrality.C:394
 plotMHCentrality.C:395
 plotMHCentrality.C:396
 plotMHCentrality.C:397
 plotMHCentrality.C:398
 plotMHCentrality.C:399
 plotMHCentrality.C:400
 plotMHCentrality.C:401
 plotMHCentrality.C:402
 plotMHCentrality.C:403
 plotMHCentrality.C:404
 plotMHCentrality.C:405
 plotMHCentrality.C:406
 plotMHCentrality.C:407
 plotMHCentrality.C:408
 plotMHCentrality.C:409
 plotMHCentrality.C:410
 plotMHCentrality.C:411
 plotMHCentrality.C:412
 plotMHCentrality.C:413
 plotMHCentrality.C:414
 plotMHCentrality.C:415
 plotMHCentrality.C:416
 plotMHCentrality.C:417
 plotMHCentrality.C:418
 plotMHCentrality.C:419
 plotMHCentrality.C:420
 plotMHCentrality.C:421
 plotMHCentrality.C:422
 plotMHCentrality.C:423
 plotMHCentrality.C:424
 plotMHCentrality.C:425
 plotMHCentrality.C:426
 plotMHCentrality.C:427
 plotMHCentrality.C:428
 plotMHCentrality.C:429
 plotMHCentrality.C:430
 plotMHCentrality.C:431
 plotMHCentrality.C:432
 plotMHCentrality.C:433
 plotMHCentrality.C:434
 plotMHCentrality.C:435
 plotMHCentrality.C:436
 plotMHCentrality.C:437
 plotMHCentrality.C:438
 plotMHCentrality.C:439
 plotMHCentrality.C:440
 plotMHCentrality.C:441
 plotMHCentrality.C:442
 plotMHCentrality.C:443
 plotMHCentrality.C:444
 plotMHCentrality.C:445
 plotMHCentrality.C:446
 plotMHCentrality.C:447
 plotMHCentrality.C:448
 plotMHCentrality.C:449
 plotMHCentrality.C:450
 plotMHCentrality.C:451
 plotMHCentrality.C:452
 plotMHCentrality.C:453
 plotMHCentrality.C:454
 plotMHCentrality.C:455
 plotMHCentrality.C:456
 plotMHCentrality.C:457
 plotMHCentrality.C:458
 plotMHCentrality.C:459
 plotMHCentrality.C:460
 plotMHCentrality.C:461
 plotMHCentrality.C:462
 plotMHCentrality.C:463
 plotMHCentrality.C:464
 plotMHCentrality.C:465
 plotMHCentrality.C:466
 plotMHCentrality.C:467
 plotMHCentrality.C:468
 plotMHCentrality.C:469
 plotMHCentrality.C:470
 plotMHCentrality.C:471
 plotMHCentrality.C:472
 plotMHCentrality.C:473
 plotMHCentrality.C:474
 plotMHCentrality.C:475
 plotMHCentrality.C:476
 plotMHCentrality.C:477
 plotMHCentrality.C:478
 plotMHCentrality.C:479
 plotMHCentrality.C:480
 plotMHCentrality.C:481
 plotMHCentrality.C:482
 plotMHCentrality.C:483
 plotMHCentrality.C:484
 plotMHCentrality.C:485
 plotMHCentrality.C:486
 plotMHCentrality.C:487
 plotMHCentrality.C:488
 plotMHCentrality.C:489
 plotMHCentrality.C:490
 plotMHCentrality.C:491
 plotMHCentrality.C:492
 plotMHCentrality.C:493
 plotMHCentrality.C:494
 plotMHCentrality.C:495
 plotMHCentrality.C:496
 plotMHCentrality.C:497
 plotMHCentrality.C:498
 plotMHCentrality.C:499
 plotMHCentrality.C:500
 plotMHCentrality.C:501
 plotMHCentrality.C:502
 plotMHCentrality.C:503
 plotMHCentrality.C:504
 plotMHCentrality.C:505
 plotMHCentrality.C:506