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