CMS 3D CMS Logo

Namespaces | Classes | Typedefs | Enumerations | Functions | Variables
mkfit Namespace Reference

Namespaces

 Config
 
 Const
 
 StdSeq
 

Classes

struct  axis
 
struct  axis_base
 
struct  axis_pow2
 
struct  axis_pow2_base
 
struct  axis_pow2_u1
 
struct  BeamSpot
 
struct  binnor
 
class  CandCloner
 
class  CcAlloc
 
class  CcPool
 
class  CombCandidate
 
class  ConfigJson
 
class  ConfigJsonPatcher
 
struct  DataFile
 
struct  DataFileHeader
 
struct  DeadRegion
 
class  Event
 
class  EventOfCombCandidates
 
class  EventOfHits
 
struct  ExecutionContext
 
class  FindingFoos
 
struct  FitVal
 
class  Hit
 
struct  HitMatch
 
struct  HitMatchPair
 
struct  HitOnTrack
 
struct  HoTNode
 
struct  IdxChi2List
 
class  IterationConfig
 
class  IterationLayerConfig
 
struct  IterationMaskIfc
 
struct  IterationMaskIfcBase
 
struct  IterationMaskIfcCmssw
 
class  IterationParams
 
class  IterationSeedPartition
 
class  IterationsInfo
 
struct  LayerControl
 
class  LayerInfo
 
class  LayerNumberConverter
 
class  LayerOfHits
 
class  MatriplexErrParPackerSlurpIn
 
class  MatriplexPackerSlurpIn
 
class  MatriplexTrackPackerPlexify
 
struct  MCHitInfo
 
struct  MeasurementState
 
class  MkBase
 
class  MkBuilder
 
class  MkBuilderWrapper
 
class  MkFinder
 
class  MkFitter
 
class  MkJob
 
struct  ModuleInfo
 
class  Pool
 
class  PropagationConfig
 
class  PropagationFlags
 
class  radix_sort
 
class  rectvec
 
struct  ReducedTrack
 
class  Shell
 
struct  sortTracksByPhiStruct
 
class  SteeringParams
 
class  Track
 
class  TrackBase
 
class  TrackCand
 
class  TrackerInfo
 
class  TrackExtra
 
struct  TrackState
 
class  TTreeValidation
 
struct  UpdateIndices
 
class  Validation
 
struct  WSR_Result
 

Typedefs

using clean_duplicates_cf = void(TrackVec &, const IterationConfig &)
 
using clean_duplicates_func = std::function< clean_duplicates_cf >
 
using clean_seeds_cf = int(TrackVec &, const IterationConfig &, const BeamSpot &)
 
using clean_seeds_func = std::function< clean_seeds_cf >
 
typedef std::map< std::string, std::pair< cleanOpts, std::string > > cleanOptsMap
 
typedef std::vector< DeadRegionDeadVec
 
typedef std::vector< EventEventVec
 
using filter_candidates_cf = bool(const TrackCand &, const MkJob &)
 
using filter_candidates_func = std::function< filter_candidates_cf >
 
typedef std::map< int, FitValFitValLayMap
 
typedef std::vector< std::pair< int, float > > FltLayerPairVec
 
typedef std::vector< int > HitIdxVec
 
typedef std::map< int, std::vector< int > > HitLayerMap
 
using HitVec = std::vector< Hit >
 
typedef std::vector< HitOnTrackHoTVec
 
typedef std::pair< int, float > idchi2Pair
 
typedef std::vector< idchi2Pairidchi2PairVec
 
typedef std::map< int, std::map< int, std::vector< int > > > LayIdxIDVecMapMap
 
typedef std::map< std::string, std::pair< matchOpts, std::string > > matchOptsMap
 
using MatriplexHitPacker = MatriplexErrParPackerSlurpIn< Hit, float >
 
using MatriplexHoTPacker = MatriplexPackerSlurpIn< HitOnTrack >
 
using MatriplexTrackPacker = MatriplexErrParPackerSlurpIn< TrackBase, float >
 
typedef std::vector< MCHitInfoMCHitInfoVec
 
typedef Matriplex::Matriplex< float, 2, 2, NNMPlex22
 
typedef Matriplex::MatriplexSym< float, 2, NNMPlex2S
 
typedef Matriplex::Matriplex< float, 2, 1, NNMPlex2V
 
typedef Matriplex::Matriplex< float, HH, HH, NNMPlexHH
 
using MPlexHitIdx = Matriplex::Matriplex< int, MPlexHitIdxMax, 1, NN >
 
typedef Matriplex::Matriplex< float, HH, LL, NNMPlexHL
 
typedef Matriplex::MatriplexSym< float, HH, NNMPlexHS
 
typedef Matriplex::Matriplex< float, HH, 1, NNMPlexHV
 
typedef Matriplex::Matriplex< float, LL, 2, NNMPlexL2
 
typedef Matriplex::Matriplex< float, LL, HH, NNMPlexLH
 
typedef Matriplex::Matriplex< float, LL, LL, NNMPlexLL
 
typedef Matriplex::MatriplexSym< float, LL, NNMPlexLS
 
typedef Matriplex::Matriplex< float, LL, 1, NNMPlexLV
 
typedef Matriplex::Matriplex< bool, 1, 1, NNMPlexQB
 
typedef Matriplex::Matriplex< float, 1, 1, NNMPlexQF
 
using MPlexQHoT = Matriplex::Matriplex< HitOnTrack, 1, 1, NN >
 
typedef Matriplex::Matriplex< int, 1, 1, NNMPlexQI
 
typedef Matriplex::Matriplex< unsigned int, 1, 1, NNMPlexQUI
 
typedef std::array< int, 2 > PairIdx
 
typedef std::vector< PairIdxPairIdxVec
 
using partition_seeds_cf = void(const TrackerInfo &, const TrackVec &, const EventOfHits &, IterationSeedPartition &)
 
using partition_seeds_func = std::function< partition_seeds_cf >
 
typedef std::vector< ReducedTrackRedTrackVec
 
typedef std::map< std::string, std::pair< seedOpts, std::string > > seedOptsMap
 
typedef std::pair< int, int > SimTkIDInfo
 
typedef ROOT::Math::SMatrix< float, 2 > SMatrix22
 
typedef ROOT::Math::SMatrix< float, 2, 6 > SMatrix26
 
typedef ROOT::Math::SMatrix< float, 3 > SMatrix33
 
typedef ROOT::Math::SMatrix< float, 3, 6 > SMatrix36
 
typedef ROOT::Math::SMatrix< float, 6, 2 > SMatrix62
 
typedef ROOT::Math::SMatrix< float, 6, 3 > SMatrix63
 
typedef ROOT::Math::SMatrix< float, 6 > SMatrix66
 
typedef ROOT::Math::SMatrix< float, 2, 2, ROOT::Math::MatRepSym< float, 2 > > SMatrixSym22
 
typedef ROOT::Math::SMatrix< float, 3, 3, ROOT::Math::MatRepSym< float, 3 > > SMatrixSym33
 
typedef ROOT::Math::SMatrix< float, 6, 6, ROOT::Math::MatRepSym< float, 6 > > SMatrixSym66
 
typedef ROOT::Math::SVector< float, 2 > SVector2
 
typedef ROOT::Math::SVector< float, 3 > SVector3
 
typedef ROOT::Math::SVector< float, 6 > SVector6
 
typedef std::unordered_map< int, FitValLayMapTkIDtoFitValLayMapMap
 
typedef std::unordered_map< int, int > TkIDToTkIDMap
 
typedef std::unordered_map< int, std::vector< int > > TkIDToTkIDVecMap
 
typedef std::unordered_map< int, TSLayerPairVecTkIDToTSLayerPairVecMap
 
typedef std::unordered_map< int, TrackStateTkIDToTSMap
 
typedef std::vector< TSVecTkIDToTSVecVec
 
using track_score_cf = float(const int nfoundhits, const int ntailholes, const int noverlaphits, const int nmisshits, const float chi2, const float pt, const bool inFindCandidates)
 
using track_score_func = std::function< track_score_cf >
 
typedef std::vector< TrackExtraTrackExtraVec
 
using TrackVec = std::vector< Track >
 
typedef std::vector< TrackVecTrackVecVec
 
typedef std::array< int, 3 > TripletIdx
 
typedef std::vector< TripletIdxTripletIdxVec
 
typedef std::map< int, std::unordered_set< int > > TrkIDLaySetMap
 
typedef std::vector< std::pair< int, TrackState > > TSLayerPairVec
 
typedef std::vector< TrackStateTSVec
 

Enumerations

enum  cleanOpts { noCleaning, cleanSeedsN2, cleanSeedsPure, cleanSeedsBadLabel }
 
enum  KalmanFilterOperation { KFO_Calculate_Chi2 = 1, KFO_Update_Params = 2, KFO_Local_Cov = 4 }
 
enum  matchOpts { trkParamBased, hitBased, labelBased }
 
enum  PropagationFlagsEnum { PF_none = 0, PF_use_param_b_field = 0x1, PF_apply_material = 0x2, PF_copy_input_state_on_fail = 0x4 }
 
enum  seedOpts { simSeeds, cmsswSeeds, findSeeds }
 
enum  TkLayout { TkLayout::phase0 = 0, TkLayout::phase1 = 1, TkLayout::phase2 = 2 }
 
enum  WithinSensitiveRegion_e {
  WSR_Undef = -1, WSR_Inside = 0, WSR_Edge, WSR_Outside,
  WSR_Failed
}
 

Functions

void applyMaterialEffects (const MPlexQF &hitsRl, const MPlexQF &hitsXi, const MPlexQF &propSign, MPlexLS &outErr, MPlexLV &outPar, const int N_proc, const bool isBarrel)
 
int calculateCharge (const Hit &hit0, const Hit &hit1, const Hit &hit2)
 
int calculateCharge (const float hit0_x, const float hit0_y, const float hit1_x, const float hit1_y, const float hit2_x, const float hit2_y)
 
float cdist (float a)
 
void CFMap (const MPlexHH &A, const MPlexHV &B, MPlexHV &C)
 
template<typename Vector , typename Matrix >
float computeHelixChi2 (const Vector &simV, const Vector &recoV, const Matrix &recoM, const bool diagOnly=false)
 
void conformalFitMPlex (bool fitting, MPlexQI seedID, MPlexLS &outErr, MPlexLV &outPar, const MPlexHV &msPar0, const MPlexHV &msPar1, const MPlexHV &msPar2)
 
template<typename Traits , typename HitCollection >
edm::ProductID convertHits (const Traits &traits, const HitCollection &hits, mkfit::HitVec &mkFitHits, std::vector< TrackingRecHit const *> &clusterIndexToHit, std::vector< float > &clusterChargeVec, const TrackerTopology &ttopo, const TransientTrackingRecHitBuilder &ttrhBuilder, const MkFitGeometry &mkFitGeom)
 
template<typename T >
T cube (T x)
 
template<typename Matrix >
void diagonalOnly (Matrix &m)
 
double dtime ()
 
template<typename Matrix >
void dumpMatrix (Matrix m)
 
void execTrackerInfoCreatorPlugin (const std::string &base, TrackerInfo &ti, IterationsInfo &ii, bool verbose)
 
void findSeedsByRoadSearch (TripletIdxConVec &seed_idcs, std::vector< LayerOfHits > &evt_lay_hits, int lay1_size, Event *&ev)
 
void from_json (const nlohmann::json &nlohmann_json_j, mkfit::LayerControl &nlohmann_json_t)
 
void from_json (const nlohmann::ordered_json &nlohmann_json_j, mkfit::LayerControl &nlohmann_json_t)
 
void from_json (const nlohmann::json &nlohmann_json_j, mkfit::SteeringParams &nlohmann_json_t)
 
void from_json (const nlohmann::ordered_json &nlohmann_json_j, mkfit::SteeringParams &nlohmann_json_t)
 
void from_json (const nlohmann::json &nlohmann_json_j, mkfit::IterationLayerConfig &nlohmann_json_t)
 
void from_json (const nlohmann::ordered_json &nlohmann_json_j, mkfit::IterationLayerConfig &nlohmann_json_t)
 
void from_json (const nlohmann::json &nlohmann_json_j, mkfit::IterationParams &nlohmann_json_t)
 
void from_json (const nlohmann::ordered_json &nlohmann_json_j, mkfit::IterationParams &nlohmann_json_t)
 
void from_json (const nlohmann::json &nlohmann_json_j, mkfit::IterationConfig &nlohmann_json_t)
 
void from_json (const nlohmann::ordered_json &nlohmann_json_j, mkfit::IterationConfig &nlohmann_json_t)
 
void from_json (const nlohmann::json &nlohmann_json_j, mkfit::IterationsInfo &nlohmann_json_t)
 
void from_json (const nlohmann::ordered_json &nlohmann_json_j, mkfit::IterationsInfo &nlohmann_json_t)
 
float getEta (float r, float z)
 
float getEta (float theta)
 
float getEta (float x, float y, float z)
 
float getEtaErr2 (float x, float y, float z, float exx, float eyy, float ezz, float exy, float exz, float eyz)
 
float getHypot (float x, float y)
 
float getInvRad2 (float x, float y)
 
float getInvRadErr2 (float x, float y, float exx, float eyy, float exy)
 
int getMatchBin (const float pt)
 
float getPhi (float x, float y)
 
float getPhiErr2 (float x, float y, float exx, float eyy, float exy)
 
float getPxPxErr2 (float ipt, float phi, float vipt, float vphi)
 
float getPyPyErr2 (float ipt, float phi, float vipt, float vphi)
 
float getPzPzErr2 (float ipt, float theta, float vipt, float vtheta)
 
float getRad2 (float x, float y)
 
float getRadErr2 (float x, float y, float exx, float eyy, float exy)
 
float getScoreCand (const track_score_func &score_func, const TrackCand &cand1, bool penalizeTailMissHits=false, bool inFindCandidates=false)
 
float getScoreCand (const track_score_func &score_func, const Track &cand1, bool penalizeTailMissHits=false, bool inFindCandidates=false)
 
float getScoreStruct (const track_score_func &score_func, const IdxChi2List &cand1)
 
float getScoreWorstPossible ()
 
float getTheta (float r, float z)
 
float getThetaErr2 (float x, float y, float z, float exx, float eyy, float ezz, float exy, float exz, float eyz)
 
void helixAtRFromIterativeCCS (const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLV &outPar, MPlexLL &errorProp, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags)
 
void helixAtRFromIterativeCCSFullJac (const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLV &outPar, MPlexLL &errorProp, MPlexQI &outFailFlag, const int N_proc)
 
void helixAtRFromIterativeCCSFullJac (const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLV &outPar, MPlexLL &errorProp, const int N_proc)
 
void helixAtZ (const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msZ, MPlexLV &outPar, MPlexLL &errorProp, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags)
 
float hipo (float x, float y)
 
float hipo_sqr (float x, float y)
 
void intersectThirdLayer (const float a, const float b, const float hit1_x, const float hit1_y, float &lay2_x, float &lay2_y)
 
constexpr bool isFinite (float x)
 
bool isStripQCompatible (int itrack, bool isBarrel, const MPlexLS &pErr, const MPlexLV &pPar, const MPlexHS &msErr, const MPlexHV &msPar)
 
void kalmanComputeChi2 (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexQI &inChg, const MPlexHS &msErr, const MPlexHV &msPar, MPlexQF &outChi2, const int N_proc)
 
void kalmanComputeChi2Endcap (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexQI &inChg, const MPlexHS &msErr, const MPlexHV &msPar, MPlexQF &outChi2, const int N_proc)
 
void kalmanOperation (const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)
 
void kalmanOperationEndcap (const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)
 
void kalmanPropagateAndComputeChi2 (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexQI &inChg, const MPlexHS &msErr, const MPlexHV &msPar, MPlexQF &outChi2, MPlexLV &propPar, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &propFlags, const bool propToHit)
 
void kalmanPropagateAndComputeChi2Endcap (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexQI &inChg, const MPlexHS &msErr, const MPlexHV &msPar, MPlexQF &outChi2, MPlexLV &propPar, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &propFlags, const bool propToHit)
 
void kalmanPropagateAndUpdate (const MPlexLS &psErr, const MPlexLV &psPar, MPlexQI &Chg, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &propFlags, const bool propToHit)
 
void kalmanPropagateAndUpdateEndcap (const MPlexLS &psErr, const MPlexLV &psPar, MPlexQI &Chg, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &propFlags, const bool propToHit)
 
void kalmanUpdate (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, const int N_proc)
 
void kalmanUpdateEndcap (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, const int N_proc)
 
template<class T , class U >
bool operator== (const CcAlloc< T > &a, const CcAlloc< U > &b)
 
bool passStripChargePCMfromTrack (int itrack, bool isBarrel, unsigned int pcm, unsigned int pcmMin, const MPlexLV &pPar, const MPlexHS &msErr)
 
void print (std::string_view label, const MeasurementState &s)
 
void print (const TrackState &s)
 
void print (std::string pfx, int itrack, const Track &trk, bool print_hits=false)
 
void print (std::string pfx, const TrackState &s)
 
void print (std::string pfx, int itrack, const Track &trk, const Event &ev)
 
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)
 
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)
 
void propagateLineToRMPlex (const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, const int N_proc)
 
void run_OneIteration (const TrackerInfo &trackerInfo, const IterationConfig &itconf, const EventOfHits &eoh, const std::vector< const std::vector< bool > *> &hit_masks, MkBuilder &builder, TrackVec &seeds, TrackVec &out_tracks, bool do_seed_clean, bool do_backward_fit, bool do_remove_duplicates)
 
std::vector< double > runBtpCe_MultiIter (Event &ev, const EventOfHits &eoh, MkBuilder &builder, int n)
 
double runBuildingTestPlexBestHit (Event &ev, const EventOfHits &eoh, MkBuilder &builder)
 
double runBuildingTestPlexCloneEngine (Event &ev, const EventOfHits &eoh, MkBuilder &builder)
 
void runBuildingTestPlexDumbCMSSW (Event &ev, const EventOfHits &eoh, MkBuilder &builder)
 
double runBuildingTestPlexStandard (Event &ev, const EventOfHits &eoh, MkBuilder &builder)
 
double runFittingTestPlex (Event &ev, std::vector< Track > &rectracks)
 
void sincos4 (const float x, float &sin, float &cos)
 
bool sortByEta (const Hit &hit1, const Hit &hit2)
 
bool sortByHitsChi2 (const std::pair< Track, TrackState > &cand1, const std::pair< Track, TrackState > &cand2)
 
bool sortByHitsChi2 (const Track &cand1, const Track &cand2)
 
bool sortByPhi (const Hit &hit1, const Hit &hit2)
 
bool sortByScoreCand (const Track &cand1, const Track &cand2)
 
bool sortByScoreStruct (const IdxChi2List &cand1, const IdxChi2List &cand2)
 
bool sortByScoreTrackCand (const TrackCand &cand1, const TrackCand &cand2)
 
bool sortByZ (const Hit &hit1, const Hit &hit2)
 
bool sortIDsByChi2 (const idchi2Pair &cand1, const idchi2Pair &cand2)
 
bool sortTracksByEta (const Track &track1, const Track &track2)
 
bool sortTracksByPhi (const Track &track1, const Track &track2)
 
template<typename T >
T sqr (T x)
 
float squashPhiGeneral (float phi)
 
template<typename Vector >
void squashPhiGeneral (Vector &v)
 
float squashPhiMinimal (float phi)
 
void squashPhiMPlex (MPlexLV &par, const int N_proc)
 
void squashPhiMPlexGeneral (MPlexLV &par, const int N_proc)
 
void to_json (nlohmann::ordered_json &nlohmann_json_j, const mkfit::LayerControl &nlohmann_json_t)
 
void to_json (nlohmann::json &nlohmann_json_j, const mkfit::LayerControl &nlohmann_json_t)
 
void to_json (nlohmann::ordered_json &nlohmann_json_j, const mkfit::SteeringParams &nlohmann_json_t)
 
void to_json (nlohmann::json &nlohmann_json_j, const mkfit::SteeringParams &nlohmann_json_t)
 
void to_json (nlohmann::ordered_json &nlohmann_json_j, const mkfit::IterationLayerConfig &nlohmann_json_t)
 
void to_json (nlohmann::json &nlohmann_json_j, const mkfit::IterationLayerConfig &nlohmann_json_t)
 
void to_json (nlohmann::ordered_json &nlohmann_json_j, const mkfit::IterationParams &nlohmann_json_t)
 
void to_json (nlohmann::json &nlohmann_json_j, const mkfit::IterationParams &nlohmann_json_t)
 
void to_json (nlohmann::ordered_json &nlohmann_json_j, const mkfit::IterationConfig &nlohmann_json_t)
 
void to_json (nlohmann::json &nlohmann_json_j, const mkfit::IterationConfig &nlohmann_json_t)
 
void to_json (nlohmann::json &nlohmann_json_j, const mkfit::IterationsInfo &nlohmann_json_t)
 
void to_json (nlohmann::ordered_json &nlohmann_json_j, const mkfit::IterationsInfo &nlohmann_json_t)
 

Variables

bool g_debug = true
 
ExecutionContext g_exe_ctx
 
constexpr Matriplex::idx_t HH = 3
 
constexpr Matriplex::idx_t LL = 6
 
static constexpr int MPlexHitIdxMax = 16
 
constexpr Matriplex::idx_t NN = 8
 

Typedef Documentation

◆ clean_duplicates_cf

using mkfit::clean_duplicates_cf = typedef void(TrackVec &, const IterationConfig &)

Definition at line 30 of file FunctionTypes.h.

◆ clean_duplicates_func

using mkfit::clean_duplicates_func = typedef std::function<clean_duplicates_cf>

Definition at line 31 of file FunctionTypes.h.

◆ clean_seeds_cf

using mkfit::clean_seeds_cf = typedef int(TrackVec &, const IterationConfig &, const BeamSpot &)

Definition at line 21 of file FunctionTypes.h.

◆ clean_seeds_func

using mkfit::clean_seeds_func = typedef std::function<clean_seeds_cf>

Definition at line 22 of file FunctionTypes.h.

◆ cleanOptsMap

typedef std::map<std::string, std::pair<cleanOpts, std::string> > mkfit::cleanOptsMap

Definition at line 25 of file ConfigStandalone.h.

◆ DeadVec

typedef std::vector<DeadRegion> mkfit::DeadVec

Definition at line 280 of file Hit.h.

◆ EventVec

typedef std::vector<Event> mkfit::EventVec

Definition at line 71 of file Event.h.

◆ filter_candidates_cf

using mkfit::filter_candidates_cf = typedef bool(const TrackCand &, const MkJob &)

Definition at line 27 of file FunctionTypes.h.

◆ filter_candidates_func

using mkfit::filter_candidates_func = typedef std::function<filter_candidates_cf>

Definition at line 28 of file FunctionTypes.h.

◆ FitValLayMap

typedef std::map<int, FitVal> mkfit::FitValLayMap

Definition at line 24 of file TTreeValidation.h.

◆ FltLayerPairVec

typedef std::vector<std::pair<int, float> > mkfit::FltLayerPairVec

Definition at line 121 of file TrackExtra.h.

◆ HitIdxVec

typedef std::vector<int> mkfit::HitIdxVec

Definition at line 17 of file Track.h.

◆ HitLayerMap

typedef std::map<int, std::vector<int> > mkfit::HitLayerMap

Definition at line 18 of file Track.h.

◆ HitVec

typedef std::vector< Hit > mkfit::HitVec

Definition at line 11 of file MkFitHitWrapper.h.

◆ HoTVec

typedef std::vector<HitOnTrack> mkfit::HoTVec

Definition at line 272 of file Hit.h.

◆ idchi2Pair

typedef std::pair<int, float> mkfit::idchi2Pair

Definition at line 232 of file TrackExtra.cc.

◆ idchi2PairVec

typedef std::vector<idchi2Pair> mkfit::idchi2PairVec

Definition at line 233 of file TrackExtra.cc.

◆ LayIdxIDVecMapMap

typedef std::map<int, std::map<int, std::vector<int> > > mkfit::LayIdxIDVecMapMap

Definition at line 37 of file TrackExtra.h.

◆ matchOptsMap

typedef std::map<std::string, std::pair<matchOpts, std::string> > mkfit::matchOptsMap

Definition at line 29 of file ConfigStandalone.h.

◆ MatriplexHitPacker

Definition at line 136 of file MatriplexPackers.h.

◆ MatriplexHoTPacker

Definition at line 139 of file MatriplexPackers.h.

◆ MatriplexTrackPacker

Definition at line 137 of file MatriplexPackers.h.

◆ MCHitInfoVec

typedef std::vector<MCHitInfo> mkfit::MCHitInfoVec

Definition at line 119 of file Hit.h.

◆ MPlex22

typedef Matriplex::Matriplex<float, 2, 2, NN> mkfit::MPlex22

Definition at line 56 of file Matrix.h.

◆ MPlex2S

Definition at line 58 of file Matrix.h.

◆ MPlex2V

typedef Matriplex::Matriplex<float, 2, 1, NN> mkfit::MPlex2V

Definition at line 57 of file Matrix.h.

◆ MPlexHH

Definition at line 52 of file Matrix.h.

◆ MPlexHitIdx

Definition at line 13 of file MkFitter.h.

◆ MPlexHL

Definition at line 61 of file Matrix.h.

◆ MPlexHS

Definition at line 54 of file Matrix.h.

◆ MPlexHV

Definition at line 53 of file Matrix.h.

◆ MPlexL2

Definition at line 63 of file Matrix.h.

◆ MPlexLH

Definition at line 60 of file Matrix.h.

◆ MPlexLL

Definition at line 48 of file Matrix.h.

◆ MPlexLS

Definition at line 50 of file Matrix.h.

◆ MPlexLV

Definition at line 49 of file Matrix.h.

◆ MPlexQB

typedef Matriplex::Matriplex<bool, 1, 1, NN> mkfit::MPlexQB

Definition at line 69 of file Matrix.h.

◆ MPlexQF

typedef Matriplex::Matriplex<float, 1, 1, NN> mkfit::MPlexQF

Definition at line 65 of file Matrix.h.

◆ MPlexQHoT

