ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * 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$ */

//-------------------------------------------------------------------------
//               Implementation of the ESD V0 vertex class
//            This class is part of the Event Data Summary
//            set of classes and contains information about
//            V0 kind vertexes generated by a neutral particle
//     Origin: Iouri Belikov, IReS, Strasbourg, Jouri.Belikov@cern.ch
//     Modified by: Marian Ivanov,  CERN, Marian.Ivanov@cern.ch
//            and  Boris Hippolyte,IPHC, hippolyt@in2p3.fr 
//-------------------------------------------------------------------------

#include <TMath.h>
#include <TDatabasePDG.h>
#include <TParticlePDG.h>
#include <TVector3.h>

#include "AliLog.h"
#include "AliESDv0.h"
#include "AliESDV0Params.h"
#include "AliKFParticle.h"
#include "AliKFVertex.h"

ClassImp(AliESDv0)

const AliESDV0Params  AliESDv0::fgkParams;

AliESDv0::AliESDv0() :
  AliVParticle(),
  fParamN(),
  fParamP(),
  fEffMass(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass()),
  fDcaV0Daughters(0),
  fChi2V0(0.),
  fRr(0),
  fDistSigma(0),
  fChi2Before(0),
  fChi2After(0),
  fPointAngleFi(0),
  fPointAngleTh(0),
  fPointAngle(0),
  fPdgCode(kK0Short),
  fNidx(0),
  fPidx(0),
  fStatus(0),
  fNBefore(0),
  fNAfter(0),
  fOnFlyStatus(kFALSE)
{
  //--------------------------------------------------------------------
  // Default constructor  (K0s)
  //--------------------------------------------------------------------

  for (Int_t i=0; i<3; i++) {
    fPos[i] = 0.;
    fNmom[i] = 0.;
    fPmom[i] = 0.;
  }

  for (Int_t i=0; i<6; i++) {
    fPosCov[i]= 0.;
  }

  for (Int_t i=0;i<6;i++){fClusters[0][i]=0; fClusters[1][i]=0;}
  fNormDCAPrim[0]=fNormDCAPrim[1]=0;
  for (Int_t i=0;i<3;i++){fAngle[i]=0;}
  for (Int_t i=0;i<4;i++){fCausality[i]=0;}
}

AliESDv0::AliESDv0(const AliESDv0& v0) :
  AliVParticle(v0),
  fParamN(v0.fParamN),
  fParamP(v0.fParamP),
  fEffMass(v0.fEffMass),
  fDcaV0Daughters(v0.fDcaV0Daughters),
  fChi2V0(v0.fChi2V0),
  fRr(v0.fRr),
  fDistSigma(v0.fDistSigma),
  fChi2Before(v0.fChi2Before),
  fChi2After(v0.fChi2After),
  fPointAngleFi(v0.fPointAngleFi),
  fPointAngleTh(v0.fPointAngleTh),
  fPointAngle(v0.fPointAngle),
  fPdgCode(v0.fPdgCode),
  fNidx(v0.fNidx),
  fPidx(v0.fPidx),
  fStatus(v0.fStatus),
  fNBefore(v0.fNBefore),
  fNAfter(v0.fNAfter),
  fOnFlyStatus(v0.fOnFlyStatus)
{
  //--------------------------------------------------------------------
  // The copy constructor
  //--------------------------------------------------------------------

  for (int i=0; i<3; i++) {
    fPos[i]  = v0.fPos[i];
    fNmom[i] = v0.fNmom[i];
    fPmom[i] = v0.fPmom[i];
  }
  for (int i=0; i<6; i++) {
    fPosCov[i]  = v0.fPosCov[i];
  }

  for (Int_t i=0; i<2; i++) {
    fNormDCAPrim[i]=v0.fNormDCAPrim[i];
  }
  for (Int_t i=0;i<6;i++){
      fClusters[0][i]=v0.fClusters[0][i]; 
      fClusters[1][i]=v0.fClusters[1][i];
  }
  for (Int_t i=0;i<3;i++){
      fAngle[i]=v0.fAngle[i];
  }
  for (Int_t i=0;i<4;i++){fCausality[i]=v0.fCausality[i];}
}


AliESDv0::AliESDv0(const AliExternalTrackParam &t1, Int_t i1,
                   const AliExternalTrackParam &t2, Int_t i2) :
  AliVParticle(),
  fParamN(t1),
  fParamP(t2),
  fEffMass(TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass()),
  fDcaV0Daughters(0),
  fChi2V0(0.),
  fRr(0),
  fDistSigma(0),
  fChi2Before(0),
  fChi2After(0),
  fPointAngleFi(0),
  fPointAngleTh(0),
  fPointAngle(0),
  fPdgCode(kK0Short),
  fNidx(i1),
  fPidx(i2),
  fStatus(0),
  fNBefore(0),
  fNAfter(0),
  fOnFlyStatus(kFALSE)
{
  //--------------------------------------------------------------------
  // Main constructor  (K0s)
  //--------------------------------------------------------------------

  //Make sure the daughters are ordered (needed for the on-the-fly V0s)
  Short_t cN=t1.Charge(), cP=t2.Charge();
  if ((cN>0) && (cN != cP)) {
     fParamN.~AliExternalTrackParam();
     new (&fParamN) AliExternalTrackParam(t2);
     fParamP.~AliExternalTrackParam();
     new (&fParamP) AliExternalTrackParam(t1);

     Int_t index=fNidx;
     fNidx=fPidx;
     fPidx=index;
  }

  for (Int_t i=0; i<6; i++) {
    fPosCov[i]= 0.;
  }

  //Trivial estimation of the vertex parameters
  Double_t alpha=t1.GetAlpha(), cs=TMath::Cos(alpha), sn=TMath::Sin(alpha);
  Double_t tmp[3];
  t1.GetPxPyPz(tmp);
  Double_t px1=tmp[0], py1=tmp[1], pz1=tmp[2];
  t1.GetXYZ(tmp);
  Double_t  x1=tmp[0],  y1=tmp[1],  z1=tmp[2];
  const Double_t ss=0.0005*0.0005;//a kind of a residual misalignment precision
  Double_t sx1=sn*sn*t1.GetSigmaY2()+ss, sy1=cs*cs*t1.GetSigmaY2()+ss; 


  alpha=t2.GetAlpha(); cs=TMath::Cos(alpha); sn=TMath::Sin(alpha);
  t2.GetPxPyPz(tmp);
  Double_t px2=tmp[0], py2=tmp[1], pz2=tmp[2];
  t2.GetXYZ(tmp);
  Double_t  x2=tmp[0],  y2=tmp[1],  z2=tmp[2];
  Double_t sx2=sn*sn*t2.GetSigmaY2()+ss, sy2=cs*cs*t2.GetSigmaY2()+ss; 
    
  Double_t sz1=t1.GetSigmaZ2(), sz2=t2.GetSigmaZ2();
  Double_t wx1=sx2/(sx1+sx2), wx2=1.- wx1;
  Double_t wy1=sy2/(sy1+sy2), wy2=1.- wy1;
  Double_t wz1=sz2/(sz1+sz2), wz2=1.- wz1;
  fPos[0]=wx1*x1 + wx2*x2; fPos[1]=wy1*y1 + wy2*y2; fPos[2]=wz1*z1 + wz2*z2;

  //fPos[0]=0.5*(x1+x2); fPos[1]=0.5*(y1+y2); fPos[2]=0.5*(z1+z2);
  fNmom[0]=px1; fNmom[1]=py1; fNmom[2]=pz1; 
  fPmom[0]=px2; fPmom[1]=py2; fPmom[2]=pz2;

  for (Int_t i=0;i<6;i++){fClusters[0][i]=0; fClusters[1][i]=0;}
  fNormDCAPrim[0]=fNormDCAPrim[1]=0;
  for (Int_t i=0;i<3;i++){fAngle[i]=0;}
  for (Int_t i=0;i<4;i++){fCausality[i]=0;}
}

