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