PandaRoot
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 "KFPTrack.h"
7 
8 #include <vector>
9 
10 #ifdef NonhomogeniousField
11 class L1FieldRegion;
12 #endif
13 class KFParticleSIMD;
14 
16  public:
19 
31 
32  static void FindParticles(std::vector<KFPTrack> &vRTracks, std::vector<float> &ChiToPrimVtx,
33 #ifdef NonhomogeniousField
34  std::vector<L1FieldRegion> &vField,
35 #endif
36  std::vector<KFParticle> &Particles, KFParticleSIMD &PrimVtx, const std::vector<int> &vTrackPDG, const float cuts[2][3] = DefaultCuts);
37 
38  static void ExtrapolateToPV(std::vector<KFParticle> &vParticles, KFParticleSIMD &PrimVtx);
40 
41  static void Find2DaughterDecay(std::vector<KFPTrack> &vTracks,
42 #ifdef NonhomogeniousField
43  const std::vector<L1FieldRegion> &vField,
44 #endif
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);
49 
50  static void Find2DaughterDecay(std::vector<KFPTrack> &vTracks,
51 #ifdef NonhomogeniousField
52  const std::vector<L1FieldRegion> &vField,
53 #endif
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);
57 
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,
61 #endif
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);
65 
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);
68 
69  static void FindDMesLambdac(std::vector<KFPTrack> &vTracks,
70 #ifdef NonhomogeniousField
71  const std::vector<L1FieldRegion> &vField,
72 #endif
73  std::vector<KFParticle> &Particles,
74  const int DaughterPDG[5], // pi, K_b, pi_b, K, p
75  const int MotherPDG[8],
76  std::vector<short> *idTrack[5], // pi, K_b, pi_b, K, p
77  KFParticleSIMD &PrimVtx, const float cuts[8][8], std::vector<float> ChiToPrimVtx);
78 
79  static void CombineTrackPart(std::vector<KFPTrack> &vTracks,
80 #ifdef NonhomogeniousField
81  const std::vector<L1FieldRegion> &vField,
82 #endif
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);
85 
86  static void SelectParticleCandidates(std::vector<KFParticle> &Particles, std::vector<KFParticle> &vCandidates, KFParticleSIMD &PrimVtx, const float cuts[5]);
87 
88  private:
89  static const float DefaultCuts[2][3];
90 };
91 
92 #endif /* !KFParticleFinder_h */
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)
float f
Definition: P4_F32vec4.h:20
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)