ROOT logo
const Int_t numberOfCentralityBins = 13;
TString centralityArray[numberOfCentralityBins] = {"0-80","10-20","20-30","30-40","40-50","50-60","60-70","70-80","0-100","0-1","1-2","2-3","92-8500"};

void drawBalanceFunctionPsi(const char* filename = "AnalysisResultsPsi.root", 
			    Int_t gCentrality = 1,
			    Int_t gDeltaEtaDeltaPhi = 2,
			    Int_t gBit = -1,
			    const char* gCentralityEstimator = 0x0,
			    Double_t psiMin = -0.5, Double_t psiMax = 0.5,
			    Double_t vertexZMin = -10.,
			    Double_t vertexZMax = 10.,
			    Double_t ptTriggerMin = -1.,
			    Double_t ptTriggerMax = -1.,
			    Double_t ptAssociatedMin = -1.,
			    Double_t ptAssociatedMax = -1.,
			    Bool_t kUseVzBinning = kTRUE,
			    Bool_t k2pMethod = kFALSE,
			    Bool_t k2pMethod2D = kFALSE,
			    TString eventClass = "EventPlane", //Can be "EventPlane", "Centrality", "Multiplicity"
			    Bool_t bRootMoments = kTRUE)
{
  //Macro that draws the BF distributions for each centrality bin
  //for reaction plane dependent analysis
  //Author: Panos.Christakoglou@nikhef.nl
  //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");

  //correction method check
  if(k2pMethod2D&&!k2pMethod){
    Printf("Chosen 2D 2particle correction method w/o 2particle correction --> not possible");
    return;
  }

  //Prepare the objects and return them
  TList *listBF = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,0);
  TList *listBFShuffled = 0x0;//GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,1);
  TList *listBFMixed = GetListOfObjects(filename,gCentrality,gBit,gCentralityEstimator,2);
  if(!listBF) {
    Printf("The TList object was not created");
    return;
  }
  else 
    draw(listBF,listBFShuffled,listBFMixed,
	 gCentrality,gDeltaEtaDeltaPhi,
	 gCentralityEstimator,
	 psiMin,psiMax,vertexZMin,vertexZMax,
	 ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,kUseVzBinning,
	 k2pMethod,k2pMethod2D,eventClass,bRootMoments);  
}

//______________________________________________________//
TList *GetListOfObjects(const char* filename,
			Int_t gCentrality,
			Int_t gBit,
			const char *gCentralityEstimator,
			Int_t kData = 1) {
  //Get the TList objects (QA, bf, bf shuffled)
  TList *listBF = 0x0;
  
  //Open the file
  TFile *f = TFile::Open(filename,"UPDATE");
  if((!f)||(!f->IsOpen())) {
    Printf("The file %s is not found. Aborting...",filename);
    return listBF;
  }
  //f->ls();
  
  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionPsiAnalysis"));
  if(!dir) {   
    Printf("The TDirectoryFile is not found. Aborting...",filename);
    return listBF;
  }
  //dir->ls();
  
  TString listBFName;
  if(kData == 0) {
    //cout<<"no shuffling - no mixing"<<endl;
    listBFName = "listBFPsi_";
  }
  else if(kData == 1) {
    //cout<<"shuffling - no mixing"<<endl;
    listBFName = "listBFPsiShuffled_";
  }
  else if(kData == 2) {
    //cout<<"no shuffling - mixing"<<endl;
    listBFName = "listBFPsiMixed_";
  }
  listBFName += centralityArray[gCentrality-1];
  if(gBit > -1) {
    listBFName += "_Bit"; listBFName += gBit; }
  if(gCentralityEstimator) {
    listBFName += "_"; listBFName += gCentralityEstimator;}

  // histograms were already retrieved (in first iteration)
  if(dir->Get(Form("%s_histograms",listBFName.Data()))){
    listBF = dynamic_cast<TList *>(dir->Get(Form("%s_histograms",listBFName.Data())));
  }
  // histograms were not yet retrieved (this is the first iteration)
  else{
    listBF = dynamic_cast<TList *>(dir->Get(listBFName.Data()));
    cout<<"======================================================="<<endl;
    cout<<"List name (control): "<<listBFName.Data()<<endl;
    cout<<"List name: "<<listBF->GetName()<<endl;
    //listBF->ls();
    
    //Get the histograms
    TString histoName;
    if(kData == 0)
      histoName = "fHistP";
    else if(kData == 1)
      histoName = "fHistP_shuffle";
    else if(kData == 2)
      histoName = "fHistP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    AliTHn *fHistP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));  
    if(!fHistP) {
      Printf("fHistP %s not found!!!",histoName.Data());
      break;
    }
    fHistP->FillParent(); fHistP->DeleteContainers();
    
    if(kData == 0)
      histoName = "fHistN";
    if(kData == 1)
      histoName = "fHistN_shuffle";
    if(kData == 2)
      histoName = "fHistN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    AliTHn *fHistN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
    if(!fHistN) {
      Printf("fHistN %s not found!!!",histoName.Data());
      break;
    }
    fHistN->FillParent(); fHistN->DeleteContainers();
    
    if(kData == 0)
      histoName = "fHistPN";
    if(kData == 1)
      histoName = "fHistPN_shuffle";
    if(kData == 2)
      histoName = "fHistPN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    AliTHn *fHistPN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
    if(!fHistPN) {
      Printf("fHistPN %s not found!!!",histoName.Data());
      break;
    }
    fHistPN->FillParent(); fHistPN->DeleteContainers();
    
    if(kData == 0)
      histoName = "fHistNP";
    if(kData == 1)
      histoName = "fHistNP_shuffle";
    if(kData == 2)
      histoName = "fHistNP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    AliTHn *fHistNP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
    if(!fHistNP) {
      Printf("fHistNP %s not found!!!",histoName.Data());
      break;
    }
    fHistNP->FillParent(); fHistNP->DeleteContainers();
    
    if(kData == 0)
      histoName = "fHistPP";
    if(kData == 1)
      histoName = "fHistPP_shuffle";
    if(kData == 2)
      histoName = "fHistPP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    AliTHn *fHistPP = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
    if(!fHistPP) {
      Printf("fHistPP %s not found!!!",histoName.Data());
      break;
    }
    fHistPP->FillParent(); fHistPP->DeleteContainers();
    
    if(kData == 0)
      histoName = "fHistNN";
    if(kData == 1)
      histoName = "fHistNN_shuffle";
    if(kData == 2)
      histoName = "fHistNN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    AliTHn *fHistNN = dynamic_cast<AliTHn *>(listBF->FindObject(histoName.Data()));
    if(!fHistNN) {
      Printf("fHistNN %s not found!!!",histoName.Data());
      break;
    }
    fHistNN->FillParent(); fHistNN->DeleteContainers();
    
    dir->cd();
    listBF->Write(Form("%s_histograms",listBFName.Data()), TObject::kSingleKey);
    
  }// first iteration
  
  f->Close();
  
  return listBF;
}