Definition at line 14 of file MkFitter.h.

◆ MPlexQI

typedef Matriplex::Matriplex<int, 1, 1, NN> mkfit::MPlexQI

Definition at line 66 of file Matrix.h.

◆ MPlexQUI

typedef Matriplex::Matriplex<unsigned int, 1, 1, NN> mkfit::MPlexQUI

Definition at line 67 of file Matrix.h.

◆ PairIdx

typedef std::array<int, 2> mkfit::PairIdx

Definition at line 39 of file TrackExtra.h.

◆ PairIdxVec

typedef std::vector<PairIdx> mkfit::PairIdxVec

Definition at line 40 of file TrackExtra.h.

◆ partition_seeds_cf

using mkfit::partition_seeds_cf = typedef void(const TrackerInfo &, const TrackVec &, const EventOfHits &, IterationSeedPartition &)

Definition at line 24 of file FunctionTypes.h.

◆ partition_seeds_func

using mkfit::partition_seeds_func = typedef std::function<partition_seeds_cf>

Definition at line 25 of file FunctionTypes.h.

◆ RedTrackVec

typedef std::vector<ReducedTrack> mkfit::RedTrackVec

Definition at line 35 of file TrackExtra.h.

◆ seedOptsMap

typedef std::map<std::string, std::pair<seedOpts, std::string> > mkfit::seedOptsMap

Definition at line 21 of file ConfigStandalone.h.

◆ SimTkIDInfo

typedef std::pair<int, int> mkfit::SimTkIDInfo

Definition at line 16 of file Track.h.

◆ SMatrix22

typedef ROOT::Math::SMatrix<float, 2> mkfit::SMatrix22

Definition at line 16 of file MatrixSTypes.h.

◆ SMatrix26

typedef ROOT::Math::SMatrix<float, 2, 6> mkfit::SMatrix26

Definition at line 23 of file MatrixSTypes.h.

◆ SMatrix33

typedef ROOT::Math::SMatrix<float, 3> mkfit::SMatrix33

Definition at line 12 of file MatrixSTypes.h.

◆ SMatrix36

typedef ROOT::Math::SMatrix<float, 3, 6> mkfit::SMatrix36

Definition at line 20 of file MatrixSTypes.h.

◆ SMatrix62

typedef ROOT::Math::SMatrix<float, 6, 2> mkfit::SMatrix62

Definition at line 24 of file MatrixSTypes.h.

◆ SMatrix63

typedef ROOT::Math::SMatrix<float, 6, 3> mkfit::SMatrix63

Definition at line 21 of file MatrixSTypes.h.

◆ SMatrix66

typedef ROOT::Math::SMatrix<float, 6> mkfit::SMatrix66

Definition at line 9 of file MatrixSTypes.h.

◆ SMatrixSym22

typedef ROOT::Math::SMatrix<float, 2, 2, ROOT::Math::MatRepSym<float, 2> > mkfit::SMatrixSym22

Definition at line 17 of file MatrixSTypes.h.

◆ SMatrixSym33

typedef ROOT::Math::SMatrix<float, 3, 3, ROOT::Math::MatRepSym<float, 3> > mkfit::SMatrixSym33

Definition at line 13 of file MatrixSTypes.h.

◆ SMatrixSym66

typedef ROOT::Math::SMatrix<float, 6, 6, ROOT::Math::MatRepSym<float, 6> > mkfit::SMatrixSym66

Definition at line 8 of file MatrixSTypes.h.

◆ SVector2

typedef ROOT::Math::SVector<float, 2> mkfit::SVector2

Definition at line 18 of file MatrixSTypes.h.

◆ SVector3

typedef ROOT::Math::SVector<float, 3> mkfit::SVector3

Definition at line 14 of file MatrixSTypes.h.

◆ SVector6

typedef ROOT::Math::SVector<float, 6> mkfit::SVector6

Definition at line 10 of file MatrixSTypes.h.

◆ TkIDtoFitValLayMapMap

typedef std::unordered_map<int, FitValLayMap> mkfit::TkIDtoFitValLayMapMap

Definition at line 25 of file TTreeValidation.h.

◆ TkIDToTkIDMap

typedef std::unordered_map<int, int> mkfit::TkIDToTkIDMap

Definition at line 124 of file TrackExtra.h.

◆ TkIDToTkIDVecMap

typedef std::unordered_map<int, std::vector<int> > mkfit::TkIDToTkIDVecMap

Definition at line 125 of file TrackExtra.h.

◆ TkIDToTSLayerPairVecMap

typedef std::unordered_map<int, TSLayerPairVec> mkfit::TkIDToTSLayerPairVecMap

Definition at line 127 of file TrackExtra.h.

◆ TkIDToTSMap

typedef std::unordered_map<int, TrackState> mkfit::TkIDToTSMap

Definition at line 126 of file TrackExtra.h.

◆ TkIDToTSVecVec

typedef std::vector<TSVec> mkfit::TkIDToTSVecVec

Definition at line 119 of file TrackExtra.h.

◆ track_score_cf

using mkfit::track_score_cf = typedef float(const int nfoundhits, const int ntailholes, const int noverlaphits, const int nmisshits, const float chi2, const float pt, const bool inFindCandidates)

Definition at line 39 of file FunctionTypes.h.

◆ track_score_func

using mkfit::track_score_func = typedef std::function<track_score_cf>

Definition at line 40 of file FunctionTypes.h.

◆ TrackExtraVec

typedef std::vector< TrackExtra > mkfit::TrackExtraVec

Definition at line 13 of file MkStandaloneSeqs.h.

◆ TrackVec

typedef std::vector< Track > mkfit::TrackVec

Definition at line 8 of file MkFitOutputWrapper.h.

◆ TrackVecVec

typedef std::vector<TrackVec> mkfit::TrackVecVec

Definition at line 590 of file Track.h.

◆ TripletIdx

typedef std::array<int, 3> mkfit::TripletIdx

Definition at line 41 of file TrackExtra.h.

◆ TripletIdxVec

typedef std::vector<TripletIdx> mkfit::TripletIdxVec

Definition at line 42 of file TrackExtra.h.

◆ TrkIDLaySetMap

typedef std::map<int, std::unordered_set<int> > mkfit::TrkIDLaySetMap

Definition at line 38 of file TrackExtra.h.

◆ TSLayerPairVec

typedef std::vector<std::pair<int, TrackState> > mkfit::TSLayerPairVec

Definition at line 120 of file TrackExtra.h.

◆ TSVec

typedef std::vector<TrackState> mkfit::TSVec

Definition at line 118 of file TrackExtra.h.

Enumeration Type Documentation

◆ cleanOpts

Enumerator
noCleaning 
cleanSeedsN2 
cleanSeedsPure 
cleanSeedsBadLabel 

Definition at line 24 of file ConfigStandalone.h.

◆ KalmanFilterOperation

Enumerator
KFO_Calculate_Chi2 
KFO_Update_Params 
KFO_Local_Cov 

Definition at line 11 of file KalmanUtilsMPlex.h.

◆ matchOpts

Enumerator
trkParamBased 
hitBased 
labelBased 

Definition at line 28 of file ConfigStandalone.h.

◆ PropagationFlagsEnum

Enumerator
PF_none 
PF_use_param_b_field 
PF_apply_material 
PF_copy_input_state_on_fail 

Definition at line 8 of file PropagationConfig.h.

◆ seedOpts

Enumerator
simSeeds 
cmsswSeeds 
findSeeds 

Definition at line 20 of file ConfigStandalone.h.

◆ TkLayout

enum mkfit::TkLayout
strong
Enumerator
phase0 
phase1 
phase2 

Definition at line 8 of file LayerNumberConverter.h.

◆ WithinSensitiveRegion_e

Enumerator
WSR_Undef 
WSR_Inside 
WSR_Edge 
WSR_Outside 
WSR_Failed 

Definition at line 15 of file TrackerInfo.h.

Function Documentation

◆ applyMaterialEffects()

void mkfit::applyMaterialEffects ( const MPlexQF hitsRl,
const MPlexQF hitsXi,
const MPlexQF propSign,
MPlexLS outErr,
MPlexLV outPar,
const int  N_proc,
const bool  isBarrel 
)

Definition at line 1020 of file PropagationMPlex.cc.

References funct::abs(), Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::MatriplexSym< T, D, N >::At(), HLT_2023v12_cff::beta, Matriplex::Matriplex< T, D1, D2, N >::constAt(), funct::cos(), plot_hgcal_utils::dEdx, MillePedeFileConverter_cfg::e, f, CustomPhysics_cfi::gamma, Exhume::I, PixelPluginsPhase0_cfi::isBarrel, dqm-mbProfile::log, SiStripPI::max, hlt_dqm_clientPB-live_cfg::me, dqmiodumpmetadata::n, NN, AlCaHLTBitMon_ParallelJobs::p, SiStripOfflineCRack_cfg::p2, DiDispStaMuonMonitor_cfi::pt, funct::sin(), mathSSE::sqrt(), theta(), and cms::cuda::wmax.

Referenced by propagateHelixToRMPlex(), and propagateHelixToZMPlex().

1026  {
1027 #pragma omp simd
1028  for (int n = 0; n < NN; ++n) {
1029  float radL = hitsRl.constAt(n, 0, 0);
1030  if (radL < 1e-13f)
1031  continue; //ugly, please fixme
1032  const float theta = outPar.constAt(n, 5, 0);
1033  const float pt = 1.f / outPar.constAt(n, 3, 0); //fixme, make sure it is positive?
1034  const float p = pt / std::sin(theta);
1035  const float p2 = p * p;
1036  constexpr float mpi = 0.140; // m=140 MeV, pion
1037  constexpr float mpi2 = mpi * mpi; // m=140 MeV, pion
1038  const float beta2 = p2 / (p2 + mpi2);
1039  const float beta = std::sqrt(beta2);
1040  //radiation lenght, corrected for the crossing angle (cos alpha from dot product of radius vector and momentum)
1041  const float invCos = (isBarrel ? p / pt : 1.f / std::abs(std::cos(theta)));
1042  radL = radL * invCos; //fixme works only for barrel geom
1043  // multiple scattering
1044  //vary independently phi and theta by the rms of the planar multiple scattering angle
1045  // XXX-KMD radL < 0, see your fixme above! Repeating bailout
1046  if (radL < 1e-13f)
1047  continue;
1048  // const float thetaMSC = 0.0136f*std::sqrt(radL)*(1.f+0.038f*std::log(radL))/(beta*p);// eq 32.15
1049  // const float thetaMSC2 = thetaMSC*thetaMSC;
1050  const float thetaMSC = 0.0136f * (1.f + 0.038f * std::log(radL)) / (beta * p); // eq 32.15
1051  const float thetaMSC2 = thetaMSC * thetaMSC * radL;
1052  outErr.At(n, 4, 4) += thetaMSC2;
1053  // outErr.At(n, 4, 5) += thetaMSC2;
1054  outErr.At(n, 5, 5) += thetaMSC2;
1055  //std::cout << "beta=" << beta << " p=" << p << std::endl;
1056  //std::cout << "multiple scattering thetaMSC=" << thetaMSC << " thetaMSC2=" << thetaMSC2 << " radL=" << radL << std::endl;
1057  // energy loss
1058  // XXX-KMD beta2 = 1 => 1 / sqrt(0)
1059  // const float gamma = 1.f/std::sqrt(1.f - std::min(beta2, 0.999999f));
1060  // const float gamma2 = gamma*gamma;
1061  const float gamma2 = (p2 + mpi2) / mpi2;
1062  const float gamma = std::sqrt(gamma2); //1.f/std::sqrt(1.f - std::min(beta2, 0.999999f));
1063  constexpr float me = 0.0005; // m=0.5 MeV, electron
1064  const float wmax = 2.f * me * beta2 * gamma2 / (1.f + 2.f * gamma * me / mpi + me * me / (mpi * mpi));
1065  constexpr float I = 16.0e-9 * 10.75;
1066  const float deltahalf = std::log(28.816e-9f * std::sqrt(2.33f * 0.498f) / I) + std::log(beta * gamma) - 0.5f;
1067  const float dEdx =
1068  beta < 1.f
1069  ? (2.f * (hitsXi.constAt(n, 0, 0) * invCos *
1070  (0.5f * std::log(2.f * me * beta2 * gamma2 * wmax / (I * I)) - beta2 - deltahalf) / beta2))
1071  : 0.f; //protect against infs and nans
1072  // dEdx = dEdx*2.;//xi in cmssw is defined with an extra factor 0.5 with respect to formula 27.1 in pdg
1073  //std::cout << "dEdx=" << dEdx << " delta=" << deltahalf << " wmax=" << wmax << " Xi=" << hitsXi.constAt(n,0,0) << std::endl;
1074  const float dP = propSign.constAt(n, 0, 0) * dEdx / beta;
1075  outPar.At(n, 3, 0) = p / (std::max(p + dP, 0.001f) * pt); //stay above 1MeV
1076  //assume 100% uncertainty
1077  outErr.At(n, 3, 3) += dP * dP / (p2 * pt * pt);
1078  }
1079  }
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
T & At(idx_t n, idx_t i, idx_t j)
Definition: MatriplexSym.h:71
T sqrt(T t)
Definition: SSEVec.h:19
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const std::complex< double > I
Definition: I.h:8
double f[11][100]
Geom::Theta< T > theta() const
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54
__host__ __device__ V V wmax

◆ calculateCharge() [1/2]

int mkfit::calculateCharge ( const Hit hit0,
const Hit hit1,
const Hit hit2 
)
inline

Definition at line 20 of file Track.h.

References mkfit::Hit::x(), and mkfit::Hit::y().

20  {
21  return ((hit2.y() - hit0.y()) * (hit2.x() - hit1.x()) > (hit2.y() - hit1.y()) * (hit2.x() - hit0.x()) ? 1 : -1);
22  }

◆ calculateCharge() [2/2]

int mkfit::calculateCharge ( const float  hit0_x,
const float  hit0_y,
const float  hit1_x,
const float  hit1_y,
const float  hit2_x,
const float  hit2_y 
)
inline

Definition at line 24 of file Track.h.

29  {
30  return ((hit2_y - hit0_y) * (hit2_x - hit1_x) > (hit2_y - hit1_y) * (hit2_x - hit0_x) ? 1 : -1);
31  }

◆ cdist()

float mkfit::cdist ( float  a)
inline

Definition at line 32 of file Config.h.

References a, mkfit::Const::PI, and mkfit::Const::TwoPI.

Referenced by mkfit::Event::clean_cms_seedtracks(), mkfit::StdSeq::clean_cms_seedtracks_iter(), and mkfit::MkFinder::selectHitIndices().

32 { return a > Const::PI ? Const::TwoPI - a : a; }
constexpr float TwoPI
Definition: Config.h:8
constexpr float PI
Definition: Config.h:7
double a
Definition: hdecay.h:121

◆ CFMap()

void mkfit::CFMap ( const MPlexHH A,
const MPlexHV B,
MPlexHV C 
)
inline

Definition at line 89 of file ConformalUtilsMPlex.cc.

References A, a, ASSUME_ALIGNED, B, b, correctionTermsCaloMet_cff::C, HltBtagPostValidation_cff::c, N, and NN.

Referenced by conformalFitMPlex().

89  {
90  using idx_t = Matriplex::idx_t;
91 
92  // C = A * B, C is 3x1, A is 3x3 , B is 3x1
93 
94  typedef float T;
95  typedef float Tv;
96  const idx_t N = NN;
97 
98  const T* a = A.fArray;
99  ASSUME_ALIGNED(a, 64);
100  const Tv* b = B.fArray;
101  ASSUME_ALIGNED(b, 64);
102  Tv* c = C.fArray;
103  ASSUME_ALIGNED(c, 64);
104 
105 #include "RecoTracker/MkFitCore/standalone/CFMatrix33Vector3.ah"
106  }
Definition: APVGainStruct.h:7
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
#define N
Definition: blowfish.cc:9
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
Definition: APVGainStruct.h:7
long double T
#define ASSUME_ALIGNED(a, b)

◆ computeHelixChi2()

template<typename Vector , typename Matrix >
float mkfit::computeHelixChi2 ( const Vector simV,
const Vector recoV,
const Matrix &  recoM,
const bool  diagOnly = false 
)

Definition at line 645 of file Track.h.

References diagonalOnly(), and squashPhiGeneral().

Referenced by mkfit::TTreeValidation::fillEfficiencyTree(), mkfit::TTreeValidation::fillFakeRateTree(), mkfit::TrackExtra::setCMSSWTrackIDInfoByHits(), and mkfit::TrackExtra::setCMSSWTrackIDInfoByTrkParams().

645  {
646  Vector diffV = recoV - simV;
647  if (diffV.kSize > 2)
648  squashPhiGeneral(diffV);
649 
650  Matrix recoM_tmp = recoM;
651  if (diagOnly)
652  diagonalOnly(recoM_tmp);
653  int invFail(0);
654  const Matrix recoMI = recoM_tmp.InverseFast(invFail);
655 
656  return ROOT::Math::Dot(diffV * recoMI, diffV) / (diffV.kSize - 1);
657  }
ROOT::Math::Plane3D::Vector Vector
Definition: EcalHitMaker.cc:29
void squashPhiGeneral(Vector &v)
Definition: Track.h:638
portabletest::Matrix Matrix

◆ conformalFitMPlex()

void mkfit::conformalFitMPlex ( bool  fitting,
MPlexQI  seedID,
MPlexLS outErr,
MPlexLV outPar,
const MPlexHV msPar0,
const MPlexHV msPar1,
const MPlexHV msPar2 
)

Definition at line 111 of file ConformalUtilsMPlex.cc.

