Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2022-02-21 23:14:20

0001 #ifndef RecoTracker_MkFitCore_src_PropagationMPlex_h
0002 #define RecoTracker_MkFitCore_src_PropagationMPlex_h
0003 
0004 #include "Matrix.h"
0005 
0006 namespace mkfit {
0007 
0008   inline void squashPhiMPlex(MPlexLV& par, const int N_proc) {
0009 #pragma omp simd
0010     for (int n = 0; n < NN; ++n) {
0011       if (par(n, 4, 0) >= Const::PI)
0012         par(n, 4, 0) -= Const::TwoPI;
0013       if (par(n, 4, 0) < -Const::PI)
0014         par(n, 4, 0) += Const::TwoPI;
0015     }
0016   }
0017 
0018   inline void squashPhiMPlexGeneral(MPlexLV& par, const int N_proc) {
0019 #pragma omp simd
0020     for (int n = 0; n < NN; ++n) {
0021       par(n, 4, 0) -= std::floor(0.5f * Const::InvPI * (par(n, 4, 0) + Const::PI)) * Const::TwoPI;
0022     }
0023   }
0024 
0025   void propagateLineToRMPlex(const MPlexLS& psErr,
0026                              const MPlexLV& psPar,
0027                              const MPlexHS& msErr,
0028                              const MPlexHV& msPar,
0029                              MPlexLS& outErr,
0030                              MPlexLV& outPar,
0031                              const int N_proc);
0032 
0033   void propagateHelixToRMPlex(const MPlexLS& inErr,
0034                               const MPlexLV& inPar,
0035                               const MPlexQI& inChg,
0036                               const MPlexQF& msRad,
0037                               MPlexLS& outErr,
0038                               MPlexLV& outPar,
0039                               const int N_proc,
0040                               const PropagationFlags pflags,
0041                               const MPlexQI* noMatEffPtr = nullptr);
0042 
0043   void helixAtRFromIterativeCCSFullJac(const MPlexLV& inPar,
0044                                        const MPlexQI& inChg,
0045                                        const MPlexQF& msRad,
0046                                        MPlexLV& outPar,
0047                                        MPlexLL& errorProp,
0048                                        const int N_proc);
0049 
0050   void helixAtRFromIterativeCCS(const MPlexLV& inPar,
0051                                 const MPlexQI& inChg,
0052                                 const MPlexQF& msRad,
0053                                 MPlexLV& outPar,
0054                                 MPlexLL& errorProp,
0055                                 MPlexQI& outFailFlag,
0056                                 const int N_proc,
0057                                 const PropagationFlags pflags);
0058 
0059   void propagateHelixToZMPlex(const MPlexLS& inErr,
0060                               const MPlexLV& inPar,
0061                               const MPlexQI& inChg,
0062                               const MPlexQF& msZ,
0063                               MPlexLS& outErr,
0064                               MPlexLV& outPar,
0065                               const int N_proc,
0066                               const PropagationFlags pflags,
0067                               const MPlexQI* noMatEffPtr = nullptr);
0068 
0069   void helixAtZ(const MPlexLV& inPar,
0070                 const MPlexQI& inChg,
0071                 const MPlexQF& msZ,
0072                 MPlexLV& outPar,
0073                 MPlexLL& errorProp,
0074                 const int N_proc,
0075                 const PropagationFlags pflags);
0076 
0077   void applyMaterialEffects(const MPlexQF& hitsRl,
0078                             const MPlexQF& hitsXi,
0079                             const MPlexQF& propSign,
0080                             MPlexLS& outErr,
0081                             MPlexLV& outPar,
0082                             const int N_proc,
0083                             const bool isBarrel);
0084 
0085 }  // end namespace mkfit
0086 #endif