CMS 3D CMS Logo

PropagationMPlex.h
Go to the documentation of this file.
1 #ifndef RecoTracker_MkFitCore_src_PropagationMPlex_h
2 #define RecoTracker_MkFitCore_src_PropagationMPlex_h
3 
4 #include "Matrix.h"
5 
6 namespace mkfit {
7 
8  class PropagationFlags;
9 
10  inline void squashPhiMPlex(MPlexLV& par, const int N_proc) {
11 #pragma omp simd
12  for (int n = 0; n < NN; ++n) {
13  if (par(n, 4, 0) >= Const::PI)
14  par(n, 4, 0) -= Const::TwoPI;
15  if (par(n, 4, 0) < -Const::PI)
16  par(n, 4, 0) += Const::TwoPI;
17  }
18  }
19 
20  inline void squashPhiMPlexGeneral(MPlexLV& par, const int N_proc) {
21 #pragma omp simd
22  for (int n = 0; n < NN; ++n) {
23  par(n, 4, 0) -= std::floor(0.5f * Const::InvPI * (par(n, 4, 0) + Const::PI)) * Const::TwoPI;
24  }
25  }
26 
27  void propagateLineToRMPlex(const MPlexLS& psErr,
28  const MPlexLV& psPar,
29  const MPlexHS& msErr,
30  const MPlexHV& msPar,
31  MPlexLS& outErr,
32  MPlexLV& outPar,
33  const int N_proc);
34 
35  void propagateHelixToRMPlex(const MPlexLS& inErr,
36  const MPlexLV& inPar,
37  const MPlexQI& inChg,
38  const MPlexQF& msRad,
39  MPlexLS& outErr,
40  MPlexLV& outPar,
41  MPlexQI& outFailFlag,
42  const int N_proc,
43  const PropagationFlags& pflags,
44  const MPlexQI* noMatEffPtr = nullptr);
45 
46  void helixAtRFromIterativeCCSFullJac(const MPlexLV& inPar,
47  const MPlexQI& inChg,
48  const MPlexQF& msRad,
49  MPlexLV& outPar,
50  MPlexLL& errorProp,
51  MPlexQI& outFailFlag,
52  const int N_proc);
53 
54  void helixAtRFromIterativeCCS(const MPlexLV& inPar,
55  const MPlexQI& inChg,
56  const MPlexQF& msRad,
57  MPlexLV& outPar,
58  MPlexLL& errorProp,
59  MPlexQI& outFailFlag,
60  const int N_proc,
61  const PropagationFlags& pflags);
62 
63  void propagateHelixToZMPlex(const MPlexLS& inErr,
64  const MPlexLV& inPar,
65  const MPlexQI& inChg,
66  const MPlexQF& msZ,
67  MPlexLS& outErr,
68  MPlexLV& outPar,
69  MPlexQI& outFailFlag,
70  const int N_proc,
71  const PropagationFlags& pflags,
72  const MPlexQI* noMatEffPtr = nullptr);
73 
74  void helixAtZ(const MPlexLV& inPar,
75  const MPlexQI& inChg,
76  const MPlexQF& msZ,
77  MPlexLV& outPar,
78  MPlexLL& errorProp,
79  MPlexQI& outFailFlag,
80  const int N_proc,
81  const PropagationFlags& pflags);
82 
83  void applyMaterialEffects(const MPlexQF& hitsRl,
84  const MPlexQF& hitsXi,
85  const MPlexQF& propSign,
86  MPlexLS& outErr,
87  MPlexLV& outPar,
88  const int N_proc,
89  const bool isBarrel);
90 
91 } // end namespace mkfit
92 #endif
Matriplex::Matriplex< float, LL, LL, NN > MPlexLL
Definition: Matrix.h:48
void propagateHelixToRMPlex(const MPlexLS &inErr, const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLS &outErr, MPlexLV &outPar, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags, const MPlexQI *noMatEffPtr)
Matriplex::Matriplex< float, HH, 1, NN > MPlexHV
Definition: Matrix.h:53
void propagateLineToRMPlex(const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, const int N_proc)
Matriplex::Matriplex< float, LL, 1, NN > MPlexLV
Definition: Matrix.h:49
constexpr float TwoPI
Definition: Config.h:8
void squashPhiMPlex(MPlexLV &par, const int N_proc)
constexpr float PI
Definition: Config.h:7
void helixAtZ(const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msZ, MPlexLV &outPar, MPlexLL &errorProp, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags)
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
void helixAtRFromIterativeCCSFullJac(const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLV &outPar, MPlexLL &errorProp, const int N_proc)
double f[11][100]
Matriplex::Matriplex< int, 1, 1, NN > MPlexQI
Definition: Matrix.h:66
Matriplex::Matriplex< float, 1, 1, NN > MPlexQF
Definition: Matrix.h:65
void squashPhiMPlexGeneral(MPlexLV &par, const int N_proc)
void applyMaterialEffects(const MPlexQF &hitsRl, const MPlexQF &hitsXi, const MPlexQF &propSign, MPlexLS &outErr, MPlexLV &outPar, const int N_proc, const bool isBarrel)
Matriplex::MatriplexSym< float, HH, NN > MPlexHS
Definition: Matrix.h:54
void propagateHelixToZMPlex(const MPlexLS &inErr, const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msZ, MPlexLS &outErr, MPlexLV &outPar, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags, const MPlexQI *noMatEffPtr)
Matriplex::MatriplexSym< float, LL, NN > MPlexLS
Definition: Matrix.h:50
void helixAtRFromIterativeCCS(const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLV &outPar, MPlexLL &errorProp, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags)
constexpr float InvPI
Definition: Config.h:12