Belle II Software  release-05-02-19
CDCSegment2D.cc
1 /**************************************************************************
2  * BASF2 (Belle Analysis Framework 2) *
3  * Copyright(C) 2012 - Belle II Collaboration *
4  * *
5  * Author: The Belle II Collaboration *
6  * Contributors: Oliver Frost *
7  * *
8  * This software is provided "as is" without any warranty. *
9  **************************************************************************/
10 #include <tracking/trackFindingCDC/eventdata/segments/CDCSegment2D.h>
11 
12 #include <tracking/trackFindingCDC/eventdata/segments/CDCFacetSegment.h>
13 #include <tracking/trackFindingCDC/eventdata/segments/CDCTangentSegment.h>
14 
15 #include <tracking/trackFindingCDC/eventdata/segments/CDCRLWireHitSegment.h>
16 #include <tracking/trackFindingCDC/eventdata/segments/CDCWireHitSegment.h>
17 #include <tracking/trackFindingCDC/eventdata/hits/CDCFacet.h>
18 #include <tracking/trackFindingCDC/eventdata/hits/CDCTangent.h>
19 #include <tracking/trackFindingCDC/eventdata/hits/CDCRecoHit2D.h>
20 #include <tracking/trackFindingCDC/eventdata/hits/CDCWireHit.h>
21 #include <tracking/trackFindingCDC/eventdata/trajectories/CDCTrajectory2D.h>
22 
23 #include <tracking/trackFindingCDC/geometry/Vector2D.h>
24 
25 #include <tracking/trackFindingCDC/ca/AutomatonCell.h>
26 
27 #include <tracking/trackFindingCDC/numerics/ERightLeft.h>
28 
29 #include <tracking/trackFindingCDC/utilities/WeightedRelation.h>
30 #include <tracking/trackFindingCDC/utilities/Relation.h>
31 #include <tracking/trackFindingCDC/utilities/Algorithms.h>
32 #include <tracking/trackFindingCDC/utilities/ReversedRange.h>
33 #include <tracking/trackFindingCDC/utilities/GetIterator.h>
34 
35 #include <framework/logging/Logger.h>
36 
37 #include <functional>
38 #include <algorithm>
39 #include <iterator>
40 
41 #include <cassert>
42 #include <cstddef>
43 
44 namespace Belle2 {
49  namespace TrackFindingCDC {
50  class CDCRLWireHit;
51  class CDCWire;
52  }
54 }
55 
56 using namespace Belle2;
57 using namespace TrackFindingCDC;
58 
59 namespace {
60  void createTangentSegment(const CDCRLWireHitSegment& rlWireHitSegment,
61  CDCTangentSegment& tangentSegment)
62  {
63  size_t nRLWireHits = rlWireHitSegment.size();
64  if (nRLWireHits < 2) return;
65 
66  tangentSegment.reserve(nRLWireHits - 1);
67 
68  // Make tangents from pairs of hits along the segment.
69  transform_adjacent_pairs(rlWireHitSegment.begin(), rlWireHitSegment.end(),
70  back_inserter(tangentSegment),
71  [](const CDCRLWireHit & firstRLWireHit,
72  const CDCRLWireHit & secondRLWireHit) {
73  return CDCTangent(firstRLWireHit, secondRLWireHit);
74  });
75 
76  if (tangentSegment.size() + 1 != rlWireHitSegment.size()) {
77  B2ERROR("Wrong number of tangents created.");
78  }
79 
80  }
81 
82  template<class ATangentRange>
83  CDCSegment2D condenseTangentSegment(const ATangentRange& tangentSegment)
84  {
85  using TangentIt = GetIterator<const ATangentRange&>;
86  TangentIt tangentIt{tangentSegment.begin()};
87  TangentIt endTangentIt{tangentSegment.end()};
88  int nTangents = std::distance(tangentIt, endTangentIt);
89 
90  CDCSegment2D result;
91  result.reserve(nTangents + 1);
92 
93  if (nTangents == 0) {
94  //pass
95  } else if (nTangents == 1) {
96  // Only one tangent no averaging necesssary
97  const CDCTangent& tangent = *tangentIt;
98  result.push_back(tangent.getFromRecoHit2D());
99  result.push_back(tangent.getToRecoHit2D());
100 
101  } else { // nTangents > 2
102  TangentIt firstTangentIt = tangentIt++;
103  TangentIt secondTangentIt = tangentIt++;
104 
105  {
106  const CDCTangent& firstTangent = *firstTangentIt;
107  result.push_back(firstTangent.getFromRecoHit2D());
108  }
109 
110  while (tangentIt != endTangentIt) {
111 
112  firstTangentIt = secondTangentIt; // tangentSegment[iTangent];
113  secondTangentIt = tangentIt++; // tangentSegment[iTangent+1];
114 
115  const CDCTangent& firstTangent = *firstTangentIt;
116  const CDCTangent& secondTangent = *secondTangentIt;
117 
118  result.push_back(CDCRecoHit2D::average(firstTangent.getToRecoHit2D(),
119  secondTangent.getFromRecoHit2D()));
120  }
121  {
122  const CDCTangent& secondTangent = *secondTangentIt;
123  result.push_back(secondTangent.getToRecoHit2D());
124  }
125  }
126 
127  result.receiveISuperCluster();
128  return result;
129  }
130 
131  template<class AFacetRange>
132  CDCSegment2D condenseFacetSegment(const AFacetRange& facetSegment)
133  {
134  using FacetIt = GetIterator<const AFacetRange&>;
135  FacetIt facetIt = facetSegment.begin();
136  FacetIt endFacetIt = facetSegment.end();
137  int nFacets = std::distance(facetIt, endFacetIt);
138 
139  CDCSegment2D result;
140  result.reserve(nFacets + 2);
141 
142  if (nFacets == 0) {
143  //pass
144  } else if (nFacets == 1) {
145  FacetIt onlyFacetIt = facetIt;
146  const CDCFacet& onlyFacet = *onlyFacetIt;
147  result.push_back(onlyFacet.getStartRecoHit2D());
148  result.push_back(onlyFacet.getMiddleRecoHit2D());
149  result.push_back(onlyFacet.getEndRecoHit2D());
150 
151  } else if (nFacets == 2) {
152  FacetIt firstFacetIt = facetIt++;
153  FacetIt secondFacetIt = facetIt;
154 
155  const CDCFacet& firstFacet = *firstFacetIt;
156  const CDCFacet& secondFacet = *secondFacetIt;
157 
158  result.push_back(firstFacet.getStartRecoHit2D());
159  result.push_back(CDCRecoHit2D::average(secondFacet.getStartRecoHit2D() ,
160  firstFacet.getMiddleRecoHit2D()));
161 
162  result.push_back(CDCRecoHit2D::average(secondFacet.getMiddleRecoHit2D(),
163  firstFacet.getEndRecoHit2D()));
164 
165  result.push_back(secondFacet.getEndRecoHit2D());
166 
167  } else { // nFacets > 2
168  FacetIt firstFacetIt = facetIt++; // facetSegment[0];
169  FacetIt secondFacetIt = facetIt++; // facetSegment[1];
170  FacetIt thirdFacetIt = facetIt++; // facetSegment[2];
171 
172  {
173  const CDCFacet& firstFacet = *firstFacetIt;
174  const CDCFacet& secondFacet = *secondFacetIt;
175  const CDCFacet& thirdFacet = *thirdFacetIt;
176 
177  result.push_back(firstFacet.getStartRecoHit2D());
178 
179  result.push_back(CDCRecoHit2D::average(firstFacet.getMiddleRecoHit2D(),
180  secondFacet.getStartRecoHit2D()));
181 
182  result.push_back(CDCRecoHit2D::average(firstFacet.getEndRecoHit2D(),
183  secondFacet.getMiddleRecoHit2D(),
184  thirdFacet.getStartRecoHit2D()));
185  }
186 
187  while (facetIt != endFacetIt) {
188  firstFacetIt = secondFacetIt; // facetSegment[iFacet];
189  secondFacetIt = thirdFacetIt; // facetSegment[iFacet+1];
190  thirdFacetIt = facetIt++; // facetSegment[iFacet+2];
191 
192  const CDCFacet& firstFacet = *firstFacetIt;
193  const CDCFacet& secondFacet = *secondFacetIt;
194  const CDCFacet& thirdFacet = *thirdFacetIt;
195 
196  result.push_back(CDCRecoHit2D::average(firstFacet.getEndRecoHit2D(),
197  secondFacet.getMiddleRecoHit2D(),
198  thirdFacet.getStartRecoHit2D()));
199  }
200  {
201  const CDCFacet& secondFacet = *secondFacetIt;
202  const CDCFacet& thirdFacet = *thirdFacetIt;
203 
204  result.push_back(CDCRecoHit2D::average(secondFacet.getEndRecoHit2D(),
205  thirdFacet.getMiddleRecoHit2D()));
206 
207  result.push_back(thirdFacet.getEndRecoHit2D());
208  }
209  }
210 
211  result.receiveISuperCluster();
212  return result;
213  }
214 
215 }
216 
218 {
219  const std::vector<CDCTangent>& tangents = tangentSegment;
220  CDCSegment2D segment2D = ::condenseTangentSegment(tangents);
221  segment2D.setTrajectory2D(tangentSegment.getTrajectory2D());
222  segment2D.receiveISuperCluster();
223  segment2D.setAliasScore(tangentSegment.getAliasScore());
224  return segment2D;
225 }
226 
227 CDCSegment2D CDCSegment2D::condense(const std::vector<const CDCTangent* >& tangentPath)
228 {
229  std::vector<std::reference_wrapper<const CDCTangent> > tangents;
230  tangents.reserve(tangentPath.size());
231  for (const CDCTangent* tangent : tangentPath) {
232  // cppcheck-suppress useStlAlgorithm
233  tangents.push_back(std::ref(*tangent));
234  }
235 
236  return ::condenseTangentSegment(tangents);
237 }
238 
240 {
241  const std::vector<CDCFacet>& facets = facetSegment;
242  CDCSegment2D segment2D = ::condenseFacetSegment(facets);
243  segment2D.setTrajectory2D(facetSegment.getTrajectory2D());
244  segment2D.receiveISuperCluster();
245  segment2D.setAliasScore(facetSegment.getAliasScore());
246  return segment2D;
247 }
248 
249 CDCSegment2D CDCSegment2D::condense(const std::vector<const CDCFacet* >& facetPath)
250 {
251  std::vector<std::reference_wrapper<const CDCFacet> > facets;
252  facets.reserve(facetPath.size());
253  for (const CDCFacet* facet : facetPath) {
254  // cppcheck-suppress useStlAlgorithm
255  facets.push_back(std::ref(*facet));
256  }
257 
258  return ::condenseFacetSegment(facets);
259 }
260 
261 CDCSegment2D CDCSegment2D::condense(const std::vector<const CDCSegment2D*>& segmentPath)
262 {
263  CDCSegment2D result;
264  double aliasScore = 0;
265  for (const CDCSegment2D* ptrSegment2D : segmentPath) {
266  assert(ptrSegment2D);
267  const CDCSegment2D& segment2D = *ptrSegment2D;
268  if (result.empty()) {
269  result = segment2D;
270  } else {
271  for (const CDCRecoHit2D& recoHit2D : segment2D) {
272  // cppcheck-suppress useStlAlgorithm
273  result.push_back(recoHit2D);
274  }
275  }
276  aliasScore = aliasScore + segment2D.getAliasScore();
277  }
278  result.receiveISuperCluster();
279  result.setAliasScore(aliasScore);
280  return result;
281 }
282 
284 {
285  if (rlWireHitSegment.size() == 1) {
286  CDCSegment2D segment2D;
287  Vector2D zeroDisp2D(0.0, 0.0);
288  segment2D.emplace_back(rlWireHitSegment.front(), zeroDisp2D);
289  segment2D.setTrajectory2D(rlWireHitSegment.getTrajectory2D());
290  segment2D.receiveISuperCluster();
291  segment2D.setAliasScore(rlWireHitSegment.getAliasScore());
292  return segment2D;
293  } else {
294  CDCTangentSegment tangentSegment;
295  createTangentSegment(rlWireHitSegment, tangentSegment);
296  tangentSegment.setTrajectory2D(rlWireHitSegment.getTrajectory2D());
297  tangentSegment.setAliasScore(rlWireHitSegment.getAliasScore());
298  return condense(tangentSegment);
299  }
300 }
301 
303 {
304  if (rlWireHitSegment.size() < 3) {
305  return reconstructUsingTangents(rlWireHitSegment);
306  } else {
307  CDCFacetSegment facetSegment = CDCFacetSegment::create(rlWireHitSegment);
308  return condense(facetSegment);
309  }
310 }
311 
313 {
314  return {this, segment};
315 }
316 
318 {
319  return {this, weight, segment};
320 }
321 
322 bool CDCSegment2D::operator<(const CDCSegment2D& segment2D) const
323 {
324  return (this->getISuperLayer() < segment2D.getISuperLayer()) or
325  (not(segment2D.getISuperLayer() < this->getISuperLayer()) and
326  this->getISuperCluster() < segment2D.getISuperCluster());
327 }
328 
329 std::vector<const CDCWire*> CDCSegment2D::getWireSegment() const
330 {
331  std::vector<const CDCWire*> wireSegment;
332  for (const CDCRecoHit2D& recoHit2D : *this) {
333  // cppcheck-suppress useStlAlgorithm
334  wireSegment.push_back(&(recoHit2D.getWire()));
335  }
336  return wireSegment;
337 }
338 
340 {
341  CDCWireHitSegment wireHitSegment;
342  for (const CDCRecoHit2D& recoHit2D : *this) {
343  // cppcheck-suppress useStlAlgorithm
344  wireHitSegment.push_back(&(recoHit2D.getWireHit()));
345  }
346  wireHitSegment.setTrajectory2D(getTrajectory2D());
347  wireHitSegment.setAliasScore(getAliasScore());
348  return wireHitSegment;
349 }
350 
352 {
353  CDCSegment2D segment;
354  for (const CDCRecoHit2D& recoHit2D : *this) {
355  // cppcheck-suppress useStlAlgorithm
356  segment.push_back(recoHit2D.getAlias());
357  }
358  segment.setISuperCluster(getISuperCluster());
359  segment.setAliasScore(getAliasScore());
360  return segment;
361 }
362 
364 {
365  ERightLeft rlInfo = ERightLeft::c_Invalid;
366  int nRLSwitches = -1;
367  for (const CDCRecoHit2D& recoHit2D : *this) {
368  if (rlInfo != recoHit2D.getRLInfo()) {
369  rlInfo = recoHit2D.getRLInfo();
370  ++nRLSwitches;
371  }
372  }
373  return nRLSwitches;
374 }
375 
377 {
378  int rlSum = 0;
379  for (const CDCRecoHit2D& recoHit2D : *this) {
380  if (isValid(recoHit2D.getRLInfo())) {
381  rlSum += recoHit2D.getRLInfo();
382  }
383  }
384  return static_cast<double>(rlSum) / size();
385 }
386 
388 {
389  CDCRLWireHitSegment rlWireHitSegment;
390  for (const CDCRecoHit2D& recoHit2D : *this) {
391  // cppcheck-suppress useStlAlgorithm
392  rlWireHitSegment.push_back(recoHit2D.getRLWireHit());
393  }
394  rlWireHitSegment.setTrajectory2D(getTrajectory2D());
395  rlWireHitSegment.setAliasScore(getAliasScore());
396  return rlWireHitSegment;
397 }
398 
400 {
401  CDCSegment2D reverseSegment;
402  reverseSegment.reserve(size());
403  for (const CDCRecoHit2D& recohit : reversedRange(*this)) {
404  // cppcheck-suppress useStlAlgorithm
405  reverseSegment.push_back(recohit.reversed());
406  }
407 
408  reverseSegment.setTrajectory2D(getTrajectory2D().reversed());
409  reverseSegment.m_automatonCell = m_automatonCell;
410  reverseSegment.setISuperCluster(getISuperCluster());
411  reverseSegment.setAliasScore(getAliasScore());
412  return reverseSegment;
413 }
414 
416 {
417  // Reverse the trajectory
419 
420  // Reverse the left right passage hypotheses
421  for (CDCRecoHit2D& recoHit2D : *this) {
422  recoHit2D.reverse();
423  }
424  // Reverse the arrangement of hits.
425  std::reverse(begin(), end());
426 }
427 
429 {
431  if (not toHits) return;
432  for (const CDCRecoHit2D& recoHit2D : *this) {
433  const CDCWireHit& wireHit = recoHit2D.getWireHit();
434  wireHit.getAutomatonCell().unsetMaskedFlag();
435  }
436 }
437 
439 {
441  if (not toHits) return;
442  for (const CDCRecoHit2D& recoHit2D : *this) {
443  const CDCWireHit& wireHit = recoHit2D.getWireHit();
444  wireHit.getAutomatonCell().setMaskedFlag();
445  }
446 }
447 
448 void CDCSegment2D::receiveMaskedFlag(bool fromHits) const
449 {
450  if (not fromHits) return;
451  for (const CDCRecoHit2D& recoHit2D : *this) {
452  const CDCWireHit& wireHit = recoHit2D.getWireHit();
453  if (wireHit.getAutomatonCell().hasMaskedFlag()) {
455  return;
456  }
457  }
458 }
459 
460 bool CDCSegment2D::isFullyTaken(unsigned int maxNotTaken) const
461 {
462  unsigned int notTakenCounter = 0;
463  for (const CDCRecoHit2D& recoHit : *this) {
464  if (not recoHit.getWireHit().getAutomatonCell().hasTakenFlag()) {
465  notTakenCounter++;
466  if (notTakenCounter > maxNotTaken) {
467  return false;
468  }
469  }
470  }
471 
472  return true;
473 }
474 
476 {
477  auto getISuperClusterOfHit = [](const CDCRecoHit2D & recoHit2d) -> int {
478  return recoHit2d.getWireHit().getISuperCluster();
479  };
480  int iSuperCluster = common(*this, getISuperClusterOfHit, -1);
481  setISuperCluster(iSuperCluster);
482 }
Belle2::TrackFindingCDC::CDCSegment2D::makeWeightedRelation
WeightedRelation< const CDCSegment2D, const CDCSegment2D > makeWeightedRelation(double weight, const CDCSegment2D *segment) const
Helper constructor to create a relation in python.
Definition: CDCSegment2D.cc:317
Belle2::TrackFindingCDC::CDCWireHit::getAutomatonCell
AutomatonCell & getAutomatonCell() const
Mutable getter for the automaton cell.
Definition: CDCWireHit.h:294
Belle2::TrackFindingCDC::CDCSegment2D::getRLAsymmetry
double getRLAsymmetry() const
Getter for the sum of right left information relative to the size.
Definition: CDCSegment2D.cc:376
Belle2::TrackFindingCDC::AutomatonCell::hasMaskedFlag
bool hasMaskedFlag() const
Gets the current state of the masked marker flag.
Definition: AutomatonCell.h:228
Belle2::TrackFindingCDC::Relation
Type for two related objects.
Definition: CDCSegment2D.h:37
Belle2::TrackFindingCDC::Vector2D
A two dimensional vector which is equipped with functions for correct handeling of orientation relat...
Definition: Vector2D.h:37
Belle2::TrackFindingCDC::CDCSegment2D::getAlias
CDCSegment2D getAlias() const
Getter for the alias version of the segment - fit not copied.
Definition: CDCSegment2D.cc:351
Belle2::TrackFindingCDC::CDCFacetSegment::create
static CDCFacetSegment create(const CDCRLWireHitSegment &rlWireHitSegment)
Construct a train of facets from the given oriented wire hits.
Definition: CDCFacetSegment.cc:37
Belle2::TrackFindingCDC::CDCTrajectory2D::reverse
void reverse()
Reverses the trajectory in place.
Definition: CDCTrajectory2D.cc:97
Belle2::TrackFindingCDC::CDCRecoHit2D::getRLWireHit
const CDCRLWireHit & getRLWireHit() const
Getter for the oriented wire hit assoziated with the reconstructed hit.
Definition: CDCRecoHit2D.h:291
Belle2::TrackFindingCDC::AutomatonCell::unsetMaskedFlag
void unsetMaskedFlag()
Resets the masked flag to false.
Definition: AutomatonCell.h:222
Belle2::TrackFindingCDC::CDCSegment2D::receiveISuperCluster
void receiveISuperCluster() const
Setter for the super cluster id based on the hit content.
Definition: CDCSegment2D.cc:475
Belle2::TrackFindingCDC::CDCSegment2D::getISuperCluster
int getISuperCluster() const
Getter for the global super cluster id.
Definition: CDCSegment2D.h:151
Belle2::TrackFindingCDC::CDCRecoHit2D::average
static CDCRecoHit2D average(const CDCRecoHit2D &recoHit1, const CDCRecoHit2D &recoHit2)
Constructs the average of two reconstructed hit positions and snaps it to the drift circle.
Definition: CDCRecoHit2D.cc:51
Belle2::TrackFindingCDC::CDCSegment2D::makeRelation
Relation< const CDCSegment2D, const CDCSegment2D > makeRelation(const CDCSegment2D *segment) const
Helper constructor to create a relation in python.
Definition: CDCSegment2D.cc:312
Belle2::TrackFindingCDC::CDCSegment2D::getWireSegment
std::vector< const CDCWire * > getWireSegment() const
Getter for the vector of wires the hits of this segment are based on in the same order.
Definition: CDCSegment2D.cc:329
Belle2::TrackFindingCDC::CDCSegment2D::condense
static CDCSegment2D condense(const CDCTangentSegment &tangentSegment)
Averages the reconstructed positions from hits that overlap in adjacent tangents in the given tangent...
Definition: CDCSegment2D.cc:217
Belle2::TrackFindingCDC::CDCSegment2D::operator<
bool operator<(const CDCSegment2D &segment2D) const
Comparision of segments up to the super cluster id keeping them close together on sort.
Definition: CDCSegment2D.cc:322
Belle2::TrackFindingCDC::CDCSegment2D::reconstructUsingFacets
static CDCSegment2D reconstructUsingFacets(const CDCRLWireHitSegment &rlWireHitSegment)
Reconstruct from wire hits with attached right left passage hypotheses by constructing facets between...
Definition: CDCSegment2D.cc:302
Belle2::TrackFindingCDC::CDCSegment::setTrajectory2D
void setTrajectory2D(const CDCTrajectory2D &trajectory2D) const
Setter for the two dimensional trajectory fitted to the segment.
Definition: CDCSegment.h:85
Belle2::TrackFindingCDC::CDCSegment2D::setISuperCluster
void setISuperCluster(int iSuperCluster) const
Setter for the globale super cluster id.
Definition: CDCSegment2D.h:157
Belle2::TrackFindingCDC::AutomatonCell::setMaskedFlag
void setMaskedFlag(bool setTo=true)
Sets the masked flag to the given value. Default value true.
Definition: AutomatonCell.h:216
Belle2::TrackFindingCDC::CDCSegment2D::isFullyTaken
bool isFullyTaken(unsigned int maxNotTaken=0) const
Returns false, if there are more than N hits in the range which does not have a taken flag.
Definition: CDCSegment2D.cc:460
Belle2::TrackFindingCDC::CDCRecoHit2D::getWire
const CDCWire & getWire() const
Getter for the wire the reconstructed hit assoziated to.
Definition: CDCRecoHit2D.h:185
Belle2::TrackFindingCDC::CDCWireHitSegment
A segment consisting of two dimensional reconsturcted hits.
Definition: CDCWireHitSegment.h:34
Belle2::TrackFindingCDC::CDCRLWireHitSegment
A segment consisting of two dimensional reconsturcted hits.
Definition: CDCRLWireHitSegment.h:34
Belle2::TrackFindingCDC::CDCFacetSegment
A segment consisting of adjacent facets.
Definition: CDCFacetSegment.h:32
Belle2::TrackFindingCDC::CDCSegment2D::reversed
CDCSegment2D reversed() const
Makes a copy of the segment with the reversed hits in the opposite order.
Definition: CDCSegment2D.cc:399
Belle2::TrackFindingCDC::CDCSegment2D::receiveMaskedFlag
void receiveMaskedFlag(bool fromHits=false) const
Check all contained wire hits if one has the masked flag.
Definition: CDCSegment2D.cc:448
Belle2::TrackFindingCDC::CDCSegment::getAliasScore
double getAliasScore() const
Getter for the flag that this segment may have an aliased version.
Definition: CDCSegment.h:99
Belle2::TrackFindingCDC::CDCRecoHit2D
Class representing a two dimensional reconstructed hit in the central drift chamber.
Definition: CDCRecoHit2D.h:57
Belle2::TrackFindingCDC::CDCSegment::getTrajectory2D
CDCTrajectory2D & getTrajectory2D() const
Getter for the two dimensional trajectory fitted to the segment.
Definition: CDCSegment.h:79
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TrackFindingCDC::CDCSegment2D::unsetAndForwardMaskedFlag
void unsetAndForwardMaskedFlag(bool toHits=false) const
Unset the masked flag of the automaton cell of this segment and of all contained wire hits.
Definition: CDCSegment2D.cc:428
Belle2::TrackFindingCDC::CDCTangent
Class representating a linear track piece between two oriented wire hits.
Definition: CDCTangent.h:50
Belle2::TrackFindingCDC::CDCSegment< CDCRecoHit2D >::getISuperLayer
ISuperLayer getISuperLayer() const
Returns the common super layer id of all stored tracking hits.
Definition: CDCSegment.h:67
Belle2::TrackFindingCDC::NRightLeft::ERightLeft
ERightLeft
Enumeration to represent the distinct possibilities of the right left passage.
Definition: ERightLeft.h:35
Belle2::TrackFindingCDC::CDCRecoHit2D::reverse
void reverse()
Turns the orientation in place.
Definition: CDCRecoHit2D.cc:97
Belle2::TrackFindingCDC::CDCSegment2D::getNRLSwitches
int getNRLSwitches() const
Getter for the number of changes in the right left passage in the segment.
Definition: CDCSegment2D.cc:363
Belle2::TrackFindingCDC::CDCSegment2D::getWireHitSegment
CDCWireHitSegment getWireHitSegment() const
Getter for the vector of the wire hits of this segment are based on in the same order.
Definition: CDCSegment2D.cc:339
Belle2::TrackFindingCDC::CDCSegment2D::setAndForwardMaskedFlag
void setAndForwardMaskedFlag(bool toHits=false) const
Set the masked flag of the automaton cell of this segment and forward the masked flag to all containe...
Definition: CDCSegment2D.cc:438
Belle2::TrackFindingCDC::CDCSegment2D::reverse
void reverse()
Reverses the order of hits and their right left passage hypotheses inplace.
Definition: CDCSegment2D.cc:415
Belle2::TrackFindingCDC::AutomatonCell::hasTakenFlag
bool hasTakenFlag() const
Gets the current state of the taken marker flag.
Definition: AutomatonCell.h:249
Belle2::TrackFindingCDC::CDCFacet
Class representing a triple of neighboring oriented wire with additional trajectory information.
Definition: CDCFacet.h:42
Belle2::TrackFindingCDC::CDCRecoHit2D::getAlias
CDCRecoHit2D getAlias() const
Getter for the alias version of the reco hit.
Definition: CDCRecoHit2D.cc:109
Belle2::TrackFindingCDC::CDCSegment2D::reconstructUsingTangents
static CDCSegment2D reconstructUsingTangents(const CDCRLWireHitSegment &rlWireHitSegment)
Reconstruct from wire hits with attached right left passage hypotheses by constructing tangents betwe...
Definition: CDCSegment2D.cc:283
Belle2::TrackFindingCDC::CDCSegment2D::getAutomatonCell
AutomatonCell & getAutomatonCell() const
Mutable getter for the automaton cell.
Definition: CDCSegment2D.h:120
Belle2::TrackFindingCDC::CDCSegment2D
A reconstructed sequence of two dimensional hits in one super layer.
Definition: CDCSegment2D.h:40
Belle2::TrackFindingCDC::WeightedRelation
Type for two related objects with a weight.
Definition: CDCSegment2D.h:36
Belle2::TrackFindingCDC::CDCSegment2D::getRLWireHitSegment
CDCRLWireHitSegment getRLWireHitSegment() const
Getter for the vector of right left oriented the hits of this segment.
Definition: CDCSegment2D.cc:387
Belle2::TrackFindingCDC::CDCWireHit
Class representing a hit wire in the central drift chamber.
Definition: CDCWireHit.h:65
Belle2::TrackFindingCDC::CDCTangentSegment
A segment consisting of adjacent tangents.
Definition: CDCTangentSegment.h:34
Belle2::TrackFindingCDC::CDCRecoHit2D::getWireHit
const CDCWireHit & getWireHit() const
Getter for the wire hit assoziated with the reconstructed hit.
Definition: CDCRecoHit2D.h:203
Belle2::TrackFindingCDC::CDCRecoHit2D::getRLInfo
ERightLeft getRLInfo() const
Getter for the right left passage information.
Definition: CDCRecoHit2D.h:215
Belle2::TrackFindingCDC::CDCSegment2D::m_automatonCell
AutomatonCell m_automatonCell
Memory for the automaton cell.
Definition: CDCSegment2D.h:174
Belle2::TrackFindingCDC::CDCSegment::setAliasScore
void setAliasScore(double aliasScore)
Setter for the flag that this segment may have an aliased version.
Definition: CDCSegment.h:105