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