References A, a, funct::abs(), Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::MatriplexSym< T, D, N >::At(), b, mkfit::Config::Bfield, correctionTermsCaloMet_cff::C, CFMap(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::MatriplexSym< T, D, N >::constAt(), dcall, debug, dprint, dprintf, f, g_debug, getPhi(), getRad2(), getTheta(), hipo(), mps_fire::i, Matriplex::invertCramer(), dqmiolumiharvest::j, dqmdumpme::k, N, dqmiodumpmetadata::n, NN, mkfit::TrackState::parameters, mkfit::Config::phierr012, mkfit::Config::phierr049, mkfit::Const::PI3Over4, mkfit::Const::PIOver4, print(), pv::pT, mkfit::Config::ptinverr012, mkfit::Config::ptinverr049, multPhiCorr_741_25nsDY_cfi::px, multPhiCorr_741_25nsDY_cfi::py, diffTwoXMLs::r2, mkfit::Const::sol, mkfit::Config::thetaerr012, mkfit::Config::thetaerr049, findQualityFiles::v, mkfit::Config::varR, mkfit::Config::varXY, mkfit::Config::varZ, and x.

117  {
118  bool debug(false);
119 
120  using idx_t = Matriplex::idx_t;
121  const idx_t N = NN;
122 
123  // Store positions in mplex vectors... could consider storing in a 3x3 matrix, too
124  MPlexHV x, y, z, r2;
125 #pragma omp simd
126  for (int n = 0; n < N; ++n) {
127  x.At(n, 0, 0) = msPar0.constAt(n, 0, 0);
128  x.At(n, 1, 0) = msPar1.constAt(n, 0, 0);
129  x.At(n, 2, 0) = msPar2.constAt(n, 0, 0);
130 
131  y.At(n, 0, 0) = msPar0.constAt(n, 1, 0);
132  y.At(n, 1, 0) = msPar1.constAt(n, 1, 0);
133  y.At(n, 2, 0) = msPar2.constAt(n, 1, 0);
134 
135  z.At(n, 0, 0) = msPar0.constAt(n, 2, 0);
136  z.At(n, 1, 0) = msPar1.constAt(n, 2, 0);
137  z.At(n, 2, 0) = msPar2.constAt(n, 2, 0);
138 
139  for (int i = 0; i < 3; ++i) {
140  r2.At(n, i, 0) = getRad2(x.constAt(n, i, 0), y.constAt(n, i, 0));
141  }
142  }
143 
144  // Start setting the output parameters
145 #pragma omp simd
146  for (int n = 0; n < N; ++n) {
147  outPar.At(n, 0, 0) = x.constAt(n, 0, 0);
148  outPar.At(n, 1, 0) = y.constAt(n, 0, 0);
149  outPar.At(n, 2, 0) = z.constAt(n, 0, 0);
150  }
151 
152  // Use r-phi smearing to set initial error estimation for positions
153  // trackStates already initialized to identity for seeding ... don't store off-diag 0's, zero's for fitting set outside CF
154 #pragma omp simd
155  for (int n = 0; n < N; ++n) {
156  const float varPhi = Config::varXY / r2.constAt(n, 0, 0);
157  const float invvarR2 = Config::varR / r2.constAt(n, 0, 0);
158 
159  outErr.At(n, 0, 0) =
160  x.constAt(n, 0, 0) * x.constAt(n, 0, 0) * invvarR2 + y.constAt(n, 0, 0) * y.constAt(n, 0, 0) * varPhi;
161  outErr.At(n, 0, 1) = x.constAt(n, 0, 0) * y.constAt(n, 0, 0) * (invvarR2 - varPhi);
162 
163  outErr.At(n, 1, 0) = outErr.constAt(n, 0, 1);
164  outErr.At(n, 1, 1) =
165  y.constAt(n, 0, 0) * y.constAt(n, 0, 0) * invvarR2 + x.constAt(n, 0, 0) * x.constAt(n, 0, 0) * varPhi;
166 
167  outErr.At(n, 2, 2) = Config::varZ;
168  }
169 
170  MPlexQF initPhi;
171  MPlexQI xtou; // bool to determine "split space", i.e. map x to u or v
172 #pragma omp simd
173  for (int n = 0; n < N; ++n) {
174  initPhi.At(n, 0, 0) = std::abs(getPhi(x.constAt(n, 0, 0), y.constAt(n, 0, 0)));
175  xtou.At(n, 0, 0) =
176  ((initPhi.constAt(n, 0, 0) < Const::PIOver4 || initPhi.constAt(n, 0, 0) > Const::PI3Over4) ? 1 : 0);
177  }
178 
179  MPlexHV u, v;
180 #pragma omp simd
181  for (int n = 0; n < N; ++n) {
182  if (xtou.At(n, 0, 0)) // x mapped to u
183  {
184  for (int i = 0; i < 3; ++i) {
185  u.At(n, i, 0) = x.constAt(n, i, 0) / r2.constAt(n, i, 0);
186  v.At(n, i, 0) = y.constAt(n, i, 0) / r2.constAt(n, i, 0);
187  }
188  } else // x mapped to v
189  {
190  for (int i = 0; i < 3; ++i) {
191  u.At(n, i, 0) = y.constAt(n, i, 0) / r2.constAt(n, i, 0);
192  v.At(n, i, 0) = x.constAt(n, i, 0) / r2.constAt(n, i, 0);
193  }
194  }
195  }
196 
197  MPlexHH A;
198  //#pragma omp simd // triggers an internal compiler error with icc 18.0.2!
199  for (int n = 0; n < N; ++n) {
200  for (int i = 0; i < 3; ++i) {
201  A.At(n, i, 0) = 1.0f;
202  A.At(n, i, 1) = -u.constAt(n, i, 0);
203  A.At(n, i, 2) = -u.constAt(n, i, 0) * u.constAt(n, i, 0);
204  }
205  }
207  MPlexHV C;
208  CFMap(A, v, C);
209 
210  MPlexQF a, b;
211 #pragma omp simd
212  for (int n = 0; n < N; ++n) {
213  b.At(n, 0, 0) = 1.0f / (2.0f * C.constAt(n, 0, 0));
214  a.At(n, 0, 0) = b.constAt(n, 0, 0) * C.constAt(n, 1, 0);
215  }
216 
217  // constant used throughtout
218  const float k = (Const::sol * Config::Bfield) / 100.0f;
219 
220  MPlexQF vrx, vry, pT, px, py, pz;
221 #pragma omp simd
222  for (int n = 0; n < N; ++n) {
223  vrx.At(n, 0, 0) =
224  (xtou.constAt(n, 0, 0) ? x.constAt(n, 0, 0) - a.constAt(n, 0, 0) : x.constAt(n, 0, 0) - b.constAt(n, 0, 0));
225  vry.At(n, 0, 0) =
226  (xtou.constAt(n, 0, 0) ? y.constAt(n, 0, 0) - b.constAt(n, 0, 0) : y.constAt(n, 0, 0) - a.constAt(n, 0, 0));
227  pT.At(n, 0, 0) = k * hipo(vrx.constAt(n, 0, 0), vry.constAt(n, 0, 0));
228  px.At(n, 0, 0) = std::copysign(k * vry.constAt(n, 0, 0), x.constAt(n, 2, 0) - x.constAt(n, 0, 0));
229  py.At(n, 0, 0) = std::copysign(k * vrx.constAt(n, 0, 0), y.constAt(n, 2, 0) - y.constAt(n, 0, 0));
230  pz.At(n, 0, 0) = (pT.constAt(n, 0, 0) * (z.constAt(n, 2, 0) - z.constAt(n, 0, 0))) /
231  hipo((x.constAt(n, 2, 0) - x.constAt(n, 0, 0)), (y.constAt(n, 2, 0) - y.constAt(n, 0, 0)));
232  }
233 
234 #pragma omp simd
235  for (int n = 0; n < N; ++n) {
236  outPar.At(n, 3, 0) = 1.0f / pT.constAt(n, 0, 0);
237  outPar.At(n, 4, 0) = getPhi(px.constAt(n, 0, 0), py.constAt(n, 0, 0));
238  outPar.At(n, 5, 0) = getTheta(pT.constAt(n, 0, 0), pz.constAt(n, 0, 0));
239 #ifdef INWARDFIT // arctan is odd, so pz -> -pz means theta -> -theta
240  if (fitting)
241  outPar.At(n, 5, 0) *= -1.0f;
242 #endif
243  }
244 
245 #pragma omp simd
246  for (int n = 0; n < N; ++n) {
247  outErr.At(n, 3, 3) =
249  outErr.At(n, 4, 4) = (fitting ? Config::phierr049 * Config::phierr049 : Config::phierr012 * Config::phierr012);
250  outErr.At(n, 5, 5) =
252  }
253 
254  if (debug && g_debug) {
255  for (int n = 0; n < N; ++n) {
256  dprintf("afterCF seedID: %1u \n", seedID.constAt(n, 0, 0));
257  // do a dumb copy out
258  TrackState updatedState;
259  for (int i = 0; i < 6; i++) {
260  updatedState.parameters[i] = outPar.constAt(n, i, 0);
261  for (int j = 0; j < 6; j++) {
262  updatedState.errors[i][j] = outErr.constAt(n, i, j);
263  }
264  }
265 
266  dcall(print("CCS", updatedState));
267  updatedState.convertFromCCSToCartesian();
268  dcall(print("Pol", updatedState));
269  dprint("--------------------------------");
270  }
271  }
272  }
Matriplex::Matriplex< float, HH, HH, NN > MPlexHH
Definition: Matrix.h:52
Matriplex::Matriplex< float, HH, 1, NN > MPlexHV
Definition: Matrix.h:53
float getTheta(float r, float z)
Definition: Hit.h:36
constexpr float phierr012
float float float z
constexpr float thetaerr049
#define dcall(x)
Definition: Debug.h:97
bool g_debug
Definition: Debug.cc:2
constexpr float varZ
constexpr float varR
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
constexpr float Bfield
Definition: Config.h:53
float getRad2(float x, float y)
Definition: Hit.h:30
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
constexpr float ptinverr049
double f[11][100]
Matriplex::Matriplex< int, 1, 1, NN > MPlexQI
Definition: Matrix.h:66
constexpr float thetaerr012
#define debug
Definition: HDRShower.cc:19
constexpr float sol
Definition: Config.h:13
Matriplex::Matriplex< float, 1, 1, NN > MPlexQF
Definition: Matrix.h:65
#define N
Definition: blowfish.cc:9
void invertCramer(MPlex< T, D, D, N > &A, double *determ=nullptr)
Definition: Matriplex.h:424
float hipo(float x, float y)
Definition: Matrix.h:9
double b
Definition: hdecay.h:120
float getPhi(float x, float y)
Definition: Hit.h:34
#define dprint(x)
Definition: Debug.h:95
constexpr float varXY
double a
Definition: hdecay.h:121
constexpr float phierr049
void CFMap(const MPlexHH &A, const MPlexHV &B, MPlexHV &C)
float x
Definition: APVGainStruct.h:7
constexpr float PI3Over4
Definition: Config.h:11
constexpr float ptinverr012
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54
#define dprintf(...)
Definition: Debug.h:98
constexpr float PIOver4
Definition: Config.h:10

◆ convertHits()

template<typename Traits , typename HitCollection >
edm::ProductID mkfit::convertHits ( const Traits &  traits,
const HitCollection hits,
mkfit::HitVec mkFitHits,
std::vector< TrackingRecHit const *> &  clusterIndexToHit,
std::vector< float > &  clusterChargeVec,
const TrackerTopology ttopo,
const TransientTrackingRecHitBuilder ttrhBuilder,
const MkFitGeometry mkFitGeom 
)

Definition at line 25 of file convertHits.h.

References ALCARECOTkAlJpsiMuMu_cff::charge, submitPVResolutionJobs::err, Exception, f, hfClusterShapes_cfi::hits, edm::ProductID::id(), TrackerTopology::isStereo(), TrackerTopology::layer(), LogTrace, MkFitGeometry::mkFitLayerNumber(), DetId::rawId(), findQualityFiles::size, DetId::subdetId(), MkFitGeometry::uniqueIdInLayer(), and UNLIKELY.

Referenced by MkFitSiPixelHitConverter::produce(), and MkFitSiStripHitConverter::produce().

32  {
33  if (hits.empty())
34  return edm::ProductID{};
35 
36  edm::ProductID clusterID;
37  {
38  const auto& lastClusterRef = hits.data().back().firstClusterRef();
39  clusterID = lastClusterRef.id();
40  if (lastClusterRef.index() >= mkFitHits.size()) {
41  auto const size = lastClusterRef.index();
42  mkFitHits.resize(size);
43  clusterIndexToHit.resize(size, nullptr);
44  if constexpr (Traits::applyCCC()) {
45  clusterChargeVec.resize(size, -1.f);
46  }
47  }
48  }
49 
50  for (const auto& detset : hits) {
51  const DetId detid = detset.detId();
52  const auto ilay = mkFitGeom.mkFitLayerNumber(detid);
53 
54  for (const auto& hit : detset) {
55  const auto charge = traits.clusterCharge(hit, detid);
56  if (!traits.passCCC(charge))
57  continue;
58 
59  const auto& gpos = hit.globalPosition();
60  SVector3 pos(gpos.x(), gpos.y(), gpos.z());
61  const auto& gerr = hit.globalPositionError();
63  err.At(0, 0) = gerr.cxx();
64  err.At(1, 1) = gerr.cyy();
65  err.At(2, 2) = gerr.czz();
66  err.At(0, 1) = gerr.cyx();
67  err.At(0, 2) = gerr.czx();
68  err.At(1, 2) = gerr.czy();
69 
70  auto clusterRef = hit.firstClusterRef();
71  if UNLIKELY (clusterRef.id() != clusterID) {
72  throw cms::Exception("LogicError")
73  << "Input hit collection has Refs to many cluster collections. Last hit had Ref to product " << clusterID
74  << ", but encountered Ref to product " << clusterRef.id() << " on detid " << detid.rawId();
75  }
76  const auto clusterIndex = clusterRef.index();
77  LogTrace("MkFitHitConverter") << "Adding hit detid " << detid.rawId() << " subdet " << detid.subdetId()
78  << " layer " << ttopo.layer(detid) << " isStereo " << ttopo.isStereo(detid)
79  << " zplus "
80  << " index " << clusterIndex << " ilay " << ilay;
81 
82  if UNLIKELY (clusterIndex >= mkFitHits.size()) {
83  mkFitHits.resize(clusterIndex + 1);
84  clusterIndexToHit.resize(clusterIndex + 1, nullptr);
85  if constexpr (Traits::applyCCC()) {
86  clusterChargeVec.resize(clusterIndex + 1, -1.f);
87  }
88  }
89  mkFitHits[clusterIndex] = mkfit::Hit(pos, err);
90  clusterIndexToHit[clusterIndex] = &hit;
91  if constexpr (Traits::applyCCC()) {
92  clusterChargeVec[clusterIndex] = charge;
93  }
94 
95  const auto uniqueIdInLayer = mkFitGeom.uniqueIdInLayer(ilay, detid.rawId());
96  traits.setDetails(mkFitHits[clusterIndex], *(hit.cluster()), uniqueIdInLayer, charge);
97  }
98  }
99  return clusterID;
100  }
size
Write out results.
unsigned int uniqueIdInLayer(int layer, unsigned int detId) const
Definition: MkFitGeometry.h:36
bool isStereo(const DetId &id) const
unsigned int layer(const DetId &id) const
#define LogTrace(id)
double f[11][100]
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
SeedingHitSet::ConstRecHitPointer Hit
ProductIndex id() const
Definition: ProductID.h:35
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
int mkFitLayerNumber(DetId detId) const
#define UNLIKELY(x)
Definition: Likely.h:21
ROOT::Math::SVector< double, 3 > SVector3
Definition: V0Fitter.cc:47
ROOT::Math::SMatrix< float, 3, 3, ROOT::Math::MatRepSym< float, 3 > > SMatrixSym33
Definition: MatrixSTypes.h:13

◆ cube()

template<typename T >
T mkfit::cube ( T  x)
inline

Definition at line 18 of file Hit.h.

References x.

Referenced by getInvRadErr2().

18  {
19  return x * x * x;
20  }
float x

◆ diagonalOnly()

template<typename Matrix >
void mkfit::diagonalOnly ( Matrix &  m)
inline

Definition at line 27 of file MatrixSTypes.h.

References HltBtagPostValidation_cff::c, and visualization-live-secondInstance_cfg::m.

Referenced by computeHelixChi2().

27  {
28  for (int r = 0; r < m.kRows; r++) {
29  for (int c = 0; c < m.kCols; c++) {
30  if (r != c)
31  m[r][c] = 0.f;
32  }
33  }
34  }

◆ dtime()

double mkfit::dtime ( )
inline

◆ dumpMatrix()

template<typename Matrix >
void mkfit::dumpMatrix ( Matrix  m)

Definition at line 37 of file MatrixSTypes.h.

References HltBtagPostValidation_cff::c, gather_cfg::cout, and visualization-live-secondInstance_cfg::m.

Referenced by print().

37  {
38  for (int r = 0; r < m.kRows; ++r) {
39  for (int c = 0; c < m.kCols; ++c) {
40  std::cout << std::setw(12) << m.At(r, c) << " ";
41  }
42  std::cout << std::endl;
43  }
44  }

◆ execTrackerInfoCreatorPlugin()

void mkfit::execTrackerInfoCreatorPlugin ( const std::string &  base,
TrackerInfo ti,
IterationsInfo ii,
bool  verbose 
)

Definition at line 92 of file ConfigStandalone.cc.

References newFWLiteAna::base, beamvalidation::exit(), custom_jme_cff::foo, h, cuy::ii, castor_dqm_sourceclient_file_cfg::path, mkfit::TrackerInfo::read_bin_file(), edm_modernize_messagelogger::stat, submitPVResolutionJobs::stderr, AlCaHLTBitMon_QueryRunRegistry::string, and verbose.

Referenced by initGeom().

92  {
93  const std::string soname = base + ".so";
94  const std::string binname = base + ".bin";
95  struct stat st;
96 
97  int si = 0;
98  while (search_path[si]) {
100  const char *envpath = std::getenv("MKFIT_BASE");
101  if (envpath != nullptr) {
102  path += envpath;
103  path += "/";
104  }
105  path += search_path[si];
106  std::string sopath = path + soname;
107  if (stat(sopath.c_str(), &st) == 0) {
108  printf("execTrackerInfoCreatorPlugin processing '%s'\n", sopath.c_str());
109 
110  void *h = dlopen(sopath.c_str(), RTLD_LAZY);
111  if (!h) {
112  perror("dlopen failed");
113  exit(2);
114  }
115 
116  long long *p2f = (long long *)dlsym(h, "TrackerInfoCreator_ptr");
117  if (!p2f) {
118  perror("dlsym failed");
119  exit(2);
120  }
121 
122  std::string binpath = path + binname;
123  int binsr = stat(binpath.c_str(), &st);
124  printf("execTrackerInfoCreatorPlugin has%s found TrackerInfo binary file '%s'\n",
125  binsr ? " NOT" : "",
126  binpath.c_str());
127  if (binsr == 0)
128  ti.read_bin_file(binpath);
129 
130  TrackerInfoCreator_foo foo = (TrackerInfoCreator_foo)(*p2f);
131  foo(ti, ii, verbose);
132 
133  return;
134  }
135 
136  ++si;
137  }
138 
139  fprintf(stderr, "TrackerInfo plugin '%s' not found in search path.\n", soname.c_str());
140  exit(2);
141  }
bool verbose
base
Main Program
Definition: newFWLiteAna.py:92
ii
Definition: cuy.py:589
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
def exit(msg="")

◆ findSeedsByRoadSearch()

void mkfit::findSeedsByRoadSearch ( TripletIdxConVec &  seed_idcs,
std::vector< LayerOfHits > &  evt_lay_hits,
int  lay1_size,
Event *&  ev 
)

Definition at line 34 of file seedtestMPlex.cc.

References a, funct::abs(), b, debug, mkfit::Config::dEtaSeedTrip, dprint, makeMEIFBenchmarkPlots::ev, JetChargeProducer_cfi::exp, f, getHypot(), getPhi(), getRad2(), mps_fire::i, heavyIonCSV_trainingSettings::idx, intersectThirdLayer(), mkfit::Config::lay01angdiff, SiStripPI::max, mkfit::Config::maxCurvR, mkfit::Hit::mcTrackID(), HLTObjectMonitor_cfi::mr, TtSemiLepEvtBuilder_cfi::mt, mkfit::Config::numHitsPerTask, mkfit::Hit::phi(), mkfit::LayerOfHits::refHit(), mkfit::Config::seed_d0cut, mkfit::Config::seed_z0cut, mkfit::Config::seed_z1cut, mathSSE::sqrt(), funct::tan(), mkfit::Hit::x(), mkfit::Hit::y(), and mkfit::Hit::z().

37  {
38 #ifdef DEBUG
39  bool debug(false);
40 #endif
41 
42  // MIMI hack: Config::nlayers_per_seed = 4
43  // const float seed_z2cut = (Config::nlayers_per_seed * Config::fRadialSpacing) / std::tan(2.0f*std::atan(std::exp(-1.0f*Config::dEtaSeedTrip)));
44 #ifdef DEBUG
45  const float seed_z2cut =
46  (4 * Config::fRadialSpacing) / std::tan(2.0f * std::atan(std::exp(-1.0f * Config::dEtaSeedTrip)));
47 #endif
48 
49  // 0 = first layer, 1 = second layer, 2 = third layer
50  const LayerOfHits& lay1_hits = evt_lay_hits[1];
51  LayerOfHits& lay0_hits = evt_lay_hits[0];
52  LayerOfHits& lay2_hits = evt_lay_hits[2];
53 
54  tbb::parallel_for(
55  tbb::blocked_range<int>(0, lay1_size, std::max(1, Config::numHitsPerTask)),
56  [&](const tbb::blocked_range<int>& i) {
57  TripletIdxVec temp_thr_seed_idcs;
58  for (int ihit1 = i.begin(); ihit1 < i.end(); ++ihit1) {
59  const Hit& hit1 = lay1_hits.refHit(ihit1);
60  const float hit1_z = hit1.z();
61 
62  dprint("ihit1: " << ihit1 << " mcTrackID: " << hit1.mcTrackID(ev->simHitsInfo_) << " phi: " << hit1.phi()
63  << " z: " << hit1.z());
64  dprint(" predphi: " << hit1.phi() << "+/-" << Config::lay01angdiff << " predz: " << hit1.z() / 2.0f << "+/-"
65  << Config::seed_z0cut / 2.0f << std::endl);
66 
67  std::vector<int> cand_hit0_indices; // pass by reference
68  // MIMI lay0_hits.selectHitIndices(hit1_z/2.0f,hit1.phi(),Config::seed_z0cut/2.0f,Config::lay01angdiff,cand_hit0_indices,true,false);
69  // loop over first layer hits
70  for (auto&& ihit0 : cand_hit0_indices) {
71  const Hit& hit0 = lay0_hits.refHit(ihit0);
72  const float hit0_z = hit0.z();
73  const float hit0_x = hit0.x();
74  const float hit0_y = hit0.y();
75  const float hit1_x = hit1.x();
76  const float hit1_y = hit1.y();
77  const float hit01_r2 = getRad2(hit0_x - hit1_x, hit0_y - hit1_y);
78 
79  const float quad = std::sqrt((4.0f * Config::maxCurvR * Config::maxCurvR - hit01_r2) / hit01_r2);
80 
81  // center of negative curved track
82  const float aneg = 0.5f * ((hit0_x + hit1_x) - (hit0_y - hit1_y) * quad);
83  const float bneg = 0.5f * ((hit0_y + hit1_y) + (hit0_x - hit1_x) * quad);
84 
85  // negative points of intersection with third layer
86  float lay2_negx = 0.0f, lay2_negy = 0.0f;
87  intersectThirdLayer(aneg, bneg, hit1_x, hit1_y, lay2_negx, lay2_negy);
88 #ifdef DEBUG
89  const float lay2_negphi = getPhi(lay2_negx, lay2_negy);
90 #endif
91 
92  // center of positive curved track
93  const float apos = 0.5f * ((hit0_x + hit1_x) + (hit0_y - hit1_y) * quad);
94  const float bpos = 0.5f * ((hit0_y + hit1_y) - (hit0_x - hit1_x) * quad);
95 
96  // positive points of intersection with third layer
97  float lay2_posx = 0.0f, lay2_posy = 0.0f;
98  intersectThirdLayer(apos, bpos, hit1_x, hit1_y, lay2_posx, lay2_posy);
99 #ifdef DEBUG
100  const float lay2_posphi = getPhi(lay2_posx, lay2_posy);
101 #endif
102 
103  std::vector<int> cand_hit2_indices;
104  // MIMI lay2_hits.selectHitIndices((2.0f*hit1_z-hit0_z),(lay2_posphi+lay2_negphi)/2.0f,
105  // MIMI seed_z2cut,(lay2_posphi-lay2_negphi)/2.0f,
106  // MIMI cand_hit2_indices,true,false);
107 
108  dprint(" ihit0: " << ihit0 << " mcTrackID: " << hit0.mcTrackID(ev->simHitsInfo_) << " phi: " << hit0.phi()
109  << " z: " << hit0.z());
110  dprint(" predphi: " << (lay2_posphi + lay2_negphi) / 2.0f << "+/-" << (lay2_posphi - lay2_negphi) / 2.0f
111  << " predz: " << 2.0f * hit1_z - hit0_z << "+/-" << seed_z2cut << std::endl);
112 
113  // loop over candidate third layer hits
114  //temp_thr_seed_idcs.reserve(temp_thr_seed_idcs.size()+cand_hit2_indices.size());
115 #pragma omp simd
116  for (size_t idx = 0; idx < cand_hit2_indices.size(); ++idx) {
117  const int ihit2 = cand_hit2_indices[idx];
118  const Hit& hit2 = lay2_hits.refHit(ihit2);
119 
120  const float lay1_predz = (hit0_z + hit2.z()) / 2.0f;
121  // filter by residual of second layer hit
122  if (std::abs(lay1_predz - hit1_z) > Config::seed_z1cut)
123  continue;
124 
125  const float hit2_x = hit2.x();
126  const float hit2_y = hit2.y();
127 
128  // now fit a circle, extract pT and d0 from center and radius
129  const float mr = (hit1_y - hit0_y) / (hit1_x - hit0_x);
130  const float mt = (hit2_y - hit1_y) / (hit2_x - hit1_x);
131  const float a = (mr * mt * (hit2_y - hit0_y) + mr * (hit1_x + hit2_x) - mt * (hit0_x + hit1_x)) /
132  (2.0f * (mr - mt));
133  const float b = -1.0f * (a - (hit0_x + hit1_x) / 2.0f) / mr + (hit0_y + hit1_y) / 2.0f;
134  const float r = getHypot(hit0_x - a, hit0_y - b);
135 
136  // filter by d0 cut 5mm, pT cut 0.5 GeV (radius of 0.5 GeV track)
138  continue;
139 
140  dprint(" ihit2: " << ihit2 << " mcTrackID: " << hit2.mcTrackID(ev->simHitsInfo_)
141  << " phi: " << hit2.phi() << " z: " << hit2.z());
142 
143  temp_thr_seed_idcs.emplace_back(TripletIdx{{ihit0, ihit1, ihit2}});
144  } // end loop over third layer matches
145  } // end loop over first layer matches
146  } // end chunk of hits for parallel for
147  seed_idcs.grow_by(temp_thr_seed_idcs.begin(), temp_thr_seed_idcs.end());
148  }); // end parallel for loop over second layer hits
149  }
constexpr float dEtaSeedTrip
double z
global z - AlignmentGeometry::z0, mm
Definition: HitCollection.h:27
constexpr float lay01angdiff
void intersectThirdLayer(const float a, const float b, const float hit1_x, const float hit1_y, float &lay2_x, float &lay2_y)
Definition: seedtestMPlex.cc:9
std::array< int, 3 > TripletIdx
Definition: TrackExtra.h:41
constexpr float seed_d0cut
T sqrt(T t)
Definition: SSEVec.h:19
float getRad2(float x, float y)
Definition: Hit.h:30
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
float getHypot(float x, float y)
Definition: Hit.h:47
#define debug
Definition: HDRShower.cc:19
constexpr float seed_z1cut
double b
Definition: hdecay.h:120
float getPhi(float x, float y)
Definition: Hit.h:34
#define dprint(x)
Definition: Debug.h:95
double a
Definition: hdecay.h:121
constexpr float seed_z0cut
constexpr float maxCurvR
std::vector< TripletIdx > TripletIdxVec
Definition: TrackExtra.h:42

◆ from_json() [1/12]

void mkfit::from_json ( const nlohmann::json nlohmann_json_j,
mkfit::LayerControl nlohmann_json_t 
)
inline

◆ from_json() [2/12]

void mkfit::from_json ( const nlohmann::ordered_json &  nlohmann_json_j,
mkfit::LayerControl nlohmann_json_t 
)
inline

Definition at line 37 of file IterationConfig.cc.

◆ from_json() [3/12]

void mkfit::from_json ( const nlohmann::json nlohmann_json_j,
mkfit::SteeringParams nlohmann_json_t 
)
inline

Definition at line 45 of file IterationConfig.cc.

◆ from_json() [4/12]

void mkfit::from_json ( const nlohmann::ordered_json &  nlohmann_json_j,
mkfit::SteeringParams nlohmann_json_t 
)
inline

Definition at line 45 of file IterationConfig.cc.

◆ from_json() [5/12]

void mkfit::from_json ( const nlohmann::json nlohmann_json_j,
mkfit::IterationLayerConfig nlohmann_json_t 
)
inline

Definition at line 54 of file IterationConfig.cc.

◆ from_json() [6/12]

void mkfit::from_json ( const nlohmann::ordered_json &  nlohmann_json_j,
mkfit::IterationLayerConfig nlohmann_json_t 
)
inline

Definition at line 54 of file IterationConfig.cc.

◆ from_json() [7/12]

void mkfit::from_json ( const nlohmann::json nlohmann_json_j,
mkfit::IterationParams nlohmann_json_t 
)
inline

Definition at line 66 of file IterationConfig.cc.

◆ from_json() [8/12]

void mkfit::from_json ( const nlohmann::ordered_json &  nlohmann_json_j,
mkfit::IterationParams nlohmann_json_t 
)
inline

Definition at line 66 of file IterationConfig.cc.

◆ from_json() [9/12]

void mkfit::from_json ( const nlohmann::json nlohmann_json_j,
mkfit::IterationConfig nlohmann_json_t 
)
inline

Definition at line 99 of file IterationConfig.cc.

◆ from_json() [10/12]

void mkfit::from_json ( const nlohmann::ordered_json &  nlohmann_json_j,
mkfit::IterationConfig nlohmann_json_t 
)
inline

Definition at line 99 of file IterationConfig.cc.

◆ from_json() [11/12]

void mkfit::from_json ( const nlohmann::json nlohmann_json_j,
mkfit::IterationsInfo nlohmann_json_t 
)
inline

Definition at line 102 of file IterationConfig.cc.

108 {

◆ from_json() [12/12]

void mkfit::from_json ( const nlohmann::ordered_json &  nlohmann_json_j,
mkfit::IterationsInfo nlohmann_json_t 
)
inline

Definition at line 102 of file IterationConfig.cc.

108 {

◆ getEta() [1/3]

float mkfit::getEta ( float  r,
float  z 
)
inline

◆ getEta() [2/3]

float mkfit::getEta ( float  theta)
inline

Definition at line 40 of file Hit.h.

References f, dqm-mbProfile::log, funct::tan(), and theta().

40 { return -1.0f * std::log(std::tan(theta / 2.0f)); }
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
double f[11][100]
Geom::Theta< T > theta() const

◆ getEta() [3/3]

float mkfit::getEta ( float  x,
float  y,
float  z 
)
inline

Definition at line 42 of file Hit.h.

References f, dqm-mbProfile::log, mathSSE::sqrt(), funct::tan(), theta(), and x.

42  {
43  const float theta = std::atan2(std::sqrt(x * x + y * y), z);
44  return -1.0f * std::log(std::tan(theta / 2.0f));
45  }
float float float z
T sqrt(T t)
Definition: SSEVec.h:19
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
double f[11][100]
float x
Geom::Theta< T > theta() const

◆ getEtaErr2()

float mkfit::getEtaErr2 ( float  x,
float  y,
float  z,
float  exx,
float  eyy,
float  ezz,
float  exy,
float  exz,
float  eyz 
)
inline

Definition at line 74 of file Hit.h.

References getRad2(), mathSSE::sqrt(), and x.

Referenced by mkfit::Hit::eeta(), and mkfit::TrackState::eposEta().

74  {
75  const float rad2 = getRad2(x, y);
76  const float detadx = -x / (rad2 * std::sqrt(1 + rad2 / (z * z)));
77  const float detady = -y / (rad2 * std::sqrt(1 + rad2 / (z * z)));
78  const float detadz = 1.0f / (z * std::sqrt(1 + rad2 / (z * z)));
79  return detadx * detadx * exx + detady * detady * eyy + detadz * detadz * ezz + 2.0f * detadx * detady * exy +
80  2.0f * detadx * detadz * exz + 2.0f * detady * detadz * eyz;
81  }
float float float z
T sqrt(T t)
Definition: SSEVec.h:19
float getRad2(float x, float y)
Definition: Hit.h:30
float x

◆ getHypot()

float mkfit::getHypot ( float  x,
float  y 
)
inline

Definition at line 47 of file Hit.h.

References mathSSE::sqrt(), and x.

Referenced by findSeedsByRoadSearch(), intersectThirdLayer(), mkfit::TrackState::posR(), mkfit::TrackBase::posR(), and mkfit::Track::swimPhiToR().

47 { return std::sqrt(x * x + y * y); }
T sqrt(T t)
Definition: SSEVec.h:19
float x

◆ getInvRad2()

float mkfit::getInvRad2 ( float  x,
float  y 
)
inline

Definition at line 32 of file Hit.h.

References x.

32 { return 1.0f / (x * x + y * y); }
float x

◆ getInvRadErr2()

float mkfit::getInvRadErr2 ( float  x,
float  y,
float  exx,
float  eyy,
float  exy 
)
inline

Definition at line 53 of file Hit.h.

References cube(), f, getRad2(), and x.

53  {
54  return (x * x * exx + y * y * eyy + 2.0f * x * y * exy) / cube(getRad2(x, y));
55  }
float getRad2(float x, float y)
Definition: Hit.h:30
double f[11][100]
T cube(T x)
Definition: Hit.h:18
float x

◆ getMatchBin()

int mkfit::getMatchBin ( const float  pt)
inline

Definition at line 237 of file TrackExtra.cc.

References f, and DiDispStaMuonMonitor_cfi::pt.

Referenced by mkfit::TrackExtra::setCMSSWTrackIDInfoByTrkParams().

237  {
238  if (pt < 0.75f)
239  return 0;
240  else if (pt < 1.f)
241  return 1;
242  else if (pt < 2.f)
243  return 2;
244  else if (pt < 5.f)
245  return 3;
246  else if (pt < 10.f)
247  return 4;
248  else
249  return 5;
250  }
double f[11][100]

◆ getPhi()

float mkfit::getPhi ( float  x,
float  y 
)
inline

◆ getPhiErr2()

float mkfit::getPhiErr2 ( float  x,
float  y,
float  exx,
float  eyy,
float  exy 
)
inline

Definition at line 57 of file Hit.h.

References f, getRad2(), and x.

Referenced by mkfit::Hit::ephi(), and mkfit::TrackState::eposPhi().

57  {
58  const float rad2 = getRad2(x, y);
59  return (y * y * exx + x * x * eyy - 2.0f * x * y * exy) / (rad2 * rad2);
60  }
float getRad2(float x, float y)
Definition: Hit.h:30
double f[11][100]
float x

◆ getPxPxErr2()

float mkfit::getPxPxErr2 ( float  ipt,
float  phi,
float  vipt,
float  vphi 
)
inline

Definition at line 83 of file Hit.h.

References funct::cos(), and funct::sin().

Referenced by mkfit::TrackState::epxpx().

83  { // ipt = 1/pT, v = variance
84  const float iipt2 = 1.0f / (ipt * ipt); //iipt = 1/(1/pT) = pT
85  const float cosP = std::cos(phi);
86  const float sinP = std::sin(phi);
87  return iipt2 * (iipt2 * cosP * cosP * vipt + sinP * sinP * vphi);
88  }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22

◆ getPyPyErr2()

float mkfit::getPyPyErr2 ( float  ipt,
float  phi,
float  vipt,
float  vphi 
)
inline

Definition at line 90 of file Hit.h.

References funct::cos(), and funct::sin().

Referenced by mkfit::TrackState::epypy(), and mkfit::TrackState::epzpz().

90  { // ipt = 1/pT, v = variance
91  const float iipt2 = 1.0f / (ipt * ipt); //iipt = 1/(1/pT) = pT
92  const float cosP = std::cos(phi);
93  const float sinP = std::sin(phi);
94  return iipt2 * (iipt2 * sinP * sinP * vipt + cosP * cosP * vphi);
95  }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22

◆ getPzPzErr2()

float mkfit::getPzPzErr2 ( float  ipt,
float  theta,
float  vipt,
float  vtheta 
)
inline

Definition at line 97 of file Hit.h.

References funct::sin(), funct::tan(), and theta().

97  { // ipt = 1/pT, v = variance
98  const float iipt2 = 1.0f / (ipt * ipt); //iipt = 1/(1/pT) = pT
99  const float cotT = 1.0f / std::tan(theta);
100  const float cscT = 1.0f / std::sin(theta);
101  return iipt2 * (iipt2 * cotT * cotT * vipt + cscT * cscT * cscT * cscT * vtheta);
102  }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Geom::Theta< T > theta() const

◆ getRad2()

float mkfit::getRad2 ( float  x,
float  y 
)
inline

Definition at line 30 of file Hit.h.

References x.

Referenced by conformalFitMPlex(), findSeedsByRoadSearch(), getEtaErr2(), getInvRadErr2(), getPhiErr2(), getRadErr2(), and getThetaErr2().

30 { return x * x + y * y; }
float x

◆ getRadErr2()

float mkfit::getRadErr2 ( float  x,
float  y,
float  exx,
float  eyy,
float  exy 
)
inline

Definition at line 49 of file Hit.h.

References f, getRad2(), and x.

Referenced by mkfit::TrackState::eposR().

49  {
50  return (x * x * exx + y * y * eyy + 2.0f * x * y * exy) / getRad2(x, y);
51  }
float getRad2(float x, float y)
Definition: Hit.h:30
double f[11][100]
float x

◆ getScoreCand() [1/2]

float mkfit::getScoreCand ( const track_score_func score_func,
const TrackCand cand1,
bool  penalizeTailMissHits = false,
bool  inFindCandidates = false 
)
inline

Definition at line 258 of file TrackStructures.h.

References nano_mu_local_reco_cff::chi2, mkfit::TrackBase::chi2(), mkfit::TrackCand::nFoundHits(), mkfit::TrackCand::nInsideMinusOneHits(), mkfit::TrackCand::nOverlapHits(), mkfit::TrackCand::nTailMinusOneHits(), DiDispStaMuonMonitor_cfi::pt, and mkfit::TrackBase::pT().

261  {
262  int nfoundhits = cand1.nFoundHits();
263  int noverlaphits = cand1.nOverlapHits();
264  int nmisshits = cand1.nInsideMinusOneHits();
265  int ntailmisshits = penalizeTailMissHits ? cand1.nTailMinusOneHits() : 0;
266  float pt = cand1.pT();
267  float chi2 = cand1.chi2();
268  // Do not allow for chi2<0 in score calculation
269  if (chi2 < 0)
270  chi2 = 0.f;
271  return score_func(nfoundhits, ntailmisshits, noverlaphits, nmisshits, chi2, pt, inFindCandidates);
272  }

◆ getScoreCand() [2/2]

float mkfit::getScoreCand ( const track_score_func score_func,
const Track cand1,
bool  penalizeTailMissHits = false,
bool  inFindCandidates = false 
)
inline

Definition at line 608 of file Track.h.

References nano_mu_local_reco_cff::chi2, mkfit::TrackBase::chi2(), mkfit::Track::nFoundHits(), mkfit::Track::nInsideMinusOneHits(), mkfit::Track::nOverlapHits(), mkfit::Track::nTailMinusOneHits(), DiDispStaMuonMonitor_cfi::pt, and mkfit::TrackBase::pT().

Referenced by mkfit::MkFinder::bkFitOutputTracks(), mkfit::MkFinder::findCandidates(), mkfit::CombCandidate::importSeed(), mkfit::CombCandidate::mergeCandsAndBestShortOne(), mkfit::Event::print_tracks(), mkfit::StdSeq::score_tracks(), and mkfit::TTreeValidation::setTrackScoresDumbCMSSW().

611  {
612  int nfoundhits = cand1.nFoundHits();
613  int noverlaphits = cand1.nOverlapHits();
614  int nmisshits = cand1.nInsideMinusOneHits();
615  float ntailmisshits = penalizeTailMissHits ? cand1.nTailMinusOneHits() : 0;
616  float pt = cand1.pT();
617  float chi2 = cand1.chi2();
618  // Do not allow for chi2<0 in score calculation
619  if (chi2 < 0)
620  chi2 = 0.f;
621  return score_func(nfoundhits, ntailmisshits, noverlaphits, nmisshits, chi2, pt, inFindCandidates);
622  }

◆ getScoreStruct()

float mkfit::getScoreStruct ( const track_score_func score_func,
const IdxChi2List cand1 
)
inline

Definition at line 624 of file Track.h.

References mkfit::IdxChi2List::chi2, nano_mu_local_reco_cff::chi2, mkfit::IdxChi2List::nhits, mkfit::IdxChi2List::nholes, mkfit::IdxChi2List::noverlaps, mkfit::IdxChi2List::ntailholes, DiDispStaMuonMonitor_cfi::pt, and mkfit::IdxChi2List::pt.

Referenced by mkfit::MkFinder::findCandidatesCloneEngine().

624  {
625  int nfoundhits = cand1.nhits;
626  int ntailholes = cand1.ntailholes;
627  int noverlaphits = cand1.noverlaps;
628  int nmisshits = cand1.nholes;
629  float pt = cand1.pt;
630  float chi2 = cand1.chi2;
631  // Do not allow for chi2<0 in score calculation
632  if (chi2 < 0)
633  chi2 = 0.f;
634  return score_func(nfoundhits, ntailholes, noverlaphits, nmisshits, chi2, pt, true /*inFindCandidates*/);
635  }

◆ getScoreWorstPossible()

float mkfit::getScoreWorstPossible ( )
inline

Definition at line 604 of file Track.h.

References SiStripPI::max.

Referenced by mkfit::CombCandidate::reset(), and mkfit::TrackCand::resetShortTrack().

604  {
605  return -std::numeric_limits<float>::max(); // used for handling of best short track during finding
606  }

◆ getTheta()

float mkfit::getTheta ( float  r,
float  z 
)
inline

◆ getThetaErr2()

float mkfit::getThetaErr2 ( float  x,
float  y,
float  z,
float  exx,
float  eyy,
float  ezz,
float  exy,
float  exz,
float  eyz 
)
inline

Definition at line 62 of file Hit.h.

References getRad2(), mathSSE::sqrt(), and x.

63  {
64  const float rad2 = getRad2(x, y);
65  const float rad = std::sqrt(rad2);
66  const float hypot2 = rad2 + z * z;
67  const float dthetadx = x * z / (rad * hypot2);
68  const float dthetady = y * z / (rad * hypot2);
69  const float dthetadz = -rad / hypot2;
70  return dthetadx * dthetadx * exx + dthetady * dthetady * eyy + dthetadz * dthetadz * ezz +
71  2.0f * dthetadx * dthetady * exy + 2.0f * dthetadx * dthetadz * exz + 2.0f * dthetady * dthetadz * eyz;
72  }
float float float z
T sqrt(T t)
Definition: SSEVec.h:19
float getRad2(float x, float y)
Definition: Hit.h:30
float x

◆ helixAtRFromIterativeCCS()

void mkfit::helixAtRFromIterativeCCS ( const MPlexLV inPar,
const MPlexQI inChg,
const MPlexQF msRad,
MPlexLV outPar,
MPlexLL errorProp,
MPlexQI outFailFlag,
const int  N_proc,
const PropagationFlags pflags 
)

Definition at line 480 of file PropagationMPlex.cc.

References f, NN, and Matriplex::Matriplex< T, D1, D2, N >::setVal().

Referenced by propagateHelixToRMPlex().

487  {
488  errorProp.setVal(0.f);
489  outFailFlag.setVal(0.f);
490 
491  helixAtRFromIterativeCCS_impl(inPar, inChg, msRad, outPar, errorProp, outFailFlag, 0, NN, N_proc, pflags);
492  }
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
double f[11][100]
void setVal(T v)
Definition: Matriplex.h:31

◆ helixAtRFromIterativeCCSFullJac() [1/2]

void mkfit::helixAtRFromIterativeCCSFullJac ( const MPlexLV inPar,
const MPlexQI inChg,
const MPlexQF msRad,
MPlexLV outPar,
MPlexLL errorProp,
MPlexQI outFailFlag,
const int  N_proc 
)

◆ helixAtRFromIterativeCCSFullJac() [2/2]

void mkfit::helixAtRFromIterativeCCSFullJac ( const MPlexLV inPar,
const MPlexQI inChg,
const MPlexQF msRad,
MPlexLV outPar,
MPlexLL errorProp,
const int  N_proc 
)

Definition at line 292 of file PropagationMPlex.cc.

References funct::abs(), Matriplex::Matriplex< T, D1, D2, N >::At(), mkfit::Config::Bfield, CMS_UNROLL_LOOP_COUNT, Matriplex::Matriplex< T, D1, D2, N >::constAt(), funct::cos(), gather_cfg::cout, debug, dprint_np, f, g_debug, hipo(), mps_fire::i, dqmdumpme::k, dqmiodumpmetadata::n, mkfit::Config::Niter, NN, Matriplex::Matriplex< T, D1, D2, N >::setVal(), funct::sin(), sincos4(), mkfit::Const::sol, mathSSE::sqrt(), funct::tan(), theta(), and mkfit::Config::useTrigApprox.

297  {
298  errorProp.setVal(0.f);
299  MPlexLL errorPropTmp(0.f); //initialize to zero
300  MPlexLL errorPropSwap(0.f); //initialize to zero
301 
302  // loop does not vectorize with llvm16, and it issues a warning
303  // that apparently can't be suppressed with a pragma. Needs to
304  // be rechecked if future llvm versions improve vectorization.
305 #if !defined(__clang__)
306 #pragma omp simd
307 #endif
308  for (int n = 0; n < NN; ++n) {
309  //initialize erroProp to identity matrix
310  errorProp(n, 0, 0) = 1.f;
311  errorProp(n, 1, 1) = 1.f;
312  errorProp(n, 2, 2) = 1.f;
313  errorProp(n, 3, 3) = 1.f;
314  errorProp(n, 4, 4) = 1.f;
315  errorProp(n, 5, 5) = 1.f;
316 
317  const float k = inChg.constAt(n, 0, 0) * 100.f / (-Const::sol * Config::Bfield);
318  const float r = msRad.constAt(n, 0, 0);
319  float r0 = hipo(inPar.constAt(n, 0, 0), inPar.constAt(n, 1, 0));
320 
321  if (std::abs(r - r0) < 0.0001f) {
322  dprint_np(n, "distance less than 1mum, skip");
323  continue;
324  }
325 
326  const float ipt = inPar.constAt(n, 3, 0);
327  const float phiin = inPar.constAt(n, 4, 0);
328  const float theta = inPar.constAt(n, 5, 0);
329 
330  //set those that are 1. before iterations
331  errorPropTmp(n, 2, 2) = 1.f;
332  errorPropTmp(n, 3, 3) = 1.f;
333  errorPropTmp(n, 4, 4) = 1.f;
334  errorPropTmp(n, 5, 5) = 1.f;
335 
336  float cosah = 0., sinah = 0.;
337  //no trig approx here, phi and theta can be large
338  float cosP = std::cos(phiin), sinP = std::sin(phiin);
339  const float cosT = std::cos(theta), sinT = std::sin(theta);
340  float pxin = cosP / ipt;
341  float pyin = sinP / ipt;
342 
344  for (int i = 0; i < Config::Niter; ++i) {
345  dprint_np(n,
346  std::endl
347  << "attempt propagation from r=" << r0 << " to r=" << r << std::endl
348  << "x=" << outPar.At(n, 0, 0) << " y=" << outPar.At(n, 1, 0) << " z=" << outPar.At(n, 2, 0)
349  << " px=" << std::cos(phiin) / ipt << " py=" << std::sin(phiin) / ipt
350  << " pz=" << 1.f / (ipt * tan(theta)) << " q=" << inChg.constAt(n, 0, 0) << std::endl);
351 
352  r0 = hipo(outPar.constAt(n, 0, 0), outPar.constAt(n, 1, 0));
353  const float ialpha = (r - r0) * ipt / k;
354  //alpha+=ialpha;
355 
356  if constexpr (Config::useTrigApprox) {
357  sincos4(ialpha * 0.5f, sinah, cosah);
358  } else {
359  cosah = std::cos(ialpha * 0.5f);
360  sinah = std::sin(ialpha * 0.5f);
361  }
362  const float cosa = 1.f - 2.f * sinah * sinah;
363  const float sina = 2.f * sinah * cosah;
364 
365  //derivatives of alpha
366  const float dadx = -outPar.At(n, 0, 0) * ipt / (k * r0);
367  const float dady = -outPar.At(n, 1, 0) * ipt / (k * r0);
368  const float dadipt = (r - r0) / k;
369 
370  outPar.At(n, 0, 0) = outPar.constAt(n, 0, 0) + 2.f * k * sinah * (pxin * cosah - pyin * sinah);
371  outPar.At(n, 1, 0) = outPar.constAt(n, 1, 0) + 2.f * k * sinah * (pyin * cosah + pxin * sinah);
372  const float pxinold = pxin; //copy before overwriting
373  pxin = pxin * cosa - pyin * sina;
374  pyin = pyin * cosa + pxinold * sina;
375 
376  //need phi at origin, so this goes before redefining phi
377  //no trig approx here, phi can be large
378  cosP = std::cos(outPar.At(n, 4, 0));
379  sinP = std::sin(outPar.At(n, 4, 0));
380 
381  outPar.At(n, 2, 0) = outPar.constAt(n, 2, 0) + k * ialpha * cosT / (ipt * sinT);
382  outPar.At(n, 3, 0) = ipt;
383  outPar.At(n, 4, 0) = outPar.constAt(n, 4, 0) + ialpha;
384  outPar.At(n, 5, 0) = theta;
385 
386  errorPropTmp(n, 0, 0) = 1.f + k * (cosP * dadx * cosa - sinP * dadx * sina) / ipt;
387  errorPropTmp(n, 0, 1) = k * (cosP * dady * cosa - sinP * dady * sina) / ipt;
388  errorPropTmp(n, 0, 3) =
389  k * (cosP * (ipt * dadipt * cosa - sina) + sinP * ((1.f - cosa) - ipt * dadipt * sina)) / (ipt * ipt);
390  errorPropTmp(n, 0, 4) = -k * (sinP * sina + cosP * (1.f - cosa)) / ipt;
391 
392  errorPropTmp(n, 1, 0) = k * (sinP * dadx * cosa + cosP * dadx * sina) / ipt;
393  errorPropTmp(n, 1, 1) = 1.f + k * (sinP * dady * cosa + cosP * dady * sina) / ipt;
394  errorPropTmp(n, 1, 3) =
395  k * (sinP * (ipt * dadipt * cosa - sina) + cosP * (ipt * dadipt * sina - (1.f - cosa))) / (ipt * ipt);
396  errorPropTmp(n, 1, 4) = k * (cosP * sina - sinP * (1.f - cosa)) / ipt;
397 
398  errorPropTmp(n, 2, 0) = k * cosT * dadx / (ipt * sinT);
399  errorPropTmp(n, 2, 1) = k * cosT * dady / (ipt * sinT);
400  errorPropTmp(n, 2, 3) = k * cosT * (ipt * dadipt - ialpha) / (ipt * ipt * sinT);
401  errorPropTmp(n, 2, 5) = -k * ialpha / (ipt * sinT * sinT);
402 
403  errorPropTmp(n, 4, 0) = dadx;
404  errorPropTmp(n, 4, 1) = dady;
405  errorPropTmp(n, 4, 3) = dadipt;
406 
407  MultHelixPropTemp(errorProp, errorPropTmp, errorPropSwap, n);
408  errorProp = errorPropSwap;
409  }
410 
411  dprint_np(
412  n,
413  "propagation end, dump parameters"
414  << std::endl
415  << "pos = " << outPar.At(n, 0, 0) << " " << outPar.At(n, 1, 0) << " " << outPar.At(n, 2, 0) << std::endl
416  << "mom = " << std::cos(outPar.At(n, 4, 0)) / outPar.At(n, 3, 0) << " "
417  << std::sin(outPar.At(n, 4, 0)) / outPar.At(n, 3, 0) << " "
418  << 1. / (outPar.At(n, 3, 0) * tan(outPar.At(n, 5, 0)))
419  << " r=" << std::sqrt(outPar.At(n, 0, 0) * outPar.At(n, 0, 0) + outPar.At(n, 1, 0) * outPar.At(n, 1, 0))
420  << " pT=" << 1. / std::abs(outPar.At(n, 3, 0)) << std::endl);
421 
422 #ifdef DEBUG
423  if (debug && g_debug && n < N_proc) {
424  dmutex_guard;
425  std::cout << n << " jacobian" << std::endl;
426  printf("%5f %5f %5f %5f %5f %5f\n",
427  errorProp(n, 0, 0),
428  errorProp(n, 0, 1),
429  errorProp(n, 0, 2),
430  errorProp(n, 0, 3),
431  errorProp(n, 0, 4),
432  errorProp(n, 0, 5));
433  printf("%5f %5f %5f %5f %5f %5f\n",
434  errorProp(n, 1, 0),
435  errorProp(n, 1, 1),
436  errorProp(n, 1, 2),
437  errorProp(n, 1, 3),
438  errorProp(n, 1, 4),
439  errorProp(n, 1, 5));
440  printf("%5f %5f %5f %5f %5f %5f\n",
441  errorProp(n, 2, 0),
442  errorProp(n, 2, 1),
443  errorProp(n, 2, 2),
444  errorProp(n, 2, 3),
445  errorProp(n, 2, 4),
446  errorProp(n, 2, 5));
447  printf("%5f %5f %5f %5f %5f %5f\n",
448  errorProp(n, 3, 0),
449  errorProp(n, 3, 1),
450  errorProp(n, 3, 2),
451  errorProp(n, 3, 3),
452  errorProp(n, 3, 4),
453  errorProp(n, 3, 5));
454  printf("%5f %5f %5f %5f %5f %5f\n",
455  errorProp(n, 4, 0),
456  errorProp(n, 4, 1),
457  errorProp(n, 4, 2),
458  errorProp(n, 4, 3),
459  errorProp(n, 4, 4),
460  errorProp(n, 4, 5));
461  printf("%5f %5f %5f %5f %5f %5f\n",
462  errorProp(n, 5, 0),
463  errorProp(n, 5, 1),
464  errorProp(n, 5, 2),
465  errorProp(n, 5, 3),
466  errorProp(n, 5, 4),
467  errorProp(n, 5, 5));
468  }
469 #endif
470  }
471  }
#define dprint_np(n, x)
Definition: Debug.h:96
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
#define CMS_UNROLL_LOOP_COUNT(N)
Definition: CMSUnrollLoop.h:48
bool g_debug
Definition: Debug.cc:2
T sqrt(T t)
Definition: SSEVec.h:19
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
constexpr float Bfield
Definition: Config.h:53
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
constexpr bool useTrigApprox
Definition: Config.h:50
#define debug
Definition: HDRShower.cc:19
constexpr float sol
Definition: Config.h:13
float hipo(float x, float y)
Definition: Matrix.h:9
void setVal(T v)
Definition: Matriplex.h:31
void sincos4(const float x, float &sin, float &cos)
Definition: Matrix.h:13
Geom::Theta< T > theta() const
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54
constexpr int Niter
Definition: Config.h:49

◆ helixAtZ()

void mkfit::helixAtZ ( const MPlexLV inPar,
const MPlexQI inChg,
const MPlexQF msZ,
MPlexLV outPar,
MPlexLL errorProp,
MPlexQI outFailFlag,
const int  N_proc,
const PropagationFlags pflags 
)

Definition at line 712 of file PropagationMPlex.cc.

References funct::abs(), simBeamSpotPI::alpha, Matriplex::Matriplex< T, D1, D2, N >::At(), mkfit::Config::Bfield, mkfit::Config::bFieldFromZR(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), funct::cos(), gather_cfg::cout, debug, l1tTrackerHTMiss_cfi::deltaZ, dprint_np, f, g_debug, hipo(), dqmdumpme::k, dqmiodumpmetadata::n, NN, DiDispStaMuonMonitor_cfi::pt, Matriplex::Matriplex< T, D1, D2, N >::setVal(), funct::sin(), sincos4(), mkfit::Const::sol, mathSSE::sqrt(), funct::tan(), theta(), mkfit::PropagationFlags::use_param_b_field, and mkfit::Config::useTrigApprox.

Referenced by propagateHelixToZMPlex().

719  {
720  errorProp.setVal(0.f);
721 
722 #pragma omp simd
723  for (int n = 0; n < NN; ++n) {
724  //initialize erroProp to identity matrix, except element 2,2 which is zero
725  errorProp(n, 0, 0) = 1.f;
726  errorProp(n, 1, 1) = 1.f;
727  errorProp(n, 3, 3) = 1.f;
728  errorProp(n, 4, 4) = 1.f;
729  errorProp(n, 5, 5) = 1.f;
730  }
731  float zout[NN];
732  float zin[NN];
733  float ipt[NN];
734  float phiin[NN];
735  float theta[NN];
736 #pragma omp simd
737  for (int n = 0; n < NN; ++n) {
738  //initialize erroProp to identity matrix, except element 2,2 which is zero
739  zout[n] = msZ.constAt(n, 0, 0);
740  zin[n] = inPar.constAt(n, 2, 0);
741  ipt[n] = inPar.constAt(n, 3, 0);
742  phiin[n] = inPar.constAt(n, 4, 0);
743  theta[n] = inPar.constAt(n, 5, 0);
744  }
745 
746  float k[NN];
747  if (pflags.use_param_b_field) {
748 #pragma omp simd
749  for (int n = 0; n < NN; ++n) {
750  k[n] = inChg.constAt(n, 0, 0) * 100.f /
751  (-Const::sol * Config::bFieldFromZR(zin[n], hipo(inPar.constAt(n, 0, 0), inPar.constAt(n, 1, 0))));
752  }
753  } else {
754 #pragma omp simd
755  for (int n = 0; n < NN; ++n) {
756  k[n] = inChg.constAt(n, 0, 0) * 100.f / (-Const::sol * Config::Bfield);
757  }
758  }
759 
760  float kinv[NN];
761 #pragma omp simd
762  for (int n = 0; n < NN; ++n) {
763  kinv[n] = 1.f / k[n];
764  }
765 
766 #pragma omp simd
767  for (int n = 0; n < NN; ++n) {
768  dprint_np(n,
769  std::endl
770  << "input parameters"
771  << " inPar.constAt(n, 0, 0)=" << std::setprecision(9) << inPar.constAt(n, 0, 0)
772  << " inPar.constAt(n, 1, 0)=" << std::setprecision(9) << inPar.constAt(n, 1, 0)
773  << " inPar.constAt(n, 2, 0)=" << std::setprecision(9) << inPar.constAt(n, 2, 0)
774  << " inPar.constAt(n, 3, 0)=" << std::setprecision(9) << inPar.constAt(n, 3, 0)
775  << " inPar.constAt(n, 4, 0)=" << std::setprecision(9) << inPar.constAt(n, 4, 0)
776  << " inPar.constAt(n, 5, 0)=" << std::setprecision(9) << inPar.constAt(n, 5, 0));
777  }
778 
779  float pt[NN];
780 #pragma omp simd
781  for (int n = 0; n < NN; ++n) {
782  pt[n] = 1.f / ipt[n];
783  }
784 
785  //no trig approx here, phi can be large
786  float cosP[NN];
787  float sinP[NN];
788 #pragma omp simd
789  for (int n = 0; n < NN; ++n) {
790  cosP[n] = std::cos(phiin[n]);
791  }
792 
793 #pragma omp simd
794  for (int n = 0; n < NN; ++n) {
795  sinP[n] = std::sin(phiin[n]);
796  }
797 
798  float cosT[NN];
799  float sinT[NN];
800 #pragma omp simd
801  for (int n = 0; n < NN; ++n) {
802  cosT[n] = std::cos(theta[n]);
803  }
804 
805 #pragma omp simd
806  for (int n = 0; n < NN; ++n) {
807  sinT[n] = std::sin(theta[n]);
808  }
809 
810  float tanT[NN];
811  float icos2T[NN];
812  float pxin[NN];
813  float pyin[NN];
814 #pragma omp simd
815  for (int n = 0; n < NN; ++n) {
816  tanT[n] = sinT[n] / cosT[n];
817  icos2T[n] = 1.f / (cosT[n] * cosT[n]);
818  pxin[n] = cosP[n] * pt[n];
819  pyin[n] = sinP[n] * pt[n];
820  }
821 #pragma omp simd
822  for (int n = 0; n < NN; ++n) {
823  //fixme, make this printout useful for propagation to z
824  dprint_np(n,
825  std::endl
826  << "k=" << std::setprecision(9) << k[n] << " pxin=" << std::setprecision(9) << pxin[n]
827  << " pyin=" << std::setprecision(9) << pyin[n] << " cosP=" << std::setprecision(9) << cosP[n]
828  << " sinP=" << std::setprecision(9) << sinP[n] << " pt=" << std::setprecision(9) << pt[n]);
829  }
830  float deltaZ[NN];
831  float alpha[NN];
832 #pragma omp simd
833  for (int n = 0; n < NN; ++n) {
834  deltaZ[n] = zout[n] - zin[n];
835  alpha[n] = deltaZ[n] * tanT[n] * ipt[n] * kinv[n];
836  }
837 
838  float cosahTmp[NN];
839  float sinahTmp[NN];
840  if constexpr (Config::useTrigApprox) {
841 #if !defined(__INTEL_COMPILER)
842 #pragma omp simd
843 #endif
844  for (int n = 0; n < NN; ++n) {
845  sincos4(alpha[n] * 0.5f, sinahTmp[n], cosahTmp[n]);
846  }
847  } else {
848 #if !defined(__INTEL_COMPILER)
849 #pragma omp simd
850 #endif
851  for (int n = 0; n < NN; ++n) {
852  cosahTmp[n] = std::cos(alpha[n] * 0.5f);
853  }
854 #if !defined(__INTEL_COMPILER)
855 #pragma omp simd
856 #endif
857  for (int n = 0; n < NN; ++n) {
858  sinahTmp[n] = std::sin(alpha[n] * 0.5f);
859  }
860  }
861 
862  float cosah[NN];
863  float sinah[NN];
864  float cosa[NN];
865  float sina[NN];
866 #pragma omp simd
867  for (int n = 0; n < NN; ++n) {
868  cosah[n] = cosahTmp[n];
869  sinah[n] = sinahTmp[n];
870  cosa[n] = 1.f - 2.f * sinah[n] * sinah[n];
871  sina[n] = 2.f * sinah[n] * cosah[n];
872  }
873 //update parameters
874 #pragma omp simd
875  for (int n = 0; n < NN; ++n) {
876  outPar.At(n, 0, 0) = outPar.At(n, 0, 0) + 2.f * k[n] * sinah[n] * (pxin[n] * cosah[n] - pyin[n] * sinah[n]);
877  outPar.At(n, 1, 0) = outPar.At(n, 1, 0) + 2.f * k[n] * sinah[n] * (pyin[n] * cosah[n] + pxin[n] * sinah[n]);
878  outPar.At(n, 2, 0) = zout[n];
879  outPar.At(n, 4, 0) = phiin[n] + alpha[n];
880  }
881 
882 #pragma omp simd
883  for (int n = 0; n < NN; ++n) {
884  dprint_np(n,
885  std::endl
886  << "outPar.At(n, 0, 0)=" << outPar.At(n, 0, 0) << " outPar.At(n, 1, 0)=" << outPar.At(n, 1, 0)
887  << " pxin=" << pxin[n] << " pyin=" << pyin[n]);
888  }
889 
890  float pxcaMpysa[NN];
891 #pragma omp simd
892  for (int n = 0; n < NN; ++n) {
893  pxcaMpysa[n] = pxin[n] * cosa[n] - pyin[n] * sina[n];
894  }
895 
896 #pragma omp simd
897  for (int n = 0; n < NN; ++n) {
898  errorProp(n, 0, 2) = -tanT[n] * ipt[n] * pxcaMpysa[n];
899  errorProp(n, 0, 3) =
900  k[n] * pt[n] * pt[n] *
901  (cosP[n] * (alpha[n] * cosa[n] - sina[n]) + sinP[n] * 2.f * sinah[n] * (sinah[n] - alpha[n] * cosah[n]));
902  errorProp(n, 0, 4) = -2.f * k[n] * pt[n] * sinah[n] * (sinP[n] * cosah[n] + cosP[n] * sinah[n]);
903  errorProp(n, 0, 5) = deltaZ[n] * ipt[n] * pxcaMpysa[n] * icos2T[n];
904  }
905 
906  float pycaPpxsa[NN];
907 #pragma omp simd
908  for (int n = 0; n < NN; ++n) {
909  pycaPpxsa[n] = pyin[n] * cosa[n] + pxin[n] * sina[n];
910  }
911 
912 #pragma omp simd
913  for (int n = 0; n < NN; ++n) {
914  errorProp(n, 1, 2) = -tanT[n] * ipt[n] * pycaPpxsa[n];
915  errorProp(n, 1, 3) =
916  k[n] * pt[n] * pt[n] *
917  (sinP[n] * (alpha[n] * cosa[n] - sina[n]) - cosP[n] * 2.f * sinah[n] * (sinah[n] - alpha[n] * cosah[n]));
918  errorProp(n, 1, 4) = 2.f * k[n] * pt[n] * sinah[n] * (cosP[n] * cosah[n] - sinP[n] * sinah[n]);
919  errorProp(n, 1, 5) = deltaZ[n] * ipt[n] * pycaPpxsa[n] * icos2T[n];
920  }
921 
922 #pragma omp simd
923  for (int n = 0; n < NN; ++n) {
924  errorProp(n, 4, 2) = -ipt[n] * tanT[n] * kinv[n];
925  errorProp(n, 4, 3) = tanT[n] * deltaZ[n] * kinv[n];
926  errorProp(n, 4, 5) = ipt[n] * deltaZ[n] * kinv[n] * icos2T[n];
927  }
928 
929 #pragma omp simd
930  for (int n = 0; n < NN; ++n) {
931  dprint_np(
932  n,
933  "propagation end, dump parameters"
934  << std::endl
935  << "pos = " << outPar.At(n, 0, 0) << " " << outPar.At(n, 1, 0) << " " << outPar.At(n, 2, 0) << std::endl
936  << "mom = " << std::cos(outPar.At(n, 4, 0)) / outPar.At(n, 3, 0) << " "
937  << std::sin(outPar.At(n, 4, 0)) / outPar.At(n, 3, 0) << " "
938  << 1. / (outPar.At(n, 3, 0) * tan(outPar.At(n, 5, 0)))
939  << " r=" << std::sqrt(outPar.At(n, 0, 0) * outPar.At(n, 0, 0) + outPar.At(n, 1, 0) * outPar.At(n, 1, 0))
940  << " pT=" << 1. / std::abs(outPar.At(n, 3, 0)) << std::endl);
941  }
942 
943  // PROP-FAIL-ENABLE Disabled to keep physics changes minimal.
944  // To be reviewed, enabled and processed accordingly elsewhere.
945  /*
946  // Check for errors, set fail-flag.
947  for (int n = 0; n < NN; ++n) {
948  // We propagate for alpha: mark fail when prop angle more than pi/2
949  if (std::abs(alpha[n]) > 1.57) {
950  dprintf("helixAtZ: more than quarter turn, alpha = %f\n", alpha[n]);
951  outFailFlag[n] = 1;
952  } else {
953  // Have we reached desired z? We can't know, we copy desired z to actual z.
954  // Are we close to apex? Same condition as in propToR, 12.5 deg, cos(78.5deg) = 0.2
955  float dotp = (outPar.At(n, 0, 0) * std::cos(outPar.At(n, 4, 0)) +
956  outPar.At(n, 1, 0) * std::sin(outPar.At(n, 4, 0))) /
957  std::hypot(outPar.At(n, 0, 0), outPar.At(n, 1, 0));
958  if (dotp < 0.2 || dotp < 0) {
959  dprintf("helixAtZ: dot product bad, dotp = %f\n", dotp);
960  outFailFlag[n] = 1;
961  }
962  }
963  }
964  */
965 
966 #ifdef DEBUG
967  if (debug && g_debug) {
968  for (int n = 0; n < N_proc; ++n) {
969  dmutex_guard;
970  std::cout << n << ": jacobian" << std::endl;
971  printf("%5f %5f %5f %5f %5f %5f\n",
972  errorProp(n, 0, 0),
973  errorProp(n, 0, 1),
974  errorProp(n, 0, 2),
975  errorProp(n, 0, 3),
976  errorProp(n, 0, 4),
977  errorProp(n, 0, 5));
978  printf("%5f %5f %5f %5f %5f %5f\n",
979  errorProp(n, 1, 0),
980  errorProp(n, 1, 1),
981  errorProp(n, 1, 2),
982  errorProp(n, 1, 3),
983  errorProp(n, 1, 4),
984  errorProp(n, 1, 5));
985  printf("%5f %5f %5f %5f %5f %5f\n",
986  errorProp(n, 2, 0),
987  errorProp(n, 2, 1),
988  errorProp(n, 2, 2),
989  errorProp(n, 2, 3),
990  errorProp(n, 2, 4),
991  errorProp(n, 2, 5));
992  printf("%5f %5f %5f %5f %5f %5f\n",
993  errorProp(n, 3, 0),
994  errorProp(n, 3, 1),
995  errorProp(n, 3, 2),
996  errorProp(n, 3, 3),
997  errorProp(n, 3, 4),
998  errorProp(n, 3, 5));
999  printf("%5f %5f %5f %5f %5f %5f\n",
1000  errorProp(n, 4, 0),
1001  errorProp(n, 4, 1),
1002  errorProp(n, 4, 2),
1003  errorProp(n, 4, 3),
1004  errorProp(n, 4, 4),
1005  errorProp(n, 4, 5));
1006  printf("%5f %5f %5f %5f %5f %5f\n",
1007  errorProp(n, 5, 0),
1008  errorProp(n, 5, 1),
1009  errorProp(n, 5, 2),
1010  errorProp(n, 5, 3),
1011  errorProp(n, 5, 4),
1012  errorProp(n, 5, 5));
1013  }
1014  }
1015 #endif
1016  }
#define dprint_np(n, x)
Definition: Debug.h:96
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
bool g_debug
Definition: Debug.cc:2
T sqrt(T t)
Definition: SSEVec.h:19
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
constexpr float Bfield
Definition: Config.h:53
Tan< T >::type tan(const T &t)
Definition: Tan.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
constexpr bool useTrigApprox
Definition: Config.h:50
#define debug
Definition: HDRShower.cc:19
constexpr float sol
Definition: Config.h:13
float hipo(float x, float y)
Definition: Matrix.h:9
float bFieldFromZR(const float z, const float r)
Definition: Config.h:124
void setVal(T v)
Definition: Matriplex.h:31
void sincos4(const float x, float &sin, float &cos)
Definition: Matrix.h:13
Geom::Theta< T > theta() const
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ hipo()

float mkfit::hipo ( float  x,
float  y 
)
inline

Definition at line 9 of file Matrix.h.

References mathSSE::sqrt(), and x.

Referenced by conformalFitMPlex(), helixAtRFromIterativeCCSFullJac(), helixAtZ(), propagateHelixToRMPlex(), and propagateLineToRMPlex().

9 { return std::sqrt(x * x + y * y); }
T sqrt(T t)
Definition: SSEVec.h:19
float x

◆ hipo_sqr()

float mkfit::hipo_sqr ( float  x,
float  y 
)
inline

Definition at line 11 of file Matrix.h.

References x.

Referenced by mkfit::MkBase::radiusSqr().

11 { return x * x + y * y; }
float x

◆ intersectThirdLayer()

void mkfit::intersectThirdLayer ( const float  a,
const float  b,
const float  hit1_x,
const float  hit1_y,
float &  lay2_x,
float &  lay2_y 
)
inline

Definition at line 9 of file seedtestMPlex.cc.

References a, testProducerWithPsetDescEmpty_cfi::a2, b, b2, f, getHypot(), mkfit::Config::maxCurvR, and mathSSE::sqrt().

Referenced by findSeedsByRoadSearch().

10  {
11  const float a2 = a * a;
12  const float b2 = b * b;
13  const float a2b2 = a2 + b2;
14  const float lay2rad2 = (Config::fRadialSpacing * Config::fRadialSpacing) * 9.0f; // average third radius squared
15  const float maxCurvR2 = Config::maxCurvR * Config::maxCurvR;
16 
17  const float quad =
18  std::sqrt(2.0f * maxCurvR2 * (a2b2 + lay2rad2) - (a2b2 - lay2rad2) * (a2b2 - lay2rad2) - maxCurvR2 * maxCurvR2);
19  const float pos[2] = {(a2 * a + a * (b2 + lay2rad2 - maxCurvR2) - b * quad) / a2b2,
20  (b2 * b + b * (a2 + lay2rad2 - maxCurvR2) + a * quad) / a2b2};
21  const float neg[2] = {(a2 * a + a * (b2 + lay2rad2 - maxCurvR2) + b * quad) / a2b2,
22  (b2 * b + b * (a2 + lay2rad2 - maxCurvR2) - a * quad) / a2b2};
23 
24  // since we have two intersection points, arbitrate which one is closer to layer2 hit
25  if (getHypot(pos[0] - hit1_x, pos[1] - hit1_y) < getHypot(neg[0] - hit1_x, neg[1] - hit1_y)) {
26  lay2_x = pos[0];
27  lay2_y = pos[1];
28  } else {
29  lay2_x = neg[0];
30  lay2_y = neg[1];
31  }
32  }
T sqrt(T t)
Definition: SSEVec.h:19
double f[11][100]
float getHypot(float x, float y)
Definition: Hit.h:47
weight_default_t b2[10]
Definition: b2.h:9
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
constexpr float maxCurvR

◆ isFinite()

constexpr bool mkfit::isFinite ( float  x)

Definition at line 13 of file cms_common_macros.h.

References ztail::d, edm::isFinite(), MainPageGenerator::l, gpuClustering::pixelStatus::mask, findQualityFiles::v, and x.

Referenced by mkfit::MkFinder::bkFitOutputTracks(), mkfit::TrackBase::hasNanNSillyValues(), and mkfit::TrackBase::hasSillyValues().

13  {
14 #ifdef MKFIT_STANDALONE
15  const unsigned int mask = 0x7f800000;
16  union {
17  unsigned int l;
18  float d;
19  } v = {.d = x};
20  return (v.l & mask) != mask;
21 #else
22  return edm::isFinite(x);
23 #endif
24  }
constexpr bool isFinite(T x)
constexpr uint32_t mask
Definition: gpuClustering.h:26
d
Definition: ztail.py:151
float x

◆ isStripQCompatible()

bool mkfit::isStripQCompatible ( int  itrack,
bool  isBarrel,
const MPlexLS pErr,
const MPlexLV pPar,
const MPlexHS msErr,
const MPlexHV msPar 
)

Definition at line 845 of file MkFinder.cc.

References funct::abs(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::MatriplexSym< T, D, N >::constAt(), dprint, f, PixelPluginsPhase0_cfi::isBarrel, SiStripPI::max, amptDefault_cfi::proj, and mathSSE::sqrt().

Referenced by mkfit::MkFinder::findCandidates(), and mkfit::MkFinder::findCandidatesCloneEngine().

846  {
847  //check module compatibility via long strip side = L/sqrt(12)
848  if (isBarrel) { //check z direction only
849  const float res = std::abs(msPar.constAt(itrack, 2, 0) - pPar.constAt(itrack, 2, 0));
850  const float hitHL = sqrt(msErr.constAt(itrack, 2, 2) * 3.f); //half-length
851  const float qErr = sqrt(pErr.constAt(itrack, 2, 2));
852  dprint("qCompat " << hitHL << " + " << 3.f * qErr << " vs " << res);
853  return hitHL + std::max(3.f * qErr, 0.5f) > res;
854  } else { //project on xy, assuming the strip Length >> Width
855  const float res[2]{msPar.constAt(itrack, 0, 0) - pPar.constAt(itrack, 0, 0),
856  msPar.constAt(itrack, 1, 0) - pPar.constAt(itrack, 1, 0)};
857  const float hitT2 = msErr.constAt(itrack, 0, 0) + msErr.constAt(itrack, 1, 1);
858  const float hitT2inv = 1.f / hitT2;
859  const float proj[3] = {msErr.constAt(itrack, 0, 0) * hitT2inv,
860  msErr.constAt(itrack, 0, 1) * hitT2inv,
861  msErr.constAt(itrack, 1, 1) * hitT2inv};
862  const float qErr =
863  sqrt(std::abs(pErr.constAt(itrack, 0, 0) * proj[0] + 2.f * pErr.constAt(itrack, 0, 1) * proj[1] +
864  pErr.constAt(itrack, 1, 1) * proj[2])); //take abs to avoid non-pos-def cases
865  const float resProj =
866  sqrt(res[0] * proj[0] * res[0] + 2.f * res[1] * proj[1] * res[0] + res[1] * proj[2] * res[1]);
867  dprint("qCompat " << sqrt(hitT2 * 3.f) << " + " << 3.f * qErr << " vs " << resProj);
868  return sqrt(hitT2 * 3.f) + std::max(3.f * qErr, 0.5f) > resProj;
869  }
870  }
Definition: Electron.h:6
T sqrt(T t)
Definition: SSEVec.h:19
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
#define dprint(x)
Definition: Debug.h:95

◆ kalmanComputeChi2()

void mkfit::kalmanComputeChi2 ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexQI inChg,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexQF outChi2,
const int  N_proc 
)

Definition at line 511 of file KalmanUtilsMPlex.cc.

References kalmanOperation(), and KFO_Calculate_Chi2.

517  {
518  kalmanOperation(KFO_Calculate_Chi2, psErr, psPar, msErr, msPar, dummy_err, dummy_par, outChi2, N_proc);
519  }
void kalmanOperation(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)

◆ kalmanComputeChi2Endcap()

void mkfit::kalmanComputeChi2Endcap ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexQI inChg,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexQF outChi2,
const int  N_proc 
)

Definition at line 777 of file KalmanUtilsMPlex.cc.

References kalmanOperationEndcap(), and KFO_Calculate_Chi2.

783  {
784  kalmanOperationEndcap(KFO_Calculate_Chi2, psErr, psPar, msErr, msPar, dummy_err, dummy_par, outChi2, N_proc);
785  }
void kalmanOperationEndcap(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)

◆ kalmanOperation()

void mkfit::kalmanOperation ( const int  kfOp,
const MPlexLS psErr,
const MPlexLV psPar,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
MPlexQF outChi2,
const int  N_proc 
)

Definition at line 551 of file KalmanUtilsMPlex.cc.

References Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::MatriplexSym< T, D, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::MatriplexSym< T, D, N >::constAt(), mps_fire::i, Matriplex::invertCramerSym(), dqmiolumiharvest::j, KFO_Calculate_Chi2, KFO_Local_Cov, KFO_Update_Params, dqmiodumpmetadata::n, NN, squashPhiMPlex(), and Matriplex::MatriplexSym< T, D, N >::subtract().

Referenced by mkfit::MkFinder::bkFitFitTracks(), mkfit::MkFinder::bkFitFitTracksBH(), kalmanComputeChi2(), kalmanPropagateAndComputeChi2(), kalmanPropagateAndUpdate(), and kalmanUpdate().

559  {
560 #ifdef DEBUG
561  {
562  dmutex_guard;
563  printf("psPar:\n");
564  for (int i = 0; i < 6; ++i) {
565  printf("%8f ", psPar.constAt(0, 0, i));
566  printf("\n");
567  }
568  printf("\n");
569  printf("psErr:\n");
570  for (int i = 0; i < 6; ++i) {
571  for (int j = 0; j < 6; ++j)
572  printf("%8f ", psErr.constAt(0, i, j));
573  printf("\n");
574  }
575  printf("\n");
576  printf("msPar:\n");
577  for (int i = 0; i < 3; ++i) {
578  printf("%8f ", msPar.constAt(0, 0, i));
579  printf("\n");
580  }
581  printf("\n");
582  printf("msErr:\n");
583  for (int i = 0; i < 3; ++i) {
584  for (int j = 0; j < 3; ++j)
585  printf("%8f ", msErr.constAt(0, i, j));
586  printf("\n");
587  }
588  printf("\n");
589  }
590 #endif
591 
592  // Rotate global point on tangent plane to cylinder
593  // Tangent point is half way between hit and propagate position
594 
595  // Rotation matrix
596  // rotT00 0 rotT01
597  // rotT01 0 -rotT00
598  // 0 1 0
599  // Minimize temporaries: only two float are needed!
600 
601  MPlexQF rotT00;
602  MPlexQF rotT01;
603  for (int n = 0; n < NN; ++n) {
604  const float r = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0));
605  rotT00.At(n, 0, 0) = -(msPar.constAt(n, 1, 0) + psPar.constAt(n, 1, 0)) / (2 * r);
606  rotT01.At(n, 0, 0) = (msPar.constAt(n, 0, 0) + psPar.constAt(n, 0, 0)) / (2 * r);
607  }
608 
609  MPlexHV res_glo; //position residual in global coordinates
610  SubtractFirst3(msPar, psPar, res_glo);
611 
612  MPlexHS resErr_glo; //covariance sum in global position coordinates
613  AddIntoUpperLeft3x3(psErr, msErr, resErr_glo);
614 
615  MPlex2V res_loc; //position residual in local coordinates
616  RotateResidualsOnTangentPlane(rotT00, rotT01, res_glo, res_loc);
617  MPlex2S resErr_loc; //covariance sum in local position coordinates
618  MPlexHH tempHH;
619  ProjectResErr(rotT00, rotT01, resErr_glo, tempHH);
620  ProjectResErrTransp(rotT00, rotT01, tempHH, resErr_loc);
621 
622 #ifdef DEBUG
623  {
624  dmutex_guard;
625  printf("resErr_loc:\n");
626  for (int i = 0; i < 2; ++i) {
627  for (int j = 0; j < 2; ++j)
628  printf("%8f ", resErr_loc.At(0, i, j));
629  printf("\n");
630  }
631  printf("\n");
632  }
633 #endif
634 
635  //invert the 2x2 matrix
636  Matriplex::invertCramerSym(resErr_loc);
637 
638  if (kfOp & KFO_Calculate_Chi2) {
639  Chi2Similarity(res_loc, resErr_loc, outChi2);
640 
641 #ifdef DEBUG
642  {
643  dmutex_guard;
644  printf("resErr_loc (Inv):\n");
645  for (int i = 0; i < 2; ++i) {
646  for (int j = 0; j < 2; ++j)
647  printf("%8f ", resErr_loc.At(0, i, j));
648  printf("\n");
649  }
650  printf("\n");
651  printf("chi2: %8f\n", outChi2.At(0, 0, 0));
652  }
653 #endif
654  }
655 
656  if (kfOp & KFO_Update_Params) {
657  MPlexLS psErrLoc = psErr;
658  if (kfOp & KFO_Local_Cov)
659  CovXYconstrain(rotT00, rotT01, psErr, psErrLoc);
660 
661  MPlexLH K; // kalman gain, fixme should be L2
662  KalmanHTG(rotT00, rotT01, resErr_loc, tempHH); // intermediate term to get kalman gain (H^T*G)
663  KalmanGain(psErrLoc, tempHH, K);
664 
665  MultResidualsAdd(K, psPar, res_loc, outPar);
666  MPlexLL tempLL;
667 
668  squashPhiMPlex(outPar, N_proc); // ensure phi is between |pi|
669 
670  KHMult(K, rotT00, rotT01, tempLL);
671  KHC(tempLL, psErrLoc, outErr);
672  outErr.subtract(psErrLoc, outErr);
673 
674 #ifdef DEBUG
675  {
676  dmutex_guard;
677  if (kfOp & KFO_Local_Cov) {
678  printf("psErrLoc:\n");
679  for (int i = 0; i < 6; ++i) {
680  for (int j = 0; j < 6; ++j)
681  printf("% 8e ", psErrLoc.At(0, i, j));
682  printf("\n");
683  }
684  printf("\n");
685  }
686  printf("res_glo:\n");
687  for (int i = 0; i < 3; ++i) {
688  printf("%8f ", res_glo.At(0, i, 0));
689  }
690  printf("\n");
691  printf("res_loc:\n");
692  for (int i = 0; i < 2; ++i) {
693  printf("%8f ", res_loc.At(0, i, 0));
694  }
695  printf("\n");
696  printf("resErr_loc (Inv):\n");
697  for (int i = 0; i < 2; ++i) {
698  for (int j = 0; j < 2; ++j)
699  printf("%8f ", resErr_loc.At(0, i, j));
700  printf("\n");
701  }
702  printf("\n");
703  printf("K:\n");
704  for (int i = 0; i < 6; ++i) {
705  for (int j = 0; j < 3; ++j)
706  printf("%8f ", K.At(0, i, j));
707  printf("\n");
708  }
709  printf("\n");
710  printf("outPar:\n");
711  for (int i = 0; i < 6; ++i) {
712  printf("%8f ", outPar.At(0, i, 0));
713  }
714  printf("\n");
715  printf("outErr:\n");
716  for (int i = 0; i < 6; ++i) {
717  for (int j = 0; j < 6; ++j)
718  printf("%8f ", outErr.At(0, i, j));
719  printf("\n");
720  }
721  printf("\n");
722  }
723 #endif
724  }
725  }
MatriplexSym & subtract(const MatriplexSym &a, const MatriplexSym &b)
Definition: MatriplexSym.h:212
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
T & At(idx_t n, idx_t i, idx_t j)
Definition: MatriplexSym.h:71
void squashPhiMPlex(MPlexLV &par, const int N_proc)
void invertCramerSym(MPlexSym< T, D, N > &A, double *determ=nullptr)
Definition: MatriplexSym.h:410
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: MatriplexSym.h:69
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ kalmanOperationEndcap()

