ROOT logo
const TString gBFAnalysisType[7] = {"y","eta","qlong","qout","qside","qinv","phi"};

const Int_t nrOfCentralities = 9;
const Double_t centralityArray[nrOfCentralities+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.};  // in centrality percentile (0-5,5-10,10-20,20-30,...,70-80)
//const Double_t centralityArray[nrOfCentralities+1] = {0.,1.,2.,3.,4.,6.,10.,20.,30.,80.};  // in centrality percentile (0-5,5-10,10-20,20-30,...,70-80)
const Double_t cent[nrOfCentralities]  = {382.8,329.7,260.5,186.4,128.9,85.,52.8,30.,15.8};   // hard coded at the moment for centrality percentiles 
const Double_t centE[nrOfCentralities] = {3.1,4.6,4.4,3.9,3.3,2.6,2.0,1.3,0.6};               // (0-5,5-10,10-20,20-30,...,70-80)

void readBalanceFunction(Bool_t bHistos = kFALSE, TString inFile = "AnalysisResults.root",Int_t fStartBinBFWidth = 3, Int_t fRebin = 2,Int_t fStartBinBFWidthPhi = 2, Int_t fRebinPhi = 2,TString centEst = "V0M",Double_t etaWindow = -1, Int_t etaBins = -1, Bool_t correctWithEfficiency = kFALSE, Bool_t correctWithAcceptanceOnly = kFALSE,  Bool_t correctWithMixed = kFALSE) {
  // Macro to read the output of the BF analysis:  MW: CHANGE THIS!!!!
  //i) Prints and draws the final BF output
  //ii) Plots the QA part of the analysis
  //iii) store BF in output file
  //Author: Panos.Christakoglou@cern.ch, m.weber@cern.ch
  //Loading the needed libraries
  gSystem->Load("libProofPlayer.so");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libEventMixing.so");
  gSystem->Load("libPWGCFebye.so");

  //Draw BF       
  drawBF(bHistos,inFile, fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,centEst, "",  etaWindow,etaBins, correctWithEfficiency,correctWithAcceptanceOnly,correctWithMixed);    
  

  //Merge the output
  //mergeOutput("/alice/cern.ch/user/p/pchrist/Balance/pp/7TeV/LHC10b/output/");
}