AliESDv0& AliESDv0::operator=(const AliESDv0 &v0)
{
  //--------------------------------------------------------------------
  // The assignment operator
  //--------------------------------------------------------------------

  if(this==&v0)return *this;
  AliVParticle::operator=(v0);
  fParamN  = v0.fParamN;
  fParamP  = v0.fParamP;
  fEffMass = v0.fEffMass;
  fDcaV0Daughters = v0.fDcaV0Daughters;
  fChi2V0 = v0.fChi2V0;
  fRr = v0.fRr;
  fDistSigma    = v0.fDistSigma;
  fChi2Before   = v0.fChi2Before;
  fChi2After    = v0.fChi2After;
  fPointAngleFi = v0.fPointAngleFi;
  fPointAngleTh = v0.fPointAngleTh;
  fPointAngle   = v0.fPointAngle;
  fPdgCode      = v0.fPdgCode;
  fNidx         = v0.fNidx;
  fPidx         = v0.fPidx;
  fStatus       = v0.fStatus;
  fNBefore      = v0.fNBefore;
  fNAfter       = v0.fNAfter;
  fOnFlyStatus  = v0.fOnFlyStatus;

  for (int i=0; i<3; i++) {
    fPos[i]  = v0.fPos[i];
    fNmom[i] = v0.fNmom[i];
    fPmom[i] = v0.fPmom[i];
  }
  for (int i=0; i<6; i++) {
    fPosCov[i]  = v0.fPosCov[i];
  }
  for (Int_t i=0; i<2; i++) {
    fNormDCAPrim[i]=v0.fNormDCAPrim[i];
  }
  for (Int_t i=0;i<6;i++){
      fClusters[0][i]=v0.fClusters[0][i]; 
      fClusters[1][i]=v0.fClusters[1][i];
  }
  for (Int_t i=0;i<3;i++){
      fAngle[i]=v0.fAngle[i];
  }
  for (Int_t i=0;i<4;i++){fCausality[i]=v0.fCausality[i];}

  return *this;
}

void AliESDv0::Copy(TObject& obj) const {

  // this overwrites the virtual TOBject::Copy()
  // to allow run time copying without casting
  // in AliESDEvent

  if(this==&obj)return;
  AliESDv0 *robj = dynamic_cast<AliESDv0*>(&obj);
  if(!robj)return; // not an aliesesv0
  *robj = *this;
}

AliESDv0::~AliESDv0(){
  //--------------------------------------------------------------------
  // Empty destructor
  //--------------------------------------------------------------------
}

// Start with AliVParticle functions
Double_t AliESDv0::E() const {
  //--------------------------------------------------------------------
  // This gives the energy assuming the ChangeMassHypothesis was called
  //--------------------------------------------------------------------
  return E(fPdgCode);
}

Double_t AliESDv0::Y() const {
  //--------------------------------------------------------------------
  // This gives the energy assuming the ChangeMassHypothesis was called
  //--------------------------------------------------------------------
  return Y(fPdgCode);
}

// Then extend AliVParticle functions
Double_t AliESDv0::E(Int_t pdg) const {
  //--------------------------------------------------------------------
  // This gives the energy with the particle hypothesis as argument 
  //--------------------------------------------------------------------
  Double_t mass = TDatabasePDG::Instance()->GetParticle(pdg)->Mass();
  return TMath::Sqrt(mass*mass+P()*P());
}

Double_t AliESDv0::Y(Int_t pdg) const {
  //--------------------------------------------------------------------
  // This gives the rapidity with the particle hypothesis as argument 
  //--------------------------------------------------------------------
  return 0.5*TMath::Log((E(pdg)+Pz())/(E(pdg)-Pz()+1.e-13));
}

// Now the functions for analysis consistency
Double_t AliESDv0::RapK0Short() const {
  //--------------------------------------------------------------------
  // This gives the pseudorapidity assuming a K0s particle
  //--------------------------------------------------------------------
  return Y(kK0Short);
}

Double_t AliESDv0::RapLambda() const {
  //--------------------------------------------------------------------
  // This gives the pseudorapidity assuming a (Anti) Lambda particle
  //--------------------------------------------------------------------
  return Y(kLambda0);
}

Double_t AliESDv0::AlphaV0() const {
  //--------------------------------------------------------------------
  // This gives the Armenteros-Podolanski alpha
  //--------------------------------------------------------------------
  TVector3 momNeg(fNmom[0],fNmom[1],fNmom[2]);
  TVector3 momPos(fPmom[0],fPmom[1],fPmom[2]);
  TVector3 momTot(Px(),Py(),Pz());

  Double_t lQlNeg = momNeg.Dot(momTot)/momTot.Mag();
  Double_t lQlPos = momPos.Dot(momTot)/momTot.Mag();

  //return 1.-2./(1.+lQlNeg/lQlPos);
  return (lQlPos - lQlNeg)/(lQlPos + lQlNeg);
}

Double_t AliESDv0::PtArmV0() const {
  //--------------------------------------------------------------------
  // This gives the Armenteros-Podolanski ptarm
  //--------------------------------------------------------------------
  TVector3 momNeg(fNmom[0],fNmom[1],fNmom[2]);
  TVector3 momTot(Px(),Py(),Pz());

  return momNeg.Perp(momTot);
}

// Eventually the older functions
Double_t AliESDv0::ChangeMassHypothesis(Int_t code) {
  //--------------------------------------------------------------------
  // This function changes the mass hypothesis for this V0
  // and returns the "kinematical quality" of this hypothesis 
  //--------------------------------------------------------------------
  static
  Double_t piMass=TDatabasePDG::Instance()->GetParticle(kPiPlus)->Mass();
  static
  Double_t prMass=TDatabasePDG::Instance()->GetParticle(kProton)->Mass();
  static
  Double_t k0Mass=TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
  static
  Double_t l0Mass=TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();

  Double_t nmass=piMass, pmass=piMass, mass=k0Mass, ps=0.206;

  fPdgCode=code;

  switch (code) {
  case kLambda0:
    nmass=piMass; pmass=prMass; mass=l0Mass; ps=0.101; break;
  case kLambda0Bar:
    pmass=piMass; nmass=prMass; mass=l0Mass; ps=0.101; break;
  case kK0Short: 
    break;
  default:
    AliError("invalide PDG code ! Assuming K0s...");
    fPdgCode=kK0Short;
    break;
  }

  Double_t pxn=fNmom[0], pyn=fNmom[1], pzn=fNmom[2]; 
  Double_t pxp=fPmom[0], pyp=fPmom[1], pzp=fPmom[2];

  Double_t en=TMath::Sqrt(nmass*nmass + pxn*pxn + pyn*pyn + pzn*pzn);
  Double_t ep=TMath::Sqrt(pmass*pmass + pxp*pxp + pyp*pyp + pzp*pzp);
  Double_t pxl=pxn+pxp, pyl=pyn+pyp, pzl=pzn+pzp;
  Double_t pl=TMath::Sqrt(pxl*pxl + pyl*pyl + pzl*pzl);

  fEffMass=TMath::Sqrt((en+ep)*(en+ep)-pl*pl);

  Double_t beta=pl/(en+ep);
  Double_t pln=(pxn*pxl + pyn*pyl + pzn*pzl)/pl;
  Double_t plp=(pxp*pxl + pyp*pyl + pzp*pzl)/pl;

  Double_t pt2=pxp*pxp + pyp*pyp + pzp*pzp - plp*plp;

  Double_t a=(plp-pln)/(plp+pln);
  a -= (pmass*pmass-nmass*nmass)/(mass*mass);
  a = 0.25*beta*beta*mass*mass*a*a + pt2;

  return (a - ps*ps);
  
}

void AliESDv0::GetPxPyPz(Double_t &px, Double_t &py, Double_t &pz) const {
  //--------------------------------------------------------------------
  // This function returns V0's momentum (global)
  //--------------------------------------------------------------------
  px=fNmom[0]+fPmom[0]; 
  py=fNmom[1]+fPmom[1]; 
  pz=fNmom[2]+fPmom[2]; 
}

void AliESDv0::GetXYZ(Double_t &x, Double_t &y, Double_t &z) const {
  //--------------------------------------------------------------------
  // This function returns V0's position (global)
  //--------------------------------------------------------------------
  x=fPos[0]; 
  y=fPos[1]; 
  z=fPos[2]; 
}

