19#ifndef ALIKFPARTICLEBASE_H
20#define ALIKFPARTICLEBASE_H
36 virtual void GetFieldValue(
const Double_t xyz[], Double_t B[])
const = 0;
50 Double_t &DS, Double_t &DSp )
const = 0;
54 virtual void Transport( Double_t dS, Double_t P[], Double_t C[] )
const = 0;
73 void Initialize(
const Double_t Param[],
const Double_t Cov[], Int_t Charge, Double_t Mass );
81 void SetVtxGuess( Double_t x, Double_t y, Double_t z );
112 const Double_t&
X ()
const {
return fP[0]; }
113 const Double_t&
Y ()
const {
return fP[1]; }
114 const Double_t&
Z ()
const {
return fP[2]; }
115 const Double_t&
Px ()
const {
return fP[3]; }
116 const Double_t&
Py ()
const {
return fP[4]; }
117 const Double_t&
Pz ()
const {
return fP[5]; }
118 const Double_t&
E ()
const {
return fP[6]; }
119 const Double_t&
S ()
const {
return fP[7]; }
120 const Int_t &
Q ()
const {
return fQ; }
131 Int_t
GetMomentum ( Double_t &P, Double_t &SigmaP )
const ;
132 Int_t
GetPt ( Double_t &Pt, Double_t &SigmaPt )
const ;
133 Int_t
GetEta ( Double_t &Eta, Double_t &SigmaEta )
const ;
134 Int_t
GetPhi ( Double_t &Phi, Double_t &SigmaPhi )
const ;
135 Int_t
GetMass ( Double_t &M, Double_t &SigmaM )
const ;
138 Int_t
GetLifeTime ( Double_t &T, Double_t &SigmaT )
const ;
139 Int_t
GetR ( Double_t &R, Double_t &SigmaR )
const ;
145 Double_t &
X () {
return fP[0]; }
146 Double_t &
Y () {
return fP[1]; }
147 Double_t &
Z () {
return fP[2]; }
148 Double_t &
Px () {
return fP[3]; }
149 Double_t &
Py () {
return fP[4]; }
150 Double_t &
Pz () {
return fP[5]; }
151 Double_t &
E () {
return fP[6]; }
152 Double_t &
S () {
return fP[7]; }
153 Int_t &
Q () {
return fQ; }
197 const KFParticleBase *ProdVtx=0, Double_t Mass=-1, Bool_t IsConstrained=0 );
222 Double_t
GetDStoPointBz( Double_t Bz,
const Double_t xyz[] )
const;
223 Double_t
GetDStoPointBy( Double_t By,
const Double_t xyz[] )
const;
231 void TransportBz( Double_t Bz, Double_t dS, Double_t P[], Double_t C[] )
const;
232 void TransportCBM( Double_t dS, Double_t P[], Double_t C[] )
const;
249 const Double_t Cv[]=0 )
const;
266 void RotateXY(Double_t angle, Double_t Vtx[3]);
280 static Int_t
IJ( Int_t
i, Int_t j ){
281 return ( j<=
i ) ?
i*(
i+1)/2+j :j*(j+1)/2+
i;
284 Double_t &
Cij( Int_t
i, Int_t j ){
return fC[
IJ(
i,j)]; }
286 void Convert(
bool ToProduction );
287 void TransportLine( Double_t
S, Double_t P[], Double_t C[] )
const ;
291 void GetDSIter(
const KFParticleBase &p, Double_t
const &dS, Double_t x[3], Double_t dx[3], Double_t ddx[3])
const;
293 static Bool_t
InvertSym3(
const Double_t A[], Double_t Ainv[] );
295 static void MultQSQt(
const Double_t
Q[],
const Double_t
S[],
298 static Double_t
GetSCorrection(
const Double_t Part[],
const Double_t XYZ[] );
300 void GetMeasurement(
const Double_t XYZ[], Double_t
m[], Double_t V[] )
const ;
303 void SetMassConstraint( Double_t *mP, Double_t *mC, Double_t mJ[7][7], Double_t mass );
void Convert(bool ToProduction)
const Double_t & GetSumDaughterMass() const
void GetMeasurement(const Double_t XYZ[], Double_t m[], Double_t V[]) const
void SetProductionVertex(const KFParticleBase &Vtx)
void AddDaughterWithEnergyFitMC(const KFParticleBase &Daughter)
Int_t GetPhi(Double_t &Phi, Double_t &SigmaPhi) const
const Double_t & Y() const
const Double_t & S() const
static void MultQSQt(const Double_t Q[], const Double_t S[], Double_t SOut[])
void GetDStoParticleBz(Double_t Bz, const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
Double_t GetDStoPointCBM(const Double_t xyz[]) const
void SetNonlinearMassConstraint(Double_t Mass)
Double_t GetDStoPointLine(const Double_t xyz[]) const
void AddDaughter(const KFParticleBase &Daughter)
Double_t & Cij(Int_t i, Int_t j)
void AddDaughterWithEnergyCalc(const KFParticleBase &Daughter)
static Bool_t InvertSym3(const Double_t A[], Double_t Ainv[])
Int_t GetLifeTime(Double_t &T, Double_t &SigmaT) const
Int_t GetEta(Double_t &Eta, Double_t &SigmaEta) const
Int_t GetDecayLength(Double_t &L, Double_t &SigmaL) const
Int_t GetR(Double_t &R, Double_t &SigmaR) const
const Double_t & GetMassHypo() const
static Double_t GetSCorrection(const Double_t Part[], const Double_t XYZ[])
Double_t GetCovariance(Int_t i, Int_t j) const
const Double_t & Z() const
void TransportCBM(Double_t dS, Double_t P[], Double_t C[]) const
Int_t GetMomentum(Double_t &P, Double_t &SigmaP) const
virtual ~KFParticleBase()
void GetDSIter(const KFParticleBase &p, Double_t const &dS, Double_t x[3], Double_t dx[3], Double_t ddx[3]) const
void SubtractFromVertex(KFParticleBase &Vtx) const
const Double_t & E() const
Double_t & Parameter(Int_t i)
virtual void GetDStoParticle(const KFParticleBase &p, Double_t &DS, Double_t &DSp) const =0
Bool_t fAtProductionVertex
Double_t & Covariance(Int_t i, Int_t j)
Double_t GetDistanceFromVertex(const Double_t vtx[]) const
const std::vector< int > & DaughterIds() const
Double_t GetDStoPointBz(Double_t Bz, const Double_t xyz[]) const
void GetDStoParticleCBM(const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
void TransportLine(Double_t S, Double_t P[], Double_t C[]) const
void SetMassHypo(Double_t m)
const Double_t & Pz() const
virtual void Transport(Double_t dS, Double_t P[], Double_t C[]) const =0
Double_t GetDistanceFromParticle(const KFParticleBase &p) const
void operator+=(const KFParticleBase &Daughter)
Double_t GetDeviationFromParticle(const KFParticleBase &p) const
Double_t GetCovariance(Int_t i) const
void SetVtxGuess(Double_t x, Double_t y, Double_t z)
const Double_t & Chi2() const
void SetConstructMethod(Int_t m)
void GetDStoParticleLine(const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
const Double_t & Px() const
void RotateXY(Double_t angle, Double_t Vtx[3])
virtual void GetFieldValue(const Double_t xyz[], Double_t B[]) const =0
std::vector< int > fDaughtersIds
Int_t GetMass(Double_t &M, Double_t &SigmaM) const
void AddDaughterId(int id)
void TransportToProductionVertex()
ClassDef(KFParticleBase, 1)
void TransportBz(Double_t Bz, Double_t dS, Double_t P[], Double_t C[]) const
const Double_t & X() const
Int_t GetDecayLengthXY(Double_t &L, Double_t &SigmaL) const
Double_t GetParameter(Int_t i) const
const Double_t & Py() const
static Int_t IJ(Int_t i, Int_t j)
void Construct(const KFParticleBase *vDaughters[], Int_t nDaughters, const KFParticleBase *ProdVtx=0, Double_t Mass=-1, Bool_t IsConstrained=0)
void SetMassConstraint(Double_t Mass, Double_t SigmaMass=0)
Double_t GetDeviationFromVertex(const Double_t v[], const Double_t Cv[]=0) const
const Int_t & NDF() const
static void GetArmenterosPodolanski(KFParticleBase &positive, KFParticleBase &negative, Double_t QtAlfa[2])
void ConstructGammaBz(const KFParticleBase &daughter1, const KFParticleBase &daughter2, double Bz)
void GetDStoParticleBy(Double_t B, const KFParticleBase &p, Double_t &dS, Double_t &dS1) const
void TransportToDecayVertex()
Double_t & Covariance(Int_t i)
Double_t GetDStoPointBy(Double_t By, const Double_t xyz[]) const
void TransportToDS(Double_t dS)
Int_t GetPt(Double_t &Pt, Double_t &SigmaPt) const
void AddDaughterWithEnergyFit(const KFParticleBase &Daughter)
virtual Double_t GetDStoPoint(const Double_t xyz[]) const =0