LArSoft  v07_13_02
Liquid Argon Software toolkit - http://larsoft.org/
TrackTrajectory.cxx
Go to the documentation of this file.
1 
11 
12 // LArSoft libraries
13 
14 // C/C++ standard libraries
15 #include <ostream>
16 #include <utility> // std::move()
17 #include <string> // std::to_string()
18 #include <stdexcept> // std::runtime_error
19 
20 //------------------------------------------------------------------------------
22  Positions_t&& positions, Momenta_t&& momenta, Flags_t&& flags, bool hasMomenta
23  )
24  : Trajectory_t(std::move(positions), std::move(momenta), hasMomenta)
25  , fFlags(std::move(flags))
26 {
27  // additional invariant check
28  if (fFlags.size() != NPoints()) {
29  throw std::runtime_error("recob::TrackTrajectory constructed with "
30  + std::to_string(NPoints()) + " points "
31  + std::to_string(fFlags.size())
32  + " point flags! it requires the same number for both."
33  );
34  }
36  throw std::runtime_error("recob::TrackTrajectory constructed with only "
38  + " valid positions! at least 2 are required."
39  );
40  }
41 } // recob::TrackTrajectory::TrackTrajectory()
42 
43 
44 //------------------------------------------------------------------------------
46 
47  unsigned int count = 0;
48  for (size_t index = 0; index < NPoints(); ++index) {
49  if (HasValidPoint(index)) ++count;
50  } // for
51  return count;
52 
53 } // recob::TrackTrajectory::CountValidPoints()
54 
55 
56 //------------------------------------------------------------------------------
73 double recob::TrackTrajectory::Length(size_t startAt /* = 0 */) const {
74 
75  // sanity check
76  if (startAt >= LastPoint()) return 0.;
77 
78  // just sum the distance between all locations in the trajectory
79  size_t iCurr = ToValidPoint<+1>(startAt);
80  size_t iNext = iCurr;
81  size_t iLast = LastValidPoint();
82  Point_t const* curr = &(LocationAtPoint(iCurr));
83  Coord_t length = 0.0;
84  while ((iNext = ToValidPoint<+1>(++iNext)) <= iLast) {
85  Point_t const* next = &LocationAtPoint(iNext);
86  length += (*next - *curr).R();
87  curr = next;
88  } // while
89  return length;
90 } // recob::TrackTrajectory::Length()
91 
92 
93 //------------------------------------------------------------------------------
95  (unsigned int min) const
96 {
97  if (min == 0) return true;
98  unsigned int left = min;
99  for (size_t i = 0; i < NPoints(); ++i) {
100  if (!HasValidPoint(i)) continue;
101  if (--left == 0) return true;
102  } // for
103  return false;
104 
105 } // moreThanTwoValidTrajectoryPoints()
106 
107 //------------------------------------------------------------------------------
108 std::ostream& recob::operator<<
109  (std::ostream&& out, recob::TrackTrajectory const& traj)
110  { traj.Dump(out); return out; }
111 
112 
113 //------------------------------------------------------------------------------
TrackTrajectory()=default
Default constructor; do not use it! it&#39;s needed by ROOT I/O.
size_t LastValidPoint() const
Returns the index of the last valid point in the trajectory.
tracking::Positions_t Positions_t
Type of trajectory point list.
STL namespace.
unsigned int CountValidPoints() const
Computes and returns the number of points with valid location.
tracking::Momenta_t Momenta_t
Type of momentum list.
Flags_t fFlags
Flags of each of the points in trajectory.
double Length(size_t startAt=0) const
Returns the approximate length of the trajectory.
size_t LastPoint() const
Returns the index of the last point in the trajectory.
Definition: Trajectory.h:181
size_t NPoints() const
Returns the number of stored trajectory points.
Definition: Trajectory.h:173
A trajectory in space reconstructed from hits.
T LocationAtPoint(unsigned int p) const
Position at point p. Use e.g. as:
bool HasValidPoint(size_t i) const
Returns whether the specified point has NoPoint flag unset.
Double_t R
Data product for reconstructed trajectory in space.
std::vector< PointFlags_t > Flags_t
Type of point flag list.
tracking::Coord_t Coord_t
Type used for coordinates and values in general.
A trajectory in space reconstructed from hits.
Definition: Trajectory.h:73
constexpr auto const & left(const_AssnsIter< L, R, D, Dir > const &a, const_AssnsIter< L, R, D, Dir > const &b)
Definition: AssnsIter.h:104
std::string to_string(Flag_t< Storage > const flag)
Convert a flag into a stream (shows its index).
Definition: BitMask.h:187
Int_t min
Definition: plot.C:26
bool AtLeastValidTrajectoryPoints(unsigned int left) const
Returns whether there are at least min valid points in the trajectory.
tracking::Point_t Point_t
Type for representation of position in physical 3D space.