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