MarlinTPC  1.2.0
KalTrackingTemplate.h
1 #ifndef KALTRACKINGTEMPLATE_H
2 #define KALTRACKINGTEMPLATE_H
3 
4 #include <map>
5 #include <list>
6 #include <EVENT/TrackerHit.h>
7 #include <IMPL/TrackImpl.h>
8 #include "TPCHitMap.h"
9 #include "TPCHitDomain.h"
10 #include <gear/TPCParameters.h>
11 #include <kaldet/GearTPCKalDetector.h>
12 #include <kaldet/GearTPCHit.h>
13 #include <gear/GearMgr.h>
14 #include <TMatrixD.h>
15 #include "TVector3.h"
16 
17 #include "KalTrackingBase.h"
18 
19 namespace marlintpc
20 {
21 
31  template <class ContainerT> class KalTrackingTemplate : public KalTrackingBase
32 {
33  public:
34  KalTrackingTemplate(const gear::GearMgr &gearMgr,
35  unsigned int minTrackHits,
36  unsigned int maxSkipRows,
37  double maxDeltaChi2,
38  int hitDistanceFactor,
39  int startingHitMode,
40  double vDrift,
41  std::string modulesNotUsed);
42 
43  virtual ~KalTrackingTemplate();
44 
47  virtual std::list<EVENT::Track*> findTracks(EVENT::LCCollection const * hitCollection);
48 
49 
52  void setMaxDeltaChi2 (double max){_maxDeltaChi2 = max;}
53 
56  void setMinTrackHits(unsigned int min)
57  {
58  _minTrackHits = min;
59  }
60 
63  void setMaxSkipRows(unsigned int max)
64  {
65  _maxSkipRows = max;
66  }
67 
68  protected:
71  virtual void printStateVector() = 0;
72 
73  virtual IMPL::TrackImpl* getTrack(ModuleRowHit firstHit);
74 
77  virtual void searchTrackHit();
78 
81  virtual bool searchTrack(ModuleRowHit hit) = 0;
82 
89  virtual bool doAddAndFilter(ContainerT * track, ModuleRowHit hit) = 0;
90 
91  virtual double getTrackTangentAndLayerAngle(ContainerT * trackCandidate) = 0;
92 
93 
104  // virtual ContainerT * createTrackCandidate( ModuleRowHit hit ) = 0;
105 
108  virtual double calculateDeltaChi2(ContainerT * trackCandidate) = 0;
109 
112  virtual void reset();
113 
116  //std::list<ModuleRowHit> _hitsOnTrack;
117  std::vector<ModuleRowHit> _hitsOnTrack;
118 
121  gear::GearMgr const & _gearMgr;
122 
126 
127 
130  const gear::TPCParameters& _tpcParameters;
131 
134  // ModuleRowHit _lastBestHit;
135 
138  unsigned int _minTrackHits;
139 
140  //FIXME:use enum
143  int _direction;//+1: index increaing; -1: index decreasing
144  static const int INWARDS=-1;
145  static const int OUTWARDS=1;
146 
149  unsigned int _maxSkipRows;
150 
154 
155  int _hitDistanceFactor;
156 
157  int _startingHitMode;
158 
159  double _vDrift; //< The drift velocity
160 
161  kaldet::GearTPCKalDetector _kalDetector;
162 
163  TKalDetCradle _detectorCradle;
164 
168 
169  virtual void setLCIOTrackParameters(IMPL::TrackImpl* trk) = 0;
170 
171  ContainerT * _containerTrack;
172 
174  virtual kaldet::GearTPCHit * createGearHit( ModuleRowHit const & mhr ) const;
175 
178  {
180  TVector3 coordinates;
182  enum Status{IntersectionOK, OutOfDetector, NoIntersection,
183  NoIntersectionInActiveRegion} status;
184 
186  Intersection(TVector3 _coordinates_, Status _status_)
187  : coordinates(_coordinates_), status(_status_)
188  {}
189  };
190 
194  virtual Intersection extrapolateIntoNextLayer(int targetDistance,
195  bool useFarHit) = 0;
196 
197  virtual const kaldet::GearTPCMeasLayer* extrapolateIntoNextLayer(int targetDistance) = 0;
198 
199  private:
201 
202  KalTrackingTemplate& operator = (const KalTrackingTemplate& orig);
203 };
204 
205 }
206 #endif //KALTRACKINGTEMPLATE_H
Intersection(TVector3 _coordinates_, Status _status_)
Convenience constructor.
Definition: KalTrackingTemplate.h:186
std::vector< ModuleRowHit > _hitsOnTrack
Hit list of the track.
Definition: KalTrackingTemplate.h:117
virtual void searchTrackHit()
Search a proper hit to track.
This is a base KalDet tracking class.
Definition: KalTrackingBase.h:16
Definition: TPCHitDomain.h:17
Struct to hold module and row and a hit in this row.
Definition: TPCHitMap.h:79
virtual void reset()
Reset parameters and data of track.
virtual std::list< EVENT::Track * > findTracks(EVENT::LCCollection const *hitCollection)
Find all possible tracks in the given hit collection.
double _maxDeltaChi2
Maximum delta chi2.
Definition: KalTrackingTemplate.h:153
Definition: TPCHitMap.h:116
TPCHitMap _tpcHitMap
The container of all arranged hits.
Definition: KalTrackingTemplate.h:167
int _direction
track direction
Definition: KalTrackingTemplate.h:143
Status
The status whether the intersection calculation succeeded.
Definition: KalTrackingTemplate.h:182
virtual bool doAddAndFilter(ContainerT *track, ModuleRowHit hit)=0
Add a new site to track and update track parameters.
virtual Intersection extrapolateIntoNextLayer(int targetDistance, bool useFarHit)=0
Use the current track state of the containerTrack to extrapolate into the next layer.
void setMaxDeltaChi2(double max)
Set maximum delta chi2.
Definition: KalTrackingTemplate.h:52
virtual double calculateDeltaChi2(ContainerT *trackCandidate)=0
Create a track candidate by making a KalHit from the ModuleRowHit and creating a TrackSite from it...
const gear::TPCParameters & _tpcParameters
TPC geometry.
Definition: KalTrackingTemplate.h:130
unsigned int _maxSkipRows
Maximum track skipping row.
Definition: KalTrackingTemplate.h:149
This is a base KalDet tracking class.
Definition: KalTrackingTemplate.h:31
TVector3 coordinates
The coordinates of the intersection.
Definition: KalTrackingTemplate.h:180
unsigned int _minTrackHits
The last hit that is added to track.
Definition: KalTrackingTemplate.h:138
virtual kaldet::GearTPCHit * createGearHit(ModuleRowHit const &mhr) const
Create a kalman hit from module, row and the lcio hit (ModuleRowHit object)
void setMinTrackHits(unsigned int min)
Set minimum number of hits on track.
Definition: KalTrackingTemplate.h:56
A struct as return value for the extrapolation into the next layer.
Definition: KalTrackingTemplate.h:177
virtual void printStateVector()=0
Convenience function for printing.
virtual bool searchTrack(ModuleRowHit hit)=0
Search track starting from hit.
void setMaxSkipRows(unsigned int max)
Set maximum track skipping row.
Definition: KalTrackingTemplate.h:63
TPCHitDomain * _domain
An area on the TPC readout plane, now it is (module, row)
Definition: KalTrackingTemplate.h:125