void mkfit::kalmanOperationEndcap ( const int  kfOp,
const MPlexLS psErr,
const MPlexLV psPar,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
MPlexQF outChi2,
const int  N_proc 
)

Definition at line 817 of file KalmanUtilsMPlex.cc.

References Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::MatriplexSym< T, D, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::MatriplexSym< T, D, N >::constAt(), mps_fire::i, Matriplex::invertCramerSym(), dqmiolumiharvest::j, KFO_Calculate_Chi2, KFO_Update_Params, squashPhiMPlex(), and Matriplex::MatriplexSym< T, D, N >::subtract().

Referenced by mkfit::MkFinder::bkFitFitTracks(), mkfit::MkFinder::bkFitFitTracksBH(), kalmanComputeChi2Endcap(), kalmanPropagateAndComputeChi2Endcap(), kalmanPropagateAndUpdateEndcap(), and kalmanUpdateEndcap().

825  {
826 #ifdef DEBUG
827  {
828  dmutex_guard;
829  printf("updateParametersEndcapMPlex\n");
830  printf("psPar:\n");
831  for (int i = 0; i < 6; ++i) {
832  printf("%8f ", psPar.constAt(0, 0, i));
833  printf("\n");
834  }
835  printf("\n");
836  printf("msPar:\n");
837  for (int i = 0; i < 3; ++i) {
838  printf("%8f ", msPar.constAt(0, 0, i));
839  printf("\n");
840  }
841  printf("\n");
842  printf("psErr:\n");
843  for (int i = 0; i < 6; ++i) {
844  for (int j = 0; j < 6; ++j)
845  printf("%8f ", psErr.constAt(0, i, j));
846  printf("\n");
847  }
848  printf("\n");
849  printf("msErr:\n");
850  for (int i = 0; i < 3; ++i) {
851  for (int j = 0; j < 3; ++j)
852  printf("%8f ", msErr.constAt(0, i, j));
853  printf("\n");
854  }
855  printf("\n");
856  }
857 #endif
858 
859  MPlex2V res;
860  SubtractFirst2(msPar, psPar, res);
861 
862  MPlex2S resErr;
863  AddIntoUpperLeft2x2(psErr, msErr, resErr);
864 
865 #ifdef DEBUG
866  {
867  dmutex_guard;
868  printf("resErr:\n");
869  for (int i = 0; i < 2; ++i) {
870  for (int j = 0; j < 2; ++j)
871  printf("%8f ", resErr.At(0, i, j));
872  printf("\n");
873  }
874  printf("\n");
875  }
876 #endif
877 
878  //invert the 2x2 matrix
880 
881  if (kfOp & KFO_Calculate_Chi2) {
882  Chi2Similarity(res, resErr, outChi2);
883 
884 #ifdef DEBUG
885  {
886  dmutex_guard;
887  printf("resErr_loc (Inv):\n");
888  for (int i = 0; i < 2; ++i) {
889  for (int j = 0; j < 2; ++j)
890  printf("%8f ", resErr.At(0, i, j));
891  printf("\n");
892  }
893  printf("\n");
894  printf("chi2: %8f\n", outChi2.At(0, 0, 0));
895  }
896 #endif
897  }
898 
899  if (kfOp & KFO_Update_Params) {
900  MPlexL2 K;
901  KalmanGain(psErr, resErr, K);
902 
903  MultResidualsAdd(K, psPar, res, outPar);
904 
905  squashPhiMPlex(outPar, N_proc); // ensure phi is between |pi|
906 
907  KHC(K, psErr, outErr);
908 
909 #ifdef DEBUG
910  {
911  dmutex_guard;
912  printf("outErr before subtract:\n");
913  for (int i = 0; i < 6; ++i) {
914  for (int j = 0; j < 6; ++j)
915  printf("%8f ", outErr.At(0, i, j));
916  printf("\n");
917  }
918  printf("\n");
919  }
920 #endif
921 
922  outErr.subtract(psErr, outErr);
923 
924 #ifdef DEBUG
925  {
926  dmutex_guard;
927  printf("res:\n");
928  for (int i = 0; i < 2; ++i) {
929  printf("%8f ", res.At(0, i, 0));
930  }
931  printf("\n");
932  printf("resErr (Inv):\n");
933  for (int i = 0; i < 2; ++i) {
934  for (int j = 0; j < 2; ++j)
935  printf("%8f ", resErr.At(0, i, j));
936  printf("\n");
937  }
938  printf("\n");
939  printf("K:\n");
940  for (int i = 0; i < 6; ++i) {
941  for (int j = 0; j < 2; ++j)
942  printf("%8f ", K.At(0, i, j));
943  printf("\n");
944  }
945  printf("\n");
946  printf("outPar:\n");
947  for (int i = 0; i < 6; ++i) {
948  printf("%8f ", outPar.At(0, i, 0));
949  }
950  printf("\n");
951  printf("outErr:\n");
952  for (int i = 0; i < 6; ++i) {
953  for (int j = 0; j < 6; ++j)
954  printf("%8f ", outErr.At(0, i, j));
955  printf("\n");
956  }
957  printf("\n");
958  }
959 #endif
960  }
961  }
MatriplexSym & subtract(const MatriplexSym &a, const MatriplexSym &b)
Definition: MatriplexSym.h:212
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
T & At(idx_t n, idx_t i, idx_t j)
Definition: MatriplexSym.h:71
Definition: Electron.h:6
void squashPhiMPlex(MPlexLV &par, const int N_proc)
void invertCramerSym(MPlexSym< T, D, N > &A, double *determ=nullptr)
Definition: MatriplexSym.h:410
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: MatriplexSym.h:69
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ kalmanPropagateAndComputeChi2()

