MarlinTrk  2.2.0
MarlinAidaTTTrack.h
1 #ifndef MarlinAidaTTTrack_h
2 #define MarlinAidaTTTrack_h
3 
4 #include "IMarlinTrack.h"
5 #include "IMarlinTrkSystem.h"
6 
7 #include "aidaTT/AidaTT.hh"
8 
9 #include <cmath>
10 
11 namespace MarlinTrk {
12  class MarlinAidaTT;
13 }
14 
15 namespace EVENT{
16  class TrackerHit ;
17 }
18 
19 
20 
28 namespace MarlinTrk{
29 
31 
32 public:
33 
34 
36 
38 
39 protected:
40 
41 private:
42 
43  MarlinAidaTTTrack(const MarlinAidaTTTrack&) ; // Prevent copy-construction
44  MarlinAidaTTTrack& operator=(const MarlinAidaTTTrack&) ; // Prevent assignment
45 
46  // make member functions private to force use through interface
47 
51  void setMass(double mass) ;
52 
55  double getMass() ;
56 
60  int addHit(EVENT::TrackerHit* hit) ;
61 
66  int initialise( bool fitDirection );
67 
76  int initialise( const EVENT::TrackState& ts, double /*bfield_z*/, bool fitDirection ) ;
77 
78 
83  int fit( double maxChi2Increment=DBL_MAX ) ;
84 
85 
88  int smooth() ;
89 
90 
93  int smooth( EVENT::TrackerHit* hit ) ;
94 
95 
99  int addAndFit( EVENT::TrackerHit* hit, double& chi2increment, double maxChi2Increment=DBL_MAX ) ;
100 
101 
104  int testChi2Increment( EVENT::TrackerHit* hit, double& chi2increment ) ;
105 
106 
107  // Track State Accessesors
108 
111  int getTrackState( IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
112 
113 
116  int getTrackState( EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
117 
118 
124  int getHitsInFit( std::vector<std::pair<EVENT::TrackerHit*, double> >& hits ) ;
125 
131  int getOutliers( std::vector<std::pair<EVENT::TrackerHit*, double> >& hits ) ;
132 
133 
136  int getNDF( int& ndf ) ;
137 
140  int getTrackerHitAtPositiveNDF( EVENT::TrackerHit*& trkhit ) ;
141 
142  // PROPAGATORS
143 
146  int propagate( const gear::Vector3D& point, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
147 
148 
152  int propagate( const gear::Vector3D& point, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
153 
154 
157  int propagateToLayer( int layerID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
158 
162  int propagateToLayer( int layerID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
163 
166  int propagateToDetElement( int detElementID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
167 
171  int propagateToDetElement( int detEementID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
172 
173 
174 
175  // EXTRAPOLATORS
176 
179  int extrapolate( const gear::Vector3D& point, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
180 
184  int extrapolate( const gear::Vector3D& point, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
185 
186 
189  int extrapolateToLayer( int layerID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
190 
194  int extrapolateToLayer( int layerID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
195 
198  int extrapolateToDetElement( int detElementID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
199 
203  int extrapolateToDetElement( int detEementID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
204 
205 
208  std::string toString() ;
209 
210  // INTERSECTORS
211 
212 
216  int intersectionWithLayer( int layerID, gear::Vector3D& point, int& detElementID, int mode=modeClosest ) ;
217 
221  int intersectionWithLayer( int layerID, EVENT::TrackerHit* hit, gear::Vector3D& point, int& detElementID, int mode=modeClosest ) ;
222 
225  int intersectionWithDetElement( int detElementID, gear::Vector3D& point, int mode=modeClosest ) ;
226 
230  int intersectionWithDetElement( int detElementID, EVENT::TrackerHit* hit, gear::Vector3D& point, int mode=modeClosest ) ;
231 
232 
233  //** end of memeber functions from IMarlinTrack interface
234 
236  inline double toBaseRange( double phi) const {
237  while( phi <= -M_PI ){ phi += 2. * M_PI ; }
238  while( phi > M_PI ){ phi -= 2. * M_PI ; }
239  return phi ;
240  }
241 
242 protected:
243 
244  aidaTT::trackParameters createPreFit(aidaTT::trackParameters& tp ) ;
245 
246  void getHitInfo( const EVENT::TrackerHit* hit, double* hitpos, std::vector<double>& precision, const aidaTT::ISurface* surf ) ;
247 
248  int getTrackState( const aidaTT::Vector3D& refPoint, int label, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
249 
251  int myInit() ;
252 
253  // memeber variables
254 
255  MarlinAidaTT* _aidaTT;
256 
260 
264 
267  bool _smoothed ;
268 
269  std::vector< EVENT::TrackerHit*> _lcioHits ;
270 
271  aidaTT::trackParameters _initialTrackParams ;
272 
273  aidaTT::trajectory* _fitTrajectory ;
274 
275  const std::vector<std::pair<double, const aidaTT::ISurface*> >* _intersections ;
276 
277  std::map< int, int > _indexMap ;
278 
279  double _mass ;
280 } ;
281 
282 } // end of namespace MarlinTrk
283 
284 #endif
Interface to KaltTest Kalman fitter - instantiates and holds the detector geometry.
Definition: MarlinAidaTT.h:43
int myInit()
common initialization
Definition: MarlinAidaTTTrack.cc:136
Interface for generic tracks in MarlinTrk.
Definition: IMarlinTrack.h:28
bool _fitDirection
used to store the fit direction supplied to intialise
Definition: MarlinAidaTTTrack.h:263
bool _smoothed
used to store whether smoothing has been performed
Definition: MarlinAidaTTTrack.h:267
Definition: MarlinAidaTTTrack.h:30
bool _initialised
used to store whether initial track state has been supplied or created
Definition: MarlinAidaTTTrack.h:259