BmnRoot
Loading...
Searching...
No Matches
KFParticleFinder.h
Go to the documentation of this file.
1#ifndef KFParticleFinder_h
2#define KFParticleFinder_h
3
4#include "KFParticle.h"
5#include "KFParticleSIMD.h"
6#include "CbmKFTrackInterface.h"
7#include "CbmKFTrack.h"
8
9#include <vector>
10
11class L1FieldRegion;
12class KFParticleSIMD;
13class CbmL1Track;
14class CbmStsTrack;
15
17{
18 public:
19
22
34
35 static void FindParticles(std::vector<CbmKFTrack>& vRTracks, std::vector<float>& ChiToPrimVtx,
36 std::vector<L1FieldRegion>& vField, std::vector<KFParticle>& Particles,
37 KFParticleSIMD& PrimVtx, const std::vector<int>& vTrackPDG, const float cuts[2][3] = DefaultCuts);
38
39 static void ExtrapolateToPV(std::vector<KFParticle>& vParticles, KFParticleSIMD& PrimVtx);
41
42 static void Find2DaughterDecay(std::vector<CbmKFTrack>& vTracks,
43 const std::vector<L1FieldRegion>& vField,
44 std::vector<KFParticle>& Particles,
45 const int DaughterNegPDG,
46 const int DaughterPosPDG,
47 const int MotherPDG,
48 std::vector<short>& idNeg,
49 std::vector<short>& idPos,
50 KFParticleSIMD& PrimVtx,
51 const float* cuts = 0,
52 bool isPrimary = 0,
53 std::vector<float>* vMotherTopoChi2Ndf = 0,
54 const float* secCuts = 0,
55 const float massMotherPDG = 0,
56 const float massMotherPDGSigma = 0,
57 std::vector<KFParticle>* vMotherPrim = 0,
58 std::vector<KFParticle>* vMotherSec = 0);
59
60 static void Find2DaughterDecay(std::vector<CbmKFTrack>& vTracks,
61 const std::vector<L1FieldRegion>& vField,
62 std::vector<KFParticle>& Particles,
63 const int DaughterNegPDG,
64 const int DaughterPosPDG,
65 const int MotherPDG,
66 std::vector<short>& idNeg,
67 std::vector<short>& idPos,
68 KFParticleSIMD& PrimVtx,
69 const float* cuts,
70 bool isPrimary,
71 const float PtCut,
72 const float Chi2PrimCut = -100.f,
73 std::vector<float>* ChiToPrimVtx = 0,
74 const float* PCut = 0);
75
76 static void FindTrackV0Decay(const int MotherPDG,
77 std::vector<KFParticle>& Particles,
78 std::vector<KFParticle>& vV0,
79 std::vector<CbmKFTrack>& vTracks,
80 const std::vector<L1FieldRegion>& field,
81 const int DaughterPDG,
82 std::vector<short>& idTrack,
83 KFParticleSIMD& PrimVtx,
84 const float* cuts = 0,
85 bool isPrimary = 0,
86 std::vector<float>* ChiToPrimVtx = 0,
87 std::vector<KFParticle>* vHyperonPrim = 0,
88 float hyperonPrimMass = 0,
89 float hyperonPrimMassErr = 0,
90 std::vector<KFParticle>* vHyperonSec = 0);
91
92 static void FindHyperons(int PDG,
93 KFParticleSIMD vDaughters[2],
94 std::vector<int>& daughterIds,
95 std::vector<KFParticle>& vLambdaSec,
96 std::vector<KFParticle>& vHyperon,
97 KFParticleSIMD& PrimVtx,
98 const float *cuts = 0,
99 int startIndex=0);
100
101 static void CombinePartPart(std::vector<KFParticle>& particles1,
102 std::vector<KFParticle>& particles2,
103 std::vector<KFParticle>& Particles,
104 KFParticleSIMD& PrimVtx,
105 const float* cuts=0,
106 bool isPrimary=0,
107 const int MotherPDG=0,
108 bool isSameInputPart=0,
109 std::vector<KFParticle>* vMotherPrim=0,
110 std::vector<KFParticle>* vMotherSec=0,
111 float* SecCuts=0,
112 float massMotherPdg=0,
113 float massMotherPdgSigma=0);
114
115 static void FindDMesLambdac(std::vector<CbmKFTrack>& vTracks,
116 const std::vector<L1FieldRegion>& vField,
117 std::vector<KFParticle>& Particles,
118 const int DaughterPDG[5], //pi, K_b, pi_b, K, p
119 const int MotherPDG[8],
120 std::vector<short>* idTrack[5], //pi, K_b, pi_b, K, p
121 KFParticleSIMD& PrimVtx,
122 const float cuts[8][8],
123 std::vector<float> ChiToPrimVtx);
124
125 static void CombineTrackPart(std::vector<CbmKFTrack>& vTracks,
126 const std::vector<L1FieldRegion>& vField,
127 std::vector<KFParticle>& Particles,
128 KFParticle& part,
129 const int DaughterPDG,
130 const int MotherPDG,
131 std::vector<short>& id,
132 const float* cuts,
133 const unsigned short startIndex = 0,
134 const bool IsSamePart = 0);
135
136 static void SelectParticleCandidates(std::vector<KFParticle>& Particles,
137 std::vector<KFParticle>& vCandidates,
138 KFParticleSIMD& PrimVtx,
139 const float cuts[5]);
140
141 void ConstructPVT(std::vector<CbmKFTrack>& vRTracks);
142
143 private:
144
145 static const float DefaultCuts[2][3];
146};
147
148#endif /* !KFParticleFinder_h */
149
void ConstructPVT(std::vector< CbmKFTrack > &vRTracks)
static void SelectParticleCandidates(std::vector< KFParticle > &Particles, std::vector< KFParticle > &vCandidates, KFParticleSIMD &PrimVtx, const float cuts[5])
static fvec GetChi2BetweenParticles(KFParticleSIMD &p1, KFParticleSIMD &p2)
static void ExtrapolateToPV(std::vector< KFParticle > &vParticles, KFParticleSIMD &PrimVtx)
static void FindTrackV0Decay(const int MotherPDG, std::vector< KFParticle > &Particles, std::vector< KFParticle > &vV0, std::vector< CbmKFTrack > &vTracks, const std::vector< L1FieldRegion > &field, const int DaughterPDG, std::vector< short > &idTrack, KFParticleSIMD &PrimVtx, const float *cuts=0, bool isPrimary=0, std::vector< float > *ChiToPrimVtx=0, std::vector< KFParticle > *vHyperonPrim=0, float hyperonPrimMass=0, float hyperonPrimMassErr=0, std::vector< KFParticle > *vHyperonSec=0)
static void CombineTrackPart(std::vector< CbmKFTrack > &vTracks, const std::vector< L1FieldRegion > &vField, std::vector< KFParticle > &Particles, KFParticle &part, const int DaughterPDG, const int MotherPDG, std::vector< short > &id, const float *cuts, const unsigned short startIndex=0, const bool IsSamePart=0)
static void CombinePartPart(std::vector< KFParticle > &particles1, std::vector< KFParticle > &particles2, std::vector< KFParticle > &Particles, KFParticleSIMD &PrimVtx, const float *cuts=0, bool isPrimary=0, const int MotherPDG=0, bool isSameInputPart=0, std::vector< KFParticle > *vMotherPrim=0, std::vector< KFParticle > *vMotherSec=0, float *SecCuts=0, float massMotherPdg=0, float massMotherPdgSigma=0)
static void FindParticles(std::vector< CbmKFTrack > &vRTracks, std::vector< float > &ChiToPrimVtx, std::vector< L1FieldRegion > &vField, std::vector< KFParticle > &Particles, KFParticleSIMD &PrimVtx, const std::vector< int > &vTrackPDG, const float cuts[2][3]=DefaultCuts)
static void Find2DaughterDecay(std::vector< CbmKFTrack > &vTracks, const std::vector< L1FieldRegion > &vField, std::vector< KFParticle > &Particles, const int DaughterNegPDG, const int DaughterPosPDG, const int MotherPDG, std::vector< short > &idNeg, std::vector< short > &idPos, KFParticleSIMD &PrimVtx, const float *cuts=0, bool isPrimary=0, std::vector< float > *vMotherTopoChi2Ndf=0, const float *secCuts=0, const float massMotherPDG=0, const float massMotherPDGSigma=0, std::vector< KFParticle > *vMotherPrim=0, std::vector< KFParticle > *vMotherSec=0)
static void FindHyperons(int PDG, KFParticleSIMD vDaughters[2], std::vector< int > &daughterIds, std::vector< KFParticle > &vLambdaSec, std::vector< KFParticle > &vHyperon, KFParticleSIMD &PrimVtx, const float *cuts=0, int startIndex=0)
static void Find2DaughterDecay(std::vector< CbmKFTrack > &vTracks, const std::vector< L1FieldRegion > &vField, std::vector< KFParticle > &Particles, const int DaughterNegPDG, const int DaughterPosPDG, const int MotherPDG, std::vector< short > &idNeg, std::vector< short > &idPos, KFParticleSIMD &PrimVtx, const float *cuts, bool isPrimary, const float PtCut, const float Chi2PrimCut=-100.f, std::vector< float > *ChiToPrimVtx=0, const float *PCut=0)
static void FindDMesLambdac(std::vector< CbmKFTrack > &vTracks, const std::vector< L1FieldRegion > &vField, std::vector< KFParticle > &Particles, const int DaughterPDG[5], const int MotherPDG[8], std::vector< short > *idTrack[5], KFParticleSIMD &PrimVtx, const float cuts[8][8], std::vector< float > ChiToPrimVtx)