void mkfit::kalmanPropagateAndComputeChi2 ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexQI inChg,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexQF outChi2,
MPlexLV propPar,
MPlexQI outFailFlag,
const int  N_proc,
const PropagationFlags propFlags,
const bool  propToHit 
)

Definition at line 521 of file KalmanUtilsMPlex.cc.

References Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), kalmanOperation(), KFO_Calculate_Chi2, dqmiodumpmetadata::n, NN, and propagateHelixToRMPlex().

531  {
532  propPar = psPar;
533  if (propToHit) {
534  MPlexLS propErr;
535  MPlexQF msRad;
536 #pragma omp simd
537  for (int n = 0; n < NN; ++n) {
538  msRad.At(n, 0, 0) = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0));
539  }
540 
541  propagateHelixToRMPlex(psErr, psPar, inChg, msRad, propErr, propPar, outFailFlag, N_proc, propFlags);
542 
543  kalmanOperation(KFO_Calculate_Chi2, propErr, propPar, msErr, msPar, dummy_err, dummy_par, outChi2, N_proc);
544  } else {
545  kalmanOperation(KFO_Calculate_Chi2, psErr, psPar, msErr, msPar, dummy_err, dummy_par, outChi2, N_proc);
546  }
547  }
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)
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
void kalmanOperation(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ kalmanPropagateAndComputeChi2Endcap()

void mkfit::kalmanPropagateAndComputeChi2Endcap ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexQI inChg,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexQF outChi2,
MPlexLV propPar,
MPlexQI outFailFlag,
const int  N_proc,
const PropagationFlags propFlags,
const bool  propToHit 
)

