PandaRoot
FTSCAHits.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 FTSCAHITS_H
10 #define FTSCAHITS_H
11 
12 #include <vector>
13 using std::vector;
14 
15 #include "PndFTSCADef.h"
16 #include "PndFTSCAMath.h"
17 #include "PndFTSCAGBHit.h"
18 #include "FTSCATES.h"
19 #include "FTSCAStrip.h"
21 #include "PndFTSCAParameters.h"
22 
23 class FTSCAHit {
24  public:
25  FTSCAHit() {}
26  FTSCAHit(const PndFTSCAGBHit &h, int id)
27  : fIStation(h.IRow()), fId(id), fErr2X1(h.Err2X1()), fErrX12(h.ErrX12()), fErr2X2(h.Err2X2()),
28 #ifdef DRIFT_TUBES
29  fR(h.R()), fErr2R(h.Err2R()), fErr2A(h.Err2A()), fBeta(h.Beta()), fIsLeft(h.IsLeft()),
30 #endif
31  fAngle(h.Angle()), fFStripP(h.FStripP()), fBStripP(h.BStripP())
32  {
34  };
35  char IStation() const { return fIStation; }
36  void SetId(int id) { fId = id; }
37  int Id() const { return fId; };
38 
39 #ifdef DRIFT_TUBES
40  float_v X1Corrected(const PndFTSCATrackParamVector &p) const;
41 #endif
42 
43  float X0() const { return fX0; }
44  float X1() const { return fX1; }
45  float X2() const { return fX2; }
46 
47  float FStrip() const { return *fFStripP; };
48  float BStrip() const { return *fBStripP; };
49  FTSCAStrip *FStripP() const { return fFStripP; };
50  FTSCAStrip *BStripP() const { return fBStripP; };
51 
52  float Err2X1() const { return fErr2X1; }
53  float ErrX12() const { return fErrX12; }
54  float Err2X2() const { return fErr2X2; }
55 
56 #ifdef DRIFT_TUBES
57  float XWire0() const { return fX0; }
58  float XWire1() const { return fX1; }
59  float XWire2() const { return fX2; }
60 
61  float R() const { return fR; }
62  float RSigned() const { return fIsLeft ? -fR : fR; }
63  float Err2R() const { return fErr2R; }
64  float Err2A() const { return fErr2A; }
65  float Beta() const { return fBeta; }
66  bool IsLeft() const { return fIsLeft; }
67 
68  void SetR(float v) { fR = v; }
69 
70 #endif
71 
72  float Angle() const { return fAngle; }
73 
74  bool IsUsed() const { return fFStripP->IsUsed() || fBStripP->IsUsed(); }
75  void SetAsUsed()
76  {
79  }
80 
81  // comparison of hits on one station, needed for std::sort, returns true if a must be before b.
82  friend bool operator<(const FTSCAHit &a, const FTSCAHit &b)
83  {
84 #ifdef DRIFT_TUBES
85  if (a.fIStation >= PndFTSCAParameters::NMVDStations)
86  return (a.Angle() < b.Angle()) || ((a.Angle() == b.Angle()) && (a.X1() < b.X1()));
87  else
88  return a.X2() / abs(a.X0()) < b.X2() / abs(b.X0()); // check why x0 < 0 is possible
89 #else
90  return a.X2() / abs(a.X0()) < b.X2() / abs(b.X0()); // check why x0 < 0 is possible
91 #endif
92  }
93 
94  // private:
95  char fIStation; // index of the station
96  int fId; // index of hits in an input array
97 
98  float fX1, fX2, fX0; // local coordinates. fX2 is vertical, along radial direction
99  float fErr2X1, fErrX12, fErr2X2; // errors squared
100 
101 #ifdef DRIFT_TUBES
102  float fR;
103  float fErr2R;
104  float fErr2A; // error along the tube
105  float fBeta;
106  bool fIsLeft; // left side or right side
107 #endif
108 
109  float fAngle; // direction of hit station. Angle between normal and vertical axis. This angle defines local CS of the hit
110 
112 };
113 
114 #ifdef DRIFT_TUBES
115 inline float_v FTSCAHit::X1Corrected(const PndFTSCATrackParamVector &p) const
116 {
117  const float_v xCorr = fR - fR * rsqrt(1 - p.SinPhi() * p.SinPhi());
118  // xCorr /= cos(3.f/180.f*3.141592); // currently neglect stereo angle
119  return (fIsLeft) ? fX1 + xCorr : fX1 - xCorr;
120 }
121 #endif
122 
123 template <typename T>
125 
126 template <>
127 class FTSCAElementsOnStation<FTSCAHit> : public vector<FTSCAHit> {
128  public:
129  char &IStation() { return fISta; }
130  const char &IStation() const { return fISta; }
131 
132  private:
133  char fISta;
134 };
135 
136 class FTSCAHits { // same as in FTSCAStationArray
137  public:
138  typedef FTSCAHit T;
139 
141  {
142  assert((unsigned char)i < fElement.size());
143  return fElement[i];
144  }
146  {
147  assert((unsigned char)i < fElement.size());
148  return fElement[i];
149  }
151  {
152  assert((unsigned char)i < fElement.size());
153  return fElement[i];
154  }
156  {
157  assert((unsigned char)i < fElement.size());
158  return fElement[i];
159  }
161  {
162  assert((unsigned char)i < fElement.size());
163  return fElement[i];
164  }
165 
167  FTSCAHits(int nSta, int nHitsPerStation = 1)
168  {
169  fElement.resize(nSta);
170  for (int i = 0; i < nSta; ++i) {
171  fElement[i].IStation() = i;
172  fElement[i].reserve(nHitsPerStation);
173  }
174  }
175 
176  T &operator[](TES i) { return fElement[i.s][i.e]; }
177  const T &operator[](TES i) const { return fElement[i.s][i.e]; }
178 
179  char NStations() const { return fElement.size(); }
180 
181  void Add(const T &hit)
182  {
183  const int iSta = hit.IStation();
184  fElement[iSta].push_back(hit);
185  }
186 
187  void Sort()
188  {
189  for (unsigned int i = 0; i < fElement.size(); ++i) {
190  FTSCAElementsOnStation<T> &hits = fElement[i];
191  std::sort(hits.begin(), hits.end());
192  }
193  }
194 
195  void Clean()
196  { // remove used hits
197  for (unsigned int i = 0; i < fElement.size(); ++i) {
198  FTSCAElementsOnStation<T> &hits = fElement[i];
200  tmp.IStation() = i;
201  // tmp.reserve( hits.size() );
202  for (unsigned int iH = 0; iH < hits.size(); ++iH) {
203  if (hits[iH].IsUsed())
204  continue;
205  tmp.push_back(hits[iH]);
206  }
207  hits.clear();
208  hits = tmp;
209  tmp.clear();
210  }
211  }
212 
213  protected:
214  vector<FTSCAElementsOnStation<T>> fElement; // hits on stations
215 };
216 
217 #endif
const char & IStation() const
Definition: FTSCAHits.h:130
float fErrX12
Definition: FTSCAHits.h:99
FTSCAElementsOnStation< T > & operator[](char i)
Definition: FTSCAHits.h:155
const T & operator[](TES i) const
Definition: FTSCAHits.h:177
char fIStation
Definition: FTSCAHits.h:95
bool IsUsed() const
Definition: FTSCAStrip.h:20
friend bool operator<(const FTSCAHit &a, const FTSCAHit &b)
Definition: FTSCAHits.h:82
const FTSCAElementsOnStation< T > & operator[](char i) const
Definition: FTSCAHits.h:160
int Id() const
Definition: FTSCAHits.h:37
int fId
Definition: FTSCAHits.h:96
const char & IStation() const
FTSCAHit(const PndFTSCAGBHit &h, int id)
Definition: FTSCAHits.h:26
float FStrip() const
Definition: FTSCAHits.h:47
vector< FTSCAElementsOnStation< T > > fElement
Definition: FTSCAHits.h:214
FTSCAStrip * BStripP() const
Definition: FTSCAHits.h:50
float fErr2X2
Definition: FTSCAHits.h:99
float BStrip() const
Definition: FTSCAHits.h:48
float fX0
Definition: FTSCAHits.h:98
__m128 v
Definition: P4_F32vec4.h:3
const FTSCAElementsOnStation< T > & OnStation(char i) const
Definition: FTSCAHits.h:150
unsigned int i
Definition: P4_F32vec4.h:21
FTSCAStrip * FStripP() const
Definition: FTSCAHits.h:49
FTSCAHits(int nSta, int nHitsPerStation=1)
Definition: FTSCAHits.h:167
FTSCAStrip * fBStripP
Definition: FTSCAHits.h:111
void GetLocalX0X1X2(float &x0, float &x1, float &x2) const
char NStations() const
Definition: FTSCAHits.h:179
FTSCAElementsOnStation< T > & OnStation(char i)
Definition: FTSCAHits.h:145
float X2() const
Definition: FTSCAHits.h:45
friend F32vec4 rsqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:31
void SetAsUsed()
Definition: FTSCAStrip.h:22
float X1() const
Definition: FTSCAHits.h:44
float Angle() const
Definition: FTSCAHits.h:72
FTSCAHit()
Definition: FTSCAHits.h:25
float fX2
Definition: FTSCAHits.h:98
char s
Definition: FTSCATES.h:21
const FTSCAElementsOnStation< T > & OnStationConst(char i) const
Definition: FTSCAHits.h:140
float fAngle
Definition: FTSCAHits.h:109
bool IsUsed() const
Definition: FTSCAHits.h:74
float Err2X2() const
Definition: FTSCAHits.h:54
float ErrX12() const
Definition: FTSCAHits.h:53
void SetId(int id)
Definition: FTSCAHits.h:36
void SetAsUsed()
Definition: FTSCAHits.h:75
void Sort()
Definition: FTSCAHits.h:187
char IStation() const
Definition: FTSCAHits.h:35
void Add(const T &hit)
Definition: FTSCAHits.h:181
FTSCAStrip * fFStripP
Definition: FTSCAHits.h:111
float X0() const
Definition: FTSCAHits.h:43
void Clean()
Definition: FTSCAHits.h:195
FTSCAHit T
Definition: FTSCAHits.h:138
float fX1
Definition: FTSCAHits.h:98
unsigned int e
Definition: FTSCATES.h:22
float Err2X1() const
Definition: FTSCAHits.h:52
float fErr2X1
Definition: FTSCAHits.h:99
Definition: FTSCATES.h:12
T & operator[](TES i)
Definition: FTSCAHits.h:176