1#ifndef CbmKFParticleInterface_h
2#define CbmKFParticleInterface_h
10#include "CbmKFVertex.h"
124 static void FindParticles(vector<CbmKFTrack>& vRTracks, vector<float>& ChiToPrimVtx,
125 vector<L1FieldRegion>& vField, vector<CbmKFParticle>& Particles,
126 CbmKFVertex& PrimVtx,
const vector<int>& vTrackPDG,
const float cuts[2][3] = DefaultCuts);
137 const vector<L1FieldRegion>& vField,
138 vector<CbmKFParticle>& Particles,
139 const int DaughterNegPDG,
140 const int DaughterPosPDG,
142 vector<short>& idNeg,
143 vector<short>& idPos,
145 const float* cuts = 0,
147 vector<float>* vMotherTopoChi2Ndf = 0,
148 const float* secCuts = 0,
149 const float massMotherPDG = 0,
150 const float massMotherPDGSigma = 0,
151 vector<CbmKFParticle>* vMotherPrim = 0,
152 vector<CbmKFParticle>* vMotherSec = 0);
155 const vector<L1FieldRegion>& vField,
156 vector<CbmKFParticle>& Particles,
157 const int DaughterNegPDG,
158 const int DaughterPosPDG,
160 vector<short>& idNeg,
161 vector<short>& idPos,
166 const float Chi2PrimCut = -100.f,
167 vector<float>* ChiToPrimVtx = 0,
168 const float* PCut = 0);
171 vector<CbmKFParticle>& Particles,
172 vector<CbmKFParticle>& vV0,
173 vector<CbmKFTrack>& vTracks,
174 const vector<L1FieldRegion>& field,
175 const int DaughterPDG,
176 vector<short>& idTrack,
178 const float* cuts = 0,
180 vector<float>* ChiToPrimVtx = 0,
181 vector<CbmKFParticle>* vHyperonPrim = 0,
182 float hyperonPrimMass = 0,
183 float hyperonPrimMassErr = 0,
184 vector<CbmKFParticle>* vHyperonSec = 0);
188 vector<int>& daughterIds,
189 vector<CbmKFParticle>& vLambdaSec,
190 vector<CbmKFParticle>& vHyperon,
192 const float *cuts = 0,
197 const vector<L1FieldRegion>& vField,
198 vector<CbmKFParticle>& Particles,
199 const int DaughterPDG[5],
200 const int MotherPDG[8],
201 vector<short>* idTrack[5],
203 const float cuts[8][8],
204 vector<float> ChiToPrimVtx);
208 const vector<L1FieldRegion>& vField,
209 vector<CbmKFParticle>& Particles,
211 const int DaughterPDG,
215 const unsigned short startIndex = 0,
216 const bool IsSamePart = 0);
219 vector<CbmKFParticle>& vCandidates,
221 const float cuts[5]);
232 return KFPart.
C[( j<=
i ) ?
i*(
i+1)/2+j :j*(j+1)/2+
i];
235 static Int_t
IJ( Int_t
i, Int_t j ){
236 return ( j<=
i ) ?
i*(
i+1)/2+j :j*(j+1)/2+
i;
244 static const float DefaultCuts[2][3];
void multQSQt(const fvec Q[], fvec S[])
CbmKFVertex GetKFVertexJ(int j)
const fvec * GetParameters() const
void MeasureMass(CbmKFParticle_simd *Particle, fvec r0[], fvec Mass)
const fvec & GetPDG() const
void GetKFVertex(CbmKFVertex *vtx)
static void Find2DaughterDecay(vector< CbmKFTrack > &vTracks, const vector< L1FieldRegion > &vField, vector< CbmKFParticle > &Particles, const int DaughterNegPDG, const int DaughterPosPDG, const int MotherPDG, vector< short > &idNeg, vector< short > &idPos, CbmKFVertex &PrimVtx, const float *cuts=0, bool isPrimary=0, vector< float > *vMotherTopoChi2Ndf=0, const float *secCuts=0, const float massMotherPDG=0, const float massMotherPDGSigma=0, vector< CbmKFParticle > *vMotherPrim=0, vector< CbmKFParticle > *vMotherSec=0)
static void FindParticles(vector< CbmKFTrack > &vRTracks, vector< float > &ChiToPrimVtx, vector< L1FieldRegion > &vField, vector< CbmKFParticle > &Particles, CbmKFVertex &PrimVtx, const vector< int > &vTrackPDG, const float cuts[2][3]=DefaultCuts)
void Construct(CbmKFTrackInterface *vDaughters[][fvecLen], int NDaughters, CbmKFVertexInterface *Parent=0, float Mass=-1, float CutChi2=-1)
fvec GetCovariance(Int_t i) const
static fvec GetChi2BetweenParticles(CbmKFParticle_simd &p1, CbmKFParticle_simd &p2)
fvec GetCovariance(Int_t i, Int_t j) const
fvec & Cij(Int_t i, Int_t j)
void TransportToDecayVertex()
void SetField(const L1FieldRegion &field, bool isOneEntry=0, const int iVec=0)
fvec & rCovariance(Int_t i, Int_t j)
void SetVtxErrGuess(fvec &d_x, fvec &d_y, fvec &d_z)
void GetMomentum(fvec &P, fvec &Error)
static void SelectParticleCandidates(vector< CbmKFParticle > &Particles, vector< CbmKFParticle > &vCandidates, CbmKFVertex &PrimVtx, const float cuts[5])
static void FindTrackV0Decay(const int MotherPDG, vector< CbmKFParticle > &Particles, vector< CbmKFParticle > &vV0, vector< CbmKFTrack > &vTracks, const vector< L1FieldRegion > &field, const int DaughterPDG, vector< short > &idTrack, CbmKFVertex &PrimVtx, const float *cuts=0, bool isPrimary=0, vector< float > *ChiToPrimVtx=0, vector< CbmKFParticle > *vHyperonPrim=0, float hyperonPrimMass=0, float hyperonPrimMassErr=0, vector< CbmKFParticle > *vHyperonSec=0)
void GetKFParticle(CbmKFParticle &Part, int iPart=0)
fvec & rCovariance(Int_t i)
void TransportToProductionVertex()
fvec GetParameter(Int_t i) const
void multQSQt1(const fvec J[11], fvec S[])
static void FindHyperons(int PDG, CbmKFParticle_simd vDaughters[2], vector< int > &daughterIds, vector< CbmKFParticle > &vLambdaSec, vector< CbmKFParticle > &vHyperon, CbmKFVertex &PrimVtx, const float *cuts=0, int startIndex=0)
CbmKFParticleInterface operator=(const CbmKFParticleInterface &c)
void GetMass(fvec &M, fvec &Error)
void ExtrapolateLine(CbmKFParticle_simd *Particle, fvec r0[], fvec T)
CbmKFParticle_simd KFPart
static Int_t IJ(Int_t i, Int_t j)
~CbmKFParticleInterface()
void Construct(CbmKFParticle_simd vDaughters[], int NDaughters, CbmKFVertexInterface *Parent=0, float Mass=-1, float CutChi2=-1, bool isAtVtxGuess=0)
static void ExtrapolateToPV(vector< CbmKFParticle > &vParticles, CbmKFVertex &PrimVtx)
static void CombineTrackPart(vector< CbmKFTrack > &vTracks, const vector< L1FieldRegion > &vField, vector< CbmKFParticle > &Particles, CbmKFParticle &part, const int DaughterPDG, const int MotherPDG, vector< short > &id, const float *cuts, const unsigned short startIndex=0, const bool IsSamePart=0)
void Convert(CbmKFParticle_simd *Particle, fvec r0[], bool ToProduction)
void ConstructPVT(vector< CbmKFTrack > &vRTracks)
void MeasureProductionVertex(CbmKFParticle_simd *Particle, fvec r0[], CbmKFVertexInterface *Parent)
void SetVtxGuess(fvec &x, fvec &y, fvec &z)
fvec & rParameter(Int_t i)
fvec GetDStoPoint(const CbmKFParticle_simd &Particle, const fvec xyz[]) const
static void FindDMesLambdac(vector< CbmKFTrack > &vTracks, const vector< L1FieldRegion > &vField, vector< CbmKFParticle > &Particles, const int DaughterPDG[5], const int MotherPDG[8], vector< short > *idTrack[5], CbmKFVertex &PrimVtx, const float cuts[8][8], vector< float > ChiToPrimVtx)
void Extrapolate(CbmKFParticle_simd *Particle, fvec r0[], fvec T)
const fvec & GetPDG() const