Definition at line 787 of file KalmanUtilsMPlex.cc.

References Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), kalmanOperationEndcap(), KFO_Calculate_Chi2, dqmiodumpmetadata::n, NN, and propagateHelixToZMPlex().

797  {
798  propPar = psPar;
799  if (propToHit) {
800  MPlexLS propErr;
801  MPlexQF msZ;
802 #pragma omp simd
803  for (int n = 0; n < NN; ++n) {
804  msZ.At(n, 0, 0) = msPar.constAt(n, 2, 0);
805  }
806 
807  propagateHelixToZMPlex(psErr, psPar, inChg, msZ, propErr, propPar, outFailFlag, N_proc, propFlags);
808 
809  kalmanOperationEndcap(KFO_Calculate_Chi2, propErr, propPar, msErr, msPar, dummy_err, dummy_par, outChi2, N_proc);
810  } else {
811  kalmanOperationEndcap(KFO_Calculate_Chi2, psErr, psPar, msErr, msPar, dummy_err, dummy_par, outChi2, N_proc);
812  }
813  }
void kalmanOperationEndcap(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
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)
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ kalmanPropagateAndUpdate()

void mkfit::kalmanPropagateAndUpdate ( const MPlexLS psErr,
const MPlexLV psPar,
MPlexQI Chg,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
MPlexQI outFailFlag,
const int  N_proc,
const PropagationFlags propFlags,
const bool  propToHit 
)

Definition at line 473 of file KalmanUtilsMPlex.cc.

References Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), kalmanOperation(), KFO_Local_Cov, KFO_Update_Params, dqmiodumpmetadata::n, NN, and propagateHelixToRMPlex().

483  {
484  if (propToHit) {
485  MPlexLS propErr;
486  MPlexLV propPar;
487  MPlexQF msRad;
488 #pragma omp simd
489  for (int n = 0; n < NN; ++n) {
490  msRad.At(n, 0, 0) = std::hypot(msPar.constAt(n, 0, 0), msPar.constAt(n, 1, 0));
491  }
492 
493  propagateHelixToRMPlex(psErr, psPar, Chg, msRad, propErr, propPar, outFailFlag, N_proc, propFlags);
494 
496  KFO_Update_Params | KFO_Local_Cov, propErr, propPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc);
497  } else {
499  KFO_Update_Params | KFO_Local_Cov, psErr, psPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc);
500  }
501  for (int n = 0; n < NN; ++n) {
502  if (outPar.At(n, 3, 0) < 0) {
503  Chg.At(n, 0, 0) = -Chg.At(n, 0, 0);
504  outPar.At(n, 3, 0) = -outPar.At(n, 3, 0);
505  }
506  }
507  }
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)
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
void kalmanOperation(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ kalmanPropagateAndUpdateEndcap()

void mkfit::kalmanPropagateAndUpdateEndcap ( const MPlexLS psErr,
const MPlexLV psPar,
MPlexQI Chg,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
MPlexQI outFailFlag,
const int  N_proc,
const PropagationFlags propFlags,
const bool  propToHit 
)

Definition at line 741 of file KalmanUtilsMPlex.cc.

References Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), kalmanOperationEndcap(), KFO_Update_Params, dqmiodumpmetadata::n, NN, and propagateHelixToZMPlex().

751  {
752  if (propToHit) {
753  MPlexLS propErr;
754  MPlexLV propPar;
755  MPlexQF msZ;
756 #pragma omp simd
757  for (int n = 0; n < NN; ++n) {
758  msZ.At(n, 0, 0) = msPar.constAt(n, 2, 0);
759  }
760 
761  propagateHelixToZMPlex(psErr, psPar, Chg, msZ, propErr, propPar, outFailFlag, N_proc, propFlags);
762 
763  kalmanOperationEndcap(KFO_Update_Params, propErr, propPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc);
764  } else {
765  kalmanOperationEndcap(KFO_Update_Params, psErr, psPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc);
766  }
767  for (int n = 0; n < NN; ++n) {
768  if (outPar.At(n, 3, 0) < 0) {
769  Chg.At(n, 0, 0) = -Chg.At(n, 0, 0);
770  outPar.At(n, 3, 0) = -outPar.At(n, 3, 0);
771  }
772  }
773  }
void kalmanOperationEndcap(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
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)
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54

◆ kalmanUpdate()

void mkfit::kalmanUpdate ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
const int  N_proc 
)

Definition at line 463 of file KalmanUtilsMPlex.cc.

References kalmanOperation(), KFO_Local_Cov, and KFO_Update_Params.

Referenced by mkfit::MkFitter::fitTracksWithInterSlurp().

469  {
470  kalmanOperation(KFO_Update_Params | KFO_Local_Cov, psErr, psPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc);
471  }
void kalmanOperation(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)

◆ kalmanUpdateEndcap()

void mkfit::kalmanUpdateEndcap ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
const int  N_proc 
)

Definition at line 731 of file KalmanUtilsMPlex.cc.

References kalmanOperationEndcap(), and KFO_Update_Params.

737  {
738  kalmanOperationEndcap(KFO_Update_Params, psErr, psPar, msErr, msPar, outErr, outPar, dummy_chi2, N_proc);
739  }
void kalmanOperationEndcap(const int kfOp, const MPlexLS &psErr, const MPlexLV &psPar, const MPlexHS &msErr, const MPlexHV &msPar, MPlexLS &outErr, MPlexLV &outPar, MPlexQF &outChi2, const int N_proc)

◆ operator==()

template<class T , class U >
bool mkfit::operator== ( const CcAlloc< T > &  a,
const CcAlloc< U > &  b 
)

Definition at line 151 of file TrackStructures.h.

References a, and b.

151  {
152  return a.pool_id() == b.pool_id();
153  }
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121

◆ passStripChargePCMfromTrack()

bool mkfit::passStripChargePCMfromTrack ( int  itrack,
bool  isBarrel,
unsigned int  pcm,
unsigned int  pcmMin,
const MPlexLV pPar,
const MPlexHS msErr 
)

Definition at line 877 of file MkFinder.cc.

References funct::abs(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::MatriplexSym< T, D, N >::constAt(), funct::cos(), dprint, f, PixelPluginsPhase0_cfi::isBarrel, mkfit::Hit::maxChargePerCM(), amptDefault_cfi::proj, funct::sin(), and mathSSE::sqrt().

Referenced by mkfit::MkFinder::findCandidates(), and mkfit::MkFinder::findCandidatesCloneEngine().

878  {
879  //skip the overflow case
880  if (pcm >= Hit::maxChargePerCM())
881  return true;
882 
883  float qSF;
884  if (isBarrel) { //project in x,y, assuming zero-error direction is in this plane
885  const float hitT2 = msErr.constAt(itrack, 0, 0) + msErr.constAt(itrack, 1, 1);
886  const float hitT2inv = 1.f / hitT2;
887  const float proj[3] = {msErr.constAt(itrack, 0, 0) * hitT2inv,
888  msErr.constAt(itrack, 0, 1) * hitT2inv,
889  msErr.constAt(itrack, 1, 1) * hitT2inv};
890  const bool detXY_OK =
891  std::abs(proj[0] * proj[2] - proj[1] * proj[1]) < 0.1f; //check that zero-direction is close
892  const float cosP = cos(pPar.constAt(itrack, 4, 0));
893  const float sinP = sin(pPar.constAt(itrack, 4, 0));
894  const float sinT = std::abs(sin(pPar.constAt(itrack, 5, 0)));
895  //qSF = sqrt[(px,py)*(1-proj)*(px,py)]/p = sinT*sqrt[(cosP,sinP)*(1-proj)*(cosP,sinP)].
896  qSF = detXY_OK ? sinT * std::sqrt(std::abs(1.f + cosP * cosP * proj[0] + sinP * sinP * proj[2] -
897  2.f * cosP * sinP * proj[1]))
898  : 1.f;
899  } else { //project on z
900  // p_zLocal/p = p_z/p = cosT
901  qSF = std::abs(cos(pPar.constAt(itrack, 5, 0)));
902  }
903 
904  const float qCorr = pcm * qSF;
905  dprint("pcm " << pcm << " * " << qSF << " = " << qCorr << " vs " << pcmMin);
906  return qCorr > pcmMin;
907  }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
T sqrt(T t)
Definition: SSEVec.h:19
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
double f[11][100]
#define dprint(x)
Definition: Debug.h:95

◆ print() [1/5]

void mkfit::print ( std::string_view  label,
const MeasurementState s 
)

Definition at line 8 of file Hit.cc.

References gather_cfg::cout, dumpMatrix(), label, and alignCSCRings::s.

Referenced by mkfit::Shell::Compare(), conformalFitMPlex(), print(), and mkfit::StdSeq::track_print().

8  {
9  std::cout << label << std::endl;
10  std::cout << "x: " << s.parameters()[0] << " y: " << s.parameters()[1] << " z: " << s.parameters()[2] << std::endl
11  << "errors: " << std::endl;
12  dumpMatrix(s.errors());
13  std::cout << std::endl;
14  }
char const * label
void dumpMatrix(Matrix m)
Definition: MatrixSTypes.h:37

◆ print() [2/5]

void mkfit::print ( const TrackState s)

Definition at line 403 of file Track.cc.

References gather_cfg::cout, dumpMatrix(), and alignCSCRings::s.

403  {
404  std::cout << " x: " << s.parameters[0] << " y: " << s.parameters[1] << " z: " << s.parameters[2] << std::endl
405  << " px: " << s.parameters[3] << " py: " << s.parameters[4] << " pz: " << s.parameters[5] << std::endl
406  << "valid: " << s.valid << " errors: " << std::endl;
407  dumpMatrix(s.errors);
408  std::cout << std::endl;
409  }
void dumpMatrix(Matrix m)
Definition: MatrixSTypes.h:37

◆ print() [3/5]

void mkfit::print ( std::string  pfx,
int  itrack,
const Track trk,
bool  print_hits = false 
)

Definition at line 411 of file Track.cc.

References gather_cfg::cout, mkfit::Track::getHitIdx(), mkfit::Track::getHitLyr(), mps_fire::i, mkfit::TrackBase::label(), mkfit::Track::nFoundHits(), mkfit::Track::nTotalHits(), geometryDiffVisualizer::pfx, print(), and mkfit::TrackBase::state().

411  {
412  std::cout << std::endl
413  << pfx << ": " << itrack << " hits: " << trk.nFoundHits() << " label: " << trk.label() << " State"
414  << std::endl;
415  print(trk.state());
416  if (print_hits) {
417  for (int i = 0; i < trk.nTotalHits(); ++i)
418  printf(" %2d: lyr %2d idx %d\n", i, trk.getHitLyr(i), trk.getHitIdx(i));
419  }
420  }
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ print() [4/5]

void mkfit::print ( std::string  pfx,
const TrackState s 
)

Definition at line 422 of file Track.cc.

References gather_cfg::cout, geometryDiffVisualizer::pfx, print(), and alignCSCRings::s.

422  {
423  std::cout << pfx << std::endl;
424  print(s);
425  }
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)
Definition: Utilities.cc:47

◆ print() [5/5]

void mkfit::print ( std::string  pfx,
int  itrack,
const Track trk,
const Event ev 
)

Definition at line 998 of file Event.cc.

References gather_cfg::cout, makeMEIFBenchmarkPlots::ev, mkfit::Track::getHitOnTrack(), h, mps_fire::i, mkfit::TrackBase::label(), mkfit::Track::nFoundHits(), mkfit::Track::nTotalHits(), geometryDiffVisualizer::pfx, print(), and mkfit::TrackBase::state().

998  {
999  std::cout << std::endl
1000  << pfx << ": " << itrack << " hits: " << trk.nFoundHits() << " label: " << trk.label()
1001  << " State:" << std::endl;
1002  print(trk.state());
1003 
1004  for (int i = 0; i < trk.nTotalHits(); ++i) {
1005  auto hot = trk.getHitOnTrack(i);
1006  printf(" %2d: lyr %2d idx %5d", i, hot.layer, hot.index);
1007  if (hot.index >= 0) {
1008  auto &h = ev.layerHits_[hot.layer][hot.index];
1009  int hl = ev.simHitsInfo_[h.mcHitID()].mcTrackID_;
1010  printf(" %4d %8.3f %8.3f %8.3f r=%.3f\n", hl, h.x(), h.y(), h.z(), h.r());
1011  } else {
1012  printf("\n");
1013  }
1014  }
1015  }
void print(std::string pfx, int itrack, const Track &trk, const Event &ev)
Definition: Event.cc:998
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4

◆ propagateHelixToRMPlex()

void mkfit::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 
)

Definition at line 494 of file PropagationMPlex.cc.

References funct::abs(), mkfit::PropagationFlags::apply_material, applyMaterialEffects(), Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::MatriplexSym< T, D, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::Matriplex< T, D1, D2, N >::copySlot(), Matriplex::MatriplexSym< T, D, N >::copySlot(), debug, dprintf, g_debug, helixAtRFromIterativeCCS(), hipo(), mps_fire::i, dqmiolumiharvest::j, GetRecoTauVFromDQM_MC_cff::kk, mkfit::TrackerInfo::material_checked(), dqmiodumpmetadata::n, NN, squashPhiMPlex(), groupFilesInBlocks::temp, and mkfit::PropagationFlags::tracker_info.

Referenced by kalmanPropagateAndComputeChi2(), kalmanPropagateAndUpdate(), mkfit::MkBase::propagateTracksToHitR(), and mkfit::MkBase::propagateTracksToR().

503  {
504  // bool debug = true;
505 
506  // This is used further down when calculating similarity with errorProp (and before in DEBUG).
507  // MT: I don't think this really needed if we use inErr where required.
508  outErr = inErr;
509  // This requirement for helixAtRFromIterativeCCS_impl() and for helixAtRFromIterativeCCSFullJac().
510  // MT: This should be properly handled in both functions (expecting input in output parameters sucks).
511  outPar = inPar;
512 
513  MPlexLL errorProp;
514 
515  helixAtRFromIterativeCCS(inPar, inChg, msRad, outPar, errorProp, outFailFlag, N_proc, pflags);
516 
517 #ifdef DEBUG
518  if (debug && g_debug) {
519  for (int kk = 0; kk < N_proc; ++kk) {
520  dprintf("outErr before prop %d\n", kk);
521  for (int i = 0; i < 6; ++i) {
522  for (int j = 0; j < 6; ++j)
523  dprintf("%8f ", outErr.At(kk, i, j));
524  dprintf("\n");
525  }
526  dprintf("\n");
527 
528  dprintf("errorProp %d\n", kk);
529  for (int i = 0; i < 6; ++i) {
530  for (int j = 0; j < 6; ++j)
531  dprintf("%8f ", errorProp.At(kk, i, j));
532  dprintf("\n");
533  }
534  dprintf("\n");
535  }
536  }
537 #endif
538 
539  if (pflags.apply_material) {
540  MPlexQF hitsRl;
541  MPlexQF hitsXi;
542  MPlexQF propSign;
543 
544  const TrackerInfo& tinfo = *pflags.tracker_info;
545 
546 #pragma omp simd
547  for (int n = 0; n < NN; ++n) {
548  if (n >= N_proc || (outFailFlag(n, 0, 0) || (noMatEffPtr && noMatEffPtr->constAt(n, 0, 0)))) {
549  hitsRl(n, 0, 0) = 0.f;
550  hitsXi(n, 0, 0) = 0.f;
551  } else {
552  auto mat = tinfo.material_checked(std::abs(outPar(n, 2, 0)), msRad(n, 0, 0));
553  hitsRl(n, 0, 0) = mat.radl;
554  hitsXi(n, 0, 0) = mat.bbxi;
555  }
556  const float r0 = hipo(inPar(n, 0, 0), inPar(n, 1, 0));
557  const float r = msRad(n, 0, 0);
558  propSign(n, 0, 0) = (r > r0 ? 1. : -1.);
559  }
560  applyMaterialEffects(hitsRl, hitsXi, propSign, outErr, outPar, N_proc, true);
561  }
562 
563  squashPhiMPlex(outPar, N_proc); // ensure phi is between |pi|
564 
565  // Matriplex version of:
566  // result.errors = ROOT::Math::Similarity(errorProp, outErr);
567 
568  // MultHelixProp can be optimized for CCS coordinates, see GenMPlexOps.pl
569  MPlexLL temp;
570  MultHelixProp(errorProp, outErr, temp);
571  MultHelixPropTransp(errorProp, temp, outErr);
572 
573  /*
574  // To be used with: MPT_DIM = 1
575  if (fabs(sqrt(outPar[0]*outPar[0]+outPar[1]*outPar[1]) - msRad[0]) > 0.0001)
576  {
577  std::cout << "DID NOT GET TO R, FailFlag=" << failFlag[0]
578  << " dR=" << msRad[0] - std::hypot(outPar[0],outPar[1])
579  << " r=" << msRad[0] << " rin=" << std::hypot(inPar[0],inPar[1]) << " rout=" << std::hypot(outPar[0],outPar[1])
580  << std::endl;
581  // std::cout << " pt=" << pt << " pz=" << inPar.At(n, 2) << std::endl;
582  }
583  */
584 
585  // PROP-FAIL-ENABLE To keep physics changes minimal, we always restore the
586  // state to input when propagation fails -- as was the default before.
587  // if (pflags.copy_input_state_on_fail) {
588  for (int i = 0; i < N_proc; ++i) {
589  if (outFailFlag(i, 0, 0)) {
590  outPar.copySlot(i, inPar);
591  outErr.copySlot(i, inErr);
592  }
593  }
594  // }
595  }
void copySlot(idx_t n, const MatriplexSym &m)
Definition: MatriplexSym.h:81
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
T & At(idx_t n, idx_t i, idx_t j)
Definition: MatriplexSym.h:71
const TrackerInfo * tracker_info
void squashPhiMPlex(MPlexLV &par, const int N_proc)
bool g_debug
Definition: Debug.cc:2
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define debug
Definition: HDRShower.cc:19
float hipo(float x, float y)
Definition: Matrix.h:9
void applyMaterialEffects(const MPlexQF &hitsRl, const MPlexQF &hitsXi, const MPlexQF &propSign, MPlexLS &outErr, MPlexLV &outPar, const int N_proc, const bool isBarrel)
Material material_checked(float z, float r) const
Definition: TrackerInfo.h:233
void copySlot(idx_t n, const Matriplex &m)
Definition: Matriplex.h:64
void helixAtRFromIterativeCCS(const MPlexLV &inPar, const MPlexQI &inChg, const MPlexQF &msRad, MPlexLV &outPar, MPlexLL &errorProp, MPlexQI &outFailFlag, const int N_proc, const PropagationFlags &pflags)
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54
#define dprintf(...)
Definition: Debug.h:98