Float_t AliESDv0::GetD(Double_t x0, Double_t y0) const {
  //--------------------------------------------------------------------
  // This function returns V0's impact parameter calculated in 2D in XY plane
  //--------------------------------------------------------------------
  Double_t x=fPos[0],y=fPos[1];
  Double_t px=fNmom[0]+fPmom[0];
  Double_t py=fNmom[1]+fPmom[1];

  Double_t dz=(x0-x)*py - (y0-y)*px;
  Double_t d=TMath::Sqrt(dz*dz/(px*px+py*py));
  return d;
}

Float_t AliESDv0::GetD(Double_t x0, Double_t y0, Double_t z0) const {
  //--------------------------------------------------------------------
  // This function returns V0's impact parameter calculated in 3D
  //--------------------------------------------------------------------
  Double_t x=fPos[0],y=fPos[1],z=fPos[2];
  Double_t px=fNmom[0]+fPmom[0];
  Double_t py=fNmom[1]+fPmom[1];
  Double_t pz=fNmom[2]+fPmom[2];

  Double_t dx=(y0-y)*pz - (z0-z)*py; 
  Double_t dy=(x0-x)*pz - (z0-z)*px;
  Double_t dz=(x0-x)*py - (y0-y)*px;
  Double_t d=TMath::Sqrt((dx*dx+dy*dy+dz*dz)/(px*px+py*py+pz*pz));
  return d;
}

Float_t AliESDv0::GetV0CosineOfPointingAngle(Double_t refPointX, Double_t refPointY, Double_t refPointZ) const {
  // calculates the pointing angle of the V0 wrt a reference point

  Double_t momV0[3]; //momentum of the V0
  GetPxPyPz(momV0[0],momV0[1],momV0[2]);

  Double_t deltaPos[3]; //vector between the reference point and the V0 vertex
  deltaPos[0] = fPos[0] - refPointX;
  deltaPos[1] = fPos[1] - refPointY;
  deltaPos[2] = fPos[2] - refPointZ;

  Double_t momV02    = momV0[0]*momV0[0] + momV0[1]*momV0[1] + momV0[2]*momV0[2];
  Double_t deltaPos2 = deltaPos[0]*deltaPos[0] + deltaPos[1]*deltaPos[1] + deltaPos[2]*deltaPos[2];

  Double_t cosinePointingAngle = (deltaPos[0]*momV0[0] +
				  deltaPos[1]*momV0[1] +
				  deltaPos[2]*momV0[2] ) /
    TMath::Sqrt(momV02 * deltaPos2);
  
  return cosinePointingAngle;
}


// **** The following functions need to be revised

void AliESDv0::GetPosCov(Double_t cov[6]) const {

  for (Int_t i=0; i<6; ++i) cov[i] = fPosCov[i];

}

Double_t AliESDv0::GetSigmaY(){
  //
  // return sigmay in y  at vertex position  using covariance matrix 
  //
  const Double_t * cp  = fParamP.GetCovariance();
  const Double_t * cm  = fParamN.GetCovariance();
  Double_t sigmay = cp[0]+cm[0]+ cp[5]*(fParamP.GetX()-fRr)*(fParamP.GetX()-fRr)+ cm[5]*(fParamN.GetX()-fRr)*(fParamN.GetX()-fRr);
  return (sigmay>0) ? TMath::Sqrt(sigmay):100;
}

Double_t AliESDv0::GetSigmaZ(){
  //
  // return sigmay in y  at vertex position  using covariance matrix 
  //
  const Double_t * cp  = fParamP.GetCovariance();
  const Double_t * cm  = fParamN.GetCovariance();
  Double_t sigmaz = cp[2]+cm[2]+ cp[9]*(fParamP.GetX()-fRr)*(fParamP.GetX()-fRr)+ cm[9]*(fParamN.GetX()-fRr)*(fParamN.GetX()-fRr);
  return (sigmaz>0) ? TMath::Sqrt(sigmaz):100;
}

Double_t AliESDv0::GetSigmaD0(){
  //
  // Sigma parameterization using covariance matrix
  //
  // sigma of distance between two tracks in vertex position 
  // sigma of DCA is proportianal to sigmaD0
  // factor 2 difference is explained by the fact that the DCA is calculated at the position 
  // where the tracks as closest together ( not exact position of the vertex)
  //
  const Double_t * cp      = fParamP.GetCovariance();
  const Double_t * cm      = fParamN.GetCovariance();
  Double_t sigmaD0   = cp[0]+cm[0]+cp[2]+cm[2]+fgkParams.fPSigmaOffsetD0*fgkParams.fPSigmaOffsetD0;
  sigmaD0           += ((fParamP.GetX()-fRr)*(fParamP.GetX()-fRr))*(cp[5]+cp[9]);
  sigmaD0           += ((fParamN.GetX()-fRr)*(fParamN.GetX()-fRr))*(cm[5]+cm[9]);
  return (sigmaD0>0)? TMath::Sqrt(sigmaD0):100;
}


Double_t AliESDv0::GetSigmaAP0(){
  //
  //Sigma parameterization using covariance matrices
  //
  Double_t prec  = TMath::Sqrt((fNmom[0]+fPmom[0])*(fNmom[0]+fPmom[0])
			      +(fNmom[1]+fPmom[1])*(fNmom[1]+fPmom[1])
			      +(fNmom[2]+fPmom[2])*(fNmom[2]+fPmom[2]));
  Double_t normp = TMath::Sqrt(fPmom[0]*fPmom[0]+fPmom[1]*fPmom[1]+fPmom[2]*fPmom[2])/prec;  // fraction of the momenta
  Double_t normm = TMath::Sqrt(fNmom[0]*fNmom[0]+fNmom[1]*fNmom[1]+fNmom[2]*fNmom[2])/prec;  
  const Double_t * cp      = fParamP.GetCovariance();
  const Double_t * cm      = fParamN.GetCovariance();
  Double_t sigmaAP0 = fgkParams.fPSigmaOffsetAP0*fgkParams.fPSigmaOffsetAP0;                           // minimal part
  sigmaAP0 +=  (cp[5]+cp[9])*(normp*normp)+(cm[5]+cm[9])*(normm*normm);          // angular resolution part
  Double_t sigmaAP1 = GetSigmaD0()/(TMath::Abs(fRr)+0.01);                       // vertex position part
  sigmaAP0 +=  0.5*sigmaAP1*sigmaAP1;                              
  return (sigmaAP0>0)? TMath::Sqrt(sigmaAP0):100;
}

Double_t AliESDv0::GetEffectiveSigmaD0(){
  //
  // minimax - effective Sigma parameterization 
  // p12 effective curvature and v0 radius postion used as parameters  
  //  
  Double_t p12 = TMath::Sqrt(fParamP.GetParameter()[4]*fParamP.GetParameter()[4]+
			     fParamN.GetParameter()[4]*fParamN.GetParameter()[4]);
  Double_t sigmaED0= TMath::Max(TMath::Sqrt(fRr)-fgkParams.fPSigmaRminDE,0.0)*fgkParams.fPSigmaCoefDE*p12*p12;
  sigmaED0*= sigmaED0;
  sigmaED0*= sigmaED0;
  sigmaED0 = TMath::Sqrt(sigmaED0+fgkParams.fPSigmaOffsetDE*fgkParams.fPSigmaOffsetDE);
  return (sigmaED0<fgkParams.fPSigmaMaxDE) ? sigmaED0: fgkParams.fPSigmaMaxDE;
}


Double_t AliESDv0::GetEffectiveSigmaAP0(){
  //
  // effective Sigma parameterization of point angle resolution 
  //
  Double_t p12 = TMath::Sqrt(fParamP.GetParameter()[4]*fParamP.GetParameter()[4]+
			     fParamN.GetParameter()[4]*fParamN.GetParameter()[4]);
  Double_t sigmaAPE= fgkParams.fPSigmaBase0APE;
  sigmaAPE+= fgkParams.fPSigmaR0APE/(fgkParams.fPSigmaR1APE+fRr);
  sigmaAPE*= (fgkParams.fPSigmaP0APE+fgkParams.fPSigmaP1APE*p12);
  sigmaAPE = TMath::Min(sigmaAPE,fgkParams.fPSigmaMaxAPE);
  return sigmaAPE;
}