//______________________________________________________//
void draw(TList *listBF, TList *listBFShuffled, TList *listBFMixed,
	  Int_t gCentrality, Int_t gDeltaEtaDeltaPhi, 
	  const char* gCentralityEstimator,
	  Double_t psiMin, Double_t psiMax,
	  Double_t vertexZMin,
	  Double_t vertexZMax,
	  Double_t ptTriggerMin, Double_t ptTriggerMax,
	  Double_t ptAssociatedMin, Double_t ptAssociatedMax,
	  Bool_t kUseVzBinning=kFALSE,
	  Bool_t k2pMethod = kFALSE,Bool_t k2pMethod2D = kFALSE, 
	  TString eventClass="EventPlane",Bool_t bRootMoments=kTRUE,
	  Bool_t kUseZYAM = kFALSE) {
  gROOT->LoadMacro("~/SetPlotStyle.C");
  SetPlotStyle();
  gStyle->SetPalette(1,0);
  
  const Int_t gRebin = 1.;//gDeltaEtaDeltaPhi; //rebin by 2 the Delta phi projection (old)

  //balance function
  AliTHn *hP = NULL;
  AliTHn *hN = NULL;
  AliTHn *hPN = NULL;
  AliTHn *hNP = NULL;
  AliTHn *hPP = NULL;
  AliTHn *hNN = NULL;
  //listBF->ls();
  //Printf("=================");
  TString histoName = "fHistP";
  if(gCentralityEstimator) histoName += gCentralityEstimator;
  hP = (AliTHn*) listBF->FindObject(histoName.Data());
  hP->SetName("gHistP");
  histoName = "fHistN";
  if(gCentralityEstimator) histoName += gCentralityEstimator;
  hN = (AliTHn*) listBF->FindObject(histoName.Data());
  hN->SetName("gHistN");
  histoName = "fHistPN";
  if(gCentralityEstimator) histoName += gCentralityEstimator;
  hPN = (AliTHn*) listBF->FindObject(histoName.Data());
  hPN->SetName("gHistPN");
  histoName = "fHistNP";
  if(gCentralityEstimator) histoName += gCentralityEstimator;
  hNP = (AliTHn*) listBF->FindObject(histoName.Data());
  hNP->SetName("gHistNP");
  histoName = "fHistPP";
  if(gCentralityEstimator) histoName += gCentralityEstimator;
  hPP = (AliTHn*) listBF->FindObject(histoName.Data());
  hPP->SetName("gHistPP");
  histoName = "fHistNN";
  if(gCentralityEstimator) histoName += gCentralityEstimator;
  hNN = (AliTHn*) listBF->FindObject(histoName.Data());
  hNN->SetName("gHistNN");

  AliBalancePsi *b = new AliBalancePsi();
  b->SetEventClass(eventClass);
  b->SetHistNp(hP);
  b->SetHistNn(hN);
  b->SetHistNpn(hPN);
  b->SetHistNnp(hNP);
  b->SetHistNpp(hPP);
  b->SetHistNnn(hNN);
  if(kUseVzBinning) b->SetVertexZBinning(kTRUE);

  //balance function shuffling
  AliTHn *hPShuffled = NULL;
  AliTHn *hNShuffled = NULL;
  AliTHn *hPNShuffled = NULL;
  AliTHn *hNPShuffled = NULL;
  AliTHn *hPPShuffled = NULL;
  AliTHn *hNNShuffled = NULL;
  if(listBFShuffled) {
    //listBFShuffled->ls();
    histoName = "fHistP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hPShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
    hPShuffled->SetName("gHistPShuffled");
    histoName = "fHistN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
    hNShuffled->SetName("gHistNShuffled");
    histoName = "fHistPN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hPNShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
    hPNShuffled->SetName("gHistPNShuffled");
    histoName = "fHistNP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNPShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
    hNPShuffled->SetName("gHistNPShuffled");
    histoName = "fHistPP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hPPShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
    hPPShuffled->SetName("gHistPPShuffled");
    histoName = "fHistNN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNNShuffled = (AliTHn*) listBFShuffled->FindObject(histoName.Data());
    hNNShuffled->SetName("gHistNNShuffled");
    
    AliBalancePsi *bShuffled = new AliBalancePsi();
    bShuffled->SetEventClass(eventClass);
    bShuffled->SetHistNp(hPShuffled);
    bShuffled->SetHistNn(hNShuffled);
    bShuffled->SetHistNpn(hPNShuffled);
    bShuffled->SetHistNnp(hNPShuffled);
    bShuffled->SetHistNpp(hPPShuffled);
    bShuffled->SetHistNnn(hNNShuffled);
    if(kUseVzBinning) bShuffled->SetVertexZBinning(kTRUE);
  }

  //balance function mixing
  AliTHn *hPMixed = NULL;
  AliTHn *hNMixed = NULL;
  AliTHn *hPNMixed = NULL;
  AliTHn *hNPMixed = NULL;
  AliTHn *hPPMixed = NULL;
  AliTHn *hNNMixed = NULL;
  if(listBFMixed) {
    //listBFMixed->ls();
    histoName = "fHistP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hPMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
    hPMixed->SetName("gHistPMixed");
    histoName = "fHistN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
    hNMixed->SetName("gHistNMixed");
    histoName = "fHistPN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hPNMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
    hPNMixed->SetName("gHistPNMixed");
    histoName = "fHistNP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNPMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
    histoName = "fHistNP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNPMixed->SetName("gHistNPMixed");
    histoName = "fHistPP";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hPPMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
    hPPMixed->SetName("gHistPPMixed");
    histoName = "fHistNN";
    if(gCentralityEstimator) histoName += gCentralityEstimator;
    hNNMixed = (AliTHn*) listBFMixed->FindObject(histoName.Data());
    hNNMixed->SetName("gHistNNMixed");

    AliBalancePsi *bMixed = new AliBalancePsi();
    bMixed->SetEventClass(eventClass);
    bMixed->SetHistNp(hPMixed);
    bMixed->SetHistNn(hNMixed);
    bMixed->SetHistNpn(hPNMixed);
    bMixed->SetHistNnp(hNPMixed);
    bMixed->SetHistNpp(hPPMixed);
    bMixed->SetHistNnn(hNNMixed);
    if(kUseVzBinning) bMixed->SetVertexZBinning(kTRUE);
  }

  TH1D *gHistBalanceFunction;
  TH1D *gHistBalanceFunctionShuffled;
  TH1D *gHistBalanceFunctionMixed;
  TH1D *gHistBalanceFunctionSubtracted;
  TString histoTitle, pngName;
  TLegend *legend;
  
  if(eventClass == "Centrality"){
    histoTitle = "Centrality: ";
    histoTitle += psiMin;
    histoTitle += " - ";
    histoTitle += psiMax;
    histoTitle += " % ";
    histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})"; 
  }
  else if(eventClass == "Multiplicity"){
    histoTitle = "Multiplicity: ";
    histoTitle += psiMin;
    histoTitle += " - ";
    histoTitle += psiMax;
    histoTitle += " tracks";
    histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})"; 
  }
  else{ // "EventPlane" (default)
    histoTitle = "Centrality: ";
    histoTitle += centralityArray[gCentrality-1]; 
    histoTitle += "%";
    if((psiMin == -0.5)&&(psiMax == 0.5))
      histoTitle += " (-7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o})"; 
    else if((psiMin == 0.5)&&(psiMax == 1.5))
      histoTitle += " (37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o})"; 
    else if((psiMin == 1.5)&&(psiMax == 2.5))
      histoTitle += " (82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o})"; 
    else 
      histoTitle += " (0^{o} < #varphi^{t} - #Psi_{2} < 180^{o})"; 
  }

  //Raw balance function
  if(k2pMethod && !k2pMethod2D){ 
    if(bMixed){
      gHistBalanceFunction = b->GetBalanceFunctionHistogram2pMethod(0,gDeltaEtaDeltaPhi,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
    }
    else{
      cerr<<"RAW: NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
      return;
    }
  }
  else if(k2pMethod && k2pMethod2D){ 
    if(bMixed){
      if(gDeltaEtaDeltaPhi==1) //Delta eta
	gHistBalanceFunction = b->GetBalanceFunction1DFrom2D2pMethod(0,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
      else //Delta phi
	gHistBalanceFunction = b->GetBalanceFunction1DFrom2D2pMethod(1,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
    }
    else{
      cerr<<"RAW: NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
      return;
    }
  }
  else
    gHistBalanceFunction = b->GetBalanceFunctionHistogram(0,gDeltaEtaDeltaPhi,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
  gHistBalanceFunction->SetMarkerStyle(20);
  gHistBalanceFunction->SetTitle(histoTitle.Data());
  gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.3);
  gHistBalanceFunction->SetName("gHistBalanceFunction");
  
  //Shuffled balance function
  //if(k2pMethod){ 
  //if(bMixed)
      //gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionHistogram2pMethod(0,gDeltaEtaDeltaPhi,vertexZMin,vertexZMax,psiMin,psiMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
  //else{
  //cerr<<"SHUFFLE: NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
  //return;
  //}
  //}
  //else if(k2pMethod2D){ 
  //if(bMixed){
  //  if(gDeltaEtaDeltaPhi==1) //Delta eta
  //gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunction1DFrom2D2pMethod(0,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
  //  else //Delta phi
  //gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunction1DFrom2D2pMethod(1,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
  //}
  //else{
  //  cerr<<"SHUFFLE: NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
  //  return;
  //}
  //}
  //else
  //gHistBalanceFunctionShuffled = bShuffled->GetBalanceFunctionHistogram(0,gDeltaEtaDeltaPhi,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
  //gHistBalanceFunctionShuffled->SetMarkerStyle(24);
  //gHistBalanceFunctionShuffled->SetName("gHistBalanceFunctionShuffled");
  
  //Mixed balance function
  if(k2pMethod && !k2pMethod2D){ 
    if(bMixed)
      gHistBalanceFunctionMixed = bMixed->GetBalanceFunctionHistogram2pMethod(0,gDeltaEtaDeltaPhi,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
    else{
      cerr<<"MIXED: NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
      return;
    }
  }
  else if(k2pMethod && k2pMethod2D){ 
    if(bMixed){
      if(gDeltaEtaDeltaPhi==1) //Delta eta
	gHistBalanceFunctionMixed = bMixed->GetBalanceFunction1DFrom2D2pMethod(0,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
      else //Delta phi
	gHistBalanceFunctionMixed = bMixed->GetBalanceFunction1DFrom2D2pMethod(1,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax,bMixed);
    }
    else{
      cerr<<"MIXED: NO MIXED BF BUT REQUESTED CORRECTING WITH IT! --> FAIL"<<endl;
      return;
    }
  }
  else
    gHistBalanceFunctionMixed = bMixed->GetBalanceFunctionHistogram(0,gDeltaEtaDeltaPhi,psiMin,psiMax,vertexZMin,vertexZMax,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
  gHistBalanceFunctionMixed->SetMarkerStyle(25);
  gHistBalanceFunctionMixed->SetName("gHistBalanceFunctionMixed");
  
  //Subtracted balance function
  gHistBalanceFunctionSubtracted = dynamic_cast<TH1D *>(gHistBalanceFunction->Clone());
  gHistBalanceFunctionSubtracted->Add(gHistBalanceFunctionMixed,-1);
  gHistBalanceFunctionSubtracted->Rebin(gRebin);
  gHistBalanceFunctionSubtracted->Scale(1./(Double_t)(gRebin));    
  gHistBalanceFunctionSubtracted->SetMarkerStyle(20);
  gHistBalanceFunctionSubtracted->SetTitle(histoTitle.Data());
  gHistBalanceFunctionSubtracted->GetYaxis()->SetTitleOffset(1.3);
  gHistBalanceFunctionSubtracted->SetName("gHistBalanceFunctionSubtracted");

  TCanvas *c1 = new TCanvas("c1","",0,0,600,500);
  c1->SetFillColor(10); 
  c1->SetHighLightColor(10);
  c1->SetLeftMargin(0.15);
  gHistBalanceFunction->DrawCopy("E");
  //gHistBalanceFunctionShuffled->DrawCopy("ESAME");
  gHistBalanceFunctionMixed->DrawCopy("ESAME");
  
  legend = new TLegend(0.18,0.62,0.45,0.82,"","brNDC");
  legend->SetTextSize(0.045); 
  legend->SetTextFont(42); 
  legend->SetBorderSize(0);
  legend->SetFillStyle(0); 
  legend->SetFillColor(10);
  legend->SetMargin(0.25); 
  legend->SetShadowColor(10);
  legend->AddEntry(gHistBalanceFunction,"Data","lp");
  //legend->AddEntry(gHistBalanceFunctionShuffled,"Shuffled data","lp");
  legend->AddEntry(gHistBalanceFunctionMixed,"Mixed data","lp");
  legend->Draw();
  
  pngName = "BalanceFunction."; 
  if(eventClass == "Centrality"){
    pngName += Form("Centrality%.1fTo%.1f",psiMin,psiMax);
    if(gDeltaEtaDeltaPhi == 1) pngName += ".InDeltaEta.PsiAll.PttFrom";
    else if(gDeltaEtaDeltaPhi == 2) pngName += ".InDeltaPhi.PsiAll.PttFrom";
  }
  else if(eventClass == "Multiplicity"){
    pngName += Form("Multiplicity%.0fTo%.0f",psiMin,psiMax);
    if(gDeltaEtaDeltaPhi == 1) pngName += ".InDeltaEta.PsiAll.PttFrom";
    else if(gDeltaEtaDeltaPhi == 2) pngName += ".InDeltaPhi.PsiAll.PttFrom";  
  }
  else{ // "EventPlane" (default)
    pngName += "Centrality";
    pngName += gCentrality; 
    if(gDeltaEtaDeltaPhi == 1) pngName += ".InDeltaEta.Psi";
    else if(gDeltaEtaDeltaPhi == 2) pngName += ".InDeltaPhi.Psi";
    if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
    else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
    else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
    else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.PttFrom";
    else pngName += "All.PttFrom";
  }  
  pngName += Form("%.1f",ptTriggerMin); pngName += "To"; 
  pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
  pngName += Form("%.1f",ptAssociatedMin); pngName += "To"; 
  pngName += Form("%.1f",ptAssociatedMax); 
  if(k2pMethod2D) pngName += "_2pMethod2D";
  else if(k2pMethod) pngName += "_2pMethod";
  pngName += ".png";

  c1->SaveAs(pngName.Data());
  
  GetWeightedMean(gHistBalanceFunction);
  //GetWeightedMean(gHistBalanceFunctionShuffled);
  
  TString meanLatex, rmsLatex, skewnessLatex, kurtosisLatex;

  if(bRootMoments){
    meanLatex = "#mu = "; 
    meanLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetMean());
    meanLatex += " #pm "; 
    meanLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetMeanError());
    
    rmsLatex = "#sigma = "; 
    rmsLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetRMS());
    rmsLatex += " #pm "; 
    rmsLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetRMSError());
    
    skewnessLatex = "S = "; 
    skewnessLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetSkewness(1));
    skewnessLatex += " #pm "; 
    skewnessLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetSkewness(11));
    
    kurtosisLatex = "K = "; 
    kurtosisLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetKurtosis(1));
    kurtosisLatex += " #pm "; 
    kurtosisLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetKurtosis(11));
    Printf("Mean: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetMean(),gHistBalanceFunctionSubtracted->GetMeanError());
    Printf("RMS: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetRMS(),gHistBalanceFunctionSubtracted->GetRMSError());
    Printf("Skeweness: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetSkewness(1),gHistBalanceFunctionSubtracted->GetSkewness(11));
    Printf("Kurtosis: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetKurtosis(1),gHistBalanceFunctionSubtracted->GetKurtosis(11));

    // store in txt files

    Bool_t kProjectInEta = kFALSE;
    if(gDeltaEtaDeltaPhi==1) //Delta eta
      kProjectInEta = kTRUE;

    TString meanFileName = "";
    if(kProjectInEta) 
      meanFileName= "deltaEtaProjection_Mean.txt";
    else              
      meanFileName = "deltaPhiProjection_Mean.txt";
    ofstream fileMean(meanFileName.Data(),ios::app);
    fileMean << " " << gHistBalanceFunctionSubtracted->GetMean() << " " <<gHistBalanceFunctionSubtracted->GetMeanError()<<endl;
    fileMean.close();

    TString rmsFileName = "";
    if(kProjectInEta) 
      rmsFileName = "deltaEtaProjection_Rms.txt";
    else              
      rmsFileName = "deltaPhiProjection_Rms.txt";
    ofstream fileRms(rmsFileName.Data(),ios::app);
    fileRms << " " << gHistBalanceFunctionSubtracted->GetRMS() << " " <<gHistBalanceFunctionSubtracted->GetRMSError()<<endl;
    fileRms.close();

    TString skewnessFileName = "";
    if(kProjectInEta) 
      skewnessFileName = "deltaEtaProjection_Skewness.txt";
    else              
      skewnessFileName = "deltaPhiProjection_Skewness.txt";
    ofstream fileSkewness(skewnessFileName.Data(),ios::app);
    fileSkewness << " " << gHistBalanceFunctionSubtracted->GetSkewness(1) << " " <<gHistBalanceFunctionSubtracted->GetSkewness(11)<<endl;
    fileSkewness.close();

    TString kurtosisFileName = "";
    if(kProjectInEta) 
      kurtosisFileName = "deltaEtaProjection_Kurtosis.txt";
    else
      kurtosisFileName = "deltaPhiProjection_Kurtosis.txt";              
    ofstream fileKurtosis(kurtosisFileName.Data(),ios::app);
    fileKurtosis << " " << gHistBalanceFunctionSubtracted->GetKurtosis(1) << " " <<gHistBalanceFunctionSubtracted->GetKurtosis(11)<<endl;
    fileKurtosis.close();

    // Weighted mean as calculated for 1D analysis
    Double_t weightedMean, weightedMeanError;
    GetWeightedMean1D(gHistBalanceFunctionSubtracted,kProjectInEta,1,-1,weightedMean,weightedMeanError);
    Printf("Weighted Mean: %lf - Error: %lf",weightedMean, weightedMeanError);
    
    // store in txt files
    TString weightedMeanFileName = "";
    if(kProjectInEta) 
      weightedMeanFileName = "deltaEtaProjection_WeightedMean.txt";
    else              
      weightedMeanFileName = "deltaPhiProjection_WeightedMean.txt";
    ofstream fileWeightedMean(weightedMeanFileName.Data(),ios::app);
    fileWeightedMean << " " << weightedMean << " " <<weightedMeanError<<endl;
    fileWeightedMean.close();
  
  }

  // calculate the moments by hand
  else{

    Double_t meanAnalytical, meanAnalyticalError;
    Double_t sigmaAnalytical, sigmaAnalyticalError;
    Double_t skewnessAnalytical, skewnessAnalyticalError;
    Double_t kurtosisAnalytical, kurtosisAnalyticalError;

    b->GetMomentsAnalytical(gDeltaEtaDeltaPhi,gHistBalanceFunctionSubtracted,kUseZYAM,meanAnalytical,meanAnalyticalError,sigmaAnalytical,sigmaAnalyticalError,skewnessAnalytical,skewnessAnalyticalError,kurtosisAnalytical,kurtosisAnalyticalError);

    meanLatex = "#mu = "; 
    meanLatex += Form("%.3f",meanAnalytical);
    meanLatex += " #pm "; 
    meanLatex += Form("%.3f",meanAnalyticalError);
    
    rmsLatex = "#sigma = "; 
    rmsLatex += Form("%.3f",sigmaAnalytical);
    rmsLatex += " #pm "; 
    rmsLatex += Form("%.3f",sigmaAnalyticalError);
    
    skewnessLatex = "S = "; 
    skewnessLatex += Form("%.3f",skewnessAnalytical);
    skewnessLatex += " #pm "; 
    skewnessLatex += Form("%.3f",skewnessAnalyticalError);
    
    kurtosisLatex = "K = "; 
    kurtosisLatex += Form("%.3f",kurtosisAnalytical);
    kurtosisLatex += " #pm "; 
    kurtosisLatex += Form("%.3f",kurtosisAnalyticalError);
    Printf("Mean: %lf - Error: %lf",meanAnalytical, meanAnalyticalError);
    Printf("Sigma: %lf - Error: %lf",sigmaAnalytical, sigmaAnalyticalError);
    Printf("Skeweness: %lf - Error: %lf",skewnessAnalytical, skewnessAnalyticalError);
    Printf("Kurtosis: %lf - Error: %lf",kurtosisAnalytical, kurtosisAnalyticalError);
  }

  TCanvas *c2 = new TCanvas("c2","",600,0,600,500);
  c2->SetFillColor(10); 
  c2->SetHighLightColor(10);
  c2->SetLeftMargin(0.15);
  gHistBalanceFunctionSubtracted->DrawCopy("E");
  
  TLatex *latex = new TLatex();
  latex->SetNDC();
  latex->SetTextSize(0.035);
  latex->SetTextColor(1);
  latex->DrawLatex(0.64,0.85,meanLatex.Data());
  latex->DrawLatex(0.64,0.81,rmsLatex.Data());
  latex->DrawLatex(0.64,0.77,skewnessLatex.Data());
  latex->DrawLatex(0.64,0.73,kurtosisLatex.Data());

  TString newFileName = "balanceFunction."; 
  if(eventClass == "Centrality"){
    newFileName += Form("Centrality%.1fTo%.1f",psiMin,psiMax);
    if(gDeltaEtaDeltaPhi == 1) newFileName += ".InDeltaEta.PsiAll.PttFrom";
    else if(gDeltaEtaDeltaPhi == 2) newFileName += ".InDeltaPhi.PsiAll.PttFrom";
  }
  else if(eventClass == "Multiplicity"){
    newFileName += Form("Multiplicity%.0fTo%.0f",psiMin,psiMax);
    if(gDeltaEtaDeltaPhi == 1) newFileName += ".InDeltaEta.PsiAll.PttFrom";
    else if(gDeltaEtaDeltaPhi == 2) newFileName += ".InDeltaPhi.PsiAll.PttFrom";  
  }
  else{ // "EventPlane" (default)
    newFileName += "Centrality";
    newFileName += gCentrality; 
    if(gDeltaEtaDeltaPhi == 1) newFileName += ".InDeltaEta.Psi";
    else if(gDeltaEtaDeltaPhi == 2) newFileName += ".InDeltaPhi.Psi";
    if((psiMin == -0.5)&&(psiMax == 0.5)) newFileName += "InPlane.Ptt";
    else if((psiMin == 0.5)&&(psiMax == 1.5)) newFileName += "Intermediate.Ptt";
    else if((psiMin == 1.5)&&(psiMax == 2.5)) newFileName += "OutOfPlane.Ptt";
    else if((psiMin == 2.5)&&(psiMax == 3.5)) newFileName += "Rest.PttFrom";
    else newFileName += "All.PttFrom";
  }  
  newFileName += Form("%.1f",ptTriggerMin); newFileName += "To"; 
  newFileName += Form("%.1f",ptTriggerMax); newFileName += "PtaFrom";
  newFileName += Form("%.1f",ptAssociatedMin); newFileName += "To"; 
  newFileName += Form("%.1f",ptAssociatedMax); 
  if(k2pMethod2D) newFileName += "_2pMethod2D";
  else if(k2pMethod) newFileName += "_2pMethod";
  newFileName += ".root";

  TFile *fOutput = new TFile(newFileName.Data(),"recreate");
  fOutput->cd();
  gHistBalanceFunction->Write();
  //gHistBalanceFunctionShuffled->Write();
  gHistBalanceFunctionMixed->Write();
  gHistBalanceFunctionSubtracted->Write();
  fOutput->Close();
}

//____________________________________________________________________//
void GetWeightedMean(TH1D *gHistBalance, Int_t fStartBin = 1) {
  //Prints the calculated width of the BF and its error
  Double_t gSumXi = 0.0, gSumBi = 0.0, gSumBiXi = 0.0;
  Double_t gSumBiXi2 = 0.0, gSumBi2Xi2 = 0.0;
  Double_t gSumDeltaBi2 = 0.0, gSumXi2DeltaBi2 = 0.0;
  Double_t deltaBalP2 = 0.0, integral = 0.0;
  Double_t deltaErrorNew = 0.0;

  //Retrieve this variables from Histogram
  Int_t fNumberOfBins = gHistBalance->GetNbinsX();
  Double_t fP2Step    = gHistBalance->GetBinWidth(1); // assume equal binning!
  
  //cout<<"=================================================="<<endl;
  //cout<<"RECALCULATION OF BF WIDTH (StartBin = "<<fStartBin<<")"<<endl;
  //cout<<"HISTOGRAM has "<<fNumberOfBins<<" bins with bin size of "<<fP2Step<<endl;
  //cout<<"=================================================="<<endl;
  for(Int_t i = 1; i <= fNumberOfBins; i++) {
    // this is to simulate |Delta eta| or |Delta phi|
    if(fNumberOfBins/2 - fStartBin + 1 < i && i < fNumberOfBins/2 + fStartBin ) continue;

    //cout<<"B: "<<gHistBalance->GetBinContent(i)<<"\t Error: "<<gHistBalance->GetBinError(i)<<"\t bin: "<<TMath::Abs(gHistBalance->GetBinCenter(i))<<endl;

    gSumXi += TMath::Abs(gHistBalance->GetBinCenter(i)); // this is to simulate |Delta eta| or |Delta phi|
    gSumBi += gHistBalance->GetBinContent(i); 
    gSumBiXi += gHistBalance->GetBinContent(i)*TMath::Abs(gHistBalance->GetBinCenter(i));
    gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(TMath::Abs(gHistBalance->GetBinCenter(i)),2);
    gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(TMath::Abs(gHistBalance->GetBinCenter(i)),2);
    gSumDeltaBi2 +=  TMath::Power(gHistBalance->GetBinError(i),2);
    gSumXi2DeltaBi2 += TMath::Power(TMath::Abs(gHistBalance->GetBinCenter(i)),2) * TMath::Power(gHistBalance->GetBinError(i),2);
    
    deltaBalP2 += fP2Step*TMath::Power(gHistBalance->GetBinError(i),2);
    integral += fP2Step*gHistBalance->GetBinContent(i);
  }
  for(Int_t i = fStartBin; i < fNumberOfBins; i++)
    deltaErrorNew += gHistBalance->GetBinError(i)*(TMath::Abs(gHistBalance->GetBinCenter(i))*gSumBi - gSumBiXi)/TMath::Power(gSumBi,2);
  
  Double_t integralError = TMath::Sqrt(deltaBalP2);
  
  Double_t delta = gSumBiXi / gSumBi;
  Double_t deltaError = (gSumBiXi / gSumBi) * TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumXi2DeltaBi2)/gSumBiXi),2) + TMath::Power((gSumDeltaBi2/gSumBi),2) );
  cout<<"=================================================="<<endl;
  cout<<"Width: "<<delta<<"\t Error: "<<deltaError<<endl;
  cout<<"New error: "<<deltaErrorNew<<endl;
  cout<<"Integral: "<<integral<<"\t Error: "<<integralError<<endl;
  cout<<"=================================================="<<endl;
  cout<<endl;
}