◆ propagateHelixToZMPlex()

void mkfit::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 
)

Definition at line 599 of file PropagationMPlex.cc.

References funct::abs(), mkfit::PropagationFlags::apply_material, applyMaterialEffects(), Matriplex::Matriplex< T, D1, D2, N >::At(), Matriplex::Matriplex< T, D1, D2, N >::constAt(), Matriplex::MatriplexSym< T, D, N >::constAt(), Matriplex::Matriplex< T, D1, D2, N >::copySlot(), Matriplex::MatriplexSym< T, D, N >::copySlot(), debug, dprintf, g_debug, helixAtZ(), mps_fire::i, dqmiolumiharvest::j, GetRecoTauVFromDQM_MC_cff::kk, mkfit::TrackerInfo::material_checked(), dqmiodumpmetadata::n, NN, squashPhiMPlex(), groupFilesInBlocks::temp, and mkfit::PropagationFlags::tracker_info.

Referenced by kalmanPropagateAndComputeChi2Endcap(), kalmanPropagateAndUpdateEndcap(), mkfit::MkBase::propagateTracksToHitZ(), mkfit::MkBase::propagateTracksToPCAZ(), and mkfit::MkBase::propagateTracksToZ().

608  {
609  // debug = true;
610 
611  outErr = inErr;
612  outPar = inPar;
613 
614  MPlexLL errorProp;
615 
616  helixAtZ(inPar, inChg, msZ, outPar, errorProp, outFailFlag, N_proc, pflags);
617 
618 #ifdef DEBUG
619  if (debug && g_debug) {
620  for (int kk = 0; kk < N_proc; ++kk) {
621  dprintf("inErr %d\n", kk);
622  for (int i = 0; i < 6; ++i) {
623  for (int j = 0; j < 6; ++j)
624  dprintf("%8f ", inErr.constAt(kk, i, j));
625  dprintf("\n");
626  }
627  dprintf("\n");
628 
629  dprintf("errorProp %d\n", kk);
630  for (int i = 0; i < 6; ++i) {
631  for (int j = 0; j < 6; ++j)
632  dprintf("%8f ", errorProp.At(kk, i, j));
633  dprintf("\n");
634  }
635  dprintf("\n");
636  }
637  }
638 #endif
639 
640  if (pflags.apply_material) {
641  MPlexQF hitsRl;
642  MPlexQF hitsXi;
643  MPlexQF propSign;
644 
645  const TrackerInfo& tinfo = *pflags.tracker_info;
646 
647 #pragma omp simd
648  for (int n = 0; n < NN; ++n) {
649  if (n >= N_proc || (noMatEffPtr && noMatEffPtr->constAt(n, 0, 0))) {
650  hitsRl(n, 0, 0) = 0.f;
651  hitsXi(n, 0, 0) = 0.f;
652  } else {
653  const float hypo = std::hypot(outPar(n, 0, 0), outPar(n, 1, 0));
654  auto mat = tinfo.material_checked(std::abs(msZ(n, 0, 0)), hypo);
655  hitsRl(n, 0, 0) = mat.radl;
656  hitsXi(n, 0, 0) = mat.bbxi;
657  }
658  const float zout = msZ.constAt(n, 0, 0);
659  const float zin = inPar.constAt(n, 2, 0);
660  propSign(n, 0, 0) = (std::abs(zout) > std::abs(zin) ? 1. : -1.);
661  }
662  applyMaterialEffects(hitsRl, hitsXi, propSign, outErr, outPar, N_proc, false);
663  }
664 
665  squashPhiMPlex(outPar, N_proc); // ensure phi is between |pi|
666 
667  // Matriplex version of:
668  // result.errors = ROOT::Math::Similarity(errorProp, outErr);
669  MPlexLL temp;
670  MultHelixPropEndcap(errorProp, outErr, temp);
671  MultHelixPropTranspEndcap(errorProp, temp, outErr);
672 
673  // PROP-FAIL-ENABLE To keep physics changes minimal, we always restore the
674  // state to input when propagation fails -- as was the default before.
675  // if (pflags.copy_input_state_on_fail) {
676  for (int i = 0; i < N_proc; ++i) {
677  if (outFailFlag(i, 0, 0)) {
678  outPar.copySlot(i, inPar);
679  outErr.copySlot(i, inErr);
680  }
681  }
682  // }
683 
684  // This dump is now out of its place as similarity is done with matriplex ops.
685  /*
686 #ifdef DEBUG
687  {
688  dmutex_guard;
689  for (int kk = 0; kk < N_proc; ++kk)
690  {
691  dprintf("outErr %d\n", kk);
692  for (int i = 0; i < 6; ++i) { for (int j = 0; j < 6; ++j)
693  dprintf("%8f ", outErr.At(kk,i,j)); printf("\n");
694  } dprintf("\n");
695 
696  dprintf("outPar %d\n", kk);
697  for (int i = 0; i < 6; ++i) {
698  dprintf("%8f ", outPar.At(kk,i,0)); printf("\n");
699  } dprintf("\n");
700  if (std::abs(outPar.At(kk,2,0) - msZ.constAt(kk, 0, 0)) > 0.0001) {
701  float pt = 1.0f / inPar.constAt(kk,3,0);
702  dprint_np(kk, "DID NOT GET TO Z, dZ=" << std::abs(outPar.At(kk,2,0) - msZ.constAt(kk, 0, 0))
703  << " z=" << msZ.constAt(kk, 0, 0) << " zin=" << inPar.constAt(kk,2,0) << " zout=" << outPar.At(kk,2,0) << std::endl
704  << "pt=" << pt << " pz=" << pt/std::tan(inPar.constAt(kk,5,0)));
705  }
706  }
707  }
708 #endif
709  */
710  }
void copySlot(idx_t n, const MatriplexSym &m)
Definition: MatriplexSym.h:81
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: Matriplex.h:52
const TrackerInfo * tracker_info
void squashPhiMPlex(MPlexLV &par, const int N_proc)
const T & constAt(idx_t n, idx_t i, idx_t j) const
Definition: MatriplexSym.h:69
bool g_debug
Definition: Debug.cc:2
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
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
#define debug
Definition: HDRShower.cc:19
void applyMaterialEffects(const MPlexQF &hitsRl, const MPlexQF &hitsXi, const MPlexQF &propSign, MPlexLS &outErr, MPlexLV &outPar, const int N_proc, const bool isBarrel)
Material material_checked(float z, float r) const
Definition: TrackerInfo.h:233
void copySlot(idx_t n, const Matriplex &m)
Definition: Matriplex.h:64
T & At(idx_t n, idx_t i, idx_t j)
Definition: Matriplex.h:54
#define dprintf(...)
Definition: Debug.h:98

◆ propagateLineToRMPlex()

void mkfit::propagateLineToRMPlex ( const MPlexLS psErr,
const MPlexLV psPar,
const MPlexHS msErr,
const MPlexHV msPar,
MPlexLS outErr,
MPlexLV outPar,
const int  N_proc 
)

Definition at line 19 of file PropagationMPlex.cc.

References A, B, dprint_np, hipo(), N, dqmiodumpmetadata::n, NN, AlCaHLTBitMon_ParallelJobs::p, DiDispStaMuonMonitor_cfi::pt, and mathSSE::sqrt().

25  {
26  // XXX Regenerate parts below with a script.
27 
28  const idx_t N = NN;
29 
30 #pragma omp simd
31  for (int n = 0; n < NN; ++n) {
32  const float cosA = (psPar[0 * N + n] * psPar[3 * N + n] + psPar[1 * N + n] * psPar[4 * N + n]) /
33  (std::sqrt((psPar[0 * N + n] * psPar[0 * N + n] + psPar[1 * N + n] * psPar[1 * N + n]) *
34  (psPar[3 * N + n] * psPar[3 * N + n] + psPar[4 * N + n] * psPar[4 * N + n])));
35  const float dr = (hipo(msPar[0 * N + n], msPar[1 * N + n]) - hipo(psPar[0 * N + n], psPar[1 * N + n])) / cosA;
36 
37  dprint_np(n, "propagateLineToRMPlex dr=" << dr);
38 
39  const float pt = hipo(psPar[3 * N + n], psPar[4 * N + n]);
40  const float p = dr / pt; // path
41  const float psq = p * p;
42 
43  outPar[0 * N + n] = psPar[0 * N + n] + p * psPar[3 * N + n];
44  outPar[1 * N + n] = psPar[1 * N + n] + p * psPar[4 * N + n];
45  outPar[2 * N + n] = psPar[2 * N + n] + p * psPar[5 * N + n];
46  outPar[3 * N + n] = psPar[3 * N + n];
47  outPar[4 * N + n] = psPar[4 * N + n];
48  outPar[5 * N + n] = psPar[5 * N + n];
49 
50  {
51  const MPlexLS& A = psErr;
52  MPlexLS& B = outErr;
53 
54  B.fArray[0 * N + n] = A.fArray[0 * N + n];
55  B.fArray[1 * N + n] = A.fArray[1 * N + n];
56  B.fArray[2 * N + n] = A.fArray[2 * N + n];
57  B.fArray[3 * N + n] = A.fArray[3 * N + n];
58  B.fArray[4 * N + n] = A.fArray[4 * N + n];
59  B.fArray[5 * N + n] = A.fArray[5 * N + n];
60  B.fArray[6 * N + n] = A.fArray[6 * N + n] + p * A.fArray[0 * N + n];
61  B.fArray[7 * N + n] = A.fArray[7 * N + n] + p * A.fArray[1 * N + n];
62  B.fArray[8 * N + n] = A.fArray[8 * N + n] + p * A.fArray[3 * N + n];
63  B.fArray[9 * N + n] =
64  A.fArray[9 * N + n] + p * (A.fArray[6 * N + n] + A.fArray[6 * N + n]) + psq * A.fArray[0 * N + n];
65  B.fArray[10 * N + n] = A.fArray[10 * N + n] + p * A.fArray[1 * N + n];
66  B.fArray[11 * N + n] = A.fArray[11 * N + n] + p * A.fArray[2 * N + n];
67  B.fArray[12 * N + n] = A.fArray[12 * N + n] + p * A.fArray[4 * N + n];
68  B.fArray[13 * N + n] =
69  A.fArray[13 * N + n] + p * (A.fArray[7 * N + n] + A.fArray[10 * N + n]) + psq * A.fArray[1 * N + n];
70  B.fArray[14 * N + n] =
71  A.fArray[14 * N + n] + p * (A.fArray[11 * N + n] + A.fArray[11 * N + n]) + psq * A.fArray[2 * N + n];
72  B.fArray[15 * N + n] = A.fArray[15 * N + n] + p * A.fArray[3 * N + n];
73  B.fArray[16 * N + n] = A.fArray[16 * N + n] + p * A.fArray[4 * N + n];
74  B.fArray[17 * N + n] = A.fArray[17 * N + n] + p * A.fArray[5 * N + n];
75  B.fArray[18 * N + n] =
76  A.fArray[18 * N + n] + p * (A.fArray[8 * N + n] + A.fArray[15 * N + n]) + psq * A.fArray[3 * N + n];
77  B.fArray[19 * N + n] =
78  A.fArray[19 * N + n] + p * (A.fArray[12 * N + n] + A.fArray[16 * N + n]) + psq * A.fArray[4 * N + n];
79  B.fArray[20 * N + n] =
80  A.fArray[20 * N + n] + p * (A.fArray[17 * N + n] + A.fArray[17 * N + n]) + psq * A.fArray[5 * N + n];
81  }
82 
83  dprint_np(n, "propagateLineToRMPlex arrive at r=" << hipo(outPar[0 * N + n], outPar[1 * N + n]));
84  }
85  }
Definition: APVGainStruct.h:7
#define dprint_np(n, x)
Definition: Debug.h:96
T sqrt(T t)
Definition: SSEVec.h:19
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
#define N
Definition: blowfish.cc:9
float hipo(float x, float y)
Definition: Matrix.h:9
Definition: APVGainStruct.h:7

◆ run_OneIteration()

void mkfit::run_OneIteration ( const TrackerInfo trackerInfo,
const IterationConfig itconf,
const EventOfHits eoh,
const std::vector< const std::vector< bool > *> &  hit_masks,
MkBuilder builder,
TrackVec seeds,
TrackVec out_tracks,
bool  do_seed_clean,
bool  do_backward_fit,
bool  do_remove_duplicates 
)

Definition at line 29 of file runFunctions.cc.

References mkfit::MkBuilder::backwardFit(), mkfit::MkBuilder::begin_event(), mkfit::MkBuilder::beginBkwSearch(), mkfit::MkBuilder::compactifyHitStorageForBestCand(), mkfit::MkBuilder::end_event(), mkfit::MkBuilder::endBkwSearch(), mkfit::MkBuilder::export_best_comb_cands(), mkfit::MkBuilder::filter_comb_cands(), mkfit::MkBuilder::find_tracks_load_seeds(), mkfit::MkBuilder::findTracksCloneEngine(), mkfit::SteeringParams::IT_BkwSearch, mkfit::IterationConfig::m_backward_drop_seed_hits, mkfit::IterationConfig::m_backward_fit_min_hits, mkfit::IterationConfig::m_backward_search, mkfit::IterationConfig::m_duplicate_cleaner, mkfit::IterationConfig::m_post_bkfit_filter, mkfit::IterationConfig::m_pre_bkfit_filter, mkfit::IterationConfig::m_requires_seed_hit_sorting, mkfit::IterationConfig::m_seed_cleaner, mkfit::EventOfHits::refBeamSpot(), mkfit::MkBuilder::release_memory(), alignCSCRings::s, mkfit::MkBuilder::seed_post_cleaning(), and DetachedQuadStep_cff::seeds.

Referenced by MkFitProducer::produce().

38  {
39  IterationMaskIfcCmssw it_mask_ifc(trackerInfo, hit_masks);
40 
41  MkJob job({trackerInfo, itconf, eoh, eoh.refBeamSpot(), &it_mask_ifc});
42 
43  builder.begin_event(&job, nullptr, __func__);
44 
45  // Seed cleaning not done on all iterations.
46  do_seed_clean = do_seed_clean && itconf.m_seed_cleaner;
47 
48  if (do_seed_clean)
49  itconf.m_seed_cleaner(seeds, itconf, eoh.refBeamSpot());
50 
51  // Check nans in seeds -- this should not be needed when Slava fixes
52  // the track parameter coordinate transformation.
53  builder.seed_post_cleaning(seeds);
54 
55  if (itconf.m_requires_seed_hit_sorting) {
56  for (auto &s : seeds)
57  s.sortHitsByLayer(); // sort seed hits for the matched hits (I hope it works here)
58  }
59 
60  builder.find_tracks_load_seeds(seeds, do_seed_clean);
61 
62  builder.findTracksCloneEngine();
63 
64  // Pre backward-fit filtering.
65  filter_candidates_func pre_filter;
66  if (do_backward_fit && itconf.m_pre_bkfit_filter)
67  pre_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
68  return itconf.m_pre_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
69  };
70  else if (itconf.m_pre_bkfit_filter)
71  pre_filter = itconf.m_pre_bkfit_filter;
72  else if (do_backward_fit)
73  pre_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
74  // pre_filter can be null if we are not doing backward fit as nan_n_silly will be run below.
75  if (pre_filter)
76  builder.filter_comb_cands(pre_filter, true);
77 
78  job.switch_to_backward();
79 
80  if (do_backward_fit) {
81  if (itconf.m_backward_search) {
82  builder.compactifyHitStorageForBestCand(itconf.m_backward_drop_seed_hits, itconf.m_backward_fit_min_hits);
83  }
84 
85  builder.backwardFit();
86 
87  if (itconf.m_backward_search) {
88  builder.beginBkwSearch();
89  builder.findTracksCloneEngine(SteeringParams::IT_BkwSearch);
90  }
91  }
92 
93  // Post backward-fit filtering.
94  filter_candidates_func post_filter;
95  if (do_backward_fit && itconf.m_post_bkfit_filter)
96  post_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
97  return itconf.m_post_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
98  };
99  else
100  post_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
101  // post_filter is always at least doing nan_n_silly filter.
102  builder.filter_comb_cands(post_filter, true);
103 
104  if (do_backward_fit && itconf.m_backward_search)
105  builder.endBkwSearch();
106 
107  builder.export_best_comb_cands(out_tracks, true);
108 
109  if (do_remove_duplicates && itconf.m_duplicate_cleaner) {
110  itconf.m_duplicate_cleaner(out_tracks, itconf);
111  }
112 
113  builder.end_event();
114  builder.release_memory();
115  }
std::function< filter_candidates_cf > filter_candidates_func
Definition: FunctionTypes.h:28

◆ runBtpCe_MultiIter()

std::vector< double > mkfit::runBtpCe_MultiIter ( Event ev,
const EventOfHits eoh,
MkBuilder builder,
int  n 
)

Definition at line 399 of file buildtestMPlex.cc.

References analysisFilters_cff::algorithms, mkfit::Config::backwardFit, mkfit::MkBuilder::backwardFit(), mkfit::Config::backwardSearch, mkfit::MkBuilder::begin_event(), mkfit::MkBuilder::beginBkwSearch(), nano_mu_local_reco_cff::bool, mkfit::Config::cmssw_val, mkfit::MkBuilder::compactifyHitStorageForBestCand(), dtime(), mkfit::MkBuilder::end_event(), mkfit::MkBuilder::endBkwSearch(), makeMEIFBenchmarkPlots::ev, mkfit::MkBuilder::export_tracks(), mkfit::MkBuilder::filter_comb_cands(), spr::find(), mkfit::MkBuilder::find_tracks_load_seeds(), mkfit::MkBuilder::findTracksCloneEngine(), mkfit::SteeringParams::IT_BkwSearch, mkfit::Config::ItrInfo, mkfit::IterationConfig::m_backward_drop_seed_hits, mkfit::IterationConfig::m_backward_fit_min_hits, mkfit::IterationConfig::m_backward_search, mkfit::IterationConfig::m_duplicate_cleaner, mkfit::IterationMaskIfc::m_mask_vector, mkfit::IterationConfig::m_post_bkfit_filter, mkfit::IterationConfig::m_pre_bkfit_filter, mkfit::IterationConfig::m_requires_seed_hit_sorting, mkfit::IterationConfig::m_seed_cleaner, mkfit::IterationConfig::m_track_algorithm, eostools::move(), dqmiodumpmetadata::n, mkfit::StdSeq::prep_simtracks(), mkfit::StdSeq::Quality::quality_val(), mkfit::Config::quality_val, mkfit::MkBuilder::ref_tracks_nc(), mkfit::EventOfHits::refBeamSpot(), mkfit::MkBuilder::release_memory(), mkfit::StdSeq::root_val(), alignCSCRings::s, mkfit::MkBuilder::seed_post_cleaning(), DetachedQuadStep_cff::seeds, mkfit::MkBuilder::select_best_comb_cands(), mkfit::Config::sim_val, submitPVValidationJobs::t, hcalRecHitTable_cff::time, and mkfit::Config::TrkInfo.

Referenced by test_standard().

399  {
400  std::vector<double> timevec;
401  if (n <= 0)
402  return timevec;
403  timevec.resize(n + 1, 0.0);
404 
405  const bool validation_on = (Config::sim_val || Config::quality_val);
406 
407  TrackVec seeds_used;
408  TrackVec seeds1;
409 
410  if (validation_on) {
411  for (auto const &s : ev.seedTracks_) {
412  //keep seeds form the first n iterations for processing
413  if (std::find(algorithms, algorithms + n, s.algoint()) != algorithms + n)
414  seeds1.push_back(s);
415  }
416  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
417  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
418  }
419 
420  IterationMaskIfc mask_ifc;
421  TrackVec seeds;
422  TrackVec tmp_tvec;
423 
424  for (int it = 0; it <= n - 1; ++it) {
425  const IterationConfig &itconf = Config::ItrInfo[it];
426 
427  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
428  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
429 
430  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
431 
432  MkJob job({Config::TrkInfo, itconf, eoh, eoh.refBeamSpot(), &mask_ifc});
433 
434  builder.begin_event(&job, &ev, __func__);
435 
436  { // We could partition seeds once, store beg, end for each iteration in a map or vector.
437  seeds.clear();
438  int nc = 0;
439  for (auto &s : ev.seedTracks_) {
440  if (s.algoint() == itconf.m_track_algorithm) {
441  if (itconf.m_requires_seed_hit_sorting) {
442  s.sortHitsByLayer();
443  }
444  seeds.push_back(s);
445  ++nc;
446  } else if (nc > 0)
447  break;
448  }
449  }
450 
451  bool do_seed_clean = bool(itconf.m_seed_cleaner);
452 
453  if (do_seed_clean)
454  itconf.m_seed_cleaner(seeds, itconf, eoh.refBeamSpot());
455 
456  builder.seed_post_cleaning(seeds);
457 
458  // Add protection in case no seeds are found for iteration
459  if (seeds.size() <= 0)
460  continue;
461 
462  builder.find_tracks_load_seeds(seeds, do_seed_clean);
463 
464  double time = dtime();
465 
466  builder.findTracksCloneEngine();
467 
468  timevec[it] = dtime() - time;
469  timevec[n] += timevec[it];
470 
471  // Print min and max size of hots vectors of CombCands.
472  // builder.find_min_max_hots_size();
473 
474  if (validation_on)
475  seeds_used.insert(seeds_used.end(), seeds.begin(), seeds.end()); //cleaned seeds need to be stored somehow
476 
477  // Pre backward-fit filtering.
478  // Note -- slightly different logic than run_OneIteration as we always do nan filters for
479  // export for validation.
480  filter_candidates_func pre_filter;
481  if (itconf.m_pre_bkfit_filter)
482  pre_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
483  return itconf.m_pre_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
484  };
485  else
486  pre_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
487  // pre_filter is always at least doing nan_n_silly filter.
488  builder.filter_comb_cands(pre_filter, true);
489 
490  builder.select_best_comb_cands();
491 
492  {
493  builder.export_tracks(tmp_tvec);
494  if (itconf.m_duplicate_cleaner)
495  itconf.m_duplicate_cleaner(builder.ref_tracks_nc(), itconf);
496  ev.candidateTracks_.reserve(ev.candidateTracks_.size() + tmp_tvec.size());
497  for (auto &&t : tmp_tvec)
498  ev.candidateTracks_.emplace_back(std::move(t));
499  tmp_tvec.clear();
500  }
501 
502  job.switch_to_backward();
503 
504  // now do backwards fit... do we want to time this section?
505  if (Config::backwardFit) {
506  // a) TrackVec version:
507  // builder.backwardFitBH();
508 
509  // b) Version that runs on CombCand / TrackCand
510  const bool do_backward_search = Config::backwardSearch && itconf.m_backward_search;
511 
512  // We copy seed-hits into Candidates ... now we have to remove them so backward fit stops
513  // before reaching seeding region. Ideally, we wouldn't add them in the first place but
514  // if we want to export full tracks above we need to hold on to them (alternatively, we could
515  // have a pointer to seed track in CombCandidate and copy them from there).
516  if (do_backward_search)
517  builder.compactifyHitStorageForBestCand(itconf.m_backward_drop_seed_hits, itconf.m_backward_fit_min_hits);
518 
519  builder.backwardFit();
520 
521  if (do_backward_search) {
522  builder.beginBkwSearch();
523  builder.findTracksCloneEngine(SteeringParams::IT_BkwSearch);
524  }
525 
526  // Post backward-fit filtering.
527  // Note -- slightly different logic than run_OneIteration as we export both pre and post
528  // backward-fit tracks.
529  filter_candidates_func post_filter;
530  if (itconf.m_post_bkfit_filter)
531  post_filter = [&](const TrackCand &tc, const MkJob &jb) -> bool {
532  return itconf.m_post_bkfit_filter(tc, jb) && StdSeq::qfilter_nan_n_silly<TrackCand>(tc, jb);
533  };
534  else
535  post_filter = StdSeq::qfilter_nan_n_silly<TrackCand>;
536  // post_filter is always at least doing nan_n_silly filter.
537  builder.filter_comb_cands(post_filter, true);
538 
539  if (do_backward_search)
540  builder.endBkwSearch();
541 
542  builder.select_best_comb_cands(true); // true -> clear m_tracks as they were already filled once above
543 
544  if (itconf.m_duplicate_cleaner)
545  itconf.m_duplicate_cleaner(builder.ref_tracks_nc(), itconf);
546 
547  builder.export_tracks(ev.fitTracks_);
548  }
549 
550  builder.end_event();
551  }
552 
553  // MIMI - Fake back event pointer for final processing (that should be done elsewhere)
554  MkJob job({Config::TrkInfo, Config::ItrInfo[0], eoh, eoh.refBeamSpot()});
555  builder.begin_event(&job, &ev, __func__);
556 
557  if (validation_on) {
559  //swap for the cleaned seeds
560  ev.seedTracks_.swap(seeds_used);
561  }
562 
563  check_nan_n_silly_candidates(ev);
564 
566  check_nan_n_silly_bkfit(ev);
567 
568  // validation section
569  if (Config::quality_val) {
570  StdSeq::Quality qval;
571  qval.quality_val(&ev);
572  } else if (Config::sim_val || Config::cmssw_val) {
574  }
575 
576  // ev.print_tracks(ev.candidateTracks_, true);
577 
578  // MIMI Unfake.
579  builder.end_event();
580 
581  // In CMSSW runOneIter we now release memory for comb-cands:
582  builder.release_memory();
583 
584  return timevec;
585  }
void root_val(Event *event)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
void prep_simtracks(Event *event)
std::function< filter_candidates_cf > filter_candidates_func
Definition: FunctionTypes.h:28
TrackerInfo TrkInfo
IterationsInfo ItrInfo
std::vector< Track > TrackVec
double dtime()
def move(src, dest)
Definition: eostools.py:511

◆ runBuildingTestPlexBestHit()

double mkfit::runBuildingTestPlexBestHit ( Event ev,
const EventOfHits eoh,
MkBuilder builder 
)

Definition at line 108 of file buildtestMPlex.cc.