Double_t  AliESDv0::GetMinimaxSigmaAP0(){
  //
  // calculate mini-max effective sigma of point angle resolution
  //
  //compv0->fTree->SetAlias("SigmaAP2","max(min((SigmaAP0+SigmaAPE0)*0.5,1.5*SigmaAPE0),0.5*SigmaAPE0+0.003)");
  Double_t    effectiveSigma = GetEffectiveSigmaAP0();
  Double_t    sigmaMMAP = 0.5*(GetSigmaAP0()+effectiveSigma);
  sigmaMMAP  = TMath::Min(sigmaMMAP, fgkParams.fPMaxFractionAP0*effectiveSigma);
  sigmaMMAP  = TMath::Max(sigmaMMAP, fgkParams.fPMinFractionAP0*effectiveSigma+fgkParams.fPMinAP0);
  return sigmaMMAP;
}
Double_t  AliESDv0::GetMinimaxSigmaD0(){
  //
  // calculate mini-max sigma of dca resolution
  // 
  //compv0->fTree->SetAlias("SigmaD2","max(min((SigmaD0+SigmaDE0)*0.5,1.5*SigmaDE0),0.5*SigmaDE0)");
  Double_t    effectiveSigma = GetEffectiveSigmaD0();
  Double_t    sigmaMMD0 = 0.5*(GetSigmaD0()+effectiveSigma);
  sigmaMMD0  = TMath::Min(sigmaMMD0, fgkParams.fPMaxFractionD0*effectiveSigma);
  sigmaMMD0  = TMath::Max(sigmaMMD0, fgkParams.fPMinFractionD0*effectiveSigma+fgkParams.fPMinD0);
  return sigmaMMD0;
}


Double_t AliESDv0::GetLikelihoodAP(Int_t mode0, Int_t mode1){
  //
  // get likelihood for point angle
  //
  Double_t sigmaAP = 0.007;            //default sigma
  switch (mode0){
  case 0:
    sigmaAP = GetSigmaAP0();           // mode 0  - covariance matrix estimates used 
    break;
  case 1:
    sigmaAP = GetEffectiveSigmaAP0();  // mode 1 - effective sigma used
    break;
  case 2:
    sigmaAP = GetMinimaxSigmaAP0();    // mode 2 - minimax sigma
    break;
  }
  Double_t apNorm = TMath::Min(TMath::ACos(fPointAngle)/sigmaAP,50.);  
  //normalized point angle, restricted - because of overflow problems in Exp
  Double_t likelihood = 0;
  switch(mode1){
  case 0:
    likelihood = TMath::Exp(-0.5*apNorm*apNorm);   
    // one component
    break;
  case 1:
    likelihood = (TMath::Exp(-0.5*apNorm*apNorm)+0.5* TMath::Exp(-0.25*apNorm*apNorm))/1.5;
    // two components
    break;
  case 2:
    likelihood = (TMath::Exp(-0.5*apNorm*apNorm)+0.5* TMath::Exp(-0.25*apNorm*apNorm)+0.25*TMath::Exp(-0.125*apNorm*apNorm))/1.75;
    // three components
    break;
  }
  return likelihood;
}

Double_t AliESDv0::GetLikelihoodD(Int_t mode0, Int_t mode1){
  //
  // get likelihood for DCA
  //
  Double_t sigmaD = 0.03;            //default sigma
  switch (mode0){
  case 0:
    sigmaD = GetSigmaD0();           // mode 0  - covariance matrix estimates used 
    break;
  case 1:
    sigmaD = GetEffectiveSigmaD0();  // mode 1 - effective sigma used
    break;
  case 2:
    sigmaD = GetMinimaxSigmaD0();    // mode 2 - minimax sigma
    break;
  }

  //Bo:  Double_t dNorm = TMath::Min(fDist2/sigmaD,50.);
  Double_t dNorm = TMath::Min(fDcaV0Daughters/sigmaD,50.);//Bo:
  //normalized point angle, restricted - because of overflow problems in Exp
  Double_t likelihood = 0;
  switch(mode1){
  case 0:
    likelihood = TMath::Exp(-2.*dNorm);   
    // one component
    break;
  case 1:
    likelihood = (TMath::Exp(-2.*dNorm)+0.5* TMath::Exp(-dNorm))/1.5;
    // two components
    break;
  case 2:
    likelihood = (TMath::Exp(-2.*dNorm)+0.5* TMath::Exp(-dNorm)+0.25*TMath::Exp(-0.5*dNorm))/1.75;
    // three components
    break;
  }
  return likelihood;

}

Double_t AliESDv0::GetLikelihoodC(Int_t mode0, Int_t /*mode1*/) const {
  //
  // get likelihood for Causality
  // !!!  Causality variables defined in AliITStrackerMI !!! 
  //      when more information was available
  //  
  Double_t likelihood = 0.5;
  Double_t minCausal  = TMath::Min(fCausality[0],fCausality[1]);
  Double_t maxCausal  = TMath::Max(fCausality[0],fCausality[1]);
  //  minCausal           = TMath::Max(minCausal,0.5*maxCausal);
  //compv0->fTree->SetAlias("LCausal","(1.05-(2*(0.8-exp(-max(RC.fV0rec.fCausality[0],RC.fV0rec.fCausality[1])))+2*(0.8-exp(-min(RC.fV0rec.fCausality[0],RC.fV0rec.fCausality[1]))))/2)**4");
  
  switch(mode0){
  case 0:
    //normalization 
    likelihood = TMath::Power((1.05-2*(0.8-TMath::Exp(-maxCausal))),4.);
    break;
  case 1:
    likelihood = TMath::Power(1.05-(2*(0.8-TMath::Exp(-maxCausal))+(2*(0.8-TMath::Exp(-minCausal))))*0.5,4.);
    break;
  }
  return likelihood;
  
}

void AliESDv0::SetCausality(Float_t pb0, Float_t pb1, Float_t pa0, Float_t pa1)
{
  //
  // set probabilities
  //
  fCausality[0] = pb0;     // probability - track 0 exist before vertex
  fCausality[1] = pb1;     // probability - track 1 exist before vertex
  fCausality[2] = pa0;     // probability - track 0 exist close after vertex
  fCausality[3] = pa1;     // probability - track 1 exist close after vertex
}
void  AliESDv0::SetClusters(const Int_t *clp, const Int_t *clm)
{
  //
  // Set its clusters indexes
  //
  for (Int_t i=0;i<6;i++) fClusters[0][i] = clp[i]; 
  for (Int_t i=0;i<6;i++) fClusters[1][i] = clm[i]; 
}

Double_t AliESDv0::GetEffMass(UInt_t p1, UInt_t p2) const{
  //
  // calculate effective mass
  //
  const Double_t kpmass[5] = {TDatabasePDG::Instance()->GetParticle(kElectron)->Mass(),
			     TDatabasePDG::Instance()->GetParticle(kMuonMinus)->Mass(),
			     TDatabasePDG::Instance()->GetParticle(kPiPlus)->Mass(),
			     TDatabasePDG::Instance()->GetParticle(kKPlus)->Mass(),
			     TDatabasePDG::Instance()->GetParticle(kProton)->Mass()};
  /*
  if (p1>4) return -1;
  if (p2>4) return -1;
  Double_t mass1 = kpmass[p1]; 
  Double_t mass2 = kpmass[p2];   
  const Double_t *m1 = fPmom;
  const Double_t *m2 = fNmom;
  //
  //if (fRP[p1]+fRM[p2]<fRP[p2]+fRM[p1]){
  //  m1 = fPM;
  //  m2 = fPP;
  //}
  //
  Double_t e1    = TMath::Sqrt(mass1*mass1+
                              m1[0]*m1[0]+
                              m1[1]*m1[1]+
                              m1[2]*m1[2]);
  Double_t e2    = TMath::Sqrt(mass2*mass2+
                              m2[0]*m2[0]+
                              m2[1]*m2[1]+
                              m2[2]*m2[2]);  
  Double_t mass =  
    (m2[0]+m1[0])*(m2[0]+m1[0])+
    (m2[1]+m1[1])*(m2[1]+m1[1])+
    (m2[2]+m1[2])*(m2[2]+m1[2]);
  
  mass = (e1+e2)*(e1+e2)-mass;
  if (mass < 0.) mass = 0.;
  return (TMath::Sqrt(mass));
  */
  if(p1>4 || p2>4) return -1;
  const AliExternalTrackParam *paramP = GetParamP();
  const AliExternalTrackParam *paramN = GetParamN();
  if (paramP->GetParameter()[4]<0){
    paramP=GetParamN();
    paramN=GetParamP();
  }
  Double_t pmom[3]={0}, nmom[3]={0};
  paramP->GetPxPyPz(pmom);
  paramN->GetPxPyPz(nmom);
  Double_t e12   = kpmass[p1]*kpmass[p1]+pmom[0]*pmom[0]+pmom[1]*pmom[1]+pmom[2]*pmom[2];
  Double_t e22   = kpmass[p2]*kpmass[p2]+nmom[0]*nmom[0]+nmom[1]*nmom[1]+nmom[2]*nmom[2];
  Double_t cmass = TMath::Sqrt(TMath::Max(kpmass[p1]*kpmass[p1]+kpmass[p2]*kpmass[p2]
					  +2.*(TMath::Sqrt(e12*e22)-pmom[0]*nmom[0]-pmom[1]*nmom[1]-pmom[2]*nmom[2]),0.));
  return cmass;
			       
}



