//--------------------------------------------------------------------------------- // The AliKFParticleSIMD class // . // @author S.Gorbunov, I.Kisel // @version 1.0 // @since 13.05.07 // // Class to reconstruct and store the decayed particle parameters. // The method is described in CBM-SOFT note 2007-003, // ``Reconstruction of decayed particles based on the Kalman filter'', // http://www.gsi.de/documents/DOC-2007-May-14-1.pdf // // This class is ALICE interface to general mathematics in AliKFParticleBaseSIMD // // -= Copyright © ALICE HLT Group =- //_________________________________________________________________________________ #ifndef ALIKFPARTICLESIMD_H #define ALIKFPARTICLESIMD_H #include "AliKFParticleBaseSIMD.h" #include "AliKFParticle.h" class AliVTrack; class AliVVertex; class AliKFParticleSIMD :public AliKFParticleBaseSIMD { public: //* //* INITIALIZATION //* //* Set magnetic field for all particles static void SetField( fvec Bz ); //* Constructor (empty) AliKFParticleSIMD():AliKFParticleBaseSIMD(){ ; } //* Destructor (empty) ~AliKFParticleSIMD(){ ; } //* Construction of mother particle by its 2-3-4 daughters AliKFParticleSIMD( const AliKFParticleSIMD &d1, const AliKFParticleSIMD &d2, Bool_t gamma = kFALSE ); AliKFParticleSIMD( const AliKFParticleSIMD &d1, const AliKFParticleSIMD &d2, const AliKFParticleSIMD &d3 ); AliKFParticleSIMD( const AliKFParticleSIMD &d1, const AliKFParticleSIMD &d2, const AliKFParticleSIMD &d3, const AliKFParticleSIMD &d4 ); AliKFParticleSIMD( const AliKFParticle &p, Int_t PID ); AliKFParticleSIMD( AliKFParticle *p[fvecLen], Int_t PID ); //* Initialisation from "cartesian" coordinates ( X Y Z Px Py Pz ) //* Parameters, covariance matrix, charge and PID hypothesis should be provided void Create( const fvec Param[], const fvec Cov[], fvec Charge, Int_t PID ); //* Initialisation from ALICE track, PID hypothesis shoould be provided AliKFParticleSIMD( const AliVTrack *track, Int_t PID ); //* Initialisation from VVertex AliKFParticleSIMD( const AliVVertex &vertex ); //* Initialise covariance matrix and set current parameters to 0.0 void Initialize(); //* Set decay vertex parameters for linearisation void SetVtxGuess( fvec x, fvec y, fvec z ); //* //* ACCESSORS //* //* Simple accessors fvec GetX () const ; //* x of current position fvec GetY () const ; //* y of current position fvec GetZ () const ; //* z of current position fvec GetPx () const ; //* x-compoment of 3-momentum fvec GetPy () const ; //* y-compoment of 3-momentum fvec GetPz () const ; //* z-compoment of 3-momentum fvec GetE () const ; //* energy fvec GetS () const ; //* decay length / momentum fvec GetQ () const ; //* charge fvec GetChi2 () const ; //* chi^2 Int_t GetNDF () const ; //* Number of Degrees of Freedom fvec GetParameter ( int i ) const ; fvec GetCovariance( int i ) const ; fvec GetCovariance( int i, int j ) const ; //* Accessors with calculations, value returned w/o error flag fvec GetP () const; //* momentum fvec GetPt () const; //* transverse momentum fvec GetEta () const; //* pseudorapidity fvec GetPhi () const; //* phi fvec GetMomentum () const; //* momentum (same as GetP() ) fvec GetMass () const; //* mass fvec GetDecayLength () const; //* decay length fvec GetDecayLengthXY () const; //* decay length in XY fvec GetLifeTime () const; //* life time fvec GetR () const; //* distance to the origin //* Accessors to estimated errors fvec GetErrX () const ; //* x of current position fvec GetErrY () const ; //* y of current position fvec GetErrZ () const ; //* z of current position fvec GetErrPx () const ; //* x-compoment of 3-momentum fvec GetErrPy () const ; //* y-compoment of 3-momentum fvec GetErrPz () const ; //* z-compoment of 3-momentum fvec GetErrE () const ; //* energy fvec GetErrS () const ; //* decay length / momentum fvec GetErrP () const ; //* momentum fvec GetErrPt () const ; //* transverse momentum fvec GetErrEta () const ; //* pseudorapidity fvec GetErrPhi () const ; //* phi fvec GetErrMomentum () const ; //* momentum fvec GetErrMass () const ; //* mass fvec GetErrDecayLength () const ; //* decay length fvec GetErrDecayLengthXY () const ; //* decay length in XY fvec GetErrLifeTime () const ; //* life time fvec GetErrR () const ; //* distance to the origin //* Accessors with calculations( &value, &estimated sigma ) //* error flag returned (0 means no error during calculations) fvec GetP ( fvec &P, fvec &SigmaP ) const ; //* momentum fvec GetPt ( fvec &Pt, fvec &SigmaPt ) const ; //* transverse momentum fvec GetEta ( fvec &Eta, fvec &SigmaEta ) const ; //* pseudorapidity fvec GetPhi ( fvec &Phi, fvec &SigmaPhi ) const ; //* phi fvec GetMomentum ( fvec &P, fvec &SigmaP ) const ; //* momentum fvec GetMass ( fvec &M, fvec &SigmaM ) const ; //* mass fvec GetDecayLength ( fvec &L, fvec &SigmaL ) const ; //* decay length fvec GetDecayLengthXY ( fvec &L, fvec &SigmaL ) const ; //* decay length in XY fvec GetLifeTime ( fvec &T, fvec &SigmaT ) const ; //* life time fvec GetR ( fvec &R, fvec &SigmaR ) const ; //* R //* //* MODIFIERS //* fvec & X () ; fvec & Y () ; fvec & Z () ; fvec & Px () ; fvec & Py () ; fvec & Pz () ; fvec & E () ; fvec & S () ; fvec & Q () ; fvec & Chi2 () ; Int_t & NDF () ; fvec & Parameter ( int i ) ; fvec & Covariance( int i ) ; fvec & Covariance( int i, int j ) ; fvec * Parameters () ; fvec * CovarianceMatrix() ; //* //* CONSTRUCTION OF THE PARTICLE BY ITS DAUGHTERS AND MOTHER //* USING THE KALMAN FILTER METHOD //* //* Add daughter to the particle void AddDaughter( const AliKFParticleSIMD &Daughter ); //* Add daughter via += operator: ex.{ D0; D0+=Pion; D0+= Kaon; } void operator +=( const AliKFParticleSIMD &Daughter ); //* Set production vertex void SetProductionVertex( const AliKFParticleSIMD &Vtx ); //* Set mass constraint void SetMassConstraint( fvec Mass, fvec SigmaMass = 0 ); //* Set no decay length for resonances void SetNoDecayLength(); //* Everything in one go void Construct( const AliKFParticleSIMD *vDaughters[], int NDaughters, const AliKFParticleSIMD *ProdVtx=0, Float_t Mass=-1, Bool_t IsConstrained=0 ); //* //* TRANSPORT //* //* ( main transportation parameter is S = SignedPath/Momentum ) //* ( parameters of decay & production vertices are stored locally ) //* //* Transport the particle to its decay vertex void TransportToDecayVertex(); //* Transport the particle to its production vertex void TransportToProductionVertex(); //* Transport the particle close to xyz[] point void TransportToPoint( const fvec xyz[] ); //* Transport the particle close to VVertex void TransportToVertex( const AliVVertex &v ); //* Transport the particle close to another particle p void TransportToParticle( const AliKFParticleSIMD &p ); //* Transport the particle on dS parameter (SignedPath/Momentum) void TransportToDS( fvec dS ); //* Get dS to a certain space point fvec GetDStoPoint( const fvec xyz[] ) const ; //* Get dS to other particle p (dSp for particle p also returned) void GetDStoParticle( const AliKFParticleSIMD &p, fvec &DS, fvec &DSp ) const ; //* Get dS to other particle p in XY-plane void GetDStoParticleXY( const AliKFParticleBaseSIMD &p, fvec &DS, fvec &DSp ) const ; //* //* OTHER UTILITIES //* //* Calculate distance from another object [cm] fvec GetDistanceFromVertex( const fvec vtx[] ) const ; fvec GetDistanceFromVertex( const AliKFParticleSIMD &Vtx ) const ; fvec GetDistanceFromVertex( const AliVVertex &Vtx ) const ; fvec GetDistanceFromParticle( const AliKFParticleSIMD &p ) const ; //* Calculate sqrt(Chi2/ndf) deviation from another object //* ( v = [xyz]-vertex, Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix ) fvec GetDeviationFromVertex( const fvec v[], const fvec Cv[]=0 ) const ; fvec GetDeviationFromVertex( const AliKFParticleSIMD &Vtx ) const ; fvec GetDeviationFromVertex( const AliVVertex &Vtx ) const ; fvec GetDeviationFromParticle( const AliKFParticleSIMD &p ) const ; //* Calculate distance from another object [cm] in XY-plane fvec GetDistanceFromVertexXY( const fvec vtx[], fvec &val, fvec &err ) const ; fvec GetDistanceFromVertexXY( const fvec vtx[], const fvec Cv[], fvec &val, fvec &err ) const ; fvec GetDistanceFromVertexXY( const AliKFParticleSIMD &Vtx, fvec &val, fvec &err ) const ; fvec GetDistanceFromVertexXY( const AliVVertex &Vtx, fvec &val, fvec &err ) const ; fvec GetDistanceFromVertexXY( const fvec vtx[] ) const ; fvec GetDistanceFromVertexXY( const AliKFParticleSIMD &Vtx ) const ; fvec GetDistanceFromVertexXY( const AliVVertex &Vtx ) const ; fvec GetDistanceFromParticleXY( const AliKFParticleSIMD &p ) const ; //* Calculate sqrt(Chi2/ndf) deviation from another object in XY plane //* ( v = [xyz]-vertex, Cv=[Cxx,Cxy,Cyy,Cxz,Cyz,Czz]-covariance matrix ) fvec GetDeviationFromVertexXY( const fvec v[], const fvec Cv[]=0 ) const ; fvec GetDeviationFromVertexXY( const AliKFParticleSIMD &Vtx ) const ; fvec GetDeviationFromVertexXY( const AliVVertex &Vtx ) const ; fvec GetDeviationFromParticleXY( const AliKFParticleSIMD &p ) const ; //* Calculate opennig angle between two particles fvec GetAngle ( const AliKFParticleSIMD &p ) const ; fvec GetAngleXY( const AliKFParticleSIMD &p ) const ; fvec GetAngleRZ( const AliKFParticleSIMD &p ) const ; //* Subtract the particle from the vertex void SubtractFromVertex( AliKFParticleSIMD &v ) const ; //* Special method for creating gammas void ConstructGamma( const AliKFParticleSIMD &daughter1, const AliKFParticleSIMD &daughter2 ); protected: //* //* INTERNAL STUFF //* //* Method to access ALICE field static fvec GetFieldAlice(); //* Other methods required by the abstract AliKFParticleSIMD class void GetFieldValue( const fvec xyz[], fvec B[] ) const ; void GetDStoParticle( const AliKFParticleBaseSIMD &p, fvec &DS, fvec &DSp )const ; void Transport( fvec dS, fvec P[], fvec C[] ) const ; static void GetExternalTrackParam( const AliKFParticleBaseSIMD &p, Double_t X[fvecLen], Double_t Alpha[fvecLen], Double_t P[5][fvecLen] ) ; //void GetDStoParticleALICE( const AliKFParticleSIMD &p, fvec &DS, fvec &DS1 ) const; private: static fvec fgBz; //* Bz compoment of the magnetic field }; //--------------------------------------------------------------------- // // Inline implementation of the AliKFParticleSIMD methods // //--------------------------------------------------------------------- inline void AliKFParticleSIMD::SetField( fvec Bz ) { fgBz = Bz; } inline AliKFParticleSIMD::AliKFParticleSIMD( const AliKFParticleSIMD &d1, const AliKFParticleSIMD &d2, const AliKFParticleSIMD &d3 ) { AliKFParticleSIMD mother; mother+= d1; mother+= d2; mother+= d3; *this = mother; } inline AliKFParticleSIMD::AliKFParticleSIMD( const AliKFParticleSIMD &d1, const AliKFParticleSIMD &d2, const AliKFParticleSIMD &d3, const AliKFParticleSIMD &d4 ) { AliKFParticleSIMD mother; mother+= d1; mother+= d2; mother+= d3; mother+= d4; *this = mother; } inline void AliKFParticleSIMD::Initialize() { AliKFParticleSIMD::Initialize(); } inline void AliKFParticleSIMD::SetVtxGuess( fvec x, fvec y, fvec z ) { AliKFParticleBaseSIMD::SetVtxGuess(x,y,z); } inline fvec AliKFParticleSIMD::GetX () const { return AliKFParticleBaseSIMD::GetX(); } inline fvec AliKFParticleSIMD::GetY () const { return AliKFParticleBaseSIMD::GetY(); } inline fvec AliKFParticleSIMD::GetZ () const { return AliKFParticleBaseSIMD::GetZ(); } inline fvec AliKFParticleSIMD::GetPx () const { return AliKFParticleBaseSIMD::GetPx(); } inline fvec AliKFParticleSIMD::GetPy () const { return AliKFParticleBaseSIMD::GetPy(); } inline fvec AliKFParticleSIMD::GetPz () const { return AliKFParticleBaseSIMD::GetPz(); } inline fvec AliKFParticleSIMD::GetE () const { return AliKFParticleBaseSIMD::GetE(); } inline fvec AliKFParticleSIMD::GetS () const { return AliKFParticleBaseSIMD::GetS(); } inline fvec AliKFParticleSIMD::GetQ () const { return AliKFParticleBaseSIMD::GetQ(); } inline fvec AliKFParticleSIMD::GetChi2 () const { return AliKFParticleBaseSIMD::GetChi2(); } inline Int_t AliKFParticleSIMD::GetNDF () const { return AliKFParticleBaseSIMD::GetNDF(); } inline fvec AliKFParticleSIMD::GetParameter ( int i ) const { return AliKFParticleBaseSIMD::GetParameter(i); } inline fvec AliKFParticleSIMD::GetCovariance( int i ) const { return AliKFParticleBaseSIMD::GetCovariance(i); } inline fvec AliKFParticleSIMD::GetCovariance( int i, int j ) const { return AliKFParticleBaseSIMD::GetCovariance(i,j); } inline fvec AliKFParticleSIMD::GetP () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetMomentum( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetPt () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetPt( par, err ) ; return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetEta () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetEta( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetPhi () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetPhi( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetMomentum () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetMomentum( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetMass () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetMass( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetDecayLength () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetDecayLength( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetDecayLengthXY () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetDecayLengthXY( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetLifeTime () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetLifeTime( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetR () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetR( par, err ); return ((!mask) & par); } inline fvec AliKFParticleSIMD::GetErrX () const { return sqrt(fabs( GetCovariance(0,0) )); } inline fvec AliKFParticleSIMD::GetErrY () const { return sqrt(fabs( GetCovariance(1,1) )); } inline fvec AliKFParticleSIMD::GetErrZ () const { return sqrt(fabs( GetCovariance(2,2) )); } inline fvec AliKFParticleSIMD::GetErrPx () const { return sqrt(fabs( GetCovariance(3,3) )); } inline fvec AliKFParticleSIMD::GetErrPy () const { return sqrt(fabs( GetCovariance(4,4) )); } inline fvec AliKFParticleSIMD::GetErrPz () const { return sqrt(fabs( GetCovariance(5,5) )); } inline fvec AliKFParticleSIMD::GetErrE () const { return sqrt(fabs( GetCovariance(6,6) )); } inline fvec AliKFParticleSIMD::GetErrS () const { return sqrt(fabs( GetCovariance(7,7) )); } inline fvec AliKFParticleSIMD::GetErrP () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetMomentum( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrPt () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetPt( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrEta () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetEta( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrPhi () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetPhi( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrMomentum () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetMomentum( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrMass () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetMass( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrDecayLength () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetDecayLength( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrDecayLengthXY () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetDecayLengthXY( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrLifeTime () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetLifeTime( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetErrR () const { fvec par, err; fvec mask = AliKFParticleBaseSIMD::GetR( par, err ); fvec ret(1.e10); ret = (mask & ret) + ((!mask) & err); return ret; } inline fvec AliKFParticleSIMD::GetP( fvec &P, fvec &SigmaP ) const { return AliKFParticleBaseSIMD::GetMomentum( P, SigmaP ); } inline fvec AliKFParticleSIMD::GetPt( fvec &Pt, fvec &SigmaPt ) const { return AliKFParticleBaseSIMD::GetPt( Pt, SigmaPt ); } inline fvec AliKFParticleSIMD::GetEta( fvec &Eta, fvec &SigmaEta ) const { return AliKFParticleBaseSIMD::GetEta( Eta, SigmaEta ); } inline fvec AliKFParticleSIMD::GetPhi( fvec &Phi, fvec &SigmaPhi ) const { return AliKFParticleBaseSIMD::GetPhi( Phi, SigmaPhi ); } inline fvec AliKFParticleSIMD::GetMomentum( fvec &P, fvec &SigmaP ) const { return AliKFParticleBaseSIMD::GetMomentum( P, SigmaP ); } inline fvec AliKFParticleSIMD::GetMass( fvec &M, fvec &SigmaM ) const { return AliKFParticleBaseSIMD::GetMass( M, SigmaM ); } inline fvec AliKFParticleSIMD::GetDecayLength( fvec &L, fvec &SigmaL ) const { return AliKFParticleBaseSIMD::GetDecayLength( L, SigmaL ); } inline fvec AliKFParticleSIMD::GetDecayLengthXY( fvec &L, fvec &SigmaL ) const { return AliKFParticleBaseSIMD::GetDecayLengthXY( L, SigmaL ); } inline fvec AliKFParticleSIMD::GetLifeTime( fvec &T, fvec &SigmaT ) const { return AliKFParticleBaseSIMD::GetLifeTime( T, SigmaT ); } inline fvec AliKFParticleSIMD::GetR( fvec &R, fvec &SigmaR ) const { return AliKFParticleBaseSIMD::GetR( R, SigmaR ); } inline fvec & AliKFParticleSIMD::X() { return AliKFParticleBaseSIMD::X(); } inline fvec & AliKFParticleSIMD::Y() { return AliKFParticleBaseSIMD::Y(); } inline fvec & AliKFParticleSIMD::Z() { return AliKFParticleBaseSIMD::Z(); } inline fvec & AliKFParticleSIMD::Px() { return AliKFParticleBaseSIMD::Px(); } inline fvec & AliKFParticleSIMD::Py() { return AliKFParticleBaseSIMD::Py(); } inline fvec & AliKFParticleSIMD::Pz() { return AliKFParticleBaseSIMD::Pz(); } inline fvec & AliKFParticleSIMD::E() { return AliKFParticleBaseSIMD::E(); } inline fvec & AliKFParticleSIMD::S() { return AliKFParticleBaseSIMD::S(); } inline fvec & AliKFParticleSIMD::Q() { return AliKFParticleBaseSIMD::Q(); } inline fvec & AliKFParticleSIMD::Chi2() { return AliKFParticleBaseSIMD::Chi2(); } inline Int_t & AliKFParticleSIMD::NDF() { return AliKFParticleBaseSIMD::NDF(); } inline fvec & AliKFParticleSIMD::Parameter ( int i ) { return AliKFParticleBaseSIMD::Parameter(i); } inline fvec & AliKFParticleSIMD::Covariance( int i ) { return AliKFParticleBaseSIMD::Covariance(i); } inline fvec & AliKFParticleSIMD::Covariance( int i, int j ) { return AliKFParticleBaseSIMD::Covariance(i,j); } inline fvec * AliKFParticleSIMD::Parameters () { return fP; } inline fvec * AliKFParticleSIMD::CovarianceMatrix() { return fC; } inline void AliKFParticleSIMD::operator +=( const AliKFParticleSIMD &Daughter ) { AliKFParticleBaseSIMD::operator +=( Daughter ); } inline void AliKFParticleSIMD::AddDaughter( const AliKFParticleSIMD &Daughter ) { AliKFParticleBaseSIMD::AddDaughter( Daughter ); } inline void AliKFParticleSIMD::SetProductionVertex( const AliKFParticleSIMD &Vtx ) { AliKFParticleBaseSIMD::SetProductionVertex( Vtx ); } inline void AliKFParticleSIMD::SetMassConstraint( fvec Mass, fvec SigmaMass ) { AliKFParticleBaseSIMD::SetMassConstraint( Mass, SigmaMass ); } inline void AliKFParticleSIMD::SetNoDecayLength() { AliKFParticleBaseSIMD::SetNoDecayLength(); } inline void AliKFParticleSIMD::Construct( const AliKFParticleSIMD *vDaughters[], int NDaughters, const AliKFParticleSIMD *ProdVtx, Float_t Mass, Bool_t IsConstrained ) { AliKFParticleBaseSIMD::Construct( ( const AliKFParticleBaseSIMD**)vDaughters, NDaughters, ( const AliKFParticleBaseSIMD*)ProdVtx, Mass, IsConstrained ); } inline void AliKFParticleSIMD::TransportToDecayVertex() { AliKFParticleBaseSIMD::TransportToDecayVertex(); } inline void AliKFParticleSIMD::TransportToProductionVertex() { AliKFParticleBaseSIMD::TransportToProductionVertex(); } inline void AliKFParticleSIMD::TransportToPoint( const fvec xyz[] ) { TransportToDS( GetDStoPoint(xyz) ); } inline void AliKFParticleSIMD::TransportToVertex( const AliVVertex &v ) { TransportToPoint( AliKFParticleSIMD(v).fP ); } inline void AliKFParticleSIMD::TransportToParticle( const AliKFParticleSIMD &p ) { fvec dS, dSp; GetDStoParticle( p, dS, dSp ); TransportToDS( dS ); } inline void AliKFParticleSIMD::TransportToDS( fvec dS ) { AliKFParticleBaseSIMD::TransportToDS( dS ); } inline fvec AliKFParticleSIMD::GetDStoPoint( const fvec xyz[] ) const { return AliKFParticleBaseSIMD::GetDStoPointBz( GetFieldAlice(), xyz ); } inline void AliKFParticleSIMD::GetDStoParticle( const AliKFParticleSIMD &p, fvec &DS, fvec &DSp ) const { GetDStoParticleXY( p, DS, DSp ); } inline fvec AliKFParticleSIMD::GetDistanceFromVertex( const fvec vtx[] ) const { return AliKFParticleBaseSIMD::GetDistanceFromVertex( vtx ); } inline fvec AliKFParticleSIMD::GetDeviationFromVertex( const fvec v[], const fvec Cv[] ) const { return AliKFParticleBaseSIMD::GetDeviationFromVertex( v, Cv); } inline fvec AliKFParticleSIMD::GetDistanceFromVertex( const AliKFParticleSIMD &Vtx ) const { return AliKFParticleBaseSIMD::GetDistanceFromVertex( Vtx ); } inline fvec AliKFParticleSIMD::GetDeviationFromVertex( const AliKFParticleSIMD &Vtx ) const { return AliKFParticleBaseSIMD::GetDeviationFromVertex( Vtx ); } inline fvec AliKFParticleSIMD::GetDistanceFromVertex( const AliVVertex &Vtx ) const { return GetDistanceFromVertex( AliKFParticleSIMD(Vtx) ); } inline fvec AliKFParticleSIMD::GetDeviationFromVertex( const AliVVertex &Vtx ) const { return GetDeviationFromVertex( AliKFParticleSIMD(Vtx) ); } inline fvec AliKFParticleSIMD::GetDistanceFromParticle( const AliKFParticleSIMD &p ) const { return AliKFParticleBaseSIMD::GetDistanceFromParticle( p ); } inline fvec AliKFParticleSIMD::GetDeviationFromParticle( const AliKFParticleSIMD &p ) const { return AliKFParticleBaseSIMD::GetDeviationFromParticle( p ); } inline void AliKFParticleSIMD::SubtractFromVertex( AliKFParticleSIMD &v ) const { AliKFParticleBaseSIMD::SubtractFromVertex( v ); } inline fvec AliKFParticleSIMD::GetFieldAlice() { return fgBz; } inline void AliKFParticleSIMD::GetFieldValue( const fvec * /*xyz*/, fvec B[] ) const { B[0] = B[1] = 0; B[2] = GetFieldAlice(); } inline void AliKFParticleSIMD::GetDStoParticle( const AliKFParticleBaseSIMD &p, fvec &DS, fvec &DSp )const { GetDStoParticleXY( p, DS, DSp ); } inline void AliKFParticleSIMD::GetDStoParticleXY( const AliKFParticleBaseSIMD &p, fvec &DS, fvec &DSp ) const { AliKFParticleBaseSIMD::GetDStoParticleBz( GetFieldAlice(), p, DS, DSp ) ; //GetDStoParticleALICE( p, DS, DSp ) ; } inline void AliKFParticleSIMD::Transport( fvec dS, fvec P[], fvec C[] ) const { AliKFParticleBaseSIMD::TransportBz( GetFieldAlice(), dS, P, C ); } inline void AliKFParticleSIMD::ConstructGamma( const AliKFParticleSIMD &daughter1, const AliKFParticleSIMD &daughter2 ) { AliKFParticleBaseSIMD::ConstructGammaBz( daughter1, daughter2, GetFieldAlice() ); } #endif