CMS 3D CMS Logo

MkFitHitIndexMap.h
Go to the documentation of this file.
1 #ifndef RecoTracker_MkFit_MkFitHitIndexMap_h
2 #define RecoTracker_MkFit_MkFitHitIndexMap_h
3 
5 
6 #include <vector>
7 
8 class TrackingRecHit;
9 
16 public:
17  // This class holds the index and layer of a hit in the hit data
18  // structure passed to mkFit
19  class MkFitHit {
20  public:
21  MkFitHit() = default;
22  explicit MkFitHit(int i, int l) : index_{i}, layer_{l} {}
23 
24  int index() const { return index_; }
25  int layer() const { return layer_; }
26 
27  private:
28  int index_ = -1;
29  int layer_ = -1;
30  };
31 
32  MkFitHitIndexMap() = default;
33 
38 
45  void increaseLayerSize(int layer, size_t additionalSize);
46 
56 
58  const MkFitHit& mkFitHit(edm::ProductID id, size_t clusterIndex) const;
59 
61  const TrackingRecHit* hitPtr(MkFitHit hit) const { return mkFitToCMSSW_.at(hit.layer()).at(hit.index()).ptr; }
62 
64  size_t clusterIndex(MkFitHit hit) const { return mkFitToCMSSW_.at(hit.layer()).at(hit.index()).clusterIndex; }
65 
66 private:
67  // Helper struct to map (edm::ProductID, cluster index) to MkFitHit
69  explicit ClusterToMkFitHit(edm::ProductID id) : productID(id) {}
71  std::vector<MkFitHit> mkFitHits; // indexed by cluster index
72  };
73 
74  // Helper struct to map MkFitHit to (TrackingRecHit *, cluster index)
75  struct CMSSWHit {
76  CMSSWHit() = default;
77  explicit CMSSWHit(const TrackingRecHit* p, size_t i) : ptr{p}, clusterIndex{i} {}
78  const TrackingRecHit* ptr = nullptr;
79  size_t clusterIndex = 0;
80  };
81 
82  std::vector<ClusterToMkFitHit> cmsswToMkFit_; // mapping from CMSSW(ProductID, cluster index) -> mkFit(index, layer)
83  std::vector<std::vector<CMSSWHit> > mkFitToCMSSW_; // reverse mapping, mkFit(layer, index) -> CMSSW hit
84 };
85 
86 #endif
void increaseLayerSize(int layer, size_t additionalSize)
std::vector< ClusterToMkFitHit > cmsswToMkFit_
void insert(edm::ProductID id, size_t clusterIndex, MkFitHit hit, const TrackingRecHit *hitPtr)
std::vector< MkFitHit > mkFitHits
const MkFitHit & mkFitHit(edm::ProductID id, size_t clusterIndex) const
Get mkFit hit index and layer.
size_t clusterIndex(MkFitHit hit) const
Get CMSSW cluster index (currently used only for debugging)
std::vector< std::vector< CMSSWHit > > mkFitToCMSSW_
MkFitHitIndexMap()=default
void resizeByClusterIndex(edm::ProductID id, size_t clusterIndex)
CMSSWHit(const TrackingRecHit *p, size_t i)
const TrackingRecHit * hitPtr(MkFitHit hit) const
Get CMSSW hit pointer.