Double_t AliESDv0::GetKFInfo(UInt_t p1, UInt_t p2, Int_t type) const{
  //
  // type:
  //   0 - return mass
  //   1 - return err mass
  //   2 - return chi2
  // 
  const Int_t spdg[5]={kPositron,kMuonPlus,kPiPlus, kKPlus, kProton};
  const AliExternalTrackParam *paramP = GetParamP();
  const AliExternalTrackParam *paramN = GetParamN();
  if (paramP->GetSign()<0){
    paramP=GetParamN();
    paramN=GetParamP();
  }
  AliKFParticle kfp1(  *(paramP), spdg[p1] *TMath::Sign(1,p1) );
  AliKFParticle kfp2( *(paramN), spdg[p2] *TMath::Sign(1,p2) );
  AliKFParticle *v0KF = new AliKFParticle;
  *(v0KF)+=kfp1;
  *(v0KF)+=kfp2;
  if (type==0) return v0KF->GetMass();
  if (type==1) return v0KF->GetErrMass();
  if (type==2) return v0KF->GetChi2();
  return 0;
}


Double_t AliESDv0::GetKFInfoScale(UInt_t p1, UInt_t p2, Int_t type, Double_t d1pt, Double_t s1pt) const{
  //
  // type
  //   0 - return mass
  //   1 - return err mass
  //   2 - return chi2
  //   d1pt - 1/pt shift
  //   s1pt - scaling of 1/pt
  // Important function to benchmark the pt resolution, and to find out systematic distortion
  //
  const Int_t spdg[5]={kPositron,kMuonPlus,kPiPlus, kKPlus, kProton};
  const AliExternalTrackParam *paramP = GetParamP();
  const AliExternalTrackParam *paramN = GetParamN();
  if (paramP->GetSign()<0){
    paramP=GetParamP();
    paramN=GetParamN();
  }
  Double_t *pparam1 = (Double_t*)paramP->GetParameter();
  Double_t *pparam2 = (Double_t*)paramN->GetParameter();
  pparam1[4]+=d1pt;
  pparam2[4]+=d1pt;
  pparam1[4]*=(1+s1pt);
  pparam2[4]*=(1+s1pt);
  //
  AliKFParticle kfp1( *paramP, spdg[p1] *TMath::Sign(1,p1) );
  AliKFParticle kfp2( *paramN, spdg[p2] *TMath::Sign(1,p2) );
  AliKFParticle *v0KF = new AliKFParticle;
  *(v0KF)+=kfp1;
  *(v0KF)+=kfp2;
  if (type==0) return v0KF->GetMass();
  if (type==1) return v0KF->GetErrMass();
  if (type==2) return v0KF->GetChi2();
  return 0;
}
 AliESDv0.cxx:1
 AliESDv0.cxx:2
 AliESDv0.cxx:3
 AliESDv0.cxx:4
 AliESDv0.cxx:5
 AliESDv0.cxx:6
 AliESDv0.cxx:7
 AliESDv0.cxx:8
 AliESDv0.cxx:9
 AliESDv0.cxx:10
 AliESDv0.cxx:11
 AliESDv0.cxx:12
 AliESDv0.cxx:13
 AliESDv0.cxx:14
 AliESDv0.cxx:15
 AliESDv0.cxx:16
 AliESDv0.cxx:17
 AliESDv0.cxx:18
 AliESDv0.cxx:19
 AliESDv0.cxx:20
 AliESDv0.cxx:21
 AliESDv0.cxx:22
 AliESDv0.cxx:23
 AliESDv0.cxx:24
 AliESDv0.cxx:25
 AliESDv0.cxx:26
 AliESDv0.cxx:27
 AliESDv0.cxx:28
 AliESDv0.cxx:29
 AliESDv0.cxx:30
 AliESDv0.cxx:31
 AliESDv0.cxx:32
 AliESDv0.cxx:33
 AliESDv0.cxx:34
 AliESDv0.cxx:35
 AliESDv0.cxx:36
 AliESDv0.cxx:37
 AliESDv0.cxx:38
 AliESDv0.cxx:39
 AliESDv0.cxx:40
 AliESDv0.cxx:41
 AliESDv0.cxx:42
 AliESDv0.cxx:43
 AliESDv0.cxx:44
 AliESDv0.cxx:45
 AliESDv0.cxx:46
 AliESDv0.cxx:47
 AliESDv0.cxx:48
 AliESDv0.cxx:49
 AliESDv0.cxx:50
 AliESDv0.cxx:51
 AliESDv0.cxx:52
 AliESDv0.cxx:53
 AliESDv0.cxx:54
 AliESDv0.cxx:55
 AliESDv0.cxx:56
 AliESDv0.cxx:57
 AliESDv0.cxx:58
 AliESDv0.cxx:59
 AliESDv0.cxx:60
 AliESDv0.cxx:61
 AliESDv0.cxx:62
 AliESDv0.cxx:63
 AliESDv0.cxx:64
 AliESDv0.cxx:65
 AliESDv0.cxx:66
 AliESDv0.cxx:67
 AliESDv0.cxx:68
 AliESDv0.cxx:69
 AliESDv0.cxx:70
 AliESDv0.cxx:71
 AliESDv0.cxx:72
 AliESDv0.cxx:73
 AliESDv0.cxx:74
 AliESDv0.cxx:75
 AliESDv0.cxx:76
 AliESDv0.cxx:77
 AliESDv0.cxx:78
 AliESDv0.cxx:79
 AliESDv0.cxx:80
 AliESDv0.cxx:81
 AliESDv0.cxx:82
 AliESDv0.cxx:83
 AliESDv0.cxx:84
 AliESDv0.cxx:85
 AliESDv0.cxx:86
 AliESDv0.cxx:87
 AliESDv0.cxx:88
 AliESDv0.cxx:89
 AliESDv0.cxx:90
 AliESDv0.cxx:91
 AliESDv0.cxx:92
 AliESDv0.cxx:93
 AliESDv0.cxx:94
 AliESDv0.cxx:95
 AliESDv0.cxx:96
 AliESDv0.cxx:97
 AliESDv0.cxx:98
 AliESDv0.cxx:99
 AliESDv0.cxx:100
 AliESDv0.cxx:101
 AliESDv0.cxx:102
 AliESDv0.cxx:103
 AliESDv0.cxx:104
 AliESDv0.cxx:105
 AliESDv0.cxx:106
 AliESDv0.cxx:107
 AliESDv0.cxx:108
 AliESDv0.cxx:109
 AliESDv0.cxx:110
 AliESDv0.cxx:111
 AliESDv0.cxx:112
 AliESDv0.cxx:113
 AliESDv0.cxx:114
 AliESDv0.cxx:115
 AliESDv0.cxx:116
 AliESDv0.cxx:117
 AliESDv0.cxx:118
 AliESDv0.cxx:119
 AliESDv0.cxx:120
 AliESDv0.cxx:121
 AliESDv0.cxx:122
 AliESDv0.cxx:123
 AliESDv0.cxx:124
 AliESDv0.cxx:125
 AliESDv0.cxx:126
 AliESDv0.cxx:127
 AliESDv0.cxx:128
 AliESDv0.cxx:129
 AliESDv0.cxx:130
 AliESDv0.cxx:131
 AliESDv0.cxx:132
 AliESDv0.cxx:133
 AliESDv0.cxx:134
 AliESDv0.cxx:135
 AliESDv0.cxx:136
 AliESDv0.cxx:137
 AliESDv0.cxx:138
 AliESDv0.cxx:139
 AliESDv0.cxx:140
 AliESDv0.cxx:141
 AliESDv0.cxx:142
 AliESDv0.cxx:143
 AliESDv0.cxx:144
 AliESDv0.cxx:145
 AliESDv0.cxx:146
 AliESDv0.cxx:147
 AliESDv0.cxx:148
 AliESDv0.cxx:149
 AliESDv0.cxx:150
 AliESDv0.cxx:151
 AliESDv0.cxx:152
 AliESDv0.cxx:153
 AliESDv0.cxx:154
 AliESDv0.cxx:155
 AliESDv0.cxx:156
 AliESDv0.cxx:157
 AliESDv0.cxx:158
 AliESDv0.cxx:159
 AliESDv0.cxx:160
 AliESDv0.cxx:161
 AliESDv0.cxx:162
 AliESDv0.cxx:163
 AliESDv0.cxx:164
 AliESDv0.cxx:165
 AliESDv0.cxx:166
 AliESDv0.cxx:167
 AliESDv0.cxx:168
 AliESDv0.cxx:169
 AliESDv0.cxx:170
 AliESDv0.cxx:171
 AliESDv0.cxx:172
 AliESDv0.cxx:173
 AliESDv0.cxx:174
 AliESDv0.cxx:175
 AliESDv0.cxx:176
 AliESDv0.cxx:177
 AliESDv0.cxx:178
 AliESDv0.cxx:179
 AliESDv0.cxx:180
 AliESDv0.cxx:181
 AliESDv0.cxx:182
 AliESDv0.cxx:183
 AliESDv0.cxx:184
 AliESDv0.cxx:185
 AliESDv0.cxx:186
 AliESDv0.cxx:187
 AliESDv0.cxx:188
 AliESDv0.cxx:189
 AliESDv0.cxx:190
 AliESDv0.cxx:191
 AliESDv0.cxx:192
 AliESDv0.cxx:193
 AliESDv0.cxx:194
 AliESDv0.cxx:195
 AliESDv0.cxx:196
 AliESDv0.cxx:197
 AliESDv0.cxx:198
 AliESDv0.cxx:199
 AliESDv0.cxx:200
 AliESDv0.cxx:201
 AliESDv0.cxx:202
 AliESDv0.cxx:203
 AliESDv0.cxx:204
 AliESDv0.cxx:205
 AliESDv0.cxx:206
 AliESDv0.cxx:207
 AliESDv0.cxx:208
 AliESDv0.cxx:209
 AliESDv0.cxx:210
 AliESDv0.cxx:211
 AliESDv0.cxx:212
 AliESDv0.cxx:213
 AliESDv0.cxx:214
 AliESDv0.cxx:215
 AliESDv0.cxx:216
 AliESDv0.cxx:217
 AliESDv0.cxx:218
 AliESDv0.cxx:219
 AliESDv0.cxx:220
 AliESDv0.cxx:221
 AliESDv0.cxx:222
 AliESDv0.cxx:223
 AliESDv0.cxx:224
 AliESDv0.cxx:225
 AliESDv0.cxx:226
 AliESDv0.cxx:227
 AliESDv0.cxx:228
 AliESDv0.cxx:229
 AliESDv0.cxx:230
 AliESDv0.cxx:231
 AliESDv0.cxx:232
 AliESDv0.cxx:233
 AliESDv0.cxx:234
 AliESDv0.cxx:235
 AliESDv0.cxx:236
 AliESDv0.cxx:237
 AliESDv0.cxx:238
 AliESDv0.cxx:239
 AliESDv0.cxx:240
 AliESDv0.cxx:241
 AliESDv0.cxx:242
 AliESDv0.cxx:243
 AliESDv0.cxx:244
 AliESDv0.cxx:245
 AliESDv0.cxx:246
 AliESDv0.cxx:247
 AliESDv0.cxx:248
 AliESDv0.cxx:249
 AliESDv0.cxx:250
 AliESDv0.cxx:251
 AliESDv0.cxx:252
 AliESDv0.cxx:253
 AliESDv0.cxx:254
 AliESDv0.cxx:255
 AliESDv0.cxx:256
 AliESDv0.cxx:257
 AliESDv0.cxx:258
 AliESDv0.cxx:259
 AliESDv0.cxx:260
 AliESDv0.cxx:261
 AliESDv0.cxx:262
 AliESDv0.cxx:263
 AliESDv0.cxx:264
 AliESDv0.cxx:265
 AliESDv0.cxx:266
 AliESDv0.cxx:267
 AliESDv0.cxx:268
 AliESDv0.cxx:269
 AliESDv0.cxx:270
 AliESDv0.cxx:271
 AliESDv0.cxx:272
 AliESDv0.cxx:273
 AliESDv0.cxx:274
 AliESDv0.cxx:275
 AliESDv0.cxx:276
 AliESDv0.cxx:277
 AliESDv0.cxx:278
 AliESDv0.cxx:279
 AliESDv0.cxx:280
 AliESDv0.cxx:281
 AliESDv0.cxx:282
 AliESDv0.cxx:283
 AliESDv0.cxx:284
 AliESDv0.cxx:285
 AliESDv0.cxx:286
 AliESDv0.cxx:287
 AliESDv0.cxx:288
 AliESDv0.cxx:289
 AliESDv0.cxx:290
 AliESDv0.cxx:291
 AliESDv0.cxx:292
 AliESDv0.cxx:293
 AliESDv0.cxx:294
 AliESDv0.cxx:295
 AliESDv0.cxx:296
 AliESDv0.cxx:297
 AliESDv0.cxx:298
 AliESDv0.cxx:299
 AliESDv0.cxx:300
 AliESDv0.cxx:301
 AliESDv0.cxx:302
 AliESDv0.cxx:303
 AliESDv0.cxx:304
 AliESDv0.cxx:305
 AliESDv0.cxx:306
 AliESDv0.cxx:307
 AliESDv0.cxx:308
 AliESDv0.cxx:309
 AliESDv0.cxx:310
 AliESDv0.cxx:311
 AliESDv0.cxx:312
 AliESDv0.cxx:313
 AliESDv0.cxx:314
 AliESDv0.cxx:315
 AliESDv0.cxx:316
 AliESDv0.cxx:317
 AliESDv0.cxx:318
 AliESDv0.cxx:319
 AliESDv0.cxx:320
 AliESDv0.cxx:321
 AliESDv0.cxx:322
 AliESDv0.cxx:323
 AliESDv0.cxx:324
 AliESDv0.cxx:325
 AliESDv0.cxx:326
 AliESDv0.cxx:327
 AliESDv0.cxx:328
 AliESDv0.cxx:329
 AliESDv0.cxx:330
 AliESDv0.cxx:331
 AliESDv0.cxx:332
 AliESDv0.cxx:333
 AliESDv0.cxx:334
 AliESDv0.cxx:335
 AliESDv0.cxx:336
 AliESDv0.cxx:337
 AliESDv0.cxx:338
 AliESDv0.cxx:339
 AliESDv0.cxx:340
 AliESDv0.cxx:341
 AliESDv0.cxx:342
 AliESDv0.cxx:343
 AliESDv0.cxx:344
 AliESDv0.cxx:345
 AliESDv0.cxx:346
 AliESDv0.cxx:347
 AliESDv0.cxx:348
 AliESDv0.cxx:349
 AliESDv0.cxx:350
 AliESDv0.cxx:351
 AliESDv0.cxx:352
 AliESDv0.cxx:353
 AliESDv0.cxx:354
 AliESDv0.cxx:355
 AliESDv0.cxx:356
 AliESDv0.cxx:357
 AliESDv0.cxx:358
 AliESDv0.cxx:359
 AliESDv0.cxx:360
 AliESDv0.cxx:361
 AliESDv0.cxx:362
 AliESDv0.cxx:363
 AliESDv0.cxx:364
 AliESDv0.cxx:365
 AliESDv0.cxx:366
 AliESDv0.cxx:367
 AliESDv0.cxx:368
 AliESDv0.cxx:369
 AliESDv0.cxx:370
 AliESDv0.cxx:371
 AliESDv0.cxx:372
 AliESDv0.cxx:373
 AliESDv0.cxx:374
 AliESDv0.cxx:375
 AliESDv0.cxx:376
 AliESDv0.cxx:377
 AliESDv0.cxx:378
 AliESDv0.cxx:379
 AliESDv0.cxx:380
 AliESDv0.cxx:381
 AliESDv0.cxx:382
 AliESDv0.cxx:383
 AliESDv0.cxx:384
 AliESDv0.cxx:385
 AliESDv0.cxx:386
 AliESDv0.cxx:387
 AliESDv0.cxx:388
 AliESDv0.cxx:389
 AliESDv0.cxx:390
 AliESDv0.cxx:391
 AliESDv0.cxx:392
 AliESDv0.cxx:393
 AliESDv0.cxx:394
 AliESDv0.cxx:395
 AliESDv0.cxx:396
 AliESDv0.cxx:397
 AliESDv0.cxx:398
 AliESDv0.cxx:399
 AliESDv0.cxx:400
 AliESDv0.cxx:401
 AliESDv0.cxx:402
 AliESDv0.cxx:403
 AliESDv0.cxx:404
 AliESDv0.cxx:405
 AliESDv0.cxx:406
 AliESDv0.cxx:407
 AliESDv0.cxx:408
 AliESDv0.cxx:409
 AliESDv0.cxx:410
 AliESDv0.cxx:411
 AliESDv0.cxx:412
 AliESDv0.cxx:413
 AliESDv0.cxx:414
 AliESDv0.cxx:415
 AliESDv0.cxx:416
 AliESDv0.cxx:417
 AliESDv0.cxx:418
 AliESDv0.cxx:419
 AliESDv0.cxx:420
 AliESDv0.cxx:421
 AliESDv0.cxx:422
 AliESDv0.cxx:423
 AliESDv0.cxx:424
 AliESDv0.cxx:425
 AliESDv0.cxx:426
 AliESDv0.cxx:427
 AliESDv0.cxx:428
 AliESDv0.cxx:429
 AliESDv0.cxx:430
 AliESDv0.cxx:431
 AliESDv0.cxx:432
 AliESDv0.cxx:433
 AliESDv0.cxx:434
 AliESDv0.cxx:435
 AliESDv0.cxx:436
 AliESDv0.cxx:437
 AliESDv0.cxx:438
 AliESDv0.cxx:439
 AliESDv0.cxx:440
 AliESDv0.cxx:441
 AliESDv0.cxx:442
 AliESDv0.cxx:443
 AliESDv0.cxx:444
 AliESDv0.cxx:445
 AliESDv0.cxx:446
 AliESDv0.cxx:447
 AliESDv0.cxx:448
 AliESDv0.cxx:449
 AliESDv0.cxx:450
 AliESDv0.cxx:451
 AliESDv0.cxx:452
 AliESDv0.cxx:453
 AliESDv0.cxx:454
 AliESDv0.cxx:455
 AliESDv0.cxx:456
 AliESDv0.cxx:457
 AliESDv0.cxx:458
 AliESDv0.cxx:459
 AliESDv0.cxx:460
 AliESDv0.cxx:461
 AliESDv0.cxx:462
 AliESDv0.cxx:463
 AliESDv0.cxx:464
 AliESDv0.cxx:465
 AliESDv0.cxx:466
 AliESDv0.cxx:467
 AliESDv0.cxx:468
 AliESDv0.cxx:469
 AliESDv0.cxx:470
 AliESDv0.cxx:471
 AliESDv0.cxx:472
 AliESDv0.cxx:473
 AliESDv0.cxx:474
 AliESDv0.cxx:475
 AliESDv0.cxx:476
 AliESDv0.cxx:477
 AliESDv0.cxx:478
 AliESDv0.cxx:479
 AliESDv0.cxx:480
 AliESDv0.cxx:481
 AliESDv0.cxx:482
 AliESDv0.cxx:483
 AliESDv0.cxx:484
 AliESDv0.cxx:485
 AliESDv0.cxx:486
 AliESDv0.cxx:487
 AliESDv0.cxx:488
 AliESDv0.cxx:489
 AliESDv0.cxx:490
 AliESDv0.cxx:491
 AliESDv0.cxx:492
 AliESDv0.cxx:493
 AliESDv0.cxx:494
 AliESDv0.cxx:495
 AliESDv0.cxx:496
 AliESDv0.cxx:497
 AliESDv0.cxx:498
 AliESDv0.cxx:499
 AliESDv0.cxx:500
 AliESDv0.cxx:501
 AliESDv0.cxx:502
 AliESDv0.cxx:503
 AliESDv0.cxx:504
 AliESDv0.cxx:505
 AliESDv0.cxx:506
 AliESDv0.cxx:507
 AliESDv0.cxx:508
 AliESDv0.cxx:509
 AliESDv0.cxx:510
 AliESDv0.cxx:511
 AliESDv0.cxx:512
 AliESDv0.cxx:513
 AliESDv0.cxx:514
 AliESDv0.cxx:515
 AliESDv0.cxx:516
 AliESDv0.cxx:517
 AliESDv0.cxx:518
 AliESDv0.cxx:519
 AliESDv0.cxx:520
 AliESDv0.cxx:521
 AliESDv0.cxx:522
 AliESDv0.cxx:523
 AliESDv0.cxx:524
 AliESDv0.cxx:525
 AliESDv0.cxx:526
 AliESDv0.cxx:527
 AliESDv0.cxx:528
 AliESDv0.cxx:529
 AliESDv0.cxx:530
 AliESDv0.cxx:531
 AliESDv0.cxx:532
 AliESDv0.cxx:533
 AliESDv0.cxx:534
 AliESDv0.cxx:535
 AliESDv0.cxx:536
 AliESDv0.cxx:537
 AliESDv0.cxx:538
 AliESDv0.cxx:539
 AliESDv0.cxx:540
 AliESDv0.cxx:541
 AliESDv0.cxx:542
 AliESDv0.cxx:543
 AliESDv0.cxx:544
 AliESDv0.cxx:545
 AliESDv0.cxx:546
 AliESDv0.cxx:547
 AliESDv0.cxx:548
 AliESDv0.cxx:549
 AliESDv0.cxx:550
 AliESDv0.cxx:551
 AliESDv0.cxx:552
 AliESDv0.cxx:553
 AliESDv0.cxx:554
 AliESDv0.cxx:555
 AliESDv0.cxx:556
 AliESDv0.cxx:557
 AliESDv0.cxx:558
 AliESDv0.cxx:559
 AliESDv0.cxx:560
 AliESDv0.cxx:561
 AliESDv0.cxx:562
 AliESDv0.cxx:563
 AliESDv0.cxx:564
 AliESDv0.cxx:565
 AliESDv0.cxx:566
 AliESDv0.cxx:567
 AliESDv0.cxx:568
 AliESDv0.cxx:569
 AliESDv0.cxx:570
 AliESDv0.cxx:571
 AliESDv0.cxx:572
 AliESDv0.cxx:573
 AliESDv0.cxx:574
 AliESDv0.cxx:575
 AliESDv0.cxx:576
 AliESDv0.cxx:577
 AliESDv0.cxx:578
 AliESDv0.cxx:579
 AliESDv0.cxx:580
 AliESDv0.cxx:581
 AliESDv0.cxx:582
 AliESDv0.cxx:583
 AliESDv0.cxx:584
 AliESDv0.cxx:585
 AliESDv0.cxx:586
 AliESDv0.cxx:587
 AliESDv0.cxx:588
 AliESDv0.cxx:589
 AliESDv0.cxx:590
 AliESDv0.cxx:591
 AliESDv0.cxx:592
 AliESDv0.cxx:593
 AliESDv0.cxx:594
 AliESDv0.cxx:595
 AliESDv0.cxx:596
 AliESDv0.cxx:597
 AliESDv0.cxx:598
 AliESDv0.cxx:599
 AliESDv0.cxx:600
 AliESDv0.cxx:601
 AliESDv0.cxx:602
 AliESDv0.cxx:603
 AliESDv0.cxx:604
 AliESDv0.cxx:605
 AliESDv0.cxx:606
 AliESDv0.cxx:607
 AliESDv0.cxx:608
 AliESDv0.cxx:609
 AliESDv0.cxx:610
 AliESDv0.cxx:611
 AliESDv0.cxx:612
 AliESDv0.cxx:613
 AliESDv0.cxx:614
 AliESDv0.cxx:615
 AliESDv0.cxx:616
 AliESDv0.cxx:617
 AliESDv0.cxx:618
 AliESDv0.cxx:619
 AliESDv0.cxx:620
 AliESDv0.cxx:621
 AliESDv0.cxx:622
 AliESDv0.cxx:623
 AliESDv0.cxx:624
 AliESDv0.cxx:625
 AliESDv0.cxx:626
 AliESDv0.cxx:627
 AliESDv0.cxx:628
 AliESDv0.cxx:629
 AliESDv0.cxx:630
 AliESDv0.cxx:631
 AliESDv0.cxx:632
 AliESDv0.cxx:633
 AliESDv0.cxx:634
 AliESDv0.cxx:635
 AliESDv0.cxx:636
 AliESDv0.cxx:637
 AliESDv0.cxx:638
 AliESDv0.cxx:639
 AliESDv0.cxx:640
 AliESDv0.cxx:641
 AliESDv0.cxx:642
 AliESDv0.cxx:643
 AliESDv0.cxx:644
 AliESDv0.cxx:645
 AliESDv0.cxx:646
 AliESDv0.cxx:647
 AliESDv0.cxx:648
 AliESDv0.cxx:649
 AliESDv0.cxx:650
 AliESDv0.cxx:651
 AliESDv0.cxx:652
 AliESDv0.cxx:653
 AliESDv0.cxx:654
 AliESDv0.cxx:655
 AliESDv0.cxx:656
 AliESDv0.cxx:657
 AliESDv0.cxx:658
 AliESDv0.cxx:659
 AliESDv0.cxx:660
 AliESDv0.cxx:661
 AliESDv0.cxx:662
 AliESDv0.cxx:663
 AliESDv0.cxx:664
 AliESDv0.cxx:665
 AliESDv0.cxx:666
 AliESDv0.cxx:667
 AliESDv0.cxx:668
 AliESDv0.cxx:669
 AliESDv0.cxx:670
 AliESDv0.cxx:671
 AliESDv0.cxx:672
 AliESDv0.cxx:673
 AliESDv0.cxx:674
 AliESDv0.cxx:675
 AliESDv0.cxx:676
 AliESDv0.cxx:677
 AliESDv0.cxx:678
 AliESDv0.cxx:679
 AliESDv0.cxx:680
 AliESDv0.cxx:681
 AliESDv0.cxx:682
 AliESDv0.cxx:683
 AliESDv0.cxx:684
 AliESDv0.cxx:685
 AliESDv0.cxx:686
 AliESDv0.cxx:687
 AliESDv0.cxx:688
 AliESDv0.cxx:689
 AliESDv0.cxx:690
 AliESDv0.cxx:691
 AliESDv0.cxx:692
 AliESDv0.cxx:693
 AliESDv0.cxx:694
 AliESDv0.cxx:695
 AliESDv0.cxx:696
 AliESDv0.cxx:697
 AliESDv0.cxx:698
 AliESDv0.cxx:699
 AliESDv0.cxx:700
 AliESDv0.cxx:701
 AliESDv0.cxx:702
 AliESDv0.cxx:703
 AliESDv0.cxx:704
 AliESDv0.cxx:705
 AliESDv0.cxx:706
 AliESDv0.cxx:707
 AliESDv0.cxx:708
 AliESDv0.cxx:709
 AliESDv0.cxx:710
 AliESDv0.cxx:711
 AliESDv0.cxx:712
 AliESDv0.cxx:713
 AliESDv0.cxx:714
 AliESDv0.cxx:715
 AliESDv0.cxx:716
 AliESDv0.cxx:717
 AliESDv0.cxx:718
 AliESDv0.cxx:719
 AliESDv0.cxx:720
 AliESDv0.cxx:721
 AliESDv0.cxx:722
 AliESDv0.cxx:723
 AliESDv0.cxx:724
 AliESDv0.cxx:725
 AliESDv0.cxx:726
 AliESDv0.cxx:727
 AliESDv0.cxx:728
 AliESDv0.cxx:729
 AliESDv0.cxx:730
 AliESDv0.cxx:731
 AliESDv0.cxx:732
 AliESDv0.cxx:733
 AliESDv0.cxx:734
 AliESDv0.cxx:735
 AliESDv0.cxx:736
 AliESDv0.cxx:737
 AliESDv0.cxx:738
 AliESDv0.cxx:739
 AliESDv0.cxx:740
 AliESDv0.cxx:741
 AliESDv0.cxx:742
 AliESDv0.cxx:743
 AliESDv0.cxx:744
 AliESDv0.cxx:745
 AliESDv0.cxx:746
 AliESDv0.cxx:747
 AliESDv0.cxx:748
 AliESDv0.cxx:749
 AliESDv0.cxx:750
 AliESDv0.cxx:751
 AliESDv0.cxx:752
 AliESDv0.cxx:753
 AliESDv0.cxx:754
 AliESDv0.cxx:755
 AliESDv0.cxx:756
 AliESDv0.cxx:757
 AliESDv0.cxx:758
 AliESDv0.cxx:759
 AliESDv0.cxx:760
 AliESDv0.cxx:761
 AliESDv0.cxx:762
 AliESDv0.cxx:763
 AliESDv0.cxx:764
 AliESDv0.cxx:765
 AliESDv0.cxx:766
 AliESDv0.cxx:767
 AliESDv0.cxx:768
 AliESDv0.cxx:769
 AliESDv0.cxx:770
 AliESDv0.cxx:771
 AliESDv0.cxx:772
 AliESDv0.cxx:773
 AliESDv0.cxx:774
 AliESDv0.cxx:775
 AliESDv0.cxx:776
 AliESDv0.cxx:777
 AliESDv0.cxx:778
 AliESDv0.cxx:779
 AliESDv0.cxx:780
 AliESDv0.cxx:781
 AliESDv0.cxx:782
 AliESDv0.cxx:783
 AliESDv0.cxx:784
 AliESDv0.cxx:785
 AliESDv0.cxx:786
 AliESDv0.cxx:787
 AliESDv0.cxx:788
 AliESDv0.cxx:789
 AliESDv0.cxx:790
 AliESDv0.cxx:791
 AliESDv0.cxx:792
 AliESDv0.cxx:793
 AliESDv0.cxx:794
 AliESDv0.cxx:795
 AliESDv0.cxx:796
 AliESDv0.cxx:797
 AliESDv0.cxx:798
 AliESDv0.cxx:799
 AliESDv0.cxx:800
 AliESDv0.cxx:801
 AliESDv0.cxx:802
 AliESDv0.cxx:803
 AliESDv0.cxx:804
 AliESDv0.cxx:805
 AliESDv0.cxx:806
 AliESDv0.cxx:807
 AliESDv0.cxx:808
 AliESDv0.cxx:809
 AliESDv0.cxx:810
 AliESDv0.cxx:811
 AliESDv0.cxx:812
 AliESDv0.cxx:813
 AliESDv0.cxx:814
 AliESDv0.cxx:815
 AliESDv0.cxx:816
 AliESDv0.cxx:817
 AliESDv0.cxx:818
 AliESDv0.cxx:819
 AliESDv0.cxx:820
 AliESDv0.cxx:821
 AliESDv0.cxx:822
 AliESDv0.cxx:823
 AliESDv0.cxx:824
 AliESDv0.cxx:825
 AliESDv0.cxx:826
 AliESDv0.cxx:827
 AliESDv0.cxx:828
 AliESDv0.cxx:829
 AliESDv0.cxx:830
 AliESDv0.cxx:831
 AliESDv0.cxx:832