26 #ifndef KFPARTICLESIMD_H
27 #define KFPARTICLESIMD_H
36 #ifdef NonhomogeneousField
64 void *
operator new(
size_t size) {
return _mm_malloc(
size,
sizeof(float_v)); }
65 void *
operator new[](
size_t size) {
return _mm_malloc(
size,
sizeof(float_v)); }
66 void *
operator new(
size_t size,
void *ptr) { return ::operator
new(
size, ptr);}
67 void *
operator new[](
size_t size,
void *ptr) { return ::operator
new(
size, ptr);}
68 void operator delete(
void *ptr, size_t) { _mm_free(ptr); }
69 void operator delete[](
void *ptr, size_t) { _mm_free(ptr); }
75 #ifdef HomogeneousField
76 static void SetField( float_v
Bz );
78 #ifdef NonhomogeneousField
90 #ifdef NonhomogeneousField
108 void Create(
const float_v Param[],
const float_v Cov[], int_v Charge, float_v
mass );
142 float_v
GetX ()
const ;
143 float_v
GetY ()
const ;
144 float_v
GetZ ()
const ;
145 float_v
GetPx ()
const ;
146 float_v
GetPy ()
const ;
147 float_v
GetPz ()
const ;
148 float_v
GetE ()
const ;
149 float_v
GetS ()
const ;
150 int_v
GetQ ()
const ;
156 const float_v&
X ()
const {
return fP[0]; }
157 const float_v&
Y ()
const {
return fP[1]; }
158 const float_v&
Z ()
const {
return fP[2]; }
159 const float_v&
Px ()
const {
return fP[3]; }
160 const float_v&
Py ()
const {
return fP[4]; }
161 const float_v&
Pz ()
const {
return fP[5]; }
162 const float_v&
E ()
const {
return fP[6]; }
163 const float_v&
S ()
const {
return fP[7]; }
164 const int_v &
Q ()
const {
return fQ; }
174 float_v
GetP ()
const;
175 float_v
GetPt ()
const;
183 float_v
GetR ()
const;
210 float_m
GetP ( float_v &
P, float_v &SigmaP )
const ;
211 float_m
GetPt ( float_v &
Pt, float_v &SigmaPt )
const ;
212 float_m
GetEta ( float_v &
Eta, float_v &SigmaEta )
const ;
213 float_m
GetPhi ( float_v &Phi, float_v &SigmaPhi )
const ;
214 float_m
GetMomentum ( float_v &
P, float_v &SigmaP )
const ;
215 float_m
GetMass ( float_v &M, float_v &SigmaM )
const ;
218 float_m
GetLifeTime ( float_v &
T, float_v &SigmaT )
const ;
219 float_m
GetR ( float_v &
R, float_v &SigmaR )
const ;
278 #ifdef HomogeneousField
287 float_v
GetDStoPoint(
const float_v xyz[3], float_v dsdr[6] )
const ;
302 #ifdef HomogeneousField
308 #ifdef HomogeneousField
318 #ifdef HomogeneousField
335 void GetFieldValue(
const float_v xyz[], float_v B[] )
const ;
337 void Transport( float_v dS,
const float_v* dsdr, float_v
P[], float_v
C[], float_v* dsdr1=0, float_v* F=0, float_v*
F1=0 )
const ;
347 #ifdef HomogeneousField
348 static float_v GetFieldAlice();
353 #ifdef HomogeneousField
356 #ifdef NonhomogeneousField
372 #ifdef HomogeneousField
373 inline void KFParticleSIMD::SetField( float_v
Bz )
385 #ifdef NonhomogeneousField
406 #ifdef NonhomogeneousField
878 #ifdef NonhomogeneousField
879 fField = Daughter.fField;
899 #ifdef NonhomogeneousField
900 fField = Daughter.fField;
918 #ifdef NonhomogeneousField
919 fField = vDaughters[0]->fField;
931 float_v dsdr[6] = {0.f,0.f,0.f,0.f,0.f,0.f};
935 #ifdef HomogeneousField
936 inline void KFParticleSIMD::TransportToVertex(
const KFPVertex &
v )
968 #ifdef HomogeneousField
971 #ifdef NonhomogeneousField
977 #ifdef HomogeneousField
978 inline float_v KFParticleSIMD::GetFieldAlice()
985 #ifdef HomogeneousField
994 B[2] = GetFieldAlice();
998 #ifdef NonhomogeneousField
1031 #ifdef HomogeneousField
1034 #ifdef NonhomogeneousField
1050 #ifdef HomogeneousField
1053 #ifdef NonhomogeneousField
1082 #ifdef HomogeneousField
1085 #ifdef NonhomogeneousField
1102 #ifdef HomogeneousField
1105 #ifdef NonhomogeneousField