ROOT logo
/**************************************************************************
 * Author: Panos Christakoglou.                                           *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id: AliBalancePsi.cxx 54125 2012-01-24 21:07:41Z miweber $ */

//-----------------------------------------------------------------
//           Balance Function class
//   This is the class to deal with the Balance Function wrt Psi analysis
//   Origin: Panos Christakoglou, Nikhef, Panos.Christakoglou@cern.ch
//-----------------------------------------------------------------


//ROOT
#include <Riostream.h>
#include <TCanvas.h>
#include <TMath.h>
#include <TAxis.h>
#include <TH2D.h>
#include <TH3D.h>
#include <TLorentzVector.h>
#include <TObjArray.h>
#include <TGraphErrors.h>
#include <TString.h>
#include <TSpline.h>
#include <TRandom3.h>

#include "AliVParticle.h"
#include "AliMCParticle.h"
#include "AliESDtrack.h"
#include "AliAODTrack.h"
#include "AliTHn.h"
#include "AliAnalysisTaskTriggeredBF.h"

#include "AliBalancePsi.h"
using std::cout;
using std::endl;
using std::cerr;

ClassImp(AliBalancePsi)

//____________________________________________________________________//
AliBalancePsi::AliBalancePsi() :
  TObject(), 
  fShuffle(kFALSE),
  fAnalysisLevel("ESD"),
  fAnalyzedEvents(0) ,
  fCentralityId(0) ,
  fCentStart(0.),
  fCentStop(0.),
  fHistP(0),
  fHistN(0),
  fHistPN(0),
  fHistNP(0),
  fHistPP(0),
  fHistNN(0),
  fHistHBTbefore(0),
  fHistHBTafter(0),
  fHistConversionbefore(0),
  fHistConversionafter(0),
  fHistPsiMinusPhi(0),
  fHistResonancesBefore(0),
  fHistResonancesRho(0),
  fHistResonancesK0(0),
  fHistResonancesLambda(0),
  fHistQbefore(0),
  fHistQafter(0),
  fPsiInterval(15.),
  fDeltaEtaMax(2.0),
  fResonancesCut(kFALSE),
  fHBTCut(kFALSE),
  fHBTCutValue(0.02),
  fConversionCut(kFALSE),
  fInvMassCutConversion(0.04),
  fQCut(kFALSE),
  fDeltaPtMin(0.0),
  fVertexBinning(kFALSE),
  fCustomBinning(""),
  fBinningString(""),
  fEventClass("EventPlane"){
  // Default constructor
}

//____________________________________________________________________//
AliBalancePsi::AliBalancePsi(const AliBalancePsi& balance):
  TObject(balance), fShuffle(balance.fShuffle), 
  fAnalysisLevel(balance.fAnalysisLevel),
  fAnalyzedEvents(balance.fAnalyzedEvents), 
  fCentralityId(balance.fCentralityId),
  fCentStart(balance.fCentStart),
  fCentStop(balance.fCentStop),
  fHistP(balance.fHistP),
  fHistN(balance.fHistN),
  fHistPN(balance.fHistPN),
  fHistNP(balance.fHistNP),
  fHistPP(balance.fHistPP),
  fHistNN(balance.fHistNN),
  fHistHBTbefore(balance.fHistHBTbefore),
  fHistHBTafter(balance.fHistHBTafter),
  fHistConversionbefore(balance.fHistConversionbefore),
  fHistConversionafter(balance.fHistConversionafter),
  fHistPsiMinusPhi(balance.fHistPsiMinusPhi),
  fHistResonancesBefore(balance.fHistResonancesBefore),
  fHistResonancesRho(balance.fHistResonancesRho),
  fHistResonancesK0(balance.fHistResonancesK0),
  fHistResonancesLambda(balance.fHistResonancesLambda),
  fHistQbefore(balance.fHistQbefore),
  fHistQafter(balance.fHistQafter),
  fPsiInterval(balance.fPsiInterval),
  fDeltaEtaMax(balance.fDeltaEtaMax),
  fResonancesCut(balance.fResonancesCut),
  fHBTCut(balance.fHBTCut),
  fHBTCutValue(balance.fHBTCutValue),
  fConversionCut(balance.fConversionCut),
  fInvMassCutConversion(balance.fInvMassCutConversion),
  fQCut(balance.fQCut),
  fDeltaPtMin(balance.fDeltaPtMin),
  fVertexBinning(balance.fVertexBinning),
  fCustomBinning(balance.fCustomBinning),
  fBinningString(balance.fBinningString),
  fEventClass("EventPlane"){
  //copy constructor
}

//____________________________________________________________________//
AliBalancePsi::~AliBalancePsi() {
  // Destructor
  delete fHistP;
  delete fHistN;
  delete fHistPN;
  delete fHistNP;
  delete fHistPP;
  delete fHistNN;

  delete fHistHBTbefore;
  delete fHistHBTafter;
  delete fHistConversionbefore;
  delete fHistConversionafter;
  delete fHistPsiMinusPhi;
  delete fHistResonancesBefore;
  delete fHistResonancesRho;
  delete fHistResonancesK0;
  delete fHistResonancesLambda;
  delete fHistQbefore;
  delete fHistQafter;
    
}

