PandaRoot
KFParticleFinder.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 #ifndef KFParticleFinder_h
14 #define KFParticleFinder_h
15 
16 #include "KFParticle.h"
17 #include "KFParticleSIMD.h"
18 #include "KFPTrack.h"
19 
20 #include <vector>
21 
22 #ifdef NonhomogeniousField
23 class L1FieldRegion;
24 #endif
25 class KFParticleSIMD;
26 
28  public:
31 
43 
44  static void FindParticles(std::vector<KFPTrack> &vRTracks, std::vector<float> &ChiToPrimVtx,
45 #ifdef NonhomogeniousField
46  std::vector<L1FieldRegion> &vField,
47 #endif
48  std::vector<KFParticle> &Particles, KFParticleSIMD &PrimVtx, const std::vector<int> &vTrackPDG, const float cuts[2][3] = DefaultCuts);
49 
50  static void ExtrapolateToPV(std::vector<KFParticle> &vParticles, KFParticleSIMD &PrimVtx);
52 
53  static void Find2DaughterDecay(std::vector<KFPTrack> &vTracks,
54 #ifdef NonhomogeniousField
55  const std::vector<L1FieldRegion> &vField,
56 #endif
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);
61 
62  static void Find2DaughterDecay(std::vector<KFPTrack> &vTracks,
63 #ifdef NonhomogeniousField
64  const std::vector<L1FieldRegion> &vField,
65 #endif
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);
69 
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,
73 #endif
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);
77 
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);
80 
81  static void FindDMesLambdac(std::vector<KFPTrack> &vTracks,
82 #ifdef NonhomogeniousField
83  const std::vector<L1FieldRegion> &vField,
84 #endif
85  std::vector<KFParticle> &Particles,
86  const int DaughterPDG[5], // pi, K_b, pi_b, K, p
87  const int MotherPDG[8],
88  std::vector<short> *idTrack[5], // pi, K_b, pi_b, K, p
89  KFParticleSIMD &PrimVtx, const float cuts[8][8], std::vector<float> ChiToPrimVtx);
90 
91  static void CombineTrackPart(std::vector<KFPTrack> &vTracks,
92 #ifdef NonhomogeniousField
93  const std::vector<L1FieldRegion> &vField,
94 #endif
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);
97 
98  static void SelectParticleCandidates(std::vector<KFParticle> &Particles, std::vector<KFParticle> &vCandidates, KFParticleSIMD &PrimVtx, const float cuts[5]);
99 
100  private:
101  static const float DefaultCuts[2][3];
102 };
103 
104 #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:32
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)