PandaRoot
PndCAGBTracker.h
Go to the documentation of this file.
1 //-*- Mode: C++ -*-
2 // *****************************************************************************
3 // *
4 // @Autors: I.Kulakov; M.Zyzak; I.Kisel *
5 // @e-mail: I.Kulakov@gsi.de; M.Zyzak@gsi.de; I.Kisel@compeng.uni-frankfurt.de *
6 // *
7 // *****************************************************************************
8 
9 #ifndef PNDCAGBTRACKER_H
10 #define PNDCAGBTRACKER_H
11 
12 #include "PndCATimer.h"
13 
14 #include "PndCADef.h"
15 #include "PndCATrackParam.h"
16 #include "PndCAParam.h"
17 
18 #include "PndCAGBHit.h"
19 #include "PndCAGBTrack.h"
20 
21 #include "PndCAStationArray.h"
22 #include "PndCATarget.h"
23 #include "PndCANPlets.h"
24 #include "PndCANPletsV.h"
25 
26 #include "PndCAStationSTT.h"
27 
28 class PndCATarget;
29 class PndCAHit;
30 class PndCATrack;
31 class PndCAHits;
32 class PndCATracks;
33 class PndCAHitV;
34 class PndCAHitsV;
35 
36 #include <cstdio>
37 #include <iostream>
38 #include <vector>
39 #include <string>
40 using std::string;
41 using std::vector;
42 
43 class PndCAMerger;
44 
46  public:
49  void Init();
50 
51  void StartEvent();
52  void SetNSlices(int N);
53 
54  const PndCAGBHit *Hits() const { return &fHits[0]; }
55  const PndCAGBHit &Hit(int index) const
56  {
57  if (index < 0 || index >= (int)fHits.size()) {
58  cout << "error hit index ind " << index << " size " << fHits.size() << " nHits " << fNHits << endl;
59  exit(0);
60  }
61  return fHits[index];
62  }
63 
64  int NHits() const { return fNHits; }
65  double Time() const { return fTime; }
66  double StatTime(int iTimer) const { return fStatTime[iTimer]; }
67  int NTimers() const { return fNTimers; }
68  int StatNEvents() const { return fStatNEvents; }
69  int NTracks() const { return fNTracks; }
70  PndCAGBTrack *Tracks() const { return fTracks; }
71  PndCAGBTrack *Tracks() { return fTracks; }
72  const PndCAGBTrack &Track(int i) const { return fTracks[i]; }
73  int *TrackHits() const { return fTrackHits; }
74  int *TrackHits() { return fTrackHits; }
75  int TrackHit(int i) const { return fTrackHits[i]; }
76 
77  const PndCAParam &GetParameters() const { return fParameters; }
79 
80  int NStations() const { return fParameters.NStations(); }
81 
82  void WriteSettings(std::ostream &out) const;
83  void ReadSettings(std::istringstream &in);
84  void WriteEvent(FILE *out) const;
85 
86  // void ReadTracks( std::istream &in );
87 
88  void SaveHitsInFile(string prefix) const; // Save Hits in txt file. @prefix - prefix for file name. Ex: "./data/ev1"
89  // void SaveSettingsInFile( string prefix ) const; // Save geometry in txt file. @prefix - prefix for file name. Ex: "./data/"
90  bool SaveTracksInFile(string prefix) const;
91  bool ReadHitsFromFile(string prefix);
92  // bool ReadSettingsFromFile( string prefix );
93 
94  double SliceTrackerTime() const { return fSliceTrackerTime; }
95  double SliceTrackerCpuTime() const { return fSliceTrackerCpuTime; }
96 
97  void StoreToFile(const char *filename) const;
98  void RestoreFromFile(FILE *f);
99 
100  void SetHits(std::vector<PndCAGBHit> &hits); // need for StRoot
101  int GetHitsSize() const { return fHits.size(); }
102 
103  void FindTracks();
104 
105  void CATrackFinder();
106 
107  // fuctions used by TrackFinder
108 
109  void Create1Plets(const PndCATarget &target, const PndCAHits &hits, PndCAElementsOnStation<PndCANPletV> &singlets, int iStation);
111 
112  void CreateNPlets(const PndCATarget &target, const PndCAHits &hits, PndCAElementsOnStation<PndCANPletV> &triplets, int iStation, int cellLength);
113 
114  void FindNeighbours(PndCANPlets &triplets);
115  void CreateTracks(const PndCANPlets &triplets, PndCATracks &tracks);
116 
117  void InvertCholetsky(float a[15]) const;
118  void MultiplySS(float const C[15], float const V[15], float K[5][5]) const;
119  void MultiplyMS(float const C[5][5], float const V[15], float K[15]) const;
120  void MultiplySR(float const C[15], float const r_in[5], float r_out[5]) const;
121  void FilterTracks(float const r[5], float const C[15], float const m[5], float const V[15], float R[5], float W[15], float &chi2) const;
122  void Merge(PndCATracks &tracks);
123 
124  void FindBestCandidate(int ista, PndCATrack &best_tr, int currITrip, PndCATrack &curr_tr, unsigned char min_best_l, const PndCANPlets &triplets, unsigned int &nCalls);
125 
126  // private
127 
128  enum {
129  kFastPrimIter, // primary fast tracks
130  kAllPrimIter, // primary all tracks
131  kAllPrimJumpIter, // primary tracks with jumped triplets
132  kAllSecIter // secondary all tracks
133  };
134  int fFindIter; // current iteration number
135 
137  float fMaxInvMom; // max considered q/p for tracks
138  float fPick_m, // coefficient for size of region on middle station for add middle hits in triplets: Dx = Pick*sigma_x Dy = Pick*sigma_y
139  fPick_r, // same for right hits
140  fPick; // pick for current procedure
141  float fPickNeighbour; // (PickNeighbour < dp/dp_error) => triplets are neighbours
142  float TRACK_PROB_CUT; // = 0.01;
143  float TRACK_CHI2_CUT; // = 10.0; // cut for tracks candidates. per one DoF
144  float_v TRIPLET_CHI2_CUT; // = 5.0; // cut for selecting triplets before collecting tracks.per one DoF
145  float fMaxDX0; // Set correction in order to take into account overlaping
146 
148  friend class PndCAPerformance; // dbg
149  protected:
150  vector<PndCAGBHit> fHits; //* hit array
151  int fNHits; //* N hits in event
152 
153  int *fTrackHits; //* track->hits reference array
154  PndCAGBTrack *fTracks; //* array of tracks
155  int fNTracks; //* N tracks
156 
157  double fTime; //* total time
158  static const int fNTimers = 25;
159  double fStatTime[fNTimers]; //* timers
160  int fStatNEvents; //* n events proceed
161 
162  double fSliceTrackerTime; // reco time of the slice tracker;
163  double fSliceTrackerCpuTime; // reco time of the slice tracker;
165  PndCATFTimerInfo fTi; // for iterations
167  PndCATFTimerInfo fStatTi; // for iterations
168 
171 
172  private:
174  PndCAGBTracker &operator=(const PndCAGBTracker &);
175 };
176 
177 #endif
int NTimers() const
double StatTime(int iTimer) const
const PndCAGBTrack & Track(int i) const
__m128 m
Definition: P4_F32vec4.h:26
PndCATFIterTimerInfo fStatGTi
int TrackHit(int i) const
void StoreToFile(const char *filename) const
friend class PndCAPerformance
Try to group close hits in row formed by one track. After sort hits.
double fStatTime[fNTimers]
const PndCAGBHit * Hits() const
PndCAGBTrack * Tracks() const
static const int fNTimers
PndCATFIterTimerInfo fGTi
PndCATFTimerInfo fTi
int NTracks() const
PndCAParam fParameters
unsigned int i
Definition: P4_F32vec4.h:21
PndCAGBTrack * Tracks()
const PndCAParam & GetParameters() const
void FindBestCandidate(int ista, PndCATrack &best_tr, int currITrip, PndCATrack &curr_tr, unsigned char min_best_l, const PndCANPlets &triplets, unsigned int &nCalls)
double Time() const
void Create1Plets(const PndCATarget &target, const PndCAHits &hits, PndCAElementsOnStation< PndCANPletV > &singlets, int iStation)
void InvertCholetsky(float a[15]) const
int NStations() const
Definition: PndCAParam.h:43
void PickUpHits(PndCAElementsOnStation< PndCANPletV > &a, PndCAElementsOnStation< PndCANPletV > &r, int iS)
int GetHitsSize() const
bool ReadHitsFromFile(string prefix)
bool SaveTracksInFile(string prefix) const
void RestoreFromFile(FILE *f)
PndCAGBTrack * fTracks
int * TrackHits() const
double SliceTrackerCpuTime() const
vector< PndCAGBHit > fHits
void MultiplySS(float const C[15], float const V[15], float K[5][5]) const
double SliceTrackerTime() const
void SetHits(std::vector< PndCAGBHit > &hits)
int NStations() const
void Merge(PndCATracks &tracks)
void FindNeighbours(PndCANPlets &triplets)
PndCAParam & GetParametersNonConst()
void FilterTracks(float const r[5], float const C[15], float const m[5], float const V[15], float R[5], float W[15], float &chi2) const
void MultiplySR(float const C[15], float const r_in[5], float r_out[5]) const
void CreateTracks(const PndCANPlets &triplets, PndCATracks &tracks)
int StatNEvents() const
void SaveHitsInFile(string prefix) const
int NHits() const
PndCATFTimerInfo fStatTi
void CATrackFinder()
float f
Definition: P4_F32vec4.h:20
PndCAStationSTT fStations[50]
void CreateNPlets(const PndCATarget &target, const PndCAHits &hits, PndCAElementsOnStation< PndCANPletV > &triplets, int iStation, int cellLength)
float_v TRIPLET_CHI2_CUT
double fSliceTrackerCpuTime
PndCATarget fTarget
void WriteEvent(FILE *out) const
void WriteSettings(std::ostream &out) const
void MultiplyMS(float const C[5][5], float const V[15], float K[15]) const
const PndCAGBHit & Hit(int index) const
void SetNSlices(int N)
void ReadSettings(std::istringstream &in)
double fSliceTrackerTime