//______________________________________________________//
void drawBFPsi(const char* lhcPeriod = "LHC10h",
	       const char* gCentralityEstimator = "V0M",
	       Int_t gBit = 128,
	       const char* gEventPlaneEstimator = "VZERO",
	       Bool_t kShowShuffled = kFALSE, 
	       Bool_t kShowMixed = kFALSE, 
	       Int_t gCentrality = 1,
	       Int_t gDeltaEtaDeltaPhi = 2,
	       Double_t psiMin = -0.5, Double_t psiMax = 0.5,
	       Double_t ptTriggerMin = -1.,
	       Double_t ptTriggerMax = -1.,
	       Double_t ptAssociatedMin = -1.,
	       Double_t ptAssociatedMax = -1., 
	       Bool_t k2pMethod = kTRUE) {
  //Macro that draws the BF distributions for each centrality bin
  //for reaction plane dependent analysis
  //Author: Panos.Christakoglou@nikhef.nl
  gROOT->LoadMacro("~/SetPlotStyle.C");
  SetPlotStyle();

  //Get the input file
  TString filename = lhcPeriod; 
  filename += "/Centrality"; filename += gCentralityEstimator;
  filename += "_Bit"; filename += gBit;
  filename += "_"; filename += gEventPlaneEstimator;
  filename +="/PttFrom";
  filename += Form("%.1f",ptTriggerMin); filename += "To"; 
  filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
  filename += Form("%.1f",ptAssociatedMin); filename += "To"; 
  filename += Form("%.1f",ptAssociatedMax); 
  filename += "/balanceFunction.Centrality"; 
  filename += gCentrality; filename += ".In";
  if(gDeltaEtaDeltaPhi == 1) filename += "DeltaEta.Psi";
  else if(gDeltaEtaDeltaPhi == 2) filename += "DeltaPhi.Psi";
  if((psiMin == -0.5)&&(psiMax == 0.5)) filename += "InPlane.Ptt";
  else if((psiMin == 0.5)&&(psiMax == 1.5)) filename += "Intermediate.Ptt";
  else if((psiMin == 1.5)&&(psiMax == 2.5)) filename += "OutOfPlane.Ptt";
  else if((psiMin == 2.5)&&(psiMax == 3.5)) filename += "Rest.Ptt";
  else filename += "All.PttFrom";
  filename += Form("%.1f",ptTriggerMin); filename += "To"; 
  filename += Form("%.1f",ptTriggerMax); filename += "PtaFrom";
  filename += Form("%.1f",ptAssociatedMin); filename += "To"; 
  filename += Form("%.1f",ptAssociatedMax);    
  if(k2pMethod) filename += "_2pMethod2D";
  filename += ".root";  

  //Open the file
  TFile *f = TFile::Open(filename.Data());
  if((!f)||(!f->IsOpen())) {
    Printf("The file %s is not found. Aborting...",filename);
    return listBF;
  }
  //f->ls();
  
  //Raw balance function
  TH1D *gHistBalanceFunction = dynamic_cast<TH1D *>(f->Get("gHistBalanceFunction"));
  gHistBalanceFunction->SetStats(kFALSE);
  gHistBalanceFunction->SetMarkerStyle(20);
  gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.3);
  if(gDeltaEtaDeltaPhi == 2) {
    gHistBalanceFunction->GetYaxis()->SetTitle("B(#Delta #varphi)");
    gHistBalanceFunction->GetXaxis()->SetTitle("#Delta#varphi (rad)");
  }

  //Shuffled balance function
  TH1D *gHistBalanceFunctionShuffled = 0x0;
  if(kShowShuffled) {
    gHistBalanceFunctionShuffled = dynamic_cast<TH1D *>(f->Get("gHistBalanceFunctionShuffled"));
    gHistBalanceFunction->SetStats(kFALSE);
    gHistBalanceFunctionShuffled->SetMarkerStyle(24);
  }

  //Mixed balance function
  TH1D *gHistBalanceFunctionMixed = 0x0;
  TH1D *gHistBalanceFunctionSubtracted = 0x0;
  if(kShowMixed) {
    gHistBalanceFunctionMixed = dynamic_cast<TH1D *>(f->Get("gHistBalanceFunctionMixed"));
    gHistBalanceFunction->SetStats(kFALSE);
    gHistBalanceFunctionMixed->SetMarkerStyle(25);

    //Subtracted balance function
    gHistBalanceFunctionSubtracted = dynamic_cast<TH1D *>(f->Get("gHistBalanceFunctionSubtracted"));
    gHistBalanceFunctionSubtracted->SetStats(kFALSE);
    gHistBalanceFunctionSubtracted->SetMarkerStyle(20);
    gHistBalanceFunctionSubtracted->GetYaxis()->SetTitleOffset(1.3);
    if(gDeltaEtaDeltaPhi == 2) {
      gHistBalanceFunctionSubtracted->GetYaxis()->SetTitle("B(#Delta #varphi)");
      gHistBalanceFunctionSubtracted->GetXaxis()->SetTitle("#Delta#varphi (rad)");
    }
  }
  
  TString pngName;
  TLegend *legend;
  
  TString centralityLatex = "Centrality: ";
  centralityLatex += centralityArray[gCentrality-1]; 
  centralityLatex += "%";

  TString psiLatex;
  if((psiMin == -0.5)&&(psiMax == 0.5))
    psiLatex = " -7.5^{o} < #varphi^{t} - #Psi_{2} < 7.5^{o}"; 
  else if((psiMin == 0.5)&&(psiMax == 1.5))
    psiLatex = " 37.5^{o} < #varphi^{t} - #Psi_{2} < 52.5^{o}"; 
  else if((psiMin == 1.5)&&(psiMax == 2.5))
    psiLatex = " 82.5^{o} < #varphi^{t} - #Psi_{2} < 97.5^{o}"; 
  else 
    psiLatex = " 0^{o} < #varphi - #Psi_{2} < 180^{o}"; 
 
  TString pttLatex = Form("%.1f",ptTriggerMin);
  pttLatex += " < p_{T}^{t} < "; pttLatex += Form("%.1f",ptTriggerMax);
  pttLatex += " GeV/c";

  TString ptaLatex = Form("%.1f",ptAssociatedMin);
  ptaLatex += " < p_{T}^{a} < "; ptaLatex += Form("%.1f",ptAssociatedMax);
  ptaLatex += " GeV/c";

  //Draw the results
  TCanvas *c1 = new TCanvas("c1","",0,0,600,500);
  c1->SetFillColor(10); c1->SetHighLightColor(10);
  c1->SetLeftMargin(0.17); c1->SetTopMargin(0.05);
  gHistBalanceFunction->SetTitle("");
  gHistBalanceFunction->GetYaxis()->SetTitleOffset(1.4);
  gHistBalanceFunction->GetYaxis()->SetNdivisions(10);
  gHistBalanceFunction->GetXaxis()->SetNdivisions(10);
  gHistBalanceFunction->DrawCopy("E");
  if(kShowShuffled) gHistBalanceFunctionShuffled->DrawCopy("ESAME");
  if(kShowMixed) gHistBalanceFunctionMixed->DrawCopy("ESAME");
  
  legend = new TLegend(0.2,0.72,0.45,0.92,"","brNDC");
  legend->SetTextSize(0.05); 
  legend->SetTextFont(42); 
  legend->SetBorderSize(0);
  legend->SetFillStyle(0); 
  legend->SetFillColor(10);
  legend->SetMargin(0.25); 
  legend->SetShadowColor(10);
  legend->AddEntry(gHistBalanceFunction,"Data","lp");
  if(kShowShuffled) 
    legend->AddEntry(gHistBalanceFunctionShuffled,"Shuffled data","lp");
  if(kShowMixed) 
    legend->AddEntry(gHistBalanceFunctionMixed,"Mixed data","lp");
  legend->Draw();
  
  TLatex *latexInfo1 = new TLatex();
  latexInfo1->SetNDC();
  latexInfo1->SetTextSize(0.04);
  latexInfo1->SetTextColor(1);
  latexInfo1->DrawLatex(0.58,0.88,centralityLatex.Data());
  latexInfo1->DrawLatex(0.58,0.82,psiLatex.Data());
  latexInfo1->DrawLatex(0.58,0.76,pttLatex.Data());
  latexInfo1->DrawLatex(0.58,0.70,ptaLatex.Data());

  //pngName = "BalanceFunctionDeltaEta.Centrality"; 
  //pngName += centralityArray[gCentrality-1]; 
  //pngName += ".Psi"; //pngName += psiMin; pngName += "To"; pngName += psiMax;
  //pngName += ".png";
  //c1->SaveAs(pngName.Data());
    
  TCanvas *c2 = new TCanvas("c2","",600,0,600,500);
  c2->SetFillColor(10); c2->SetHighLightColor(10);
  c2->SetLeftMargin(0.17); c2->SetTopMargin(0.05);
  gHistBalanceFunctionSubtracted->SetTitle("");
  gHistBalanceFunctionSubtracted->GetYaxis()->SetTitleOffset(1.4);
  gHistBalanceFunctionSubtracted->GetYaxis()->SetNdivisions(5);
  gHistBalanceFunctionSubtracted->GetXaxis()->SetNdivisions(10);
  gHistBalanceFunctionSubtracted->DrawCopy("E");
  
  //Opening the output ascii files
  TString filenameMean = "meanIn"; 
  TString filenameSigma = "sigmaIn"; 
  TString filenameSkewness = "skewnessIn"; 
  TString filenameKurtosis = "kurtosisIn"; 
  if(gDeltaEtaDeltaPhi == 1) {
    filenameMean += "DeltaEta.Psi"; filenameSigma += "DeltaEta.Psi";
    filenameSkewness += "DeltaEta.Psi"; filenameKurtosis += "DeltaEta.Psi";
  }
  else if(gDeltaEtaDeltaPhi == 2) {
    filenameMean += "DeltaPhi.Psi"; filenameSigma += "DeltaPhi.Psi";
    filenameSkewness += "DeltaPhi.Psi"; filenameKurtosis += "DeltaPhi.Psi";
  }
  if((psiMin == -0.5)&&(psiMax == 0.5)) {
    filenameMean += "InPlane.Ptt"; filenameSigma += "InPlane.Ptt";
    filenameSkewness += "InPlane.Ptt"; filenameKurtosis += "InPlane.Ptt";
  }
  else if((psiMin == 0.5)&&(psiMax == 1.5)) {
    filenameMean += "Intermediate.Ptt"; filenameSigma += "Intermediate.Ptt";
    filenameSkewness += "Intermediate.Ptt"; 
    filenameKurtosis += "Intermediate.Ptt";
  }
  else if((psiMin == 1.5)&&(psiMax == 2.5)) {
    filenameMean += "OutOfPlane.Ptt"; filenameSigma += "OutOfPlane.Ptt";
    filenameSkewness += "OutOfPlane.Ptt"; 
    filenameKurtosis += "OutOfPlane.Ptt";    
  }
  else if((psiMin == 2.5)&&(psiMax == 3.5)) {
    filenameMean += "Rest.Ptt"; filenameSigma += "Rest.Ptt";
    filenameSkewness += "Rest.Ptt"; filenameKurtosis += "Rest.Ptt";
  }
  else {
    filenameMean += "All.Ptt"; filenameSigma += "All.Ptt";
    filenameSkewness += "All.Ptt"; filenameKurtosis += "All.Ptt";
  }
  filenameMean += Form("%.1f",ptTriggerMin); filenameMean += "To"; 
  filenameMean += Form("%.1f",ptTriggerMax); filenameMean += "PtaFrom";
  filenameMean += Form("%.1f",ptAssociatedMin); filenameMean += "To"; 
  filenameMean += Form("%.1f",ptAssociatedMax);  filenameMean += ".txt";  
  filenameSigma += Form("%.1f",ptTriggerMin); filenameSigma += "To"; 
  filenameSigma += Form("%.1f",ptTriggerMax); filenameSigma += "PtaFrom";
  filenameSigma += Form("%.1f",ptAssociatedMin); filenameSigma += "To"; 
  filenameSigma += Form("%.1f",ptAssociatedMax);  filenameSigma += ".txt";  
  filenameSkewness += Form("%.1f",ptTriggerMin); filenameSkewness += "To"; 
  filenameSkewness += Form("%.1f",ptTriggerMax); filenameSkewness += "PtaFrom";
  filenameSkewness += Form("%.1f",ptAssociatedMin); filenameSkewness += "To"; 
  filenameSkewness += Form("%.1f",ptAssociatedMax);  
  filenameSkewness += ".txt";  
  filenameKurtosis += Form("%.1f",ptTriggerMin); filenameKurtosis += "To"; 
  filenameKurtosis += Form("%.1f",ptTriggerMax); filenameKurtosis += "PtaFrom";
  filenameKurtosis += Form("%.1f",ptAssociatedMin); filenameKurtosis += "To"; 
  filenameKurtosis += Form("%.1f",ptAssociatedMax);  
  filenameKurtosis += ".txt";  
 
  //==================================================================//
  //In Delta phi we calculate the moments from the near side structure//
  if(gDeltaEtaDeltaPhi == 2)
    gHistBalanceFunctionSubtracted->GetXaxis()->SetRangeUser(-TMath::Pi()/2.,TMath::Pi()/2.);
  //==================================================================//

  TString meanLatex, rmsLatex, skewnessLatex, kurtosisLatex;
  meanLatex = "#mu"; 
  if(gDeltaEtaDeltaPhi == 1) meanLatex += "_{#Delta#eta} = "; 
  else if(gDeltaEtaDeltaPhi == 2) meanLatex += "_{#Delta#varphi} = "; 
  meanLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetMean());
  meanLatex += " #pm "; 
  meanLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetMeanError());
  ofstream fileMean(filenameMean.Data(),ios::app);
  fileMean << gCentrality << " " << gHistBalanceFunctionSubtracted->GetMean() << " " <<gHistBalanceFunctionSubtracted->GetMeanError()<<endl;
  fileMean.close();

  rmsLatex = "#sigma"; 
  if(gDeltaEtaDeltaPhi == 1) rmsLatex += "_{#Delta#eta} = "; 
  else if(gDeltaEtaDeltaPhi == 2) rmsLatex += "_{#Delta#varphi} = "; 
  rmsLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetRMS());
  rmsLatex += " #pm "; 
  rmsLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetRMSError());
  ofstream fileSigma(filenameSigma.Data(),ios::app);
  fileSigma << gCentrality << " " << gHistBalanceFunctionSubtracted->GetRMS() << " " <<gHistBalanceFunctionSubtracted->GetRMSError()<<endl;
  fileSigma.close();
  
  skewnessLatex = "S"; 
  if(gDeltaEtaDeltaPhi == 1) skewnessLatex += "_{#Delta#eta} = "; 
  else if(gDeltaEtaDeltaPhi == 2) skewnessLatex += "_{#Delta#varphi} = "; 
  skewnessLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetSkewness(1));
  skewnessLatex += " #pm "; 
  skewnessLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetSkewness(11));
  ofstream fileSkewness(filenameSkewness.Data(),ios::app);
  fileSkewness << gCentrality << " " << gHistBalanceFunctionSubtracted->GetSkewness(1) << " " <<gHistBalanceFunctionSubtracted->GetSkewness(11)<<endl;
  fileSkewness.close();

  kurtosisLatex = "K"; 
  if(gDeltaEtaDeltaPhi == 1) kurtosisLatex += "_{#Delta#eta} = "; 
  else if(gDeltaEtaDeltaPhi == 2) kurtosisLatex += "_{#Delta#varphi} = "; 
  kurtosisLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetKurtosis(1));
  kurtosisLatex += " #pm "; 
  kurtosisLatex += Form("%.3f",gHistBalanceFunctionSubtracted->GetKurtosis(11));
  ofstream fileKurtosis(filenameKurtosis.Data(),ios::app);
  fileKurtosis << gCentrality << " " << gHistBalanceFunctionSubtracted->GetKurtosis(1) << " " <<gHistBalanceFunctionSubtracted->GetKurtosis(11)<<endl;
  fileKurtosis.close();

  Printf("Mean: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetMean(),gHistBalanceFunctionSubtracted->GetMeanError());
  Printf("RMS: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetRMS(),gHistBalanceFunctionSubtracted->GetRMSError());
  Printf("Skeweness: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetSkewness(1),gHistBalanceFunctionSubtracted->GetSkewness(11));
  Printf("Kurtosis: %lf - Error: %lf",gHistBalanceFunctionSubtracted->GetKurtosis(1),gHistBalanceFunctionSubtracted->GetKurtosis(11));

  //latexInfo1->DrawLatex(0.18,0.88,centralityLatex.Data());
  //latexInfo1->DrawLatex(0.18,0.82,psiLatex.Data());
  //latexInfo1->DrawLatex(0.18,0.76,pttLatex.Data());
  //latexInfo1->DrawLatex(0.18,0.70,ptaLatex.Data());
  latexInfo1->DrawLatex(0.59,0.88,centralityLatex.Data());
  latexInfo1->DrawLatex(0.58,0.82,psiLatex.Data());
  latexInfo1->DrawLatex(0.59,0.76,pttLatex.Data());
  latexInfo1->DrawLatex(0.59,0.70,ptaLatex.Data());


  TLatex *latexResults = new TLatex();
  latexResults->SetNDC();
  latexResults->SetTextSize(0.04);
  latexResults->SetTextColor(1);

  if(gDeltaEtaDeltaPhi == 1) {
    latexResults->DrawLatex(0.18,0.88,meanLatex.Data());
    latexResults->DrawLatex(0.18,0.82,rmsLatex.Data());
    latexResults->DrawLatex(0.18,0.76,skewnessLatex.Data());
    latexResults->DrawLatex(0.18,0.70,kurtosisLatex.Data());
  }
  else if(gDeltaEtaDeltaPhi == 2) {
    latexResults->DrawLatex(0.59,0.60,meanLatex.Data());
    latexResults->DrawLatex(0.59,0.54,rmsLatex.Data());
    latexResults->DrawLatex(0.59,0.48,skewnessLatex.Data());
    latexResults->DrawLatex(0.59,0.42,kurtosisLatex.Data());
  }

  TString pngName = "BalanceFunction."; 
  pngName += "Centrality";
  pngName += gCentrality; 
  if(gDeltaEtaDeltaPhi == 1) pngName += ".InDeltaEta.Psi";
  else if(gDeltaEtaDeltaPhi == 2) pngName += ".InDeltaPhi.Psi";
  if((psiMin == -0.5)&&(psiMax == 0.5)) pngName += "InPlane.Ptt";
  else if((psiMin == 0.5)&&(psiMax == 1.5)) pngName += "Intermediate.Ptt";
  else if((psiMin == 1.5)&&(psiMax == 2.5)) pngName += "OutOfPlane.Ptt";
  else if((psiMin == 2.5)&&(psiMax == 3.5)) pngName += "Rest.PttFrom";
  else pngName += "All.PttFrom";  
  pngName += Form("%.1f",ptTriggerMin); pngName += "To"; 
  pngName += Form("%.1f",ptTriggerMax); pngName += "PtaFrom";
  pngName += Form("%.1f",ptAssociatedMin); pngName += "To"; 
  pngName += Form("%.1f",ptAssociatedMax); 
  pngName += ".png";

  c2->SaveAs(pngName.Data());
}

//____________________________________________________________________//
void GetWeightedMean1D(TH1D *gHistBalance, Bool_t kProjectInEta = kTRUE, Int_t fStartBin = 1, Int_t fStopBin = -1, Double_t &WM, Double_t &WME) {

  //Prints the calculated width of the BF and its error
  Double_t gSumXi = 0.0, gSumBi = 0.0, gSumBiXi = 0.0;
  Double_t gSumBiXi2 = 0.0, gSumBi2Xi2 = 0.0;
  Double_t gSumDeltaBi2 = 0.0, gSumXi2DeltaBi2 = 0.0;
  Double_t deltaBalP2 = 0.0, integral = 0.0;
  Double_t deltaErrorNew = 0.0;

  //Retrieve this variables from Histogram
  Int_t fNumberOfBins = gHistBalance->GetNbinsX();
  if(fStopBin > -1)   fNumberOfBins = fStopBin;
  Double_t fP2Step    = gHistBalance->GetBinWidth(1); // assume equal binning!
  Double_t currentBinCenter = 0.;

  for(Int_t i = fStartBin; i <= fNumberOfBins; i++) {

    // in order to recover the |abs| in the 1D analysis
    currentBinCenter = gHistBalance->GetBinCenter(i);
    if(kProjectInEta){
      if(currentBinCenter < 0) currentBinCenter = -currentBinCenter;
    }
    else{
      if(currentBinCenter < 0) currentBinCenter = -currentBinCenter;
      if(currentBinCenter > TMath::Pi()) currentBinCenter = 2 * TMath::Pi() - currentBinCenter;
    }

    gSumXi += currentBinCenter;
    gSumBi += gHistBalance->GetBinContent(i);
    gSumBiXi += gHistBalance->GetBinContent(i)*currentBinCenter;
    gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(currentBinCenter,2);
    gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(currentBinCenter,2);
    gSumDeltaBi2 +=  TMath::Power(gHistBalance->GetBinError(i),2);
    gSumXi2DeltaBi2 += TMath::Power(currentBinCenter,2) * TMath::Power(gHistBalance->GetBinError(i),2);
    
    deltaBalP2 += fP2Step*TMath::Power(gHistBalance->GetBinError(i),2);
    integral += fP2Step*gHistBalance->GetBinContent(i);
  }
  for(Int_t i = fStartBin; i < fNumberOfBins; i++)
    deltaErrorNew += gHistBalance->GetBinError(i)*(currentBinCenter*gSumBi - gSumBiXi)/TMath::Power(gSumBi,2);
  
  Double_t integralError = TMath::Sqrt(deltaBalP2);
  
  Double_t delta = gSumBiXi / gSumBi;
  Double_t deltaError = (gSumBiXi / gSumBi) * TMath::Sqrt(TMath::Power((TMath::Sqrt(gSumXi2DeltaBi2)/gSumBiXi),2) + TMath::Power((gSumDeltaBi2/gSumBi),2) );
  
  WM  = delta;
  WME = deltaError;
}
 drawBalanceFunctionPsi.C:1
 drawBalanceFunctionPsi.C:2
 drawBalanceFunctionPsi.C:3
 drawBalanceFunctionPsi.C:4
 drawBalanceFunctionPsi.C:5
 drawBalanceFunctionPsi.C:6
 drawBalanceFunctionPsi.C:7
 drawBalanceFunctionPsi.C:8
 drawBalanceFunctionPsi.C:9
 drawBalanceFunctionPsi.C:10
 drawBalanceFunctionPsi.C:11
 drawBalanceFunctionPsi.C:12
 drawBalanceFunctionPsi.C:13
 drawBalanceFunctionPsi.C:14
 drawBalanceFunctionPsi.C:15
 drawBalanceFunctionPsi.C:16
 drawBalanceFunctionPsi.C:17
 drawBalanceFunctionPsi.C:18
 drawBalanceFunctionPsi.C:19
 drawBalanceFunctionPsi.C:20
 drawBalanceFunctionPsi.C:21
 drawBalanceFunctionPsi.C:22
 drawBalanceFunctionPsi.C:23
 drawBalanceFunctionPsi.C:24
 drawBalanceFunctionPsi.C:25
 drawBalanceFunctionPsi.C:26
 drawBalanceFunctionPsi.C:27
 drawBalanceFunctionPsi.C:28
 drawBalanceFunctionPsi.C:29
 drawBalanceFunctionPsi.C:30
 drawBalanceFunctionPsi.C:31
 drawBalanceFunctionPsi.C:32
 drawBalanceFunctionPsi.C:33
 drawBalanceFunctionPsi.C:34
 drawBalanceFunctionPsi.C:35
 drawBalanceFunctionPsi.C:36
 drawBalanceFunctionPsi.C:37
 drawBalanceFunctionPsi.C:38
 drawBalanceFunctionPsi.C:39
 drawBalanceFunctionPsi.C:40
 drawBalanceFunctionPsi.C:41
 drawBalanceFunctionPsi.C:42
 drawBalanceFunctionPsi.C:43
 drawBalanceFunctionPsi.C:44
 drawBalanceFunctionPsi.C:45
 drawBalanceFunctionPsi.C:46
 drawBalanceFunctionPsi.C:47
 drawBalanceFunctionPsi.C:48
 drawBalanceFunctionPsi.C:49
 drawBalanceFunctionPsi.C:50
 drawBalanceFunctionPsi.C:51
 drawBalanceFunctionPsi.C:52
 drawBalanceFunctionPsi.C:53
 drawBalanceFunctionPsi.C:54
 drawBalanceFunctionPsi.C:55
 drawBalanceFunctionPsi.C:56
 drawBalanceFunctionPsi.C:57
 drawBalanceFunctionPsi.C:58
 drawBalanceFunctionPsi.C:59
 drawBalanceFunctionPsi.C:60
 drawBalanceFunctionPsi.C:61
 drawBalanceFunctionPsi.C:62
 drawBalanceFunctionPsi.C:63
 drawBalanceFunctionPsi.C:64
 drawBalanceFunctionPsi.C:65
 drawBalanceFunctionPsi.C:66
 drawBalanceFunctionPsi.C:67
 drawBalanceFunctionPsi.C:68
 drawBalanceFunctionPsi.C:69
 drawBalanceFunctionPsi.C:70
 drawBalanceFunctionPsi.C:71
 drawBalanceFunctionPsi.C:72
 drawBalanceFunctionPsi.C:73
 drawBalanceFunctionPsi.C:74
 drawBalanceFunctionPsi.C:75
 drawBalanceFunctionPsi.C:76
 drawBalanceFunctionPsi.C:77
 drawBalanceFunctionPsi.C:78
 drawBalanceFunctionPsi.C:79
 drawBalanceFunctionPsi.C:80
 drawBalanceFunctionPsi.C:81
 drawBalanceFunctionPsi.C:82
 drawBalanceFunctionPsi.C:83
 drawBalanceFunctionPsi.C:84
 drawBalanceFunctionPsi.C:85
 drawBalanceFunctionPsi.C:86
 drawBalanceFunctionPsi.C:87
 drawBalanceFunctionPsi.C:88
 drawBalanceFunctionPsi.C:89
 drawBalanceFunctionPsi.C:90
 drawBalanceFunctionPsi.C:91
 drawBalanceFunctionPsi.C:92
 drawBalanceFunctionPsi.C:93
 drawBalanceFunctionPsi.C:94
 drawBalanceFunctionPsi.C:95
 drawBalanceFunctionPsi.C:96
 drawBalanceFunctionPsi.C:97
 drawBalanceFunctionPsi.C:98
 drawBalanceFunctionPsi.C:99
 drawBalanceFunctionPsi.C:100
 drawBalanceFunctionPsi.C:101
 drawBalanceFunctionPsi.C:102
 drawBalanceFunctionPsi.C:103
 drawBalanceFunctionPsi.C:104
 drawBalanceFunctionPsi.C:105
 drawBalanceFunctionPsi.C:106
 drawBalanceFunctionPsi.C:107
 drawBalanceFunctionPsi.C:108
 drawBalanceFunctionPsi.C:109
 drawBalanceFunctionPsi.C:110
 drawBalanceFunctionPsi.C:111
 drawBalanceFunctionPsi.C:112
 drawBalanceFunctionPsi.C:113
 drawBalanceFunctionPsi.C:114
 drawBalanceFunctionPsi.C:115
 drawBalanceFunctionPsi.C:116
 drawBalanceFunctionPsi.C:117
 drawBalanceFunctionPsi.C:118
 drawBalanceFunctionPsi.C:119
 drawBalanceFunctionPsi.C:120
 drawBalanceFunctionPsi.C:121
 drawBalanceFunctionPsi.C:122
 drawBalanceFunctionPsi.C:123
 drawBalanceFunctionPsi.C:124
 drawBalanceFunctionPsi.C:125
 drawBalanceFunctionPsi.C:126
 drawBalanceFunctionPsi.C:127
 drawBalanceFunctionPsi.C:128
 drawBalanceFunctionPsi.C:129
 drawBalanceFunctionPsi.C:130
 drawBalanceFunctionPsi.C:131
 drawBalanceFunctionPsi.C:132
 drawBalanceFunctionPsi.C:133
 drawBalanceFunctionPsi.C:134
 drawBalanceFunctionPsi.C:135
 drawBalanceFunctionPsi.C:136
 drawBalanceFunctionPsi.C:137
 drawBalanceFunctionPsi.C:138
 drawBalanceFunctionPsi.C:139
 drawBalanceFunctionPsi.C:140
 drawBalanceFunctionPsi.C:141
 drawBalanceFunctionPsi.C:142
 drawBalanceFunctionPsi.C:143
 drawBalanceFunctionPsi.C:144
 drawBalanceFunctionPsi.C:145
 drawBalanceFunctionPsi.C:146
 drawBalanceFunctionPsi.C:147
 drawBalanceFunctionPsi.C:148
 drawBalanceFunctionPsi.C:149
 drawBalanceFunctionPsi.C:150
 drawBalanceFunctionPsi.C:151
 drawBalanceFunctionPsi.C:152
 drawBalanceFunctionPsi.C:153
 drawBalanceFunctionPsi.C:154
 drawBalanceFunctionPsi.C:155
 drawBalanceFunctionPsi.C:156
 drawBalanceFunctionPsi.C:157
 drawBalanceFunctionPsi.C:158
 drawBalanceFunctionPsi.C:159
 drawBalanceFunctionPsi.C:160
 drawBalanceFunctionPsi.C:161
 drawBalanceFunctionPsi.C:162
 drawBalanceFunctionPsi.C:163
 drawBalanceFunctionPsi.C:164
 drawBalanceFunctionPsi.C:165
 drawBalanceFunctionPsi.C:166
 drawBalanceFunctionPsi.C:167
 drawBalanceFunctionPsi.C:168
 drawBalanceFunctionPsi.C:169
 drawBalanceFunctionPsi.C:170
 drawBalanceFunctionPsi.C:171
 drawBalanceFunctionPsi.C:172
 drawBalanceFunctionPsi.C:173
 drawBalanceFunctionPsi.C:174
 drawBalanceFunctionPsi.C:175
 drawBalanceFunctionPsi.C:176
 drawBalanceFunctionPsi.C:177
 drawBalanceFunctionPsi.C:178
 drawBalanceFunctionPsi.C:179
 drawBalanceFunctionPsi.C:180
 drawBalanceFunctionPsi.C:181
 drawBalanceFunctionPsi.C:182
 drawBalanceFunctionPsi.C:183
 drawBalanceFunctionPsi.C:184
 drawBalanceFunctionPsi.C:185
 drawBalanceFunctionPsi.C:186
 drawBalanceFunctionPsi.C:187
 drawBalanceFunctionPsi.C:188
 drawBalanceFunctionPsi.C:189
 drawBalanceFunctionPsi.C:190
 drawBalanceFunctionPsi.C:191
 drawBalanceFunctionPsi.C:192
 drawBalanceFunctionPsi.C:193
 drawBalanceFunctionPsi.C:194
 drawBalanceFunctionPsi.C:195
 drawBalanceFunctionPsi.C:196
 drawBalanceFunctionPsi.C:197
 drawBalanceFunctionPsi.C:198
 drawBalanceFunctionPsi.C:199
 drawBalanceFunctionPsi.C:200
 drawBalanceFunctionPsi.C:201
 drawBalanceFunctionPsi.C:202
 drawBalanceFunctionPsi.C:203
 drawBalanceFunctionPsi.C:204
 drawBalanceFunctionPsi.C:205
 drawBalanceFunctionPsi.C:206
 drawBalanceFunctionPsi.C:207
 drawBalanceFunctionPsi.C:208
 drawBalanceFunctionPsi.C:209
 drawBalanceFunctionPsi.C:210
 drawBalanceFunctionPsi.C:211
 drawBalanceFunctionPsi.C:212
 drawBalanceFunctionPsi.C:213
 drawBalanceFunctionPsi.C:214
 drawBalanceFunctionPsi.C:215
 drawBalanceFunctionPsi.C:216
 drawBalanceFunctionPsi.C:217
 drawBalanceFunctionPsi.C:218
 drawBalanceFunctionPsi.C:219
 drawBalanceFunctionPsi.C:220
 drawBalanceFunctionPsi.C:221
 drawBalanceFunctionPsi.C:222
 drawBalanceFunctionPsi.C:223
 drawBalanceFunctionPsi.C:224
 drawBalanceFunctionPsi.C:225
 drawBalanceFunctionPsi.C:226
 drawBalanceFunctionPsi.C:227
 drawBalanceFunctionPsi.C:228
 drawBalanceFunctionPsi.C:229
 drawBalanceFunctionPsi.C:230
 drawBalanceFunctionPsi.C:231
 drawBalanceFunctionPsi.C:232
 drawBalanceFunctionPsi.C:233
 drawBalanceFunctionPsi.C:234
 drawBalanceFunctionPsi.C:235
 drawBalanceFunctionPsi.C:236
 drawBalanceFunctionPsi.C:237
 drawBalanceFunctionPsi.C:238
 drawBalanceFunctionPsi.C:239
 drawBalanceFunctionPsi.C:240
 drawBalanceFunctionPsi.C:241
 drawBalanceFunctionPsi.C:242
 drawBalanceFunctionPsi.C:243
 drawBalanceFunctionPsi.C:244
 drawBalanceFunctionPsi.C:245
 drawBalanceFunctionPsi.C:246
 drawBalanceFunctionPsi.C:247
 drawBalanceFunctionPsi.C:248
 drawBalanceFunctionPsi.C:249
 drawBalanceFunctionPsi.C:250
 drawBalanceFunctionPsi.C:251
 drawBalanceFunctionPsi.C:252
 drawBalanceFunctionPsi.C:253
 drawBalanceFunctionPsi.C:254
 drawBalanceFunctionPsi.C:255
 drawBalanceFunctionPsi.C:256
 drawBalanceFunctionPsi.C:257
 drawBalanceFunctionPsi.C:258
 drawBalanceFunctionPsi.C:259
 drawBalanceFunctionPsi.C:260
 drawBalanceFunctionPsi.C:261
 drawBalanceFunctionPsi.C:262
 drawBalanceFunctionPsi.C:263
 drawBalanceFunctionPsi.C:264
 drawBalanceFunctionPsi.C:265
 drawBalanceFunctionPsi.C:266
 drawBalanceFunctionPsi.C:267
 drawBalanceFunctionPsi.C:268
 drawBalanceFunctionPsi.C:269
 drawBalanceFunctionPsi.C:270
 drawBalanceFunctionPsi.C:271
 drawBalanceFunctionPsi.C:272
 drawBalanceFunctionPsi.C:273
 drawBalanceFunctionPsi.C:274
 drawBalanceFunctionPsi.C:275
 drawBalanceFunctionPsi.C:276
 drawBalanceFunctionPsi.C:277
 drawBalanceFunctionPsi.C:278
 drawBalanceFunctionPsi.C:279
 drawBalanceFunctionPsi.C:280
 drawBalanceFunctionPsi.C:281
 drawBalanceFunctionPsi.C:282
 drawBalanceFunctionPsi.C:283
 drawBalanceFunctionPsi.C:284
 drawBalanceFunctionPsi.C:285
 drawBalanceFunctionPsi.C:286
 drawBalanceFunctionPsi.C:287
 drawBalanceFunctionPsi.C:288
 drawBalanceFunctionPsi.C:289
 drawBalanceFunctionPsi.C:290
 drawBalanceFunctionPsi.C:291
 drawBalanceFunctionPsi.C:292
 drawBalanceFunctionPsi.C:293
 drawBalanceFunctionPsi.C:294
 drawBalanceFunctionPsi.C:295
 drawBalanceFunctionPsi.C:296
 drawBalanceFunctionPsi.C:297
 drawBalanceFunctionPsi.C:298
 drawBalanceFunctionPsi.C:299
 drawBalanceFunctionPsi.C:300
 drawBalanceFunctionPsi.C:301
 drawBalanceFunctionPsi.C:302
 drawBalanceFunctionPsi.C:303
 drawBalanceFunctionPsi.C:304
 drawBalanceFunctionPsi.C:305
 drawBalanceFunctionPsi.C:306
 drawBalanceFunctionPsi.C:307
 drawBalanceFunctionPsi.C:308
 drawBalanceFunctionPsi.C:309
 drawBalanceFunctionPsi.C:310
 drawBalanceFunctionPsi.C:311
 drawBalanceFunctionPsi.C:312
 drawBalanceFunctionPsi.C:313
 drawBalanceFunctionPsi.C:314
 drawBalanceFunctionPsi.C:315
 drawBalanceFunctionPsi.C:316
 drawBalanceFunctionPsi.C:317
 drawBalanceFunctionPsi.C:318
 drawBalanceFunctionPsi.C:319
 drawBalanceFunctionPsi.C:320
 drawBalanceFunctionPsi.C:321
 drawBalanceFunctionPsi.C:322
 drawBalanceFunctionPsi.C:323
 drawBalanceFunctionPsi.C:324
 drawBalanceFunctionPsi.C:325
 drawBalanceFunctionPsi.C:326
 drawBalanceFunctionPsi.C:327
 drawBalanceFunctionPsi.C:328
 drawBalanceFunctionPsi.C:329
 drawBalanceFunctionPsi.C:330
 drawBalanceFunctionPsi.C:331
 drawBalanceFunctionPsi.C:332
 drawBalanceFunctionPsi.C:333
 drawBalanceFunctionPsi.C:334
 drawBalanceFunctionPsi.C:335
 drawBalanceFunctionPsi.C:336
 drawBalanceFunctionPsi.C:337
 drawBalanceFunctionPsi.C:338
 drawBalanceFunctionPsi.C:339
 drawBalanceFunctionPsi.C:340
 drawBalanceFunctionPsi.C:341
 drawBalanceFunctionPsi.C:342
 drawBalanceFunctionPsi.C:343
 drawBalanceFunctionPsi.C:344
 drawBalanceFunctionPsi.C:345
 drawBalanceFunctionPsi.C:346
 drawBalanceFunctionPsi.C:347
 drawBalanceFunctionPsi.C:348
 drawBalanceFunctionPsi.C:349
 drawBalanceFunctionPsi.C:350
 drawBalanceFunctionPsi.C:351
 drawBalanceFunctionPsi.C:352
 drawBalanceFunctionPsi.C:353
 drawBalanceFunctionPsi.C:354
 drawBalanceFunctionPsi.C:355
 drawBalanceFunctionPsi.C:356
 drawBalanceFunctionPsi.C:357
 drawBalanceFunctionPsi.C:358
 drawBalanceFunctionPsi.C:359
 drawBalanceFunctionPsi.C:360
 drawBalanceFunctionPsi.C:361
 drawBalanceFunctionPsi.C:362
 drawBalanceFunctionPsi.C:363
 drawBalanceFunctionPsi.C:364
 drawBalanceFunctionPsi.C:365
 drawBalanceFunctionPsi.C:366
 drawBalanceFunctionPsi.C:367
 drawBalanceFunctionPsi.C:368
 drawBalanceFunctionPsi.C:369
 drawBalanceFunctionPsi.C:370
 drawBalanceFunctionPsi.C:371
 drawBalanceFunctionPsi.C:372
 drawBalanceFunctionPsi.C:373
 drawBalanceFunctionPsi.C:374
 drawBalanceFunctionPsi.C:375
 drawBalanceFunctionPsi.C:376
 drawBalanceFunctionPsi.C:377
 drawBalanceFunctionPsi.C:378
 drawBalanceFunctionPsi.C:379
 drawBalanceFunctionPsi.C:380
 drawBalanceFunctionPsi.C:381
 drawBalanceFunctionPsi.C:382
 drawBalanceFunctionPsi.C:383
 drawBalanceFunctionPsi.C:384
 drawBalanceFunctionPsi.C:385
 drawBalanceFunctionPsi.C:386
 drawBalanceFunctionPsi.C:387
 drawBalanceFunctionPsi.C:388
 drawBalanceFunctionPsi.C:389
 drawBalanceFunctionPsi.C:390
 drawBalanceFunctionPsi.C:391
 drawBalanceFunctionPsi.C:392
 drawBalanceFunctionPsi.C:393
 drawBalanceFunctionPsi.C:394
 drawBalanceFunctionPsi.C:395
 drawBalanceFunctionPsi.C:396
 drawBalanceFunctionPsi.C:397
 drawBalanceFunctionPsi.C:398
 drawBalanceFunctionPsi.C:399
 drawBalanceFunctionPsi.C:400
 drawBalanceFunctionPsi.C:401
 drawBalanceFunctionPsi.C:402
 drawBalanceFunctionPsi.C:403
 drawBalanceFunctionPsi.C:404
 drawBalanceFunctionPsi.C:405
 drawBalanceFunctionPsi.C:406
 drawBalanceFunctionPsi.C:407
 drawBalanceFunctionPsi.C:408
 drawBalanceFunctionPsi.C:409
 drawBalanceFunctionPsi.C:410
 drawBalanceFunctionPsi.C:411
 drawBalanceFunctionPsi.C:412
 drawBalanceFunctionPsi.C:413
 drawBalanceFunctionPsi.C:414
 drawBalanceFunctionPsi.C:415
 drawBalanceFunctionPsi.C:416
 drawBalanceFunctionPsi.C:417
 drawBalanceFunctionPsi.C:418
 drawBalanceFunctionPsi.C:419
 drawBalanceFunctionPsi.C:420
 drawBalanceFunctionPsi.C:421
 drawBalanceFunctionPsi.C:422
 drawBalanceFunctionPsi.C:423
 drawBalanceFunctionPsi.C:424
 drawBalanceFunctionPsi.C:425
 drawBalanceFunctionPsi.C:426
 drawBalanceFunctionPsi.C:427
 drawBalanceFunctionPsi.C:428
 drawBalanceFunctionPsi.C:429
 drawBalanceFunctionPsi.C:430
 drawBalanceFunctionPsi.C:431
 drawBalanceFunctionPsi.C:432
 drawBalanceFunctionPsi.C:433
 drawBalanceFunctionPsi.C:434
 drawBalanceFunctionPsi.C:435
 drawBalanceFunctionPsi.C:436
 drawBalanceFunctionPsi.C:437
 drawBalanceFunctionPsi.C:438
 drawBalanceFunctionPsi.C:439
 drawBalanceFunctionPsi.C:440
 drawBalanceFunctionPsi.C:441
 drawBalanceFunctionPsi.C:442
 drawBalanceFunctionPsi.C:443
 drawBalanceFunctionPsi.C:444
 drawBalanceFunctionPsi.C:445
 drawBalanceFunctionPsi.C:446
 drawBalanceFunctionPsi.C:447
 drawBalanceFunctionPsi.C:448
 drawBalanceFunctionPsi.C:449
 drawBalanceFunctionPsi.C:450
 drawBalanceFunctionPsi.C:451
 drawBalanceFunctionPsi.C:452
 drawBalanceFunctionPsi.C:453
 drawBalanceFunctionPsi.C:454
 drawBalanceFunctionPsi.C:455
 drawBalanceFunctionPsi.C:456
 drawBalanceFunctionPsi.C:457
 drawBalanceFunctionPsi.C:458
 drawBalanceFunctionPsi.C:459
 drawBalanceFunctionPsi.C:460
 drawBalanceFunctionPsi.C:461
 drawBalanceFunctionPsi.C:462
 drawBalanceFunctionPsi.C:463
 drawBalanceFunctionPsi.C:464
 drawBalanceFunctionPsi.C:465
 drawBalanceFunctionPsi.C:466
 drawBalanceFunctionPsi.C:467
 drawBalanceFunctionPsi.C:468
 drawBalanceFunctionPsi.C:469
 drawBalanceFunctionPsi.C:470
 drawBalanceFunctionPsi.C:471
 drawBalanceFunctionPsi.C:472
 drawBalanceFunctionPsi.C:473
 drawBalanceFunctionPsi.C:474
 drawBalanceFunctionPsi.C:475
 drawBalanceFunctionPsi.C:476
 drawBalanceFunctionPsi.C:477
 drawBalanceFunctionPsi.C:478
 drawBalanceFunctionPsi.C:479
 drawBalanceFunctionPsi.C:480
 drawBalanceFunctionPsi.C:481
 drawBalanceFunctionPsi.C:482
 drawBalanceFunctionPsi.C:483
 drawBalanceFunctionPsi.C:484
 drawBalanceFunctionPsi.C:485
 drawBalanceFunctionPsi.C:486
 drawBalanceFunctionPsi.C:487
 drawBalanceFunctionPsi.C:488
 drawBalanceFunctionPsi.C:489
 drawBalanceFunctionPsi.C:490
 drawBalanceFunctionPsi.C:491
 drawBalanceFunctionPsi.C:492
 drawBalanceFunctionPsi.C:493
 drawBalanceFunctionPsi.C:494
 drawBalanceFunctionPsi.C:495
 drawBalanceFunctionPsi.C:496
 drawBalanceFunctionPsi.C:497
 drawBalanceFunctionPsi.C:498
 drawBalanceFunctionPsi.C:499
 drawBalanceFunctionPsi.C:500
 drawBalanceFunctionPsi.C:501
 drawBalanceFunctionPsi.C:502
 drawBalanceFunctionPsi.C:503
 drawBalanceFunctionPsi.C:504
 drawBalanceFunctionPsi.C:505
 drawBalanceFunctionPsi.C:506
 drawBalanceFunctionPsi.C:507
 drawBalanceFunctionPsi.C:508
 drawBalanceFunctionPsi.C:509
 drawBalanceFunctionPsi.C:510
 drawBalanceFunctionPsi.C:511
 drawBalanceFunctionPsi.C:512
 drawBalanceFunctionPsi.C:513
 drawBalanceFunctionPsi.C:514
 drawBalanceFunctionPsi.C:515
 drawBalanceFunctionPsi.C:516
 drawBalanceFunctionPsi.C:517
 drawBalanceFunctionPsi.C:518
 drawBalanceFunctionPsi.C:519
 drawBalanceFunctionPsi.C:520
 drawBalanceFunctionPsi.C:521
 drawBalanceFunctionPsi.C:522
 drawBalanceFunctionPsi.C:523
 drawBalanceFunctionPsi.C:524
 drawBalanceFunctionPsi.C:525
 drawBalanceFunctionPsi.C:526
 drawBalanceFunctionPsi.C:527
 drawBalanceFunctionPsi.C:528
 drawBalanceFunctionPsi.C:529
 drawBalanceFunctionPsi.C:530
 drawBalanceFunctionPsi.C:531
 drawBalanceFunctionPsi.C:532
 drawBalanceFunctionPsi.C:533
 drawBalanceFunctionPsi.C:534
 drawBalanceFunctionPsi.C:535
 drawBalanceFunctionPsi.C:536
 drawBalanceFunctionPsi.C:537
 drawBalanceFunctionPsi.C:538
 drawBalanceFunctionPsi.C:539
 drawBalanceFunctionPsi.C:540
 drawBalanceFunctionPsi.C:541
 drawBalanceFunctionPsi.C:542
 drawBalanceFunctionPsi.C:543
 drawBalanceFunctionPsi.C:544
 drawBalanceFunctionPsi.C:545
 drawBalanceFunctionPsi.C:546
 drawBalanceFunctionPsi.C:547
 drawBalanceFunctionPsi.C:548
 drawBalanceFunctionPsi.C:549
 drawBalanceFunctionPsi.C:550
 drawBalanceFunctionPsi.C:551
 drawBalanceFunctionPsi.C:552
 drawBalanceFunctionPsi.C:553
 drawBalanceFunctionPsi.C:554
 drawBalanceFunctionPsi.C:555
 drawBalanceFunctionPsi.C:556
 drawBalanceFunctionPsi.C:557
 drawBalanceFunctionPsi.C:558
 drawBalanceFunctionPsi.C:559
 drawBalanceFunctionPsi.C:560
 drawBalanceFunctionPsi.C:561
 drawBalanceFunctionPsi.C:562
 drawBalanceFunctionPsi.C:563
 drawBalanceFunctionPsi.C:564
 drawBalanceFunctionPsi.C:565
 drawBalanceFunctionPsi.C:566
 drawBalanceFunctionPsi.C:567
 drawBalanceFunctionPsi.C:568
 drawBalanceFunctionPsi.C:569
 drawBalanceFunctionPsi.C:570
 drawBalanceFunctionPsi.C:571
 drawBalanceFunctionPsi.C:572
 drawBalanceFunctionPsi.C:573
 drawBalanceFunctionPsi.C:574
 drawBalanceFunctionPsi.C:575
 drawBalanceFunctionPsi.C:576
 drawBalanceFunctionPsi.C:577
 drawBalanceFunctionPsi.C:578
 drawBalanceFunctionPsi.C:579
 drawBalanceFunctionPsi.C:580
 drawBalanceFunctionPsi.C:581
 drawBalanceFunctionPsi.C:582
 drawBalanceFunctionPsi.C:583
 drawBalanceFunctionPsi.C:584
 drawBalanceFunctionPsi.C:585
 drawBalanceFunctionPsi.C:586
 drawBalanceFunctionPsi.C:587
 drawBalanceFunctionPsi.C:588
 drawBalanceFunctionPsi.C:589
 drawBalanceFunctionPsi.C:590
 drawBalanceFunctionPsi.C:591
 drawBalanceFunctionPsi.C:592
 drawBalanceFunctionPsi.C:593
 drawBalanceFunctionPsi.C:594
 drawBalanceFunctionPsi.C:595
 drawBalanceFunctionPsi.C:596
 drawBalanceFunctionPsi.C:597
 drawBalanceFunctionPsi.C:598
 drawBalanceFunctionPsi.C:599
 drawBalanceFunctionPsi.C:600
 drawBalanceFunctionPsi.C:601
 drawBalanceFunctionPsi.C:602
 drawBalanceFunctionPsi.C:603
 drawBalanceFunctionPsi.C:604
 drawBalanceFunctionPsi.C:605
 drawBalanceFunctionPsi.C:606
 drawBalanceFunctionPsi.C:607
 drawBalanceFunctionPsi.C:608
 drawBalanceFunctionPsi.C:609
 drawBalanceFunctionPsi.C:610
 drawBalanceFunctionPsi.C:611
 drawBalanceFunctionPsi.C:612
 drawBalanceFunctionPsi.C:613
 drawBalanceFunctionPsi.C:614
 drawBalanceFunctionPsi.C:615
 drawBalanceFunctionPsi.C:616
 drawBalanceFunctionPsi.C:617
 drawBalanceFunctionPsi.C:618
 drawBalanceFunctionPsi.C:619
 drawBalanceFunctionPsi.C:620
 drawBalanceFunctionPsi.C:621
 drawBalanceFunctionPsi.C:622
 drawBalanceFunctionPsi.C:623
 drawBalanceFunctionPsi.C:624
 drawBalanceFunctionPsi.C:625
 drawBalanceFunctionPsi.C:626
 drawBalanceFunctionPsi.C:627
 drawBalanceFunctionPsi.C:628
 drawBalanceFunctionPsi.C:629
 drawBalanceFunctionPsi.C:630
 drawBalanceFunctionPsi.C:631
 drawBalanceFunctionPsi.C:632
 drawBalanceFunctionPsi.C:633
 drawBalanceFunctionPsi.C:634
 drawBalanceFunctionPsi.C:635
 drawBalanceFunctionPsi.C:636
 drawBalanceFunctionPsi.C:637
 drawBalanceFunctionPsi.C:638
 drawBalanceFunctionPsi.C:639
 drawBalanceFunctionPsi.C:640
 drawBalanceFunctionPsi.C:641
 drawBalanceFunctionPsi.C:642
 drawBalanceFunctionPsi.C:643
 drawBalanceFunctionPsi.C:644
 drawBalanceFunctionPsi.C:645
 drawBalanceFunctionPsi.C:646
 drawBalanceFunctionPsi.C:647
 drawBalanceFunctionPsi.C:648
 drawBalanceFunctionPsi.C:649
 drawBalanceFunctionPsi.C:650
 drawBalanceFunctionPsi.C:651
 drawBalanceFunctionPsi.C:652
 drawBalanceFunctionPsi.C:653
 drawBalanceFunctionPsi.C:654
 drawBalanceFunctionPsi.C:655
 drawBalanceFunctionPsi.C:656
 drawBalanceFunctionPsi.C:657
 drawBalanceFunctionPsi.C:658
 drawBalanceFunctionPsi.C:659
 drawBalanceFunctionPsi.C:660
 drawBalanceFunctionPsi.C:661
 drawBalanceFunctionPsi.C:662
 drawBalanceFunctionPsi.C:663
 drawBalanceFunctionPsi.C:664
 drawBalanceFunctionPsi.C:665
 drawBalanceFunctionPsi.C:666
 drawBalanceFunctionPsi.C:667
 drawBalanceFunctionPsi.C:668
 drawBalanceFunctionPsi.C:669
 drawBalanceFunctionPsi.C:670
 drawBalanceFunctionPsi.C:671
 drawBalanceFunctionPsi.C:672
 drawBalanceFunctionPsi.C:673
 drawBalanceFunctionPsi.C:674
 drawBalanceFunctionPsi.C:675
 drawBalanceFunctionPsi.C:676
 drawBalanceFunctionPsi.C:677
 drawBalanceFunctionPsi.C:678
 drawBalanceFunctionPsi.C:679
 drawBalanceFunctionPsi.C:680
 drawBalanceFunctionPsi.C:681
 drawBalanceFunctionPsi.C:682
 drawBalanceFunctionPsi.C:683
 drawBalanceFunctionPsi.C:684
 drawBalanceFunctionPsi.C:685
 drawBalanceFunctionPsi.C:686
 drawBalanceFunctionPsi.C:687
 drawBalanceFunctionPsi.C:688
 drawBalanceFunctionPsi.C:689
 drawBalanceFunctionPsi.C:690
 drawBalanceFunctionPsi.C:691
 drawBalanceFunctionPsi.C:692
 drawBalanceFunctionPsi.C:693
 drawBalanceFunctionPsi.C:694
 drawBalanceFunctionPsi.C:695
 drawBalanceFunctionPsi.C:696
 drawBalanceFunctionPsi.C:697
 drawBalanceFunctionPsi.C:698
 drawBalanceFunctionPsi.C:699
 drawBalanceFunctionPsi.C:700
 drawBalanceFunctionPsi.C:701
 drawBalanceFunctionPsi.C:702
 drawBalanceFunctionPsi.C:703
 drawBalanceFunctionPsi.C:704
 drawBalanceFunctionPsi.C:705
 drawBalanceFunctionPsi.C:706
 drawBalanceFunctionPsi.C:707
 drawBalanceFunctionPsi.C:708
 drawBalanceFunctionPsi.C:709
 drawBalanceFunctionPsi.C:710
 drawBalanceFunctionPsi.C:711
 drawBalanceFunctionPsi.C:712
 drawBalanceFunctionPsi.C:713
 drawBalanceFunctionPsi.C:714
 drawBalanceFunctionPsi.C:715
 drawBalanceFunctionPsi.C:716
 drawBalanceFunctionPsi.C:717
 drawBalanceFunctionPsi.C:718
 drawBalanceFunctionPsi.C:719
 drawBalanceFunctionPsi.C:720
 drawBalanceFunctionPsi.C:721
 drawBalanceFunctionPsi.C:722
 drawBalanceFunctionPsi.C:723
 drawBalanceFunctionPsi.C:724
 drawBalanceFunctionPsi.C:725
 drawBalanceFunctionPsi.C:726
 drawBalanceFunctionPsi.C:727
 drawBalanceFunctionPsi.C:728
 drawBalanceFunctionPsi.C:729
 drawBalanceFunctionPsi.C:730
 drawBalanceFunctionPsi.C:731
 drawBalanceFunctionPsi.C:732
 drawBalanceFunctionPsi.C:733
 drawBalanceFunctionPsi.C:734
 drawBalanceFunctionPsi.C:735
 drawBalanceFunctionPsi.C:736
 drawBalanceFunctionPsi.C:737
 drawBalanceFunctionPsi.C:738
 drawBalanceFunctionPsi.C:739
 drawBalanceFunctionPsi.C:740
 drawBalanceFunctionPsi.C:741
 drawBalanceFunctionPsi.C:742
 drawBalanceFunctionPsi.C:743
 drawBalanceFunctionPsi.C:744
 drawBalanceFunctionPsi.C:745
 drawBalanceFunctionPsi.C:746
 drawBalanceFunctionPsi.C:747
 drawBalanceFunctionPsi.C:748
 drawBalanceFunctionPsi.C:749
 drawBalanceFunctionPsi.C:750
 drawBalanceFunctionPsi.C:751
 drawBalanceFunctionPsi.C:752
 drawBalanceFunctionPsi.C:753
 drawBalanceFunctionPsi.C:754
 drawBalanceFunctionPsi.C:755
 drawBalanceFunctionPsi.C:756
 drawBalanceFunctionPsi.C:757
 drawBalanceFunctionPsi.C:758
 drawBalanceFunctionPsi.C:759
 drawBalanceFunctionPsi.C:760
 drawBalanceFunctionPsi.C:761
 drawBalanceFunctionPsi.C:762
 drawBalanceFunctionPsi.C:763
 drawBalanceFunctionPsi.C:764
 drawBalanceFunctionPsi.C:765
 drawBalanceFunctionPsi.C:766
 drawBalanceFunctionPsi.C:767
 drawBalanceFunctionPsi.C:768
 drawBalanceFunctionPsi.C:769
 drawBalanceFunctionPsi.C:770
 drawBalanceFunctionPsi.C:771
 drawBalanceFunctionPsi.C:772
 drawBalanceFunctionPsi.C:773
 drawBalanceFunctionPsi.C:774
 drawBalanceFunctionPsi.C:775
 drawBalanceFunctionPsi.C:776
 drawBalanceFunctionPsi.C:777
 drawBalanceFunctionPsi.C:778
 drawBalanceFunctionPsi.C:779
 drawBalanceFunctionPsi.C:780
 drawBalanceFunctionPsi.C:781
 drawBalanceFunctionPsi.C:782
 drawBalanceFunctionPsi.C:783
 drawBalanceFunctionPsi.C:784
 drawBalanceFunctionPsi.C:785
 drawBalanceFunctionPsi.C:786
 drawBalanceFunctionPsi.C:787
 drawBalanceFunctionPsi.C:788
 drawBalanceFunctionPsi.C:789
 drawBalanceFunctionPsi.C:790
 drawBalanceFunctionPsi.C:791
 drawBalanceFunctionPsi.C:792
 drawBalanceFunctionPsi.C:793
 drawBalanceFunctionPsi.C:794
 drawBalanceFunctionPsi.C:795
 drawBalanceFunctionPsi.C:796
 drawBalanceFunctionPsi.C:797
 drawBalanceFunctionPsi.C:798
 drawBalanceFunctionPsi.C:799
 drawBalanceFunctionPsi.C:800
 drawBalanceFunctionPsi.C:801
 drawBalanceFunctionPsi.C:802
 drawBalanceFunctionPsi.C:803
 drawBalanceFunctionPsi.C:804
 drawBalanceFunctionPsi.C:805
 drawBalanceFunctionPsi.C:806
 drawBalanceFunctionPsi.C:807
 drawBalanceFunctionPsi.C:808
 drawBalanceFunctionPsi.C:809
 drawBalanceFunctionPsi.C:810
 drawBalanceFunctionPsi.C:811
 drawBalanceFunctionPsi.C:812
 drawBalanceFunctionPsi.C:813
 drawBalanceFunctionPsi.C:814
 drawBalanceFunctionPsi.C:815
 drawBalanceFunctionPsi.C:816
 drawBalanceFunctionPsi.C:817
 drawBalanceFunctionPsi.C:818
 drawBalanceFunctionPsi.C:819
 drawBalanceFunctionPsi.C:820
 drawBalanceFunctionPsi.C:821
 drawBalanceFunctionPsi.C:822
 drawBalanceFunctionPsi.C:823
 drawBalanceFunctionPsi.C:824
 drawBalanceFunctionPsi.C:825
 drawBalanceFunctionPsi.C:826
 drawBalanceFunctionPsi.C:827
 drawBalanceFunctionPsi.C:828
 drawBalanceFunctionPsi.C:829
 drawBalanceFunctionPsi.C:830
 drawBalanceFunctionPsi.C:831
 drawBalanceFunctionPsi.C:832
 drawBalanceFunctionPsi.C:833
 drawBalanceFunctionPsi.C:834
 drawBalanceFunctionPsi.C:835
 drawBalanceFunctionPsi.C:836
 drawBalanceFunctionPsi.C:837
 drawBalanceFunctionPsi.C:838
 drawBalanceFunctionPsi.C:839
 drawBalanceFunctionPsi.C:840
 drawBalanceFunctionPsi.C:841
 drawBalanceFunctionPsi.C:842
 drawBalanceFunctionPsi.C:843
 drawBalanceFunctionPsi.C:844
 drawBalanceFunctionPsi.C:845
 drawBalanceFunctionPsi.C:846
 drawBalanceFunctionPsi.C:847
 drawBalanceFunctionPsi.C:848
 drawBalanceFunctionPsi.C:849
 drawBalanceFunctionPsi.C:850
 drawBalanceFunctionPsi.C:851
 drawBalanceFunctionPsi.C:852
 drawBalanceFunctionPsi.C:853
 drawBalanceFunctionPsi.C:854
 drawBalanceFunctionPsi.C:855
 drawBalanceFunctionPsi.C:856
 drawBalanceFunctionPsi.C:857
 drawBalanceFunctionPsi.C:858
 drawBalanceFunctionPsi.C:859
 drawBalanceFunctionPsi.C:860
 drawBalanceFunctionPsi.C:861
 drawBalanceFunctionPsi.C:862
 drawBalanceFunctionPsi.C:863
 drawBalanceFunctionPsi.C:864
 drawBalanceFunctionPsi.C:865
 drawBalanceFunctionPsi.C:866
 drawBalanceFunctionPsi.C:867
 drawBalanceFunctionPsi.C:868
 drawBalanceFunctionPsi.C:869
 drawBalanceFunctionPsi.C:870
 drawBalanceFunctionPsi.C:871
 drawBalanceFunctionPsi.C:872
 drawBalanceFunctionPsi.C:873
 drawBalanceFunctionPsi.C:874
 drawBalanceFunctionPsi.C:875
 drawBalanceFunctionPsi.C:876
 drawBalanceFunctionPsi.C:877
 drawBalanceFunctionPsi.C:878
 drawBalanceFunctionPsi.C:879
 drawBalanceFunctionPsi.C:880
 drawBalanceFunctionPsi.C:881
 drawBalanceFunctionPsi.C:882
 drawBalanceFunctionPsi.C:883
 drawBalanceFunctionPsi.C:884
 drawBalanceFunctionPsi.C:885
 drawBalanceFunctionPsi.C:886
 drawBalanceFunctionPsi.C:887
 drawBalanceFunctionPsi.C:888
 drawBalanceFunctionPsi.C:889
 drawBalanceFunctionPsi.C:890
 drawBalanceFunctionPsi.C:891
 drawBalanceFunctionPsi.C:892
 drawBalanceFunctionPsi.C:893
 drawBalanceFunctionPsi.C:894
 drawBalanceFunctionPsi.C:895
 drawBalanceFunctionPsi.C:896
 drawBalanceFunctionPsi.C:897
 drawBalanceFunctionPsi.C:898
 drawBalanceFunctionPsi.C:899
 drawBalanceFunctionPsi.C:900
 drawBalanceFunctionPsi.C:901
 drawBalanceFunctionPsi.C:902
 drawBalanceFunctionPsi.C:903
 drawBalanceFunctionPsi.C:904
 drawBalanceFunctionPsi.C:905
 drawBalanceFunctionPsi.C:906
 drawBalanceFunctionPsi.C:907
 drawBalanceFunctionPsi.C:908
 drawBalanceFunctionPsi.C:909
 drawBalanceFunctionPsi.C:910
 drawBalanceFunctionPsi.C:911
 drawBalanceFunctionPsi.C:912
 drawBalanceFunctionPsi.C:913
 drawBalanceFunctionPsi.C:914
 drawBalanceFunctionPsi.C:915
 drawBalanceFunctionPsi.C:916
 drawBalanceFunctionPsi.C:917
 drawBalanceFunctionPsi.C:918
 drawBalanceFunctionPsi.C:919
 drawBalanceFunctionPsi.C:920
 drawBalanceFunctionPsi.C:921
 drawBalanceFunctionPsi.C:922
 drawBalanceFunctionPsi.C:923
 drawBalanceFunctionPsi.C:924
 drawBalanceFunctionPsi.C:925
 drawBalanceFunctionPsi.C:926
 drawBalanceFunctionPsi.C:927
 drawBalanceFunctionPsi.C:928
 drawBalanceFunctionPsi.C:929
 drawBalanceFunctionPsi.C:930
 drawBalanceFunctionPsi.C:931
 drawBalanceFunctionPsi.C:932
 drawBalanceFunctionPsi.C:933
 drawBalanceFunctionPsi.C:934
 drawBalanceFunctionPsi.C:935
 drawBalanceFunctionPsi.C:936
 drawBalanceFunctionPsi.C:937
 drawBalanceFunctionPsi.C:938
 drawBalanceFunctionPsi.C:939
 drawBalanceFunctionPsi.C:940
 drawBalanceFunctionPsi.C:941
 drawBalanceFunctionPsi.C:942
 drawBalanceFunctionPsi.C:943
 drawBalanceFunctionPsi.C:944
 drawBalanceFunctionPsi.C:945
 drawBalanceFunctionPsi.C:946
 drawBalanceFunctionPsi.C:947
 drawBalanceFunctionPsi.C:948
 drawBalanceFunctionPsi.C:949
 drawBalanceFunctionPsi.C:950
 drawBalanceFunctionPsi.C:951
 drawBalanceFunctionPsi.C:952
 drawBalanceFunctionPsi.C:953
 drawBalanceFunctionPsi.C:954
 drawBalanceFunctionPsi.C:955
 drawBalanceFunctionPsi.C:956
 drawBalanceFunctionPsi.C:957
 drawBalanceFunctionPsi.C:958
 drawBalanceFunctionPsi.C:959
 drawBalanceFunctionPsi.C:960
 drawBalanceFunctionPsi.C:961
 drawBalanceFunctionPsi.C:962
 drawBalanceFunctionPsi.C:963
 drawBalanceFunctionPsi.C:964
 drawBalanceFunctionPsi.C:965
 drawBalanceFunctionPsi.C:966
 drawBalanceFunctionPsi.C:967
 drawBalanceFunctionPsi.C:968
 drawBalanceFunctionPsi.C:969
 drawBalanceFunctionPsi.C:970
 drawBalanceFunctionPsi.C:971
 drawBalanceFunctionPsi.C:972
 drawBalanceFunctionPsi.C:973
 drawBalanceFunctionPsi.C:974
 drawBalanceFunctionPsi.C:975
 drawBalanceFunctionPsi.C:976
 drawBalanceFunctionPsi.C:977
 drawBalanceFunctionPsi.C:978
 drawBalanceFunctionPsi.C:979
 drawBalanceFunctionPsi.C:980
 drawBalanceFunctionPsi.C:981
 drawBalanceFunctionPsi.C:982
 drawBalanceFunctionPsi.C:983
 drawBalanceFunctionPsi.C:984
 drawBalanceFunctionPsi.C:985
 drawBalanceFunctionPsi.C:986
 drawBalanceFunctionPsi.C:987
 drawBalanceFunctionPsi.C:988
 drawBalanceFunctionPsi.C:989
 drawBalanceFunctionPsi.C:990
 drawBalanceFunctionPsi.C:991
 drawBalanceFunctionPsi.C:992
 drawBalanceFunctionPsi.C:993
 drawBalanceFunctionPsi.C:994
 drawBalanceFunctionPsi.C:995
 drawBalanceFunctionPsi.C:996
 drawBalanceFunctionPsi.C:997
 drawBalanceFunctionPsi.C:998
 drawBalanceFunctionPsi.C:999
 drawBalanceFunctionPsi.C:1000
 drawBalanceFunctionPsi.C:1001
 drawBalanceFunctionPsi.C:1002
 drawBalanceFunctionPsi.C:1003
 drawBalanceFunctionPsi.C:1004
 drawBalanceFunctionPsi.C:1005
 drawBalanceFunctionPsi.C:1006
 drawBalanceFunctionPsi.C:1007
 drawBalanceFunctionPsi.C:1008
 drawBalanceFunctionPsi.C:1009
 drawBalanceFunctionPsi.C:1010
 drawBalanceFunctionPsi.C:1011
 drawBalanceFunctionPsi.C:1012
 drawBalanceFunctionPsi.C:1013
 drawBalanceFunctionPsi.C:1014
 drawBalanceFunctionPsi.C:1015
 drawBalanceFunctionPsi.C:1016
 drawBalanceFunctionPsi.C:1017
 drawBalanceFunctionPsi.C:1018
 drawBalanceFunctionPsi.C:1019
 drawBalanceFunctionPsi.C:1020
 drawBalanceFunctionPsi.C:1021
 drawBalanceFunctionPsi.C:1022
 drawBalanceFunctionPsi.C:1023
 drawBalanceFunctionPsi.C:1024
 drawBalanceFunctionPsi.C:1025
 drawBalanceFunctionPsi.C:1026
 drawBalanceFunctionPsi.C:1027
 drawBalanceFunctionPsi.C:1028
 drawBalanceFunctionPsi.C:1029
 drawBalanceFunctionPsi.C:1030
 drawBalanceFunctionPsi.C:1031
 drawBalanceFunctionPsi.C:1032
 drawBalanceFunctionPsi.C:1033
 drawBalanceFunctionPsi.C:1034
 drawBalanceFunctionPsi.C:1035
 drawBalanceFunctionPsi.C:1036
 drawBalanceFunctionPsi.C:1037
 drawBalanceFunctionPsi.C:1038
 drawBalanceFunctionPsi.C:1039
 drawBalanceFunctionPsi.C:1040
 drawBalanceFunctionPsi.C:1041
 drawBalanceFunctionPsi.C:1042
 drawBalanceFunctionPsi.C:1043
 drawBalanceFunctionPsi.C:1044
 drawBalanceFunctionPsi.C:1045
 drawBalanceFunctionPsi.C:1046
 drawBalanceFunctionPsi.C:1047
 drawBalanceFunctionPsi.C:1048
 drawBalanceFunctionPsi.C:1049
 drawBalanceFunctionPsi.C:1050
 drawBalanceFunctionPsi.C:1051
 drawBalanceFunctionPsi.C:1052
 drawBalanceFunctionPsi.C:1053
 drawBalanceFunctionPsi.C:1054
 drawBalanceFunctionPsi.C:1055
 drawBalanceFunctionPsi.C:1056
 drawBalanceFunctionPsi.C:1057
 drawBalanceFunctionPsi.C:1058
 drawBalanceFunctionPsi.C:1059
 drawBalanceFunctionPsi.C:1060
 drawBalanceFunctionPsi.C:1061
 drawBalanceFunctionPsi.C:1062
 drawBalanceFunctionPsi.C:1063
 drawBalanceFunctionPsi.C:1064
 drawBalanceFunctionPsi.C:1065
 drawBalanceFunctionPsi.C:1066
 drawBalanceFunctionPsi.C:1067
 drawBalanceFunctionPsi.C:1068
 drawBalanceFunctionPsi.C:1069
 drawBalanceFunctionPsi.C:1070
 drawBalanceFunctionPsi.C:1071
 drawBalanceFunctionPsi.C:1072
 drawBalanceFunctionPsi.C:1073
 drawBalanceFunctionPsi.C:1074
 drawBalanceFunctionPsi.C:1075
 drawBalanceFunctionPsi.C:1076
 drawBalanceFunctionPsi.C:1077
 drawBalanceFunctionPsi.C:1078
 drawBalanceFunctionPsi.C:1079
 drawBalanceFunctionPsi.C:1080
 drawBalanceFunctionPsi.C:1081
 drawBalanceFunctionPsi.C:1082
 drawBalanceFunctionPsi.C:1083
 drawBalanceFunctionPsi.C:1084
 drawBalanceFunctionPsi.C:1085
 drawBalanceFunctionPsi.C:1086
 drawBalanceFunctionPsi.C:1087
 drawBalanceFunctionPsi.C:1088
 drawBalanceFunctionPsi.C:1089
 drawBalanceFunctionPsi.C:1090
 drawBalanceFunctionPsi.C:1091
 drawBalanceFunctionPsi.C:1092
 drawBalanceFunctionPsi.C:1093
 drawBalanceFunctionPsi.C:1094
 drawBalanceFunctionPsi.C:1095
 drawBalanceFunctionPsi.C:1096
 drawBalanceFunctionPsi.C:1097
 drawBalanceFunctionPsi.C:1098
 drawBalanceFunctionPsi.C:1099
 drawBalanceFunctionPsi.C:1100
 drawBalanceFunctionPsi.C:1101
 drawBalanceFunctionPsi.C:1102
 drawBalanceFunctionPsi.C:1103
 drawBalanceFunctionPsi.C:1104
 drawBalanceFunctionPsi.C:1105
 drawBalanceFunctionPsi.C:1106
 drawBalanceFunctionPsi.C:1107
 drawBalanceFunctionPsi.C:1108
 drawBalanceFunctionPsi.C:1109
 drawBalanceFunctionPsi.C:1110
 drawBalanceFunctionPsi.C:1111
 drawBalanceFunctionPsi.C:1112
 drawBalanceFunctionPsi.C:1113
 drawBalanceFunctionPsi.C:1114
 drawBalanceFunctionPsi.C:1115
 drawBalanceFunctionPsi.C:1116
 drawBalanceFunctionPsi.C:1117
 drawBalanceFunctionPsi.C:1118
 drawBalanceFunctionPsi.C:1119
 drawBalanceFunctionPsi.C:1120
 drawBalanceFunctionPsi.C:1121
 drawBalanceFunctionPsi.C:1122
 drawBalanceFunctionPsi.C:1123
 drawBalanceFunctionPsi.C:1124
 drawBalanceFunctionPsi.C:1125
 drawBalanceFunctionPsi.C:1126
 drawBalanceFunctionPsi.C:1127
 drawBalanceFunctionPsi.C:1128
 drawBalanceFunctionPsi.C:1129
 drawBalanceFunctionPsi.C:1130
 drawBalanceFunctionPsi.C:1131
 drawBalanceFunctionPsi.C:1132
 drawBalanceFunctionPsi.C:1133
 drawBalanceFunctionPsi.C:1134
 drawBalanceFunctionPsi.C:1135
 drawBalanceFunctionPsi.C:1136
 drawBalanceFunctionPsi.C:1137
 drawBalanceFunctionPsi.C:1138
 drawBalanceFunctionPsi.C:1139
 drawBalanceFunctionPsi.C:1140
 drawBalanceFunctionPsi.C:1141