31 #define HomogeneousField 33 #ifndef KFPARTICLESIMD_H 34 #define KFPARTICLESIMD_H 38 #ifdef HomogeneousField 43 #ifdef NonhomogeneousField 44 class CbmKFTrackInterface;
45 class CbmKFVertexInterface;
59 #ifdef HomogeneousField 62 #ifdef NonhomogeneousField 92 #ifdef HomogeneousField 98 void Create(
KFPTrack *Track[],
int NTracks, Int_t *qHypo =
nullptr,
const Int_t *pdg =
nullptr);
105 #ifdef NonhomogeneousField 106 KFParticleSIMD(CbmKFTrackInterface *Track[],
int NTracks, Int_t *qHypo = 0,
const Int_t *pdg = 0);
107 KFParticleSIMD(CbmKFTrackInterface &Track, Int_t *qHypo = 0,
const Int_t *pdg = 0);
109 void Create(CbmKFTrackInterface *Track[],
int NTracks, Int_t *qHypo = 0,
const Int_t *pdg = 0);
280 #ifdef HomogeneousField 311 #ifdef HomogeneousField 321 #ifdef HomogeneousField 331 #ifdef HomogeneousField 337 #ifdef HomogeneousField 347 #ifdef HomogeneousField 381 #ifdef HomogeneousField 393 #ifdef HomogeneousField 396 #ifdef NonhomogeneousField 407 #ifdef HomogeneousField 517 return ((!mask) & par);
524 return ((!mask) & par);
531 return ((!mask) & par);
538 return ((!mask) & par);
545 return ((!mask) & par);
552 return ((!mask) & par);
559 return ((!mask) & par);
566 return ((!mask) & par);
573 return ((!mask) & par);
580 return ((!mask) & par);
628 ret = (mask & ret) + ((!mask) & err);
637 ret = (mask & ret) + ((!mask) & err);
646 ret = (mask & ret) + ((!mask) & err);
655 ret = (mask & ret) + ((!mask) & err);
664 ret = (mask & ret) + ((!mask) & err);
673 ret = (mask & ret) + ((!mask) & err);
682 ret = (mask & ret) + ((!mask) & err);
691 ret = (mask & ret) + ((!mask) & err);
700 ret = (mask & ret) + ((!mask) & err);
709 ret = (mask & ret) + ((!mask) & err);
872 #ifdef NonhomogeneousField 874 L1FieldValue field[3];
875 fvec zField[3] = {0,
fP[2] / 2,
fP[2]};
877 for (
int iPoint = 0; iPoint < 3; iPoint++) {
878 for (
int iD = 0; iD < nDaughters; ++iD) {
879 L1FieldValue b =
const_cast<KFParticleSIMD *
>(vDaughters[iD])->fField.Get(zField[iPoint]);
880 field[iPoint].x += b.x;
881 field[iPoint].y += b.y;
882 field[iPoint].z += b.z;
884 field[iPoint].x /= nDaughters;
885 field[iPoint].y /= nDaughters;
886 field[iPoint].z /= nDaughters;
889 fField.Set(field[2], zField[2], field[1], zField[1], field[0], zField[0]);
907 #ifdef HomogeneousField 927 #ifdef HomogeneousField 930 #ifdef NonhomogeneousField 959 #ifdef HomogeneousField 990 #ifdef HomogeneousField 997 #ifdef HomogeneousField 1005 #ifdef NonhomogeneousField 1008 L1FieldValue mB =
const_cast<L1FieldRegion &
>(fField).Get(xyz[2]);
1022 #ifdef HomogeneousField 1025 #ifdef NonhomogeneousField 1033 #ifdef HomogeneousField 1036 #ifdef NonhomogeneousField 1043 #ifdef HomogeneousField
static void GetExternalTrackParam(const KFParticleBaseSIMD &p, Double_t X[fvecLen], Double_t Alpha[fvecLen], Double_t P[5][fvecLen])
fvec GetEta(fvec &Eta, fvec &SigmaEta) const
void TransportToDecayVertex()
fvec GetDeviationFromVertexXY(const fvec v[], const fvec Cv[]=0) const
fvec GetMass(fvec &M, fvec &SigmaM) const
fvec GetDistanceFromParticleXY(const KFParticleSIMD &p) const
static void SetField(fvec Bz)
fvec GetCovariance(int i) const
fvec GetDistanceFromParticle(const KFParticleBaseSIMD &p) const
friend F32vec4 sqrt(const F32vec4 &a)
fvec GetPhi(fvec &Phi, fvec &SigmaPhi) const
void TransportCBM(fvec dS, fvec P[], fvec C[]) const
fvec GetErrDecayLength() const
void TransportToDS(fvec dS)
void TransportToProductionVertex()
void GetDStoParticleBz(fvec Bz, const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
void ConstructGammaBz(const KFParticleBaseSIMD &daughter1, const KFParticleBaseSIMD &daughter2, fvec Bz)
void SetVtxGuess(fvec x, fvec y, fvec z)
void TransportToProductionVertex()
void operator+=(const KFParticleBaseSIMD &Daughter)
void TransportBz(fvec Bz, fvec dS, fvec P[], fvec C[]) const
fvec GetMomentum(fvec &P, fvec &SigmaP) const
fvec GetDeviationFromParticle(const KFParticleSIMD &p) const
void SubtractFromVertex(KFParticleBaseSIMD &Vtx) const
fvec GetDecayLengthXY() const
void SubtractFromParticle(KFParticleSIMD &v) const
void Construct(const KFParticleBaseSIMD *vDaughters[], Int_t nDaughters, const KFParticleBaseSIMD *ProdVtx=nullptr, Float_t Mass=-1, Bool_t IsConstrained=0, Bool_t isAtVtxGuess=0)
void TransportToParticle(const KFParticleSIMD &p)
fvec GetPseudoProperDecayTime(const KFParticleSIMD &primVertex, const fvec &mass, fvec *timeErr2=0) const
void GetFieldValue(const fvec xyz[], fvec B[]) const
fvec GetAngle(const KFParticleSIMD &p) const
fvec GetDeviationFromVertex(const fvec v[], const fvec Cv[]=0) const
fvec GetErrLifeTime() const
fvec GetDistanceFromVertexXY(const fvec vtx[], fvec &val, fvec &err) const
fvec GetCovariance(Int_t i) const
fvec GetDStoPoint(const fvec xyz[]) const
const fvec & Chi2() const
const fvec & Chi2() const
Bool_t GetAtProductionVertex() const
fvec * CovarianceMatrix()
void Construct(const KFParticleSIMD *vDaughters[], int nDaughters, const KFParticleSIMD *ProdVtx=nullptr, Float_t Mass=-1, Bool_t IsConstrained=0, Bool_t isAtVtxGuess=0)
fvec & Covariance(Int_t i)
void SubtractFromVertex(KFParticleSIMD &v) const
static fvec GetFieldAlice()
fvec GetDecayLength() const
fvec GetParameter(int i) const
fvec GetErrDecayLengthXY() const
void GetDStoParticle(const KFParticleSIMD &p, fvec &DS, fvec &DSp) const
fvec GetDeviationFromParticle(const KFParticleBaseSIMD &p) const
void TransportToPoint(const fvec xyz[])
fvec GetDistanceFromParticle(const KFParticleSIMD &p) const
friend F32vec4 fabs(const F32vec4 &a)
void TransportToDS(fvec dS)
fvec GetErrMomentum() const
void ConstructGamma(const KFParticleSIMD &daughter1, const KFParticleSIMD &daughter2)
void GetDStoParticleXY(const KFParticleBaseSIMD &p, fvec &DS, fvec &DSp) const
fvec GetDeviationFromParticleXY(const KFParticleSIMD &p) const
void SubtractFromParticle(KFParticleBaseSIMD &Vtx) const
void SetMassConstraint(fvec Mass, fvec SigmaMass=0)
void AddDaughter(const KFParticleBaseSIMD &Daughter, Bool_t isAtVtxGuess=0)
fvec GetDStoPointCBM(const fvec xyz[]) const
void TransportToVertex(const KFPVertex &v)
Bool_t fAtProductionVertex
fvec GetDistanceFromVertex(const fvec vtx[]) const
void AddDaughter(const KFParticleSIMD &Daughter)
fvec GetAngleXY(const KFParticleSIMD &p) const
void operator+=(const KFParticleSIMD &Daughter)
fvec GetLifeTime(fvec &T, fvec &SigmaT) const
void TransportToDecayVertex()
fvec GetPt(fvec &Pt, fvec &SigmaPt) const
void GetKFParticle(KFParticle &Part, int iPart=0)
fvec GetDistanceFromVertex(const fvec vtx[]) const
fvec GetR(fvec &R, fvec &SigmaR) const
void SetProductionVertex(const KFParticleBaseSIMD &Vtx)
fvec GetDStoPointBz(fvec Bz, const fvec xyz[]) const
void SetVtxGuess(fvec x, fvec y, fvec z)
void Create(const fvec Param[], const fvec Cov[], fvec Charge, fvec mass)
void GetDStoParticleCBM(const KFParticleBaseSIMD &p, fvec &dS, fvec &dS1) const
fvec & Parameter(Int_t i)
fvec GetParameter(Int_t i) const
fvec GetDecayLengthXY(fvec &L, fvec &SigmaL) const
fvec GetAngleRZ(const KFParticleSIMD &p) const
void SetMassConstraint(fvec Mass, fvec SigmaMass=0)
void SetOneEntry(const int i0, const L1FieldRegion &f1, const int i1)
fvec GetDeviationFromVertex(const fvec v[], const fvec Cv[]=0) const
fvec GetDecayLength(fvec &L, fvec &SigmaL) const
void Transport(fvec dS, fvec P[], fvec C[]) const
void SetProductionVertex(const KFParticleSIMD &Vtx)