//___________________________________________________________//
void drawBF(Bool_t bHistos = kFALSE, TString inFile = "AnalysisResults.root", Int_t fStartBinBFWidth = 1, Int_t fRebin = 1, Int_t fStartBinBFWidthPhi = 1, Int_t fRebinPhi = 1, TString centEst = "V0M",TString extraString = "", Double_t etaWindow = -1, Int_t etaBins = -1, Bool_t correctWithEfficiency = kFALSE, Bool_t correctWithAcceptanceOnly = kFALSE,  Bool_t correctWithMixed = kFALSE) {
  //Function to draw the BF objects and write them into the output file

  Int_t maximumCanvases = 13;
  Int_t iCanvas         = 0;
  Int_t iList           = -1;
  TCanvas *cQACuts[13][10];
  TCanvas *cQA[13][10];
  TCanvas *cQAV0M = new TCanvas("cQAV0M","V0M multiplicities");
  cQAV0M->Divide(4,3);
  TCanvas *cQARef = new TCanvas("cQARef","reference track multiplicities");
  cQARef->Divide(4,3);
  TCanvas *cBF[13][10];
  TCanvas *cBFS[13][10];

  // only one correction method allowed (correctWithEfficiency/Acceptance OR divide by event mixing)
  if((correctWithEfficiency||correctWithAcceptanceOnly) && correctWithMixed){
    Printf("only one correction method allowed (correctWithEfficiency/Acceptance OR divide by event mixing)");
    return;
  }

  // if divide by event mixing, first get all files for all centralities
  // here the event mixing file is more or less hard coded (has to be changed if somebody else wants to use this)
  TH1D *hMixedEta[nrOfCentralities][4];
  TH1D *hMixedPhi[nrOfCentralities][4];
  
  if(correctWithMixed){
    TFile* fMixed[nrOfCentralities];
    
    for (Int_t iCent = 0; iCent < nrOfCentralities ; iCent++){
      fMixed[iCent] = TFile::Open(Form("/Users/physics/ALICE/balance/BF_EM_new/gridOut/Centrality%.0f_%.0f_oldMethod/Histograms_WMstart%d_rebin%d_WMstartPhi%d_rebinPhi%d_EventMixing_%.0f-%.0f_AnalysisResults.root",centralityArray[iCent],centralityArray[iCent+1],fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,centralityArray[iCent],centralityArray[iCent+1]),"READ");

      if(!fMixed[iCent]){
	Printf("Event Mixing file not available!");
	return;
      }

      // at the time of production the event mixing had no centrality info (all in most central bin, centarlity is selected before)
      hMixedEta[iCent][0] =  (TH1D*)fMixed[iCent]->Get(Form("hPN_eta_0"));
      hMixedPhi[iCent][0] =  (TH1D*)fMixed[iCent]->Get(Form("hPN_phi_0"));
      hMixedEta[iCent][1] =  (TH1D*)((TH1D*)fMixed[iCent]->Get(Form("hPN_eta_0")))->Clone("hNP_eta_0");
      hMixedPhi[iCent][1] =  (TH1D*)((TH1D*)fMixed[iCent]->Get(Form("hPN_phi_0")))->Clone("hNP_phi_0");
      hMixedEta[iCent][2] =  (TH1D*)fMixed[iCent]->Get(Form("hNN_eta_0"));
      hMixedPhi[iCent][2] =  (TH1D*)fMixed[iCent]->Get(Form("hNN_phi_0"));
      hMixedEta[iCent][3] =  (TH1D*)fMixed[iCent]->Get(Form("hPP_eta_0"));
      hMixedPhi[iCent][3] =  (TH1D*)fMixed[iCent]->Get(Form("hPP_phi_0"));

      // because NP = PN here
      hMixedEta[iCent][0]->Scale(0.5);
      hMixedPhi[iCent][0]->Scale(0.5);
      hMixedEta[iCent][1]->Scale(0.5);
      hMixedPhi[iCent][1]->Scale(0.5);

      // normalize the distributions to 1:
      // - in the integral for dphi (for averaging over sector structure)
      // - in the maximum for deta   
      hMixedPhi[iCent][0]->Scale(1./(Double_t)hMixedPhi[iCent][0]->Integral(hMixedPhi[iCent][0]->FindBin(0),hMixedPhi[iCent][0]->FindBin(180))*(Double_t)(hMixedPhi[iCent][0]->FindBin(180)-hMixedPhi[iCent][0]->FindBin(0)+1));
      hMixedPhi[iCent][1]->Scale(1./(Double_t)hMixedPhi[iCent][1]->Integral(hMixedPhi[iCent][1]->FindBin(0),hMixedPhi[iCent][1]->FindBin(180))*(Double_t)(hMixedPhi[iCent][1]->FindBin(180)-hMixedPhi[iCent][1]->FindBin(0)+1));
      hMixedPhi[iCent][2]->Scale(1./(Double_t)hMixedPhi[iCent][2]->Integral(hMixedPhi[iCent][2]->FindBin(0),hMixedPhi[iCent][2]->FindBin(180))*(Double_t)(hMixedPhi[iCent][2]->FindBin(180)-hMixedPhi[iCent][2]->FindBin(0)+1));
      hMixedPhi[iCent][3]->Scale(1./(Double_t)hMixedPhi[iCent][3]->Integral(hMixedPhi[iCent][3]->FindBin(0),hMixedPhi[iCent][3]->FindBin(180))*(Double_t)(hMixedPhi[iCent][3]->FindBin(180)-hMixedPhi[iCent][3]->FindBin(0)+1));
      
      	hMixedEta[iCent][0]->Scale(0.8 * 20. /(Double_t)hMixedEta[iCent][0]->Integral(hMixedEta[iCent][0]->FindBin(0),hMixedEta[iCent][0]->FindBin(1.6)));
	hMixedEta[iCent][1]->Scale(0.8 * 20. /(Double_t)hMixedEta[iCent][1]->Integral(hMixedEta[iCent][1]->FindBin(0),hMixedEta[iCent][1]->FindBin(1.6)));
	hMixedEta[iCent][2]->Scale(0.8 * 20. /(Double_t)hMixedEta[iCent][2]->Integral(hMixedEta[iCent][2]->FindBin(0),hMixedEta[iCent][2]->FindBin(1.6)));
	hMixedEta[iCent][3]->Scale(0.8 * 20. /(Double_t)hMixedEta[iCent][3]->Integral(hMixedEta[iCent][3]->FindBin(0),hMixedEta[iCent][3]->FindBin(1.6)));
    
      
    }
  }

  // get the file
  TFile *f = TFile::Open(inFile.Data());
  if(!f) {
    Printf("File not found!!!");
    break;
  }

  // get the BF output directory
  TDirectoryFile *dir = dynamic_cast<TDirectoryFile *>(f->Get("PWGCFEbyE.outputBalanceFunctionAnalysis"));
  if(!dir) {
    Printf("Output directory not found!!!");
    break;
  }

  // loop over all lists and plot the BF and QA
  TList *list = NULL;
  TString listName;
  TIter nextkey( dir->GetListOfKeys() );
  TKey *key;

  AliBalance *bf[13][7];
  AliBalance *bfs[13][7];
  TH1D *gbf[13][10][7];
  TH1D *gbfs[13][10][7];

  for(Int_t i = 0; i < 13; i++){
    for(Int_t j = 0; j < 10; j++){
      for(Int_t k = 0; k < 7; k++){
	gbf[i][j][k]  = NULL;
	gbfs[i][j][k] = NULL;
      }
    }
  }

  TH2D *fHistP[13][7]; //N+
  TH2D *fHistN[13][7]; //N-
  TH2D *fHistPN[13][7]; //N+-
  TH2D *fHistNP[13][7]; //N-+
  TH2D *fHistPP[13][7]; //N++
  TH2D *fHistNN[13][7]; //N--

  TH2D *fHistPS[13][7]; //N+
  TH2D *fHistNS[13][7]; //N-
  TH2D *fHistPNS[13][7]; //N+-
  TH2D *fHistNPS[13][7]; //N-+
  TH2D *fHistPPS[13][7]; //N++
  TH2D *fHistNNS[13][7]; //N--

  Double_t WM[13][10];     // weighted mean for eta (recalculated from fStartBin)
  Double_t WME[13][10];    // error
  Double_t WMS[13][10];     // weighted mean for eta (recalculated from fStartBin) (shuffled)
  Double_t WMSE[13][10];    // error (shuffled)

  Double_t WMP[13][10];     // weighted mean for phi (recalculated from fStartBinPhi)
  Double_t WMPE[13][10];    // error
  Double_t WMPS[13][10];     // weighted mean for phi (recalculated from fStartBin) (shuffled)
  Double_t WMPSE[13][10];    // error (shuffled)

  Double_t integ[13][10];     // integral for eta (calculated from bin 1)
  Double_t integE[13][10];    // error
  Double_t integS[13][10];     // integral for eta (calculated from bin 1) (shuffled)
  Double_t integSE[13][10];    // error (shuffled)

  Double_t integP[13][10];     // integral for phi (calculated from bin 1)
  Double_t integPE[13][10];    // error
  Double_t integPS[13][10];     // integral for phi (calculated from bin 1) (shuffled)
  Double_t integPSE[13][10];    // error (shuffled)


  while ( (key = (TKey*)nextkey())) {

    list = (TList*)key->ReadObj();
    listName = TString(list->GetName());

    //cout<<"Processing list "<<listName<<endl;

 
    // ----------------------------------------------------
    // plot QA histograms
    if(listName.Contains("QA")){   

      if(iList<13) iList++;
      else{
	cerr<<"TOO MANY LISTS!!!"<<endl;
	return;
      }  
      
      cQA[iList][iCanvas] = new TCanvas(listName,listName);
      cQA[iList][iCanvas]->Divide(4,3);

     cQA[iList][iCanvas]->cd(1);
      TH1F* histEventStats = (TH1F*)list->FindObject("fHistEventStats");
      if(histEventStats){
	histEventStats->SetFillColor(9);
	histEventStats->Draw();
      }

      cQA[iList][iCanvas]->cd(2);
      TH1F* histTriggerStats = (TH1F*)list->FindObject("fHistTriggerStats");
      if(histTriggerStats){
	histTriggerStats->SetFillColor(9);
	histTriggerStats->Draw();
      }

     cQA[iList][iCanvas]->cd(3);
      TH1F* histTrackStats = (TH1F*)list->FindObject("fHistTrackStats");
      if(histTrackStats){
	histTrackStats->SetFillColor(9);
	histTrackStats->Draw();
      }

      cQA[iList][iCanvas]->cd(4);
      TH1F* histCentStats = (TH1F*)list->FindObject("fHistCentStats");
      if(histCentStats){
	histCentStats->SetFillColor(9);
	histCentStats->Draw("colz");
      }



      cQA[iList][iCanvas]->cd(5);
      TH1F* histVx = (TH1F*)list->FindObject("fHistVx");
      if(histVx){
	histVx->SetFillColor(9);
	histVx->Draw();
      }
      cQA[iList][iCanvas]->cd(6);
      TH1F* histVy = (TH1F*)list->FindObject("fHistVy");
      if(histVy){
	histVy->SetFillColor(9);
	histVy->Draw();
      }
      
      cQA[iList][iCanvas]->cd(7);
      TH1F* histVz = (TH1F*)list->FindObject("fHistVz");
      if(histVz){
	histVz->SetFillColor(9);
	histVz->Draw();
      }

      cQA[iList][iCanvas]->cd(8);
      cQA[iList][iCanvas]->cd(8)->SetLogz();
      TH2F* histDCA = (TH2F*)list->FindObject("fHistDCA");  
      if(histDCA) histDCA->Draw("colz");
      

      cQA[iList][iCanvas]->cd(9);
      cQA[iList][iCanvas]->cd(9)->SetLogz();
      TH2F* histClus = (TH2F*)list->FindObject("fHistClus");
      if(histClus) histClus->Draw("colz");
      
      cQA[iList][iCanvas]->cd(10);
      TH1F* histPt = (TH1F*)list->FindObject("fHistPt");
      if(histPt){
	histPt->SetFillColor(9);
	histPt->Draw();
      }
      
      cQA[iList][iCanvas]->cd(11);
      TH1F* histEta = (TH1F*)list->FindObject("fHistEta");
      if(histEta){
	histEta->SetFillColor(9);
	histEta->Draw();
      }
      
      cQA[iList][iCanvas]->cd(12);
      TH1F* histPhi = (TH1F*)list->FindObject("fHistPhi");
      if(histPhi){
	histPhi->SetFillColor(9);
	histPhi->Draw();
      }

      // centrality estimator QA
      cQAV0M->cd(iCanvas+1);
      cQAV0M->cd(iCanvas+1)->SetLogz();
      TH1F* histV0M = (TH1F*)list->FindObject("fHistV0M");
      if(histV0M){
	histV0M->Draw("colz");
      }

      cQARef->cd(iCanvas+1);
      cQARef->cd(iCanvas+1)->SetLogz();
      TH1F* histRef = (TH1F*)list->FindObject("fHistRefTracks");
      if(histRef){
	histRef->Draw("colz");
      }
    }


    cQACuts[iList][iCanvas] = new TCanvas(Form("%sCuts",listName.Data()),Form("%sCuts",listName.Data()));
    cQACuts[iList][iCanvas]->Divide(2,2);

    cQACuts[iList][iCanvas]->cd(1);
    TH2D* histHBTcuts = (TH2D*)list->FindObject("fHistHBTafter");
    if(histHBTcuts){
      histHBTcuts->DrawCopy("colz");
    }

    cQACuts[iList][iCanvas]->cd(2);
    TH2D* histHBTall = (TH2D*)list->FindObject("fHistHBTbefore");
    if(histHBTall){
      histHBTcuts->Divide(histHBTall);
      histHBTcuts->SetMaximum(1.5);
      histHBTcuts->SetMinimum(0.5);
      histHBTcuts->DrawCopy("colz");
    }

    cQACuts[iList][iCanvas]->cd(3);
    TH2D* histConversioncuts = (TH2D*)list->FindObject("fHistConversionafter");
    if(histConversioncuts){
      histConversioncuts->DrawCopy("colz");
    }

    cQACuts[iList][iCanvas]->cd(4);
    TH2D* histConversionall = (TH2D*)list->FindObject("fHistConversionbefore");
    if(histConversionall){
      histConversioncuts->Divide(histConversionall);
      histConversioncuts->SetMaximum(1.5);
      histConversioncuts->SetMinimum(0.5);
      histConversioncuts->DrawCopy("colz");
    }

    // ----------------------------------------------------

    // ----------------------------------------------------
    // calculate and plot BF 
    if(listName.Contains("BF_")&&listName.Contains(centEst.Data())){

      for(iCanvas = 0; iCanvas < nrOfCentralities; iCanvas++){
	
	cBF[iList][iCanvas] = new TCanvas(Form("cBF_%d_%d",iList,iCanvas),Form("cBF_%d_%d",iList,iCanvas));
	cBF[iList][iCanvas]->Divide(3,3);
	
      }
      

      for(Int_t a = 0; a < 7; a++){

    	//cout<<"ANALYSE "<<gBFAnalysisType[a]<<endl;

    	// create the BF object
    	bf[iList][a]  = new AliBalance();

    	fHistP[iList][a] = (TH2D*)list->FindObject(Form("fHistP%s%s",gBFAnalysisType[a].Data(),centEst.Data()));
    	fHistN[iList][a] = (TH2D*)list->FindObject(Form("fHistN%s%s",gBFAnalysisType[a].Data(),centEst.Data()));
    	fHistPP[iList][a] = (TH2D*)list->FindObject(Form("fHistPP%s%s",gBFAnalysisType[a].Data(),centEst.Data()));
    	fHistPN[iList][a] = (TH2D*)list->FindObject(Form("fHistPN%s%s",gBFAnalysisType[a].Data(),centEst.Data()));
    	fHistNP[iList][a] = (TH2D*)list->FindObject(Form("fHistNP%s%s",gBFAnalysisType[a].Data(),centEst.Data()));
    	fHistNN[iList][a] = (TH2D*)list->FindObject(Form("fHistNN%s%s",gBFAnalysisType[a].Data(),centEst.Data()));

    	// rebin histograms (be careful with divider!)
	if(a==6){
	  fHistP[iList][a]->RebinY(fRebinPhi);
	  fHistN[iList][a]->RebinY(fRebinPhi);
	  fHistPP[iList][a]->RebinY(fRebinPhi);
	  fHistPN[iList][a]->RebinY(fRebinPhi);
	  fHistNP[iList][a]->RebinY(fRebinPhi);
	  fHistNN[iList][a]->RebinY(fRebinPhi);
	}
	else{
	  fHistP[iList][a]->RebinY(fRebin);
	  fHistN[iList][a]->RebinY(fRebin);
	  fHistPP[iList][a]->RebinY(fRebin);
	  fHistPN[iList][a]->RebinY(fRebin);
	  fHistNP[iList][a]->RebinY(fRebin);
	  fHistNN[iList][a]->RebinY(fRebin);
	}

    	fHistP[iList][a]->SetName(Form("%s_%d_%d",fHistP[iList][a]->GetName(),iList,iCanvas));
    	fHistN[iList][a]->SetName(Form("%s_%d_%d",fHistN[iList][a]->GetName(),iList,iCanvas));
    	fHistPP[iList][a]->SetName(Form("%s_%d_%d",fHistPP[iList][a]->GetName(),iList,iCanvas));
    	fHistPN[iList][a]->SetName(Form("%s_%d_%d",fHistPN[iList][a]->GetName(),iList,iCanvas));
    	fHistNP[iList][a]->SetName(Form("%s_%d_%d",fHistNP[iList][a]->GetName(),iList,iCanvas));
    	fHistNN[iList][a]->SetName(Form("%s_%d_%d",fHistNN[iList][a]->GetName(),iList,iCanvas));

    	// set histograms in AliBalance object
    	bf[iList][a]->SetHistNp(a, fHistP[iList][a]);
    	bf[iList][a]->SetHistNn(a, fHistN[iList][a]);
    	bf[iList][a]->SetHistNpp(a, fHistPP[iList][a]);
    	bf[iList][a]->SetHistNpn(a, fHistPN[iList][a]);
    	bf[iList][a]->SetHistNnp(a, fHistNP[iList][a]);
    	bf[iList][a]->SetHistNnn(a, fHistNN[iList][a]);

    	for(iCanvas = 0; iCanvas < nrOfCentralities; iCanvas++){
	  
    	  if(correctWithMixed && a == 1) gbf[iList][iCanvas][a] = bf[iList][a]->GetBalanceFunctionHistogram(a,centralityArray[iCanvas],centralityArray[iCanvas+1],etaWindow,correctWithEfficiency,correctWithAcceptanceOnly,correctWithMixed,hMixedEta[iCanvas]);
	  else if(correctWithMixed && a == 6) gbf[iList][iCanvas][a] = bf[iList][a]->GetBalanceFunctionHistogram(a,centralityArray[iCanvas],centralityArray[iCanvas+1],etaWindow,correctWithEfficiency,correctWithAcceptanceOnly,correctWithMixed,hMixedPhi[iCanvas]);
	  else gbf[iList][iCanvas][a] = bf[iList][a]->GetBalanceFunctionHistogram(a,centralityArray[iCanvas],centralityArray[iCanvas+1],etaWindow,correctWithEfficiency,correctWithAcceptanceOnly);

    	  gbf[iList][iCanvas][a]->SetName(Form("BF_%s_Cent_%.0f_%.0f_%d",gBFAnalysisType[a].Data(),centralityArray[iCanvas],centralityArray[iCanvas+1],iList));

    	  cBF[iList][iCanvas]->cd(a+1);
    	  gbf[iList][iCanvas][a]->SetMarkerStyle(20);

    	  if(!bHistos){
    	    gbf[iList][iCanvas][a]->DrawCopy("AP");
    	    if(a==1){
	      GetWeightedMean(gbf[iList][iCanvas][a],fStartBinBFWidth,etaBins,WM[iList][iCanvas],WME[iList][iCanvas]); // for eta recalculate width 
	      GetIntegral(gbf[iList][iCanvas][a],integ[iList][iCanvas],integE[iList][iCanvas]);
	    }
	    else if(a==6){
	      GetWeightedMean(gbf[iList][iCanvas][a],fStartBinBFWidthPhi,-1,WMP[iList][iCanvas],WMPE[iList][iCanvas]); // for phi calculate width 
	      GetIntegral(gbf[iList][iCanvas][a],integP[iList][iCanvas],integPE[iList][iCanvas]);
	    }
	  }
    	  else{
    	    fHistPN[iList][a]->SetLineColor(2);
	    TH1D *fHistTmp = (TH1D*)fHistPN[iList][a]->ProjectionY(Form("pn%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1]);
	    fHistTmp->Scale(0.5);
	    fHistTmp->DrawCopy();
    	    fHistPP[iList][a]->SetLineColor(1);
    	    fHistPP[iList][a]->ProjectionY(Form("pp%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
    	    fHistNP[iList][a]->SetLineColor(4);
    	    fHistNP[iList][a]->ProjectionY(Form("np%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
    	    fHistNN[iList][a]->SetLineColor(8);
    	    fHistNN[iList][a]->ProjectionY(Form("nn%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
    	  }
    	}
      }

      if(bHistos){
  	for(iCanvas = 0; iCanvas < nrOfCentralities; iCanvas++){
	  cBF[iList][iCanvas]->cd(8);
	  fHistP[iList][1]->ProjectionY(Form("p%d",1),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy();
	  fHistN[iList][1]->ProjectionY(Form("n%d",1),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
	  cBF[iList][iCanvas]->cd(9);
	  fHistP[iList][6]->ProjectionY(Form("p%d",6),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy();
	  fHistN[iList][6]->ProjectionY(Form("n%d",6),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
	}
      }
    }
    // ----------------------------------------------------

    // ----------------------------------------------------
    // calculate and plot BF (shuffled)
    if(listName.Contains("BFShuffled")&&listName.Contains(centEst.Data())&&listName.Contains(extraString.Data())){

      for(iCanvas = 0; iCanvas < nrOfCentralities; iCanvas++){
	
	cBFS[iList][iCanvas] = new TCanvas(Form("Shuffled_%d_%d",iList,iCanvas),Form("Shuffled_%d_%d",iList,iCanvas));
	cBFS[iList][iCanvas]->Divide(3,3);
	
      }

      for(Int_t a = 0; a < 7; a++){

  	// create the BF object
  	bfs[iList][a]  = new AliBalance();

  	fHistPS[iList][a] = (TH2D*)list->FindObject(Form("fHistP%s_shuffle%s",gBFAnalysisType[a].Data(),centEst.Data()));
  	fHistNS[iList][a] = (TH2D*)list->FindObject(Form("fHistN%s_shuffle%s",gBFAnalysisType[a].Data(),centEst.Data()));
  	fHistPPS[iList][a] = (TH2D*)list->FindObject(Form("fHistPP%s_shuffle%s",gBFAnalysisType[a].Data(),centEst.Data()));
  	fHistPNS[iList][a] = (TH2D*)list->FindObject(Form("fHistPN%s_shuffle%s",gBFAnalysisType[a].Data(),centEst.Data()));
  	fHistNPS[iList][a] = (TH2D*)list->FindObject(Form("fHistNP%s_shuffle%s",gBFAnalysisType[a].Data(),centEst.Data()));
  	fHistNNS[iList][a] = (TH2D*)list->FindObject(Form("fHistNN%s_shuffle%s",gBFAnalysisType[a].Data(),centEst.Data()));

  	// rebin histograms (be careful with divider!)
	if(a==6){
	  fHistPS[iList][a]->RebinY(fRebinPhi);
	  fHistNS[iList][a]->RebinY(fRebinPhi);
	  fHistPPS[iList][a]->RebinY(fRebinPhi);
	  fHistPNS[iList][a]->RebinY(fRebinPhi);
	  fHistNPS[iList][a]->RebinY(fRebinPhi);
	  fHistNNS[iList][a]->RebinY(fRebinPhi);
	}
	else{
	  fHistPS[iList][a]->RebinY(fRebin);
	  fHistNS[iList][a]->RebinY(fRebin);
	  fHistPPS[iList][a]->RebinY(fRebin);
	  fHistPNS[iList][a]->RebinY(fRebin);
	  fHistNPS[iList][a]->RebinY(fRebin);
	  fHistNNS[iList][a]->RebinY(fRebin);
	}

  	fHistPS[iList][a]->SetName(Form("%s_%d_%d",fHistPS[iList][a]->GetName(),iList,iCanvas));
  	fHistNS[iList][a]->SetName(Form("%s_%d_%d",fHistNS[iList][a]->GetName(),iList,iCanvas));
  	fHistPPS[iList][a]->SetName(Form("%s_%d_%d",fHistPPS[iList][a]->GetName(),iList,iCanvas));
  	fHistPNS[iList][a]->SetName(Form("%s_%d_%d",fHistPNS[iList][a]->GetName(),iList,iCanvas));
  	fHistNPS[iList][a]->SetName(Form("%s_%d_%d",fHistNPS[iList][a]->GetName(),iList,iCanvas));
  	fHistNNS[iList][a]->SetName(Form("%s_%d_%d",fHistNNS[iList][a]->GetName(),iList,iCanvas));

  	// set histograms in AliBalance object
  	bfs[iList][a]->SetHistNp(a, fHistPS[iList][a]);
  	bfs[iList][a]->SetHistNn(a, fHistNS[iList][a]);
  	bfs[iList][a]->SetHistNpp(a, fHistPPS[iList][a]);
  	bfs[iList][a]->SetHistNpn(a, fHistPNS[iList][a]);
  	bfs[iList][a]->SetHistNnp(a, fHistNPS[iList][a]);
  	bfs[iList][a]->SetHistNnn(a, fHistNNS[iList][a]);

  	for(iCanvas = 0; iCanvas < nrOfCentralities; iCanvas++){
	  
  	  if(correctWithMixed && a == 1) gbfs[iList][iCanvas][a] = bfs[iList][a]->GetBalanceFunctionHistogram(a,centralityArray[iCanvas],centralityArray[iCanvas+1],etaWindow, correctWithEfficiency,correctWithAcceptanceOnly,correctWithMixed,hMixedEta[iCanvas]);
	  else if(correctWithMixed && a == 6) gbfs[iList][iCanvas][a] = bfs[iList][a]->GetBalanceFunctionHistogram(a,centralityArray[iCanvas],centralityArray[iCanvas+1],etaWindow, correctWithEfficiency,correctWithAcceptanceOnly,correctWithMixed,hMixedPhi[iCanvas]);
	  else gbfs[iList][iCanvas][a] = bfs[iList][a]->GetBalanceFunctionHistogram(a,centralityArray[iCanvas],centralityArray[iCanvas+1],etaWindow, correctWithEfficiency,correctWithAcceptanceOnly);
  	  gbfs[iList][iCanvas][a]->SetName(Form("BFS_%s_Cent_%.0f_%.0f_%d",gBFAnalysisType[a].Data(),centralityArray[iCanvas],centralityArray[iCanvas+1],iList));
	  
  	  cBFS[iList][iCanvas]->cd(a+1);
  	  gbfs[iList][iCanvas][a]->SetMarkerStyle(20);
  	  if(!bHistos){
  	    gbfs[iList][iCanvas][a]->DrawCopy("AP");
  	    if(a==1){
	      GetWeightedMean(gbfs[iList][iCanvas][a],fStartBinBFWidth,etaBins,WMS[iList][iCanvas],WMSE[iList][iCanvas]); 
	      GetIntegral(gbfs[iList][iCanvas][a],integS[iList][iCanvas],integSE[iList][iCanvas]); 
	    }
	    else if(a==6){
	      GetWeightedMean(gbfs[iList][iCanvas][a],fStartBinBFWidthPhi,-1,WMPS[iList][iCanvas],WMPSE[iList][iCanvas]); // for phi calculate width 
	      GetIntegral(gbfs[iList][iCanvas][a],integPS[iList][iCanvas],integPSE[iList][iCanvas]); 
	    }
  	  }
  	  else{
  	    fHistPNS[iList][a]->SetLineColor(2);
	    TH1D *fHistTmp = (TH1D*)fHistPN[iList][a]->ProjectionY(Form("pns%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1]);
	    fHistTmp->Scale(0.5);
	    fHistTmp->DrawCopy();
  	    fHistPPS[iList][a]->SetLineColor(1);
  	    fHistPPS[iList][a]->ProjectionY(Form("pps%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
  	    fHistNPS[iList][a]->SetLineColor(4);
  	    fHistNPS[iList][a]->ProjectionY(Form("nps%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
  	    fHistNNS[iList][a]->SetLineColor(8);
  	    fHistNNS[iList][a]->ProjectionY(Form("nns%d",a),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
  	  }
  	}
      }

      if(bHistos){
  	for(iCanvas = 0; iCanvas < nrOfCentralities; iCanvas++){
	  cBFS[iList][iCanvas]->cd(8);
	  fHistPS[iList][1]->ProjectionY(Form("pS%d",1),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy();
	  fHistNS[iList][1]->ProjectionY(Form("nS%d",1),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
	  cBFS[iList][iCanvas]->cd(9);
	  fHistPS[iList][6]->ProjectionY(Form("pS%d",6),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy();
	  fHistNS[iList][6]->ProjectionY(Form("nS%d",6),centralityArray[iCanvas]+1,centralityArray[iCanvas+1])->DrawCopy("same");
	}
      }
    }
    // ----------------------------------------------------
  }
  
  // for BF calculation create also graphs with weighted mean for eta
  if(iCanvas == 0) return; 

  TGraphErrors *gWM[13];
  TGraphErrors *gWMS[13];
  TGraphErrors *gWMP[13];
  TGraphErrors *gWMPS[13];
  TGraphErrors *ginteg[13];
  TGraphErrors *gintegS[13];
  TGraphErrors *gintegP[13];
  TGraphErrors *gintegPS[13];
  for(Int_t i = 0; i < 13; i++){
    gWM[i] = NULL;
    gWMS[i] = NULL;
    ginteg[i] = NULL;
    gintegS[i] = NULL;
    gWMP[i] = NULL;
    gWMPS[i] = NULL;
    gintegP[i] = NULL;
    gintegPS[i] = NULL;
  }


  if(!bHistos){
    for(Int_t i = 0; i < iList+1; i++){
      gWM[i] = new TGraphErrors(iCanvas,cent,WM[i],centE,WME[i]);
      if(iList==0) gWM[i]->SetName("gCentrality");  
      else gWM[i]->SetName(Form("gCentrality_%d",i));
      gWMS[i] = new TGraphErrors(iCanvas,cent,WMS[i],centE,WMSE[i]); 
      if(iList==0) gWMS[i]->SetName("gCentralityS");  
      else gWMS[i]->SetName(Form("gCentralityS_%d",i)); 

      gWMP[i] = new TGraphErrors(iCanvas,cent,WMP[i],centE,WMPE[i]);
      if(iList==0) gWMP[i]->SetName("gCentralityPhi");  
      else gWMP[i]->SetName(Form("gCentralityPhi_%d",i));
      gWMPS[i] = new TGraphErrors(iCanvas,cent,WMPS[i],centE,WMPSE[i]); 
      if(iList==0) gWMPS[i]->SetName("gCentralityPhiS");  
      else gWMPS[i]->SetName(Form("gCentralityPhiS_%d",i)); 

      ginteg[i] = new TGraphErrors(iCanvas,cent,integ[i],centE,integE[i]);
      if(iList==0) ginteg[i]->SetName("gIntegral");  
      else ginteg[i]->SetName(Form("gIntegral_%d",i));
      gintegS[i] = new TGraphErrors(iCanvas,cent,integS[i],centE,integSE[i]); 
      if(iList==0) gintegS[i]->SetName("gIntegralS");  
      else gintegS[i]->SetName(Form("gIntegralS_%d",i)); 

      gintegP[i] = new TGraphErrors(iCanvas,cent,integP[i],centE,integPE[i]);
      if(iList==0) gintegP[i]->SetName("gIntegraPhil");  
      else gintegP[i]->SetName(Form("gIntegralPhi_%d",i));
      gintegPS[i] = new TGraphErrors(iCanvas,cent,integPS[i],centE,integPSE[i]); 
      if(iList==0) gintegPS[i]->SetName("gIntegralPhiS");  
      else gintegPS[i]->SetName(Form("gIntegralPhiS_%d",i)); 
    }
  }

  TFile *fOut = NULL;
  if(etaWindow > 0 || etaBins > -1){
    if(correctWithEfficiency){
      if(correctWithAcceptanceOnly){
	fOut = TFile::Open(Form("Histograms_AccCorrWithAcceptanceOnly_Window%.1f_Bins%d_WMstart%d_rebin%d_WMstartPhi%d_rebinPhi%d_%s", etaWindow, etaBins, fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,inFile.Data()),"RECREATE");
      }
      else{
	fOut = TFile::Open(Form("Histograms_AccCorrWithEfficiency_Window%.1f_Bins%d_WMstart%d_rebin%d_WMstartPhi%d_rebinPhi%d_%s", etaWindow, etaBins, fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,inFile.Data()),"RECREATE");
      }
    }
    else if(correctWithMixed){
      fOut = TFile::Open(Form("Histograms_CorrEM_Window%.1f_Bins%d_WMstart%d_rebin%d_WMstartPhi%d_rebinPhi%d_%s", etaWindow, etaBins, fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,inFile.Data()),"RECREATE");
    }
    else{
      fOut = TFile::Open(Form("Histograms_AccCorr_Window%.1f_Bins%d_WMstart%d_rebin%d_WMstartPhi%d_rebinPhi%d_%s", etaWindow, etaBins, fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,inFile.Data()),"RECREATE");
    }
  }
  else{
    fOut = TFile::Open(Form("Histograms_WMstart%d_rebin%d_WMstartPhi%d_rebinPhi%d_%s", fStartBinBFWidth, fRebin,fStartBinBFWidthPhi, fRebinPhi,inFile.Data()),"RECREATE");
  }
  fOut->cd();
  for(Int_t i = 0; i < iList+1; i++){
    if(gbf[i][0][1]){
    cout<<"PROCESS LIST "<<i<<" NOW!"<<endl;
    for(Int_t a = 0; a < 7; a++){
      if(a==1||a==6){
      cout<<"PROCESS VARIABLE "<<a<<" NOW!"<<endl;
      
      if(fHistPN[i][a]){
	(fHistPN[i][a]->ProjectionY(Form("hPN_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistPP[i][a]->ProjectionY(Form("hPP_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistNP[i][a]->ProjectionY(Form("hNP_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistNN[i][a]->ProjectionY(Form("hNN_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistP[i][a]->ProjectionY(Form("hP_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistN[i][a]->ProjectionY(Form("hN_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
      }

      if(fHistPNS[i][a]){
	(fHistPNS[i][a]->ProjectionY(Form("hPNS_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistPPS[i][a]->ProjectionY(Form("hPPS_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistNPS[i][a]->ProjectionY(Form("hNPS_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistNNS[i][a]->ProjectionY(Form("hNNS_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistPS[i][a]->ProjectionY(Form("hPS_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
	(fHistNS[i][a]->ProjectionY(Form("hNS_%s_%d",gBFAnalysisType[a].Data(),i)))->Write();
      }

      //printout in text format for delta eta      
      for(Int_t j = 0; j < iCanvas; j++){
	cout<<"//=========================Centrality "<<centralityArray[j]<<"-"<<centralityArray[j+1]<<"%==================//"<<endl;
	
	if(gbf[i][j][a]){
	  if(a==1){
	    cout<<"Double_t gALICEDataBalanceFunctionInDeltaEtaCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"[nBinsInDeltaEta] = {";
	    for(Int_t k = 0; k < gbf[i][j][a]->GetNbinsX()-1;k++) cout<<gbf[i][j][a]->GetBinContent(k+1)<<", ";
	    cout<<gbf[i][j][a]->GetBinContent(k+1)<<"};"<<endl;
	    cout<<"Double_t gALICEDataBalanceFunctionInDeltaEtaCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"Error[nBinsInDeltaEta] = {";
	    for(Int_t k = 0; k < gbf[i][j][a]->GetNbinsX()-1;k++) cout<<gbf[i][j][a]->GetBinError(k+1)<<", ";
	    cout<<gbf[i][j][a]->GetBinError(k+1)<<"};"<<endl;
	  } 
	  else if(a==6){
	    cout<<"Double_t gALICEDataBalanceFunctionInDeltaPhiCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"[nBinsInDeltaPhi] = {";
	    for(Int_t k = 0; k < gbf[i][j][a]->GetNbinsX()-1;k++) cout<<gbf[i][j][a]->GetBinContent(k+1)<<", ";
	    cout<<gbf[i][j][a]->GetBinContent(k+1)<<"};"<<endl;
	    cout<<"Double_t gALICEDataBalanceFunctionInDeltaPhiCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"Error[nBinsInDeltaPhi] = {";
	    for(Int_t k = 0; k < gbf[i][j][a]->GetNbinsX()-1;k++) cout<<gbf[i][j][a]->GetBinError(k+1)<<", ";
	    cout<<gbf[i][j][a]->GetBinError(k+1)<<"};"<<endl;
	  } 
	  gbf[i][j][a]->Write();
	  gbf[i][j][a]->Delete();
	}
	if(gbfs[i][j][a]){
	  if(a==1){
	    cout<<"Double_t gALICEShuffledDataBalanceFunctionInDeltaEtaCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"[nBinsInDeltaEta] = {";
	    for(Int_t k = 0; k < gbfs[i][j][a]->GetNbinsX()-1;k++) cout<<gbfs[i][j][a]->GetBinContent(k+1)<<", ";
	    cout<<gbfs[i][j][a]->GetBinContent(k+1)<<"};"<<endl;
	    cout<<"Double_t gALICEShuffledDataBalanceFunctionInDeltaEtaCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"Error[nBinsInDeltaEta] = {";
	    for(Int_t k = 0; k < gbfs[i][j][a]->GetNbinsX()-1;k++) cout<<gbfs[i][j][a]->GetBinError(k+1)<<", ";
	    cout<<gbfs[i][j][a]->GetBinError(k+1)<<"};"<<endl;
	  } 
	  else if(a==6){
	    cout<<"Double_t gALICEShuffledDataBalanceFunctionInDeltaPhiCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"[nBinsInDeltaPhi] = {";
	    for(Int_t k = 0; k < gbfs[i][j][a]->GetNbinsX()-1;k++) cout<<gbfs[i][j][a]->GetBinContent(k+1)<<", ";
	    cout<<gbfs[i][j][a]->GetBinContent(k+1)<<"};"<<endl;
	    cout<<"Double_t gALICEShuffledDataBalanceFunctionInDeltaPhiCentrality"<<centralityArray[j]<<"to"<<centralityArray[j+1]<<"Error[nBinsInDeltaPhi] = {";
	    for(Int_t k = 0; k < gbfs[i][j][a]->GetNbinsX()-1;k++) cout<<gbfs[i][j][a]->GetBinError(k+1)<<", ";
	    cout<<gbfs[i][j][a]->GetBinError(k+1)<<"};"<<endl;
	  } 
	  gbfs[i][j][a]->Write();
	  gbfs[i][j][a]->Delete();
	}
	cout<<"//=========================Centrality "<<centralityArray[j]<<"-"<<centralityArray[j+1]<<"%==================//"<<endl;
	cout<<endl;
      }
      }
    }

    Double_t x,y;

    cout<<"//================================ALICE================================//"<<endl;
    if(gWM[i]){
      cout<<"Double_t gWeightedMeanInEtaAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gWM[i]->GetN()-1;k++){
	gWM[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gWM[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;    
      
      cout<<"Double_t gWeightedMeanInEtaAliceError[nCentralityBins] = {";
      for(Int_t k = 0; k < gWM[i]->GetN()-1;k++){
	cout<<gWM[i]->GetErrorY(k)<<", ";      
      }
      cout<<gWM[i]->GetErrorY(k)<<"};"<<endl;
      gWM[i]->Write();
    } 
    if(gWMS[i]){
      cout<<"Double_t gShuffledWeightedMeanInEtaAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gWMS[i]->GetN()-1;k++){
	gWMS[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gWMS[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;    
      
      cout<<"Double_t gShuffledWeightedMeanInEtaAliceError[nCentralityBins] = {";
      for(Int_t k = 0; k < gWMS[i]->GetN()-1;k++){
	cout<<gWMS[i]->GetErrorY(k)<<", ";      
      }
      cout<<gWMS[i]->GetErrorY(k)<<"};"<<endl;
      cout<<endl;
      gWMS[i]->Write();
    } 

    if(gWMP[i]){
      cout<<"Double_t gWeightedMeanInPhiAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gWMP[i]->GetN()-1;k++){
	gWMP[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gWMP[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;    
      
      cout<<"Double_t gWeightedMeanInPhiAliceError[nCentralityBins] = {";
      for(Int_t k = 0; k < gWMP[i]->GetN()-1;k++){
	cout<<gWMP[i]->GetErrorY(k)<<", ";      
      }
      cout<<gWMP[i]->GetErrorY(k)<<"};"<<endl;
      gWMP[i]->Write();
    } 
    if(gWMPS[i]){
      cout<<"Double_t gShuffledWeightedMeanInPhiAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gWMPS[i]->GetN()-1;k++){
	gWMPS[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gWMPS[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;    
      
      cout<<"Double_t gShuffledWeightedMeanInPhiAliceError[nCentralityBins] = {";
      for(Int_t k = 0; k < gWMPS[i]->GetN()-1;k++){
	cout<<gWMPS[i]->GetErrorY(k)<<", ";      
      }
      cout<<gWMPS[i]->GetErrorY(k)<<"};"<<endl;
      cout<<endl;
      gWMPS[i]->Write();
    }
    if(ginteg[i]){
      cout<<"Double_t gIntegralEtaAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < ginteg[i]->GetN()-1;k++){
	ginteg[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      ginteg[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;
      cout<<endl;

      cout<<"Double_t gIntegralErrorEtaAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < ginteg[i]->GetN()-1;k++){
	cout<<ginteg[i]->GetErrorY(k)<<", ";      
      }
      cout<<ginteg[i]->GetErrorY(k)<<"};"<<endl;
      cout<<endl;

      ginteg[i]->Write();

      cout<<"Double_t gIntegralPhiAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gintegP[i]->GetN()-1;k++){
	gintegP[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gintegP[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;
      cout<<endl;

      cout<<"Double_t gIntegralErrorPhiAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gintegP[i]->GetN()-1;k++){
	cout<<gintegP[i]->GetErrorY(k)<<", ";      
      }
      cout<<gintegP[i]->GetErrorY(k)<<"};"<<endl;
      cout<<endl;

      gintegP[i]->Write();

      cout<<"Double_t gIntegralEtaShuffledAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gintegS[i]->GetN()-1;k++){
	gintegS[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gintegS[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;
      cout<<endl;

      cout<<"Double_t gIntegralErrorEtaShuffledAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gintegS[i]->GetN()-1;k++){
	cout<<gintegS[i]->GetErrorY(k)<<", ";      
      }
      cout<<gintegS[i]->GetErrorY(k)<<"};"<<endl;
      cout<<endl;

      gintegS[i]->Write();

      cout<<"Double_t gIntegralPhiShuffledAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gintegPS[i]->GetN()-1;k++){
	gintegPS[i]->GetPoint(k,x,y);
	cout<<y<<", ";      
      }
      gintegPS[i]->GetPoint(k,x,y);
      cout<<y<<"};"<<endl;
      cout<<endl;

      cout<<"Double_t gIntegralErrorPhiShuffledAlice[nCentralityBins] = {";
      for(Int_t k = 0; k < gintegPS[i]->GetN()-1;k++){
	cout<<gintegPS[i]->GetErrorY(k)<<", ";      
      }
      cout<<gintegPS[i]->GetErrorY(k)<<"};"<<endl;
      cout<<endl;

      gintegPS[i]->Write();

    }
    }
  }
  fOut->Close();
  f->Close();
  gROOT->Reset();
}

//____________________________________________________________________//
void GetWeightedMean(TH1D *gHistBalance, 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!
  
  // cout<<"=================================================="<<endl;
  // cout<<"RECALCULATION OF BF WIDTH (StartBin = "<<fStartBin<<")"<<endl;
  // cout<<"HISTOGRAM has "<<fNumberOfBins<<" bins with bin size of "<<fP2Step<<endl;
  // for(Int_t i = fStartBin; i <= fNumberOfBins; i++) { 
  //   cout<<"B: "<<gHistBalance->GetBinContent(i)<<"\t Error: "<<gHistBalance->GetBinError(i)<<"\t bin: "<<gHistBalance->GetBinCenter(i)<<endl;
  // } 
  // cout<<"=================================================="<<endl;
  for(Int_t i = fStartBin; i <= fNumberOfBins; i++) {
    gSumXi += gHistBalance->GetBinCenter(i);
    gSumBi += gHistBalance->GetBinContent(i);
    gSumBiXi += gHistBalance->GetBinContent(i)*gHistBalance->GetBinCenter(i);
    gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(gHistBalance->GetBinCenter(i),2);
    gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(gHistBalance->GetBinCenter(i),2);
    gSumDeltaBi2 +=  TMath::Power(gHistBalance->GetBinError(i),2);
    gSumXi2DeltaBi2 += TMath::Power(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)*(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<<"Width: "<<delta<<"\t Error: "<<deltaError<<endl;
  // cout<<"New error: "<<deltaErrorNew<<endl;
  // cout<<"Integral: "<<integral<<"\t Error: "<<integralError<<endl;
  // cout<<"=================================================="<<endl;

  WM  = delta;
  WME = deltaError;
}

//____________________________________________________________________//
void GetIntegral(TH1D *gHistBalance, Double_t &integ, Double_t &integE) {

  //always start with 1
  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;
  // for(Int_t i = fStartBin; i <= fNumberOfBins; i++) { 
  //   cout<<"B: "<<gHistBalance->GetBinContent(i)<<"\t Error: "<<gHistBalance->GetBinError(i)<<"\t bin: "<<gHistBalance->GetBinCenter(i)<<endl;
  // } 
  // cout<<"=================================================="<<endl;
  for(Int_t i = fStartBin; i <= fNumberOfBins; i++) {
    gSumXi += gHistBalance->GetBinCenter(i);
    gSumBi += gHistBalance->GetBinContent(i);
    gSumBiXi += gHistBalance->GetBinContent(i)*gHistBalance->GetBinCenter(i);
    gSumBiXi2 += gHistBalance->GetBinContent(i)*TMath::Power(gHistBalance->GetBinCenter(i),2);
    gSumBi2Xi2 += TMath::Power(gHistBalance->GetBinContent(i),2)*TMath::Power(gHistBalance->GetBinCenter(i),2);
    gSumDeltaBi2 +=  TMath::Power(gHistBalance->GetBinError(i),2);
    gSumXi2DeltaBi2 += TMath::Power(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)*(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<<"Width: "<<delta<<"\t Error: "<<deltaError<<endl;
  // cout<<"New error: "<<deltaErrorNew<<endl;
  // cout<<"Integral: "<<integral<<"\t Error: "<<integralError<<endl;
  // cout<<"=================================================="<<endl;

  integ  = integral;
  integE = integralError;
}

//___________________________________________________________//
// NOT USED any more
//___________________________________________________________//
void mergeOutput(const char* outputDir) {
  //Function to merge the output of the sub-jobs
  //Create a BF object
  AliBalance *bf = new AliBalance();

  //connect to AliEn's API services
  TGrid::Connect("alien://"); 

  //Getting the output dir from the env. variable 
  //(JDL field: JDLVariables={"OutputDir"};)
  TGridResult* result = gGrid->Query(outputDir,"*/root_archive.zip","","-l 1000");
  
  Int_t nEntries = result->GetEntries();

  TString alienUrl;
  TDirectoryFile *dirSubJob;

  TString gCutName[4] = {"Total","Offline trigger",
                         "Vertex","Analyzed"};
  TH1F *fHistEventStats = new TH1F("fHistEventStats",
				   "Event statistics;;N_{events}",
				   4,0.5,4.5);
  for(Int_t i = 1; i <= 4; i++)
    fHistEventStats->GetXaxis()->SetBinLabel(i,gCutName[i-1].Data());

  AliESDtrackCuts *bfTrackCuts = new AliESDtrackCuts("bfTrackCuts");
  for(Int_t i = 0; i < nEntries; i++) {
    alienUrl = result->GetKey(i,"turl");
    alienUrl += "#AnalysisResults.root";
    Printf("Opening file: %s",alienUrl.Data());
    TFile *file = TFile::Open(alienUrl.Data());
    dirSubJob = dynamic_cast<TDirectoryFile *>(file->Get("PWGCFEbyE.outputBalanceFunctionAnalysis.root"));

    //merge BF
    AliBalance *bfSubJob = dynamic_cast<AliBalance *>(dirSubJob->Get("AliBalance"));
    //bfSubJob->PrintResults();
    bf->Merge(bfSubJob);
    //delete bfSubJob;

    //merge event stats
    TList *listSubJob = dynamic_cast<TList *>(dirSubJob->Get("listQA"));
    fHistEventStats->Add(dynamic_cast<TH1F *>(listSubJob->At(0)));

    bfTrackCuts = dynamic_cast<AliESDtrackCuts *>(listSubJob->At(1));
    delete listSubJob;
  }

  //Create the output file
  TString outputFile = "AnalysisResults.Merged.root";
  TFile *foutput = TFile::Open(outputFile.Data(),"recreate");
  TDirectoryFile *dirOutput = new TDirectoryFile();
  dirOutput->SetName("PWGCFEbyE.outputBalanceFunctionAnalysis.root");
  //dirOutput->cd();
  dirOutput->Add(bf);
  TList *list = new TList();
  list->SetName("listQA");
  list->Add(fHistEventStats);
  list->Add(bfTrackCuts);
  dirOutput->Add(list);
  dirOutput->Write();
  bf->Write();
  list->Write();
  foutput->Close();

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