LCFIVertex  0.7.2
vertex_lcfi/inc/trackstate.h
1 #ifndef TRACKSTATE_H
2 #define TRACKSTATE_H
3 
4 #include "../util/inc/vector3.h"
5 #include "../util/inc/matrix.h"
6 #include "../util/inc/helixrep.h"
7 #include "../inc/track.h"
8 #include <ostream>
9 
10 namespace vertex_lcfi
11 {
12  using namespace util;
13  //Forward Declarations
14  class Track;
15 
17 
25  class TrackState
26  {
27  public:
30  {}
31 
33 
38 
40 
44  TrackState(const HelixRep & init,const double & cha, const SymMatrix5x5 & cov, Track* tra);
45 
47  void resetToRef();
48 
50  void swimDistance(const double s);
51 
53  void swimToStateNearest(const Vector3 & Point);
54 
56  void swimToStateNearest(TrackState* const TrackToSwimTo);
57 
59  void swimToStateNearestXY(const Vector3 & Point);
60 
61  //Comparison methods I haven't used operator= as I think thats confusing
62  //it could mean either same state(position) or same track.
64  inline bool sameTrack(TrackState* const Track) const
65  {return (this->parentTrack() == Track->parentTrack());}
66 
68  inline bool sameTrack(Track* const Track) const
69  {return (this->parentTrack() == Track);}
70 
72  inline double distanceTo(const Vector3 & Point) const
73  {return this->position().distanceTo(Point);}
74 
76  inline double distanceTo2(const Vector3 & Point) const
77  {return this->position().distanceTo2(Point);}
78 
80  inline double xyDistanceTo(const Vector3 &Point) const
81  {return this->position().subtract(Point).mag(RPhi);}
82 
84  double chi2(const Vector3 &Point);
85 
87  double chi2_nomove(const Vector3 &Point);
88 
89  //const Vector3 & momentum() const;
90 
92  const Vector3 & position() const;
93 
95  inline double phi() const
96  {return std::fmod(_Init.phi()+(_DistanceSwum*(_Init.invR())), 2.0*3.141592654);}
97 
99  inline double charge() const
100  {return _Charge;}
101 
103  inline bool isNeutral() const
104  {return (fabs(_Charge)<0.000001);} //Floating point, hence no comparison to zero
105 
107  inline bool isCharged() const
108  {return !this->isNeutral();}
109 
111  const SymMatrix2x2& positionCovarMatrix() const;
112 
114  const SymMatrix2x2& inversePositionCovarMatrix() const;
115 
117  const Matrix3x3 vertexErrorContribution(Vector3 point) const;
118 
120  const SymMatrix3x3& positionCovarMatrixXYZ() const;
121 
123  const SymMatrix3x3& inversePositionCovarMatrixXYZ() const;
124 
126  inline Track* parentTrack() const
127  {return _ParentTrack;}
128 
130  void debugOut();
131 
132 
133  private:
134  //Private to prevent usauge of default constructor
135  TrackState()
136  {}
137 
138  double _Charge;
139 
140  HelixRep _Init;
141  //Order tsi,eta,theta,phi,invr
142  SymMatrix5x5 _InitCovarMatrix;
143 
144  mutable Vector3 _Position;
145  mutable bool _PosValid;
146 
147  mutable Vector3 _Momentum;
148  mutable bool _MomValid;
149 
150  mutable SymMatrix2x2 _PositionCovarMatrix;
151  mutable bool _PositionCovarValid;
152 
153  mutable SymMatrix2x2 _InversePositionCovarMatrix;
154  mutable bool _InversePositionCovarValid;
155 
156  mutable SymMatrix3x3 _PositionCovarMatrixXYZ;
157  mutable bool _PositionCovarValidXYZ;
158 
159  mutable SymMatrix3x3 _InversePositionCovarMatrixXYZ;
160  mutable bool _InversePositionCovarValidXYZ;
161 
162  double _DistanceSwum;
163 
164  //Pointer to Track that created this state
165  Track* _ParentTrack;
166 
167  //Swimmer to use if none specified
168  static const double _swimprecision; //Set in CPP file
169  };
170 
171  template <class charT, class traits> inline
172  std::basic_ostream<charT,traits>& operator<<(std::basic_ostream<charT,traits>&os,const TrackState& ts)
173  {
174  os << "TrackState: " << ts.parentTrack()->trackingNum() << " @ " << ts.position() << " C" << ts.isCharged() <<" H:" << ts.parentTrack()->helixRep() << " err" << ts.parentTrack()->covarianceMatrix()<< std::endl;
175  return os;
176  }
177 }
178 #endif //TRACKSTATE_H
179 
double charge() const
Charge.
Track * parentTrack() const
The Track that this TrackState belongs to, (if any)
bool sameTrack(TrackState *const Track) const
Is this the same track as another TrackState?
double distanceTo(const Vector3 &Point) const
Distance from the TrackStates current position to Point.
void * trackingNum() const
Tracking Number.
Definition: track.cpp:164
double xyDistanceTo(const Vector3 &Point) const
Distance in the XY plane from the TrackStates current position to Point.
double distanceTo2(const Vector3 &Point) const
Distance squared from the TrackStates current position to Point.
bool isNeutral() const
Is this track neutral.
bool sameTrack(Track *const Track) const
Is this the same track as Track?
Unique Track representation.
bool isCharged() const
Is this track charged.
double phi() const
Current phi of the trackstate.