//____________________________________________________________________//
void AliBalancePsi::InitHistograms() {
  // single particle histograms

  // global switch disabling the reference 
  // (to avoid "Replacing existing TH1" if several wagons are created in train)
  Bool_t oldStatus = TH1::AddDirectoryStatus();
  TH1::AddDirectory(kFALSE);

  Int_t anaSteps   = 1;       // analysis steps
  Int_t iBinSingle[kTrackVariablesSingle];        // binning for track variables
  Double_t* dBinsSingle[kTrackVariablesSingle];   // bins for track variables  
  TString axisTitleSingle[kTrackVariablesSingle]; // axis titles for track variables
  
  // two particle histograms
  Int_t iBinPair[kTrackVariablesPair];         // binning for track variables
  Double_t* dBinsPair[kTrackVariablesPair];    // bins for track variables  
  TString axisTitlePair[kTrackVariablesPair];  // axis titles for track variables



  // =========================================================
  // The default string (from older versions of AliBalancePsi)
  // =========================================================
  TString defaultBinningStr;
  defaultBinningStr = "multiplicity: 0,10,20,30,40,50,60,70,80,100,100000\n"                // Multiplicity Bins
    "centrality: 0.,5.,10.,20.,30.,40.,50.,60.,70.,80.\n"                                   // Centrality Bins
    "centralityVertex: 0.,5.,10.,15.,20.,25.,30.,35.,40.,45.,50.,55.,60.,65.,70.,75.,80.\n" // Centrality Bins (Vertex Binning)
    "eventPlane: -0.5,0.5,1.5,2.5,3.5\n"                                                    // Event Plane Bins (Psi: -0.5->0.5 (in plane), 0.5->1.5 (intermediate), 1.5->2.5 (out of plane), 2.5->3.5 (rest))
    "deltaEta: -1.6, -1.56, -1.52, -1.48, -1.44, -1.4, -1.36, -1.32, -1.28, -1.24, -1.2, -1.16, -1.12, -1.08, -1.04, -1, -0.96, -0.92, -0.88, -0.84, -0.8, -0.76, -0.72, -0.68, -0.64, -0.6, -0.56, -0.52, -0.48, -0.44, -0.4, -0.36, -0.32, -0.28, -0.24, -0.2, -0.16, -0.12, -0.08, -0.04, 0, 0.04, 0.08, 0.12, 0.16, 0.2, 0.24, 0.28, 0.32, 0.36, 0.4, 0.44, 0.48, 0.52, 0.56, 0.6, 0.64, 0.68, 0.72, 0.76, 0.8, 0.84, 0.88, 0.92, 0.96, 1, 1.04, 1.08, 1.12, 1.16, 1.2, 1.24, 1.28, 1.32, 1.36, 1.4, 1.44, 1.48, 1.52, 1.56, 1.6\n" // Delta Eta Bins
    "deltaEtaVertex: -1.6, -1.52, -1.44, -1.36, -1.28, -1.2, -1.12, -1.04, -0.96, -0.88, -0.8, -0.72, -0.64, -0.56, -0.48, -0.4, -0.32, -0.24, -0.16, -0.08, 0, 0.08, 0.16, 0.24, 0.32, 0.4, 0.48, 0.56, 0.64, 0.72, 0.8, 0.88, 0.96, 1.04, 1.12, 1.2, 1.28, 1.36, 1.44, 1.52, 1.6\n" // Delta Eta Bins (Vertex Binning)
    "deltaPhi: -1.5708, -1.48353, -1.39626, -1.309, -1.22173, -1.13446, -1.0472, -0.959931, -0.872665, -0.785398, -0.698132, -0.610865, -0.523599, -0.436332, -0.349066, -0.261799, -0.174533, -0.0872665, 0, 0.0872665, 0.174533, 0.261799, 0.349066, 0.436332, 0.523599, 0.610865, 0.698132, 0.785398, 0.872665, 0.959931, 1.0472, 1.13446, 1.22173, 1.309, 1.39626, 1.48353, 1.5708, 1.65806, 1.74533, 1.8326, 1.91986, 2.00713, 2.0944, 2.18166, 2.26893, 2.35619, 2.44346, 2.53073, 2.61799, 2.70526, 2.79253, 2.87979, 2.96706, 3.05433, 3.14159, 3.22886, 3.31613, 3.40339, 3.49066, 3.57792, 3.66519, 3.75246, 3.83972, 3.92699, 4.01426, 4.10152, 4.18879, 4.27606, 4.36332, 4.45059, 4.53786, 4.62512, 4.71239\n" // Delta Phi Bins
    "pT: 0.2,0.6,1.0,1.5,2.0,2.5,3.0,3.5,4.0,5.0,6.0,7.0,8.0,10.,12.,15.,20.\n"             // pT Bins
    "pTVertex: 0.2,1.0,2.0,3.0,4.0,8.0,15.0\n"                                              // pT Bins (Vertex Binning)
    "vertex: -10., 10.\n"                                                                   // Vertex Bins
    "vertexVertex: -10., -7., -5., -3., -1., 1., 3., 5., 7., 10.\n"                         // Vertex Bins (Vertex Binning)
    ;
  
  
  // =========================================================
  // Customization (adopted from AliUEHistograms)
  // =========================================================

  TObjArray* lines = defaultBinningStr.Tokenize("\n");
  for (Int_t i=0; i<lines->GetEntriesFast(); i++)
  {
    TString line(lines->At(i)->GetName());
    TString tag = line(0, line.Index(":")+1);
    if (!fCustomBinning.BeginsWith(tag) && !fCustomBinning.Contains(TString("\n") + tag))
      fBinningString += line + "\n";
    else
      AliInfo(Form("Using custom binning for %s", tag.Data()));
  }
  delete lines;
  fBinningString += fCustomBinning;
  
  AliInfo(Form("Used AliTHn Binning:\n%s",fBinningString.Data()));


  // =========================================================
  // Now set the bins
  // =========================================================

  //Depending on fEventClass Variable, do one thing or the other...
  /**********************************************************
   
  ======> Modification: Change Event Classification Scheme
    
  ---> fEventClass == "EventPlane"
   
   Default operation with Event Plane 
   
  ---> fEventClass == "Multiplicity"
   
   Work with reference multiplicity (from GetReferenceMultiplicity, which one is decided in the configuration)
   
  ---> fEventClass == "Centrality" 
   
   Work with Centrality Bins

  ***********************************************************/
  if(fEventClass == "Multiplicity"){
    dBinsSingle[0]     = GetBinning(fBinningString, "multiplicity", iBinSingle[0]);
    dBinsPair[0]       = GetBinning(fBinningString, "multiplicity", iBinPair[0]);
    axisTitleSingle[0] = "reference multiplicity";
    axisTitlePair[0]   = "reference multiplicity";
  }
  if(fEventClass == "Centrality"){
    // fine binning in case of vertex Z binning
    if(fVertexBinning){
      dBinsSingle[0]     = GetBinning(fBinningString, "centralityVertex", iBinSingle[0]);
      dBinsPair[0]       = GetBinning(fBinningString, "centralityVertex", iBinPair[0]);
    }
    else{
      dBinsSingle[0]     = GetBinning(fBinningString, "centrality", iBinSingle[0]);
      dBinsPair[0]       = GetBinning(fBinningString, "centrality", iBinPair[0]);
    }
    axisTitleSingle[0] = "Centrality percentile [%]";
    axisTitlePair[0]   = "Centrality percentile [%]";
  }
  if(fEventClass == "EventPlane"){
    dBinsSingle[0]     = GetBinning(fBinningString, "eventPlane", iBinSingle[0]);
    dBinsPair[0]       = GetBinning(fBinningString, "eventPlane", iBinPair[0]);
    axisTitleSingle[0] = "#varphi - #Psi_{2} (a.u.)";
    axisTitlePair[0]   = "#varphi - #Psi_{2} (a.u.)";
  }
  

  // Delta Eta and Delta Phi
  // (coarse binning in case of vertex Z binning)
  if(fVertexBinning){
    dBinsPair[1]       = GetBinning(fBinningString, "deltaEtaVertex", iBinPair[1]);
  }
  else{
    dBinsPair[1]       = GetBinning(fBinningString, "deltaEta", iBinPair[1]);
  }
  axisTitlePair[1]  = "#Delta#eta"; 
  
  dBinsPair[2]       = GetBinning(fBinningString, "deltaPhi", iBinPair[2]);
  axisTitlePair[2]   = "#Delta#varphi (rad)";  
  

  // pT Trig and pT Assoc
  // (coarse binning in case of vertex Z binning)
  if(fVertexBinning){
    dBinsSingle[1]   = GetBinning(fBinningString, "pTVertex", iBinSingle[1]);
    dBinsPair[3]     = GetBinning(fBinningString, "pTVertex", iBinPair[3]);
    dBinsPair[4]     = GetBinning(fBinningString, "pTVertex", iBinPair[4]);
  }
  else{
    dBinsSingle[1]   = GetBinning(fBinningString, "pT", iBinSingle[1]);
    dBinsPair[3]     = GetBinning(fBinningString, "pT", iBinPair[3]);
    dBinsPair[4]     = GetBinning(fBinningString, "pT", iBinPair[4]);
  }
  
  axisTitleSingle[1]  = "p_{T,trig.} (GeV/c)"; 
  axisTitlePair[3]    = "p_{T,trig.} (GeV/c)"; 
  axisTitlePair[4]    = "p_{T,assoc.} (GeV/c)";  
 

  // vertex Z binning or not
  if(fVertexBinning){
    dBinsSingle[2]   = GetBinning(fBinningString, "vertexVertex", iBinSingle[2]);
    dBinsPair[5]     = GetBinning(fBinningString, "vertexVertex", iBinPair[5]);
  }
  else{
    dBinsSingle[2]   = GetBinning(fBinningString, "vertex", iBinSingle[2]);
    dBinsPair[5]     = GetBinning(fBinningString, "vertex", iBinPair[5]);
  }

  axisTitleSingle[2]  = "v_{Z} (cm)"; 
  axisTitlePair[5]    = "v_{Z} (cm)"; 



  // =========================================================
  // Create the Output objects (AliTHn)
  // =========================================================

  TString histName;
  //+ triggered particles
  histName = "fHistP"; 
  if(fShuffle) histName.Append("_shuffle");
  if(fCentralityId) histName += fCentralityId.Data();
  fHistP = new AliTHn(histName.Data(),histName.Data(),anaSteps,kTrackVariablesSingle,iBinSingle);
  for (Int_t j=0; j<kTrackVariablesSingle; j++) {
    fHistP->SetBinLimits(j, dBinsSingle[j]);
    fHistP->SetVarTitle(j, axisTitleSingle[j]);
  }

  //- triggered particles
  histName = "fHistN"; 
  if(fShuffle) histName.Append("_shuffle");
  if(fCentralityId) histName += fCentralityId.Data();
  fHistN = new AliTHn(histName.Data(),histName.Data(),anaSteps,kTrackVariablesSingle,iBinSingle);
  for (Int_t j=0; j<kTrackVariablesSingle; j++) {
    fHistN->SetBinLimits(j, dBinsSingle[j]);
    fHistN->SetVarTitle(j, axisTitleSingle[j]);
  }
  
  //+- pairs
  histName = "fHistPN";
  if(fShuffle) histName.Append("_shuffle");
  if(fCentralityId) histName += fCentralityId.Data();
  fHistPN = new AliTHn(histName.Data(),histName.Data(),anaSteps, kTrackVariablesPair, iBinPair);
  for (Int_t j=0; j<kTrackVariablesPair; j++) {
    fHistPN->SetBinLimits(j, dBinsPair[j]);
    fHistPN->SetVarTitle(j, axisTitlePair[j]);
  }

  //-+ pairs
  histName = "fHistNP";
  if(fShuffle) histName.Append("_shuffle");
  if(fCentralityId) histName += fCentralityId.Data();
  fHistNP = new AliTHn(histName.Data(),histName.Data(),anaSteps, kTrackVariablesPair, iBinPair);
  for (Int_t j=0; j<kTrackVariablesPair; j++) {
    fHistNP->SetBinLimits(j, dBinsPair[j]);
    fHistNP->SetVarTitle(j, axisTitlePair[j]);
  }

  //++ pairs
  histName = "fHistPP";
  if(fShuffle) histName.Append("_shuffle");
  if(fCentralityId) histName += fCentralityId.Data();
  fHistPP = new AliTHn(histName.Data(),histName.Data(),anaSteps, kTrackVariablesPair, iBinPair);
  for (Int_t j=0; j<kTrackVariablesPair; j++) {
    fHistPP->SetBinLimits(j, dBinsPair[j]);
    fHistPP->SetVarTitle(j, axisTitlePair[j]);
  }

  //-- pairs
  histName = "fHistNN";
  if(fShuffle) histName.Append("_shuffle");
  if(fCentralityId) histName += fCentralityId.Data();
  fHistNN = new AliTHn(histName.Data(),histName.Data(),anaSteps, kTrackVariablesPair, iBinPair);
  for (Int_t j=0; j<kTrackVariablesPair; j++) {
    fHistNN->SetBinLimits(j, dBinsPair[j]);
    fHistNN->SetVarTitle(j, axisTitlePair[j]);
  }

  AliInfo("Finished setting up the AliTHn");

  // QA histograms
  fHistHBTbefore        = new TH2D("fHistHBTbefore","before HBT cut",200,0,2,200,0,2.*TMath::Pi());
  fHistHBTafter         = new TH2D("fHistHBTafter","after HBT cut",200,0,2,200,0,2.*TMath::Pi());
  fHistConversionbefore = new TH3D("fHistConversionbefore","before Conversion cut;#Delta#eta;#Delta#phi;M_{inv}^{2}",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistConversionafter  = new TH3D("fHistConversionafter","after Conversion cut;#Delta#eta;#Delta#phi;M_{inv}^{2}",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistPsiMinusPhi      = new TH2D("fHistPsiMinusPhi","",4,-0.5,3.5,100,0,2.*TMath::Pi());
  fHistResonancesBefore = new TH3D("fHistResonancesBefore","before resonance cut;#Delta#eta;#Delta#phi;M_{inv}",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistResonancesRho    = new TH3D("fHistResonancesRho","after #rho resonance cut;#Delta#eta;#Delta#phi;M_{inv}",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistResonancesK0     = new TH3D("fHistResonancesK0","after #rho, K0 resonance cut;#Delta#eta;#Delta#phi;M_{inv}",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistResonancesLambda = new TH3D("fHistResonancesLambda","after #rho, K0, Lambda resonance cut;#Delta#eta;#Delta#phi;M_{inv}",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistQbefore          = new TH3D("fHistQbefore","before momentum difference cut;#Delta#eta;#Delta#phi;|#Delta p_{T}| (GeV/c)",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);
  fHistQafter           = new TH3D("fHistQafter","after momentum difference cut;#Delta#eta;#Delta#phi;|#Delta p_{T}| (GeV/c)",50,-2.0,2.0,50,-TMath::Pi()/2.,3.*TMath::Pi()/2.,300,0,1.5);

  TH1::AddDirectory(oldStatus);

}

//____________________________________________________________________//
void AliBalancePsi::CalculateBalance(Double_t gReactionPlane,
				     TObjArray *particles, 
				     TObjArray *particlesMixed,
				     Float_t bSign,
				     Double_t kMultorCent,
				     Double_t vertexZ) {
  // Calculates the balance function
  fAnalyzedEvents++;
    
  // Initialize histograms if not done yet
  if(!fHistPN){
    AliWarning("Histograms not yet initialized! --> Will be done now");
    AliWarning("This works only in local mode --> Add 'gBalance->InitHistograms()' in your configBalanceFunction");
    InitHistograms();
  }

  Double_t trackVariablesSingle[kTrackVariablesSingle];
  Double_t trackVariablesPair[kTrackVariablesPair];

  if (!particles){
    AliWarning("particles TObjArray is NULL pointer --> return");
    return;
  }
  
  // define end of particle loops
  Int_t iMax = particles->GetEntriesFast();
  Int_t jMax = iMax;
  if (particlesMixed)
    jMax = particlesMixed->GetEntriesFast();

  // Eta() is extremely time consuming, therefore cache it for the inner loop here:
  TObjArray* particlesSecond = (particlesMixed) ? particlesMixed : particles;

  TArrayF secondEta(jMax);
  TArrayF secondPhi(jMax);
  TArrayF secondPt(jMax);
  TArrayS secondCharge(jMax);
  TArrayD secondCorrection(jMax);

  for (Int_t i=0; i<jMax; i++){
    secondEta[i] = ((AliVParticle*) particlesSecond->At(i))->Eta();
    secondPhi[i] = ((AliVParticle*) particlesSecond->At(i))->Phi();
    secondPt[i]  = ((AliVParticle*) particlesSecond->At(i))->Pt();
    secondCharge[i]  = (Short_t)((AliVParticle*) particlesSecond->At(i))->Charge();
    secondCorrection[i]  = (Double_t)((AliBFBasicParticle*) particlesSecond->At(i))->Correction();   //==========================correction
  }
  
  //TLorenzVector implementation for resonances
  TLorentzVector vectorMother, vectorDaughter[2];
  TParticle pPion, pProton, pRho0, pK0s, pLambda;
  pPion.SetPdgCode(211); //pion
  pRho0.SetPdgCode(113); //rho0
  pK0s.SetPdgCode(310); //K0s
  pProton.SetPdgCode(2212); //proton
  pLambda.SetPdgCode(3122); //Lambda
  Double_t gWidthForRho0 = 0.01;
  Double_t gWidthForK0s = 0.01;
  Double_t gWidthForLambda = 0.006;
  Double_t nSigmaRejection = 3.0;

  // 1st particle loop
  for (Int_t i = 0; i < iMax; i++) {
    //AliVParticle* firstParticle = (AliVParticle*) particles->At(i);
    AliBFBasicParticle* firstParticle = (AliBFBasicParticle*) particles->At(i); //==========================correction
    
    // some optimization
    Float_t firstEta = firstParticle->Eta();
    Float_t firstPhi = firstParticle->Phi();
    Float_t firstPt  = firstParticle->Pt();
    Float_t firstCorrection  = firstParticle->Correction();//==========================correction

    // Event plane (determine psi bin)
    Double_t gPsiMinusPhi    =   0.;
    Double_t gPsiMinusPhiBin = -10.;
    gPsiMinusPhi   = TMath::Abs(firstPhi - gReactionPlane);
    //in-plane
    if((gPsiMinusPhi <= 7.5*TMath::DegToRad())||
       ((172.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 187.5*TMath::DegToRad())))
      gPsiMinusPhiBin = 0.0;
    //intermediate
    else if(((37.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 52.5*TMath::DegToRad()))||
	    ((127.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 142.5*TMath::DegToRad()))||
	    ((217.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 232.5*TMath::DegToRad()))||
	    ((307.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 322.5*TMath::DegToRad())))
      gPsiMinusPhiBin = 1.0;
    //out of plane
    else if(((82.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 97.5*TMath::DegToRad()))||
	    ((262.5*TMath::DegToRad() <= gPsiMinusPhi)&&(gPsiMinusPhi <= 277.5*TMath::DegToRad())))
      gPsiMinusPhiBin = 2.0;
    //everything else
    else 
      gPsiMinusPhiBin = 3.0;
    
    fHistPsiMinusPhi->Fill(gPsiMinusPhiBin,gPsiMinusPhi);

    Short_t  charge1 = (Short_t) firstParticle->Charge();
    
    trackVariablesSingle[0]    =  gPsiMinusPhiBin;
    trackVariablesSingle[1]    =  firstPt;
      if(fEventClass=="Multiplicity" || fEventClass == "Centrality" ) trackVariablesSingle[0] = kMultorCent;
    trackVariablesSingle[2]    =  vertexZ;

    
    //fill single particle histograms
    if(charge1 > 0)      fHistP->Fill(trackVariablesSingle,0,firstCorrection); //==========================correction
    else if(charge1 < 0) fHistN->Fill(trackVariablesSingle,0,firstCorrection);  //==========================correction
    
    // 2nd particle loop
    for(Int_t j = 0; j < jMax; j++) {   

      if(!particlesMixed && j == i) continue; // no auto correlations (only for non mixing)

      // pT,Assoc < pT,Trig
      if(firstPt < secondPt[j]) continue;

      Short_t charge2 = secondCharge[j];
      
      trackVariablesPair[0]    =  trackVariablesSingle[0];
      trackVariablesPair[1]    =  firstEta - secondEta[j];  // delta eta
      trackVariablesPair[2]    =  firstPhi - secondPhi[j];  // delta phi
      //if (trackVariablesPair[2] > 180.)   // delta phi between -180 and 180 
      //trackVariablesPair[2] -= 360.;
      //if (trackVariablesPair[2] <  - 180.) 
      //trackVariablesPair[2] += 360.;
      if (trackVariablesPair[2] > TMath::Pi()) // delta phi between -pi and pi 
	trackVariablesPair[2] -= 2.*TMath::Pi();
      if (trackVariablesPair[2] <  - TMath::Pi()) 
	trackVariablesPair[2] += 2.*TMath::Pi();
      if (trackVariablesPair[2] <  - TMath::Pi()/2.) 
      trackVariablesPair[2] += 2.*TMath::Pi();
      
      trackVariablesPair[3]    =  firstPt;      // pt trigger
      trackVariablesPair[4]    =  secondPt[j];  // pt
      trackVariablesPair[5]    =  vertexZ;      // z of the primary vertex
      
      //Exclude resonances for the calculation of pairs by looking 
      //at the invariant mass and not considering the pairs that 
      //fall within 3sigma from the mass peak of: rho0, K0s, Lambda
      if(fResonancesCut) {
	if (charge1 * charge2 < 0) {

	  //rho0
	  vectorDaughter[0].SetPtEtaPhiM(firstPt,firstEta,firstPhi,pPion.GetMass());
	  vectorDaughter[1].SetPtEtaPhiM(secondPt[j],secondEta[j],secondPhi[j],pPion.GetMass());
	  vectorMother = vectorDaughter[0] + vectorDaughter[1];
	  fHistResonancesBefore->Fill(trackVariablesPair[1],trackVariablesPair[2],vectorMother.M());
	  if(TMath::Abs(vectorMother.M() - pRho0.GetMass()) <= nSigmaRejection*gWidthForRho0)
	    continue;
	  fHistResonancesRho->Fill(trackVariablesPair[1],trackVariablesPair[2],vectorMother.M());
	  
	  //K0s
	  if(TMath::Abs(vectorMother.M() - pK0s.GetMass()) <= nSigmaRejection*gWidthForK0s)
	    continue;
	  fHistResonancesK0->Fill(trackVariablesPair[1],trackVariablesPair[2],vectorMother.M());
	  
	  
	  //Lambda
	  vectorDaughter[0].SetPtEtaPhiM(firstPt,firstEta,firstPhi,pPion.GetMass());
	  vectorDaughter[1].SetPtEtaPhiM(secondPt[j],secondEta[j],secondPhi[j],pProton.GetMass());
	  vectorMother = vectorDaughter[0] + vectorDaughter[1];
	  if(TMath::Abs(vectorMother.M() - pLambda.GetMass()) <= nSigmaRejection*gWidthForLambda)
	    continue;
	  
	  vectorDaughter[0].SetPtEtaPhiM(firstPt,firstEta,firstPhi,pProton.GetMass());
	  vectorDaughter[1].SetPtEtaPhiM(secondPt[j],secondEta[j],secondPhi[j],pPion.GetMass());
	  vectorMother = vectorDaughter[0] + vectorDaughter[1];
	  if(TMath::Abs(vectorMother.M() - pLambda.GetMass()) <= nSigmaRejection*gWidthForLambda)
	    continue;
	  fHistResonancesLambda->Fill(trackVariablesPair[1],trackVariablesPair[2],vectorMother.M());
	
	}//unlike-sign only
      }//resonance cut

      // HBT like cut
      //if(fHBTCut){ // VERSION 3 (all pairs)
      if(fHBTCut && charge1 * charge2 > 0){  // VERSION 2 (only for LS)
	//if( dphi < 3 || deta < 0.01 ){   // VERSION 1
	//  continue;
	
	Double_t deta = firstEta - secondEta[j];
	Double_t dphi = firstPhi - secondPhi[j];
	// VERSION 2 (Taken from DPhiCorrelations)
	// the variables & cuthave been developed by the HBT group 
	// see e.g. https://indico.cern.ch/materialDisplay.py?contribId=36&sessionId=6&materialId=slides&confId=142700
	fHistHBTbefore->Fill(deta,dphi);
	
	// optimization
	if (TMath::Abs(deta) < fHBTCutValue * 2.5 * 3) //fHBTCutValue = 0.02 [default for dphicorrelations]
	  {
	    // phi in rad
	    //Float_t phi1rad = firstPhi*TMath::DegToRad();
	    //Float_t phi2rad = secondPhi[j]*TMath::DegToRad();
	    Float_t phi1rad = firstPhi;
	    Float_t phi2rad = secondPhi[j];
	    
	    // check first boundaries to see if is worth to loop and find the minimum
	    Float_t dphistar1 = GetDPhiStar(phi1rad, firstPt, charge1, phi2rad, secondPt[j], charge2, 0.8, bSign);
	    Float_t dphistar2 = GetDPhiStar(phi1rad, firstPt, charge1, phi2rad, secondPt[j], charge2, 2.5, bSign);
	    
	    const Float_t kLimit = fHBTCutValue * 3;
	    
	    Float_t dphistarminabs = 1e5;
	    //Float_t dphistarmin = 1e5;
	    
	    if (TMath::Abs(dphistar1) < kLimit || TMath::Abs(dphistar2) < kLimit || dphistar1 * dphistar2 < 0 ) {
	      for (Double_t rad=0.8; rad<2.51; rad+=0.01) {
		Float_t dphistar = GetDPhiStar(phi1rad, firstPt, charge1, phi2rad, secondPt[j], charge2, rad, bSign);
		Float_t dphistarabs = TMath::Abs(dphistar);
		
		if (dphistarabs < dphistarminabs) {
		  //dphistarmin = dphistar;
		  dphistarminabs = dphistarabs;
		}
	      }
	      
	      if (dphistarminabs < fHBTCutValue && TMath::Abs(deta) < fHBTCutValue) {
		//AliInfo(Form("HBT: Removed track pair %d %d with [[%f %f]] %f %f %f | %f %f %d %f %f %d %f", i, j, deta, dphi, dphistarminabs, dphistar1, dphistar2, phi1rad, pt1, charge1, phi2rad, pt2, charge2, bSign));
		continue;
	      }
	    }
	  }
	fHistHBTafter->Fill(deta,dphi);
      }//HBT cut
	
      // conversions
      if(fConversionCut) {
	if (charge1 * charge2 < 0) {
	  Double_t deta = firstEta - secondEta[j];
	  Double_t dphi = firstPhi - secondPhi[j];
	  
	  Float_t m0 = 0.510e-3;
	  Float_t tantheta1 = 1e10;
	  
	  // phi in rad
	  //Float_t phi1rad = firstPhi*TMath::DegToRad();
	  //Float_t phi2rad = secondPhi[j]*TMath::DegToRad();
	  Float_t phi1rad = firstPhi;
	  Float_t phi2rad = secondPhi[j];
	  
	  if (firstEta < -1e-10 || firstEta > 1e-10)
	    tantheta1 = 2 * TMath::Exp(-firstEta) / ( 1 - TMath::Exp(-2*firstEta));
	  
	  Float_t tantheta2 = 1e10;
	  if (secondEta[j] < -1e-10 || secondEta[j] > 1e-10)
	    tantheta2 = 2 * TMath::Exp(-secondEta[j]) / ( 1 - TMath::Exp(-2*secondEta[j]));
	  
	  Float_t e1squ = m0 * m0 + firstPt * firstPt * (1.0 + 1.0 / tantheta1 / tantheta1);
	  Float_t e2squ = m0 * m0 + secondPt[j] * secondPt[j] * (1.0 + 1.0 / tantheta2 / tantheta2);
	  
	  Float_t masssqu = 2 * m0 * m0 + 2 * ( TMath::Sqrt(e1squ * e2squ) - ( firstPt * secondPt[j] * ( TMath::Cos(phi1rad - phi2rad) + 1.0 / tantheta1 / tantheta2 ) ) );

	  fHistConversionbefore->Fill(deta,dphi,masssqu);
	  
	  if (masssqu < fInvMassCutConversion*fInvMassCutConversion){
	    //AliInfo(Form("Conversion: Removed track pair %d %d with [[%f %f] %f %f] %d %d <- %f %f  %f %f   %f %f ", i, j, deta, dphi, masssqu, charge1, charge2,eta1,eta2,phi1,phi2,pt1,pt2));
	    continue;
	  }
	  fHistConversionafter->Fill(deta,dphi,masssqu);
	}
      }//conversion cut

      // momentum difference cut - suppress femtoscopic effects
      if(fQCut){ 

	//Double_t ptMin        = 0.1; //const for the time being (should be changeable later on)
	Double_t ptDifference = TMath::Abs( firstPt - secondPt[j]);

	fHistQbefore->Fill(trackVariablesPair[1],trackVariablesPair[2],ptDifference);
	if(ptDifference < fDeltaPtMin) continue;
	fHistQafter->Fill(trackVariablesPair[1],trackVariablesPair[2],ptDifference);

      }

      if( charge1 > 0 && charge2 < 0)  fHistPN->Fill(trackVariablesPair,0,firstCorrection*secondCorrection[j]); //==========================correction
      else if( charge1 < 0 && charge2 > 0)  fHistNP->Fill(trackVariablesPair,0,firstCorrection*secondCorrection[j]);//==========================correction 
      else if( charge1 > 0 && charge2 > 0)  fHistPP->Fill(trackVariablesPair,0,firstCorrection*secondCorrection[j]);//==========================correction 
      else if( charge1 < 0 && charge2 < 0)  fHistNN->Fill(trackVariablesPair,0,firstCorrection*secondCorrection[j]);//==========================correction 
      else {
	//AliWarning(Form("Wrong charge combination: charge1 = %d and charge2 = %d",charge,charge2));
	continue;
      }
    }//end of 2nd particle loop
  }//end of 1st particle loop
}  

//____________________________________________________________________//
TH1D *AliBalancePsi::GetBalanceFunctionHistogram(Int_t iVariableSingle,
						 Int_t iVariablePair,
						 Double_t psiMin, 
						 Double_t psiMax,
						 Double_t vertexZMin,
						 Double_t vertexZMax,
						 Double_t ptTriggerMin,
						 Double_t ptTriggerMax,
						 Double_t ptAssociatedMin,
						 Double_t ptAssociatedMax) {
  //Returns the BF histogram, extracted from the 6 AliTHn objects 
  //(private members) of the AliBalancePsi class.
  //iVariableSingle: 0(phi-Psi), 1(pt-trigger)
  //iVariablePair: 0(phi-Psi) 1(Delta eta), 2(Delta phi), 3(pt-trigger), 4(pt-associated

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // Psi_2
  fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 

  // Vz
 if(fVertexBinning){
   fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
   fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
   fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
   fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
   fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
   fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
 }

  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  //Printf("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0));

  // Project into the wanted space (1st: analysis step, 2nd: axis)
  TH1D* hTemp1 = (TH1D*)fHistPN->Project(0,iVariablePair); //
  TH1D* hTemp2 = (TH1D*)fHistNP->Project(0,iVariablePair); //
  TH1D* hTemp3 = (TH1D*)fHistPP->Project(0,iVariablePair); //
  TH1D* hTemp4 = (TH1D*)fHistNN->Project(0,iVariablePair); //
  TH1D* hTemp5 = (TH1D*)fHistP->Project(0,iVariableSingle); //
  TH1D* hTemp6 = (TH1D*)fHistN->Project(0,iVariableSingle); //

  TH1D *gHistBalanceFunctionHistogram = 0x0;
  if((hTemp1)&&(hTemp2)&&(hTemp3)&&(hTemp4)&&(hTemp5)&&(hTemp6)) {
    gHistBalanceFunctionHistogram = (TH1D*)hTemp1->Clone();
    gHistBalanceFunctionHistogram->Reset();
    
    switch(iVariablePair) {
    case 1:
      gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#eta");
      gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta#eta)");
      break;
    case 2:
      gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#varphi (rad)");
      gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta#varphi)");
      break;
    default:
      break;
    }

    hTemp1->Sumw2();
    hTemp2->Sumw2();
    hTemp3->Sumw2();
    hTemp4->Sumw2();
    hTemp1->Add(hTemp3,-1.);
    hTemp1->Scale(1./hTemp5->Integral());
    hTemp2->Add(hTemp4,-1.);
    hTemp2->Scale(1./hTemp6->Integral());
    gHistBalanceFunctionHistogram->Add(hTemp1,hTemp2,1.,1.);
    gHistBalanceFunctionHistogram->Scale(0.5);

    //normalize to bin width
    gHistBalanceFunctionHistogram->Scale(1./((Double_t)gHistBalanceFunctionHistogram->GetXaxis()->GetBinWidth(1)));
  }

  return gHistBalanceFunctionHistogram;
}

//____________________________________________________________________//
TH1D *AliBalancePsi::GetBalanceFunctionHistogram2pMethod(Int_t iVariableSingle,
							 Int_t iVariablePair,
							 Double_t psiMin, 
							 Double_t psiMax,
							 Double_t vertexZMin,
							 Double_t vertexZMax,
							 Double_t ptTriggerMin,
							 Double_t ptTriggerMax,
							 Double_t ptAssociatedMin,
							 Double_t ptAssociatedMax,
							 AliBalancePsi *bfMix) {
  //Returns the BF histogram, extracted from the 6 AliTHn objects 
  //after dividing each correlation function by the Event Mixing one 
  //(private members) of the AliBalancePsi class.
  //iVariableSingle: 0(phi-Psi), 1(pt-trigger)
  //iVariablePair: 0(phi-Psi) 1(Delta eta), 2(Delta phi), 3(pt-trigger), 4(pt-associated

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // pt trigger (fixed for all vertices/psi/centralities)
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated (fixed for all vertices/psi/centralities)
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  // ============================================================================================
  // the same for event mixing
  AliTHn *fHistPMix = bfMix->GetHistNp();
  AliTHn *fHistNMix = bfMix->GetHistNn();
  AliTHn *fHistPNMix = bfMix->GetHistNpn();
  AliTHn *fHistNPMix = bfMix->GetHistNnp();
  AliTHn *fHistPPMix = bfMix->GetHistNpp();
  AliTHn *fHistNNMix = bfMix->GetHistNnn();

  // pt trigger (fixed for all vertices/psi/centralities)
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistPMix->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNMix->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated (fixed for all vertices/psi/centralities)
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  // ============================================================================================
  // ranges (in bins) for vertexZ and centrality (psi)
  Int_t binPsiMin    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMin);
  Int_t binPsiMax    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMax-0.00001);
  Int_t binVertexMin = 0;
  Int_t binVertexMax = 0;
  if(fVertexBinning){
    binVertexMin = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMin);
    binVertexMax = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMax-0.00001);
  }  
  Double_t binPsiLowEdge    = 0.;
  Double_t binPsiUpEdge     = 1000.;
  Double_t binVertexLowEdge = 0.;
  Double_t binVertexUpEdge  = 1000.;

  TH1D* h1 = NULL;
  TH1D* h2 = NULL;
  TH1D* h3 = NULL;
  TH1D* h4 = NULL;

  // loop over all bins
  for(Int_t iBinPsi = binPsiMin; iBinPsi <= binPsiMax; iBinPsi++){
    for(Int_t iBinVertex = binVertexMin; iBinVertex <= binVertexMax; iBinVertex++){
  
      cout<<"In the balance function (1D) loop: "<<iBinPsi<<" (psiBin), "<<iBinVertex<<" (vertexBin)  "<<endl;

      // determine the bin edges for this bin
      binPsiLowEdge    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->GetBinLowEdge(iBinPsi);
      binPsiUpEdge     = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->GetBinUpEdge(iBinPsi);
      if(fVertexBinning){
	binVertexLowEdge = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->GetBinLowEdge(iBinVertex);
	binVertexUpEdge  = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->GetBinUpEdge(iBinVertex);
      }
      
      // Psi_2
      fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 

      // Vz
      if(fVertexBinning){
	fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
      }

      // ============================================================================================
      // the same for event mixing
      
      // Psi_2
      fHistPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      
      // Vz
      if(fVertexBinning){
	fHistPMix->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNMix->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
      }
      
      // ============================================================================================

      //Printf("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0));
      
      // Project into the wanted space (1st: analysis step, 2nd: axis)
      TH1D* hTempHelper1 = (TH1D*)fHistPN->Project(0,iVariablePair);
      TH1D* hTempHelper2 = (TH1D*)fHistNP->Project(0,iVariablePair);
      TH1D* hTempHelper3 = (TH1D*)fHistPP->Project(0,iVariablePair);
      TH1D* hTempHelper4 = (TH1D*)fHistNN->Project(0,iVariablePair);
      TH1D* hTemp5 = (TH1D*)fHistP->Project(0,iVariableSingle);
      TH1D* hTemp6 = (TH1D*)fHistN->Project(0,iVariableSingle);
      
      // ============================================================================================
      // the same for event mixing
      TH1D* hTempHelper1Mix = (TH1D*)fHistPNMix->Project(0,iVariablePair);
      TH1D* hTempHelper2Mix = (TH1D*)fHistNPMix->Project(0,iVariablePair);
      TH1D* hTempHelper3Mix = (TH1D*)fHistPPMix->Project(0,iVariablePair);
      TH1D* hTempHelper4Mix = (TH1D*)fHistNNMix->Project(0,iVariablePair);
      TH1D* hTemp5Mix = (TH1D*)fHistPMix->Project(0,iVariableSingle);
      TH1D* hTemp6Mix = (TH1D*)fHistNMix->Project(0,iVariableSingle);
      // ============================================================================================

      hTempHelper1->Sumw2();
      hTempHelper2->Sumw2();
      hTempHelper3->Sumw2();
      hTempHelper4->Sumw2();
      hTemp5->Sumw2();
      hTemp6->Sumw2();
      hTempHelper1Mix->Sumw2();
      hTempHelper2Mix->Sumw2();
      hTempHelper3Mix->Sumw2();
      hTempHelper4Mix->Sumw2();
      hTemp5Mix->Sumw2();
      hTemp6Mix->Sumw2();

      // first put everything on positive x - axis (to be comparable with published data) --> ONLY IN THIS OPTION!

      Double_t helperEndBin = 1.6;
      if(iVariablePair==2) helperEndBin = TMath::Pi();

      TH1D* hTempPos1 = new TH1D(Form("hTempPos1_%d_%d",iBinPsi,iBinVertex),Form("hTempPos1_%d_%d",iBinPsi,iBinVertex),hTempHelper1->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos2 = new TH1D(Form("hTempPos2_%d_%d",iBinPsi,iBinVertex),Form("hTempPos2_%d_%d",iBinPsi,iBinVertex),hTempHelper2->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos3 = new TH1D(Form("hTempPos3_%d_%d",iBinPsi,iBinVertex),Form("hTempPos3_%d_%d",iBinPsi,iBinVertex),hTempHelper3->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos4 = new TH1D(Form("hTempPos4_%d_%d",iBinPsi,iBinVertex),Form("hTempPos4_%d_%d",iBinPsi,iBinVertex),hTempHelper4->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos1Mix = new TH1D(Form("hTempPos1Mix_%d_%d",iBinPsi,iBinVertex),Form("hTempPos1Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper1Mix->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos2Mix = new TH1D(Form("hTempPos2Mix_%d_%d",iBinPsi,iBinVertex),Form("hTempPos2Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper2Mix->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos3Mix = new TH1D(Form("hTempPos3Mix_%d_%d",iBinPsi,iBinVertex),Form("hTempPos3Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper3Mix->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTempPos4Mix = new TH1D(Form("hTempPos4Mix_%d_%d",iBinPsi,iBinVertex),Form("hTempPos4Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper4Mix->GetNbinsX()/2,0,helperEndBin);

      TH1D* hTemp1 = new TH1D(Form("hTemp1_%d_%d",iBinPsi,iBinVertex),Form("hTemp1_%d_%d",iBinPsi,iBinVertex),hTempHelper1->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp2 = new TH1D(Form("hTemp2_%d_%d",iBinPsi,iBinVertex),Form("hTemp2_%d_%d",iBinPsi,iBinVertex),hTempHelper2->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp3 = new TH1D(Form("hTemp3_%d_%d",iBinPsi,iBinVertex),Form("hTemp3_%d_%d",iBinPsi,iBinVertex),hTempHelper3->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp4 = new TH1D(Form("hTemp4_%d_%d",iBinPsi,iBinVertex),Form("hTemp4_%d_%d",iBinPsi,iBinVertex),hTempHelper4->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp1Mix = new TH1D(Form("hTemp1Mix_%d_%d",iBinPsi,iBinVertex),Form("hTemp1Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper1Mix->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp2Mix = new TH1D(Form("hTemp2Mix_%d_%d",iBinPsi,iBinVertex),Form("hTemp2Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper2Mix->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp3Mix = new TH1D(Form("hTemp3Mix_%d_%d",iBinPsi,iBinVertex),Form("hTemp3Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper3Mix->GetNbinsX()/2,0,helperEndBin);
      TH1D* hTemp4Mix = new TH1D(Form("hTemp4Mix_%d_%d",iBinPsi,iBinVertex),Form("hTemp4Mix_%d_%d",iBinPsi,iBinVertex),hTempHelper4Mix->GetNbinsX()/2,0,helperEndBin);


      hTempPos1->Sumw2();
      hTempPos2->Sumw2();
      hTempPos3->Sumw2();
      hTempPos4->Sumw2();
      hTempPos1Mix->Sumw2();
      hTempPos2Mix->Sumw2();
      hTempPos3Mix->Sumw2();
      hTempPos4Mix->Sumw2();

      hTemp1->Sumw2();
      hTemp2->Sumw2();
      hTemp3->Sumw2();
      hTemp4->Sumw2();
      hTemp1Mix->Sumw2();
      hTemp2Mix->Sumw2();
      hTemp3Mix->Sumw2();
      hTemp4Mix->Sumw2();


      for(Int_t i=0;i<hTempHelper1->GetNbinsX();i++){

	Double_t binCenter  = hTempHelper1->GetXaxis()->GetBinCenter(i+1);

	if(iVariablePair==1){
	  if(binCenter>0){
	    hTempPos1->SetBinContent(hTempPos1->FindBin(binCenter),hTempHelper1->GetBinContent(i+1));
	    hTempPos2->SetBinContent(hTempPos2->FindBin(binCenter),hTempHelper2->GetBinContent(i+1));
	    hTempPos3->SetBinContent(hTempPos3->FindBin(binCenter),hTempHelper3->GetBinContent(i+1));
	    hTempPos4->SetBinContent(hTempPos4->FindBin(binCenter),hTempHelper4->GetBinContent(i+1));
	    hTempPos1Mix->SetBinContent(hTempPos1Mix->FindBin(binCenter),hTempHelper1Mix->GetBinContent(i+1));
	    hTempPos2Mix->SetBinContent(hTempPos2Mix->FindBin(binCenter),hTempHelper2Mix->GetBinContent(i+1));
	    hTempPos3Mix->SetBinContent(hTempPos3Mix->FindBin(binCenter),hTempHelper3Mix->GetBinContent(i+1));
	    hTempPos4Mix->SetBinContent(hTempPos4Mix->FindBin(binCenter),hTempHelper4Mix->GetBinContent(i+1));

	    hTempPos1->SetBinError(hTempPos1->FindBin(binCenter),hTempHelper1->GetBinError(i+1));
	    hTempPos2->SetBinError(hTempPos2->FindBin(binCenter),hTempHelper2->GetBinError(i+1));
	    hTempPos3->SetBinError(hTempPos3->FindBin(binCenter),hTempHelper3->GetBinError(i+1));
	    hTempPos4->SetBinError(hTempPos4->FindBin(binCenter),hTempHelper4->GetBinError(i+1));
	    hTempPos1Mix->SetBinError(hTempPos1Mix->FindBin(binCenter),hTempHelper1Mix->GetBinError(i+1));
	    hTempPos2Mix->SetBinError(hTempPos2Mix->FindBin(binCenter),hTempHelper2Mix->GetBinError(i+1));
	    hTempPos3Mix->SetBinError(hTempPos3Mix->FindBin(binCenter),hTempHelper3Mix->GetBinError(i+1));
	    hTempPos4Mix->SetBinError(hTempPos4Mix->FindBin(binCenter),hTempHelper4Mix->GetBinError(i+1));
	  }
	  else{
	    hTemp1->SetBinContent(hTemp1->FindBin(-binCenter),hTempHelper1->GetBinContent(i+1));
	    hTemp2->SetBinContent(hTemp2->FindBin(-binCenter),hTempHelper2->GetBinContent(i+1));
	    hTemp3->SetBinContent(hTemp3->FindBin(-binCenter),hTempHelper3->GetBinContent(i+1));
	    hTemp4->SetBinContent(hTemp4->FindBin(-binCenter),hTempHelper4->GetBinContent(i+1));
	    hTemp1Mix->SetBinContent(hTemp1Mix->FindBin(-binCenter),hTempHelper1Mix->GetBinContent(i+1));
	    hTemp2Mix->SetBinContent(hTemp2Mix->FindBin(-binCenter),hTempHelper2Mix->GetBinContent(i+1));
	    hTemp3Mix->SetBinContent(hTemp3Mix->FindBin(-binCenter),hTempHelper3Mix->GetBinContent(i+1));
	    hTemp4Mix->SetBinContent(hTemp4Mix->FindBin(-binCenter),hTempHelper4Mix->GetBinContent(i+1));

	    hTemp1->SetBinError(hTemp1->FindBin(-binCenter),hTempHelper1->GetBinError(i+1));
	    hTemp2->SetBinError(hTemp2->FindBin(-binCenter),hTempHelper2->GetBinError(i+1));
	    hTemp3->SetBinError(hTemp3->FindBin(-binCenter),hTempHelper3->GetBinError(i+1));
	    hTemp4->SetBinError(hTemp4->FindBin(-binCenter),hTempHelper4->GetBinError(i+1));
	    hTemp1Mix->SetBinError(hTemp1Mix->FindBin(-binCenter),hTempHelper1Mix->GetBinError(i+1));
	    hTemp2Mix->SetBinError(hTemp2Mix->FindBin(-binCenter),hTempHelper2Mix->GetBinError(i+1));
	    hTemp3Mix->SetBinError(hTemp3Mix->FindBin(-binCenter),hTempHelper3Mix->GetBinError(i+1));
	    hTemp4Mix->SetBinError(hTemp4Mix->FindBin(-binCenter),hTempHelper4Mix->GetBinError(i+1));
	  }
	}
	else if(iVariablePair==2){
	  if(binCenter>0 && binCenter<TMath::Pi()){
	    hTempPos1->SetBinContent(hTempPos1->FindBin(binCenter),hTempHelper1->GetBinContent(i+1));
	    hTempPos2->SetBinContent(hTempPos2->FindBin(binCenter),hTempHelper2->GetBinContent(i+1));
	    hTempPos3->SetBinContent(hTempPos3->FindBin(binCenter),hTempHelper3->GetBinContent(i+1));
	    hTempPos4->SetBinContent(hTempPos4->FindBin(binCenter),hTempHelper4->GetBinContent(i+1));
	    hTempPos1Mix->SetBinContent(hTempPos1Mix->FindBin(binCenter),hTempHelper1Mix->GetBinContent(i+1));
	    hTempPos2Mix->SetBinContent(hTempPos2Mix->FindBin(binCenter),hTempHelper2Mix->GetBinContent(i+1));
	    hTempPos3Mix->SetBinContent(hTempPos3Mix->FindBin(binCenter),hTempHelper3Mix->GetBinContent(i+1));
	    hTempPos4Mix->SetBinContent(hTempPos4Mix->FindBin(binCenter),hTempHelper4Mix->GetBinContent(i+1));

	    hTempPos1->SetBinError(hTempPos1->FindBin(binCenter),hTempHelper1->GetBinError(i+1));
	    hTempPos2->SetBinError(hTempPos2->FindBin(binCenter),hTempHelper2->GetBinError(i+1));
	    hTempPos3->SetBinError(hTempPos3->FindBin(binCenter),hTempHelper3->GetBinError(i+1));
	    hTempPos4->SetBinError(hTempPos4->FindBin(binCenter),hTempHelper4->GetBinError(i+1));
	    hTempPos1Mix->SetBinError(hTempPos1Mix->FindBin(binCenter),hTempHelper1Mix->GetBinError(i+1));
	    hTempPos2Mix->SetBinError(hTempPos2Mix->FindBin(binCenter),hTempHelper2Mix->GetBinError(i+1));
	    hTempPos3Mix->SetBinError(hTempPos3Mix->FindBin(binCenter),hTempHelper3Mix->GetBinError(i+1));
	    hTempPos4Mix->SetBinError(hTempPos4Mix->FindBin(binCenter),hTempHelper4Mix->GetBinError(i+1));
	  }
	  else if(binCenter<0){
	    hTemp1->SetBinContent(hTemp1->FindBin(-binCenter),hTempHelper1->GetBinContent(i+1));
	    hTemp2->SetBinContent(hTemp2->FindBin(-binCenter),hTempHelper2->GetBinContent(i+1));
	    hTemp3->SetBinContent(hTemp3->FindBin(-binCenter),hTempHelper3->GetBinContent(i+1));
	    hTemp4->SetBinContent(hTemp4->FindBin(-binCenter),hTempHelper4->GetBinContent(i+1));
	    hTemp1Mix->SetBinContent(hTemp1Mix->FindBin(-binCenter),hTempHelper1Mix->GetBinContent(i+1));
	    hTemp2Mix->SetBinContent(hTemp2Mix->FindBin(-binCenter),hTempHelper2Mix->GetBinContent(i+1));
	    hTemp3Mix->SetBinContent(hTemp3Mix->FindBin(-binCenter),hTempHelper3Mix->GetBinContent(i+1));
	    hTemp4Mix->SetBinContent(hTemp4Mix->FindBin(-binCenter),hTempHelper4Mix->GetBinContent(i+1));

	    hTemp1->SetBinError(hTemp1->FindBin(-binCenter),hTempHelper1->GetBinError(i+1));
	    hTemp2->SetBinError(hTemp2->FindBin(-binCenter),hTempHelper2->GetBinError(i+1));
	    hTemp3->SetBinError(hTemp3->FindBin(-binCenter),hTempHelper3->GetBinError(i+1));
	    hTemp4->SetBinError(hTemp4->FindBin(-binCenter),hTempHelper4->GetBinError(i+1));
	    hTemp1Mix->SetBinError(hTemp1Mix->FindBin(-binCenter),hTempHelper1Mix->GetBinError(i+1));
	    hTemp2Mix->SetBinError(hTemp2Mix->FindBin(-binCenter),hTempHelper2Mix->GetBinError(i+1));
	    hTemp3Mix->SetBinError(hTemp3Mix->FindBin(-binCenter),hTempHelper3Mix->GetBinError(i+1));
	    hTemp4Mix->SetBinError(hTemp4Mix->FindBin(-binCenter),hTempHelper4Mix->GetBinError(i+1));
	  }
	  else{
	    hTemp1->SetBinContent(hTemp1->FindBin(TMath::Pi()-binCenter),hTempHelper1->GetBinContent(i+1));
	    hTemp2->SetBinContent(hTemp2->FindBin(TMath::Pi()-binCenter),hTempHelper2->GetBinContent(i+1));
	    hTemp3->SetBinContent(hTemp3->FindBin(TMath::Pi()-binCenter),hTempHelper3->GetBinContent(i+1));
	    hTemp4->SetBinContent(hTemp4->FindBin(TMath::Pi()-binCenter),hTempHelper4->GetBinContent(i+1));
	    hTemp1Mix->SetBinContent(hTemp1Mix->FindBin(TMath::Pi()-binCenter),hTempHelper1Mix->GetBinContent(i+1));
	    hTemp2Mix->SetBinContent(hTemp2Mix->FindBin(TMath::Pi()-binCenter),hTempHelper2Mix->GetBinContent(i+1));
	    hTemp3Mix->SetBinContent(hTemp3Mix->FindBin(TMath::Pi()-binCenter),hTempHelper3Mix->GetBinContent(i+1));
	    hTemp4Mix->SetBinContent(hTemp4Mix->FindBin(TMath::Pi()-binCenter),hTempHelper4Mix->GetBinContent(i+1));

	    hTemp1->SetBinError(hTemp1->FindBin(TMath::Pi()-binCenter),hTempHelper1->GetBinError(i+1));
	    hTemp2->SetBinError(hTemp2->FindBin(TMath::Pi()-binCenter),hTempHelper2->GetBinError(i+1));
	    hTemp3->SetBinError(hTemp3->FindBin(TMath::Pi()-binCenter),hTempHelper3->GetBinError(i+1));
	    hTemp4->SetBinError(hTemp4->FindBin(TMath::Pi()-binCenter),hTempHelper4->GetBinError(i+1));
	    hTemp1Mix->SetBinError(hTemp1Mix->FindBin(TMath::Pi()-binCenter),hTempHelper1Mix->GetBinError(i+1));
	    hTemp2Mix->SetBinError(hTemp2Mix->FindBin(TMath::Pi()-binCenter),hTempHelper2Mix->GetBinError(i+1));
	    hTemp3Mix->SetBinError(hTemp3Mix->FindBin(TMath::Pi()-binCenter),hTempHelper3Mix->GetBinError(i+1));
	    hTemp4Mix->SetBinError(hTemp4Mix->FindBin(TMath::Pi()-binCenter),hTempHelper4Mix->GetBinError(i+1));
	  }
	}
      }

      hTemp1->Add(hTempPos1);
      hTemp2->Add(hTempPos2);
      hTemp3->Add(hTempPos3);
      hTemp4->Add(hTempPos4);
      hTemp1Mix->Add(hTempPos1Mix);
      hTemp2Mix->Add(hTempPos2Mix);
      hTemp3Mix->Add(hTempPos3Mix);
      hTemp4Mix->Add(hTempPos4Mix);

      hTemp1->Scale(1./hTemp5->Integral());
      hTemp3->Scale(1./hTemp5->Integral());
      hTemp2->Scale(1./hTemp6->Integral());
      hTemp4->Scale(1./hTemp6->Integral());

      // normalization of Event mixing to 1 at (0,0) --> Jan Fietes method
      // does not work here, so normalize also to trigger particles 
      // --> careful: gives different integrals then as with full 2D method 
      hTemp1Mix->Scale(1./hTemp5Mix->Integral());
      hTemp3Mix->Scale(1./hTemp5Mix->Integral());
      hTemp2Mix->Scale(1./hTemp6Mix->Integral());
      hTemp4Mix->Scale(1./hTemp6Mix->Integral());

      hTemp1->Divide(hTemp1Mix);
      hTemp2->Divide(hTemp2Mix);
      hTemp3->Divide(hTemp3Mix);
      hTemp4->Divide(hTemp4Mix);

      // for the first: clone
      if(iBinPsi == binPsiMin && iBinVertex == binVertexMin ){
	h1 = (TH1D*)hTemp1->Clone();
	h2 = (TH1D*)hTemp2->Clone();
	h3 = (TH1D*)hTemp3->Clone();
	h4 = (TH1D*)hTemp4->Clone();
      }
      else{  // otherwise: add for averaging
	h1->Add(hTemp1);
	h2->Add(hTemp2);
	h3->Add(hTemp3);
	h4->Add(hTemp4);
      }

      delete hTemp1;
      delete hTemp2;
      delete hTemp3;
      delete hTemp4;
      delete hTemp1Mix;
      delete hTemp2Mix;
      delete hTemp3Mix;
      delete hTemp4Mix;

      delete hTempPos1;
      delete hTempPos2;
      delete hTempPos3;
      delete hTempPos4;
      delete hTempPos1Mix;
      delete hTempPos2Mix;
      delete hTempPos3Mix;
      delete hTempPos4Mix;
    }
  }

  TH1D *gHistBalanceFunctionHistogram = 0x0;
  if((h1)&&(h2)&&(h3)&&(h4)) {

    // average over number of bins nbinsVertex * nbinsPsi
    h1->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h2->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h3->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h4->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));

    gHistBalanceFunctionHistogram = (TH1D*)h1->Clone();
    gHistBalanceFunctionHistogram->Reset();
    
    switch(iVariablePair) {
    case 1:
      gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#eta");
      gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta#eta)");
      break;
    case 2:
      gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#varphi (rad)");
      gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta#varphi)");
      break;
    default:
      break;
    }

    h1->Add(h3,-1.);
    h2->Add(h4,-1.);

    gHistBalanceFunctionHistogram->Add(h1,h2,1.,1.);
    gHistBalanceFunctionHistogram->Scale(0.5);

    //normalize to bin width
    gHistBalanceFunctionHistogram->Scale(1./((Double_t)gHistBalanceFunctionHistogram->GetXaxis()->GetBinWidth(1)));
  }

  return gHistBalanceFunctionHistogram;
}

//____________________________________________________________________//
TH2D *AliBalancePsi::GetBalanceFunctionDeltaEtaDeltaPhi(Double_t psiMin, 
							Double_t psiMax,
							Double_t vertexZMin,
							Double_t vertexZMax,
							Double_t ptTriggerMin,
							Double_t ptTriggerMax,
							Double_t ptAssociatedMin,
							Double_t ptAssociatedMax) {
  //Returns the BF histogram in Delta eta vs Delta phi, 
  //extracted from the 6 AliTHn objects 
  //(private members) of the AliBalancePsi class.
  //iVariableSingle: 0(phi-Psi), 1(pt-trigger)
  //iVariablePair: 0(phi-Psi) 1(Delta eta), 2(Delta phi), 3(pt-trigger), 4(pt-associated

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  TString histName = "gHistBalanceFunctionHistogram2D";

  // Psi_2
  fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 

  // Vz
  if(fVertexBinning){
    fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
  }

  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  //AliInfo(Form("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0)));

  // Project into the wanted space (1st: analysis step, 2nd: axis)
  TH2D* hTemp1 = (TH2D*)fHistPN->Project(0,1,2);
  TH2D* hTemp2 = (TH2D*)fHistNP->Project(0,1,2);
  TH2D* hTemp3 = (TH2D*)fHistPP->Project(0,1,2);
  TH2D* hTemp4 = (TH2D*)fHistNN->Project(0,1,2);
  TH1D* hTemp5 = (TH1D*)fHistP->Project(0,1);
  TH1D* hTemp6 = (TH1D*)fHistN->Project(0,1);

  TH2D *gHistBalanceFunctionHistogram = 0x0;
  if((hTemp1)&&(hTemp2)&&(hTemp3)&&(hTemp4)&&(hTemp5)&&(hTemp6)) {
    gHistBalanceFunctionHistogram = (TH2D*)hTemp1->Clone();
    gHistBalanceFunctionHistogram->Reset();
    gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#eta");   
    gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("#Delta#varphi (rad)");
    gHistBalanceFunctionHistogram->GetZaxis()->SetTitle("B(#Delta#eta,#Delta#varphi)");   
    
    hTemp1->Sumw2();
    hTemp2->Sumw2();
    hTemp3->Sumw2();
    hTemp4->Sumw2();
    hTemp1->Add(hTemp3,-1.);
    hTemp1->Scale(1./hTemp5->Integral());
    hTemp2->Add(hTemp4,-1.);
    hTemp2->Scale(1./hTemp6->Integral());
    gHistBalanceFunctionHistogram->Add(hTemp1,hTemp2,1.,1.);
    gHistBalanceFunctionHistogram->Scale(0.5);

    //normalize to bin width
    gHistBalanceFunctionHistogram->Scale(1./((Double_t)gHistBalanceFunctionHistogram->GetXaxis()->GetBinWidth(1)*(Double_t)gHistBalanceFunctionHistogram->GetYaxis()->GetBinWidth(1)));
  }

  return gHistBalanceFunctionHistogram;
}

//____________________________________________________________________//
TH2D *AliBalancePsi::GetBalanceFunctionDeltaEtaDeltaPhi2pMethod(Double_t psiMin, 
								Double_t psiMax,
								Double_t vertexZMin,
								Double_t vertexZMax,
								Double_t ptTriggerMin,
								Double_t ptTriggerMax,
								Double_t ptAssociatedMin,
								Double_t ptAssociatedMax,
								AliBalancePsi *bfMix) {
  //Returns the BF histogram in Delta eta vs Delta phi,
  //after dividing each correlation function by the Event Mixing one 
  //extracted from the 6 AliTHn objects 
  //(private members) of the AliBalancePsi class.
  //iVariableSingle: 0(phi-Psi), 1(pt-trigger)
  //iVariablePair: 0(phi-Psi) 1(Delta eta), 2(Delta phi), 3(pt-trigger), 4(pt-associated
  TString histName = "gHistBalanceFunctionHistogram2D";

  if(!bfMix){
    AliError("balance function object for event mixing not available");
    return NULL;
  }

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // pt trigger (fixed for all vertices/psi/centralities)
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated (fixed for all vertices/psi/centralities)
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  // ============================================================================================
  // the same for event mixing
  AliTHn *fHistPMix = bfMix->GetHistNp();
  AliTHn *fHistNMix = bfMix->GetHistNn();
  AliTHn *fHistPNMix = bfMix->GetHistNpn();
  AliTHn *fHistNPMix = bfMix->GetHistNnp();
  AliTHn *fHistPPMix = bfMix->GetHistNpp();
  AliTHn *fHistNNMix = bfMix->GetHistNnn();

  // pt trigger (fixed for all vertices/psi/centralities)
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistPMix->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNMix->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated (fixed for all vertices/psi/centralities)
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  // ============================================================================================
  // ranges (in bins) for vertexZ and centrality (psi)
  Int_t binPsiMin    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMin);
  Int_t binPsiMax    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMax-0.00001);
  Int_t binVertexMin = 0;
  Int_t binVertexMax = 0;
  if(fVertexBinning){
    binVertexMin = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMin);
    binVertexMax = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMax-0.00001);
  }  
  Double_t binPsiLowEdge    = 0.;
  Double_t binPsiUpEdge     = 0.;
  Double_t binVertexLowEdge = 0.;
  Double_t binVertexUpEdge  = 0.;

  TH2D* h1 = NULL;
  TH2D* h2 = NULL;
  TH2D* h3 = NULL;
  TH2D* h4 = NULL;

  // loop over all bins
  for(Int_t iBinPsi = binPsiMin; iBinPsi <= binPsiMax; iBinPsi++){
    for(Int_t iBinVertex = binVertexMin; iBinVertex <= binVertexMax; iBinVertex++){
  
      cout<<"In the balance function (2D) loop: "<<iBinPsi<<" (psiBin), "<<iBinVertex<<" (vertexBin)  "<<endl;

      // determine the bin edges for this bin
      binPsiLowEdge    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->GetBinLowEdge(iBinPsi);
      binPsiUpEdge     = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->GetBinUpEdge(iBinPsi);
      if(fVertexBinning){
	binVertexLowEdge = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->GetBinLowEdge(iBinVertex);
	binVertexUpEdge  = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->GetBinUpEdge(iBinVertex);
      }

      // Psi_2
      fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
  
      // Vz
      if(fVertexBinning){
	fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
      }



      // ============================================================================================
      // the same for event mixing
      
      // Psi_2
      fHistPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(binPsiLowEdge,binPsiUpEdge-0.00001); 
      
      // Vz
      if(fVertexBinning){
	fHistPMix->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNMix->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
	fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(binVertexLowEdge,binVertexUpEdge-0.00001); 
      }
      
      // ============================================================================================
      
      
      //AliInfo(Form("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0)));

      // Project into the wanted space (1st: analysis step, 2nd: axis)
      TH2D* hTemp1 = (TH2D*)fHistPN->Project(0,1,2);
      TH2D* hTemp2 = (TH2D*)fHistNP->Project(0,1,2);
      TH2D* hTemp3 = (TH2D*)fHistPP->Project(0,1,2);
      TH2D* hTemp4 = (TH2D*)fHistNN->Project(0,1,2);
      TH1D* hTemp5 = (TH1D*)fHistP->Project(0,1);
      TH1D* hTemp6 = (TH1D*)fHistN->Project(0,1);
      
      // ============================================================================================
      // the same for event mixing
      TH2D* hTemp1Mix = (TH2D*)fHistPNMix->Project(0,1,2);
      TH2D* hTemp2Mix = (TH2D*)fHistNPMix->Project(0,1,2);
      TH2D* hTemp3Mix = (TH2D*)fHistPPMix->Project(0,1,2);
      TH2D* hTemp4Mix = (TH2D*)fHistNNMix->Project(0,1,2);
      // TH1D* hTemp5Mix = (TH1D*)fHistPMix->Project(0,1);
      // TH1D* hTemp6Mix = (TH1D*)fHistNMix->Project(0,1);
      // ============================================================================================
      
      hTemp1->Sumw2();
      hTemp2->Sumw2();
      hTemp3->Sumw2();
      hTemp4->Sumw2();
      hTemp1Mix->Sumw2();
      hTemp2Mix->Sumw2();
      hTemp3Mix->Sumw2();
      hTemp4Mix->Sumw2();
      
      hTemp1->Scale(1./hTemp5->Integral());
      hTemp3->Scale(1./hTemp5->Integral());
      hTemp2->Scale(1./hTemp6->Integral());
      hTemp4->Scale(1./hTemp6->Integral());

      // normalization of Event mixing to 1 at (0,0) --> Jan Fietes method
      Double_t mixedNorm1 = hTemp1Mix->Integral(hTemp1Mix->GetXaxis()->FindBin(0-10e-5),hTemp1Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp1Mix->GetNbinsX());
      mixedNorm1 /= hTemp1Mix->GetNbinsY()*(hTemp1Mix->GetXaxis()->FindBin(0.01) - hTemp1Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp1Mix->Scale(1./mixedNorm1);
      Double_t mixedNorm2 = hTemp2Mix->Integral(hTemp2Mix->GetXaxis()->FindBin(0-10e-5),hTemp2Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp2Mix->GetNbinsX());
      mixedNorm2 /= hTemp2Mix->GetNbinsY()*(hTemp2Mix->GetXaxis()->FindBin(0.01) - hTemp2Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp2Mix->Scale(1./mixedNorm2);
      Double_t mixedNorm3 = hTemp3Mix->Integral(hTemp3Mix->GetXaxis()->FindBin(0-10e-5),hTemp3Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp3Mix->GetNbinsX());
      mixedNorm3 /= hTemp3Mix->GetNbinsY()*(hTemp3Mix->GetXaxis()->FindBin(0.01) - hTemp3Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp3Mix->Scale(1./mixedNorm3);
      Double_t mixedNorm4 = hTemp4Mix->Integral(hTemp4Mix->GetXaxis()->FindBin(0-10e-5),hTemp4Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp4Mix->GetNbinsX());
      mixedNorm4 /= hTemp4Mix->GetNbinsY()*(hTemp4Mix->GetXaxis()->FindBin(0.01) - hTemp4Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp4Mix->Scale(1./mixedNorm4);
      
      hTemp1->Divide(hTemp1Mix);
      hTemp2->Divide(hTemp2Mix);
      hTemp3->Divide(hTemp3Mix);
      hTemp4->Divide(hTemp4Mix);
      
      // for the first: clone
      if(iBinPsi == binPsiMin && iBinVertex == binVertexMin ){
	h1 = (TH2D*)hTemp1->Clone();
	h2 = (TH2D*)hTemp2->Clone();
	h3 = (TH2D*)hTemp3->Clone();
	h4 = (TH2D*)hTemp4->Clone();
      }
      else{  // otherwise: add for averaging
	h1->Add(hTemp1);
	h2->Add(hTemp2);
	h3->Add(hTemp3);
	h4->Add(hTemp4);
      } 
    }
  }
   
  TH2D *gHistBalanceFunctionHistogram = 0x0;
  if((h1)&&(h2)&&(h3)&&(h4)) {

    // average over number of bins nbinsVertex * nbinsPsi
    h1->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h2->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h3->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h4->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));

    gHistBalanceFunctionHistogram = (TH2D*)h1->Clone();
    gHistBalanceFunctionHistogram->Reset();
    gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#eta");   
    gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("#Delta#varphi (rad)");
    gHistBalanceFunctionHistogram->GetZaxis()->SetTitle("B(#Delta#eta,#Delta#varphi)");   

    h1->Add(h3,-1.);
    h2->Add(h4,-1.);
    
    gHistBalanceFunctionHistogram->Add(h1,h2,1.,1.);
    gHistBalanceFunctionHistogram->Scale(0.5);
    
    //normalize to bin width
    gHistBalanceFunctionHistogram->Scale(1./((Double_t)gHistBalanceFunctionHistogram->GetXaxis()->GetBinWidth(1)*(Double_t)gHistBalanceFunctionHistogram->GetYaxis()->GetBinWidth(1)));
  }
  
  return gHistBalanceFunctionHistogram;
}

//____________________________________________________________________//
TH1D *AliBalancePsi::GetBalanceFunction1DFrom2D2pMethod(Bool_t bPhi,
                                                        Double_t psiMin,
                                                        Double_t psiMax,
							Double_t vertexZMin,
							Double_t vertexZMax,
                                                        Double_t ptTriggerMin,
                                                        Double_t ptTriggerMax,
                                                        Double_t ptAssociatedMin,
                                                        Double_t ptAssociatedMax,
                                                        AliBalancePsi *bfMix) {
  //Returns the BF histogram in Delta eta OR Delta phi,
  //after dividing each correlation function by the Event Mixing one
  // (But the division is done here in 2D, this was basically done to check the Integral)
  //extracted from the 6 AliTHn objects
  //(private members) of the AliBalancePsi class.
  //iVariableSingle: 0(phi-Psi), 1(pt-trigger)
  //iVariablePair: 0(phi-Psi) 1(Delta eta), 2(Delta phi), 3(pt-trigger), 4(pt-associated
  TString histName = "gHistBalanceFunctionHistogram1D";

  if(!bfMix){
    AliError("balance function object for event mixing not available");
    return NULL;
  }

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // pt trigger (fixed for all vertices/psi/centralities)
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated (fixed for all vertices/psi/centralities)
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  // ============================================================================================
  // the same for event mixing
  AliTHn *fHistPMix = bfMix->GetHistNp();
  AliTHn *fHistNMix = bfMix->GetHistNn();
  AliTHn *fHistPNMix = bfMix->GetHistNpn();
  AliTHn *fHistNPMix = bfMix->GetHistNnp();
  AliTHn *fHistPPMix = bfMix->GetHistNpp();
  AliTHn *fHistNNMix = bfMix->GetHistNnn();

  // pt trigger (fixed for all vertices/psi/centralities)
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistPMix->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNMix->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated (fixed for all vertices/psi/centralities)
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)) {
    fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  // ============================================================================================
  // ranges (in bins) for vertexZ and centrality (psi)
  Int_t binPsiMin    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMin);
  Int_t binPsiMax    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMax-0.00001);
  Int_t binVertexMin = 0;
  Int_t binVertexMax = 0;
  if(fVertexBinning){
    binVertexMin = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMin);
    binVertexMax = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMax-0.00001);
  }  

  TH2D* h1 = NULL;
  TH2D* h2 = NULL;
  TH2D* h3 = NULL;
  TH2D* h4 = NULL;

  // loop over all bins
  for(Int_t iBinPsi = binPsiMin; iBinPsi <= binPsiMax; iBinPsi++){
    for(Int_t iBinVertex = binVertexMin; iBinVertex <= binVertexMax; iBinVertex++){
  
      cout<<"In the balance function (2D->1D) loop: "<<iBinPsi<<" (psiBin), "<<iBinVertex<<" (vertexBin)  "<<endl;

      // Psi_2
      fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
  
      // Vz
      if(fVertexBinning){
	fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
      }

      // ============================================================================================
      // the same for event mixing
      
      // Psi_2
      fHistPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);
      fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001);

      // Vz
      if(fVertexBinning){
	fHistPMix->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistNMix->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistPNMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistNPMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistPPMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
	fHistNNMix->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
      }
      // ============================================================================================

      //AliInfo(Form("P:%lf - N:%lf - PN:%lf - NP:%lf - PP:%lf - NN:%lf",fHistP->GetEntries(0),fHistN->GetEntries(0),fHistPN->GetEntries(0),fHistNP->GetEntries(0),fHistPP->GetEntries(0),fHistNN->GetEntries(0)));
      
      // Project into the wanted space (1st: analysis step, 2nd: axis)
      TH2D* hTemp1 = (TH2D*)fHistPN->Project(0,1,2);
      TH2D* hTemp2 = (TH2D*)fHistNP->Project(0,1,2);
      TH2D* hTemp3 = (TH2D*)fHistPP->Project(0,1,2);
      TH2D* hTemp4 = (TH2D*)fHistNN->Project(0,1,2);
      TH1D* hTemp5 = (TH1D*)fHistP->Project(0,1);
      TH1D* hTemp6 = (TH1D*)fHistN->Project(0,1);

      // ============================================================================================
      // the same for event mixing
      TH2D* hTemp1Mix = (TH2D*)fHistPNMix->Project(0,1,2);
      TH2D* hTemp2Mix = (TH2D*)fHistNPMix->Project(0,1,2);
      TH2D* hTemp3Mix = (TH2D*)fHistPPMix->Project(0,1,2);
      TH2D* hTemp4Mix = (TH2D*)fHistNNMix->Project(0,1,2);
      // TH1D* hTemp5Mix = (TH1D*)fHistPMix->Project(0,1);
      // TH1D* hTemp6Mix = (TH1D*)fHistNMix->Project(0,1);
      // ============================================================================================
      
      hTemp1->Sumw2();
      hTemp2->Sumw2();
      hTemp3->Sumw2();
      hTemp4->Sumw2();
      hTemp1Mix->Sumw2();
      hTemp2Mix->Sumw2();
      hTemp3Mix->Sumw2();
      hTemp4Mix->Sumw2();
      
      hTemp1->Scale(1./hTemp5->Integral());
      hTemp3->Scale(1./hTemp5->Integral());
      hTemp2->Scale(1./hTemp6->Integral());
      hTemp4->Scale(1./hTemp6->Integral());

      // normalization of Event mixing to 1 at (0,0) --> Jan Fietes method
      Double_t mixedNorm1 = hTemp1Mix->Integral(hTemp1Mix->GetXaxis()->FindBin(0-10e-5),hTemp1Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp1Mix->GetNbinsX());
      mixedNorm1 /= hTemp1Mix->GetNbinsY()*(hTemp1Mix->GetXaxis()->FindBin(0.01) - hTemp1Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp1Mix->Scale(1./mixedNorm1);
      Double_t mixedNorm2 = hTemp2Mix->Integral(hTemp2Mix->GetXaxis()->FindBin(0-10e-5),hTemp2Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp2Mix->GetNbinsX());
      mixedNorm2 /= hTemp2Mix->GetNbinsY()*(hTemp2Mix->GetXaxis()->FindBin(0.01) - hTemp2Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp2Mix->Scale(1./mixedNorm2);
      Double_t mixedNorm3 = hTemp3Mix->Integral(hTemp3Mix->GetXaxis()->FindBin(0-10e-5),hTemp3Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp3Mix->GetNbinsX());
      mixedNorm3 /= hTemp3Mix->GetNbinsY()*(hTemp3Mix->GetXaxis()->FindBin(0.01) - hTemp3Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp3Mix->Scale(1./mixedNorm3);
      Double_t mixedNorm4 = hTemp4Mix->Integral(hTemp4Mix->GetXaxis()->FindBin(0-10e-5),hTemp4Mix->GetXaxis()->FindBin(0+10e-5),1,hTemp4Mix->GetNbinsX());
      mixedNorm4 /= hTemp4Mix->GetNbinsY()*(hTemp4Mix->GetXaxis()->FindBin(0.01) - hTemp4Mix->GetXaxis()->FindBin(-0.01) + 1);
      hTemp4Mix->Scale(1./mixedNorm4);

      hTemp1->Divide(hTemp1Mix);
      hTemp2->Divide(hTemp2Mix);
      hTemp3->Divide(hTemp3Mix);
      hTemp4->Divide(hTemp4Mix);

      // for the first: clone
      if(iBinPsi == binPsiMin && iBinVertex == binVertexMin ){
	h1 = (TH2D*)hTemp1->Clone();
	h2 = (TH2D*)hTemp2->Clone();
	h3 = (TH2D*)hTemp3->Clone();
	h4 = (TH2D*)hTemp4->Clone();
      }
      else{  // otherwise: add for averaging
	h1->Add(hTemp1);
	h2->Add(hTemp2);
	h3->Add(hTemp3);
	h4->Add(hTemp4);
      }

    }
  }

  TH1D *gHistBalanceFunctionHistogram = 0x0;
  if((h1)&&(h2)&&(h3)&&(h4)) {

    // average over number of bins nbinsVertex * nbinsPsi
    h1->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h2->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h3->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));
    h4->Scale(1./((Double_t)(binPsiMax-binPsiMin+1)*(binVertexMax-binVertexMin+1)));

    // now only project on one axis
    TH1D *h1DTemp1 = NULL;
    TH1D *h1DTemp2 = NULL;
    TH1D *h1DTemp3 = NULL;
    TH1D *h1DTemp4 = NULL;
    if(!bPhi){
      h1DTemp1 = (TH1D*)h1->ProjectionX(Form("%s_projX",h1->GetName()));
      h1DTemp2 = (TH1D*)h2->ProjectionX(Form("%s_projX",h2->GetName()));
      h1DTemp3 = (TH1D*)h3->ProjectionX(Form("%s_projX",h3->GetName()));
      h1DTemp4 = (TH1D*)h4->ProjectionX(Form("%s_projX",h4->GetName()));
    }
    else{
      h1DTemp1 = (TH1D*)h1->ProjectionY(Form("%s_projY",h1->GetName()));
      h1DTemp2 = (TH1D*)h2->ProjectionY(Form("%s_projY",h2->GetName()));
      h1DTemp3 = (TH1D*)h3->ProjectionY(Form("%s_projY",h3->GetName()));
      h1DTemp4 = (TH1D*)h4->ProjectionY(Form("%s_projY",h4->GetName()));
    }

    gHistBalanceFunctionHistogram = (TH1D*)h1DTemp1->Clone(Form("%s_clone",h1DTemp1->GetName()));
    gHistBalanceFunctionHistogram->Reset();
    if(!bPhi){
      gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#eta");  
      gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta#eta)");  
    }
    else{
      gHistBalanceFunctionHistogram->GetXaxis()->SetTitle("#Delta#varphi (rad)");
      gHistBalanceFunctionHistogram->GetYaxis()->SetTitle("B(#Delta#varphi)");  
    }

    h1DTemp1->Add(h1DTemp3,-1.);
    h1DTemp2->Add(h1DTemp4,-1.);

    gHistBalanceFunctionHistogram->Add(h1DTemp1,h1DTemp2,1.,1.);
    gHistBalanceFunctionHistogram->Scale(0.5);

    //normalize to bin width
    gHistBalanceFunctionHistogram->Scale(1./((Double_t)gHistBalanceFunctionHistogram->GetXaxis()->GetBinWidth(1)));
  }

  return gHistBalanceFunctionHistogram;
}


//____________________________________________________________________//
TH2D *AliBalancePsi::GetCorrelationFunction(TString type,
					    Double_t psiMin, 
					    Double_t psiMax,
					    Double_t vertexZMin,
					    Double_t vertexZMax,
					    Double_t ptTriggerMin,
					    Double_t ptTriggerMax,
					    Double_t ptAssociatedMin,
					    Double_t ptAssociatedMax,
					    AliBalancePsi *bMixed,
					    Bool_t normToTrig,
					    Double_t normalizationRangePhi) {

  // Returns the 2D correlation function for "type"(PN,NP,PP,NN) pairs,
  // does the division by event mixing inside,
  // and averaging over several vertexZ and centrality bins

  // security checks
  if(type != "PN" && type != "NP" && type != "PP" && type != "NN" && type != "ALL"){
    AliError("Only types allowed: PN,NP,PP,NN,ALL");
    return NULL;
  }
  if(!bMixed){
    AliError("No Event Mixing AliTHn");
    return NULL;
  }

  TH2D *gHist  = NULL;
  TH2D *fSame  = NULL;
  TH2D *fMixed = NULL;

  // ranges (in bins) for vertexZ and centrality (psi)
  Int_t binPsiMin    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMin+0.00001);
  Int_t binPsiMax    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->FindBin(psiMax-0.00001);
  Int_t binVertexMin = 0;
  Int_t binVertexMax = 0;
  if(fVertexBinning){
    binVertexMin = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMin+0.00001);
    binVertexMax = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->FindBin(vertexZMax-0.00001);
  }  
  Double_t binPsiLowEdge    = 0.;
  Double_t binPsiUpEdge     = 1000.;
  Double_t binVertexLowEdge = 0.;
  Double_t binVertexUpEdge  = 1000.;

  // if event mixing is empty, we can not add that sub bin
  // need to record the number of triggers for correct normalization
  Double_t nTrigSubBinEmpty = 0.;

  // loop over all bins
  for(Int_t iBinPsi = binPsiMin; iBinPsi <= binPsiMax; iBinPsi++){
    for(Int_t iBinVertex = binVertexMin; iBinVertex <= binVertexMax; iBinVertex++){

      //cout<<"In the correlation function loop: "<<iBinPsi<<" (psiBin), "<<iBinVertex<<" (vertexBin)  "<<endl;

      // determine the bin edges for this bin
      binPsiLowEdge    = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->GetBinLowEdge(iBinPsi) + 0.00001;
      binPsiUpEdge     = fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->GetBinUpEdge(iBinPsi) - 0.00001;
      if(fVertexBinning){
	binVertexLowEdge = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->GetBinLowEdge(iBinVertex) + 0.00001;
	binVertexUpEdge  = fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->GetBinUpEdge(iBinVertex) - 0.00001;
      }

      // get the 2D histograms for the correct type
      if(type=="PN"){
	fSame  = GetCorrelationFunctionPN(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
	fMixed = bMixed->GetCorrelationFunctionPN(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
      }
      else if(type=="NP"){
	fSame  = GetCorrelationFunctionNP(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
	fMixed = bMixed->GetCorrelationFunctionNP(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
      }
      else if(type=="PP"){
	fSame  = GetCorrelationFunctionPP(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
	fMixed = bMixed->GetCorrelationFunctionPP(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
      }
      else if(type=="NN"){
	fSame  = GetCorrelationFunctionNN(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
	fMixed = bMixed->GetCorrelationFunctionNN(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
      }
      else if(type=="ALL"){
	fSame  = GetCorrelationFunctionChargeIndependent(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
	fMixed = bMixed->GetCorrelationFunctionChargeIndependent(binPsiLowEdge,binPsiUpEdge,binVertexLowEdge,binVertexUpEdge,ptTriggerMin,ptTriggerMax,ptAssociatedMin,ptAssociatedMax);
      }
    
      if(fMixed && normToTrig && fMixed->Integral()>0){
	
	// normalization of Event mixing to 1 at (0,0) --> Jan Fietes method
	// do it only on away-side (due to two-track cuts): pi +- pi/6.
	Int_t binXmin  = fMixed->GetXaxis()->FindBin(0-10e-5);
	Int_t binXmax  = fMixed->GetXaxis()->FindBin(0+10e-5);
	Double_t binsX = (Double_t)(binXmax - binXmin + 1);
	Int_t binYmin  = fMixed->GetYaxis()->FindBin(TMath::Pi() - normalizationRangePhi);
	Int_t binYmax  = fMixed->GetYaxis()->FindBin(TMath::Pi() + normalizationRangePhi - 0.00001);
	Double_t binsY = (Double_t)(binYmax - binYmin + 1);
	
	Double_t mixedNorm = fMixed->Integral(binXmin,binXmax,binYmin,binYmax);
	mixedNorm /= binsX * binsY;

	// finite bin correction
	Double_t binWidthEta = fMixed->GetXaxis()->GetBinWidth(fMixed->GetNbinsX());
	Double_t maxEta      = fMixed->GetXaxis()->GetBinUpEdge(fMixed->GetNbinsX());
	
	Double_t finiteBinCorrection = -1.0 / (2*maxEta) * binWidthEta / 2 + 1;
	//Printf("Finite bin correction: %f", finiteBinCorrection);
	mixedNorm /= finiteBinCorrection;
	
	fMixed->Scale(1./mixedNorm);
      }

      if(fSame && fMixed){
	// then get the correlation function (divide fSame/fmixed)

	if(fMixed->Integral()>0)
	  fSame->Divide(fMixed);

	// averaging with number of triggers:
	// average over number of triggers in each sub-bin
	Double_t NTrigSubBin = 0;
	if(type=="PN" || type=="PP")
	  NTrigSubBin = (Double_t)(fHistP->Project(0,1)->Integral());
	else if(type=="NP" || type=="NN")
	  NTrigSubBin = (Double_t)(fHistN->Project(0,1)->Integral());
	else if(type=="ALL")
	  NTrigSubBin = (Double_t)(fHistN->Project(0,1)->Integral() + fHistP->Project(0,1)->Integral());
	fSame->Scale(NTrigSubBin);
	
	// only if event mixing has enough statistics
	if(fMixed->Integral()>0){
	  
	  // for the first: clone
	  if( (iBinPsi == binPsiMin && iBinVertex == binVertexMin) || !gHist ){
	    gHist = (TH2D*)fSame->Clone();
	  }
	  else{  // otherwise: add for averaging
	    gHist->Add(fSame);
	  }
	}

	// otherwise record the number of triggers for correct normalization
	else{
	  nTrigSubBinEmpty += NTrigSubBin;
	}

      }
    }
  }

  if(gHist){
    
    // averaging with number of triggers:
    // first set to full range and then obtain number of all triggers 
    Double_t NTrigAll = 0;
    if(type=="PN" || type=="PP"){
      fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
      fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
      fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
      NTrigAll = (Double_t)(fHistP->Project(0,1)->Integral());
    }
    else if(type=="NP" || type=="NN"){
      fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
      fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
      fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
      NTrigAll = (Double_t)(fHistN->Project(0,1)->Integral());
    }
    else if(type=="ALL"){
      fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
      fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
      fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
      fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
      fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
      fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
      NTrigAll = (Double_t)(fHistN->Project(0,1)->Integral() + fHistP->Project(0,1)->Integral());
    }

    // subtract number of triggers with empty sub bins for correct normalization
    NTrigAll -= nTrigSubBinEmpty;

    gHist->Scale(1./NTrigAll);
  }
  
  return gHist;
}


//____________________________________________________________________//
TH2D *AliBalancePsi::GetCorrelationFunctionPN(Double_t psiMin, 
					      Double_t psiMax,
					      Double_t vertexZMin,
					      Double_t vertexZMax,
					      Double_t ptTriggerMin,
					      Double_t ptTriggerMax,
					      Double_t ptAssociatedMin,
					      Double_t ptAssociatedMax) {
  //Returns the 2D correlation function for (+-) pairs

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // Psi_2: axis 0
  fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 

  // Vz
  if(fVertexBinning){
    //Printf("Cutting on Vz...");
    fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
  }

  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);

  //fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(-0.5,2.5); 
  //fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(-0.5,2.5); 

  //TH2D *gHistTest = dynamic_cast<TH2D *>(fHistP->Project(0,0,1));
  //TCanvas *c1 = new TCanvas("c1","");
  //c1->cd();
  //if(!gHistTest){
  //AliError("Projection of fHistP = NULL");
  //return gHistTest;
  //}
  //else{
  //gHistTest->DrawCopy("colz");
  //}

  //0:step, 1: Delta eta, 2: Delta phi
  TH2D *gHist = dynamic_cast<TH2D *>(fHistPN->Project(0,1,2));
  if(!gHist){
    AliError("Projection of fHistPN = NULL");
    return gHist;
  }

  //AliInfo(Form("Entries (test): %lf",(Double_t)(gHistTest->GetEntries())));
  //AliInfo(Form("Entries (1D): %lf",(Double_t)(fHistP->Project(0,1)->GetEntries())));
  //AliInfo(Form("Entries (2D): %lf",(Double_t)(fHistPN->Project(0,1,2)->GetEntries())));
  //AliInfo(Form("Integral (1D): %lf",(Double_t)(fHistP->Project(0,1)->Integral())));
  //AliInfo(Form("Integral (2D): %lf",(Double_t)(fHistPN->Project(0,1,2)->Integral())));
  
  //TCanvas *c2 = new TCanvas("c2","");
  //c2->cd();
  //fHistPN->Project(0,1,2)->DrawCopy("colz");

  if((Double_t)(fHistP->Project(0,1)->Integral())>0)
    gHist->Scale(1./(Double_t)(fHistP->Project(0,1)->Integral()));

  //normalize to bin width
  gHist->Scale(1./((Double_t)gHist->GetXaxis()->GetBinWidth(1)*(Double_t)gHist->GetYaxis()->GetBinWidth(1)));
    
  return gHist;
}

//____________________________________________________________________//
TH2D *AliBalancePsi::GetCorrelationFunctionNP(Double_t psiMin, 
					      Double_t psiMax,
					      Double_t vertexZMin,
					      Double_t vertexZMax,
					      Double_t ptTriggerMin,
					      Double_t ptTriggerMax,
					      Double_t ptAssociatedMin,
					      Double_t ptAssociatedMax) {
  //Returns the 2D correlation function for (+-) pairs

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // Psi_2: axis 0
  fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 

  // Vz
  if(fVertexBinning){
    fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
  }
    
  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);

  //0:step, 1: Delta eta, 2: Delta phi
  TH2D *gHist = dynamic_cast<TH2D *>(fHistNP->Project(0,1,2));
  if(!gHist){
    AliError("Projection of fHistPN = NULL");
    return gHist;
  }

  //Printf("Entries (1D): %lf",(Double_t)(fHistN->Project(0,2)->GetEntries()));
  //Printf("Entries (2D): %lf",(Double_t)(fHistNP->Project(0,2,3)->GetEntries()));
  if((Double_t)(fHistN->Project(0,1)->Integral())>0)
    gHist->Scale(1./(Double_t)(fHistN->Project(0,1)->Integral()));

  //normalize to bin width
  gHist->Scale(1./((Double_t)gHist->GetXaxis()->GetBinWidth(1)*(Double_t)gHist->GetYaxis()->GetBinWidth(1)));
    
  return gHist;
}

//____________________________________________________________________//
TH2D *AliBalancePsi::GetCorrelationFunctionPP(Double_t psiMin, 
					      Double_t psiMax,
					      Double_t vertexZMin,
					      Double_t vertexZMax,
					      Double_t ptTriggerMin,
					      Double_t ptTriggerMax,
					      Double_t ptAssociatedMin,
					      Double_t ptAssociatedMax) {
  //Returns the 2D correlation function for (+-) pairs

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // Psi_2: axis 0
  fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 

  // Vz
  if(fVertexBinning){
    fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
  }

  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
      
  //0:step, 1: Delta eta, 2: Delta phi
  TH2D *gHist = dynamic_cast<TH2D *>(fHistPP->Project(0,1,2));
  if(!gHist){
    AliError("Projection of fHistPN = NULL");
    return gHist;
  }

  //Printf("Entries (1D): %lf",(Double_t)(fHistP->Project(0,2)->GetEntries()));
  //Printf("Entries (2D): %lf",(Double_t)(fHistPP->Project(0,2,3)->GetEntries()));
  if((Double_t)(fHistP->Project(0,1)->Integral())>0)
    gHist->Scale(1./(Double_t)(fHistP->Project(0,1)->Integral()));

  //normalize to bin width
  gHist->Scale(1./((Double_t)gHist->GetXaxis()->GetBinWidth(1)*(Double_t)gHist->GetYaxis()->GetBinWidth(1)));
  
  return gHist;
}

//____________________________________________________________________//
TH2D *AliBalancePsi::GetCorrelationFunctionNN(Double_t psiMin, 
					      Double_t psiMax,
					      Double_t vertexZMin,
					      Double_t vertexZMax,
					      Double_t ptTriggerMin,
					      Double_t ptTriggerMax,
					      Double_t ptAssociatedMin,
					      Double_t ptAssociatedMax) {
  //Returns the 2D correlation function for (+-) pairs

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // Psi_2: axis 0
  fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 

  // Vz
  if(fVertexBinning){
    fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
  }

  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.))
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    
  //0:step, 1: Delta eta, 2: Delta phi
  TH2D *gHist = dynamic_cast<TH2D *>(fHistNN->Project(0,1,2));
  if(!gHist){
    AliError("Projection of fHistPN = NULL");
    return gHist;
  }

  //Printf("Entries (1D): %lf",(Double_t)(fHistN->Project(0,2)->GetEntries()));
  //Printf("Entries (2D): %lf",(Double_t)(fHistNN->Project(0,2,3)->GetEntries()));
  if((Double_t)(fHistN->Project(0,1)->Integral())>0)
    gHist->Scale(1./(Double_t)(fHistN->Project(0,1)->Integral()));

  //normalize to bin width
  gHist->Scale(1./((Double_t)gHist->GetXaxis()->GetBinWidth(1)*(Double_t)gHist->GetYaxis()->GetBinWidth(1)));
    
  return gHist;
}

//____________________________________________________________________//
TH2D *AliBalancePsi::GetCorrelationFunctionChargeIndependent(Double_t psiMin, 
							     Double_t psiMax,
							     Double_t vertexZMin,
							     Double_t vertexZMax,
							     Double_t ptTriggerMin,
							     Double_t ptTriggerMax,
							     Double_t ptAssociatedMin,
							     Double_t ptAssociatedMax) {
  //Returns the 2D correlation function for the sum of all charge combination pairs

  // security checks
  if(psiMin > psiMax-0.00001){
    AliError("psiMax <= psiMin");
    return NULL;
  }
  if(vertexZMin > vertexZMax-0.00001){
    AliError("vertexZMax <= vertexZMin");
    return NULL;
  }
  if(ptTriggerMin > ptTriggerMax-0.00001){
    AliError("ptTriggerMax <= ptTriggerMin");
    return NULL;
  }
  if(ptAssociatedMin > ptAssociatedMax-0.00001){
    AliError("ptAssociatedMax <= ptAssociatedMin");
    return NULL;
  }

  // Psi_2: axis 0
  fHistN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistNP->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
  fHistPN->GetGrid(0)->GetGrid()->GetAxis(0)->SetRangeUser(psiMin,psiMax-0.00001); 
 
  // Vz
  if(fVertexBinning){
    fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(5)->SetRangeUser(vertexZMin,vertexZMax-0.00001); 
  }

  // pt trigger
  if((ptTriggerMin != -1.)&&(ptTriggerMax != -1.)) {
    fHistN->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistP->GetGrid(0)->GetGrid()->GetAxis(1)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRangeUser(ptTriggerMin,ptTriggerMax-0.00001);
  }

  // pt associated
  if((ptAssociatedMin != -1.)&&(ptAssociatedMax != -1.)){
    fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
    fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRangeUser(ptAssociatedMin,ptAssociatedMax-0.00001);
  }

  //0:step, 1: Delta eta, 2: Delta phi
  TH2D *gHistNN = dynamic_cast<TH2D *>(fHistNN->Project(0,1,2));
  if(!gHistNN){
    AliError("Projection of fHistNN = NULL");
    return gHistNN;
  }
  TH2D *gHistPP = dynamic_cast<TH2D *>(fHistPP->Project(0,1,2));
  if(!gHistPP){
    AliError("Projection of fHistPP = NULL");
    return gHistPP;
  }
  TH2D *gHistNP = dynamic_cast<TH2D *>(fHistNP->Project(0,1,2));
  if(!gHistNP){
    AliError("Projection of fHistNP = NULL");
    return gHistNP;
  }
  TH2D *gHistPN = dynamic_cast<TH2D *>(fHistPN->Project(0,1,2));
  if(!gHistPN){
    AliError("Projection of fHistPN = NULL");
    return gHistPN;
  }

  // sum all 2 particle histograms
  gHistNN->Add(gHistPP);
  gHistNN->Add(gHistNP);
  gHistNN->Add(gHistPN);

  // divide by sum of + and - triggers
  if((Double_t)(fHistN->Project(0,1)->Integral())>0 && (Double_t)(fHistP->Project(0,1)->Integral())>0)
    gHistNN->Scale(1./(Double_t)(fHistN->Project(0,1)->Integral() + fHistP->Project(0,1)->Integral()));

  //normalize to bin width
  gHistNN->Scale(1./((Double_t)gHistNN->GetXaxis()->GetBinWidth(1)*(Double_t)gHistNN->GetYaxis()->GetBinWidth(1)));
  
  return gHistNN;
}

//____________________________________________________________________//
Bool_t AliBalancePsi::GetMomentsAnalytical(Int_t fVariable, TH1D* gHist, Bool_t kUseZYAM,
					   Double_t &mean, Double_t &meanError,
					   Double_t &sigma, Double_t &sigmaError,
					   Double_t &skewness, Double_t &skewnessError,
					   Double_t &kurtosis, Double_t &kurtosisError) {
  //
  // helper method to calculate the moments and errors of a TH1D anlytically
  // fVariable = 1 for Delta eta (moments in full range)
  //           = 2 for Delta phi (moments only on near side -pi/2 < dphi < pi/2)
  //
  
  Bool_t success = kFALSE;
  mean          = -1.;
  meanError     = -1.;
  sigma         = -1.;
  sigmaError    = -1.;
  skewness      = -1.;
  skewnessError = -1.;
  kurtosis      = -1.;
  kurtosisError = -1.;

  if(gHist){

    // ----------------------------------------------------------------------
    // basic parameters of histogram

    Int_t fNumberOfBins = gHist->GetNbinsX();
    //    Int_t fBinWidth     = gHist->GetBinWidth(1); // assume equal binning


    // ----------------------------------------------------------------------
    // ZYAM (for partially negative distributions)
    // --> we subtract always the minimum value
    Double_t zeroYield    = 0.;
    Double_t zeroYieldCur = -FLT_MAX;
    if(kUseZYAM){
      for(Int_t iMin = 0; iMin<2; iMin++){
	zeroYieldCur = gHist->GetMinimum(zeroYieldCur);
	zeroYield   += zeroYieldCur;
      }
      zeroYield /= 2.;
      //zeroYield = gHist->GetMinimum();
    }
    // ----------------------------------------------------------------------
    // first calculate the mean

    Double_t fWeightedAverage   = 0.;
    Double_t fNormalization     = 0.;

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

      // for Delta phi: moments only on near side -pi/2 < dphi < pi/2
      if(fVariable == 2 && 
	 (gHist->GetBinCenter(i) < - TMath::Pi()/2 ||
	  gHist->GetBinCenter(i) > TMath::Pi()/2)){
	continue;
      }

      fWeightedAverage   += (gHist->GetBinContent(i)-zeroYield) * gHist->GetBinCenter(i);
      fNormalization     += (gHist->GetBinContent(i)-zeroYield);
    }  
    
    mean = fWeightedAverage / fNormalization;

    // ----------------------------------------------------------------------
    // then calculate the higher moments

    Double_t fMu  = 0.;
    Double_t fMu2 = 0.;
    Double_t fMu3 = 0.;
    Double_t fMu4 = 0.;
    Double_t fMu5 = 0.;
    Double_t fMu6 = 0.;
    Double_t fMu7 = 0.;
    Double_t fMu8 = 0.;

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

      // for Delta phi: moments only on near side -pi/2 < dphi < pi/2
      if(fVariable == 2 && 
	 (gHist->GetBinCenter(i) < - TMath::Pi()/2 ||
	  gHist->GetBinCenter(i) > TMath::Pi()/2)){
	continue;
      }

      fMu  += (gHist->GetBinContent(i)-zeroYield) * (gHist->GetBinCenter(i) - mean);
      fMu2 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),2);
      fMu3 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),3);
      fMu4 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),4);
      fMu5 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),5);
      fMu6 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),6);
      fMu7 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),7);
      fMu8 += (gHist->GetBinContent(i)-zeroYield) * TMath::Power((gHist->GetBinCenter(i) - mean),8);
    }

    // normalize to bin entries!
    fMu  /= fNormalization;    
    fMu2 /= fNormalization;    
    fMu3 /= fNormalization;    
    fMu4 /= fNormalization;    
    fMu5 /= fNormalization;    
    fMu6 /= fNormalization;    
    fMu7 /= fNormalization;    
    fMu8 /= fNormalization;    

    sigma    = TMath::Sqrt(fMu2);
    skewness = fMu3 / TMath::Power(sigma,3);
    kurtosis = fMu4 / TMath::Power(sigma,4) - 3;

    // normalize with sigma^r
    fMu  /= TMath::Power(sigma,1);    
    fMu2 /= TMath::Power(sigma,2);    
    fMu3 /= TMath::Power(sigma,3);    
    fMu4 /= TMath::Power(sigma,4);    
    fMu5 /= TMath::Power(sigma,5);    
    fMu6 /= TMath::Power(sigma,6);    
    fMu7 /= TMath::Power(sigma,7);    
    fMu8 /= TMath::Power(sigma,8);    
  
    // ----------------------------------------------------------------------
    // then calculate the higher moment errors
    // cout<<fNormalization<<" "<<gHist->GetEffectiveEntries()<<" "<<gHist->Integral()<<endl;
    // cout<<gHist->GetMean()<<" "<<gHist->GetRMS()<<" "<<gHist->GetSkewness(1)<<" "<<gHist->GetKurtosis(1)<<endl;
    // cout<<gHist->GetMeanError()<<" "<<gHist->GetRMSError()<<" "<<gHist->GetSkewness(11)<<" "<<gHist->GetKurtosis(11)<<endl;

    Double_t normError = gHist->GetEffectiveEntries(); //gives the "ROOT" meanError

    // // assuming normal distribution (as done in ROOT)
    // meanError     = sigma / TMath::Sqrt(normError); 
    // sigmaError    = TMath::Sqrt(sigma*sigma/(2*normError));
    // skewnessError = TMath::Sqrt(6./(normError));
    // kurtosisError = TMath::Sqrt(24./(normError));

    // use delta theorem paper (Luo - arXiv:1109.0593v1)
    Double_t Lambda11 = TMath::Abs((fMu4-1)*sigma*sigma/(4*normError));
    Double_t Lambda22 = TMath::Abs((9-6*fMu4+fMu3*fMu3*(35+9*fMu4)/4-3*fMu3*fMu5+fMu6)/normError);
    Double_t Lambda33 = TMath::Abs((-fMu4*fMu4+4*fMu4*fMu4*fMu4+16*fMu3*fMu3*(1+fMu4)-8*fMu3*fMu5-4*fMu4*fMu6+fMu8)/normError);
    //Double_t Lambda12 = -(fMu3*(5+3*fMu4)-2*fMu5)*sigma/(4*normError);
    //Double_t Lambda13 = ((-4*fMu3*fMu3+fMu4-2*fMu4*fMu4+fMu6)*sigma)/(2*normError);
    //Double_t Lambda23 = (6*fMu3*fMu3*fMu3-(3+2*fMu4)*fMu5+3*fMu3*(8+fMu4+2*fMu4*fMu4-fMu6)/2+fMu7)/normError;

    // cout<<Lambda11<<" "<<Lambda22<<" "<<Lambda33<<" "<<endl;
    // cout<<Lambda12<<" "<<Lambda13<<" "<<Lambda23<<" "<<endl;

    if (TMath::Sqrt(normError) != 0){
      meanError        = sigma / TMath::Sqrt(normError); 
      sigmaError       = TMath::Sqrt(Lambda11);
      skewnessError    = TMath::Sqrt(Lambda22);
      kurtosisError    = TMath::Sqrt(Lambda33);

      success = kTRUE;    
	  
    }
    else success = kFALSE;
  
  }
  return success;
}


