BmnRoot
Loading...
Searching...
No Matches
CbmKFParticleInterface.h
Go to the documentation of this file.
1#ifndef CbmKFParticleInterface_h
2#define CbmKFParticleInterface_h
3
4#include "CbmKFParticle.h"
7#include "CbmKFTrack.h"
8
10#include "CbmKFVertex.h"
11
12class L1FieldRegion;
13class CbmL1Track;
14class CbmStsTrack;
15
17{
18 public:
19
22 CbmKFParticleInterface(CbmKFParticle* part[], const int nPart = 0);
24
27
28 void SetField(const L1FieldRegion &field, bool isOneEntry=0, const int iVec=0) { KFPart.SetField(field, isOneEntry, iVec);}
29
30 void Construct(CbmKFTrackInterface* vDaughters[][fvecLen], int NDaughters, CbmKFVertexInterface *Parent = 0, float Mass=-1, float CutChi2=-1);
31 void Construct(CbmKFParticle_simd vDaughters[], int NDaughters, CbmKFVertexInterface *Parent = 0, float Mass=-1, float CutChi2=-1, bool isAtVtxGuess = 0);
32
35
36 void Extrapolate( CbmKFParticle_simd* Particle, fvec r0[], fvec T );
37 void Extrapolate( fvec r0[], fvec T );
38 void ExtrapolateLine( CbmKFParticle_simd* Particle, fvec r0[], fvec T );
39
40 fvec GetDStoPoint( const CbmKFParticle_simd& Particle, const fvec xyz[] ) const;
41 fvec GetDStoPoint( const fvec xyz[] ) const;
42
43 void SetVtxGuess(fvec &x, fvec &y, fvec &z);
44 void SetVtxErrGuess(fvec &d_x, fvec &d_y, fvec &d_z);
45
46 //* Simple accessors
47 fvec GetX () const { return KFPart.r[0]; }
48 fvec GetY () const { return KFPart.r[1]; }
49 fvec GetZ () const { return KFPart.r[2]; }
50 fvec GetPx () const { return KFPart.r[3]; }
51 fvec GetPy () const { return KFPart.r[4]; }
52 fvec GetPz () const { return KFPart.r[5]; }
53 fvec GetE () const { return KFPart.r[6]; }
54 fvec GetS () const { return KFPart.r[7]; }
55 fvec GetQ () const { return KFPart.GetQ(); }
56 fvec GetChi2 () const { return KFPart.GetChi2(); }
57 fvec GetNDF () const { return KFPart.GetNDF(); }
59 const fvec *GetParameters() const { return KFPart.GetParameters(); }
61
62 fvec GetParameter ( Int_t i ) const { return KFPart.r[i]; }
63 fvec GetCovariance( Int_t i ) const { return KFPart.C[i]; }
64 fvec GetCovariance( Int_t i, Int_t j ) const { return KFPart.C[IJ(i,j)]; }
65
66 //*
67 //* MODIFIERS
68 //*
69
70 fvec & rX () { return KFPart.rX(); }
71 fvec & rY () { return KFPart.rY(); }
72 fvec & rZ () { return KFPart.rZ(); }
73 fvec & rPx () { return KFPart.rPx();}
74 fvec & rPy () { return KFPart.rPy();}
75 fvec & rPz () { return KFPart.rPz();}
76 fvec & rE () { return KFPart.rE(); }
77 fvec & rS () { return KFPart.rS(); }
78 fvec & rQ () { return KFPart.rQ(); }
79 fvec & rChi2 () { return KFPart.rChi2();}
80 fvec & rNDF () { return KFPart.rNDF();}
81
82 fvec & rParameter ( Int_t i ) { return KFPart.r[i];}
83 fvec & rCovariance( Int_t i ) { return KFPart.C[i];}
84 fvec & rCovariance( Int_t i, Int_t j ) { return KFPart.C[IJ(i,j)];}
85
86 void GetMomentum( fvec &P, fvec &Error );
87 void GetMass( fvec &M, fvec &Error );
88
89 fvec GetTx () const { return KFPart.GetTx(); }
90 fvec GetTy () const { return KFPart.GetTy(); }
91
92 void MeasureMass(CbmKFParticle_simd* Particle, fvec r0[], fvec Mass );
94 void Convert(CbmKFParticle_simd* Particle, fvec r0[], bool ToProduction );
95 void multQSQt( const fvec Q[], fvec S[] );
96
97 void multQSQt1( const fvec J[11], fvec S[] );
98
99 void GetKFVertex( CbmKFVertex *vtx);
100 void GetKFParticle( CbmKFParticle &Part, int iPart = 0);
101 void GetKFParticle( CbmKFParticle *Part, int nPart = 0);
103
104 void GetKFVertexJ(int j, CbmKFVertex *vtx);
105
106 void SetPDG ( fvec pdg ) { KFPart.SetPDG( pdg ); }
107 const fvec& GetPDG () const { return KFPart.GetPDG(); }
108
109 // functions for particle finding
110
122
123// template<class T>
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);
127
128// static void FindParticles(vector<CbmL1Track>& vRTracks, vector<CbmKFParticle>& Particles, CbmKFVertex& PrimVtx,
129// const vector<int>& vTrackPDG, const float cuts[2][3] = DefaultCuts);
130// static void FindParticles(vector<CbmStsTrack>& vRTracks, vector<CbmKFParticle>& Particles, CbmKFVertex& PrimVtx,
131// const vector<int>& vTrackPDG, const float cuts[2][3] = DefaultCuts);
132
133 static void ExtrapolateToPV(vector<CbmKFParticle>& vParticles, CbmKFVertex& PrimVtx);
135// template<class T>
136 static void Find2DaughterDecay(vector<CbmKFTrack>& vTracks,
137 const vector<L1FieldRegion>& vField,
138 vector<CbmKFParticle>& Particles,
139 const int DaughterNegPDG,
140 const int DaughterPosPDG,
141 const int MotherPDG,
142 vector<short>& idNeg,
143 vector<short>& idPos,
144 CbmKFVertex& PrimVtx,
145 const float* cuts = 0,
146 bool isPrimary = 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);
153// template<class T>
154 static void Find2DaughterDecay(vector<CbmKFTrack>& vTracks,
155 const vector<L1FieldRegion>& vField,
156 vector<CbmKFParticle>& Particles,
157 const int DaughterNegPDG,
158 const int DaughterPosPDG,
159 const int MotherPDG,
160 vector<short>& idNeg,
161 vector<short>& idPos,
162 CbmKFVertex& PrimVtx,
163 const float* cuts,
164 bool isPrimary,
165 const float PtCut,
166 const float Chi2PrimCut = -100.f,
167 vector<float>* ChiToPrimVtx = 0,
168 const float* PCut = 0);
169// template<class T>
170 static void FindTrackV0Decay(const int MotherPDG,
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,
177 CbmKFVertex& PrimVtx,
178 const float* cuts = 0,
179 bool isPrimary = 0,
180 vector<float>* ChiToPrimVtx = 0,
181 vector<CbmKFParticle>* vHyperonPrim = 0,
182 float hyperonPrimMass = 0,
183 float hyperonPrimMassErr = 0,
184 vector<CbmKFParticle>* vHyperonSec = 0);
185
186 static void FindHyperons(int PDG,
187 CbmKFParticle_simd vDaughters[2],
188 vector<int>& daughterIds,
189 vector<CbmKFParticle>& vLambdaSec,
190 vector<CbmKFParticle>& vHyperon,
191 CbmKFVertex& PrimVtx,
192 const float *cuts = 0,
193 int startIndex=0);
194
195// template<class T>
196 static void FindDMesLambdac(vector<CbmKFTrack>& vTracks,
197 const vector<L1FieldRegion>& vField,
198 vector<CbmKFParticle>& Particles,
199 const int DaughterPDG[5], //pi, K_b, pi_b, K, p
200 const int MotherPDG[8],
201 vector<short>* idTrack[5], //pi, K_b, pi_b, K, p
202 CbmKFVertex& PrimVtx,
203 const float cuts[8][8],
204 vector<float> ChiToPrimVtx);
205
206// template<class T>
207 static void CombineTrackPart(vector<CbmKFTrack>& vTracks,
208 const vector<L1FieldRegion>& vField,
209 vector<CbmKFParticle>& Particles,
210 CbmKFParticle& part,
211 const int DaughterPDG,
212 const int MotherPDG,
213 vector<short>& id,
214 const float* cuts,
215 const unsigned short startIndex = 0,
216 const bool IsSamePart = 0);
217
218 static void SelectParticleCandidates(vector<CbmKFParticle>& Particles,
219 vector<CbmKFParticle>& vCandidates,
220 CbmKFVertex& PrimVtx,
221 const float cuts[5]);
222
223// template<class T>
224 void ConstructPVT(vector<CbmKFTrack>& vRTracks);
225
226// void ConstructPV(vector<CbmL1Track>& vRTracks);
227// void ConstructPV(vector<CbmStsTrack>& vRTracks);
228
229 protected:
230
231 fvec& Cij( Int_t i, Int_t j ){
232 return KFPart.C[( j<=i ) ? i*(i+1)/2+j :j*(j+1)/2+i];
233 }
234 public:
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;
237 }
238
239 public:
241
242 private:
243
244 static const float DefaultCuts[2][3];
245};
246
247#endif /* !CbmKFParticleInterface_h */
248
const int fvecLen
Definition P4_F32vec4.h:233
int i
Definition P4_F32vec4.h:22
void multQSQt(const fvec Q[], fvec S[])
const fvec * GetParameters() const
void MeasureMass(CbmKFParticle_simd *Particle, fvec r0[], fvec Mass)
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 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 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)
static Int_t IJ(Int_t i, Int_t j)
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 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