MarlinTrk  2.2.0
MarlinKalTestTrack.h
1 #ifndef MarlinKalTestTrack_h
2 #define MarlinKalTestTrack_h
3 
4 #include "IMarlinTrack.h"
5 #include "IMarlinTrkSystem.h"
6 
7 #include <TObjArray.h>
8 
9 #include <cmath>
10 
11 #include "TMatrixD.h"
12 
13 
14 class TKalTrack ;
15 class THelicalTrack ;
16 class TKalTrackSite ;
17 class ILDVTrackHit ;
18 class ILDVMeasLayer ;
19 
20 namespace MarlinTrk {
21  class MarlinKalTest;
22 }
23 
24 namespace EVENT{
25  class TrackerHit ;
26 }
27 
28 
29 
37 namespace MarlinTrk{
38 
40 
41 public:
42 
43 #ifdef MARLINTRK_DIAGNOSTICS_ON
44  friend class DiagnosticsController;
45 #endif
46 
48 
50 
51 protected:
52 
53 private:
54 
55  MarlinKalTestTrack(const MarlinKalTestTrack&) ; // Prevent copy-construction
56  MarlinKalTestTrack& operator=(const MarlinKalTestTrack&) ; // Prevent assignment
57 
58  // make member functions private to force use through interface
59 
63  void setMass(double mass) ;
64 
67  double getMass() ;
68 
72  int addHit(EVENT::TrackerHit* hit) ;
73 
77  int addHit(EVENT::TrackerHit* trkhit, const ILDVMeasLayer* ml) ;
78 
82  int addHit( EVENT::TrackerHit* trkhit, ILDVTrackHit* kalhit, const ILDVMeasLayer* ml) ;
83 
88  int initialise( bool fitDirection );
89 
98  int initialise( const EVENT::TrackState& ts, double /*bfield_z*/, bool fitDirection ) ;
99 
100 
105  int fit( double maxChi2Increment=DBL_MAX ) ;
106 
107 
110  int smooth() ;
111 
112 
115  int smooth( EVENT::TrackerHit* hit ) ;
116 
117 
121  int addAndFit( EVENT::TrackerHit* hit, double& chi2increment, double maxChi2Increment=DBL_MAX ) ;
122 
126  int addAndFit( ILDVTrackHit* kalhit, double& chi2increment, TKalTrackSite*& site, double maxChi2Increment=DBL_MAX ) ;
127 
128 
131  int testChi2Increment( EVENT::TrackerHit* hit, double& chi2increment ) ;
132 
133 
134  // Track State Accessesors
135 
138  int getTrackState( IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
139 
140 
143  int getTrackState( EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
144 
145 
151  int getHitsInFit( std::vector<std::pair<EVENT::TrackerHit*, double> >& hits ) ;
152 
158  int getOutliers( std::vector<std::pair<EVENT::TrackerHit*, double> >& hits ) ;
159 
160 
163  int getNDF( int& ndf ) ;
164 
167  int getTrackerHitAtPositiveNDF( EVENT::TrackerHit*& trkhit ) ;
168 
169  // PROPAGATORS
170 
173  int propagate( const gear::Vector3D& point, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
174 
175 
179  int propagate( const gear::Vector3D& point, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
180 
181 
185  int propagate( const gear::Vector3D& point, const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, const ILDVMeasLayer* ml = 0 ) ;
186 
187 
190  int propagateToLayer( int layerID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
191 
195  int propagateToLayer( int layerID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
196 
200  int propagateToLayer( int layerID, const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
201 
204  int propagateToDetElement( int detElementID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
205 
209  int propagateToDetElement( int detEementID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
210 
214  int propagateToDetElement( int detEementID, const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
215 
216 
217 
218  // EXTRAPOLATORS
219 
222  int extrapolate( const gear::Vector3D& point, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
223 
227  int extrapolate( const gear::Vector3D& point, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
228 
232  int extrapolate( const gear::Vector3D& point, const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) ;
233 
236  int extrapolateToLayer( int layerID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
237 
241  int extrapolateToLayer( int layerID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
242 
246  int extrapolateToLayer( int layerID, const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int& detElementID, int mode=modeClosest ) ;
247 
250  int extrapolateToDetElement( int detElementID, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
251 
255  int extrapolateToDetElement( int detEementID, EVENT::TrackerHit* hit, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
256 
260  int extrapolateToDetElement( int detEementID, const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf, int mode=modeClosest ) ;
261 
262 
263 
264  // INTERSECTORS
265 
266 
270  int intersectionWithLayer( int layerID, gear::Vector3D& point, int& detElementID, int mode=modeClosest ) ;
271 
275  int intersectionWithLayer( int layerID, EVENT::TrackerHit* hit, gear::Vector3D& point, int& detElementID, int mode=modeClosest ) ;
276 
280  int intersectionWithLayer( int layerID, const TKalTrackSite& site, gear::Vector3D& point, int& detElementID, const ILDVMeasLayer*& ml, int mode=modeClosest ) ;
281 
282 
285  int intersectionWithDetElement( int detElementID, gear::Vector3D& point, int mode=modeClosest ) ;
286 
290  int intersectionWithDetElement( int detElementID, EVENT::TrackerHit* hit, gear::Vector3D& point, int mode=modeClosest ) ;
291 
295  int intersectionWithDetElement( int detElementID, const TKalTrackSite& site, gear::Vector3D& point, const ILDVMeasLayer*& ml, int mode=modeClosest ) ;
296 
300  int findIntersection( std::vector<ILDVMeasLayer const*>& meas_modules, const TKalTrackSite& site, gear::Vector3D& point, int& detElementID, const ILDVMeasLayer*& ml, int mode=modeClosest ) ;
301 
305  int findIntersection( const ILDVMeasLayer& meas_module, const TKalTrackSite& site, gear::Vector3D& point, double& dphi, int& detElementIDconst, int mode=modeClosest ) ;
306 
307 
310  std::string toString() ;
311 
312 
313  //** end of memeber functions from IMarlinTrack interface
314 
317  void ToLCIOTrackState( const TKalTrackSite& site, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) const ;
318 
321  void ToLCIOTrackState( const THelicalTrack& helix, const TMatrixD& cov, IMPL::TrackStateImpl& ts, double& chi2, int& ndf ) const ;
322 
325  int getSiteFromLCIOHit( EVENT::TrackerHit* trkhit, TKalTrackSite*& site ) const ;
326 
327 
328 
330  inline double toBaseRange( double phi) const {
331  while( phi <= -M_PI ){ phi += 2. * M_PI ; }
332  while( phi > M_PI ){ phi -= 2. * M_PI ; }
333  return phi ;
334  }
335 
336 
337  // memeber variables
338 
339  TKalTrack* _kaltrack;
340 
341  EVENT::TrackerHitVec _lcioHits ;
342 
343  TObjArray* _kalhits;
344 
345  MarlinKalTest* _ktest;
346 
347  EVENT::TrackerHit* _trackHitAtPositiveNDF;
348  int _hitIndexAtPositiveNDF;
349 
352  bool _initialised ;
353 
356  bool _fitDirection ;
357 
358 
361  bool _smoothed ;
362 
365  std::map<EVENT::TrackerHit*,TKalTrackSite*> _hit_used_for_sites ;
366 
369  std::map<EVENT::TrackerHit*,ILDVTrackHit*> _lcio_hits_to_kaltest_hits ;
370 
373  std::vector<EVENT::TrackerHit*> _hit_not_used_for_sites ;
374 
377  std::vector< std::pair<EVENT::TrackerHit*, double> > _hit_chi2_values ;
378 
381  std::vector< std::pair<EVENT::TrackerHit*, double> > _outlier_chi2_values ;
382 
383 
384 } ;
385 
386 } // end of namespace MarlinTrk
387 
388 #endif
Definition: MarlinKalTestTrack.h:39
Interface to KaltTest Kalman fitter - instantiates and holds the detector geometry.
Definition: MarlinKalTest.h:42
Interface for generic tracks in MarlinTrk.
Definition: IMarlinTrack.h:28