13 #ifndef KFParticleFinder_h 14 #define KFParticleFinder_h 22 #ifdef NonhomogeniousField 44 static void FindParticles(std::vector<KFPTrack> &vRTracks, std::vector<float> &ChiToPrimVtx,
45 #ifdef NonhomogeniousField
46 std::vector<L1FieldRegion> &vField,
48 std::vector<KFParticle> &Particles,
KFParticleSIMD &PrimVtx,
const std::vector<int> &vTrackPDG,
const float cuts[2][3] = DefaultCuts);
54 #ifdef NonhomogeniousField
55 const std::vector<L1FieldRegion> &vField,
57 std::vector<KFParticle> &Particles,
const int DaughterNegPDG,
const int DaughterPosPDG,
const int MotherPDG, std::vector<short> &idNeg,
58 std::vector<short> &idPos,
KFParticleSIMD &PrimVtx,
const float *cuts =
nullptr,
bool isPrimary = 0,
59 std::vector<float> *vMotherTopoChi2Ndf =
nullptr,
const float *secCuts =
nullptr,
const float massMotherPDG = 0,
60 const float massMotherPDGSigma = 0, std::vector<KFParticle> *vMotherPrim =
nullptr, std::vector<KFParticle> *vMotherSec =
nullptr);
63 #ifdef NonhomogeniousField
64 const std::vector<L1FieldRegion> &vField,
66 std::vector<KFParticle> &Particles,
const int DaughterNegPDG,
const int DaughterPosPDG,
const int MotherPDG, std::vector<short> &idNeg,
67 std::vector<short> &idPos,
KFParticleSIMD &PrimVtx,
const float *cuts,
bool isPrimary,
const float PtCut,
const float Chi2PrimCut = -100.
f,
68 std::vector<float> *ChiToPrimVtx =
nullptr,
const float *PCut =
nullptr);
70 static void FindTrackV0Decay(
const int MotherPDG, std::vector<KFParticle> &Particles, std::vector<KFParticle> &vV0, std::vector<KFPTrack> &vTracks,
71 #ifdef NonhomogeniousField
72 const std::vector<L1FieldRegion> &field,
74 const int DaughterPDG, std::vector<short> &idTrack,
KFParticleSIMD &PrimVtx,
const float *cuts =
nullptr,
bool isPrimary = 0,
75 std::vector<float> *ChiToPrimVtx =
nullptr, std::vector<KFParticle> *vHyperonPrim =
nullptr,
float hyperonPrimMass = 0,
float hyperonPrimMassErr = 0,
76 std::vector<KFParticle> *vHyperonSec =
nullptr);
78 static void FindHyperons(
int PDG,
KFParticleSIMD vDaughters[2], std::vector<int> &daughterIds, std::vector<KFParticle> &vLambdaSec, std::vector<KFParticle> &vHyperon,
79 KFParticleSIMD &PrimVtx,
const float *cuts =
nullptr,
int startIndex = 0);
82 #ifdef NonhomogeniousField
83 const std::vector<L1FieldRegion> &vField,
85 std::vector<KFParticle> &Particles,
86 const int DaughterPDG[5],
87 const int MotherPDG[8],
88 std::vector<short> *idTrack[5],
89 KFParticleSIMD &PrimVtx,
const float cuts[8][8], std::vector<float> ChiToPrimVtx);
92 #ifdef NonhomogeniousField
93 const std::vector<L1FieldRegion> &vField,
95 std::vector<KFParticle> &Particles,
KFParticle &part,
const int DaughterPDG,
const int MotherPDG, std::vector<short> &
id,
const float *cuts,
96 const unsigned short startIndex = 0,
const bool IsSamePart = 0);
101 static const float DefaultCuts[2][3];
static void SelectParticleCandidates(std::vector< KFParticle > &Particles, std::vector< KFParticle > &vCandidates, KFParticleSIMD &PrimVtx, const float cuts[5])
static void FindParticles(std::vector< KFPTrack > &vRTracks, std::vector< float > &ChiToPrimVtx, std::vector< KFParticle > &Particles, KFParticleSIMD &PrimVtx, const std::vector< int > &vTrackPDG, const float cuts[2][3]=DefaultCuts)
static void FindDMesLambdac(std::vector< KFPTrack > &vTracks, 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)
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< KFPTrack > &vTracks, const int DaughterPDG, std::vector< short > &idTrack, KFParticleSIMD &PrimVtx, const float *cuts=nullptr, bool isPrimary=0, std::vector< float > *ChiToPrimVtx=nullptr, std::vector< KFParticle > *vHyperonPrim=nullptr, float hyperonPrimMass=0, float hyperonPrimMassErr=0, std::vector< KFParticle > *vHyperonSec=nullptr)
static fvec GetChi2BetweenParticles(KFParticleSIMD &p1, KFParticleSIMD &p2)
static void Find2DaughterDecay(std::vector< KFPTrack > &vTracks, 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=nullptr, bool isPrimary=0, std::vector< float > *vMotherTopoChi2Ndf=nullptr, const float *secCuts=nullptr, const float massMotherPDG=0, const float massMotherPDGSigma=0, std::vector< KFParticle > *vMotherPrim=nullptr, std::vector< KFParticle > *vMotherSec=nullptr)
static void CombineTrackPart(std::vector< KFPTrack > &vTracks, 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 FindHyperons(int PDG, KFParticleSIMD vDaughters[2], std::vector< int > &daughterIds, std::vector< KFParticle > &vLambdaSec, std::vector< KFParticle > &vHyperon, KFParticleSIMD &PrimVtx, const float *cuts=nullptr, int startIndex=0)