1 #ifndef KFParticleFinder_h 2 #define KFParticleFinder_h 10 #ifdef NonhomogeniousField 32 static void FindParticles(std::vector<KFPTrack> &vRTracks, std::vector<float> &ChiToPrimVtx,
33 #ifdef NonhomogeniousField
34 std::vector<L1FieldRegion> &vField,
36 std::vector<KFParticle> &Particles,
KFParticleSIMD &PrimVtx,
const std::vector<int> &vTrackPDG,
const float cuts[2][3] = DefaultCuts);
42 #ifdef NonhomogeniousField
43 const std::vector<L1FieldRegion> &vField,
45 std::vector<KFParticle> &Particles,
const int DaughterNegPDG,
const int DaughterPosPDG,
const int MotherPDG, std::vector<short> &idNeg,
46 std::vector<short> &idPos,
KFParticleSIMD &PrimVtx,
const float *cuts =
nullptr,
bool isPrimary = 0,
47 std::vector<float> *vMotherTopoChi2Ndf =
nullptr,
const float *secCuts =
nullptr,
const float massMotherPDG = 0,
48 const float massMotherPDGSigma = 0, std::vector<KFParticle> *vMotherPrim =
nullptr, std::vector<KFParticle> *vMotherSec =
nullptr);
51 #ifdef NonhomogeniousField
52 const std::vector<L1FieldRegion> &vField,
54 std::vector<KFParticle> &Particles,
const int DaughterNegPDG,
const int DaughterPosPDG,
const int MotherPDG, std::vector<short> &idNeg,
55 std::vector<short> &idPos,
KFParticleSIMD &PrimVtx,
const float *cuts,
bool isPrimary,
const float PtCut,
const float Chi2PrimCut = -100.
f,
56 std::vector<float> *ChiToPrimVtx =
nullptr,
const float *PCut =
nullptr);
58 static void FindTrackV0Decay(
const int MotherPDG, std::vector<KFParticle> &Particles, std::vector<KFParticle> &vV0, std::vector<KFPTrack> &vTracks,
59 #ifdef NonhomogeniousField
60 const std::vector<L1FieldRegion> &field,
62 const int DaughterPDG, std::vector<short> &idTrack,
KFParticleSIMD &PrimVtx,
const float *cuts =
nullptr,
bool isPrimary = 0,
63 std::vector<float> *ChiToPrimVtx =
nullptr, std::vector<KFParticle> *vHyperonPrim =
nullptr,
float hyperonPrimMass = 0,
float hyperonPrimMassErr = 0,
64 std::vector<KFParticle> *vHyperonSec =
nullptr);
66 static void FindHyperons(
int PDG,
KFParticleSIMD vDaughters[2], std::vector<int> &daughterIds, std::vector<KFParticle> &vLambdaSec, std::vector<KFParticle> &vHyperon,
67 KFParticleSIMD &PrimVtx,
const float *cuts =
nullptr,
int startIndex = 0);
70 #ifdef NonhomogeniousField
71 const std::vector<L1FieldRegion> &vField,
73 std::vector<KFParticle> &Particles,
74 const int DaughterPDG[5],
75 const int MotherPDG[8],
76 std::vector<short> *idTrack[5],
77 KFParticleSIMD &PrimVtx,
const float cuts[8][8], std::vector<float> ChiToPrimVtx);
80 #ifdef NonhomogeniousField
81 const std::vector<L1FieldRegion> &vField,
83 std::vector<KFParticle> &Particles,
KFParticle &part,
const int DaughterPDG,
const int MotherPDG, std::vector<short> &
id,
const float *cuts,
84 const unsigned short startIndex = 0,
const bool IsSamePart = 0);
89 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)