CMS 3D CMS Logo

IntermediateHitTriplets.h
Go to the documentation of this file.
1 #ifndef RecoPixelVertexing_PixelTriplets_IntermediateHitTriplets_h
2 #define RecoPixelVertexing_PixelTriplets_IntermediateHitTriplets_h
3 
8 
23 public:
24  using LayerPair = std::tuple<SeedingLayerSetsHits::LayerIndex, SeedingLayerSetsHits::LayerIndex>;
25  using LayerTriplet =
26  std::tuple<SeedingLayerSetsHits::LayerIndex, SeedingLayerSetsHits::LayerIndex, SeedingLayerSetsHits::LayerIndex>;
28 
30 
40  public:
43 
44  void setTripletsEnd(unsigned int end) { tripletsEnd_ = end; }
45 
46  const LayerTriplet &layerTriplet() const { return layerTriplet_; }
47 
48  unsigned int tripletsBegin() const { return tripletsBegin_; }
49  unsigned int tripletsEnd() const { return tripletsEnd_; }
50 
51  private:
53  unsigned int tripletsBegin_;
54  unsigned int tripletsEnd_;
55  };
56 
58 
64  public:
65  using const_iterator = std::vector<OrderedHitTriplet>::const_iterator;
66 
67  LayerHitTriplets(const IntermediateHitTriplets *hitSets, const PLayerHitTriplets *layerTriplet)
68  : hitSets_(hitSets), layerTriplet_(layerTriplet) {}
69 
70  using TripletRange =
71  std::pair<std::vector<OrderedHitTriplet>::const_iterator, std::vector<OrderedHitTriplet>::const_iterator>;
72 
76 
78  const_iterator cbegin() const { return begin(); }
80  const_iterator cend() const { return end(); }
81 
82  private:
85  };
86 
88 
100  public:
101  using PLayerHitTripletsConstIterator = std::vector<PLayerHitTriplets>::const_iterator;
102  using TripletConstIterator = std::vector<OrderedHitTriplet>::const_iterator;
103 
105  public:
108  using difference_type = internal_iterator_type::difference_type;
109 
110  struct end_tag {};
111 
115  const_iterator(const IntermediateHitTriplets *hitSets, const RegionLayerSets *regionLayerSets)
116  : hitSets_(hitSets), regionLayerSets_(regionLayerSets), iter_(regionLayerSets->layerSetsBegin()) {
117  assert(regionLayerSets->layerSetsBegin() != regionLayerSets->layerSetsEnd());
118  }
119 
125  const_iterator(const IntermediateHitTriplets *hitSets, const RegionLayerSets *regionLayerSets, end_tag)
126  : iter_(regionLayerSets->layerSetsEnd()) {}
127 
128  value_type operator*() const { return value_type(hitSets_, &(*iter_)); }
129 
131  ++iter_;
132  return *this;
133  }
134 
136  const_iterator clone(*this);
137  operator++();
138  return clone;
139  }
140 
141  bool operator==(const const_iterator &other) const { return iter_ == other.iter_; }
142  bool operator!=(const const_iterator &other) const { return !operator==(other); }
143 
144  private:
148  };
149 
151  const LayerHitMapCache *cache,
152  const IntermediateHitTriplets *hitSets,
153  PLayerHitTripletsConstIterator tripletBegin,
155  : region_(region), cache_(cache), hitSets_(hitSets), layerSetsBegin_(tripletBegin), layerSetsEnd_(tripletEnd) {}
156 
157  const TrackingRegion &region() const { return *region_; }
158  const LayerHitMapCache &layerHitMapCache() const { return *cache_; }
160 
163  return const_iterator(hitSets_, this);
164  else
165  return end();
166  }
167  const_iterator cbegin() const { return begin(); }
168  const_iterator end() const { return const_iterator(hitSets_, this, const_iterator::end_tag()); }
169  const_iterator cend() const { return end(); }
170 
171  // used internally by the LayerHitTriplets helper class
174 
175  private:
176  const TrackingRegion *region_ = nullptr;
177  const LayerHitMapCache *cache_ = nullptr;
181  };
182 
184 
187 
189 
191  class RegionFiller {
192  public:
193  RegionFiller() : obj_(nullptr) {}
195 
196  ~RegionFiller() = default;
197 
198  bool valid() const { return obj_ != nullptr; }
199 
200  LayerHitMapCache &layerHitMapCache() { return obj_->regions_.back().layerHitMapCache(); }
201 
202  void addTriplets(const LayerPair &layerPair,
203  const std::vector<SeedingLayerSetsHits::SeedingLayer> &thirdLayers,
204  const OrderedHitTriplets &triplets,
205  const std::vector<int> &thirdLayerIndex,
206  const std::vector<size_t> &permutations) {
207  assert(triplets.size() == thirdLayerIndex.size());
208  assert(triplets.size() == permutations.size());
209 
210  if (triplets.empty()) {
211  return;
212  }
213 
214  int prevLayer = -1;
215  for (size_t i = 0, size = permutations.size(); i < size; ++i) {
216  // We go through the 'triplets' in the order defined by
217  // 'permutations', which is sorted such that we first go through
218  // triplets from (3rd) layer 0, then layer 1 and so on.
219  const size_t realIndex = permutations[i];
220 
221  const int layer = thirdLayerIndex[realIndex];
222  if (layer != prevLayer) {
223  prevLayer = layer;
224  obj_->layerTriplets_.emplace_back(
225  LayerTriplet(std::get<0>(layerPair), std::get<1>(layerPair), thirdLayers[layer].index()),
226  obj_->hitTriplets_.size());
227  }
228 
229  obj_->hitTriplets_.emplace_back(triplets[realIndex]);
230  obj_->layerTriplets_.back().setTripletsEnd(obj_->hitTriplets_.size());
231  }
232 
233  obj_->regions_.back().setLayerSetsEnd(obj_->layerTriplets_.size());
234  }
235 
236  private:
238  };
239 
240  // allows declaring local variables with auto
241  static RegionFiller dummyFiller() { return RegionFiller(); }
242 
244 
247  IntermediateHitTriplets(const IntermediateHitTriplets &rh); // only to make ROOT dictionary generation happy
250  ~IntermediateHitTriplets() = default;
251 
252  void reserve(size_t nregions, size_t nlayersets, size_t ntriplets) {
253  regions_.reserve(nregions);
254  layerTriplets_.reserve(nregions * nlayersets);
255  hitTriplets_.reserve(ntriplets);
256  }
257 
258  void shrink_to_fit() {
259  regions_.shrink_to_fit();
260  layerTriplets_.shrink_to_fit();
261  hitTriplets_.shrink_to_fit();
262  }
263 
265  regions_.emplace_back(region, layerTriplets_.size());
266  return RegionFiller(this);
267  }
268 
270  bool empty() const { return regions_.empty(); }
271  size_t regionSize() const { return regions_.size(); }
272  size_t tripletsSize() const { return hitTriplets_.size(); }
273 
274  const_iterator begin() const { return const_iterator(this, regions_.begin()); }
275  const_iterator cbegin() const { return begin(); }
276  const_iterator end() const { return const_iterator(this, regions_.end()); }
277  const_iterator cend() const { return end(); }
278 
279  // used internally by all the helper classes
280  std::vector<RegionIndex>::const_iterator regionsBegin() const { return regions_.begin(); }
281  std::vector<RegionIndex>::const_iterator regionsEnd() const { return regions_.end(); }
282  std::vector<PLayerHitTriplets>::const_iterator layerSetsBegin() const { return layerTriplets_.begin(); }
283  std::vector<PLayerHitTriplets>::const_iterator layerSetsEnd() const { return layerTriplets_.end(); }
284  std::vector<OrderedHitTriplet>::const_iterator tripletsBegin() const { return hitTriplets_.begin(); }
285  std::vector<OrderedHitTriplet>::const_iterator tripletsEnd() const { return hitTriplets_.end(); }
286 
287 private:
289 
290  std::vector<RegionIndex> regions_;
291  std::vector<PLayerHitTriplets>
293  std::vector<OrderedHitTriplet> hitTriplets_;
294 };
295 
296 #endif
IntermediateHitTriplets::layerTriplets_
std::vector< PLayerHitTriplets > layerTriplets_
Container of regions, each element has indices pointing to layerTriplets_.
Definition: IntermediateHitTriplets.h:292
IntermediateHitTriplets::LayerHitTriplets::layerTriplet_
const PLayerHitTriplets * layerTriplet_
Definition: IntermediateHitTriplets.h:84
IntermediateHitTriplets::tripletsBegin
std::vector< OrderedHitTriplet >::const_iterator tripletsBegin() const
Definition: IntermediateHitTriplets.h:284
IntermediateHitTriplets::cend
const_iterator cend() const
Definition: IntermediateHitTriplets.h:277
IntermediateHitTriplets::RegionLayerSets::region
const TrackingRegion & region() const
Definition: IntermediateHitTriplets.h:157
IntermediateHitTriplets::RegionLayerSets::end
const_iterator end() const
Definition: IntermediateHitTriplets.h:168
IntermediateHitTriplets::PLayerHitTriplets::PLayerHitTriplets
PLayerHitTriplets(const LayerTriplet &layerTriplet, unsigned int tripletsBegin)
Definition: IntermediateHitTriplets.h:41
IntermediateHitTriplets::RegionFiller::RegionFiller
RegionFiller(IntermediateHitTriplets *obj)
Definition: IntermediateHitTriplets.h:194
mps_fire.i
i
Definition: mps_fire.py:355
IntermediateHitTriplets::~IntermediateHitTriplets
~IntermediateHitTriplets()=default
IntermediateHitTriplets::LayerHitTriplets::innerLayerIndex
SeedingLayerSetsHits::LayerIndex innerLayerIndex() const
Definition: IntermediateHitTriplets.h:73
IntermediateHitTriplets::hitTriplets_
std::vector< OrderedHitTriplet > hitTriplets_
Container of layer triplets, each element has indices pointing to hitTriplets_.
Definition: IntermediateHitTriplets.h:293
IntermediateHitTriplets::RegionLayerSets::hitSets_
const IntermediateHitTriplets * hitSets_
Definition: IntermediateHitTriplets.h:178
IntermediateHitTriplets::RegionLayerSets::const_iterator
Definition: IntermediateHitTriplets.h:104
IntermediateHitTriplets::RegionLayerSets::const_iterator::difference_type
internal_iterator_type::difference_type difference_type
Definition: IntermediateHitTriplets.h:108
IntermediateHitTriplets::cbegin
const_iterator cbegin() const
Definition: IntermediateHitTriplets.h:275
IntermediateHitTriplets::RegionFiller::~RegionFiller
~RegionFiller()=default
IntermediateHitTriplets::PLayerHitTriplets::setTripletsEnd
void setTripletsEnd(unsigned int end)
Definition: IntermediateHitTriplets.h:44
IntermediateHitTriplets::dummyFiller
static RegionFiller dummyFiller()
Definition: IntermediateHitTriplets.h:241
IntermediateHitTriplets::regionsEnd
std::vector< RegionIndex >::const_iterator regionsEnd() const
Definition: IntermediateHitTriplets.h:281
IntermediateHitTriplets::RegionLayerSets::layerSetsEnd
PLayerHitTripletsConstIterator layerSetsEnd() const
Definition: IntermediateHitTriplets.h:173
IntermediateHitTriplets::RegionLayerSets::TripletConstIterator
std::vector< OrderedHitTriplet >::const_iterator TripletConstIterator
Definition: IntermediateHitTriplets.h:102
IntermediateHitTriplets::LayerTriplet
std::tuple< SeedingLayerSetsHits::LayerIndex, SeedingLayerSetsHits::LayerIndex, SeedingLayerSetsHits::LayerIndex > LayerTriplet
Definition: IntermediateHitTriplets.h:26
SeedingLayerSetsHits
Definition: SeedingLayerSetsHits.h:18
IntermediateHitTriplets::RegionLayerSets::const_iterator::operator==
bool operator==(const const_iterator &other) const
Definition: IntermediateHitTriplets.h:141
IntermediateHitTriplets::empty
bool empty() const
Definition: IntermediateHitTriplets.h:270
IntermediateHitTriplets::RegionLayerSets
Definition: IntermediateHitTriplets.h:99
cms::cuda::assert
assert(be >=bs)
HLT_2018_cff.distance
distance
Definition: HLT_2018_cff.py:6417
IntermediateHitTriplets::RegionLayerSets::const_iterator::hitSets_
const IntermediateHitTriplets * hitSets_
Definition: IntermediateHitTriplets.h:145
IntermediateHitTriplets::RegionLayerSets::cend
const_iterator cend() const
Definition: IntermediateHitTriplets.h:169
IntermediateHitTriplets::RegionFiller::addTriplets
void addTriplets(const LayerPair &layerPair, const std::vector< SeedingLayerSetsHits::SeedingLayer > &thirdLayers, const OrderedHitTriplets &triplets, const std::vector< int > &thirdLayerIndex, const std::vector< size_t > &permutations)
Definition: IntermediateHitTriplets.h:202
IntermediateHitDoublets.h
IntermediateHitTriplets::RegionLayerSets::const_iterator::iter_
internal_iterator_type iter_
Definition: IntermediateHitTriplets.h:147
IntermediateHitTriplets::RegionLayerSets::region_
const TrackingRegion * region_
Definition: IntermediateHitTriplets.h:176
IntermediateHitTriplets::RegionLayerSets::const_iterator::operator!=
bool operator!=(const const_iterator &other) const
Definition: IntermediateHitTriplets.h:142
IntermediateHitTriplets::IntermediateHitTriplets
IntermediateHitTriplets(const SeedingLayerSetsHits *seedingLayers)
Definition: IntermediateHitTriplets.h:246
IntermediateHitTriplets::RegionLayerSets::layerSetsEnd_
const PLayerHitTripletsConstIterator layerSetsEnd_
Definition: IntermediateHitTriplets.h:180
IntermediateHitTriplets::RegionFiller::obj_
IntermediateHitTriplets * obj_
Definition: IntermediateHitTriplets.h:237
IntermediateHitTriplets::end
const_iterator end() const
Definition: IntermediateHitTriplets.h:276
LayerHitMapCache.h
LayerHitMapCache
Definition: LayerHitMapCache.h:14
SeedingLayerSetsHits.h
clone
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
IntermediateHitTriplets::RegionLayerSets::layerHitMapCache
const LayerHitMapCache & layerHitMapCache() const
Definition: IntermediateHitTriplets.h:158
IntermediateHitTriplets::RegionFiller::layerHitMapCache
LayerHitMapCache & layerHitMapCache()
Definition: IntermediateHitTriplets.h:200
IntermediateHitTriplets::RegionLayerSets::const_iterator::operator++
const_iterator & operator++()
Definition: IntermediateHitTriplets.h:130
IntermediateHitTriplets::operator=
IntermediateHitTriplets & operator=(IntermediateHitTriplets &&)=default
IntermediateHitTriplets::IntermediateHitTriplets
IntermediateHitTriplets()
Definition: IntermediateHitTriplets.h:245
trackingPlots.other
other
Definition: trackingPlots.py:1465
OrderedHitTriplets.h
IntermediateHitTriplets::tripletsSize
size_t tripletsSize() const
Definition: IntermediateHitTriplets.h:272
IntermediateHitTriplets::LayerHitTriplets::cbegin
const_iterator cbegin() const
Definition: IntermediateHitTriplets.h:78
IntermediateHitTriplets
Definition: IntermediateHitTriplets.h:22
IntermediateHitTriplets::LayerPair
std::tuple< SeedingLayerSetsHits::LayerIndex, SeedingLayerSetsHits::LayerIndex > LayerPair
Definition: IntermediateHitTriplets.h:24
utilities.cache
def cache(function)
Definition: utilities.py:3
getGTfromDQMFile.obj
obj
Definition: getGTfromDQMFile.py:32
IntermediateHitTriplets::RegionLayerSets::const_iterator::const_iterator
const_iterator(const IntermediateHitTriplets *hitSets, const RegionLayerSets *regionLayerSets)
Definition: IntermediateHitTriplets.h:115
IntermediateHitTriplets::LayerHitTriplets::end
const_iterator end() const
Definition: IntermediateHitTriplets.h:79
IntermediateHitTriplets::RegionLayerSets::const_iterator::operator*
value_type operator*() const
Definition: IntermediateHitTriplets.h:128
IntermediateHitTriplets::regions_
std::vector< RegionIndex > regions_
Pointer to SeedingLayerSetsHits (owned elsewhere)
Definition: IntermediateHitTriplets.h:290
IntermediateHitTriplets::shrink_to_fit
void shrink_to_fit()
Definition: IntermediateHitTriplets.h:258
IntermediateHitTriplets::RegionLayerSets::const_iterator::const_iterator
const_iterator(const IntermediateHitTriplets *hitSets, const RegionLayerSets *regionLayerSets, end_tag)
Definition: IntermediateHitTriplets.h:125
IntermediateHitTriplets::LayerHitTriplets::begin
const_iterator begin() const
Definition: IntermediateHitTriplets.h:77
IntermediateHitTriplets::RegionLayerSets::layerSetsBegin
PLayerHitTripletsConstIterator layerSetsBegin() const
Definition: IntermediateHitTriplets.h:172
IntermediateHitTriplets::RegionLayerSets::const_iterator::end_tag
Definition: IntermediateHitTriplets.h:110
IntermediateHitTriplets::PLayerHitTriplets::tripletsEnd_
unsigned int tripletsEnd_
Definition: IntermediateHitTriplets.h:54
SeedingLayerSetsHits::LayerIndex
unsigned short LayerIndex
Definition: SeedingLayerSetsHits.h:29
OrderedHitTriplets
Definition: OrderedHitTriplets.h:9
IntermediateHitTriplets::LayerHitTriplets::hitSets_
const IntermediateHitTriplets * hitSets_
Definition: IntermediateHitTriplets.h:83
IntermediateHitTriplets::RegionFiller::valid
bool valid() const
Definition: IntermediateHitTriplets.h:198
IntermediateHitTriplets::LayerHitTriplets::const_iterator
std::vector< OrderedHitTriplet >::const_iterator const_iterator
Definition: IntermediateHitTriplets.h:65
IntermediateHitTriplets::seedingLayerHits
const SeedingLayerSetsHits & seedingLayerHits() const
Definition: IntermediateHitTriplets.h:269
IntermediateHitTriplets::LayerHitTriplets
Definition: IntermediateHitTriplets.h:63
IntermediateHitTriplets::seedingLayers_
const SeedingLayerSetsHits * seedingLayers_
Definition: IntermediateHitTriplets.h:288
IntermediateHitTriplets::tripletsEnd
std::vector< OrderedHitTriplet >::const_iterator tripletsEnd() const
Definition: IntermediateHitTriplets.h:285
OrderedHitTriplets::size
unsigned int size() const override
Definition: OrderedHitTriplets.h:13
IntermediateHitTriplets::begin
const_iterator begin() const
Definition: IntermediateHitTriplets.h:274
IntermediateHitTriplets::RegionLayerSets::const_iterator::operator++
const_iterator operator++(int)
Definition: IntermediateHitTriplets.h:135
IntermediateHitTriplets::RegionLayerSets::layerTripletsSize
size_t layerTripletsSize() const
Definition: IntermediateHitTriplets.h:159
IntermediateHitTriplets::PLayerHitTriplets::tripletsEnd
unsigned int tripletsEnd() const
Definition: IntermediateHitTriplets.h:49
IntermediateHitTriplets::RegionLayerSets::cache_
const LayerHitMapCache * cache_
Definition: IntermediateHitTriplets.h:177
IntermediateHitTriplets::LayerHitTriplets::outerLayerIndex
SeedingLayerSetsHits::LayerIndex outerLayerIndex() const
Definition: IntermediateHitTriplets.h:75
IntermediateHitTriplets::LayerHitTriplets::middleLayerIndex
SeedingLayerSetsHits::LayerIndex middleLayerIndex() const
Definition: IntermediateHitTriplets.h:74
IntermediateHitTriplets::PLayerHitTriplets::layerTriplet
const LayerTriplet & layerTriplet() const
Definition: IntermediateHitTriplets.h:46
IntermediateHitTriplets::regionSize
size_t regionSize() const
Definition: IntermediateHitTriplets.h:271
IntermediateHitTriplets::PLayerHitTriplets
Definition: IntermediateHitTriplets.h:39
IntermediateHitTriplets::PLayerHitTriplets::tripletsBegin_
unsigned int tripletsBegin_
Definition: IntermediateHitTriplets.h:53
IntermediateHitTriplets::RegionLayerSets::const_iterator::value_type
LayerHitTriplets value_type
Definition: IntermediateHitTriplets.h:107
IntermediateHitTriplets::RegionLayerSets::cbegin
const_iterator cbegin() const
Definition: IntermediateHitTriplets.h:167
IntermediateHitTriplets::RegionLayerSets::RegionLayerSets
RegionLayerSets(const TrackingRegion *region, const LayerHitMapCache *cache, const IntermediateHitTriplets *hitSets, PLayerHitTripletsConstIterator tripletBegin, PLayerHitTripletsConstIterator tripletEnd)
Definition: IntermediateHitTriplets.h:150
HLT_2018_cff.seedingLayers
seedingLayers
Definition: HLT_2018_cff.py:8534
IntermediateHitTriplets::RegionLayerSets::const_iterator::internal_iterator_type
PLayerHitTripletsConstIterator internal_iterator_type
Definition: IntermediateHitTriplets.h:106
IntermediateHitTriplets::RegionLayerSets::begin
const_iterator begin() const
Definition: IntermediateHitTriplets.h:161
IntermediateHitTriplets::RegionFiller
Helper class enforcing correct way of filling the doublets of a region.
Definition: IntermediateHitTriplets.h:191
IntermediateHitTriplets::reserve
void reserve(size_t nregions, size_t nlayersets, size_t ntriplets)
Definition: IntermediateHitTriplets.h:252
IntermediateHitTriplets::RegionLayerSets::layerSetsBegin_
const PLayerHitTripletsConstIterator layerSetsBegin_
Definition: IntermediateHitTriplets.h:179
HLT_2018_cff.region
region
Definition: HLT_2018_cff.py:81479
IntermediateHitTriplets::RegionFiller::RegionFiller
RegionFiller()
Definition: IntermediateHitTriplets.h:193
ihd::const_iterator
Definition: IntermediateHitDoublets.h:85
AlignmentPI::index
index
Definition: AlignmentPayloadInspectorHelper.h:46
TrackingRegion
Definition: TrackingRegion.h:40
IntermediateHitTriplets::beginRegion
RegionFiller beginRegion(const TrackingRegion *region)
Definition: IntermediateHitTriplets.h:264
ihd::RegionIndex
Definition: IntermediateHitDoublets.h:16
IntermediateHitTriplets::layerSetsBegin
std::vector< PLayerHitTriplets >::const_iterator layerSetsBegin() const
Definition: IntermediateHitTriplets.h:282
IntermediateHitTriplets::regionsBegin
std::vector< RegionIndex >::const_iterator regionsBegin() const
Definition: IntermediateHitTriplets.h:280
IntermediateHitTriplets::LayerHitTriplets::LayerHitTriplets
LayerHitTriplets(const IntermediateHitTriplets *hitSets, const PLayerHitTriplets *layerTriplet)
Definition: IntermediateHitTriplets.h:67
IntermediateHitTriplets::PLayerHitTriplets::tripletsBegin
unsigned int tripletsBegin() const
Definition: IntermediateHitTriplets.h:48
IntermediateHitTriplets::PLayerHitTriplets::layerTriplet_
LayerTriplet layerTriplet_
Definition: IntermediateHitTriplets.h:52
IntermediateHitTriplets::RegionLayerSets::const_iterator::regionLayerSets_
const RegionLayerSets * regionLayerSets_
Definition: IntermediateHitTriplets.h:146
IntermediateHitTriplets::LayerHitTriplets::cend
const_iterator cend() const
Definition: IntermediateHitTriplets.h:80
IntermediateHitTriplets::LayerHitTriplets::TripletRange
std::pair< std::vector< OrderedHitTriplet >::const_iterator, std::vector< OrderedHitTriplet >::const_iterator > TripletRange
Definition: IntermediateHitTriplets.h:71
IntermediateHitTriplets::const_iterator
ihd::const_iterator< RegionLayerSets, IntermediateHitTriplets > const_iterator
Iterator over regions.
Definition: IntermediateHitTriplets.h:186
findQualityFiles.size
size
Write out results.
Definition: findQualityFiles.py:443
IntermediateHitTriplets::layerSetsEnd
std::vector< PLayerHitTriplets >::const_iterator layerSetsEnd() const
Definition: IntermediateHitTriplets.h:283
IntermediateHitTriplets::RegionLayerSets::PLayerHitTripletsConstIterator
std::vector< PLayerHitTriplets >::const_iterator PLayerHitTripletsConstIterator
Definition: IntermediateHitTriplets.h:101