FairRoot/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 {
35  public:
36 
37  PndFTSCAParam();
39  if(fStations) delete [] fStations;
40  }
41  void InitMagneticField();
42  void CalculateFieldSlice(L1FieldSlice& fieldSlice, const float xMax, const float yMax, const float z);
43  int NStations() const { return fNStations;}
44 
45  const FTSCAStation& Station( short i ) const { return fStations[i];}
46  void GetStripInfo(FTSCAStripInfoVector& stripInfo, const int_v iStation, const float_m& mask) const;
47 
48  float Bz() const { return fBz;}
49  float cBz() const { return fBz*0.000299792458f;}
50 
51  void SetBz( float v ) { fBz = v;}
52 
53 // void SetBoundaries( float z, float r ){ fMaxZ = z; fMaxR = r; }
54 
55  float GetBz() const { return fBz;}
56  float GetBz( float x, float y, float z ) const;
57  float_v GetBz( float_v x, float_v y, float_v z ) const;
58  float GetBz( const PndFTSCATrackParam &t ) const;
59  float_v GetBz( const PndFTSCATrackParamVector &t ) const;
60 
61  float GetX0( short iSt ) const { return fStations[iSt].x0; };
62  float_v GetX0( int_v iSt, const float_m& mask ) const { float_v r; r.gather( fStations, &FTSCAStation::x0, static_cast<uint_v>(iSt), mask ); return r; }
63 
64 #ifndef PANDA_FTS
65  float GetXOverX0( short iSt) const { return fStations[iSt].xOverX0; };
66  float GetXTimesRho( short iSt) const { return fStations[iSt].xTimesRho; };
67  float_v GetXOverX0( int_v iSt, float_m mask ) const { float_v r; r.gather( fStations, &FTSCAStation::xOverX0, static_cast<uint_v>(iSt), mask ); return r; };
68  float_v GetXTimesRho( int_v iSt, float_m mask ) const { float_v r; r.gather( fStations, &FTSCAStation::xTimesRho, static_cast<uint_v>(iSt), mask ); return r; };
69 #else
70  CAFieldValue GetFieldValue( int_v iSt, float_v x1, float_v x2, float_m mask ) const {
72  foreach_bit( int iV, mask ) {
74  fStations[iSt[iV]].fieldSlice.GetFieldValue( x1, x2, b, mask );
75  r.x[iV] = b.x[iV];
76  r.y[iV] = b.y[iV];
77  r.z[iV] = b.z[iV];
78  }
79  return r;
80  }
81 
82  CAFieldValue GetFieldValue( int_v iSt, int_v iVSt, float_v x1, float_v x2, float_m mask ) const {
84  foreach_bit( int iV, mask ) {
86  fStations[iSt[iV]].fieldVirtualSlice[iVSt[iV]].GetFieldValue( x1, x2, b, mask );
87  r.x[iV] = b.x[iV];
88  r.y[iV] = b.y[iV];
89  r.z[iV] = b.z[iV];
90  }
91  return r;
92  }
93 
94  int_v GetNVirtualStations( int_v iSt, float_m mask ) const {
95  int_v r;
96  foreach_bit( int iV, mask ) {
97  r[iV] = fStations[iSt[iV]].fieldVirtualSlice.size();
98  }
99  return r;
100  }
101 #endif
102 
103  float MinZ() const { return fMinZ; }
104  float MaxZ() const { return fMaxZ; }
105 #ifdef PANDA_FTS
106  float MinX() const { return fMinX; }
107  float MaxX() const { return fMaxX; }
108  float MinY() const { return fMinY; }
109  float MaxY() const { return fMaxY; }
110 #else
111  float MinR() const { return fMinR; }
112  float MaxR() const { return fMaxR; }
113 #endif
114  void StoreToFile( FILE *f ) const;
115  void RestoreFromFile( FILE *f );
116 
117 
118  const CAFieldValue &VtxFieldValue( int i = 0 ) const { return fVtxFieldValue[i]; }
119  const float_v &ZVtxFieldValue( int i ) const { return fZVtxFieldValue[i]; }
120 
121  protected:
122 
123  void CheckFieldApproximation(); //check the approximation of the field at the station position
124 
127  float fBz;
128 
129  CAFieldValue fVtxFieldValue[2]; // field at fZVtxFieldValue position to transport from vertex to station.
130  float_v fZVtxFieldValue[2];
131 
132  float fMinZ, fMaxZ;
133 #ifdef PANDA_FTS
134  float fMinX, fMaxX;
135  float fMinY, fMaxY;
136 #else
137  float fMinR, fMaxR;
138 #endif
139 
140 };
141 
144 
145 
146 #endif
void SetBz(float v)
Definition: PndFTSCAParam.h:51
double r
Definition: RiemannTest.C:14
const FTSCAStation & Station(short i) const
Definition: PndFTSCAParam.h:45
void GetStripInfo(FTSCAStripInfoVector &stripInfo, const int_v iStation, const float_m &mask) const
Int_t i
Definition: run_full.C:25
TTree * b
void InitMagneticField()
float GetBz() const
Definition: PndFTSCAParam.h:55
float_v GetX0(int_v iSt, const float_m &mask) const
Definition: PndFTSCAParam.h:62
float GetX0(short iSt) const
Definition: PndFTSCAParam.h:61
std::ostream & operator<<(std::ostream &o, const PndEventInfo &a)
float_v GetXOverX0(int_v iSt, float_m mask) const
Definition: PndFTSCAParam.h:67
float GetXOverX0(short iSt) const
Definition: PndFTSCAParam.h:65
int NStations() const
Definition: PndFTSCAParam.h:43
__m128 v
Definition: P4_F32vec4.h:4
float Bz() const
Definition: PndFTSCAParam.h:48
CAFieldValue fVtxFieldValue[2]
float cBz() const
Definition: PndFTSCAParam.h:49
FTSCAStation * fStations
float xTimesRho
Definition: FTSCAStation.h:43
float_v fZVtxFieldValue[2]
const CAFieldValue & VtxFieldValue(int i=0) const
TFile * f
Definition: bump_analys.C:12
float MaxR() const
const float_v & ZVtxFieldValue(int i) const
Double_t z
void RestoreFromFile(FILE *f)
float MinR() const
float MinZ() const
void CalculateFieldSlice(L1FieldSlice &fieldSlice, const float xMax, const float yMax, const float z)
float GetXTimesRho(short iSt) const
Definition: PndFTSCAParam.h:66
void CheckFieldApproximation()
TBuffer & operator>>(TBuffer &buf, PndAnaPidSelector *&obj)
Double_t x
TTree * t
Definition: bump_analys.C:13
Double_t y
friend std::istream & operator>>(std::istream &, PndFTSCAParam &)
void StoreToFile(FILE *f) const
float_v GetXTimesRho(int_v iSt, float_m mask) const
Definition: PndFTSCAParam.h:68
float MaxZ() const