//____________________________________________________________________//
Float_t AliBalancePsi::GetDPhiStar(Float_t phi1, Float_t pt1, Float_t charge1, Float_t phi2, Float_t pt2, Float_t charge2, Float_t radius, Float_t bSign) { 
  //
  // calculates dphistar
  //
  Float_t dphistar = phi1 - phi2 - charge1 * bSign * TMath::ASin(0.075 * radius / pt1) + charge2 * bSign * TMath::ASin(0.075 * radius / pt2);
  
  static const Double_t kPi = TMath::Pi();
  
  // circularity
//   if (dphistar > 2 * kPi)
//     dphistar -= 2 * kPi;
//   if (dphistar < -2 * kPi)
//     dphistar += 2 * kPi;
  
  if (dphistar > kPi)
    dphistar = kPi * 2 - dphistar;
  if (dphistar < -kPi)
    dphistar = -kPi * 2 - dphistar;
  if (dphistar > kPi) // might look funny but is needed
    dphistar = kPi * 2 - dphistar;
  
  return dphistar;
}

//____________________________________________________________________//
Double_t* AliBalancePsi::GetBinning(const char* configuration, const char* tag, Int_t& nBins)
{
  // This method is a copy from AliUEHist::GetBinning
  // takes the binning from <configuration> identified by <tag>
  // configuration syntax example:
  // eta: 2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4
  // phi: .....
  //
  // returns bin edges which have to be deleted by the caller
  
  TString config(configuration);
  TObjArray* lines = config.Tokenize("\n");
  for (Int_t i=0; i<lines->GetEntriesFast(); i++)
  {
    TString line(lines->At(i)->GetName());
    if (line.BeginsWith(TString(tag) + ":"))
    {
      line.Remove(0, strlen(tag) + 1);
      line.ReplaceAll(" ", "");
      TObjArray* binning = line.Tokenize(",");
      Double_t* bins = new Double_t[binning->GetEntriesFast()];
      for (Int_t j=0; j<binning->GetEntriesFast(); j++)
	bins[j] = TString(binning->At(j)->GetName()).Atof();
      
      nBins = binning->GetEntriesFast() - 1;

      delete binning;
      delete lines;
      return bins;
    }
  }
  
  delete lines;
  AliFatal(Form("Tag %s not found in %s", tag, configuration));
  return 0;
}

