File indexing completed on 2024-04-06 12:28:26
0001 #ifndef RecoTracker_MkFitCore_standalone_TrackExtra_h
0002 #define RecoTracker_MkFitCore_standalone_TrackExtra_h
0003
0004 #include "RecoTracker/MkFitCore/interface/Track.h"
0005
0006 #include <array>
0007 #include <map>
0008 #include <unordered_map>
0009 #include <unordered_set>
0010
0011 namespace mkfit {
0012
0013
0014
0015
0016 struct ReducedTrack
0017 {
0018 public:
0019 ReducedTrack() {}
0020 ReducedTrack(const int label, const int seedID, const SVector2& params, const float phi, const HitLayerMap& hitmap)
0021 : label_(label), seedID_(seedID), parameters_(params), phi_(phi), hitLayerMap_(hitmap) {}
0022
0023 int label() const { return label_; }
0024 int seedID() const { return seedID_; }
0025 const SVector2& parameters() const { return parameters_; }
0026 float momPhi() const { return phi_; }
0027 const HitLayerMap& hitLayerMap() const { return hitLayerMap_; }
0028
0029 int label_;
0030 int seedID_;
0031 SVector2 parameters_;
0032 float phi_;
0033 HitLayerMap hitLayerMap_;
0034 };
0035 typedef std::vector<ReducedTrack> RedTrackVec;
0036
0037 typedef std::map<int, std::map<int, std::vector<int>>> LayIdxIDVecMapMap;
0038 typedef std::map<int, std::unordered_set<int>> TrkIDLaySetMap;
0039 typedef std::array<int, 2> PairIdx;
0040 typedef std::vector<PairIdx> PairIdxVec;
0041 typedef std::array<int, 3> TripletIdx;
0042 typedef std::vector<TripletIdx> TripletIdxVec;
0043
0044
0045
0046
0047
0048 class TrackExtra;
0049 typedef std::vector<TrackExtra> TrackExtraVec;
0050
0051 class TrackExtra {
0052 public:
0053 TrackExtra() : seedID_(std::numeric_limits<int>::max()) {}
0054 TrackExtra(int seedID) : seedID_(seedID) {}
0055
0056 int modifyRefTrackID(const int foundHits,
0057 const int minHits,
0058 const TrackVec& reftracks,
0059 const int trueID,
0060 const int duplicate,
0061 int refTrackID);
0062 void setMCTrackIDInfo(const Track& trk,
0063 const std::vector<HitVec>& layerHits,
0064 const MCHitInfoVec& globalHitInfo,
0065 const TrackVec& simtracks,
0066 const bool isSeed,
0067 const bool isPure);
0068 void setCMSSWTrackIDInfoByTrkParams(const Track& trk,
0069 const std::vector<HitVec>& layerHits,
0070 const TrackVec& cmsswtracks,
0071 const RedTrackVec& redcmsswtracks,
0072 const bool isBkFit);
0073 void setCMSSWTrackIDInfoByHits(const Track& trk,
0074 const LayIdxIDVecMapMap& cmsswHitIDMap,
0075 const TrackVec& cmsswtracks,
0076 const TrackExtraVec& cmsswextras,
0077 const RedTrackVec& redcmsswtracks,
0078 const int cmsswlabel);
0079 int mcTrackID() const { return mcTrackID_; }
0080 int nHitsMatched() const { return nHitsMatched_; }
0081 float fracHitsMatched() const { return fracHitsMatched_; }
0082 int seedID() const { return seedID_; }
0083 bool isDuplicate() const { return isDuplicate_; }
0084 int duplicateID() const { return duplicateID_; }
0085 void setDuplicateInfo(int duplicateID, bool isDuplicate) {
0086 duplicateID_ = duplicateID;
0087 isDuplicate_ = isDuplicate;
0088 }
0089 int cmsswTrackID() const { return cmsswTrackID_; }
0090 float helixChi2() const { return helixChi2_; }
0091 float dPhi() const { return dPhi_; }
0092 void findMatchingSeedHits(const Track& reco_trk, const Track& seed_trk, const std::vector<HitVec>& layerHits);
0093 bool isSeedHit(const int lyr, const int idx) const;
0094 int nMatchedSeedHits() const { return matchedSeedHits_.size(); }
0095
0096 void setmcTrackID(int mcTrackID) { mcTrackID_ = mcTrackID; }
0097 void setseedID(int seedID) { seedID_ = seedID; }
0098
0099 void addAlgo(int algo) { seedAlgos_.push_back(algo); }
0100 const std::vector<int> seedAlgos() const { return seedAlgos_; }
0101
0102 private:
0103 friend class Track;
0104
0105 int mcTrackID_;
0106 int nHitsMatched_;
0107 float fracHitsMatched_;
0108 int seedID_;
0109 int duplicateID_;
0110 bool isDuplicate_;
0111 int cmsswTrackID_;
0112 float helixChi2_;
0113 float dPhi_;
0114 HoTVec matchedSeedHits_;
0115 std::vector<int> seedAlgos_;
0116 };
0117
0118 typedef std::vector<TrackState> TSVec;
0119 typedef std::vector<TSVec> TkIDToTSVecVec;
0120 typedef std::vector<std::pair<int, TrackState>> TSLayerPairVec;
0121 typedef std::vector<std::pair<int, float>> FltLayerPairVec;
0122
0123
0124 typedef std::unordered_map<int, int> TkIDToTkIDMap;
0125 typedef std::unordered_map<int, std::vector<int>> TkIDToTkIDVecMap;
0126 typedef std::unordered_map<int, TrackState> TkIDToTSMap;
0127 typedef std::unordered_map<int, TSLayerPairVec> TkIDToTSLayerPairVecMap;
0128
0129 }
0130
0131 #endif