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