//____________________________________________________________________//
Double_t AliBalancePsi::GetFWHM(Int_t gDeltaEtaPhi, TH1D* gHist,
				Double_t &fwhm_spline, Double_t &fwhmError) {
 
  // helper method to calculate the fwhm and errors of a TH1D 
  if(gHist){
    Int_t repeat = 10000;
    
    if (gDeltaEtaPhi == 1){ 
      fwhm_spline  = 0.;
      fwhmError    = 0.;
      gHist->Smooth(4); 

      Double_t xmin = gHist->GetXaxis()->GetXmin();
      Double_t xmax = gHist->GetXaxis()->GetXmax();
      
      //+++++++FWHM TSpline+++++++++++++++++++++++++++//
      TSpline3 *spline3 = new TSpline3(gHist,"b2e2",0,0); 
      spline3->SetLineColor(kGreen+2); 
      spline3->SetLineWidth(2);
      //spline3->Draw("SAME");
      
      Int_t Nbin = gHist->GetNbinsX();
      Int_t bin_max_hist_y = gHist->GetMaximumBin();
      Double_t bins_center_x = gHist->GetBinCenter(bin_max_hist_y);
      Double_t max_spline = spline3->Eval(bins_center_x);      
      Double_t y_spline = -999;
      Double_t y_spline_r = -999;
      Double_t x_spline_l = -999;
      Double_t x_spline_r = -999;
      
      for (Int_t i= 0; i < bin_max_hist_y*1000; i++){
	y_spline = spline3->Eval(xmin + i*(bins_center_x - xmin)/ (bin_max_hist_y*1000));
	if (y_spline > max_spline/2){
	  x_spline_l = xmin + (i-1)*(bins_center_x - xmin)/(bin_max_hist_y*1000);
	  break;
	}
      } 
      for (Int_t j= 0; j < bin_max_hist_y*1000; j++){
	y_spline_r = spline3->Eval(bins_center_x + j*(xmax - bins_center_x)/(bin_max_hist_y*1000));
	if (y_spline_r < max_spline/2){
	  x_spline_r = bins_center_x + j*(xmax - bins_center_x)/(bin_max_hist_y*1000);
	  break;
	}
      }   
      fwhm_spline = x_spline_r - x_spline_l;
      //+++++++FWHM TSpline++++++++++++++++++++++++//
    
      //+++++++Error Calculation SPLINE++++++++++++//
      Double_t dmeans,dsigmas;
      TSpline3 *spline1;  
      Int_t bin_max_hist_y1;
      Double_t bins_center_x1;
      Double_t max_spline1;
      Double_t y_spline1 = - 999.; 
      Double_t y_spline_r1 = - 999.; 
      Double_t x_spline_l1 = -999.; 
      Double_t x_spline_r1 = -999.;
      Double_t fwhm_spline1 = 0.;
      Double_t fwhm_T = 0.;  
 
      TH1F *hEmpty2 = new TH1F("hEmpty2","hEmpty2",Nbin,xmin,xmax);
      TRandom3 *rgauss = new TRandom3(0);      
      TH1F *hists = new TH1F("hists","hists",1000,1.,3);
      
      for (Int_t f=0; f<repeat; f++){ //100
	for (Int_t h=0; h<Nbin+1; h++){	  
	  dmeans = gHist->GetBinContent(h);
	  dsigmas = gHist->GetBinError(h);
	  Double_t rgauss_point = rgauss->Gaus(dmeans,dsigmas);
	  hEmpty2->SetBinContent(h,rgauss_point);
	  
	  //++++++++++++//  
	  hEmpty2->Smooth(4);   
	  //++++++++++++//
	}           
	spline1 = new TSpline3(hEmpty2,"b2e2",0,0); 
	spline1->SetLineColor(kMagenta+1); 
	spline1->SetLineWidth(1);
	//spline1->Draw("SAME");  
	
	bin_max_hist_y1 = hEmpty2->GetMaximumBin();
	bins_center_x1 = hEmpty2->GetBinCenter(bin_max_hist_y1);
	max_spline1 = spline1->Eval(bins_center_x1);
	
	for (Int_t i= 0; i < bin_max_hist_y1*1000; i++){
	  y_spline1 = spline3->Eval(xmin + i*(bins_center_x1 - xmin)/ (bin_max_hist_y1*1000));
	  if (y_spline1 > max_spline1/2){
	    x_spline_l1 = xmin + (i-1)*(bins_center_x1 - xmin)/(bin_max_hist_y1*1000);
	    break;
	  }
	} 
	for (Int_t j= 0; j < bin_max_hist_y1*1000; j++){
	  y_spline_r1 = spline3->Eval(bins_center_x1 + j*(xmax - bins_center_x1)/(bin_max_hist_y1*1000));
	  if (y_spline_r1 < max_spline1/2){
	    x_spline_r1 = bins_center_x1 + j*(xmax - bins_center_x1)/(bin_max_hist_y1*1000);
	    break;
	  }
	}     
	
	fwhm_spline1 = x_spline_r1 - x_spline_l1;
	hists->Fill(fwhm_spline1);   
	fwhm_T += (fwhm_spline - fwhm_spline1)*(fwhm_spline - fwhm_spline1); 
      }
     
      fwhmError = TMath::Sqrt(TMath::Abs(fwhm_T/(repeat-1)));
      //+++++++Error Calculation SPLINE+++++++++++//
    }
    else{  
      fwhm_spline  = 0.;
      fwhmError    = 0.;
      gHist->Smooth(4);
      
      Double_t xmin = gHist->GetXaxis()->GetXmin();
      Double_t xmax = gHist->GetXaxis()->GetXmax();
      
      //+++++++FWHM TSpline+++++++++++++++++++++++++++//
      TSpline3 *spline3 = new TSpline3(gHist,"b2e2",0,0); 
      spline3->SetLineColor(kGreen+2); 
      spline3->SetLineWidth(2);
      //spline3->Draw("SAME");  
      
      Int_t Nbin = gHist->GetNbinsX();
      Int_t bin_max_hist_y = gHist->GetMaximumBin();
      Double_t bins_center_x = gHist->GetBinCenter(bin_max_hist_y);
      Double_t max_spline = spline3->Eval(bins_center_x);
      
      Int_t bin_min_hist_y = gHist->GetMinimumBin();
      Double_t bins_center_xmin = gHist->GetBinCenter(bin_min_hist_y);
      Double_t min_spline = spline3->Eval(bins_center_xmin);
      
      Double_t y_spline = -999.;
      Double_t y_spline_r = -999.;
      Double_t x_spline_l = -999.;
      Double_t x_spline_r = -999.;
      
      for (Int_t i= 0; i < bin_max_hist_y*1000; i++){
	y_spline = spline3->Eval(xmin + i*(bins_center_x - xmin)/ (bin_max_hist_y*1000));
	if (y_spline > (max_spline+min_spline)/2){
	  x_spline_l = xmin + (i-1)*(bins_center_x - xmin)/(bin_max_hist_y*1000);
	  break;
	}
      } 
      for (Int_t j= 0; j < bin_max_hist_y*1000; j++){
	y_spline_r = spline3->Eval(bins_center_x + j*(xmax - bins_center_x)/(bin_max_hist_y*1000));
	if (y_spline_r < (max_spline+min_spline)/2){
	  x_spline_r = bins_center_x + j*(xmax - bins_center_x)/(bin_max_hist_y*1000);
	  break;
	}
      }   
      fwhm_spline = x_spline_r - x_spline_l;
      //+++++++FWHM TSpline++++++++++++++++++++++++//
      
      //+++++++Error Calculation SPLINE++++++++++++//
      Double_t dmeans,dsigmas;
      TSpline3 *spline1;  
      Int_t bin_max_hist_y1;
      Double_t bins_center_x1;
      Double_t max_spline1;
      Double_t y_spline1 = -999.;
      Double_t y_spline_r1 = -999.;
      Double_t x_spline_l1 = -999.;
      Double_t x_spline_r1 = -999.;
      Double_t fwhm_spline1 = 0.;
      Double_t fwhm_T = 0.;   

      TH1F *hEmpty2 = new TH1F("hEmpty2","hEmpty2",Nbin,xmin,xmax);
      TRandom3 *rgauss = new TRandom3(0);      
      Int_t bin_min_hist_y1; 
      Double_t bins_center_xmin1,min_spline1;
      
      for (Int_t f=0; f<repeat; f++){ //100
	for (Int_t h=0; h<Nbin+1; h++){	  
	  dmeans = gHist->GetBinContent(h);
	  dsigmas = gHist->GetBinError(h);
	  Double_t rgauss_point = rgauss->Gaus(dmeans,dsigmas);
	  hEmpty2->SetBinContent(h,rgauss_point);
	  
	  //++++++++++++//  
	  hEmpty2->Smooth(4);   
	  //++++++++++++//
	}           
	spline1 = new TSpline3(hEmpty2,"b2e2",0,0); 
	spline1->SetLineColor(kMagenta+1); 
	spline1->SetLineWidth(1);
	//spline1->Draw("SAME");  
	
	bin_max_hist_y1 = hEmpty2->GetMaximumBin();
	bins_center_x1 = hEmpty2->GetBinCenter(bin_max_hist_y1);
	max_spline1 = spline1->Eval(bins_center_x1);
	
	bin_min_hist_y1 = hEmpty2->GetMinimumBin();
	bins_center_xmin1 = hEmpty2->GetBinCenter(bin_min_hist_y1);
	min_spline1 = spline1->Eval(bins_center_xmin1);
	
	for (Int_t i= 0; i < bin_max_hist_y1*1000; i++){
	  y_spline1 = spline3->Eval(xmin + i*(bins_center_x1 - xmin)/ (bin_max_hist_y1*1000));
	  if (y_spline1 > (max_spline1+min_spline1)/2){
	    x_spline_l1 = xmin + (i-1)*(bins_center_x1 - xmin)/(bin_max_hist_y1*1000);
	    break;
	  }
	} 
	for (Int_t j= 0; j < bin_max_hist_y1*1000; j++){
	  y_spline_r1 = spline3->Eval(bins_center_x1 + j*(xmax - bins_center_x1)/(bin_max_hist_y1*1000));
	  if (y_spline_r1 < (max_spline1+min_spline1)/2){
	    x_spline_r1 = bins_center_x1 + j*(xmax - bins_center_x1)/(bin_max_hist_y1*1000);
	    break;
	  }
	}     
	
	fwhm_spline1 = x_spline_r1 - x_spline_l1; 
	fwhm_T += (fwhm_spline - fwhm_spline1)*(fwhm_spline - fwhm_spline1);    
      }           
      fwhmError = TMath::Sqrt(TMath::Abs(fwhm_T/(repeat-1)));
    }
  }
  return fwhm_spline;
}
 AliBalancePsi.cxx:1
 AliBalancePsi.cxx:2
 AliBalancePsi.cxx:3
 AliBalancePsi.cxx:4
 AliBalancePsi.cxx:5
 AliBalancePsi.cxx:6
 AliBalancePsi.cxx:7
 AliBalancePsi.cxx:8
 AliBalancePsi.cxx:9
 AliBalancePsi.cxx:10
 AliBalancePsi.cxx:11
 AliBalancePsi.cxx:12
 AliBalancePsi.cxx:13
 AliBalancePsi.cxx:14
 AliBalancePsi.cxx:15
 AliBalancePsi.cxx:16
 AliBalancePsi.cxx:17
 AliBalancePsi.cxx:18
 AliBalancePsi.cxx:19
 AliBalancePsi.cxx:20
 AliBalancePsi.cxx:21
 AliBalancePsi.cxx:22
 AliBalancePsi.cxx:23
 AliBalancePsi.cxx:24
 AliBalancePsi.cxx:25
 AliBalancePsi.cxx:26
 AliBalancePsi.cxx:27
 AliBalancePsi.cxx:28
 AliBalancePsi.cxx:29
 AliBalancePsi.cxx:30
 AliBalancePsi.cxx:31
 AliBalancePsi.cxx:32
 AliBalancePsi.cxx:33
 AliBalancePsi.cxx:34
 AliBalancePsi.cxx:35
 AliBalancePsi.cxx:36
 AliBalancePsi.cxx:37
 AliBalancePsi.cxx:38
 AliBalancePsi.cxx:39
 AliBalancePsi.cxx:40
 AliBalancePsi.cxx:41
 AliBalancePsi.cxx:42
 AliBalancePsi.cxx:43
 AliBalancePsi.cxx:44
 AliBalancePsi.cxx:45
 AliBalancePsi.cxx:46
 AliBalancePsi.cxx:47
 AliBalancePsi.cxx:48
 AliBalancePsi.cxx:49
 AliBalancePsi.cxx:50
 AliBalancePsi.cxx:51
 AliBalancePsi.cxx:52
 AliBalancePsi.cxx:53
 AliBalancePsi.cxx:54
 AliBalancePsi.cxx:55
 AliBalancePsi.cxx:56
 AliBalancePsi.cxx:57
 AliBalancePsi.cxx:58
 AliBalancePsi.cxx:59
 AliBalancePsi.cxx:60
 AliBalancePsi.cxx:61
 AliBalancePsi.cxx:62
 AliBalancePsi.cxx:63
 AliBalancePsi.cxx:64
 AliBalancePsi.cxx:65
 AliBalancePsi.cxx:66
 AliBalancePsi.cxx:67
 AliBalancePsi.cxx:68
 AliBalancePsi.cxx:69
 AliBalancePsi.cxx:70
 AliBalancePsi.cxx:71
 AliBalancePsi.cxx:72
 AliBalancePsi.cxx:73
 AliBalancePsi.cxx:74
 AliBalancePsi.cxx:75
 AliBalancePsi.cxx:76
 AliBalancePsi.cxx:77
 AliBalancePsi.cxx:78
 AliBalancePsi.cxx:79
 AliBalancePsi.cxx:80
 AliBalancePsi.cxx:81
 AliBalancePsi.cxx:82
 AliBalancePsi.cxx:83
 AliBalancePsi.cxx:84
 AliBalancePsi.cxx:85
 AliBalancePsi.cxx:86
 AliBalancePsi.cxx:87
 AliBalancePsi.cxx:88
 AliBalancePsi.cxx:89
 AliBalancePsi.cxx:90
 AliBalancePsi.cxx:91
 AliBalancePsi.cxx:92
 AliBalancePsi.cxx:93
 AliBalancePsi.cxx:94
 AliBalancePsi.cxx:95
 AliBalancePsi.cxx:96
 AliBalancePsi.cxx:97
 AliBalancePsi.cxx:98
 AliBalancePsi.cxx:99
 AliBalancePsi.cxx:100
 AliBalancePsi.cxx:101
 AliBalancePsi.cxx:102
 AliBalancePsi.cxx:103
 AliBalancePsi.cxx:104
 AliBalancePsi.cxx:105
 AliBalancePsi.cxx:106
 AliBalancePsi.cxx:107
 AliBalancePsi.cxx:108
 AliBalancePsi.cxx:109
 AliBalancePsi.cxx:110
 AliBalancePsi.cxx:111
 AliBalancePsi.cxx:112
 AliBalancePsi.cxx:113
 AliBalancePsi.cxx:114
 AliBalancePsi.cxx:115
 AliBalancePsi.cxx:116
 AliBalancePsi.cxx:117
 AliBalancePsi.cxx:118
 AliBalancePsi.cxx:119
 AliBalancePsi.cxx:120
 AliBalancePsi.cxx:121
 AliBalancePsi.cxx:122
 AliBalancePsi.cxx:123
 AliBalancePsi.cxx:124
 AliBalancePsi.cxx:125
 AliBalancePsi.cxx:126
 AliBalancePsi.cxx:127
 AliBalancePsi.cxx:128
 AliBalancePsi.cxx:129
 AliBalancePsi.cxx:130
 AliBalancePsi.cxx:131
 AliBalancePsi.cxx:132
 AliBalancePsi.cxx:133
 AliBalancePsi.cxx:134
 AliBalancePsi.cxx:135
 AliBalancePsi.cxx:136
 AliBalancePsi.cxx:137
 AliBalancePsi.cxx:138
 AliBalancePsi.cxx:139
 AliBalancePsi.cxx:140
 AliBalancePsi.cxx:141
 AliBalancePsi.cxx:142
 AliBalancePsi.cxx:143
 AliBalancePsi.cxx:144
 AliBalancePsi.cxx:145
 AliBalancePsi.cxx:146
 AliBalancePsi.cxx:147
 AliBalancePsi.cxx:148
 AliBalancePsi.cxx:149
 AliBalancePsi.cxx:150
 AliBalancePsi.cxx:151
 AliBalancePsi.cxx:152
 AliBalancePsi.cxx:153
 AliBalancePsi.cxx:154
 AliBalancePsi.cxx:155
 AliBalancePsi.cxx:156
 AliBalancePsi.cxx:157
 AliBalancePsi.cxx:158
 AliBalancePsi.cxx:159
 AliBalancePsi.cxx:160
 AliBalancePsi.cxx:161
 AliBalancePsi.cxx:162
 AliBalancePsi.cxx:163
 AliBalancePsi.cxx:164
 AliBalancePsi.cxx:165
 AliBalancePsi.cxx:166
 AliBalancePsi.cxx:167
 AliBalancePsi.cxx:168
 AliBalancePsi.cxx:169
 AliBalancePsi.cxx:170
 AliBalancePsi.cxx:171
 AliBalancePsi.cxx:172
 AliBalancePsi.cxx:173
 AliBalancePsi.cxx:174
 AliBalancePsi.cxx:175
 AliBalancePsi.cxx:176
 AliBalancePsi.cxx:177
 AliBalancePsi.cxx:178
 AliBalancePsi.cxx:179
 AliBalancePsi.cxx:180
 AliBalancePsi.cxx:181
 AliBalancePsi.cxx:182
 AliBalancePsi.cxx:183
 AliBalancePsi.cxx:184
 AliBalancePsi.cxx:185
 AliBalancePsi.cxx:186
 AliBalancePsi.cxx:187
 AliBalancePsi.cxx:188
 AliBalancePsi.cxx:189
 AliBalancePsi.cxx:190
 AliBalancePsi.cxx:191
 AliBalancePsi.cxx:192
 AliBalancePsi.cxx:193
 AliBalancePsi.cxx:194
 AliBalancePsi.cxx:195
 AliBalancePsi.cxx:196
 AliBalancePsi.cxx:197
 AliBalancePsi.cxx:198
 AliBalancePsi.cxx:199
 AliBalancePsi.cxx:200
 AliBalancePsi.cxx:201
 AliBalancePsi.cxx:202
 AliBalancePsi.cxx:203
 AliBalancePsi.cxx:204
 AliBalancePsi.cxx:205
 AliBalancePsi.cxx:206
 AliBalancePsi.cxx:207
 AliBalancePsi.cxx:208
 AliBalancePsi.cxx:209
 AliBalancePsi.cxx:210
 AliBalancePsi.cxx:211
 AliBalancePsi.cxx:212
 AliBalancePsi.cxx:213
 AliBalancePsi.cxx:214
 AliBalancePsi.cxx:215
 AliBalancePsi.cxx:216
 AliBalancePsi.cxx:217
 AliBalancePsi.cxx:218
 AliBalancePsi.cxx:219
 AliBalancePsi.cxx:220
 AliBalancePsi.cxx:221
 AliBalancePsi.cxx:222
 AliBalancePsi.cxx:223
 AliBalancePsi.cxx:224
 AliBalancePsi.cxx:225
 AliBalancePsi.cxx:226
 AliBalancePsi.cxx:227
 AliBalancePsi.cxx:228
 AliBalancePsi.cxx:229
 AliBalancePsi.cxx:230
 AliBalancePsi.cxx:231
 AliBalancePsi.cxx:232
 AliBalancePsi.cxx:233
 AliBalancePsi.cxx:234
 AliBalancePsi.cxx:235
 AliBalancePsi.cxx:236
 AliBalancePsi.cxx:237
 AliBalancePsi.cxx:238
 AliBalancePsi.cxx:239
 AliBalancePsi.cxx:240
 AliBalancePsi.cxx:241
 AliBalancePsi.cxx:242
 AliBalancePsi.cxx:243
 AliBalancePsi.cxx:244
 AliBalancePsi.cxx:245
 AliBalancePsi.cxx:246
 AliBalancePsi.cxx:247
 AliBalancePsi.cxx:248
 AliBalancePsi.cxx:249
 AliBalancePsi.cxx:250
 AliBalancePsi.cxx:251
 AliBalancePsi.cxx:252
 AliBalancePsi.cxx:253
 AliBalancePsi.cxx:254
 AliBalancePsi.cxx:255
 AliBalancePsi.cxx:256
 AliBalancePsi.cxx:257
 AliBalancePsi.cxx:258
 AliBalancePsi.cxx:259
 AliBalancePsi.cxx:260
 AliBalancePsi.cxx:261
 AliBalancePsi.cxx:262
 AliBalancePsi.cxx:263
 AliBalancePsi.cxx:264
 AliBalancePsi.cxx:265
 AliBalancePsi.cxx:266
 AliBalancePsi.cxx:267
 AliBalancePsi.cxx:268
 AliBalancePsi.cxx:269
 AliBalancePsi.cxx:270
 AliBalancePsi.cxx:271
 AliBalancePsi.cxx:272
 AliBalancePsi.cxx:273
 AliBalancePsi.cxx:274
 AliBalancePsi.cxx:275
 AliBalancePsi.cxx:276
 AliBalancePsi.cxx:277
 AliBalancePsi.cxx:278
 AliBalancePsi.cxx:279
 AliBalancePsi.cxx:280
 AliBalancePsi.cxx:281
 AliBalancePsi.cxx:282
 AliBalancePsi.cxx:283
 AliBalancePsi.cxx:284
 AliBalancePsi.cxx:285
 AliBalancePsi.cxx:286
 AliBalancePsi.cxx:287
 AliBalancePsi.cxx:288
 AliBalancePsi.cxx:289
 AliBalancePsi.cxx:290
 AliBalancePsi.cxx:291
 AliBalancePsi.cxx:292
 AliBalancePsi.cxx:293
 AliBalancePsi.cxx:294
 AliBalancePsi.cxx:295
 AliBalancePsi.cxx:296
 AliBalancePsi.cxx:297
 AliBalancePsi.cxx:298
 AliBalancePsi.cxx:299
 AliBalancePsi.cxx:300
 AliBalancePsi.cxx:301
 AliBalancePsi.cxx:302
 AliBalancePsi.cxx:303
 AliBalancePsi.cxx:304
 AliBalancePsi.cxx:305
 AliBalancePsi.cxx:306
 AliBalancePsi.cxx:307
 AliBalancePsi.cxx:308
 AliBalancePsi.cxx:309
 AliBalancePsi.cxx:310
 AliBalancePsi.cxx:311
 AliBalancePsi.cxx:312
 AliBalancePsi.cxx:313
 AliBalancePsi.cxx:314
 AliBalancePsi.cxx:315
 AliBalancePsi.cxx:316
 AliBalancePsi.cxx:317
 AliBalancePsi.cxx:318
 AliBalancePsi.cxx:319
 AliBalancePsi.cxx:320
 AliBalancePsi.cxx:321
 AliBalancePsi.cxx:322
 AliBalancePsi.cxx:323
 AliBalancePsi.cxx:324
 AliBalancePsi.cxx:325
 AliBalancePsi.cxx:326
 AliBalancePsi.cxx:327
 AliBalancePsi.cxx:328
 AliBalancePsi.cxx:329
 AliBalancePsi.cxx:330
 AliBalancePsi.cxx:331
 AliBalancePsi.cxx:332
 AliBalancePsi.cxx:333
 AliBalancePsi.cxx:334
 AliBalancePsi.cxx:335
 AliBalancePsi.cxx:336
 AliBalancePsi.cxx:337
 AliBalancePsi.cxx:338
 AliBalancePsi.cxx:339
 AliBalancePsi.cxx:340
 AliBalancePsi.cxx:341
 AliBalancePsi.cxx:342
 AliBalancePsi.cxx:343
 AliBalancePsi.cxx:344
 AliBalancePsi.cxx:345
 AliBalancePsi.cxx:346
 AliBalancePsi.cxx:347
 AliBalancePsi.cxx:348
 AliBalancePsi.cxx:349
 AliBalancePsi.cxx:350
 AliBalancePsi.cxx:351
 AliBalancePsi.cxx:352
 AliBalancePsi.cxx:353
 AliBalancePsi.cxx:354
 AliBalancePsi.cxx:355
 AliBalancePsi.cxx:356
 AliBalancePsi.cxx:357
 AliBalancePsi.cxx:358
 AliBalancePsi.cxx:359
 AliBalancePsi.cxx:360
 AliBalancePsi.cxx:361
 AliBalancePsi.cxx:362
 AliBalancePsi.cxx:363
 AliBalancePsi.cxx:364
 AliBalancePsi.cxx:365
 AliBalancePsi.cxx:366
 AliBalancePsi.cxx:367
 AliBalancePsi.cxx:368
 AliBalancePsi.cxx:369
 AliBalancePsi.cxx:370
 AliBalancePsi.cxx:371
 AliBalancePsi.cxx:372
 AliBalancePsi.cxx:373
 AliBalancePsi.cxx:374
 AliBalancePsi.cxx:375
 AliBalancePsi.cxx:376
 AliBalancePsi.cxx:377
 AliBalancePsi.cxx:378
 AliBalancePsi.cxx:379
 AliBalancePsi.cxx:380
 AliBalancePsi.cxx:381
 AliBalancePsi.cxx:382
 AliBalancePsi.cxx:383
 AliBalancePsi.cxx:384
 AliBalancePsi.cxx:385
 AliBalancePsi.cxx:386
 AliBalancePsi.cxx:387
 AliBalancePsi.cxx:388
 AliBalancePsi.cxx:389
 AliBalancePsi.cxx:390
 AliBalancePsi.cxx:391
 AliBalancePsi.cxx:392
 AliBalancePsi.cxx:393
 AliBalancePsi.cxx:394
 AliBalancePsi.cxx:395
 AliBalancePsi.cxx:396
 AliBalancePsi.cxx:397
 AliBalancePsi.cxx:398
 AliBalancePsi.cxx:399
 AliBalancePsi.cxx:400
 AliBalancePsi.cxx:401
 AliBalancePsi.cxx:402
 AliBalancePsi.cxx:403
 AliBalancePsi.cxx:404
 AliBalancePsi.cxx:405
 AliBalancePsi.cxx:406
 AliBalancePsi.cxx:407
 AliBalancePsi.cxx:408
 AliBalancePsi.cxx:409
 AliBalancePsi.cxx:410
 AliBalancePsi.cxx:411
 AliBalancePsi.cxx:412
 AliBalancePsi.cxx:413
 AliBalancePsi.cxx:414
 AliBalancePsi.cxx:415
 AliBalancePsi.cxx:416
 AliBalancePsi.cxx:417
 AliBalancePsi.cxx:418
 AliBalancePsi.cxx:419
 AliBalancePsi.cxx:420
 AliBalancePsi.cxx:421
 AliBalancePsi.cxx:422
 AliBalancePsi.cxx:423
 AliBalancePsi.cxx:424
 AliBalancePsi.cxx:425
 AliBalancePsi.cxx:426
 AliBalancePsi.cxx:427
 AliBalancePsi.cxx:428
 AliBalancePsi.cxx:429
 AliBalancePsi.cxx:430
 AliBalancePsi.cxx:431
 AliBalancePsi.cxx:432
 AliBalancePsi.cxx:433
 AliBalancePsi.cxx:434
 AliBalancePsi.cxx:435
 AliBalancePsi.cxx:436
 AliBalancePsi.cxx:437
 AliBalancePsi.cxx:438
 AliBalancePsi.cxx:439
 AliBalancePsi.cxx:440
 AliBalancePsi.cxx:441
 AliBalancePsi.cxx:442
 AliBalancePsi.cxx:443
 AliBalancePsi.cxx:444
 AliBalancePsi.cxx:445
 AliBalancePsi.cxx:446
 AliBalancePsi.cxx:447
 AliBalancePsi.cxx:448
 AliBalancePsi.cxx:449
 AliBalancePsi.cxx:450
 AliBalancePsi.cxx:451
 AliBalancePsi.cxx:452
 AliBalancePsi.cxx:453
 AliBalancePsi.cxx:454
 AliBalancePsi.cxx:455
 AliBalancePsi.cxx:456
 AliBalancePsi.cxx:457
 AliBalancePsi.cxx:458
 AliBalancePsi.cxx:459
 AliBalancePsi.cxx:460
 AliBalancePsi.cxx:461
 AliBalancePsi.cxx:462
 AliBalancePsi.cxx:463
 AliBalancePsi.cxx:464
 AliBalancePsi.cxx:465
 AliBalancePsi.cxx:466
 AliBalancePsi.cxx:467
 AliBalancePsi.cxx:468
 AliBalancePsi.cxx:469
 AliBalancePsi.cxx:470
 AliBalancePsi.cxx:471
 AliBalancePsi.cxx:472
 AliBalancePsi.cxx:473
 AliBalancePsi.cxx:474
 AliBalancePsi.cxx:475
 AliBalancePsi.cxx:476
 AliBalancePsi.cxx:477
 AliBalancePsi.cxx:478
 AliBalancePsi.cxx:479
 AliBalancePsi.cxx:480
 AliBalancePsi.cxx:481
 AliBalancePsi.cxx:482
 AliBalancePsi.cxx:483
 AliBalancePsi.cxx:484
 AliBalancePsi.cxx:485
 AliBalancePsi.cxx:486
 AliBalancePsi.cxx:487
 AliBalancePsi.cxx:488
 AliBalancePsi.cxx:489
 AliBalancePsi.cxx:490
 AliBalancePsi.cxx:491
 AliBalancePsi.cxx:492
 AliBalancePsi.cxx:493
 AliBalancePsi.cxx:494
 AliBalancePsi.cxx:495
 AliBalancePsi.cxx:496
 AliBalancePsi.cxx:497
 AliBalancePsi.cxx:498
 AliBalancePsi.cxx:499
 AliBalancePsi.cxx:500
 AliBalancePsi.cxx:501
 AliBalancePsi.cxx:502
 AliBalancePsi.cxx:503
 AliBalancePsi.cxx:504
 AliBalancePsi.cxx:505
 AliBalancePsi.cxx:506
 AliBalancePsi.cxx:507
 AliBalancePsi.cxx:508
 AliBalancePsi.cxx:509
 AliBalancePsi.cxx:510
 AliBalancePsi.cxx:511
 AliBalancePsi.cxx:512
 AliBalancePsi.cxx:513
 AliBalancePsi.cxx:514
 AliBalancePsi.cxx:515
 AliBalancePsi.cxx:516
 AliBalancePsi.cxx:517
 AliBalancePsi.cxx:518
 AliBalancePsi.cxx:519
 AliBalancePsi.cxx:520
 AliBalancePsi.cxx:521
 AliBalancePsi.cxx:522
 AliBalancePsi.cxx:523
 AliBalancePsi.cxx:524
 AliBalancePsi.cxx:525
 AliBalancePsi.cxx:526
 AliBalancePsi.cxx:527
 AliBalancePsi.cxx:528
 AliBalancePsi.cxx:529
 AliBalancePsi.cxx:530
 AliBalancePsi.cxx:531
 AliBalancePsi.cxx:532
 AliBalancePsi.cxx:533
 AliBalancePsi.cxx:534
 AliBalancePsi.cxx:535
 AliBalancePsi.cxx:536
 AliBalancePsi.cxx:537
 AliBalancePsi.cxx:538
 AliBalancePsi.cxx:539
 AliBalancePsi.cxx:540
 AliBalancePsi.cxx:541
 AliBalancePsi.cxx:542
 AliBalancePsi.cxx:543
 AliBalancePsi.cxx:544
 AliBalancePsi.cxx:545
 AliBalancePsi.cxx:546
 AliBalancePsi.cxx:547
 AliBalancePsi.cxx:548
 AliBalancePsi.cxx:549
 AliBalancePsi.cxx:550
 AliBalancePsi.cxx:551
 AliBalancePsi.cxx:552
 AliBalancePsi.cxx:553
 AliBalancePsi.cxx:554
 AliBalancePsi.cxx:555
 AliBalancePsi.cxx:556
 AliBalancePsi.cxx:557
 AliBalancePsi.cxx:558
 AliBalancePsi.cxx:559
 AliBalancePsi.cxx:560
 AliBalancePsi.cxx:561
 AliBalancePsi.cxx:562
 AliBalancePsi.cxx:563
 AliBalancePsi.cxx:564
 AliBalancePsi.cxx:565
 AliBalancePsi.cxx:566
 AliBalancePsi.cxx:567
 AliBalancePsi.cxx:568
 AliBalancePsi.cxx:569
 AliBalancePsi.cxx:570
 AliBalancePsi.cxx:571
 AliBalancePsi.cxx:572
 AliBalancePsi.cxx:573
 AliBalancePsi.cxx:574
 AliBalancePsi.cxx:575
 AliBalancePsi.cxx:576
 AliBalancePsi.cxx:577
 AliBalancePsi.cxx:578
 AliBalancePsi.cxx:579
 AliBalancePsi.cxx:580
 AliBalancePsi.cxx:581
 AliBalancePsi.cxx:582
 AliBalancePsi.cxx:583
 AliBalancePsi.cxx:584
 AliBalancePsi.cxx:585
 AliBalancePsi.cxx:586
 AliBalancePsi.cxx:587
 AliBalancePsi.cxx:588
 AliBalancePsi.cxx:589
 AliBalancePsi.cxx:590
 AliBalancePsi.cxx:591
 AliBalancePsi.cxx:592
 AliBalancePsi.cxx:593
 AliBalancePsi.cxx:594
 AliBalancePsi.cxx:595
 AliBalancePsi.cxx:596
 AliBalancePsi.cxx:597
 AliBalancePsi.cxx:598
 AliBalancePsi.cxx:599
 AliBalancePsi.cxx:600
 AliBalancePsi.cxx:601
 AliBalancePsi.cxx:602
 AliBalancePsi.cxx:603
 AliBalancePsi.cxx:604
 AliBalancePsi.cxx:605
 AliBalancePsi.cxx:606
 AliBalancePsi.cxx:607
 AliBalancePsi.cxx:608
 AliBalancePsi.cxx:609
 AliBalancePsi.cxx:610
 AliBalancePsi.cxx:611
 AliBalancePsi.cxx:612
 AliBalancePsi.cxx:613
 AliBalancePsi.cxx:614
 AliBalancePsi.cxx:615
 AliBalancePsi.cxx:616
 AliBalancePsi.cxx:617
 AliBalancePsi.cxx:618
 AliBalancePsi.cxx:619
 AliBalancePsi.cxx:620
 AliBalancePsi.cxx:621
 AliBalancePsi.cxx:622
 AliBalancePsi.cxx:623
 AliBalancePsi.cxx:624
 AliBalancePsi.cxx:625
 AliBalancePsi.cxx:626
 AliBalancePsi.cxx:627
 AliBalancePsi.cxx:628
 AliBalancePsi.cxx:629
 AliBalancePsi.cxx:630
 AliBalancePsi.cxx:631
 AliBalancePsi.cxx:632
 AliBalancePsi.cxx:633
 AliBalancePsi.cxx:634
 AliBalancePsi.cxx:635
 AliBalancePsi.cxx:636
 AliBalancePsi.cxx:637
 AliBalancePsi.cxx:638
 AliBalancePsi.cxx:639
 AliBalancePsi.cxx:640
 AliBalancePsi.cxx:641
 AliBalancePsi.cxx:642
 AliBalancePsi.cxx:643
 AliBalancePsi.cxx:644
 AliBalancePsi.cxx:645
 AliBalancePsi.cxx:646
 AliBalancePsi.cxx:647
 AliBalancePsi.cxx:648
 AliBalancePsi.cxx:649
 AliBalancePsi.cxx:650
 AliBalancePsi.cxx:651
 AliBalancePsi.cxx:652
 AliBalancePsi.cxx:653
 AliBalancePsi.cxx:654
 AliBalancePsi.cxx:655
 AliBalancePsi.cxx:656
 AliBalancePsi.cxx:657
 AliBalancePsi.cxx:658
 AliBalancePsi.cxx:659
 AliBalancePsi.cxx:660
 AliBalancePsi.cxx:661
 AliBalancePsi.cxx:662
 AliBalancePsi.cxx:663
 AliBalancePsi.cxx:664
 AliBalancePsi.cxx:665
 AliBalancePsi.cxx:666
 AliBalancePsi.cxx:667
 AliBalancePsi.cxx:668
 AliBalancePsi.cxx:669
 AliBalancePsi.cxx:670
 AliBalancePsi.cxx:671
 AliBalancePsi.cxx:672
 AliBalancePsi.cxx:673
 AliBalancePsi.cxx:674
 AliBalancePsi.cxx:675
 AliBalancePsi.cxx:676
 AliBalancePsi.cxx:677
 AliBalancePsi.cxx:678
 AliBalancePsi.cxx:679
 AliBalancePsi.cxx:680
 AliBalancePsi.cxx:681
 AliBalancePsi.cxx:682
 AliBalancePsi.cxx:683
 AliBalancePsi.cxx:684
 AliBalancePsi.cxx:685
 AliBalancePsi.cxx:686
 AliBalancePsi.cxx:687
 AliBalancePsi.cxx:688
 AliBalancePsi.cxx:689
 AliBalancePsi.cxx:690
 AliBalancePsi.cxx:691
 AliBalancePsi.cxx:692
 AliBalancePsi.cxx:693
 AliBalancePsi.cxx:694
 AliBalancePsi.cxx:695
 AliBalancePsi.cxx:696
 AliBalancePsi.cxx:697
 AliBalancePsi.cxx:698
 AliBalancePsi.cxx:699
 AliBalancePsi.cxx:700
 AliBalancePsi.cxx:701
 AliBalancePsi.cxx:702
 AliBalancePsi.cxx:703
 AliBalancePsi.cxx:704
 AliBalancePsi.cxx:705
 AliBalancePsi.cxx:706
 AliBalancePsi.cxx:707
 AliBalancePsi.cxx:708
 AliBalancePsi.cxx:709
 AliBalancePsi.cxx:710
 AliBalancePsi.cxx:711
 AliBalancePsi.cxx:712
 AliBalancePsi.cxx:713
 AliBalancePsi.cxx:714
 AliBalancePsi.cxx:715
 AliBalancePsi.cxx:716
 AliBalancePsi.cxx:717
 AliBalancePsi.cxx:718
 AliBalancePsi.cxx:719
 AliBalancePsi.cxx:720
 AliBalancePsi.cxx:721
 AliBalancePsi.cxx:722
 AliBalancePsi.cxx:723
 AliBalancePsi.cxx:724
 AliBalancePsi.cxx:725
 AliBalancePsi.cxx:726
 AliBalancePsi.cxx:727
 AliBalancePsi.cxx:728
 AliBalancePsi.cxx:729
 AliBalancePsi.cxx:730
 AliBalancePsi.cxx:731
 AliBalancePsi.cxx:732
 AliBalancePsi.cxx:733
 AliBalancePsi.cxx:734
 AliBalancePsi.cxx:735
 AliBalancePsi.cxx:736
 AliBalancePsi.cxx:737
 AliBalancePsi.cxx:738
 AliBalancePsi.cxx:739
 AliBalancePsi.cxx:740
 AliBalancePsi.cxx:741
 AliBalancePsi.cxx:742
 AliBalancePsi.cxx:743
 AliBalancePsi.cxx:744
 AliBalancePsi.cxx:745
 AliBalancePsi.cxx:746
 AliBalancePsi.cxx:747
 AliBalancePsi.cxx:748
 AliBalancePsi.cxx:749
 AliBalancePsi.cxx:750
 AliBalancePsi.cxx:751
 AliBalancePsi.cxx:752
 AliBalancePsi.cxx:753
 AliBalancePsi.cxx:754
 AliBalancePsi.cxx:755
 AliBalancePsi.cxx:756
 AliBalancePsi.cxx:757
 AliBalancePsi.cxx:758
 AliBalancePsi.cxx:759
 AliBalancePsi.cxx:760
 AliBalancePsi.cxx:761
 AliBalancePsi.cxx:762
 AliBalancePsi.cxx:763
 AliBalancePsi.cxx:764
 AliBalancePsi.cxx:765
 AliBalancePsi.cxx:766
 AliBalancePsi.cxx:767
 AliBalancePsi.cxx:768
 AliBalancePsi.cxx:769
 AliBalancePsi.cxx:770
 AliBalancePsi.cxx:771
 AliBalancePsi.cxx:772
 AliBalancePsi.cxx:773
 AliBalancePsi.cxx:774
 AliBalancePsi.cxx:775
 AliBalancePsi.cxx:776
 AliBalancePsi.cxx:777
 AliBalancePsi.cxx:778
 AliBalancePsi.cxx:779
 AliBalancePsi.cxx:780
 AliBalancePsi.cxx:781
 AliBalancePsi.cxx:782
 AliBalancePsi.cxx:783
 AliBalancePsi.cxx:784
 AliBalancePsi.cxx:785
 AliBalancePsi.cxx:786
 AliBalancePsi.cxx:787
 AliBalancePsi.cxx:788
 AliBalancePsi.cxx:789
 AliBalancePsi.cxx:790
 AliBalancePsi.cxx:791
 AliBalancePsi.cxx:792
 AliBalancePsi.cxx:793
 AliBalancePsi.cxx:794
 AliBalancePsi.cxx:795
 AliBalancePsi.cxx:796
 AliBalancePsi.cxx:797
 AliBalancePsi.cxx:798
 AliBalancePsi.cxx:799
 AliBalancePsi.cxx:800
 AliBalancePsi.cxx:801
 AliBalancePsi.cxx:802
 AliBalancePsi.cxx:803
 AliBalancePsi.cxx:804
 AliBalancePsi.cxx:805
 AliBalancePsi.cxx:806
 AliBalancePsi.cxx:807
 AliBalancePsi.cxx:808
 AliBalancePsi.cxx:809
 AliBalancePsi.cxx:810
 AliBalancePsi.cxx:811
 AliBalancePsi.cxx:812
 AliBalancePsi.cxx:813
 AliBalancePsi.cxx:814
 AliBalancePsi.cxx:815
 AliBalancePsi.cxx:816
 AliBalancePsi.cxx:817
 AliBalancePsi.cxx:818
 AliBalancePsi.cxx:819
 AliBalancePsi.cxx:820
 AliBalancePsi.cxx:821
 AliBalancePsi.cxx:822
 AliBalancePsi.cxx:823
 AliBalancePsi.cxx:824
 AliBalancePsi.cxx:825
 AliBalancePsi.cxx:826
 AliBalancePsi.cxx:827
 AliBalancePsi.cxx:828
 AliBalancePsi.cxx:829
 AliBalancePsi.cxx:830
 AliBalancePsi.cxx:831
 AliBalancePsi.cxx:832
 AliBalancePsi.cxx:833
 AliBalancePsi.cxx:834
 AliBalancePsi.cxx:835
 AliBalancePsi.cxx:836
 AliBalancePsi.cxx:837
 AliBalancePsi.cxx:838
 AliBalancePsi.cxx:839
 AliBalancePsi.cxx:840
 AliBalancePsi.cxx:841
 AliBalancePsi.cxx:842
 AliBalancePsi.cxx:843
 AliBalancePsi.cxx:844
 AliBalancePsi.cxx:845
 AliBalancePsi.cxx:846
 AliBalancePsi.cxx:847
 AliBalancePsi.cxx:848
 AliBalancePsi.cxx:849
 AliBalancePsi.cxx:850
 AliBalancePsi.cxx:851
 AliBalancePsi.cxx:852
 AliBalancePsi.cxx:853
 AliBalancePsi.cxx:854
 AliBalancePsi.cxx:855
 AliBalancePsi.cxx:856
 AliBalancePsi.cxx:857
 AliBalancePsi.cxx:858
 AliBalancePsi.cxx:859
 AliBalancePsi.cxx:860
 AliBalancePsi.cxx:861
 AliBalancePsi.cxx:862
 AliBalancePsi.cxx:863
 AliBalancePsi.cxx:864
 AliBalancePsi.cxx:865
 AliBalancePsi.cxx:866
 AliBalancePsi.cxx:867
 AliBalancePsi.cxx:868
 AliBalancePsi.cxx:869
 AliBalancePsi.cxx:870
 AliBalancePsi.cxx:871
 AliBalancePsi.cxx:872
 AliBalancePsi.cxx:873
 AliBalancePsi.cxx:874
 AliBalancePsi.cxx:875
 AliBalancePsi.cxx:876
 AliBalancePsi.cxx:877
 AliBalancePsi.cxx:878
 AliBalancePsi.cxx:879
 AliBalancePsi.cxx:880
 AliBalancePsi.cxx:881
 AliBalancePsi.cxx:882
 AliBalancePsi.cxx:883
 AliBalancePsi.cxx:884
 AliBalancePsi.cxx:885
 AliBalancePsi.cxx:886
 AliBalancePsi.cxx:887
 AliBalancePsi.cxx:888
 AliBalancePsi.cxx:889
 AliBalancePsi.cxx:890
 AliBalancePsi.cxx:891
 AliBalancePsi.cxx:892
 AliBalancePsi.cxx:893
 AliBalancePsi.cxx:894
 AliBalancePsi.cxx:895
 AliBalancePsi.cxx:896
 AliBalancePsi.cxx:897
 AliBalancePsi.cxx:898
 AliBalancePsi.cxx:899
 AliBalancePsi.cxx:900
 AliBalancePsi.cxx:901
 AliBalancePsi.cxx:902
 AliBalancePsi.cxx:903
 AliBalancePsi.cxx:904
 AliBalancePsi.cxx:905
 AliBalancePsi.cxx:906
 AliBalancePsi.cxx:907
 AliBalancePsi.cxx:908
 AliBalancePsi.cxx:909
 AliBalancePsi.cxx:910
 AliBalancePsi.cxx:911
 AliBalancePsi.cxx:912
 AliBalancePsi.cxx:913
 AliBalancePsi.cxx:914
 AliBalancePsi.cxx:915
 AliBalancePsi.cxx:916
 AliBalancePsi.cxx:917
 AliBalancePsi.cxx:918
 AliBalancePsi.cxx:919
 AliBalancePsi.cxx:920
 AliBalancePsi.cxx:921
 AliBalancePsi.cxx:922
 AliBalancePsi.cxx:923
 AliBalancePsi.cxx:924
 AliBalancePsi.cxx:925
 AliBalancePsi.cxx:926
 AliBalancePsi.cxx:927
 AliBalancePsi.cxx:928
 AliBalancePsi.cxx:929
 AliBalancePsi.cxx:930
 AliBalancePsi.cxx:931
 AliBalancePsi.cxx:932
 AliBalancePsi.cxx:933
 AliBalancePsi.cxx:934
 AliBalancePsi.cxx:935
 AliBalancePsi.cxx:936
 AliBalancePsi.cxx:937
 AliBalancePsi.cxx:938
 AliBalancePsi.cxx:939
 AliBalancePsi.cxx:940
 AliBalancePsi.cxx:941
 AliBalancePsi.cxx:942
 AliBalancePsi.cxx:943
 AliBalancePsi.cxx:944
 AliBalancePsi.cxx:945
 AliBalancePsi.cxx:946
 AliBalancePsi.cxx:947
 AliBalancePsi.cxx:948
 AliBalancePsi.cxx:949
 AliBalancePsi.cxx:950
 AliBalancePsi.cxx:951
 AliBalancePsi.cxx:952
 AliBalancePsi.cxx:953
 AliBalancePsi.cxx:954
 AliBalancePsi.cxx:955
 AliBalancePsi.cxx:956
 AliBalancePsi.cxx:957
 AliBalancePsi.cxx:958
 AliBalancePsi.cxx:959
 AliBalancePsi.cxx:960
 AliBalancePsi.cxx:961
 AliBalancePsi.cxx:962
 AliBalancePsi.cxx:963
 AliBalancePsi.cxx:964
 AliBalancePsi.cxx:965
 AliBalancePsi.cxx:966
 AliBalancePsi.cxx:967
 AliBalancePsi.cxx:968
 AliBalancePsi.cxx:969
 AliBalancePsi.cxx:970
 AliBalancePsi.cxx:971
 AliBalancePsi.cxx:972
 AliBalancePsi.cxx:973
 AliBalancePsi.cxx:974
 AliBalancePsi.cxx:975
 AliBalancePsi.cxx:976
 AliBalancePsi.cxx:977
 AliBalancePsi.cxx:978
 AliBalancePsi.cxx:979
 AliBalancePsi.cxx:980
 AliBalancePsi.cxx:981
 AliBalancePsi.cxx:982
 AliBalancePsi.cxx:983
 AliBalancePsi.cxx:984
 AliBalancePsi.cxx:985
 AliBalancePsi.cxx:986
 AliBalancePsi.cxx:987
 AliBalancePsi.cxx:988
 AliBalancePsi.cxx:989
 AliBalancePsi.cxx:990
 AliBalancePsi.cxx:991
 AliBalancePsi.cxx:992
 AliBalancePsi.cxx:993
 AliBalancePsi.cxx:994
 AliBalancePsi.cxx:995
 AliBalancePsi.cxx:996
 AliBalancePsi.cxx:997
 AliBalancePsi.cxx:998
 AliBalancePsi.cxx:999
 AliBalancePsi.cxx:1000
 AliBalancePsi.cxx:1001
 AliBalancePsi.cxx:1002
 AliBalancePsi.cxx:1003
 AliBalancePsi.cxx:1004
 AliBalancePsi.cxx:1005
 AliBalancePsi.cxx:1006
 AliBalancePsi.cxx:1007
 AliBalancePsi.cxx:1008
 AliBalancePsi.cxx:1009
 AliBalancePsi.cxx:1010
 AliBalancePsi.cxx:1011
 AliBalancePsi.cxx:1012
 AliBalancePsi.cxx:1013
 AliBalancePsi.cxx:1014
 AliBalancePsi.cxx:1015
 AliBalancePsi.cxx:1016
 AliBalancePsi.cxx:1017
 AliBalancePsi.cxx:1018
 AliBalancePsi.cxx:1019
 AliBalancePsi.cxx:1020
 AliBalancePsi.cxx:1021
 AliBalancePsi.cxx:1022
 AliBalancePsi.cxx:1023
 AliBalancePsi.cxx:1024
 AliBalancePsi.cxx:1025
 AliBalancePsi.cxx:1026
 AliBalancePsi.cxx:1027
 AliBalancePsi.cxx:1028
 AliBalancePsi.cxx:1029
 AliBalancePsi.cxx:1030
 AliBalancePsi.cxx:1031
 AliBalancePsi.cxx:1032
 AliBalancePsi.cxx:1033
 AliBalancePsi.cxx:1034
 AliBalancePsi.cxx:1035
 AliBalancePsi.cxx:1036
 AliBalancePsi.cxx:1037
 AliBalancePsi.cxx:1038
 AliBalancePsi.cxx:1039
 AliBalancePsi.cxx:1040
 AliBalancePsi.cxx:1041
 AliBalancePsi.cxx:1042
 AliBalancePsi.cxx:1043
 AliBalancePsi.cxx:1044
 AliBalancePsi.cxx:1045
 AliBalancePsi.cxx:1046
 AliBalancePsi.cxx:1047
 AliBalancePsi.cxx:1048
 AliBalancePsi.cxx:1049
 AliBalancePsi.cxx:1050
 AliBalancePsi.cxx:1051
 AliBalancePsi.cxx:1052
 AliBalancePsi.cxx:1053
 AliBalancePsi.cxx:1054
 AliBalancePsi.cxx:1055
 AliBalancePsi.cxx:1056
 AliBalancePsi.cxx:1057
 AliBalancePsi.cxx:1058
 AliBalancePsi.cxx:1059
 AliBalancePsi.cxx:1060
 AliBalancePsi.cxx:1061
 AliBalancePsi.cxx:1062
 AliBalancePsi.cxx:1063
 AliBalancePsi.cxx:1064
 AliBalancePsi.cxx:1065
 AliBalancePsi.cxx:1066
 AliBalancePsi.cxx:1067
 AliBalancePsi.cxx:1068
 AliBalancePsi.cxx:1069
 AliBalancePsi.cxx:1070
 AliBalancePsi.cxx:1071
 AliBalancePsi.cxx:1072
 AliBalancePsi.cxx:1073
 AliBalancePsi.cxx:1074
 AliBalancePsi.cxx:1075
 AliBalancePsi.cxx:1076
 AliBalancePsi.cxx:1077
 AliBalancePsi.cxx:1078
 AliBalancePsi.cxx:1079
 AliBalancePsi.cxx:1080
 AliBalancePsi.cxx:1081
 AliBalancePsi.cxx:1082
 AliBalancePsi.cxx:1083
 AliBalancePsi.cxx:1084
 AliBalancePsi.cxx:1085
 AliBalancePsi.cxx:1086
 AliBalancePsi.cxx:1087
 AliBalancePsi.cxx:1088
 AliBalancePsi.cxx:1089
 AliBalancePsi.cxx:1090
 AliBalancePsi.cxx:1091
 AliBalancePsi.cxx:1092
 AliBalancePsi.cxx:1093
 AliBalancePsi.cxx:1094
 AliBalancePsi.cxx:1095
 AliBalancePsi.cxx:1096
 AliBalancePsi.cxx:1097
 AliBalancePsi.cxx:1098
 AliBalancePsi.cxx:1099
 AliBalancePsi.cxx:1100
 AliBalancePsi.cxx:1101
 AliBalancePsi.cxx:1102
 AliBalancePsi.cxx:1103
 AliBalancePsi.cxx:1104
 AliBalancePsi.cxx:1105
 AliBalancePsi.cxx:1106
 AliBalancePsi.cxx:1107
 AliBalancePsi.cxx:1108
 AliBalancePsi.cxx:1109
 AliBalancePsi.cxx:1110
 AliBalancePsi.cxx:1111
 AliBalancePsi.cxx:1112
 AliBalancePsi.cxx:1113
 AliBalancePsi.cxx:1114
 AliBalancePsi.cxx:1115
 AliBalancePsi.cxx:1116
 AliBalancePsi.cxx:1117
 AliBalancePsi.cxx:1118
 AliBalancePsi.cxx:1119
 AliBalancePsi.cxx:1120
 AliBalancePsi.cxx:1121
 AliBalancePsi.cxx:1122
 AliBalancePsi.cxx:1123
 AliBalancePsi.cxx:1124
 AliBalancePsi.cxx:1125
 AliBalancePsi.cxx:1126
 AliBalancePsi.cxx:1127
 AliBalancePsi.cxx:1128
 AliBalancePsi.cxx:1129
 AliBalancePsi.cxx:1130
 AliBalancePsi.cxx:1131
 AliBalancePsi.cxx:1132
 AliBalancePsi.cxx:1133
 AliBalancePsi.cxx:1134
 AliBalancePsi.cxx:1135
 AliBalancePsi.cxx:1136
 AliBalancePsi.cxx:1137
 AliBalancePsi.cxx:1138
 AliBalancePsi.cxx:1139
 AliBalancePsi.cxx:1140
 AliBalancePsi.cxx:1141
 AliBalancePsi.cxx:1142
 AliBalancePsi.cxx:1143
 AliBalancePsi.cxx:1144
 AliBalancePsi.cxx:1145
 AliBalancePsi.cxx:1146
 AliBalancePsi.cxx:1147
 AliBalancePsi.cxx:1148
 AliBalancePsi.cxx:1149
 AliBalancePsi.cxx:1150
 AliBalancePsi.cxx:1151
 AliBalancePsi.cxx:1152
 AliBalancePsi.cxx:1153
 AliBalancePsi.cxx:1154
 AliBalancePsi.cxx:1155
 AliBalancePsi.cxx:1156
 AliBalancePsi.cxx:1157
 AliBalancePsi.cxx:1158
 AliBalancePsi.cxx:1159
 AliBalancePsi.cxx:1160
 AliBalancePsi.cxx:1161
 AliBalancePsi.cxx:1162
 AliBalancePsi.cxx:1163
 AliBalancePsi.cxx:1164
 AliBalancePsi.cxx:1165
 AliBalancePsi.cxx:1166
 AliBalancePsi.cxx:1167
 AliBalancePsi.cxx:1168
 AliBalancePsi.cxx:1169
 AliBalancePsi.cxx:1170
 AliBalancePsi.cxx:1171
 AliBalancePsi.cxx:1172
 AliBalancePsi.cxx:1173
 AliBalancePsi.cxx:1174
 AliBalancePsi.cxx:1175
 AliBalancePsi.cxx:1176
 AliBalancePsi.cxx:1177
 AliBalancePsi.cxx:1178
 AliBalancePsi.cxx:1179
 AliBalancePsi.cxx:1180
 AliBalancePsi.cxx:1181
 AliBalancePsi.cxx:1182
 AliBalancePsi.cxx:1183
 AliBalancePsi.cxx:1184
 AliBalancePsi.cxx:1185
 AliBalancePsi.cxx:1186
 AliBalancePsi.cxx:1187
 AliBalancePsi.cxx:1188
 AliBalancePsi.cxx:1189
 AliBalancePsi.cxx:1190
 AliBalancePsi.cxx:1191
 AliBalancePsi.cxx:1192
 AliBalancePsi.cxx:1193
 AliBalancePsi.cxx:1194
 AliBalancePsi.cxx:1195
 AliBalancePsi.cxx:1196
 AliBalancePsi.cxx:1197
 AliBalancePsi.cxx:1198
 AliBalancePsi.cxx:1199
 AliBalancePsi.cxx:1200
 AliBalancePsi.cxx:1201
 AliBalancePsi.cxx:1202
 AliBalancePsi.cxx:1203
 AliBalancePsi.cxx:1204
 AliBalancePsi.cxx:1205
 AliBalancePsi.cxx:1206
 AliBalancePsi.cxx:1207
 AliBalancePsi.cxx:1208
 AliBalancePsi.cxx:1209
 AliBalancePsi.cxx:1210
 AliBalancePsi.cxx:1211
 AliBalancePsi.cxx:1212
 AliBalancePsi.cxx:1213
 AliBalancePsi.cxx:1214
 AliBalancePsi.cxx:1215
 AliBalancePsi.cxx:1216
 AliBalancePsi.cxx:1217
 AliBalancePsi.cxx:1218
 AliBalancePsi.cxx:1219
 AliBalancePsi.cxx:1220
 AliBalancePsi.cxx:1221
 AliBalancePsi.cxx:1222
 AliBalancePsi.cxx:1223
 AliBalancePsi.cxx:1224
 AliBalancePsi.cxx:1225
 AliBalancePsi.cxx:1226
 AliBalancePsi.cxx:1227
 AliBalancePsi.cxx:1228
 AliBalancePsi.cxx:1229
 AliBalancePsi.cxx:1230
 AliBalancePsi.cxx:1231
 AliBalancePsi.cxx:1232
 AliBalancePsi.cxx:1233
 AliBalancePsi.cxx:1234
 AliBalancePsi.cxx:1235
 AliBalancePsi.cxx:1236
 AliBalancePsi.cxx:1237
 AliBalancePsi.cxx:1238
 AliBalancePsi.cxx:1239
 AliBalancePsi.cxx:1240
 AliBalancePsi.cxx:1241
 AliBalancePsi.cxx:1242
 AliBalancePsi.cxx:1243
 AliBalancePsi.cxx:1244
 AliBalancePsi.cxx:1245
 AliBalancePsi.cxx:1246
 AliBalancePsi.cxx:1247
 AliBalancePsi.cxx:1248
 AliBalancePsi.cxx:1249
 AliBalancePsi.cxx:1250
 AliBalancePsi.cxx:1251
 AliBalancePsi.cxx:1252
 AliBalancePsi.cxx:1253
 AliBalancePsi.cxx:1254
 AliBalancePsi.cxx:1255
 AliBalancePsi.cxx:1256
 AliBalancePsi.cxx:1257
 AliBalancePsi.cxx:1258
 AliBalancePsi.cxx:1259
 AliBalancePsi.cxx:1260
 AliBalancePsi.cxx:1261
 AliBalancePsi.cxx:1262
 AliBalancePsi.cxx:1263
 AliBalancePsi.cxx:1264
 AliBalancePsi.cxx:1265
 AliBalancePsi.cxx:1266
 AliBalancePsi.cxx:1267
 AliBalancePsi.cxx:1268
 AliBalancePsi.cxx:1269
 AliBalancePsi.cxx:1270
 AliBalancePsi.cxx:1271
 AliBalancePsi.cxx:1272
 AliBalancePsi.cxx:1273
 AliBalancePsi.cxx:1274
 AliBalancePsi.cxx:1275
 AliBalancePsi.cxx:1276
 AliBalancePsi.cxx:1277
 AliBalancePsi.cxx:1278
 AliBalancePsi.cxx:1279
 AliBalancePsi.cxx:1280
 AliBalancePsi.cxx:1281
 AliBalancePsi.cxx:1282
 AliBalancePsi.cxx:1283
 AliBalancePsi.cxx:1284
 AliBalancePsi.cxx:1285
 AliBalancePsi.cxx:1286
 AliBalancePsi.cxx:1287
 AliBalancePsi.cxx:1288
 AliBalancePsi.cxx:1289
 AliBalancePsi.cxx:1290
 AliBalancePsi.cxx:1291
 AliBalancePsi.cxx:1292
 AliBalancePsi.cxx:1293
 AliBalancePsi.cxx:1294
 AliBalancePsi.cxx:1295
 AliBalancePsi.cxx:1296
 AliBalancePsi.cxx:1297
 AliBalancePsi.cxx:1298
 AliBalancePsi.cxx:1299
 AliBalancePsi.cxx:1300
 AliBalancePsi.cxx:1301
 AliBalancePsi.cxx:1302
 AliBalancePsi.cxx:1303
 AliBalancePsi.cxx:1304
 AliBalancePsi.cxx:1305
 AliBalancePsi.cxx:1306
 AliBalancePsi.cxx:1307
 AliBalancePsi.cxx:1308
 AliBalancePsi.cxx:1309
 AliBalancePsi.cxx:1310
 AliBalancePsi.cxx:1311
 AliBalancePsi.cxx:1312
 AliBalancePsi.cxx:1313
 AliBalancePsi.cxx:1314
 AliBalancePsi.cxx:1315
 AliBalancePsi.cxx:1316
 AliBalancePsi.cxx:1317
 AliBalancePsi.cxx:1318
 AliBalancePsi.cxx:1319
 AliBalancePsi.cxx:1320
 AliBalancePsi.cxx:1321
 AliBalancePsi.cxx:1322
 AliBalancePsi.cxx:1323
 AliBalancePsi.cxx:1324
 AliBalancePsi.cxx:1325
 AliBalancePsi.cxx:1326
 AliBalancePsi.cxx:1327
 AliBalancePsi.cxx:1328
 AliBalancePsi.cxx:1329
 AliBalancePsi.cxx:1330
 AliBalancePsi.cxx:1331
 AliBalancePsi.cxx:1332
 AliBalancePsi.cxx:1333
 AliBalancePsi.cxx:1334
 AliBalancePsi.cxx:1335
 AliBalancePsi.cxx:1336
 AliBalancePsi.cxx:1337
 AliBalancePsi.cxx:1338
 AliBalancePsi.cxx:1339
 AliBalancePsi.cxx:1340
 AliBalancePsi.cxx:1341
 AliBalancePsi.cxx:1342
 AliBalancePsi.cxx:1343
 AliBalancePsi.cxx:1344
 AliBalancePsi.cxx:1345
 AliBalancePsi.cxx:1346
 AliBalancePsi.cxx:1347
 AliBalancePsi.cxx:1348
 AliBalancePsi.cxx:1349
 AliBalancePsi.cxx:1350
 AliBalancePsi.cxx:1351
 AliBalancePsi.cxx:1352
 AliBalancePsi.cxx:1353
 AliBalancePsi.cxx:1354
 AliBalancePsi.cxx:1355
 AliBalancePsi.cxx:1356
 AliBalancePsi.cxx:1357
 AliBalancePsi.cxx:1358
 AliBalancePsi.cxx:1359
 AliBalancePsi.cxx:1360
 AliBalancePsi.cxx:1361
 AliBalancePsi.cxx:1362
 AliBalancePsi.cxx:1363
 AliBalancePsi.cxx:1364
 AliBalancePsi.cxx:1365
 AliBalancePsi.cxx:1366
 AliBalancePsi.cxx:1367
 AliBalancePsi.cxx:1368
 AliBalancePsi.cxx:1369
 AliBalancePsi.cxx:1370
 AliBalancePsi.cxx:1371
 AliBalancePsi.cxx:1372
 AliBalancePsi.cxx:1373
 AliBalancePsi.cxx:1374
 AliBalancePsi.cxx:1375
 AliBalancePsi.cxx:1376
 AliBalancePsi.cxx:1377
 AliBalancePsi.cxx:1378
 AliBalancePsi.cxx:1379
 AliBalancePsi.cxx:1380
 AliBalancePsi.cxx:1381
 AliBalancePsi.cxx:1382
 AliBalancePsi.cxx:1383
 AliBalancePsi.cxx:1384
 AliBalancePsi.cxx:1385
 AliBalancePsi.cxx:1386
 AliBalancePsi.cxx:1387
 AliBalancePsi.cxx:1388
 AliBalancePsi.cxx:1389
 AliBalancePsi.cxx:1390
 AliBalancePsi.cxx:1391
 AliBalancePsi.cxx:1392
 AliBalancePsi.cxx:1393
 AliBalancePsi.cxx:1394
 AliBalancePsi.cxx:1395
 AliBalancePsi.cxx:1396
 AliBalancePsi.cxx:1397
 AliBalancePsi.cxx:1398
 AliBalancePsi.cxx:1399
 AliBalancePsi.cxx:1400
 AliBalancePsi.cxx:1401
 AliBalancePsi.cxx:1402
 AliBalancePsi.cxx:1403
 AliBalancePsi.cxx:1404
 AliBalancePsi.cxx:1405
 AliBalancePsi.cxx:1406
 AliBalancePsi.cxx:1407
 AliBalancePsi.cxx:1408
 AliBalancePsi.cxx:1409
 AliBalancePsi.cxx:1410
 AliBalancePsi.cxx:1411
 AliBalancePsi.cxx:1412
 AliBalancePsi.cxx:1413
 AliBalancePsi.cxx:1414
 AliBalancePsi.cxx:1415
 AliBalancePsi.cxx:1416
 AliBalancePsi.cxx:1417
 AliBalancePsi.cxx:1418
 AliBalancePsi.cxx:1419
 AliBalancePsi.cxx:1420
 AliBalancePsi.cxx:1421
 AliBalancePsi.cxx:1422
 AliBalancePsi.cxx:1423
 AliBalancePsi.cxx:1424
 AliBalancePsi.cxx:1425
 AliBalancePsi.cxx:1426
 AliBalancePsi.cxx:1427
 AliBalancePsi.cxx:1428
 AliBalancePsi.cxx:1429
 AliBalancePsi.cxx:1430
 AliBalancePsi.cxx:1431
 AliBalancePsi.cxx:1432
 AliBalancePsi.cxx:1433
 AliBalancePsi.cxx:1434
 AliBalancePsi.cxx:1435
 AliBalancePsi.cxx:1436
 AliBalancePsi.cxx:1437
 AliBalancePsi.cxx:1438
 AliBalancePsi.cxx:1439
 AliBalancePsi.cxx:1440
 AliBalancePsi.cxx:1441
 AliBalancePsi.cxx:1442
 AliBalancePsi.cxx:1443
 AliBalancePsi.cxx:1444
 AliBalancePsi.cxx:1445
 AliBalancePsi.cxx:1446
 AliBalancePsi.cxx:1447
 AliBalancePsi.cxx:1448
 AliBalancePsi.cxx:1449
 AliBalancePsi.cxx:1450
 AliBalancePsi.cxx:1451
 AliBalancePsi.cxx:1452
 AliBalancePsi.cxx:1453
 AliBalancePsi.cxx:1454
 AliBalancePsi.cxx:1455
 AliBalancePsi.cxx:1456
 AliBalancePsi.cxx:1457
 AliBalancePsi.cxx:1458
 AliBalancePsi.cxx:1459
 AliBalancePsi.cxx:1460
 AliBalancePsi.cxx:1461
 AliBalancePsi.cxx:1462
 AliBalancePsi.cxx:1463
 AliBalancePsi.cxx:1464
 AliBalancePsi.cxx:1465
 AliBalancePsi.cxx:1466
 AliBalancePsi.cxx:1467
 AliBalancePsi.cxx:1468
 AliBalancePsi.cxx:1469
 AliBalancePsi.cxx:1470
 AliBalancePsi.cxx:1471
 AliBalancePsi.cxx:1472
 AliBalancePsi.cxx:1473
 AliBalancePsi.cxx:1474
 AliBalancePsi.cxx:1475
 AliBalancePsi.cxx:1476
 AliBalancePsi.cxx:1477
 AliBalancePsi.cxx:1478
 AliBalancePsi.cxx:1479
 AliBalancePsi.cxx:1480
 AliBalancePsi.cxx:1481
 AliBalancePsi.cxx:1482
 AliBalancePsi.cxx:1483
 AliBalancePsi.cxx:1484
 AliBalancePsi.cxx:1485
 AliBalancePsi.cxx:1486
 AliBalancePsi.cxx:1487
 AliBalancePsi.cxx:1488
 AliBalancePsi.cxx:1489
 AliBalancePsi.cxx:1490
 AliBalancePsi.cxx:1491
 AliBalancePsi.cxx:1492
 AliBalancePsi.cxx:1493
 AliBalancePsi.cxx:1494
 AliBalancePsi.cxx:1495
 AliBalancePsi.cxx:1496
 AliBalancePsi.cxx:1497
 AliBalancePsi.cxx:1498
 AliBalancePsi.cxx:1499
 AliBalancePsi.cxx:1500
 AliBalancePsi.cxx:1501
 AliBalancePsi.cxx:1502
 AliBalancePsi.cxx:1503
 AliBalancePsi.cxx:1504
 AliBalancePsi.cxx:1505
 AliBalancePsi.cxx:1506
 AliBalancePsi.cxx:1507
 AliBalancePsi.cxx:1508
 AliBalancePsi.cxx:1509
 AliBalancePsi.cxx:1510
 AliBalancePsi.cxx:1511
 AliBalancePsi.cxx:1512
 AliBalancePsi.cxx:1513
 AliBalancePsi.cxx:1514
 AliBalancePsi.cxx:1515
 AliBalancePsi.cxx:1516
 AliBalancePsi.cxx:1517
 AliBalancePsi.cxx:1518
 AliBalancePsi.cxx:1519
 AliBalancePsi.cxx:1520
 AliBalancePsi.cxx:1521
 AliBalancePsi.cxx:1522
 AliBalancePsi.cxx:1523
 AliBalancePsi.cxx:1524
 AliBalancePsi.cxx:1525
 AliBalancePsi.cxx:1526
 AliBalancePsi.cxx:1527
 AliBalancePsi.cxx:1528
 AliBalancePsi.cxx:1529
 AliBalancePsi.cxx:1530
 AliBalancePsi.cxx:1531
 AliBalancePsi.cxx:1532
 AliBalancePsi.cxx:1533
 AliBalancePsi.cxx:1534
 AliBalancePsi.cxx:1535
 AliBalancePsi.cxx:1536
 AliBalancePsi.cxx:1537
 AliBalancePsi.cxx:1538
 AliBalancePsi.cxx:1539
 AliBalancePsi.cxx:1540
 AliBalancePsi.cxx:1541
 AliBalancePsi.cxx:1542
 AliBalancePsi.cxx:1543
 AliBalancePsi.cxx:1544
 AliBalancePsi.cxx:1545
 AliBalancePsi.cxx:1546
 AliBalancePsi.cxx:1547
 AliBalancePsi.cxx:1548
 AliBalancePsi.cxx:1549
 AliBalancePsi.cxx:1550
 AliBalancePsi.cxx:1551
 AliBalancePsi.cxx:1552
 AliBalancePsi.cxx:1553
 AliBalancePsi.cxx:1554
 AliBalancePsi.cxx:1555
 AliBalancePsi.cxx:1556
 AliBalancePsi.cxx:1557
 AliBalancePsi.cxx:1558
 AliBalancePsi.cxx:1559
 AliBalancePsi.cxx:1560
 AliBalancePsi.cxx:1561
 AliBalancePsi.cxx:1562
 AliBalancePsi.cxx:1563
 AliBalancePsi.cxx:1564
 AliBalancePsi.cxx:1565
 AliBalancePsi.cxx:1566
 AliBalancePsi.cxx:1567
 AliBalancePsi.cxx:1568
 AliBalancePsi.cxx:1569
 AliBalancePsi.cxx:1570
 AliBalancePsi.cxx:1571
 AliBalancePsi.cxx:1572
 AliBalancePsi.cxx:1573
 AliBalancePsi.cxx:1574
 AliBalancePsi.cxx:1575
 AliBalancePsi.cxx:1576
 AliBalancePsi.cxx:1577
 AliBalancePsi.cxx:1578
 AliBalancePsi.cxx:1579
 AliBalancePsi.cxx:1580
 AliBalancePsi.cxx:1581
 AliBalancePsi.cxx:1582
 AliBalancePsi.cxx:1583
 AliBalancePsi.cxx:1584
 AliBalancePsi.cxx:1585
 AliBalancePsi.cxx:1586
 AliBalancePsi.cxx:1587
 AliBalancePsi.cxx:1588
 AliBalancePsi.cxx:1589
 AliBalancePsi.cxx:1590
 AliBalancePsi.cxx:1591
 AliBalancePsi.cxx:1592
 AliBalancePsi.cxx:1593
 AliBalancePsi.cxx:1594
 AliBalancePsi.cxx:1595
 AliBalancePsi.cxx:1596
 AliBalancePsi.cxx:1597
 AliBalancePsi.cxx:1598
 AliBalancePsi.cxx:1599
 AliBalancePsi.cxx:1600
 AliBalancePsi.cxx:1601
 AliBalancePsi.cxx:1602
 AliBalancePsi.cxx:1603
 AliBalancePsi.cxx:1604
 AliBalancePsi.cxx:1605
 AliBalancePsi.cxx:1606
 AliBalancePsi.cxx:1607
 AliBalancePsi.cxx:1608
 AliBalancePsi.cxx:1609
 AliBalancePsi.cxx:1610
 AliBalancePsi.cxx:1611
 AliBalancePsi.cxx:1612
 AliBalancePsi.cxx:1613
 AliBalancePsi.cxx:1614
 AliBalancePsi.cxx:1615
 AliBalancePsi.cxx:1616
 AliBalancePsi.cxx:1617
 AliBalancePsi.cxx:1618
 AliBalancePsi.cxx:1619
 AliBalancePsi.cxx:1620
 AliBalancePsi.cxx:1621
 AliBalancePsi.cxx:1622
 AliBalancePsi.cxx:1623
 AliBalancePsi.cxx:1624
 AliBalancePsi.cxx:1625
 AliBalancePsi.cxx:1626
 AliBalancePsi.cxx:1627
 AliBalancePsi.cxx:1628
 AliBalancePsi.cxx:1629
 AliBalancePsi.cxx:1630
 AliBalancePsi.cxx:1631
 AliBalancePsi.cxx:1632
 AliBalancePsi.cxx:1633
 AliBalancePsi.cxx:1634
 AliBalancePsi.cxx:1635
 AliBalancePsi.cxx:1636
 AliBalancePsi.cxx:1637
 AliBalancePsi.cxx:1638
 AliBalancePsi.cxx:1639
 AliBalancePsi.cxx:1640
 AliBalancePsi.cxx:1641
 AliBalancePsi.cxx:1642
 AliBalancePsi.cxx:1643
 AliBalancePsi.cxx:1644
 AliBalancePsi.cxx:1645
 AliBalancePsi.cxx:1646
 AliBalancePsi.cxx:1647
 AliBalancePsi.cxx:1648
 AliBalancePsi.cxx:1649
 AliBalancePsi.cxx:1650
 AliBalancePsi.cxx:1651
 AliBalancePsi.cxx:1652
 AliBalancePsi.cxx:1653
 AliBalancePsi.cxx:1654
 AliBalancePsi.cxx:1655
 AliBalancePsi.cxx:1656
 AliBalancePsi.cxx:1657
 AliBalancePsi.cxx:1658
 AliBalancePsi.cxx:1659
 AliBalancePsi.cxx:1660
 AliBalancePsi.cxx:1661
 AliBalancePsi.cxx:1662
 AliBalancePsi.cxx:1663
 AliBalancePsi.cxx:1664
 AliBalancePsi.cxx:1665
 AliBalancePsi.cxx:1666
 AliBalancePsi.cxx:1667
 AliBalancePsi.cxx:1668
 AliBalancePsi.cxx:1669
 AliBalancePsi.cxx:1670
 AliBalancePsi.cxx:1671
 AliBalancePsi.cxx:1672
 AliBalancePsi.cxx:1673
 AliBalancePsi.cxx:1674
 AliBalancePsi.cxx:1675
 AliBalancePsi.cxx:1676
 AliBalancePsi.cxx:1677
 AliBalancePsi.cxx:1678
 AliBalancePsi.cxx:1679
 AliBalancePsi.cxx:1680
 AliBalancePsi.cxx:1681
 AliBalancePsi.cxx:1682
 AliBalancePsi.cxx:1683
 AliBalancePsi.cxx:1684
 AliBalancePsi.cxx:1685
 AliBalancePsi.cxx:1686
 AliBalancePsi.cxx:1687
 AliBalancePsi.cxx:1688
 AliBalancePsi.cxx:1689
 AliBalancePsi.cxx:1690
 AliBalancePsi.cxx:1691
 AliBalancePsi.cxx:1692
 AliBalancePsi.cxx:1693
 AliBalancePsi.cxx:1694
 AliBalancePsi.cxx:1695
 AliBalancePsi.cxx:1696
 AliBalancePsi.cxx:1697
 AliBalancePsi.cxx:1698
 AliBalancePsi.cxx:1699
 AliBalancePsi.cxx:1700
 AliBalancePsi.cxx:1701
 AliBalancePsi.cxx:1702
 AliBalancePsi.cxx:1703
 AliBalancePsi.cxx:1704
 AliBalancePsi.cxx:1705
 AliBalancePsi.cxx:1706
 AliBalancePsi.cxx:1707
 AliBalancePsi.cxx:1708
 AliBalancePsi.cxx:1709
 AliBalancePsi.cxx:1710
 AliBalancePsi.cxx:1711
 AliBalancePsi.cxx:1712
 AliBalancePsi.cxx:1713
 AliBalancePsi.cxx:1714
 AliBalancePsi.cxx:1715
 AliBalancePsi.cxx:1716
 AliBalancePsi.cxx:1717
 AliBalancePsi.cxx:1718
 AliBalancePsi.cxx:1719
 AliBalancePsi.cxx:1720
 AliBalancePsi.cxx:1721
 AliBalancePsi.cxx:1722
 AliBalancePsi.cxx:1723
 AliBalancePsi.cxx:1724
 AliBalancePsi.cxx:1725
 AliBalancePsi.cxx:1726
 AliBalancePsi.cxx:1727
 AliBalancePsi.cxx:1728
 AliBalancePsi.cxx:1729
 AliBalancePsi.cxx:1730
 AliBalancePsi.cxx:1731
 AliBalancePsi.cxx:1732
 AliBalancePsi.cxx:1733
 AliBalancePsi.cxx:1734
 AliBalancePsi.cxx:1735
 AliBalancePsi.cxx:1736
 AliBalancePsi.cxx:1737
 AliBalancePsi.cxx:1738
 AliBalancePsi.cxx:1739
 AliBalancePsi.cxx:1740
 AliBalancePsi.cxx:1741
 AliBalancePsi.cxx:1742
 AliBalancePsi.cxx:1743
 AliBalancePsi.cxx:1744
 AliBalancePsi.cxx:1745
 AliBalancePsi.cxx:1746
 AliBalancePsi.cxx:1747
 AliBalancePsi.cxx:1748
 AliBalancePsi.cxx:1749
 AliBalancePsi.cxx:1750
 AliBalancePsi.cxx:1751
 AliBalancePsi.cxx:1752
 AliBalancePsi.cxx:1753
 AliBalancePsi.cxx:1754
 AliBalancePsi.cxx:1755
 AliBalancePsi.cxx:1756
 AliBalancePsi.cxx:1757
 AliBalancePsi.cxx:1758
 AliBalancePsi.cxx:1759
 AliBalancePsi.cxx:1760
 AliBalancePsi.cxx:1761
 AliBalancePsi.cxx:1762
 AliBalancePsi.cxx:1763
 AliBalancePsi.cxx:1764
 AliBalancePsi.cxx:1765
 AliBalancePsi.cxx:1766
 AliBalancePsi.cxx:1767
 AliBalancePsi.cxx:1768
 AliBalancePsi.cxx:1769
 AliBalancePsi.cxx:1770
 AliBalancePsi.cxx:1771
 AliBalancePsi.cxx:1772
 AliBalancePsi.cxx:1773
 AliBalancePsi.cxx:1774
 AliBalancePsi.cxx:1775
 AliBalancePsi.cxx:1776
 AliBalancePsi.cxx:1777
 AliBalancePsi.cxx:1778
 AliBalancePsi.cxx:1779
 AliBalancePsi.cxx:1780
 AliBalancePsi.cxx:1781
 AliBalancePsi.cxx:1782
 AliBalancePsi.cxx:1783
 AliBalancePsi.cxx:1784
 AliBalancePsi.cxx:1785
 AliBalancePsi.cxx:1786
 AliBalancePsi.cxx:1787
 AliBalancePsi.cxx:1788
 AliBalancePsi.cxx:1789
 AliBalancePsi.cxx:1790
 AliBalancePsi.cxx:1791
 AliBalancePsi.cxx:1792
 AliBalancePsi.cxx:1793
 AliBalancePsi.cxx:1794
 AliBalancePsi.cxx:1795
 AliBalancePsi.cxx:1796
 AliBalancePsi.cxx:1797
 AliBalancePsi.cxx:1798
 AliBalancePsi.cxx:1799
 AliBalancePsi.cxx:1800
 AliBalancePsi.cxx:1801
 AliBalancePsi.cxx:1802
 AliBalancePsi.cxx:1803
 AliBalancePsi.cxx:1804
 AliBalancePsi.cxx:1805
 AliBalancePsi.cxx:1806
 AliBalancePsi.cxx:1807
 AliBalancePsi.cxx:1808
 AliBalancePsi.cxx:1809
 AliBalancePsi.cxx:1810
 AliBalancePsi.cxx:1811
 AliBalancePsi.cxx:1812
 AliBalancePsi.cxx:1813
 AliBalancePsi.cxx:1814
 AliBalancePsi.cxx:1815
 AliBalancePsi.cxx:1816
 AliBalancePsi.cxx:1817
 AliBalancePsi.cxx:1818
 AliBalancePsi.cxx:1819
 AliBalancePsi.cxx:1820
 AliBalancePsi.cxx:1821
 AliBalancePsi.cxx:1822
 AliBalancePsi.cxx:1823
 AliBalancePsi.cxx:1824
 AliBalancePsi.cxx:1825
 AliBalancePsi.cxx:1826
 AliBalancePsi.cxx:1827
 AliBalancePsi.cxx:1828
 AliBalancePsi.cxx:1829
 AliBalancePsi.cxx:1830
 AliBalancePsi.cxx:1831
 AliBalancePsi.cxx:1832
 AliBalancePsi.cxx:1833
 AliBalancePsi.cxx:1834
 AliBalancePsi.cxx:1835
 AliBalancePsi.cxx:1836
 AliBalancePsi.cxx:1837
 AliBalancePsi.cxx:1838
 AliBalancePsi.cxx:1839
 AliBalancePsi.cxx:1840
 AliBalancePsi.cxx:1841
 AliBalancePsi.cxx:1842
 AliBalancePsi.cxx:1843
 AliBalancePsi.cxx:1844
 AliBalancePsi.cxx:1845
 AliBalancePsi.cxx:1846
 AliBalancePsi.cxx:1847
 AliBalancePsi.cxx:1848
 AliBalancePsi.cxx:1849
 AliBalancePsi.cxx:1850
 AliBalancePsi.cxx:1851
 AliBalancePsi.cxx:1852
 AliBalancePsi.cxx:1853
 AliBalancePsi.cxx:1854
 AliBalancePsi.cxx:1855
 AliBalancePsi.cxx:1856
 AliBalancePsi.cxx:1857
 AliBalancePsi.cxx:1858
 AliBalancePsi.cxx:1859
 AliBalancePsi.cxx:1860
 AliBalancePsi.cxx:1861
 AliBalancePsi.cxx:1862
 AliBalancePsi.cxx:1863
 AliBalancePsi.cxx:1864
 AliBalancePsi.cxx:1865
 AliBalancePsi.cxx:1866
 AliBalancePsi.cxx:1867
 AliBalancePsi.cxx:1868
 AliBalancePsi.cxx:1869
 AliBalancePsi.cxx:1870
 AliBalancePsi.cxx:1871
 AliBalancePsi.cxx:1872
 AliBalancePsi.cxx:1873
 AliBalancePsi.cxx:1874
 AliBalancePsi.cxx:1875
 AliBalancePsi.cxx:1876
 AliBalancePsi.cxx:1877
 AliBalancePsi.cxx:1878
 AliBalancePsi.cxx:1879
 AliBalancePsi.cxx:1880
 AliBalancePsi.cxx:1881
 AliBalancePsi.cxx:1882
 AliBalancePsi.cxx:1883
 AliBalancePsi.cxx:1884
 AliBalancePsi.cxx:1885
 AliBalancePsi.cxx:1886
 AliBalancePsi.cxx:1887
 AliBalancePsi.cxx:1888
 AliBalancePsi.cxx:1889
 AliBalancePsi.cxx:1890
 AliBalancePsi.cxx:1891
 AliBalancePsi.cxx:1892
 AliBalancePsi.cxx:1893
 AliBalancePsi.cxx:1894
 AliBalancePsi.cxx:1895
 AliBalancePsi.cxx:1896
 AliBalancePsi.cxx:1897
 AliBalancePsi.cxx:1898
 AliBalancePsi.cxx:1899
 AliBalancePsi.cxx:1900
 AliBalancePsi.cxx:1901
 AliBalancePsi.cxx:1902
 AliBalancePsi.cxx:1903
 AliBalancePsi.cxx:1904
 AliBalancePsi.cxx:1905
 AliBalancePsi.cxx:1906
 AliBalancePsi.cxx:1907
 AliBalancePsi.cxx:1908
 AliBalancePsi.cxx:1909
 AliBalancePsi.cxx:1910
 AliBalancePsi.cxx:1911
 AliBalancePsi.cxx:1912
 AliBalancePsi.cxx:1913
 AliBalancePsi.cxx:1914
 AliBalancePsi.cxx:1915
 AliBalancePsi.cxx:1916
 AliBalancePsi.cxx:1917
 AliBalancePsi.cxx:1918
 AliBalancePsi.cxx:1919
 AliBalancePsi.cxx:1920
 AliBalancePsi.cxx:1921
 AliBalancePsi.cxx:1922
 AliBalancePsi.cxx:1923
 AliBalancePsi.cxx:1924
 AliBalancePsi.cxx:1925
 AliBalancePsi.cxx:1926
 AliBalancePsi.cxx:1927
 AliBalancePsi.cxx:1928
 AliBalancePsi.cxx:1929
 AliBalancePsi.cxx:1930
 AliBalancePsi.cxx:1931
 AliBalancePsi.cxx:1932
 AliBalancePsi.cxx:1933
 AliBalancePsi.cxx:1934
 AliBalancePsi.cxx:1935
 AliBalancePsi.cxx:1936
 AliBalancePsi.cxx:1937
 AliBalancePsi.cxx:1938
 AliBalancePsi.cxx:1939
 AliBalancePsi.cxx:1940
 AliBalancePsi.cxx:1941
 AliBalancePsi.cxx:1942
 AliBalancePsi.cxx:1943
 AliBalancePsi.cxx:1944
 AliBalancePsi.cxx:1945
 AliBalancePsi.cxx:1946
 AliBalancePsi.cxx:1947
 AliBalancePsi.cxx:1948
 AliBalancePsi.cxx:1949
 AliBalancePsi.cxx:1950
 AliBalancePsi.cxx:1951
 AliBalancePsi.cxx:1952
 AliBalancePsi.cxx:1953
 AliBalancePsi.cxx:1954
 AliBalancePsi.cxx:1955
 AliBalancePsi.cxx:1956
 AliBalancePsi.cxx:1957
 AliBalancePsi.cxx:1958
 AliBalancePsi.cxx:1959
 AliBalancePsi.cxx:1960
 AliBalancePsi.cxx:1961
 AliBalancePsi.cxx:1962
 AliBalancePsi.cxx:1963
 AliBalancePsi.cxx:1964
 AliBalancePsi.cxx:1965
 AliBalancePsi.cxx:1966
 AliBalancePsi.cxx:1967
 AliBalancePsi.cxx:1968
 AliBalancePsi.cxx:1969
 AliBalancePsi.cxx:1970
 AliBalancePsi.cxx:1971
 AliBalancePsi.cxx:1972
 AliBalancePsi.cxx:1973
 AliBalancePsi.cxx:1974
 AliBalancePsi.cxx:1975
 AliBalancePsi.cxx:1976
 AliBalancePsi.cxx:1977
 AliBalancePsi.cxx:1978
 AliBalancePsi.cxx:1979
 AliBalancePsi.cxx:1980
 AliBalancePsi.cxx:1981
 AliBalancePsi.cxx:1982
 AliBalancePsi.cxx:1983
 AliBalancePsi.cxx:1984
 AliBalancePsi.cxx:1985
 AliBalancePsi.cxx:1986
 AliBalancePsi.cxx:1987
 AliBalancePsi.cxx:1988
 AliBalancePsi.cxx:1989
 AliBalancePsi.cxx:1990
 AliBalancePsi.cxx:1991
 AliBalancePsi.cxx:1992
 AliBalancePsi.cxx:1993
 AliBalancePsi.cxx:1994
 AliBalancePsi.cxx:1995
 AliBalancePsi.cxx:1996
 AliBalancePsi.cxx:1997
 AliBalancePsi.cxx:1998
 AliBalancePsi.cxx:1999
 AliBalancePsi.cxx:2000
 AliBalancePsi.cxx:2001
 AliBalancePsi.cxx:2002
 AliBalancePsi.cxx:2003
 AliBalancePsi.cxx:2004
 AliBalancePsi.cxx:2005
 AliBalancePsi.cxx:2006
 AliBalancePsi.cxx:2007
 AliBalancePsi.cxx:2008
 AliBalancePsi.cxx:2009
 AliBalancePsi.cxx:2010
 AliBalancePsi.cxx:2011
 AliBalancePsi.cxx:2012
 AliBalancePsi.cxx:2013
 AliBalancePsi.cxx:2014
 AliBalancePsi.cxx:2015
 AliBalancePsi.cxx:2016
 AliBalancePsi.cxx:2017
 AliBalancePsi.cxx:2018
 AliBalancePsi.cxx:2019
 AliBalancePsi.cxx:2020
 AliBalancePsi.cxx:2021
 AliBalancePsi.cxx:2022
 AliBalancePsi.cxx:2023
 AliBalancePsi.cxx:2024
 AliBalancePsi.cxx:2025
 AliBalancePsi.cxx:2026
 AliBalancePsi.cxx:2027
 AliBalancePsi.cxx:2028
 AliBalancePsi.cxx:2029
 AliBalancePsi.cxx:2030
 AliBalancePsi.cxx:2031
 AliBalancePsi.cxx:2032
 AliBalancePsi.cxx:2033
 AliBalancePsi.cxx:2034
 AliBalancePsi.cxx:2035
 AliBalancePsi.cxx:2036
 AliBalancePsi.cxx:2037
 AliBalancePsi.cxx:2038
 AliBalancePsi.cxx:2039
 AliBalancePsi.cxx:2040
 AliBalancePsi.cxx:2041
 AliBalancePsi.cxx:2042
 AliBalancePsi.cxx:2043
 AliBalancePsi.cxx:2044
 AliBalancePsi.cxx:2045
 AliBalancePsi.cxx:2046
 AliBalancePsi.cxx:2047
 AliBalancePsi.cxx:2048
 AliBalancePsi.cxx:2049
 AliBalancePsi.cxx:2050
 AliBalancePsi.cxx:2051
 AliBalancePsi.cxx:2052
 AliBalancePsi.cxx:2053
 AliBalancePsi.cxx:2054
 AliBalancePsi.cxx:2055
 AliBalancePsi.cxx:2056
 AliBalancePsi.cxx:2057
 AliBalancePsi.cxx:2058
 AliBalancePsi.cxx:2059
 AliBalancePsi.cxx:2060
 AliBalancePsi.cxx:2061
 AliBalancePsi.cxx:2062
 AliBalancePsi.cxx:2063
 AliBalancePsi.cxx:2064
 AliBalancePsi.cxx:2065
 AliBalancePsi.cxx:2066
 AliBalancePsi.cxx:2067
 AliBalancePsi.cxx:2068
 AliBalancePsi.cxx:2069
 AliBalancePsi.cxx:2070
 AliBalancePsi.cxx:2071
 AliBalancePsi.cxx:2072
 AliBalancePsi.cxx:2073
 AliBalancePsi.cxx:2074
 AliBalancePsi.cxx:2075
 AliBalancePsi.cxx:2076
 AliBalancePsi.cxx:2077
 AliBalancePsi.cxx:2078
 AliBalancePsi.cxx:2079
 AliBalancePsi.cxx:2080
 AliBalancePsi.cxx:2081
 AliBalancePsi.cxx:2082
 AliBalancePsi.cxx:2083
 AliBalancePsi.cxx:2084
 AliBalancePsi.cxx:2085
 AliBalancePsi.cxx:2086
 AliBalancePsi.cxx:2087
 AliBalancePsi.cxx:2088
 AliBalancePsi.cxx:2089
 AliBalancePsi.cxx:2090
 AliBalancePsi.cxx:2091
 AliBalancePsi.cxx:2092
 AliBalancePsi.cxx:2093
 AliBalancePsi.cxx:2094
 AliBalancePsi.cxx:2095
 AliBalancePsi.cxx:2096
 AliBalancePsi.cxx:2097
 AliBalancePsi.cxx:2098
 AliBalancePsi.cxx:2099
 AliBalancePsi.cxx:2100
 AliBalancePsi.cxx:2101
 AliBalancePsi.cxx:2102
 AliBalancePsi.cxx:2103
 AliBalancePsi.cxx:2104
 AliBalancePsi.cxx:2105
 AliBalancePsi.cxx:2106
 AliBalancePsi.cxx:2107
 AliBalancePsi.cxx:2108
 AliBalancePsi.cxx:2109
 AliBalancePsi.cxx:2110
 AliBalancePsi.cxx:2111
 AliBalancePsi.cxx:2112
 AliBalancePsi.cxx:2113
 AliBalancePsi.cxx:2114
 AliBalancePsi.cxx:2115
 AliBalancePsi.cxx:2116
 AliBalancePsi.cxx:2117
 AliBalancePsi.cxx:2118
 AliBalancePsi.cxx:2119
 AliBalancePsi.cxx:2120
 AliBalancePsi.cxx:2121
 AliBalancePsi.cxx:2122
 AliBalancePsi.cxx:2123
 AliBalancePsi.cxx:2124
 AliBalancePsi.cxx:2125
 AliBalancePsi.cxx:2126
 AliBalancePsi.cxx:2127
 AliBalancePsi.cxx:2128
 AliBalancePsi.cxx:2129
 AliBalancePsi.cxx:2130
 AliBalancePsi.cxx:2131
 AliBalancePsi.cxx:2132
 AliBalancePsi.cxx:2133
 AliBalancePsi.cxx:2134
 AliBalancePsi.cxx:2135
 AliBalancePsi.cxx:2136
 AliBalancePsi.cxx:2137
 AliBalancePsi.cxx:2138
 AliBalancePsi.cxx:2139
 AliBalancePsi.cxx:2140
 AliBalancePsi.cxx:2141
 AliBalancePsi.cxx:2142
 AliBalancePsi.cxx:2143
 AliBalancePsi.cxx:2144
 AliBalancePsi.cxx:2145
 AliBalancePsi.cxx:2146
 AliBalancePsi.cxx:2147
 AliBalancePsi.cxx:2148
 AliBalancePsi.cxx:2149
 AliBalancePsi.cxx:2150
 AliBalancePsi.cxx:2151
 AliBalancePsi.cxx:2152
 AliBalancePsi.cxx:2153
 AliBalancePsi.cxx:2154
 AliBalancePsi.cxx:2155
 AliBalancePsi.cxx:2156
 AliBalancePsi.cxx:2157
 AliBalancePsi.cxx:2158
 AliBalancePsi.cxx:2159
 AliBalancePsi.cxx:2160
 AliBalancePsi.cxx:2161
 AliBalancePsi.cxx:2162
 AliBalancePsi.cxx:2163
 AliBalancePsi.cxx:2164
 AliBalancePsi.cxx:2165
 AliBalancePsi.cxx:2166
 AliBalancePsi.cxx:2167
 AliBalancePsi.cxx:2168
 AliBalancePsi.cxx:2169
 AliBalancePsi.cxx:2170
 AliBalancePsi.cxx:2171
 AliBalancePsi.cxx:2172
 AliBalancePsi.cxx:2173
 AliBalancePsi.cxx:2174
 AliBalancePsi.cxx:2175
 AliBalancePsi.cxx:2176
 AliBalancePsi.cxx:2177
 AliBalancePsi.cxx:2178
 AliBalancePsi.cxx:2179
 AliBalancePsi.cxx:2180
 AliBalancePsi.cxx:2181
 AliBalancePsi.cxx:2182
 AliBalancePsi.cxx:2183
 AliBalancePsi.cxx:2184
 AliBalancePsi.cxx:2185
 AliBalancePsi.cxx:2186
 AliBalancePsi.cxx:2187
 AliBalancePsi.cxx:2188
 AliBalancePsi.cxx:2189
 AliBalancePsi.cxx:2190
 AliBalancePsi.cxx:2191
 AliBalancePsi.cxx:2192
 AliBalancePsi.cxx:2193
 AliBalancePsi.cxx:2194
 AliBalancePsi.cxx:2195
 AliBalancePsi.cxx:2196
 AliBalancePsi.cxx:2197
 AliBalancePsi.cxx:2198
 AliBalancePsi.cxx:2199
 AliBalancePsi.cxx:2200
 AliBalancePsi.cxx:2201
 AliBalancePsi.cxx:2202
 AliBalancePsi.cxx:2203
 AliBalancePsi.cxx:2204
 AliBalancePsi.cxx:2205
 AliBalancePsi.cxx:2206
 AliBalancePsi.cxx:2207
 AliBalancePsi.cxx:2208
 AliBalancePsi.cxx:2209
 AliBalancePsi.cxx:2210
 AliBalancePsi.cxx:2211
 AliBalancePsi.cxx:2212
 AliBalancePsi.cxx:2213
 AliBalancePsi.cxx:2214
 AliBalancePsi.cxx:2215
 AliBalancePsi.cxx:2216
 AliBalancePsi.cxx:2217
 AliBalancePsi.cxx:2218
 AliBalancePsi.cxx:2219
 AliBalancePsi.cxx:2220
 AliBalancePsi.cxx:2221
 AliBalancePsi.cxx:2222
 AliBalancePsi.cxx:2223
 AliBalancePsi.cxx:2224
 AliBalancePsi.cxx:2225
 AliBalancePsi.cxx:2226
 AliBalancePsi.cxx:2227
 AliBalancePsi.cxx:2228
 AliBalancePsi.cxx:2229
 AliBalancePsi.cxx:2230
 AliBalancePsi.cxx:2231
 AliBalancePsi.cxx:2232
 AliBalancePsi.cxx:2233
 AliBalancePsi.cxx:2234
 AliBalancePsi.cxx:2235
 AliBalancePsi.cxx:2236
 AliBalancePsi.cxx:2237
 AliBalancePsi.cxx:2238
 AliBalancePsi.cxx:2239
 AliBalancePsi.cxx:2240
 AliBalancePsi.cxx:2241
 AliBalancePsi.cxx:2242
 AliBalancePsi.cxx:2243
 AliBalancePsi.cxx:2244
 AliBalancePsi.cxx:2245
 AliBalancePsi.cxx:2246
 AliBalancePsi.cxx:2247
 AliBalancePsi.cxx:2248
 AliBalancePsi.cxx:2249
 AliBalancePsi.cxx:2250
 AliBalancePsi.cxx:2251
 AliBalancePsi.cxx:2252
 AliBalancePsi.cxx:2253
 AliBalancePsi.cxx:2254
 AliBalancePsi.cxx:2255
 AliBalancePsi.cxx:2256
 AliBalancePsi.cxx:2257
 AliBalancePsi.cxx:2258
 AliBalancePsi.cxx:2259
 AliBalancePsi.cxx:2260
 AliBalancePsi.cxx:2261
 AliBalancePsi.cxx:2262
 AliBalancePsi.cxx:2263
 AliBalancePsi.cxx:2264
 AliBalancePsi.cxx:2265
 AliBalancePsi.cxx:2266
 AliBalancePsi.cxx:2267
 AliBalancePsi.cxx:2268
 AliBalancePsi.cxx:2269
 AliBalancePsi.cxx:2270
 AliBalancePsi.cxx:2271
 AliBalancePsi.cxx:2272
 AliBalancePsi.cxx:2273
 AliBalancePsi.cxx:2274
 AliBalancePsi.cxx:2275
 AliBalancePsi.cxx:2276
 AliBalancePsi.cxx:2277
 AliBalancePsi.cxx:2278
 AliBalancePsi.cxx:2279
 AliBalancePsi.cxx:2280
 AliBalancePsi.cxx:2281
 AliBalancePsi.cxx:2282
 AliBalancePsi.cxx:2283
 AliBalancePsi.cxx:2284
 AliBalancePsi.cxx:2285
 AliBalancePsi.cxx:2286
 AliBalancePsi.cxx:2287
 AliBalancePsi.cxx:2288
 AliBalancePsi.cxx:2289
 AliBalancePsi.cxx:2290
 AliBalancePsi.cxx:2291
 AliBalancePsi.cxx:2292
 AliBalancePsi.cxx:2293
 AliBalancePsi.cxx:2294
 AliBalancePsi.cxx:2295
 AliBalancePsi.cxx:2296
 AliBalancePsi.cxx:2297
 AliBalancePsi.cxx:2298
 AliBalancePsi.cxx:2299
 AliBalancePsi.cxx:2300
 AliBalancePsi.cxx:2301
 AliBalancePsi.cxx:2302
 AliBalancePsi.cxx:2303
 AliBalancePsi.cxx:2304
 AliBalancePsi.cxx:2305
 AliBalancePsi.cxx:2306
 AliBalancePsi.cxx:2307
 AliBalancePsi.cxx:2308
 AliBalancePsi.cxx:2309
 AliBalancePsi.cxx:2310
 AliBalancePsi.cxx:2311
 AliBalancePsi.cxx:2312
 AliBalancePsi.cxx:2313
 AliBalancePsi.cxx:2314
 AliBalancePsi.cxx:2315
 AliBalancePsi.cxx:2316
 AliBalancePsi.cxx:2317
 AliBalancePsi.cxx:2318
 AliBalancePsi.cxx:2319
 AliBalancePsi.cxx:2320
 AliBalancePsi.cxx:2321
 AliBalancePsi.cxx:2322
 AliBalancePsi.cxx:2323
 AliBalancePsi.cxx:2324
 AliBalancePsi.cxx:2325
 AliBalancePsi.cxx:2326
 AliBalancePsi.cxx:2327
 AliBalancePsi.cxx:2328
 AliBalancePsi.cxx:2329
 AliBalancePsi.cxx:2330
 AliBalancePsi.cxx:2331
 AliBalancePsi.cxx:2332
 AliBalancePsi.cxx:2333
 AliBalancePsi.cxx:2334
 AliBalancePsi.cxx:2335
 AliBalancePsi.cxx:2336
 AliBalancePsi.cxx:2337
 AliBalancePsi.cxx:2338
 AliBalancePsi.cxx:2339
 AliBalancePsi.cxx:2340
 AliBalancePsi.cxx:2341
 AliBalancePsi.cxx:2342
 AliBalancePsi.cxx:2343
 AliBalancePsi.cxx:2344
 AliBalancePsi.cxx:2345
 AliBalancePsi.cxx:2346
 AliBalancePsi.cxx:2347
 AliBalancePsi.cxx:2348
 AliBalancePsi.cxx:2349
 AliBalancePsi.cxx:2350
 AliBalancePsi.cxx:2351
 AliBalancePsi.cxx:2352
 AliBalancePsi.cxx:2353
 AliBalancePsi.cxx:2354
 AliBalancePsi.cxx:2355
 AliBalancePsi.cxx:2356
 AliBalancePsi.cxx:2357
 AliBalancePsi.cxx:2358
 AliBalancePsi.cxx:2359
 AliBalancePsi.cxx:2360
 AliBalancePsi.cxx:2361
 AliBalancePsi.cxx:2362
 AliBalancePsi.cxx:2363
 AliBalancePsi.cxx:2364
 AliBalancePsi.cxx:2365
 AliBalancePsi.cxx:2366
 AliBalancePsi.cxx:2367
 AliBalancePsi.cxx:2368
 AliBalancePsi.cxx:2369
 AliBalancePsi.cxx:2370
 AliBalancePsi.cxx:2371
 AliBalancePsi.cxx:2372
 AliBalancePsi.cxx:2373
 AliBalancePsi.cxx:2374
 AliBalancePsi.cxx:2375
 AliBalancePsi.cxx:2376
 AliBalancePsi.cxx:2377
 AliBalancePsi.cxx:2378
 AliBalancePsi.cxx:2379
 AliBalancePsi.cxx:2380
 AliBalancePsi.cxx:2381
 AliBalancePsi.cxx:2382
 AliBalancePsi.cxx:2383
 AliBalancePsi.cxx:2384
 AliBalancePsi.cxx:2385
 AliBalancePsi.cxx:2386
 AliBalancePsi.cxx:2387
 AliBalancePsi.cxx:2388
 AliBalancePsi.cxx:2389
 AliBalancePsi.cxx:2390
 AliBalancePsi.cxx:2391
 AliBalancePsi.cxx:2392
 AliBalancePsi.cxx:2393
 AliBalancePsi.cxx:2394
 AliBalancePsi.cxx:2395
 AliBalancePsi.cxx:2396
 AliBalancePsi.cxx:2397
 AliBalancePsi.cxx:2398
 AliBalancePsi.cxx:2399
 AliBalancePsi.cxx:2400
 AliBalancePsi.cxx:2401
 AliBalancePsi.cxx:2402
 AliBalancePsi.cxx:2403
 AliBalancePsi.cxx:2404
 AliBalancePsi.cxx:2405
 AliBalancePsi.cxx:2406
 AliBalancePsi.cxx:2407
 AliBalancePsi.cxx:2408
 AliBalancePsi.cxx:2409
 AliBalancePsi.cxx:2410
 AliBalancePsi.cxx:2411
 AliBalancePsi.cxx:2412
 AliBalancePsi.cxx:2413
 AliBalancePsi.cxx:2414
 AliBalancePsi.cxx:2415
 AliBalancePsi.cxx:2416
 AliBalancePsi.cxx:2417
 AliBalancePsi.cxx:2418
 AliBalancePsi.cxx:2419
 AliBalancePsi.cxx:2420
 AliBalancePsi.cxx:2421
 AliBalancePsi.cxx:2422
 AliBalancePsi.cxx:2423
 AliBalancePsi.cxx:2424
 AliBalancePsi.cxx:2425
 AliBalancePsi.cxx:2426
 AliBalancePsi.cxx:2427
 AliBalancePsi.cxx:2428
 AliBalancePsi.cxx:2429
 AliBalancePsi.cxx:2430
 AliBalancePsi.cxx:2431
 AliBalancePsi.cxx:2432
 AliBalancePsi.cxx:2433
 AliBalancePsi.cxx:2434
 AliBalancePsi.cxx:2435
 AliBalancePsi.cxx:2436
 AliBalancePsi.cxx:2437
 AliBalancePsi.cxx:2438
 AliBalancePsi.cxx:2439
 AliBalancePsi.cxx:2440
 AliBalancePsi.cxx:2441
 AliBalancePsi.cxx:2442
 AliBalancePsi.cxx:2443
 AliBalancePsi.cxx:2444
 AliBalancePsi.cxx:2445
 AliBalancePsi.cxx:2446
 AliBalancePsi.cxx:2447
 AliBalancePsi.cxx:2448
 AliBalancePsi.cxx:2449
 AliBalancePsi.cxx:2450
 AliBalancePsi.cxx:2451
 AliBalancePsi.cxx:2452
 AliBalancePsi.cxx:2453
 AliBalancePsi.cxx:2454
 AliBalancePsi.cxx:2455
 AliBalancePsi.cxx:2456
 AliBalancePsi.cxx:2457
 AliBalancePsi.cxx:2458
 AliBalancePsi.cxx:2459
 AliBalancePsi.cxx:2460
 AliBalancePsi.cxx:2461
 AliBalancePsi.cxx:2462
 AliBalancePsi.cxx:2463
 AliBalancePsi.cxx:2464
 AliBalancePsi.cxx:2465
 AliBalancePsi.cxx:2466
 AliBalancePsi.cxx:2467
 AliBalancePsi.cxx:2468
 AliBalancePsi.cxx:2469
 AliBalancePsi.cxx:2470
 AliBalancePsi.cxx:2471
 AliBalancePsi.cxx:2472
 AliBalancePsi.cxx:2473
 AliBalancePsi.cxx:2474
 AliBalancePsi.cxx:2475
 AliBalancePsi.cxx:2476
 AliBalancePsi.cxx:2477
 AliBalancePsi.cxx:2478
 AliBalancePsi.cxx:2479
 AliBalancePsi.cxx:2480
 AliBalancePsi.cxx:2481
 AliBalancePsi.cxx:2482
 AliBalancePsi.cxx:2483
 AliBalancePsi.cxx:2484
 AliBalancePsi.cxx:2485
 AliBalancePsi.cxx:2486
 AliBalancePsi.cxx:2487
 AliBalancePsi.cxx:2488
 AliBalancePsi.cxx:2489
 AliBalancePsi.cxx:2490
 AliBalancePsi.cxx:2491
 AliBalancePsi.cxx:2492
 AliBalancePsi.cxx:2493
 AliBalancePsi.cxx:2494
 AliBalancePsi.cxx:2495
 AliBalancePsi.cxx:2496
 AliBalancePsi.cxx:2497
 AliBalancePsi.cxx:2498
 AliBalancePsi.cxx:2499
 AliBalancePsi.cxx:2500
 AliBalancePsi.cxx:2501
 AliBalancePsi.cxx:2502
 AliBalancePsi.cxx:2503
 AliBalancePsi.cxx:2504
 AliBalancePsi.cxx:2505
 AliBalancePsi.cxx:2506
 AliBalancePsi.cxx:2507
 AliBalancePsi.cxx:2508
 AliBalancePsi.cxx:2509
 AliBalancePsi.cxx:2510
 AliBalancePsi.cxx:2511
 AliBalancePsi.cxx:2512
 AliBalancePsi.cxx:2513
 AliBalancePsi.cxx:2514
 AliBalancePsi.cxx:2515
 AliBalancePsi.cxx:2516
 AliBalancePsi.cxx:2517
 AliBalancePsi.cxx:2518
 AliBalancePsi.cxx:2519
 AliBalancePsi.cxx:2520
 AliBalancePsi.cxx:2521
 AliBalancePsi.cxx:2522
 AliBalancePsi.cxx:2523
 AliBalancePsi.cxx:2524
 AliBalancePsi.cxx:2525
 AliBalancePsi.cxx:2526
 AliBalancePsi.cxx:2527
 AliBalancePsi.cxx:2528
 AliBalancePsi.cxx:2529
 AliBalancePsi.cxx:2530
 AliBalancePsi.cxx:2531
 AliBalancePsi.cxx:2532
 AliBalancePsi.cxx:2533
 AliBalancePsi.cxx:2534
 AliBalancePsi.cxx:2535
 AliBalancePsi.cxx:2536
 AliBalancePsi.cxx:2537
 AliBalancePsi.cxx:2538
 AliBalancePsi.cxx:2539
 AliBalancePsi.cxx:2540
 AliBalancePsi.cxx:2541
 AliBalancePsi.cxx:2542
 AliBalancePsi.cxx:2543
 AliBalancePsi.cxx:2544
 AliBalancePsi.cxx:2545
 AliBalancePsi.cxx:2546
 AliBalancePsi.cxx:2547
 AliBalancePsi.cxx:2548
 AliBalancePsi.cxx:2549
 AliBalancePsi.cxx:2550
 AliBalancePsi.cxx:2551
 AliBalancePsi.cxx:2552
 AliBalancePsi.cxx:2553
 AliBalancePsi.cxx:2554
 AliBalancePsi.cxx:2555
 AliBalancePsi.cxx:2556
 AliBalancePsi.cxx:2557
 AliBalancePsi.cxx:2558
 AliBalancePsi.cxx:2559
 AliBalancePsi.cxx:2560
 AliBalancePsi.cxx:2561
 AliBalancePsi.cxx:2562
 AliBalancePsi.cxx:2563
 AliBalancePsi.cxx:2564
 AliBalancePsi.cxx:2565
 AliBalancePsi.cxx:2566
 AliBalancePsi.cxx:2567
 AliBalancePsi.cxx:2568
 AliBalancePsi.cxx:2569
 AliBalancePsi.cxx:2570
 AliBalancePsi.cxx:2571
 AliBalancePsi.cxx:2572
 AliBalancePsi.cxx:2573
 AliBalancePsi.cxx:2574
 AliBalancePsi.cxx:2575
 AliBalancePsi.cxx:2576
 AliBalancePsi.cxx:2577
 AliBalancePsi.cxx:2578
 AliBalancePsi.cxx:2579
 AliBalancePsi.cxx:2580
 AliBalancePsi.cxx:2581
 AliBalancePsi.cxx:2582
 AliBalancePsi.cxx:2583
 AliBalancePsi.cxx:2584
 AliBalancePsi.cxx:2585
 AliBalancePsi.cxx:2586
 AliBalancePsi.cxx:2587
 AliBalancePsi.cxx:2588
 AliBalancePsi.cxx:2589
 AliBalancePsi.cxx:2590
 AliBalancePsi.cxx:2591
 AliBalancePsi.cxx:2592
 AliBalancePsi.cxx:2593
 AliBalancePsi.cxx:2594
 AliBalancePsi.cxx:2595
 AliBalancePsi.cxx:2596
 AliBalancePsi.cxx:2597
 AliBalancePsi.cxx:2598
 AliBalancePsi.cxx:2599
 AliBalancePsi.cxx:2600
 AliBalancePsi.cxx:2601
 AliBalancePsi.cxx:2602
 AliBalancePsi.cxx:2603
 AliBalancePsi.cxx:2604
 AliBalancePsi.cxx:2605
 AliBalancePsi.cxx:2606
 AliBalancePsi.cxx:2607
 AliBalancePsi.cxx:2608
 AliBalancePsi.cxx:2609
 AliBalancePsi.cxx:2610
 AliBalancePsi.cxx:2611
 AliBalancePsi.cxx:2612
 AliBalancePsi.cxx:2613
 AliBalancePsi.cxx:2614
 AliBalancePsi.cxx:2615
 AliBalancePsi.cxx:2616
 AliBalancePsi.cxx:2617
 AliBalancePsi.cxx:2618
 AliBalancePsi.cxx:2619
 AliBalancePsi.cxx:2620
 AliBalancePsi.cxx:2621
 AliBalancePsi.cxx:2622
 AliBalancePsi.cxx:2623
 AliBalancePsi.cxx:2624
 AliBalancePsi.cxx:2625
 AliBalancePsi.cxx:2626
 AliBalancePsi.cxx:2627
 AliBalancePsi.cxx:2628
 AliBalancePsi.cxx:2629
 AliBalancePsi.cxx:2630
 AliBalancePsi.cxx:2631
 AliBalancePsi.cxx:2632
 AliBalancePsi.cxx:2633
 AliBalancePsi.cxx:2634
 AliBalancePsi.cxx:2635
 AliBalancePsi.cxx:2636
 AliBalancePsi.cxx:2637
 AliBalancePsi.cxx:2638
 AliBalancePsi.cxx:2639
 AliBalancePsi.cxx:2640
 AliBalancePsi.cxx:2641
 AliBalancePsi.cxx:2642
 AliBalancePsi.cxx:2643
 AliBalancePsi.cxx:2644
 AliBalancePsi.cxx:2645
 AliBalancePsi.cxx:2646
 AliBalancePsi.cxx:2647
 AliBalancePsi.cxx:2648
 AliBalancePsi.cxx:2649
 AliBalancePsi.cxx:2650
 AliBalancePsi.cxx:2651
 AliBalancePsi.cxx:2652
 AliBalancePsi.cxx:2653
 AliBalancePsi.cxx:2654
 AliBalancePsi.cxx:2655
 AliBalancePsi.cxx:2656
 AliBalancePsi.cxx:2657
 AliBalancePsi.cxx:2658
 AliBalancePsi.cxx:2659
 AliBalancePsi.cxx:2660
 AliBalancePsi.cxx:2661
 AliBalancePsi.cxx:2662
 AliBalancePsi.cxx:2663
 AliBalancePsi.cxx:2664
 AliBalancePsi.cxx:2665
 AliBalancePsi.cxx:2666
 AliBalancePsi.cxx:2667
 AliBalancePsi.cxx:2668
 AliBalancePsi.cxx:2669
 AliBalancePsi.cxx:2670
 AliBalancePsi.cxx:2671
 AliBalancePsi.cxx:2672
 AliBalancePsi.cxx:2673
 AliBalancePsi.cxx:2674
 AliBalancePsi.cxx:2675
 AliBalancePsi.cxx:2676
 AliBalancePsi.cxx:2677
 AliBalancePsi.cxx:2678
 AliBalancePsi.cxx:2679
 AliBalancePsi.cxx:2680
 AliBalancePsi.cxx:2681
 AliBalancePsi.cxx:2682
 AliBalancePsi.cxx:2683
 AliBalancePsi.cxx:2684
 AliBalancePsi.cxx:2685
 AliBalancePsi.cxx:2686
 AliBalancePsi.cxx:2687
 AliBalancePsi.cxx:2688
 AliBalancePsi.cxx:2689
 AliBalancePsi.cxx:2690
 AliBalancePsi.cxx:2691
 AliBalancePsi.cxx:2692
 AliBalancePsi.cxx:2693
 AliBalancePsi.cxx:2694
 AliBalancePsi.cxx:2695
 AliBalancePsi.cxx:2696
 AliBalancePsi.cxx:2697
 AliBalancePsi.cxx:2698
 AliBalancePsi.cxx:2699
 AliBalancePsi.cxx:2700
 AliBalancePsi.cxx:2701
 AliBalancePsi.cxx:2702
 AliBalancePsi.cxx:2703
 AliBalancePsi.cxx:2704
 AliBalancePsi.cxx:2705
 AliBalancePsi.cxx:2706
 AliBalancePsi.cxx:2707
 AliBalancePsi.cxx:2708
 AliBalancePsi.cxx:2709
 AliBalancePsi.cxx:2710
 AliBalancePsi.cxx:2711
 AliBalancePsi.cxx:2712
 AliBalancePsi.cxx:2713
 AliBalancePsi.cxx:2714
 AliBalancePsi.cxx:2715
 AliBalancePsi.cxx:2716
 AliBalancePsi.cxx:2717
 AliBalancePsi.cxx:2718
 AliBalancePsi.cxx:2719
 AliBalancePsi.cxx:2720
 AliBalancePsi.cxx:2721
 AliBalancePsi.cxx:2722
 AliBalancePsi.cxx:2723
 AliBalancePsi.cxx:2724
 AliBalancePsi.cxx:2725
 AliBalancePsi.cxx:2726
 AliBalancePsi.cxx:2727
 AliBalancePsi.cxx:2728
 AliBalancePsi.cxx:2729
 AliBalancePsi.cxx:2730
 AliBalancePsi.cxx:2731
 AliBalancePsi.cxx:2732
 AliBalancePsi.cxx:2733
 AliBalancePsi.cxx:2734
 AliBalancePsi.cxx:2735
 AliBalancePsi.cxx:2736
 AliBalancePsi.cxx:2737
 AliBalancePsi.cxx:2738
 AliBalancePsi.cxx:2739
 AliBalancePsi.cxx:2740
 AliBalancePsi.cxx:2741
 AliBalancePsi.cxx:2742
 AliBalancePsi.cxx:2743
 AliBalancePsi.cxx:2744
 AliBalancePsi.cxx:2745
 AliBalancePsi.cxx:2746
 AliBalancePsi.cxx:2747
 AliBalancePsi.cxx:2748
 AliBalancePsi.cxx:2749
 AliBalancePsi.cxx:2750
 AliBalancePsi.cxx:2751
 AliBalancePsi.cxx:2752
 AliBalancePsi.cxx:2753
 AliBalancePsi.cxx:2754
 AliBalancePsi.cxx:2755
 AliBalancePsi.cxx:2756
 AliBalancePsi.cxx:2757
 AliBalancePsi.cxx:2758
 AliBalancePsi.cxx:2759
 AliBalancePsi.cxx:2760
 AliBalancePsi.cxx:2761
 AliBalancePsi.cxx:2762
 AliBalancePsi.cxx:2763
 AliBalancePsi.cxx:2764
 AliBalancePsi.cxx:2765
 AliBalancePsi.cxx:2766
 AliBalancePsi.cxx:2767
 AliBalancePsi.cxx:2768
 AliBalancePsi.cxx:2769
 AliBalancePsi.cxx:2770
 AliBalancePsi.cxx:2771
 AliBalancePsi.cxx:2772
 AliBalancePsi.cxx:2773
 AliBalancePsi.cxx:2774
 AliBalancePsi.cxx:2775
 AliBalancePsi.cxx:2776
 AliBalancePsi.cxx:2777
 AliBalancePsi.cxx:2778
 AliBalancePsi.cxx:2779
 AliBalancePsi.cxx:2780
 AliBalancePsi.cxx:2781
 AliBalancePsi.cxx:2782
 AliBalancePsi.cxx:2783
 AliBalancePsi.cxx:2784
 AliBalancePsi.cxx:2785
 AliBalancePsi.cxx:2786
 AliBalancePsi.cxx:2787
 AliBalancePsi.cxx:2788
 AliBalancePsi.cxx:2789
 AliBalancePsi.cxx:2790
 AliBalancePsi.cxx:2791
 AliBalancePsi.cxx:2792
 AliBalancePsi.cxx:2793
 AliBalancePsi.cxx:2794
 AliBalancePsi.cxx:2795
 AliBalancePsi.cxx:2796
 AliBalancePsi.cxx:2797
 AliBalancePsi.cxx:2798
 AliBalancePsi.cxx:2799
 AliBalancePsi.cxx:2800
 AliBalancePsi.cxx:2801
 AliBalancePsi.cxx:2802
 AliBalancePsi.cxx:2803
 AliBalancePsi.cxx:2804
 AliBalancePsi.cxx:2805
 AliBalancePsi.cxx:2806
 AliBalancePsi.cxx:2807
 AliBalancePsi.cxx:2808
 AliBalancePsi.cxx:2809
 AliBalancePsi.cxx:2810
 AliBalancePsi.cxx:2811
 AliBalancePsi.cxx:2812
 AliBalancePsi.cxx:2813
 AliBalancePsi.cxx:2814
 AliBalancePsi.cxx:2815
 AliBalancePsi.cxx:2816
 AliBalancePsi.cxx:2817
 AliBalancePsi.cxx:2818
 AliBalancePsi.cxx:2819
 AliBalancePsi.cxx:2820
 AliBalancePsi.cxx:2821
 AliBalancePsi.cxx:2822
 AliBalancePsi.cxx:2823
 AliBalancePsi.cxx:2824
 AliBalancePsi.cxx:2825
 AliBalancePsi.cxx:2826
 AliBalancePsi.cxx:2827
 AliBalancePsi.cxx:2828
 AliBalancePsi.cxx:2829
 AliBalancePsi.cxx:2830
 AliBalancePsi.cxx:2831
 AliBalancePsi.cxx:2832
 AliBalancePsi.cxx:2833
 AliBalancePsi.cxx:2834
 AliBalancePsi.cxx:2835
 AliBalancePsi.cxx:2836
 AliBalancePsi.cxx:2837
 AliBalancePsi.cxx:2838
 AliBalancePsi.cxx:2839
 AliBalancePsi.cxx:2840
 AliBalancePsi.cxx:2841
 AliBalancePsi.cxx:2842
 AliBalancePsi.cxx:2843
 AliBalancePsi.cxx:2844
 AliBalancePsi.cxx:2845
 AliBalancePsi.cxx:2846
 AliBalancePsi.cxx:2847
 AliBalancePsi.cxx:2848
 AliBalancePsi.cxx:2849
 AliBalancePsi.cxx:2850
 AliBalancePsi.cxx:2851
 AliBalancePsi.cxx:2852
 AliBalancePsi.cxx:2853
 AliBalancePsi.cxx:2854
 AliBalancePsi.cxx:2855
 AliBalancePsi.cxx:2856
 AliBalancePsi.cxx:2857
 AliBalancePsi.cxx:2858
 AliBalancePsi.cxx:2859
 AliBalancePsi.cxx:2860
 AliBalancePsi.cxx:2861
 AliBalancePsi.cxx:2862
 AliBalancePsi.cxx:2863
 AliBalancePsi.cxx:2864
 AliBalancePsi.cxx:2865
 AliBalancePsi.cxx:2866
 AliBalancePsi.cxx:2867
 AliBalancePsi.cxx:2868
 AliBalancePsi.cxx:2869
 AliBalancePsi.cxx:2870
 AliBalancePsi.cxx:2871
 AliBalancePsi.cxx:2872
 AliBalancePsi.cxx:2873
 AliBalancePsi.cxx:2874
 AliBalancePsi.cxx:2875
 AliBalancePsi.cxx:2876
 AliBalancePsi.cxx:2877
 AliBalancePsi.cxx:2878
 AliBalancePsi.cxx:2879
 AliBalancePsi.cxx:2880
 AliBalancePsi.cxx:2881
 AliBalancePsi.cxx:2882
 AliBalancePsi.cxx:2883
 AliBalancePsi.cxx:2884
 AliBalancePsi.cxx:2885
 AliBalancePsi.cxx:2886
 AliBalancePsi.cxx:2887
 AliBalancePsi.cxx:2888
 AliBalancePsi.cxx:2889
 AliBalancePsi.cxx:2890
 AliBalancePsi.cxx:2891
 AliBalancePsi.cxx:2892
 AliBalancePsi.cxx:2893
 AliBalancePsi.cxx:2894
 AliBalancePsi.cxx:2895