#ifndef CbmKFParticleFinder_h #define CbmKFParticleFinder_h #include "CbmKFParticle.h" #include "CbmKFParticle_simd.h" #include "CbmKFTrackInterface.h" #include "CbmKFVertexInterface.h" #include "CbmKFVertex.h" class L1FieldRegion; class CbmL1Track; class L1AlgoInputData; class L1Algo; class CbmKFParticleFinder { public: CbmKFParticleFinder():fHits(0),fAlgo(0) {}; ~CbmKFParticleFinder() {}; // functions for particle finding /// Find particles with 2-body decay channel from input tracks vRTracks with primary vertex PrimVtx: /// 1. K0s->pi+ pi- /// 2. Lambda->p pi- /// All particles are put into the Particles array. 3 cuts for each particle are required. /// First index in the cuts array sets a particle number (see table above), second index - a cut number: /// cut[0][0] - chi to a primary vertex of a track (sqare root from a normalized on a total error of /// the track and the vertex distance between the track and the primary vertex), only /// element cut[0][0] is used to select tracks, all other elements cut[*][0] are not used; /// cut[*][1] - chi2/ndf of the reconstructed particle; /// cut[*][2] - z coordinate of the reconstructed particle. template void FindParticlesT(vector& vRTracks, vector& Particles, CbmKFVertex& PrimVtx, const float cuts[2][3]); void FindParticles(vector& vRTracks, vector& Particles, CbmKFVertex& PrimVtx, const float cuts[2][3] = DefaultCuts); void FindHyperons(int PDG, CbmKFParticle_simd vDaughters[2], vector& daughterIds, vector& vLambdaSec, vector& vHyperon, CbmKFVertex& PrimVtx, const float *cuts = 0, int startIndex=0); template void ConstructPVT(const vector& vRTracks, CbmKFVertex& pv) const; void ConstructPV(const vector& vRTracks, CbmKFVertex& pv) const; void SetHits(const L1AlgoInputData* hits) {fHits = hits;} void SetAlgo(const L1Algo* algo) {fAlgo = algo;} private: const L1AlgoInputData* fHits; const L1Algo* fAlgo; static const float DefaultCuts[2][3]; }; #endif /* !CbmKFParticleFinder_h */