PandaRoot
PndFTSCAParam.h
Go to the documentation of this file.
1 //-*- Mode: C++ -*-
2 // @(#) $Id: PndFTSCAParam.h,v 1.5 2016/10/11 02:33:47 mpugach Exp $
3 // ************************************************************************
4 // This file is property of and copyright by the ALICE HLT Project *
5 // ALICE Experiment at CERN, All rights reserved. *
6 // See cxx source for full Copyright notice *
7 // *
8 //*************************************************************************
9 
10 #ifndef PNDFTSCAPARAM_H
11 #define PNDFTSCAPARAM_H
12 
13 #include "PndFTSCADef.h"
14 #include "PndFTSVector.h"
15 #include "PndFTSCAMath.h"
16 #include "PndFTSCATrackParam.h"
17 #include "PndFTSCAParameters.h"
18 #include "FTSCAStation.h"
19 #include "CAFieldValue.h"
20 #include <cstdio>
21 
30 class L1FieldSlice;
31 
33  friend std::istream &operator>>(std::istream &, PndFTSCAParam &);
34 
35  public:
36  PndFTSCAParam();
38  {
39  if (fStations)
40  delete[] fStations;
41  }
42  void InitMagneticField();
43  void CalculateFieldSlice(L1FieldSlice &fieldSlice, const float xMax, const float yMax, const float z);
44  int NStations() const { return fNStations; }
45 
46  const FTSCAStation &Station(short i) const { return fStations[i]; }
47  void GetStripInfo(FTSCAStripInfoVector &stripInfo, const int_v iStation, const float_m &mask) const;
48 
49  float Bz() const { return fBz; }
50  float cBz() const { return fBz * 0.000299792458f; }
51 
52  void SetBz(float v) { fBz = v; }
53 
54  // void SetBoundaries( float z, float r ){ fMaxZ = z; fMaxR = r; }
55 
56  float GetBz() const { return fBz; }
57  float GetBz(float x, float y, float z) const;
58  float_v GetBz(float_v x, float_v y, float_v z) const;
59  float GetBz(const PndFTSCATrackParam &t) const;
60  float_v GetBz(const PndFTSCATrackParamVector &t) const;
61 
62  float GetX0(short iSt) const { return fStations[iSt].x0; };
63  float_v GetX0(int_v iSt, const float_m &mask) const
64  {
65  float_v r;
66  r.gather(fStations, &FTSCAStation::x0, static_cast<uint_v>(iSt), mask);
67  return r;
68  }
69 
70 #ifndef PANDA_FTS
71  float GetXOverX0(short iSt) const { return fStations[iSt].xOverX0; };
72  float GetXTimesRho(short iSt) const { return fStations[iSt].xTimesRho; };
73  float_v GetXOverX0(int_v iSt, float_m mask) const
74  {
75  float_v r;
76  r.gather(fStations, &FTSCAStation::xOverX0, static_cast<uint_v>(iSt), mask);
77  return r;
78  };
79  float_v GetXTimesRho(int_v iSt, float_m mask) const
80  {
81  float_v r;
82  r.gather(fStations, &FTSCAStation::xTimesRho, static_cast<uint_v>(iSt), mask);
83  return r;
84  };
85 #else
86  CAFieldValue GetFieldValue(int_v iSt, float_v x1, float_v x2, float_m mask) const
87  {
88  CAFieldValue r;
89  foreach_bit(int iV, mask)
90  {
91  CAFieldValue b;
92  fStations[iSt[iV]].fieldSlice.GetFieldValue(x1, x2, b, mask);
93  r.x[iV] = b.x[iV];
94  r.y[iV] = b.y[iV];
95  r.z[iV] = b.z[iV];
96  }
97  return r;
98  }
99 
100  CAFieldValue GetFieldValue(int_v iSt, int_v iVSt, float_v x1, float_v x2, float_m mask) const
101  {
102  CAFieldValue r;
103  foreach_bit(int iV, mask)
104  {
105  CAFieldValue b;
106  fStations[iSt[iV]].fieldVirtualSlice[iVSt[iV]].GetFieldValue(x1, x2, b, mask);
107  r.x[iV] = b.x[iV];
108  r.y[iV] = b.y[iV];
109  r.z[iV] = b.z[iV];
110  }
111  return r;
112  }
113 
114  int_v GetNVirtualStations(int_v iSt, float_m mask) const
115  {
116  int_v r;
117  foreach_bit(int iV, mask) { r[iV] = fStations[iSt[iV]].fieldVirtualSlice.size(); }
118  return r;
119  }
120 #endif
121 
122  float MinZ() const { return fMinZ; }
123  float MaxZ() const { return fMaxZ; }
124 #ifdef PANDA_FTS
125  float MinX() const { return fMinX; }
126  float MaxX() const { return fMaxX; }
127  float MinY() const { return fMinY; }
128  float MaxY() const { return fMaxY; }
129 #else
130  float MinR() const { return fMinR; }
131  float MaxR() const { return fMaxR; }
132 #endif
133  void StoreToFile(FILE *f) const;
134  void RestoreFromFile(FILE *f);
135 
136  const CAFieldValue &VtxFieldValue(int i = 0) const { return fVtxFieldValue[i]; }
137  const float_v &ZVtxFieldValue(int i) const { return fZVtxFieldValue[i]; }
138 
139  protected:
140  void CheckFieldApproximation(); // check the approximation of the field at the station position
141 
144  float fBz;
145 
146  CAFieldValue fVtxFieldValue[2]; // field at fZVtxFieldValue position to transport from vertex to station.
147  float_v fZVtxFieldValue[2];
148 
149  float fMinZ, fMaxZ;
150 #ifdef PANDA_FTS
151  float fMinX, fMaxX;
152  float fMinY, fMaxY;
153 #else
154  float fMinR, fMaxR;
155 #endif
156 };
157 
158 std::istream &operator>>(std::istream &, PndFTSCAParam &);
159 std::ostream &operator<<(std::ostream &, const PndFTSCAParam &);
160 
161 #endif
void SetBz(float v)
Definition: PndFTSCAParam.h:52
float GetBz() const
Definition: PndFTSCAParam.h:56
float MaxZ() const
void InitMagneticField()
float GetX0(short iSt) const
Definition: PndFTSCAParam.h:62
float cBz() const
Definition: PndFTSCAParam.h:50
void GetStripInfo(FTSCAStripInfoVector &stripInfo, const int_v iStation, const float_m &mask) const
float GetXTimesRho(short iSt) const
Definition: PndFTSCAParam.h:72
const FTSCAStation & Station(short i) const
Definition: PndFTSCAParam.h:46
__m128 v
Definition: P4_F32vec4.h:3
unsigned int i
Definition: P4_F32vec4.h:21
int NStations() const
Definition: PndFTSCAParam.h:44
const CAFieldValue & VtxFieldValue(int i=0) const
void StoreToFile(FILE *f) const
float MinZ() const
CAFieldValue fVtxFieldValue[2]
float MinR() const
FTSCAStation * fStations
float xTimesRho
Definition: FTSCAStation.h:43
float_v fZVtxFieldValue[2]
float GetXOverX0(short iSt) const
Definition: PndFTSCAParam.h:71
const float_v & ZVtxFieldValue(int i) const
float_v GetXOverX0(int_v iSt, float_m mask) const
Definition: PndFTSCAParam.h:73
void RestoreFromFile(FILE *f)
float_v GetX0(int_v iSt, const float_m &mask) const
Definition: PndFTSCAParam.h:63
void CalculateFieldSlice(L1FieldSlice &fieldSlice, const float xMax, const float yMax, const float z)
float MaxR() const
void CheckFieldApproximation()
float f
Definition: P4_F32vec4.h:20
float_v GetXTimesRho(int_v iSt, float_m mask) const
Definition: PndFTSCAParam.h:79
std::ostream & operator<<(std::ostream &, const PndFTSCAParam &)
float Bz() const
Definition: PndFTSCAParam.h:49
friend std::istream & operator>>(std::istream &, PndFTSCAParam &)