MarlinTrk  2.2.0
MarlinDDKalTestTrack.h
1 #ifndef MarlinDDKalTestTrack_h
2 #define MarlinDDKalTestTrack_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 DDVTrackHit ;
18 class DDVMeasLayer ;
19 
20 namespace MarlinTrk {
21  class MarlinDDKalTest;
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  MarlinDDKalTestTrack(const MarlinDDKalTestTrack&) ; // Prevent copy-construction
56  MarlinDDKalTestTrack& operator=(const MarlinDDKalTestTrack&) ; // 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 DDVMeasLayer* ml) ;
78 
82  int addHit( EVENT::TrackerHit* trkhit, DDVTrackHit* kalhit, const DDVMeasLayer* 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( DDVTrackHit* 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 DDVMeasLayer* 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 
265  std::string toString() ;
266 
267  // INTERSECTORS
268 
269 
273  int intersectionWithLayer( int layerID, gear::Vector3D& point, int& detElementID, int mode=modeClosest ) ;
274 
278  int intersectionWithLayer( int layerID, EVENT::TrackerHit* hit, gear::Vector3D& point, int& detElementID, int mode=modeClosest ) ;
279 
283  int intersectionWithLayer( int layerID, const TKalTrackSite& site, gear::Vector3D& point, int& detElementID, const DDVMeasLayer*& ml, int mode=modeClosest ) ;
284 
285 
288  int intersectionWithDetElement( int detElementID, gear::Vector3D& point, int mode=modeClosest ) ;
289 
293  int intersectionWithDetElement( int detElementID, EVENT::TrackerHit* hit, gear::Vector3D& point, int mode=modeClosest ) ;
294 
298  int intersectionWithDetElement( int detElementID, const TKalTrackSite& site, gear::Vector3D& point, const DDVMeasLayer*& ml, int mode=modeClosest ) ;
299 
303  int findIntersection( std::vector<DDVMeasLayer const*>& meas_modules, const TKalTrackSite& site, gear::Vector3D& point, int& detElementID, const DDVMeasLayer*& ml, int mode=modeClosest ) ;
304 
308  int findIntersection( const DDVMeasLayer& meas_module, const TKalTrackSite& site, gear::Vector3D& point, double& dphi, int& detElementIDconst, int mode=modeClosest ) ;
309 
310 
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 
338  // memeber variables
339 
340  TKalTrack* _kaltrack;
341 
342  EVENT::TrackerHitVec _lcioHits ;
343 
344  TObjArray* _kalhits;
345 
346  MarlinDDKalTest* _ktest;
347 
348  EVENT::TrackerHit* _trackHitAtPositiveNDF;
349  int _hitIndexAtPositiveNDF;
350 
353  bool _initialised ;
354 
357  bool _fitDirection ;
358 
359 
362  bool _smoothed ;
363 
366  std::map<EVENT::TrackerHit*,TKalTrackSite*> _hit_used_for_sites ;
367 
370  std::map<EVENT::TrackerHit*,DDVTrackHit*> _lcio_hits_to_kaltest_hits ;
371 
374  std::vector<EVENT::TrackerHit*> _hit_not_used_for_sites ;
375 
378  std::vector< std::pair<EVENT::TrackerHit*, double> > _hit_chi2_values ;
379 
382  std::vector< std::pair<EVENT::TrackerHit*, double> > _outlier_chi2_values ;
383 
384 
385 } ;
386 
387 } // end of namespace MarlinTrk
388 
389 #endif
Interface for generic tracks in MarlinTrk.
Definition: IMarlinTrack.h:28
Definition: MarlinDDKalTestTrack.h:39
Interface to KaltTest Kalman fitter - instantiates and holds the detector geometry.
Definition: MarlinDDKalTest.h:40