References analysisFilters_cff::algorithms, mkfit::Config::backwardFit, mkfit::MkBuilder::backwardFitBH(), mkfit::MkBuilder::begin_event(), mkfit::Config::cmssw_val, dtime(), mkfit::MkBuilder::end_event(), makeMEIFBenchmarkPlots::ev, spr::find(), mkfit::MkBuilder::find_tracks_load_seeds_BH(), mkfit::MkBuilder::findTracksBestHit(), mkfit::Config::ItrInfo, mkfit::IterationMaskIfc::m_mask_vector, mkfit::IterationConfig::m_track_algorithm, mkfit::StdSeq::Quality::quality_val(), mkfit::Config::quality_val, mkfit::MkBuilder::ref_tracks(), mkfit::EventOfHits::refBeamSpot(), mkfit::StdSeq::root_val(), alignCSCRings::s, mkfit::Config::sim_val, hcalRecHitTable_cff::time, and mkfit::Config::TrkInfo.

Referenced by test_standard().

108  {
109  const IterationConfig &itconf = Config::ItrInfo[0];
110 
111  const bool validation_on = (Config::sim_val || Config::quality_val);
112 
113  if (validation_on) {
114  TrackVec seeds1;
115 
116  unsigned int algorithms[] = {4}; //only initialStep
117 
118  for (auto const &s : ev.seedTracks_) {
119  //keep seeds form the first iteration for processing
120  if (std::find(algorithms, algorithms + 1, s.algoint()) != algorithms + 1)
121  seeds1.push_back(s);
122  }
123  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
124  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
125  }
126 
127  IterationMaskIfc mask_ifc;
128 
129  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
130  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
131 
132  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
133 
134  MkJob job({Config::TrkInfo, itconf, eoh, eoh.refBeamSpot(), &mask_ifc});
135 
136  builder.begin_event(&job, &ev, __func__);
137 
138  bool seeds_sorted = false;
139  // CCCC builder.PrepareSeeds();
140 
141  // EventOfCandidates event_of_cands;
142  builder.find_tracks_load_seeds_BH(ev.seedTracks_, seeds_sorted);
143 
144 #ifdef USE_VTUNE_PAUSE
145  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
146  __itt_resume();
147 #endif
148 
149  double time = dtime();
150 
151  builder.findTracksBestHit();
152 
153  time = dtime() - time;
154 
155 #ifdef USE_VTUNE_PAUSE
156  __itt_pause();
157  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
158 #endif
159 
160  // Hack, get the tracks out.
161  ev.candidateTracks_ = builder.ref_tracks();
162 
163  // For best hit, the candidateTracks_ vector is the direct input to the backward fit so only need to do clean_duplicates once
165  //Mark tracks as duplicates; if within CMSSW, remove duplicate tracks before backward fit
166  // CCCC if (Config::removeDuplicates) {
167  // CCCC StdSeq::clean_duplicates(ev.candidateTracks_);
168  // CCCC }
169  }
170 
171  job.switch_to_backward();
172 
173  // now do backwards fit... do we want to time this section?
174  if (Config::backwardFit) {
175  builder.backwardFitBH();
176  ev.fitTracks_ = builder.ref_tracks();
177  }
178 
179  if (Config::quality_val) {
180  StdSeq::Quality qval;
181  qval.quality_val(&ev);
182  } else if (Config::sim_val || Config::cmssw_val) {
184  }
185 
186  builder.end_event();
187 
188  // ev.print_tracks(ev.candidateTracks_, true);
189 
190  return time;
191  }
void root_val(Event *event)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
TrackerInfo TrkInfo
IterationsInfo ItrInfo
std::vector< Track > TrackVec
double dtime()

◆ runBuildingTestPlexCloneEngine()

double mkfit::runBuildingTestPlexCloneEngine ( Event ev,
const EventOfHits eoh,
MkBuilder builder 
)

Definition at line 286 of file buildtestMPlex.cc.

References analysisFilters_cff::algorithms, mkfit::Config::backwardFit, mkfit::MkBuilder::backwardFitBH(), mkfit::MkBuilder::begin_event(), mkfit::Config::cmssw_val, dtime(), mkfit::MkBuilder::end_event(), makeMEIFBenchmarkPlots::ev, mkfit::MkBuilder::export_best_comb_cands(), spr::find(), mkfit::MkBuilder::find_tracks_load_seeds(), mkfit::MkBuilder::findTracksCloneEngine(), mkfit::Config::ItrInfo, mkfit::IterationMaskIfc::m_mask_vector, mkfit::IterationConfig::m_track_algorithm, mkfit::StdSeq::Quality::quality_val(), mkfit::Config::quality_val, mkfit::MkBuilder::ref_tracks(), mkfit::EventOfHits::refBeamSpot(), mkfit::StdSeq::root_val(), alignCSCRings::s, mkfit::MkBuilder::select_best_comb_cands(), mkfit::Config::sim_val, hcalRecHitTable_cff::time, and mkfit::Config::TrkInfo.

Referenced by test_standard().

286  {
287  const IterationConfig &itconf = Config::ItrInfo[0];
288 
289  const bool validation_on = (Config::sim_val || Config::quality_val);
290 
291  if (validation_on) {
292  TrackVec seeds1;
293 
294  unsigned int algorithms[] = {4}; //only initialStep
295 
296  for (auto const &s : ev.seedTracks_) {
297  //keep seeds form the first iteration for processing
298  if (std::find(algorithms, algorithms + 1, s.algoint()) != algorithms + 1)
299  seeds1.push_back(s);
300  }
301  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
302  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
303  }
304 
305  IterationMaskIfc mask_ifc;
306 
307  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
308  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
309 
310  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
311 
312  MkJob job({Config::TrkInfo, itconf, eoh, eoh.refBeamSpot(), &mask_ifc});
313 
314  builder.begin_event(&job, &ev, __func__);
315 
316  bool seeds_sorted = false;
317  // CCCC builder.PrepareSeeds();
318 
319  builder.find_tracks_load_seeds(ev.seedTracks_, seeds_sorted);
320 
321 #ifdef USE_VTUNE_PAUSE
322  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
323  __itt_resume();
324 #endif
325 
326  double time = dtime();
327 
328  builder.findTracksCloneEngine();
329 
330  time = dtime() - time;
331 
332 #ifdef USE_VTUNE_PAUSE
333  __itt_pause();
334  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
335 #endif
336 
337  check_nan_n_silly_candidates(ev);
338 
339  // first store candidate tracks - needed for BH backward fit and root_validation
340  builder.export_best_comb_cands(ev.candidateTracks_);
341 
342  job.switch_to_backward();
343 
344  // now do backwards fit... do we want to time this section?
345  if (Config::backwardFit) {
346  // a) TrackVec version:
347  builder.select_best_comb_cands();
348  builder.backwardFitBH();
349  ev.fitTracks_ = builder.ref_tracks();
350 
351  // b) Version that runs on CombCand / TrackCand
352  // builder.backwardFit();
353  // builder.quality_store_tracks(ev.fitTracks_);
354 
355  check_nan_n_silly_bkfit(ev);
356  }
357 
358  // CCCC StdSeq::handle_duplicates(&ev);
359 
360  // validation section
361  if (Config::quality_val) {
362  StdSeq::Quality qval;
363  qval.quality_val(&ev);
364  } else if (Config::sim_val || Config::cmssw_val) {
366  }
367 
368  builder.end_event();
369 
370  // ev.print_tracks(ev.candidateTracks_, true);
371 
372  return time;
373  }
void root_val(Event *event)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
TrackerInfo TrkInfo
IterationsInfo ItrInfo
std::vector< Track > TrackVec
double dtime()

◆ runBuildingTestPlexDumbCMSSW()

void mkfit::runBuildingTestPlexDumbCMSSW ( Event ev,
const EventOfHits eoh,
MkBuilder builder 
)

Definition at line 90 of file buildtestMPlex.cc.

References mkfit::MkBuilder::begin_event(), mkfit::MkBuilder::end_event(), makeMEIFBenchmarkPlots::ev, mkfit::Config::ItrInfo, mkfit::EventOfHits::refBeamSpot(), mkfit::StdSeq::root_val_dumb_cmssw(), mkfit::Config::sim_val_for_cmssw, and mkfit::Config::TrkInfo.

Referenced by test_standard().

90  {
91  const IterationConfig &itconf = Config::ItrInfo[0];
92 
93  MkJob job({Config::TrkInfo, itconf, eoh, eoh.refBeamSpot()});
94 
95  builder.begin_event(&job, &ev, __func__);
96 
99  }
100 
101  builder.end_event();
102  }
TrackerInfo TrkInfo
IterationsInfo ItrInfo
void root_val_dumb_cmssw(Event *event)

◆ runBuildingTestPlexStandard()

double mkfit::runBuildingTestPlexStandard ( Event ev,
const EventOfHits eoh,
MkBuilder builder 
)

Definition at line 197 of file buildtestMPlex.cc.

References analysisFilters_cff::algorithms, mkfit::Config::backwardFit, mkfit::MkBuilder::backwardFitBH(), mkfit::MkBuilder::begin_event(), mkfit::Config::cmssw_val, dtime(), mkfit::MkBuilder::end_event(), makeMEIFBenchmarkPlots::ev, mkfit::MkBuilder::export_best_comb_cands(), spr::find(), mkfit::MkBuilder::find_tracks_load_seeds(), mkfit::MkBuilder::findTracksStandard(), mkfit::Config::ItrInfo, mkfit::IterationMaskIfc::m_mask_vector, mkfit::IterationConfig::m_track_algorithm, mkfit::StdSeq::Quality::quality_val(), mkfit::Config::quality_val, mkfit::MkBuilder::ref_tracks(), mkfit::EventOfHits::refBeamSpot(), mkfit::StdSeq::root_val(), alignCSCRings::s, mkfit::MkBuilder::select_best_comb_cands(), mkfit::Config::sim_val, hcalRecHitTable_cff::time, and mkfit::Config::TrkInfo.

Referenced by test_standard().

197  {
198  const IterationConfig &itconf = Config::ItrInfo[0];
199 
200  const bool validation_on = (Config::sim_val || Config::quality_val);
201 
202  if (validation_on) {
203  TrackVec seeds1;
204 
205  unsigned int algorithms[] = {4}; //only initialStep
206 
207  for (auto const &s : ev.seedTracks_) {
208  //keep seeds form the first iteration for processing
209  if (std::find(algorithms, algorithms + 1, s.algoint()) != algorithms + 1)
210  seeds1.push_back(s);
211  }
212  ev.seedTracks_.swap(seeds1); //necessary for the validation - PrepareSeeds
213  ev.relabel_bad_seedtracks(); //necessary for the validation - PrepareSeeds
214  }
215 
216  IterationMaskIfc mask_ifc;
217 
218  // To disable hit-masks, pass nullptr in place of &mask_ifc to MkJob ctor
219  // and optionally comment out ev.fill_hitmask_bool_vectors() call.
220 
221  ev.fill_hitmask_bool_vectors(itconf.m_track_algorithm, mask_ifc.m_mask_vector);
222 
223  MkJob job({Config::TrkInfo, itconf, eoh, eoh.refBeamSpot(), &mask_ifc});
224 
225  builder.begin_event(&job, &ev, __func__);
226 
227  bool seeds_sorted = false;
228  // CCCC builder.PrepareSeeds();
229 
230  builder.find_tracks_load_seeds(ev.seedTracks_, seeds_sorted);
231 
232 #ifdef USE_VTUNE_PAUSE
233  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
234  __itt_resume();
235 #endif
236 
237  double time = dtime();
238 
239  builder.findTracksStandard();
240 
241  time = dtime() - time;
242 
243 #ifdef USE_VTUNE_PAUSE
244  __itt_pause();
245  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
246 #endif
247 
248  check_nan_n_silly_candidates(ev);
249 
250  // first store candidate tracks
251  builder.export_best_comb_cands(ev.candidateTracks_);
252 
253  job.switch_to_backward();
254 
255  // now do backwards fit... do we want to time this section?
256  if (Config::backwardFit) {
257  // Using the TrackVec version until we home in on THE backward fit etc.
258  // builder.backwardFit();
259  builder.select_best_comb_cands();
260  builder.backwardFitBH();
261  ev.fitTracks_ = builder.ref_tracks();
262 
263  check_nan_n_silly_bkfit(ev);
264  }
265 
266  // CCCC StdSeq::handle_duplicates(&ev);
267 
268  if (Config::quality_val) {
269  StdSeq::Quality qval;
270  qval.quality_val(&ev);
271  } else if (Config::sim_val || Config::cmssw_val) {
273  }
274 
275  builder.end_event();
276 
277  // ev.print_tracks(ev.candidateTracks_, true);
278 
279  return time;
280  }
void root_val(Event *event)
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
TrackerInfo TrkInfo
IterationsInfo ItrInfo
std::vector< Track > TrackVec
double dtime()

◆ runFittingTestPlex()

double mkfit::runFittingTestPlex ( Event ev,
std::vector< Track > &  rectracks 
)

Definition at line 40 of file fittestMPlex.cc.

References submitPVResolutionJobs::count, dtime(), makeMEIFBenchmarkPlots::ev, mkfit::Config::fit_val, g_exe_ctx, mps_fire::i, mkfit::ExecutionContext::m_fitters, SiStripPI::max, mkfit::Config::nLayers, NN, mkfit::Config::numSeedsPerTask, mkfit::Config::numThreadsFinder, mkfit::ExecutionContext::populate(), and hcalRecHitTable_cff::time.

40  {
42  std::vector<Track>& simtracks = ev.simTracks_;
43 
44  const int Nhits = Config::nLayers;
45  // XXX What if there's a missing / double layer?
46  // Eventually, should sort track vector by number of hits!
47  // And pass the number in on each "setup" call.
48  // Reserves should be made for maximum possible number (but this is just
49  // measurments errors, params).
50 
51  int theEnd = simtracks.size();
52  int count = (theEnd + NN - 1) / NN;
53 
54 #ifdef USE_VTUNE_PAUSE
55  __SSC_MARK(0x111); // use this to resume Intel SDE at the same point
56  __itt_resume();
57 #endif
58 
59  double time = dtime();
60 
61  tbb::parallel_for(tbb::blocked_range<int>(0, count, std::max(1, Config::numSeedsPerTask / NN)),
62  [&](const tbb::blocked_range<int>& i) {
63  std::unique_ptr<MkFitter, decltype(retfitr)> mkfp(g_exe_ctx.m_fitters.GetFromPool(), retfitr);
64  mkfp->setNhits(Nhits);
65  for (int it = i.begin(); it < i.end(); ++it) {
66  int itrack = it * NN;
67  int end = itrack + NN;
68  /*
69  * MT, trying to slurp and fit at the same time ...
70  if (theEnd < end) {
71  end = theEnd;
72  mkfp->inputTracksAndHits(simtracks, ev.layerHits_, itrack, end);
73  } else {
74  mkfp->slurpInTracksAndHits(simtracks, ev.layerHits_, itrack, end); // only safe for a full matriplex
75  }
76 
77  if (Config::cf_fitting) mkfp->ConformalFitTracks(true, itrack, end);
78  mkfp->FitTracks(end - itrack, &ev, true);
79  */
80 
81  mkfp->inputTracksForFit(simtracks, itrack, end);
82 
83  // XXXX MT - for this need 3 points in ... right
84  // XXXX if (Config::cf_fitting) mkfp->ConformalFitTracks(true, itrack, end);
85 
86  mkfp->fitTracksWithInterSlurp(ev.layerHits_, end - itrack);
87 
88  mkfp->outputFittedTracks(rectracks, itrack, end);
89  }
90  });
91 
92  time = dtime() - time;
93 
94 #ifdef USE_VTUNE_PAUSE
95  __itt_pause();
96  __SSC_MARK(0x222); // use this to pause Intel SDE at the same point
97 #endif
98 
99  if (Config::fit_val)
100  ev.validate();
101 
102  return time;
103  }
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
ExecutionContext g_exe_ctx
Definition: MkBuilder.cc:49
constexpr int numThreadsFinder
Definition: Config.h:85
Pool< MkFitter > m_fitters
Definition: MkBuilder.cc:39
void populate(int n_thr)
Definition: MkBuilder.cc:42
double dtime()
constexpr int numSeedsPerTask
Definition: Config.h:87

◆ sincos4()

void mkfit::sincos4 ( const float  x,
float &  sin,
float &  cos 
)
inline

Definition at line 13 of file Matrix.h.

References funct::cos(), funct::sin(), and x.

Referenced by helixAtRFromIterativeCCSFullJac(), and helixAtZ().

13  {
14  // Had this writen with explicit division by factorial.
15  // The *whole* fitting test ran like 2.5% slower on MIC, sigh.
16 
17  const float x2 = x * x;
18  cos = 1.f - 0.5f * x2 + 0.04166667f * x2 * x2;
19  sin = x - 0.16666667f * x * x2;
20  }
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
float x

◆ sortByEta()

bool mkfit::sortByEta ( const Hit hit1,
const Hit hit2 
)
inline

Definition at line 25 of file buildtestMPlex.cc.

References mkfit::Hit::eta().

25 { return hit1.eta() < hit2.eta(); }

◆ sortByHitsChi2() [1/2]

bool mkfit::sortByHitsChi2 ( const std::pair< Track, TrackState > &  cand1,
const std::pair< Track, TrackState > &  cand2 
)
inline

Definition at line 14 of file buildtestMPlex.cc.

14  {
15  if (cand1.first.nFoundHits() == cand2.first.nFoundHits())
16  return cand1.first.chi2() < cand2.first.chi2();
17 
18  return cand1.first.nFoundHits() > cand2.first.nFoundHits();
19  }

◆ sortByHitsChi2() [2/2]

bool mkfit::sortByHitsChi2 ( const Track cand1,
const Track cand2 
)
inline

Definition at line 592 of file Track.h.

References mkfit::TrackBase::chi2(), and mkfit::Track::nFoundHits().

592  {
593  if (cand1.nFoundHits() == cand2.nFoundHits())
594  return cand1.chi2() < cand2.chi2();
595  return cand1.nFoundHits() > cand2.nFoundHits();
596  }

◆ sortByPhi()

bool mkfit::sortByPhi ( const Hit hit1,
const Hit hit2 
)
inline

Definition at line 21 of file buildtestMPlex.cc.

References mkfit::Hit::x(), and mkfit::Hit::y().

21  {
22  return std::atan2(hit1.y(), hit1.x()) < std::atan2(hit2.y(), hit2.x());
23  }

◆ sortByScoreCand()

bool mkfit::sortByScoreCand ( const Track cand1,
const Track cand2 
)
inline

Definition at line 598 of file Track.h.

References mkfit::TrackBase::score().

Referenced by mkfit::TTreeValidation::mapRefTkToRecoTks().

598 { return cand1.score() > cand2.score(); }

◆ sortByScoreStruct()

bool mkfit::sortByScoreStruct ( const IdxChi2List cand1,
const IdxChi2List cand2 
)
inline

Definition at line 600 of file Track.h.

References mkfit::IdxChi2List::score.

600  {
601  return cand1.score > cand2.score;
602  }

◆ sortByScoreTrackCand()

bool mkfit::sortByScoreTrackCand ( const TrackCand cand1,
const TrackCand cand2 
)
inline

Definition at line 254 of file TrackStructures.h.

References mkfit::TrackBase::score().

Referenced by mkfit::CombCandidate::mergeCandsAndBestShortOne(), and mkfit::CandCloner::processSeedRange().

254  {
255  return cand1.score() > cand2.score();
256  }

◆ sortByZ()

bool mkfit::sortByZ ( const Hit hit1,
const Hit hit2 
)
inline

Definition at line 43 of file buildtestMPlex.cc.

References mkfit::Hit::z().

43 { return hit1.z() < hit2.z(); }
double z
global z - AlignmentGeometry::z0, mm
Definition: HitCollection.h:27

◆ sortIDsByChi2()

bool mkfit::sortIDsByChi2 ( const idchi2Pair cand1,
const idchi2Pair cand2 
)
inline

Definition at line 235 of file TrackExtra.cc.

Referenced by mkfit::TrackExtra::setCMSSWTrackIDInfoByTrkParams().

235 { return cand1.second < cand2.second; }

◆ sortTracksByEta()

bool mkfit::sortTracksByEta ( const Track track1,
const Track track2 
)
inline

Definition at line 27 of file buildtestMPlex.cc.

References mkfit::TrackBase::momEta().

27 { return track1.momEta() < track2.momEta(); }

◆ sortTracksByPhi()

bool mkfit::sortTracksByPhi ( const Track track1,
const Track track2 
)
inline

Definition at line 29 of file buildtestMPlex.cc.

References mkfit::TrackBase::momPhi().

29 { return track1.momPhi() < track2.momPhi(); }

◆ sqr()

template<typename T >
T mkfit::sqr ( T  x)
inline

Definition at line 14 of file Hit.h.

References x.

14  {
15  return x * x;
16  }
float x

◆ squashPhiGeneral() [1/2]

float mkfit::squashPhiGeneral ( float  phi)
inline

◆ squashPhiGeneral() [2/2]

template<typename Vector >
void mkfit::squashPhiGeneral ( Vector v)
inline

Definition at line 638 of file Track.h.

References mps_fire::i, squashPhiGeneral(), and findQualityFiles::v.

638  {
639  const int i = v.kSize - 2; // phi index
640  v[i] = squashPhiGeneral(v[i]);
641  }
void squashPhiGeneral(Vector &v)
Definition: Track.h:638

◆ squashPhiMinimal()

float mkfit::squashPhiMinimal ( float  phi)
inline

◆ squashPhiMPlex()

void mkfit::squashPhiMPlex ( MPlexLV par,
const int  N_proc 
)
inline

Definition at line 10 of file PropagationMPlex.h.

References dqmiodumpmetadata::n, NN, mkfit::Const::PI, and mkfit::Const::TwoPI.

Referenced by kalmanOperation(), kalmanOperationEndcap(), propagateHelixToRMPlex(), and propagateHelixToZMPlex().

10  {
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  }
constexpr float TwoPI
Definition: Config.h:8
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
#define PI
Definition: QcdUeDQM.h:37

◆ squashPhiMPlexGeneral()

void mkfit::squashPhiMPlexGeneral ( MPlexLV par,
const int  N_proc 
)
inline

Definition at line 20 of file PropagationMPlex.h.

References f, mkfit::Const::InvPI, dqmiodumpmetadata::n, NN, mkfit::Const::PI, and mkfit::Const::TwoPI.

20  {
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  }
constexpr float TwoPI
Definition: Config.h:8
constexpr Matriplex::idx_t NN
Definition: Matrix.h:43
double f[11][100]
#define PI
Definition: QcdUeDQM.h:37
constexpr float InvPI
Definition: Config.h:12

◆ to_json() [1/12]

void mkfit::to_json ( nlohmann::ordered_json &  nlohmann_json_j,
const mkfit::LayerControl nlohmann_json_t 
)
inline

Definition at line 37 of file IterationConfig.cc.

◆ to_json() [2/12]

void mkfit::to_json ( nlohmann::json nlohmann_json_j,
const mkfit::LayerControl nlohmann_json_t 
)
inline

Definition at line 37 of file IterationConfig.cc.

Referenced by mkfit::ConfigJson::save_Iterations().

◆ to_json() [3/12]

void mkfit::to_json ( nlohmann::ordered_json &  nlohmann_json_j,
const mkfit::SteeringParams nlohmann_json_t 
)
inline

Definition at line 45 of file IterationConfig.cc.

◆ to_json() [4/12]

void mkfit::to_json ( nlohmann::json nlohmann_json_j,
const mkfit::SteeringParams nlohmann_json_t 
)
inline

Definition at line 45 of file IterationConfig.cc.

◆ to_json() [5/12]

void mkfit::to_json ( nlohmann::ordered_json &  nlohmann_json_j,
const mkfit::IterationLayerConfig nlohmann_json_t 
)
inline

Definition at line 54 of file IterationConfig.cc.

◆ to_json() [6/12]

void mkfit::to_json ( nlohmann::json nlohmann_json_j,
const mkfit::IterationLayerConfig nlohmann_json_t 
)
inline

Definition at line 54 of file IterationConfig.cc.

◆ to_json() [7/12]

void mkfit::to_json ( nlohmann::ordered_json &  nlohmann_json_j,
const mkfit::IterationParams nlohmann_json_t 
)
inline

Definition at line 66 of file IterationConfig.cc.

◆ to_json() [8/12]

void mkfit::to_json ( nlohmann::json nlohmann_json_j,
const mkfit::IterationParams nlohmann_json_t 
)
inline

Definition at line 66 of file IterationConfig.cc.

◆ to_json() [9/12]

void mkfit::to_json ( nlohmann::ordered_json &  nlohmann_json_j,
const mkfit::IterationConfig nlohmann_json_t 
)
inline

Definition at line 99 of file IterationConfig.cc.

◆ to_json() [10/12]

void mkfit::to_json ( nlohmann::json nlohmann_json_j,
const mkfit::IterationConfig nlohmann_json_t 
)
inline

Definition at line 99 of file IterationConfig.cc.

◆ to_json() [11/12]

void mkfit::to_json ( nlohmann::json nlohmann_json_j,
const mkfit::IterationsInfo nlohmann_json_t 
)
inline

Definition at line 102 of file IterationConfig.cc.

108 {

◆ to_json() [12/12]

void mkfit::to_json ( nlohmann::ordered_json &  nlohmann_json_j,
const mkfit::IterationsInfo nlohmann_json_t 
)
inline

Definition at line 102 of file IterationConfig.cc.

References CMS_SA_ALLOW, and mutex.

108 {

Variable Documentation

◆ g_debug

bool mkfit::g_debug = true

◆ g_exe_ctx

ExecutionContext mkfit::g_exe_ctx

◆ HH

constexpr Matriplex::idx_t mkfit::HH = 3

Definition at line 46 of file Matrix.h.

Referenced by L1TConfigDumper::analyze().

◆ LL

constexpr Matriplex::idx_t mkfit::LL = 6

◆ MPlexHitIdxMax

constexpr int mkfit::MPlexHitIdxMax = 16
static

Definition at line 12 of file MkFitter.h.

◆ NN

constexpr Matriplex::idx_t mkfit::NN = 8