PandaRoot
PndFTSCAGBTracker.h
Go to the documentation of this file.
1 //-*- Mode: C++ -*-
2 // *****************************************************************************
3 // *
4 // @Autors: I.Kulakov; M.Pugach; M.Zyzak; I.Kisel *
5 // @e-mail: I.Kulakov@gsi.de; M.Pugach@gsi.de; M.Zyzak@gsi.de; I.Kisel@compeng.uni-frankfurt.de *
6 // *
7 // *****************************************************************************
8 
9 #ifndef PNDFTSCAGBTRACKER_H
10 #define PNDFTSCAGBTRACKER_H
11 
12 #include "L1Timer.h"
13 
14 #include "PndFTSCADef.h"
15 #include "PndFTSCATrackParam.h"
16 #include "PndFTSCAParam.h"
17 #include "PndFTSArray.h"
18 #include "PndFTSCAGBHit.h"
19 #include "FTSCAStrip.h"
20 #include "PndFTSCAGBTrack.h"
21 
22 #include "FTSCAStationArray.h"
23 #include "FTSCATarget.h"
24 #include "FTSCANPlets.h"
25 #include "FTSCANPletsV.h"
26 
27 class FTSCATarget;
28 class FTSCAHit;
29 class FTSCATrack;
30 class FTSCAHits;
31 class FTSCATracks;
32 class FTSCAHitV;
33 class FTSCAHitsV;
34 
35 #include <cstdio>
36 #include <iostream>
37 #include <vector>
38 #include <string>
39 using std::string;
40 using std::vector;
41 
42 // class PndFTSCAMerger;
43 
45  public:
48  void Init();
49 
50  void StartEvent();
51  void SetNSlices(int N);
52  void SetNHits(int nHits);
53 
54  // void SetGBHits();
55 
56  const PndFTSCAGBHit *Hits() const { return fHits.Data(); }
57  const PndFTSCAGBHit &Hit(int index) const { return fHits[index]; }
58  int NHits() const { return fNHits; }
59  double Time() const { return fTime; }
60  double StatTime(int iTimer) const { return fStatTime[iTimer]; }
61  int NTimers() const { return fNTimers; }
62  int StatNEvents() const { return fStatNEvents; }
63  int NTracks() const { return fNTracks; }
64  PndFTSCAGBTrack *Tracks() const { return fTracks; }
66  const PndFTSCAGBTrack &Track(int i) const { return fTracks[i]; }
67  int *TrackHits() const { return fTrackHits; }
68  int *TrackHits() { return fTrackHits; }
69  int TrackHit(int i) const { return fTrackHits[i]; }
70 
71  const PndFTSCAParam &GetParameters() const { return fParameters; }
72 
73  int NStations() const { return fParameters.NStations(); }
74 
75  /*
76  void WriteSettings( std::ostream &out ) const;
77  void WriteEvent( FILE *out ) const;
78  void ReadEvent( FILE *in );
79  void ReadTracks( std::istream &in );
80 
81  void SaveHitsInFile( string prefix ) const; // Save Hits in txt file. @prefix - prefix for file name. Ex: "./data/ev1"
82  void SaveSettingsInFile( string prefix ) const; // Save geometry in txt file. @prefix - prefix for file name. Ex: "./data/"
83  bool SaveTracksInFile( string prefix ) const;
84  int ReadHitsFromFile( string prefix );
85  void StoreToFile( const char *filename ) const;
86  void RestoreFromFile( FILE *f );
87  */
88 
89  bool ReadSettingsFromFile(string prefix);
90  void ReadSettings(std::istream &in);
91  double SliceTrackerTime() const { return fSliceTrackerTime; }
92  double SliceTrackerCpuTime() const { return fSliceTrackerCpuTime; }
93 
94  void SetHits(std::vector<PndFTSCAGBHit> &hits);
95  int GetHitsSize() const { return fHits.Size(); }
96 
98 
99  void FindTracks();
100  // void IdealTrackFinder(); // for debug
101 
102  void FitTracks();
103  float_m FitTrack(PndFTSCATrackParamVector &t, uint_v &firstHits, uint_v::Memory &NTrackHits, int &nTracksV, float_m active0, bool dir);
104 
105  void InitialTrackApproximation(PndFTSCATrackParamVector &t, uint_v &firstHits, uint_v::Memory &NTrackHits, int &nTracksV, float_m active0);
106 
107  float_m FitTrackCA(PndFTSCATrackParamVector &t, uint_v &firstHits, uint_v::Memory &NTrackHits, int &nTracksV, float_m active0, bool dir, bool init = false);
108 
109  void CATrackFinder();
110  // fuctions used by TrackFinder
111  void EstimatePV(const FTSCAHitsV &hits, float &zPV);
112 
113  void CreateNPlets(const FTSCATarget &target, const FTSCAHitsV &hits, FTSCANPletsV &singlets);
114  void CreateNPlets(const FTSCANPletsV &doublets, FTSCANPletsV &triplets);
115 
116  // fts--->>>stt import begin
118  void Create1Plets(const FTSCATarget &target, const FTSCAHits &hits, FTSCAElementsOnStation<FTSCANPletV> &singlets, int iStation);
119  void CreateNPlets(const FTSCATarget &target, const FTSCAHits &hits, FTSCAElementsOnStation<FTSCANPletV> &triplets, int iStation, int cellLength);
120  // fts--->>>stt import end
121 
122  void FindNeighbours(FTSCANPlets &triplets);
123  void CreateTracks(const FTSCANPlets &triplets, FTSCATracks &tracks);
124 
125  void InvertCholetsky(float a[15]) const;
126  void MultiplySS(float const C[15], float const V[15], float K[5][5]) const;
127  void MultiplyMS(float const C[5][5], float const V[15], float K[15]) const;
128  void MultiplySR(float const C[15], float const r_in[5], float r_out[5]) const;
129  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;
130  void Merge(FTSCATracks &tracks);
131  // FTSCAElementsOnStation<FTSCANPletV> Combine( const FTSCATarget& t, const FTSCAElementsOnStation<FTSCAHitV>& h);
132  // FTSCAElementsOnStation<FTSCANPletV> Combine( const FTSCAElementsOnStation<FTSCANPletV>& a, const FTSCAElementsOnStation<FTSCANPletV>& b );
133  float_m Refit(FTSCANPletV &triplet, const FTSCAHits &hits);
134  void Refit_1(FTSCANPletV &triplet, const FTSCAHits &hits);
135 
136  void FindBestCandidate(int ista, FTSCATrack &best_tr, int currITrip, FTSCATrack &curr_tr, unsigned char min_best_l, const FTSCANPlets &triplets, unsigned int &nCalls);
137  float_m IsEqual(const PndFTSCATrackParamVector &p, const FTSCAHit &h);
138 
139  // private
140 
141 #if defined(PANDA_STT) || defined(PANDA_FTS)
142  enum { fNFindIterations = 1 };
143 #elif defined(ALICE_ITS) || defined(STAR_HFT)
144  enum { fNFindIterations = 2 };
145 #else
146 #error UNKNOWN DETECTOR
147 #endif
148  enum {
149  kFastPrimIter, // primary fast tracks
150  kAllPrimIter, // primary all tracks
151  kAllPrimJumpIter, // primary tracks with jumped triplets
152  kAllSecIter // secondary all tracks
153  };
154  int fFindIter; // current iteration number
155 
156  bool fFindGappedTracks; // = true -> construct triplets with skipped stations
158  float fMaxInvMom; // max considered q/p for tracks
159  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
160  fPick_r, // same for right hits
161  fPick; // pick for current procedure
162  float fPickNeighbour; // (PickNeighbour < dp/dp_error) => triplets are neighbours
163  float TRACK_PROB_CUT; // = 0.01;
164  float TRACK_CHI2_CUT; // = 10.0; // cut for tracks candidates. per one DoF
165  float_v TRIPLET_CHI2_CUT; // = 5.0; // cut for selecting triplets before collecting tracks.per one DoF
166  float fMaxDX0; // Set correction in order to take into account overlaping
167 
169  friend class PndFTSCAPerformance; // dbg
170 
172 
173  protected:
174  // PndFTSResizableArray<PndFTSCAGBHit> fHits; //* hit array
177  int fNHits; //* N hits in event
178  int *fTrackHits; //* track->hits reference array
179  PndFTSCAGBTrack *fTracks; //* array of tracks
180  int fNTracks; //* N tracks
181 
182  double fTime; //* total time
183  static const int fNTimers = 25;
184  double fStatTime[fNTimers]; //* timers
185  int fStatNEvents; //* n events proceed
186 
187  double fSliceTrackerTime; // reco time of the slice tracker;
188  double fSliceTrackerCpuTime; // reco time of the slice tracker;
190  L1CATFTimerInfo fTi; // for iterations
192  L1CATFTimerInfo fStatTi; // for iterations
193 
195 
196  private:
198  PndFTSCAGBTracker &operator=(const PndFTSCAGBTracker &);
199 };
200 
201 #endif
void Merge(FTSCATracks &tracks)
bool ReadSettingsFromFile(string prefix)
void MultiplySS(float const C[15], float const V[15], float K[5][5]) const
void MultiplyMS(float const C[5][5], float const V[15], float K[15]) const
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
PndFTSCAParam fParameters
PndFTSCAGBTrack * fTracks
double SliceTrackerTime() const
L1CATFTimerInfo fTi
L1CATFTimerInfo fStatTi
__m128 m
Definition: P4_F32vec4.h:26
void InitialTrackApproximation(PndFTSCATrackParamVector &t, uint_v &firstHits, uint_v::Memory &NTrackHits, int &nTracksV, float_m active0)
float_m FitTrackCA(PndFTSCATrackParamVector &t, uint_v &firstHits, uint_v::Memory &NTrackHits, int &nTracksV, float_m active0, bool dir, bool init=false)
PndFTSResizableArray< FTSCAStrip > fBStrips
const PndFTSCAGBHit & Hit(int index) const
const PndFTSCAParam & GetParameters() const
float_m IsEqual(const PndFTSCATrackParamVector &p, const FTSCAHit &h)
void PickUpHits(FTSCAElementsOnStation< FTSCANPletV > &a, FTSCAElementsOnStation< FTSCANPletV > &r, int iS)
int * TrackHits() const
void ReadSettings(std::istream &in)
double StatTime(int iTimer) const
PndFTSCAGBTrack * Tracks()
double fStatTime[fNTimers]
unsigned int i
Definition: P4_F32vec4.h:21
float_m Refit(FTSCANPletV &triplet, const FTSCAHits &hits)
float_m FitTrack(PndFTSCATrackParamVector &t, uint_v &firstHits, uint_v::Memory &NTrackHits, int &nTracksV, float_m active0, bool dir)
L1CATFIterTimerInfo fStatGTi
int NStations() const
Definition: PndFTSCAParam.h:44
PndFTSResizableArray< FTSCAStrip > fFStrips
PndFTSResizableArray< PndFTSCAGBHit > fHits
void EstimatePV(const FTSCAHitsV &hits, float &zPV)
void FindBestCandidate(int ista, FTSCATrack &best_tr, int currITrip, FTSCATrack &curr_tr, unsigned char min_best_l, const FTSCANPlets &triplets, unsigned int &nCalls)
friend class PndFTSCAPerformance
Try to group close hits in row formed by one track. After sort hits.
void SetHits(std::vector< PndFTSCAGBHit > &hits)
PndFTSCAParam & GetParametersNonConst()
double Time() const
const PndFTSCAGBTrack & Track(int i) const
void SetNHits(int nHits)
double SliceTrackerCpuTime() const
void Create1Plets(const FTSCATarget &target, const FTSCAHits &hits, FTSCAElementsOnStation< FTSCANPletV > &singlets, int iStation)
void CreateTracks(const FTSCANPlets &triplets, FTSCATracks &tracks)
int Size() const
Definition: PndFTSArray.h:486
static const int fNTimers
void InvertCholetsky(float a[15]) const
const PndFTSCAGBHit * Hits() const
void SetNSlices(int N)
void MultiplySR(float const C[15], float const r_in[5], float r_out[5]) const
void FindNeighbours(FTSCANPlets &triplets)
void CreateNPlets(const FTSCATarget &target, const FTSCAHitsV &hits, FTSCANPletsV &singlets)
int GetHitsSize() const
L1CATFIterTimerInfo fGTi
PndFTSCAGBTrack * Tracks() const
int TrackHit(int i) const
int StatNEvents() const
void Refit_1(FTSCANPletV &triplet, const FTSCAHits &hits)
Definition: SQM.h:1