ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2008, 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$ */

/////////////////////////////////////////////////////////////
//
// Class for AOD reconstructed heavy-flavour cascades
//
// Author: X-M. Zhang, zhangxm@iopp.ccnu.edu.cn
/////////////////////////////////////////////////////////////

#include <TVector3.h>
#include <TDatabasePDG.h>
#include <TClonesArray.h>
#include "AliAODMCParticle.h"
#include "AliAODRecoDecay.h"
#include "AliAODVertex.h"
#include "AliAODRecoDecayHF2Prong.h"
#include "AliAODRecoCascadeHF.h"

ClassImp(AliAODRecoCascadeHF)
//-----------------------------------------------------------------------------

AliAODRecoCascadeHF::AliAODRecoCascadeHF() :
  AliAODRecoDecayHF2Prong()
{
  //
  // Default Constructor
  //
}
//-----------------------------------------------------------------------------
AliAODRecoCascadeHF::AliAODRecoCascadeHF(AliAODVertex *vtx2, Short_t charge,
					 Double_t *px, Double_t *py, Double_t *pz,
					 Double_t *d0, Double_t *d0err, Double_t dca) :
  AliAODRecoDecayHF2Prong(vtx2, px, py, pz, d0, d0err, dca)
{
  //
  //  Constructor with AliAODVertex for decay vertex
  //
  SetCharge(charge);
}
//-----------------------------------------------------------------------------
AliAODRecoCascadeHF::AliAODRecoCascadeHF(AliAODVertex *vtx2, Short_t charge,
					 Double_t *d0, Double_t *d0err, Double_t dca) :
  AliAODRecoDecayHF2Prong(vtx2, d0, d0err, dca)
{
  //
  //  Constructor with decay vertex and without prongs momenta
  //
  SetCharge(charge);
}
//-----------------------------------------------------------------------------
AliAODRecoCascadeHF::AliAODRecoCascadeHF(const AliAODRecoCascadeHF &source) :
  AliAODRecoDecayHF2Prong(source)
{
  //
  // Copy constructor
  //
}
//-----------------------------------------------------------------------------
AliAODRecoCascadeHF &AliAODRecoCascadeHF::operator=(const AliAODRecoCascadeHF &source)
{
  //
  // assignment operator
  //
  if(&source == this) return *this;

  AliAODRecoDecayHF2Prong::operator=(source);

  return *this;
}
//-----------------------------------------------------------------------------
AliAODRecoCascadeHF::~AliAODRecoCascadeHF()
{
  //
  // Default Destructor
  //
}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::InvMassDstarKpipi() const 
{
  //
  // 3 prong invariant mass of the D0 daughters and the soft pion
  //
  Double_t e[3];
  if (Charge()>0){
    e[0]=Get2Prong()->EProng(0,211);
    e[1]=Get2Prong()->EProng(1,321);
  }else{
    e[0]=Get2Prong()->EProng(0,321);
    e[1]=Get2Prong()->EProng(1,211);
  }
  e[2]=EProng(0,211);

  Double_t esum = e[0]+e[1]+e[2];
  Double_t minv = TMath::Sqrt(esum*esum-P()*P());

  return minv; 
}
//----------------------------------------------------------------------------
Int_t AliAODRecoCascadeHF::MatchToMC(Int_t pdgabs,Int_t pdgabs2prong,
                                     Int_t *pdgDg,Int_t *pdgDg2prong,
				     TClonesArray *mcArray, Bool_t isV0) const
{
  //
  // Check if this candidate is matched to a MC signal
  // If no, return -1
  // If yes, return label (>=0) of the AliAODMCParticle
  // 

  Int_t ndg=GetNDaughters();
  if(ndg==0) {
    AliError("No daughters available");
    return -1;
  }

  if ( isV0 &&
       ( (pdgDg[1]==2212 && pdgDg[0]==310) ||
	 (pdgDg[1]==211 && pdgDg[0]==3122) ) ) {
    AliWarning(Form("Please, pay attention: first element in AliAODRecoCascadeHF object must be the bachelor and second one V0. Skipping! (pdgDg[0] = %d, (pdgDg[1] = %d)", pdgDg[0], pdgDg[1]));
    return -1;
  }

  Int_t lab2Prong = -1;

  if (!isV0) {
    AliAODRecoDecayHF2Prong *the2Prong = Get2Prong();
    lab2Prong = the2Prong->MatchToMC(pdgabs2prong,mcArray,2,pdgDg2prong);
  } else {
    AliAODv0 *theV0 = dynamic_cast<AliAODv0*>(Getv0());
    lab2Prong = theV0->MatchToMC(pdgabs2prong,mcArray,2,pdgDg2prong); // the V0
  }

  if(lab2Prong<0) return -1;

  Int_t dgLabels[10]={0,0,0,0,0,0,0,0,0,0};

  if (!isV0) {
    // loop on daughters and write labels
    for(Int_t i=0; i<ndg; i++) {
      AliVTrack *trk = dynamic_cast<AliVTrack*>(GetDaughter(i));
      if(!trk) continue;
      Int_t lab = trk->GetLabel();
      if(lab==-1) { // this daughter is the 2prong
	lab=lab2Prong;
      } else if(lab<-1) continue;
      dgLabels[i] = lab;
    }
  } else {
    AliVTrack *trk = dynamic_cast<AliVTrack*>(GetBachelor()); // the bachelor
    if (!trk) return -1;
    dgLabels[0] = trk->GetLabel();//TMath::Abs(trk->GetLabel());
    dgLabels[1] = lab2Prong;
  }

  Int_t finalLabel = AliAODRecoDecay::MatchToMC(pdgabs,mcArray,dgLabels,2,2,pdgDg);

  if (finalLabel>=0){
    // debug printouts for Lc->V0 bachelor case

    if ( isV0 && (dgLabels[0]!=-1 && dgLabels[1]!=-1) ) {
      AliAODv0 *theV0 = dynamic_cast<AliAODv0*>(Getv0());
      Bool_t onTheFly = theV0->GetOnFlyStatus();
      if (pdgDg[0]==2212 && pdgDg[1]==310) {
	AliAODMCParticle*k0s = dynamic_cast<AliAODMCParticle*>(mcArray->At(lab2Prong));
	if(k0s){
	  Int_t labK0 = k0s->GetMother();	
	  AliAODMCParticle*k0bar = dynamic_cast<AliAODMCParticle*>(mcArray->At(labK0));
	  if(k0bar){
	    AliDebug(1,Form(" (onTheFly=%1d) LabelV0=%d (%d) -> LabelK0S=%d (%d -> %d %d)",onTheFly,labK0,k0bar->GetPdgCode(),lab2Prong,pdgabs2prong,pdgDg2prong[0],pdgDg2prong[1]));
	    AliDebug(1,Form(" LabelLc=%d (%d) -> LabelBachelor=%d (%d) LabelV0=%d (%d)",
			    finalLabel,pdgabs,
			    dgLabels[0],pdgDg[0],dgLabels[1],pdgDg[1]));
	  }
	}
      } else if (pdgDg[0]==211 && pdgDg[1]==3122) {
	AliDebug(1,Form(" (onTheFly=%1d) LabelV0=%d (%d -> %d %d)",onTheFly,lab2Prong,pdgabs2prong,pdgDg2prong[0],pdgDg2prong[1]));
	AliDebug(1,Form(" LabelLc=%d (%d) -> LabelBachelor=%d (%d) LabelV0=%d (%d)",
			finalLabel,pdgabs,
		      dgLabels[0],pdgDg[0],dgLabels[1],pdgDg[1]));
      }

    }
  }

  return finalLabel;

}
//-----------------------------------------------------------------------------
Bool_t AliAODRecoCascadeHF::SelectDstar(const Double_t *cutsDstar,
					const Double_t *cutsD0,
					Bool_t testD0) const
{
  //
  // cutsDstar[0] = inv. mass half width of D* [GeV]
  // cutsDstar[1] = half width of (M_Kpipi-M_D0) [GeV]
  // cutsDstar[2] = PtMin of pi_s [GeV/c]
  // cutsDstar[3] = PtMax of pi_s [GeV/c]
  // cutsDstar[4] = theta, angle between the pi_s and decay plane of the D0 [rad]
  //
  // cutsD0[0] = inv. mass half width [GeV]   
  // cutsD0[1] = dca [cm]
  // cutsD0[2] = cosThetaStar 
  // cutsD0[3] = pTK [GeV/c]
  // cutsD0[4] = pTPi [GeV/c]
  // cutsD0[5] = d0K [cm]   upper limit!
  // cutsD0[6] = d0Pi [cm]  upper limit!
  // cutsD0[7] = d0d0 [cm^2]
  // cutsD0[8] = cosThetaPoint


  // check that the D0 passes the cuts
  // (if we have a D*+, it has to pass as D0, 
  //  if we have a D*-, it has to pass as D0bar)

  if(testD0) {
    Int_t okD0=0,okD0bar=0;
    Get2Prong()->SelectD0(cutsD0,okD0,okD0bar);
    if((Charge()==+1 && !okD0) || (Charge()==-1 && !okD0bar)) return kFALSE; 
  }
 
  if( (PtProng(0)<cutsDstar[2]) || (PtProng(0)>cutsDstar[3]) ) return kFALSE;

  Double_t mDstar = TDatabasePDG::Instance()->GetParticle(413)->Mass();
  Double_t invmDstar = InvMassDstarKpipi();
  if(TMath::Abs(mDstar-invmDstar)>cutsDstar[0]) return kFALSE;

  Double_t mD0 = TDatabasePDG::Instance()->GetParticle(421)->Mass();
  if(TMath::Abs((mDstar-mD0)-DeltaInvMass())>cutsDstar[1]) return kFALSE;

  Double_t theta = AngleD0dkpPisoft(); 
  if(theta>cutsDstar[4]) return kFALSE;
  
  return kTRUE;
}
//-----------------------------------------------------------------------------
Bool_t AliAODRecoCascadeHF::SelectLctoV0(const Double_t *cutsLctoV0, 
					 Bool_t okLck0sp, Bool_t okLcLpi, Bool_t okLcLbarpi) const 
{
  // cuts on Lambdac candidates to V0+bachelor
  // (to be passed to AliAODRecoDecayHF3Prong::SelectLctoV0())
  // 0 = inv. mass half width in K0s hypothesis [GeV]   
  // 1 = inv. mass half width in Lambda hypothesis [GeV]   
  // 2 = inv. mass V0 in K0s hypothesis half width [GeV]   
  // 3 = inv. mass V0 in Lambda hypothesis half width [GeV]   
  // 4 = pT min Bachelor track [GeV/c]
  // 5 = pT min V0-Positive track [GeV/c]
  // 6 = pT min V0-Negative track [GeV/c]
  // 7 = dca cut on the cascade (cm)
  // 8 = dca cut on the V0 (cm)

  //   if ( !Getv0() || !Getv0PositiveTrack() || !Getv0NegativeTrack() ) 
  //     { AliInfo(Form("Not adapted for ESDv0s, return true...")); return false; }

  Double_t mLck0sp,mLcLpi;
  okLck0sp=1; okLcLpi=1; okLcLbarpi=1;
  
  Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
  Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
  Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();

  // k0s + p
  double mk0s = Getv0()->MassK0Short();
  mLck0sp = InvMassLctoK0sP();

  // lambda + pi 
  double mlambda = Getv0()->MassLambda();
  double malambda = Getv0()->MassAntiLambda();
  mLcLpi = InvMassLctoLambdaPi();

  // cut on Lc mass
  //   with k0s p hypothesis
  if(TMath::Abs(mLck0sp-mLcPDG)>cutsLctoV0[0]) okLck0sp = 0;
  //   with Lambda pi hypothesis
  if(TMath::Abs(mLcLpi-mLcPDG)>cutsLctoV0[1]) okLcLpi = 0;
  okLcLbarpi = okLcLpi;
 
  // cuts on the v0 mass
  if( TMath::Abs(mk0s-mk0sPDG)>cutsLctoV0[2]) okLck0sp = 0;
  //if( TMath::Abs(mlambda-mLPDG)>cutsLctoV0[3] && 
  //TMath::Abs(malambda-mLPDG)>cutsLctoV0[3] ) okLcLpi = 0;
  if( !(GetBachelor()->Charge()==+1 && TMath::Abs(mlambda-mLPDG)<=cutsLctoV0[3]) ) okLcLpi = 0;
  if( !(GetBachelor()->Charge()==-1 && TMath::Abs(malambda-mLPDG)<=cutsLctoV0[3]) ) okLcLbarpi = 0;
  
  if(!okLck0sp && !okLcLpi && !okLcLbarpi) return 0;
  
  // cuts on the minimum pt of the tracks 
  if(TMath::Abs(GetBachelor()->Pt()) < cutsLctoV0[4]) return 0;
  if(TMath::Abs(Getv0PositiveTrack()->Pt()) < cutsLctoV0[5]) return 0;
  if(TMath::Abs(Getv0NegativeTrack()->Pt()) < cutsLctoV0[6]) return 0;
  
  // cut on the cascade dca
  if( TMath::Abs(GetDCA(0))>cutsLctoV0[7] //||
      //TMath::Abs(Getv0()->DcaPosToPrimVertex())>cutsLctoV0[7] ||
      //TMath::Abs(Getv0()->DcaNegToPrimVertex())>cutsLctoV0[7]
      ) return 0;
  
  // cut on the v0 dca
  if(TMath::Abs(Getv0()->DcaV0Daughters()) > cutsLctoV0[8]) return 0;

  // cut on V0 cosine of pointing angle wrt PV
  if (CosV0PointingAngle() < cutsLctoV0[9]) { // cosine of V0 pointing angle wrt primary vertex
    AliDebug(4,Form(" V0 cosine of pointing angle doesn't pass the cut"));
    return 0;
  }

  // cut on bachelor transverse impact parameter wrt PV
  if (TMath::Abs(Getd0Prong(0)) > cutsLctoV0[10]) { // bachelor transverse impact parameter wrt PV
    AliDebug(4,Form(" bachelor transverse impact parameter doesn't pass the cut"));
    return 0;
  }

  // cut on V0 transverse impact parameter wrt PV
  if (TMath::Abs(Getd0Prong(1)) > cutsLctoV0[11]) { // V0 transverse impact parameter wrt PV
    AliDebug(4,Form(" V0 transverse impact parameter doesn't pass the cut"));
    return 0;
  }

  // cut on K0S invariant mass veto
  if (TMath::Abs(Getv0()->MassK0Short()-mk0sPDG) < cutsLctoV0[12]) { // K0S invariant mass veto
    AliDebug(4,Form(" veto on K0S invariant mass doesn't pass the cut"));
    return 0;
  }

  // cut on Lambda/LambdaBar invariant mass veto
  if (TMath::Abs(Getv0()->MassLambda()-mLPDG) < cutsLctoV0[13] ||
      TMath::Abs(Getv0()->MassAntiLambda()-mLPDG) < cutsLctoV0[13] ) { // Lambda/LambdaBar invariant mass veto
    AliDebug(4,Form(" veto on K0S invariant mass doesn't pass the cut"));
    return 0;
  }

  // cut on gamma invariant mass veto                                                                                                                      
  if (Getv0()->InvMass2Prongs(0,1,11,11) < cutsLctoV0[14]) { // K0S invariant mass veto
    AliDebug(4,Form(" veto on gamma invariant mass doesn't pass the cut"));
    return 0;
  }

  // cut on V0 pT min                                                                                                                                      
  if (Getv0()->Pt() < cutsLctoV0[15]) { // V0 pT min                                                                                         
    AliDebug(4,Form(" V0 track Pt=%2.2e > %2.2e",Getv0()->Pt(),cutsLctoV0[15]));
    return 0;
  }
  
  return true; 

}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::AngleD0dkpPisoft() const {
  //
  // Angle of soft pion to D0 decay plane
  // 

  TVector3 p3Trk0(Get2Prong()->PxProng(0),Get2Prong()->PyProng(0),Get2Prong()->PzProng(0)); // from D0
  TVector3 p3Trk1(Get2Prong()->PxProng(1),Get2Prong()->PyProng(1),Get2Prong()->PzProng(1)); // from D0
  TVector3 p3Trk2(PxProng(0),PyProng(0),PzProng(0)); // pi_s

  TVector3 perp = p3Trk0.Cross(p3Trk1);
  Double_t theta = p3Trk2.Angle(perp);
  if(theta>(TMath::Pi()-theta)) theta = TMath::Pi() - theta;
  theta = TMath::Pi()/2. - theta;

  return theta;
}
//-----------------------------------------------------------------------------
Bool_t AliAODRecoCascadeHF::TrigonometricalCut() const {
  //  
  // Trigonometrical constraint
  //
  TVector3 p3Trk0(Get2Prong()->PxProng(0),Get2Prong()->PyProng(0),Get2Prong()->PzProng(0)); // from D0
  TVector3 p3Trk1(Get2Prong()->PxProng(1),Get2Prong()->PyProng(1),Get2Prong()->PzProng(1)); // from D0
  TVector3 p3Trk2(PxProng(0),PyProng(0),PzProng(0)); // pi_s

  Double_t alpha = p3Trk0.Angle(p3Trk2);
  Double_t beta = p3Trk1.Angle(p3Trk2);

  Double_t cosphi01 = TMath::Cos(alpha) / TMath::Cos(AngleD0dkpPisoft());
  Double_t cosphi02 = TMath::Cos(beta) / TMath::Cos(AngleD0dkpPisoft());

  Double_t phi01 = TMath::ACos(cosphi01);
  Double_t phi02 = TMath::ACos(cosphi02);
  Double_t phi00 = p3Trk0.Angle(p3Trk1);

  if((phi01>phi00) || (phi02>phi00)) return kFALSE;
  return kTRUE;
}

