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