#ifndef ALIKFPARTICLE_H
#define ALIKFPARTICLE_H
#include "AliKFParticleBase.h"
#include "TMath.h"
class AliVTrack;
class AliVVertex;
class AliExternalTrackParam;
class AliKFParticle :public AliKFParticleBase
{
public:
static void SetField( Double_t Bz );
AliKFParticle():AliKFParticleBase(){ ; }
~AliKFParticle(){ ; }
AliKFParticle( const AliKFParticle &d1, const AliKFParticle &d2, Bool_t gamma = kFALSE );
AliKFParticle( const AliKFParticle &d1, const AliKFParticle &d2,
const AliKFParticle &d3 );
AliKFParticle( const AliKFParticle &d1, const AliKFParticle &d2,
const AliKFParticle &d3, const AliKFParticle &d4 );
void Create( const Double_t Param[], const Double_t Cov[], Int_t Charge, Int_t PID );
void Create( const Double_t Param[], const Double_t Cov[], Int_t Charge, Double_t Mass );
AliKFParticle( const AliVTrack &track, Int_t PID );
AliKFParticle( const AliExternalTrackParam &track, Double_t Mass, Int_t Charge );
AliKFParticle( const AliVVertex &vertex );
void Initialize();
void SetVtxGuess( Double_t x, Double_t y, Double_t z );
Double_t GetX () const ;
Double_t GetY () const ;
Double_t GetZ () const ;
Double_t GetPx () const ;
Double_t GetPy () const ;
Double_t GetPz () const ;
Double_t GetE () const ;
Double_t GetS () const ;
Int_t GetQ () const ;
Double_t GetChi2 () const ;
Int_t GetNDF () const ;
const Double_t& X () const { return fP[0]; }
const Double_t& Y () const { return fP[1]; }
const Double_t& Z () const { return fP[2]; }
const Double_t& Px () const { return fP[3]; }
const Double_t& Py () const { return fP[4]; }
const Double_t& Pz () const { return fP[5]; }
const Double_t& E () const { return fP[6]; }
const Double_t& S () const { return fP[7]; }
const Int_t & Q () const { return fQ; }
const Double_t& Chi2 () const { return fChi2; }
const Int_t & NDF () const { return fNDF; }
Double_t GetParameter ( int i ) const ;
Double_t GetCovariance( int i ) const ;
Double_t GetCovariance( int i, int j ) const ;
Double_t GetP () const;
Double_t GetPt () const;
Double_t GetEta () const;
Double_t GetPhi () const;
Double_t GetMomentum () const;
Double_t GetMass () const;
Double_t GetDecayLength () const;
Double_t GetDecayLengthXY () const;
Double_t GetLifeTime () const;
Double_t GetR () const;
Double_t GetErrX () const ;
Double_t GetErrY () const ;
Double_t GetErrZ () const ;
Double_t GetErrPx () const ;
Double_t GetErrPy () const ;
Double_t GetErrPz () const ;
Double_t GetErrE () const ;
Double_t GetErrS () const ;
Double_t GetErrP () const ;
Double_t GetErrPt () const ;
Double_t GetErrEta () const ;
Double_t GetErrPhi () const ;
Double_t GetErrMomentum () const ;
Double_t GetErrMass () const ;
Double_t GetErrDecayLength () const ;
Double_t GetErrDecayLengthXY () const ;
Double_t GetErrLifeTime () const ;
Double_t GetErrR () const ;
int GetP ( Double_t &P, Double_t &SigmaP ) const ;
int GetPt ( Double_t &Pt, Double_t &SigmaPt ) const ;
int GetEta ( Double_t &Eta, Double_t &SigmaEta ) const ;
int GetPhi ( Double_t &Phi, Double_t &SigmaPhi ) const ;
int GetMomentum ( Double_t &P, Double_t &SigmaP ) const ;
int GetMass ( Double_t &M, Double_t &SigmaM ) const ;
int GetDecayLength ( Double_t &L, Double_t &SigmaL ) const ;
int GetDecayLengthXY ( Double_t &L, Double_t &SigmaL ) const ;
int GetLifeTime ( Double_t &T, Double_t &SigmaT ) const ;
int GetR ( Double_t &R, Double_t &SigmaR ) const ;
Double_t & X () ;
Double_t & Y () ;
Double_t & Z () ;
Double_t & Px () ;
Double_t & Py () ;
Double_t & Pz () ;
Double_t & E () ;
Double_t & S () ;
Int_t & Q () ;
Double_t & Chi2 () ;
Int_t & NDF () ;
Double_t & Parameter ( int i ) ;
Double_t & Covariance( int i ) ;
Double_t & Covariance( int i, int j ) ;
Double_t * Parameters () ;
Double_t * CovarianceMatrix() ;
void AddDaughter( const AliKFParticle &Daughter );
void operator +=( const AliKFParticle &Daughter );
void SetProductionVertex( const AliKFParticle &Vtx );
void SetMassConstraint( Double_t Mass, Double_t SigmaMass = 0 );
void SetNoDecayLength();
void Construct( const AliKFParticle *vDaughters[], int NDaughters,
const AliKFParticle *ProdVtx=0, Double_t Mass=-1, Bool_t IsConstrained=0 );
void TransportToDecayVertex();
void TransportToProductionVertex();
void TransportToPoint( const Double_t xyz[] );
void TransportToVertex( const AliVVertex &v );
void TransportToParticle( const AliKFParticle &p );
void TransportToDS( Double_t dS );
Double_t GetDStoPoint( const Double_t xyz[] ) const ;
void GetDStoParticle( const AliKFParticle &p,
Double_t &DS, Double_t &DSp ) const ;
void GetDStoParticleXY( const AliKFParticleBase &p,
Double_t &DS, Double_t &DSp ) const ;
Double_t GetDistanceFromVertex( const Double_t vtx[] ) const ;
Double_t GetDistanceFromVertex( const AliKFParticle &Vtx ) const ;
Double_t GetDistanceFromVertex( const AliVVertex &Vtx ) const ;
Double_t GetDistanceFromParticle( const AliKFParticle &p ) const ;
Double_t GetDeviationFromVertex( const Double_t v[], const Double_t Cv[]=0 ) const ;
Double_t GetDeviationFromVertex( const AliKFParticle &Vtx ) const ;
Double_t GetDeviationFromVertex( const AliVVertex &Vtx ) const ;
Double_t GetDeviationFromParticle( const AliKFParticle &p ) const ;
Bool_t GetDistanceFromVertexXY( const Double_t vtx[], Double_t &val, Double_t &err ) const ;
Bool_t GetDistanceFromVertexXY( const Double_t vtx[], const Double_t Cv[], Double_t &val, Double_t &err ) const ;
Bool_t GetDistanceFromVertexXY( const AliKFParticle &Vtx, Double_t &val, Double_t &err ) const ;
Bool_t GetDistanceFromVertexXY( const AliVVertex &Vtx, Double_t &val, Double_t &err ) const ;
Double_t GetDistanceFromVertexXY( const Double_t vtx[] ) const ;
Double_t GetDistanceFromVertexXY( const AliKFParticle &Vtx ) const ;
Double_t GetDistanceFromVertexXY( const AliVVertex &Vtx ) const ;
Double_t GetDistanceFromParticleXY( const AliKFParticle &p ) const ;
Double_t GetDeviationFromVertexXY( const Double_t v[], const Double_t Cv[]=0 ) const ;
Double_t GetDeviationFromVertexXY( const AliKFParticle &Vtx ) const ;
Double_t GetDeviationFromVertexXY( const AliVVertex &Vtx ) const ;
Double_t GetDeviationFromParticleXY( const AliKFParticle &p ) const ;
Double_t GetAngle ( const AliKFParticle &p ) const ;
Double_t GetAngleXY( const AliKFParticle &p ) const ;
Double_t GetAngleRZ( const AliKFParticle &p ) const ;
void SubtractFromVertex( AliKFParticle &v ) const ;
void ConstructGamma( const AliKFParticle &daughter1,
const AliKFParticle &daughter2 );
Double_t GetPseudoProperDecayTime( const AliKFParticle &primVertex, const Double_t& mass, Double_t* timeErr2 = 0 ) const;
protected:
static Double_t GetFieldAlice();
void GetFieldValue( const Double_t xyz[], Double_t B[] ) const ;
void GetDStoParticle( const AliKFParticleBase &p, Double_t &DS, Double_t &DSp )const ;
void Transport( Double_t dS, Double_t P[], Double_t C[] ) const ;
static void GetExternalTrackParam( const AliKFParticleBase &p, Double_t &X, Double_t &Alpha, Double_t P[5] ) ;
private:
static Double_t fgBz;
ClassDef( AliKFParticle, 1 );
};
inline void AliKFParticle::SetField( Double_t Bz )
{
fgBz = Bz;
}
inline AliKFParticle::AliKFParticle( const AliKFParticle &d1,
const AliKFParticle &d2,
const AliKFParticle &d3 )
{
AliKFParticle mother;
mother+= d1;
mother+= d2;
mother+= d3;
*this = mother;
}
inline AliKFParticle::AliKFParticle( const AliKFParticle &d1,
const AliKFParticle &d2,
const AliKFParticle &d3,
const AliKFParticle &d4 )
{
AliKFParticle mother;
mother+= d1;
mother+= d2;
mother+= d3;
mother+= d4;
*this = mother;
}
inline void AliKFParticle::Initialize()
{
AliKFParticleBase::Initialize();
}
inline void AliKFParticle::SetVtxGuess( Double_t x, Double_t y, Double_t z )
{
AliKFParticleBase::SetVtxGuess(x,y,z);
}
inline Double_t AliKFParticle::GetX () const
{
return AliKFParticleBase::GetX();
}
inline Double_t AliKFParticle::GetY () const
{
return AliKFParticleBase::GetY();
}
inline Double_t AliKFParticle::GetZ () const
{
return AliKFParticleBase::GetZ();
}
inline Double_t AliKFParticle::GetPx () const
{
return AliKFParticleBase::GetPx();
}
inline Double_t AliKFParticle::GetPy () const
{
return AliKFParticleBase::GetPy();
}
inline Double_t AliKFParticle::GetPz () const
{
return AliKFParticleBase::GetPz();
}
inline Double_t AliKFParticle::GetE () const
{
return AliKFParticleBase::GetE();
}
inline Double_t AliKFParticle::GetS () const
{
return AliKFParticleBase::GetS();
}
inline Int_t AliKFParticle::GetQ () const
{
return AliKFParticleBase::GetQ();
}
inline Double_t AliKFParticle::GetChi2 () const
{
return AliKFParticleBase::GetChi2();
}
inline Int_t AliKFParticle::GetNDF () const
{
return AliKFParticleBase::GetNDF();
}
inline Double_t AliKFParticle::GetParameter ( int i ) const
{
return AliKFParticleBase::GetParameter(i);
}
inline Double_t AliKFParticle::GetCovariance( int i ) const
{
return AliKFParticleBase::GetCovariance(i);
}
inline Double_t AliKFParticle::GetCovariance( int i, int j ) const
{
return AliKFParticleBase::GetCovariance(i,j);
}
inline Double_t AliKFParticle::GetP () const
{
Double_t par, err;
if( AliKFParticleBase::GetMomentum( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetPt () const
{
Double_t par, err;
if( AliKFParticleBase::GetPt( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetEta () const
{
Double_t par, err;
if( AliKFParticleBase::GetEta( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetPhi () const
{
Double_t par, err;
if( AliKFParticleBase::GetPhi( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetMomentum () const
{
Double_t par, err;
if( AliKFParticleBase::GetMomentum( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetMass () const
{
Double_t par, err;
if( AliKFParticleBase::GetMass( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetDecayLength () const
{
Double_t par, err;
if( AliKFParticleBase::GetDecayLength( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetDecayLengthXY () const
{
Double_t par, err;
if( AliKFParticleBase::GetDecayLengthXY( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetLifeTime () const
{
Double_t par, err;
if( AliKFParticleBase::GetLifeTime( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetR () const
{
Double_t par, err;
if( AliKFParticleBase::GetR( par, err ) ) return 0;
else return par;
}
inline Double_t AliKFParticle::GetErrX () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(0,0) ));
}
inline Double_t AliKFParticle::GetErrY () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(1,1) ));
}
inline Double_t AliKFParticle::GetErrZ () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(2,2) ));
}
inline Double_t AliKFParticle::GetErrPx () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(3,3) ));
}
inline Double_t AliKFParticle::GetErrPy () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(4,4) ));
}
inline Double_t AliKFParticle::GetErrPz () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(5,5) ));
}
inline Double_t AliKFParticle::GetErrE () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(6,6) ));
}
inline Double_t AliKFParticle::GetErrS () const
{
return TMath::Sqrt(TMath::Abs( GetCovariance(7,7) ));
}
inline Double_t AliKFParticle::GetErrP () const
{
Double_t par, err;
if( AliKFParticleBase::GetMomentum( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrPt () const
{
Double_t par, err;
if( AliKFParticleBase::GetPt( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrEta () const
{
Double_t par, err;
if( AliKFParticleBase::GetEta( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrPhi () const
{
Double_t par, err;
if( AliKFParticleBase::GetPhi( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrMomentum () const
{
Double_t par, err;
if( AliKFParticleBase::GetMomentum( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrMass () const
{
Double_t par, err;
if( AliKFParticleBase::GetMass( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrDecayLength () const
{
Double_t par, err;
if( AliKFParticleBase::GetDecayLength( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrDecayLengthXY () const
{
Double_t par, err;
if( AliKFParticleBase::GetDecayLengthXY( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrLifeTime () const
{
Double_t par, err;
if( AliKFParticleBase::GetLifeTime( par, err ) ) return 1.e10;
else return err;
}
inline Double_t AliKFParticle::GetErrR () const
{
Double_t par, err;
if( AliKFParticleBase::GetR( par, err ) ) return 1.e10;
else return err;
}
inline int AliKFParticle::GetP( Double_t &P, Double_t &SigmaP ) const
{
return AliKFParticleBase::GetMomentum( P, SigmaP );
}
inline int AliKFParticle::GetPt( Double_t &Pt, Double_t &SigmaPt ) const
{
return AliKFParticleBase::GetPt( Pt, SigmaPt );
}
inline int AliKFParticle::GetEta( Double_t &Eta, Double_t &SigmaEta ) const
{
return AliKFParticleBase::GetEta( Eta, SigmaEta );
}
inline int AliKFParticle::GetPhi( Double_t &Phi, Double_t &SigmaPhi ) const
{
return AliKFParticleBase::GetPhi( Phi, SigmaPhi );
}
inline int AliKFParticle::GetMomentum( Double_t &P, Double_t &SigmaP ) const
{
return AliKFParticleBase::GetMomentum( P, SigmaP );
}
inline int AliKFParticle::GetMass( Double_t &M, Double_t &SigmaM ) const
{
return AliKFParticleBase::GetMass( M, SigmaM );
}
inline int AliKFParticle::GetDecayLength( Double_t &L, Double_t &SigmaL ) const
{
return AliKFParticleBase::GetDecayLength( L, SigmaL );
}
inline int AliKFParticle::GetDecayLengthXY( Double_t &L, Double_t &SigmaL ) const
{
return AliKFParticleBase::GetDecayLengthXY( L, SigmaL );
}
inline int AliKFParticle::GetLifeTime( Double_t &T, Double_t &SigmaT ) const
{
return AliKFParticleBase::GetLifeTime( T, SigmaT );
}
inline int AliKFParticle::GetR( Double_t &R, Double_t &SigmaR ) const
{
return AliKFParticleBase::GetR( R, SigmaR );
}
inline Double_t & AliKFParticle::X()
{
return AliKFParticleBase::X();
}
inline Double_t & AliKFParticle::Y()
{
return AliKFParticleBase::Y();
}
inline Double_t & AliKFParticle::Z()
{
return AliKFParticleBase::Z();
}
inline Double_t & AliKFParticle::Px()
{
return AliKFParticleBase::Px();
}
inline Double_t & AliKFParticle::Py()
{
return AliKFParticleBase::Py();
}
inline Double_t & AliKFParticle::Pz()
{
return AliKFParticleBase::Pz();
}
inline Double_t & AliKFParticle::E()
{
return AliKFParticleBase::E();
}
inline Double_t & AliKFParticle::S()
{
return AliKFParticleBase::S();
}
inline Int_t & AliKFParticle::Q()
{
return AliKFParticleBase::Q();
}
inline Double_t & AliKFParticle::Chi2()
{
return AliKFParticleBase::Chi2();
}
inline Int_t & AliKFParticle::NDF()
{
return AliKFParticleBase::NDF();
}
inline Double_t & AliKFParticle::Parameter ( int i )
{
return AliKFParticleBase::Parameter(i);
}
inline Double_t & AliKFParticle::Covariance( int i )
{
return AliKFParticleBase::Covariance(i);
}
inline Double_t & AliKFParticle::Covariance( int i, int j )
{
return AliKFParticleBase::Covariance(i,j);
}
inline Double_t * AliKFParticle::Parameters ()
{
return fP;
}
inline Double_t * AliKFParticle::CovarianceMatrix()
{
return fC;
}
inline void AliKFParticle::operator +=( const AliKFParticle &Daughter )
{
AliKFParticleBase::operator +=( Daughter );
}
inline void AliKFParticle::AddDaughter( const AliKFParticle &Daughter )
{
AliKFParticleBase::AddDaughter( Daughter );
}
inline void AliKFParticle::SetProductionVertex( const AliKFParticle &Vtx )
{
AliKFParticleBase::SetProductionVertex( Vtx );
}
inline void AliKFParticle::SetMassConstraint( Double_t Mass, Double_t SigmaMass )
{
AliKFParticleBase::SetMassConstraint( Mass, SigmaMass );
}
inline void AliKFParticle::SetNoDecayLength()
{
AliKFParticleBase::SetNoDecayLength();
}
inline void AliKFParticle::Construct( const AliKFParticle *vDaughters[], int NDaughters,
const AliKFParticle *ProdVtx, Double_t Mass, Bool_t IsConstrained )
{
AliKFParticleBase::Construct( ( const AliKFParticleBase**)vDaughters, NDaughters,
( const AliKFParticleBase*)ProdVtx, Mass, IsConstrained );
}
inline void AliKFParticle::TransportToDecayVertex()
{
AliKFParticleBase::TransportToDecayVertex();
}
inline void AliKFParticle::TransportToProductionVertex()
{
AliKFParticleBase::TransportToProductionVertex();
}
inline void AliKFParticle::TransportToPoint( const Double_t xyz[] )
{
TransportToDS( GetDStoPoint(xyz) );
}
inline void AliKFParticle::TransportToVertex( const AliVVertex &v )
{
TransportToPoint( AliKFParticle(v).fP );
}
inline void AliKFParticle::TransportToParticle( const AliKFParticle &p )
{
Double_t dS, dSp;
GetDStoParticle( p, dS, dSp );
TransportToDS( dS );
}
inline void AliKFParticle::TransportToDS( Double_t dS )
{
AliKFParticleBase::TransportToDS( dS );
}
inline Double_t AliKFParticle::GetDStoPoint( const Double_t xyz[] ) const
{
return AliKFParticleBase::GetDStoPointBz( GetFieldAlice(), xyz );
}
inline void AliKFParticle::GetDStoParticle( const AliKFParticle &p,
Double_t &DS, Double_t &DSp ) const
{
GetDStoParticleXY( p, DS, DSp );
}
inline Double_t AliKFParticle::GetDistanceFromVertex( const Double_t vtx[] ) const
{
return AliKFParticleBase::GetDistanceFromVertex( vtx );
}
inline Double_t AliKFParticle::GetDeviationFromVertex( const Double_t v[],
const Double_t Cv[] ) const
{
return AliKFParticleBase::GetDeviationFromVertex( v, Cv);
}
inline Double_t AliKFParticle::GetDistanceFromVertex( const AliKFParticle &Vtx ) const
{
return AliKFParticleBase::GetDistanceFromVertex( Vtx );
}
inline Double_t AliKFParticle::GetDeviationFromVertex( const AliKFParticle &Vtx ) const
{
return AliKFParticleBase::GetDeviationFromVertex( Vtx );
}
inline Double_t AliKFParticle::GetDistanceFromVertex( const AliVVertex &Vtx ) const
{
return GetDistanceFromVertex( AliKFParticle(Vtx) );
}
inline Double_t AliKFParticle::GetDeviationFromVertex( const AliVVertex &Vtx ) const
{
return GetDeviationFromVertex( AliKFParticle(Vtx) );
}
inline Double_t AliKFParticle::GetDistanceFromParticle( const AliKFParticle &p ) const
{
return AliKFParticleBase::GetDistanceFromParticle( p );
}
inline Double_t AliKFParticle::GetDeviationFromParticle( const AliKFParticle &p ) const
{
return AliKFParticleBase::GetDeviationFromParticle( p );
}
inline void AliKFParticle::SubtractFromVertex( AliKFParticle &v ) const
{
AliKFParticleBase::SubtractFromVertex( v );
}
inline Double_t AliKFParticle::GetFieldAlice()
{
return fgBz;
}
inline void AliKFParticle::GetFieldValue( const Double_t * , Double_t B[] ) const
{
B[0] = B[1] = 0;
B[2] = GetFieldAlice();
}
inline void AliKFParticle::GetDStoParticle( const AliKFParticleBase &p,
Double_t &DS, Double_t &DSp )const
{
GetDStoParticleXY( p, DS, DSp );
}
inline void AliKFParticle::GetDStoParticleXY( const AliKFParticleBase &p,
Double_t &DS, Double_t &DSp ) const
{
AliKFParticleBase::GetDStoParticleBz( GetFieldAlice(), p, DS, DSp ) ;
}
inline void AliKFParticle::Transport( Double_t dS, Double_t P[], Double_t C[] ) const
{
AliKFParticleBase::TransportBz( GetFieldAlice(), dS, P, C );
}
inline void AliKFParticle::ConstructGamma( const AliKFParticle &daughter1,
const AliKFParticle &daughter2 )
{
AliKFParticleBase::ConstructGammaBz( daughter1, daughter2, GetFieldAlice() );
}
#endif