//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::DecayLengthV0() const
{
  //
  // Returns V0 decay length wrt primary vertex
  //

  AliAODv0 *v0 = (AliAODv0*)Getv0();

  if (!v0) 
    return -1.;
  AliAODVertex *vtxPrimary = GetPrimaryVtx();
  Double_t posVtx[3] = {0.,0.,0.};
  vtxPrimary->GetXYZ(posVtx);
  return v0->DecayLengthV0(posVtx);

}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::DecayLengthXYV0() const
{
  //
  // Returns transverse V0 decay length wrt primary vertex
  //
  AliAODv0 *v0 = (AliAODv0*)Getv0();

  if (!v0) 
    return -1.;
  AliAODVertex *vtxPrimary = GetPrimaryVtx();
  Double_t posVtx[3] = {0.,0.,0.};
  vtxPrimary->GetXYZ(posVtx);
  return v0->DecayLengthXY(posVtx);

}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::CosV0PointingAngle() const 
{
  //
  // Returns cosine of V0 pointing angle wrt primary vertex
  //

  AliAODv0 *v0 = (AliAODv0*)Getv0();

  if (!v0) 
    return -999.;

  AliAODVertex *vtxPrimary = GetPrimaryVtx();
  Double_t posVtx[3] = {0.,0.,0.};
  vtxPrimary->GetXYZ(posVtx);
  return v0->CosPointingAngle(posVtx);

}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::CosV0PointingAngleXY() const 
{
  //
  // Returns XY cosine of V0 pointing angle wrt primary vertex
  //

  AliAODv0 *v0 = (AliAODv0*)Getv0();

  if (!v0) 
    return -999.;

  AliAODVertex *vtxPrimary = GetPrimaryVtx();
  Double_t posVtx[3] = {0.,0.,0.};
  vtxPrimary->GetXYZ(posVtx);
  return v0->CosPointingAngleXY(posVtx);

}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::NormalizedV0DecayLength() const
{
  //
  // Returns V0 normalized decay length wrt primary vertex
  //

  AliAODv0 *v0 = (AliAODv0*)Getv0();

  if (!v0) 
    return -1.;
  //AliAODVertex *vtxPrimary = GetPrimaryVtx();
  //Double_t posVtx[3] = {0.,0.,0.};
  //vtxPrimary->GetXYZ(posVtx);
  //return v0->NormalizedDecayLength(posVtx);
  return v0->NormalizedDecayLength(GetPrimaryVtx());

}
//-----------------------------------------------------------------------------
Double_t AliAODRecoCascadeHF::NormalizedV0DecayLengthXY() const
{
  //
  // Returns transverse V0 normalized decay length wrt primary vertex
  //
  AliAODv0 *v0 = (AliAODv0*)Getv0();

  if (!v0) 
    return -1.;
  //AliAODVertex *vtxPrimary = GetPrimaryVtx();
  //Double_t posVtx[3] = {0.,0.,0.};
  //vtxPrimary->GetXYZ(posVtx);
  //return v0->NormalizedDecayLengthXY(posVtx);
  return v0->NormalizedDecayLengthXY(GetPrimaryVtx());

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