23 #ifndef KFParticleBaseSIMD_H
24 #define KFParticleBaseSIMD_H
26 #ifdef HLTCA_STANDALONE
27 #include "RootTypesDef.h"
52 #if __GNUC__ && ( defined(ENVIRONMENT32) || GCC_VERSION < 40300 )
56 void *
operator new(
size_t size) {
return _mm_malloc(
size,
sizeof(float_v)); }
57 void *
operator new[](
size_t size) {
return _mm_malloc(
size,
sizeof(float_v)); }
58 void *
operator new(
size_t size,
void *ptr) { return ::operator
new(
size, ptr);}
59 void *
operator new[](
size_t size,
void *ptr) { return ::operator
new(
size, ptr);}
60 void operator delete(
void *ptr, size_t) { _mm_free(ptr); }
61 void operator delete[](
void *ptr, size_t) { _mm_free(ptr); }
66 virtual void GetFieldValue(
const float_v xyz[], float_v B[])
const = 0;
76 virtual float_v
GetDStoPoint(
const float_v xyz[3], float_v dsdr[6] )
const = 0;
79 float_v
GetDStoPointBz( float_v
Bz,
const float_v xyz[3], float_v dsdr[6],
const float_v* param = 0 )
const;
80 float_v
GetDStoPointBy( float_v By,
const float_v xyz[3], float_v dsdr[6] )
const;
100 virtual void Transport( float_v dS,
const float_v dsdr[6], float_v
P[], float_v
C[], float_v* dsdr1=0, float_v* F=0, float_v*
F1=0 )
const = 0;
118 void Initialize(
const float_v Param[],
const float_v Cov[], int_v Charge, float_v Mass );
144 const float_v&
X ()
const {
return fP[0]; }
145 const float_v&
Y ()
const {
return fP[1]; }
146 const float_v&
Z ()
const {
return fP[2]; }
147 const float_v&
Px ()
const {
return fP[3]; }
148 const float_v&
Py ()
const {
return fP[4]; }
149 const float_v&
Pz ()
const {
return fP[5]; }
150 const float_v&
E ()
const {
return fP[6]; }
151 const float_v&
S ()
const {
return fP[7]; }
152 const int_v&
Q ()
const {
return fQ; }
171 float_m
GetR ( float_v &
r, float_v &
error )
const ;
177 float_v &
X () {
return fP[0]; }
178 float_v &
Y () {
return fP[1]; }
179 float_v &
Z () {
return fP[2]; }
180 float_v &
Px () {
return fP[3]; }
181 float_v &
Py () {
return fP[4]; }
182 float_v &
Pz () {
return fP[5]; }
183 float_v &
E () {
return fP[6]; }
184 float_v &
S () {
return fP[7]; }
185 int_v &
Q () {
return fQ; }
253 void TransportBz( float_v
Bz, 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;
255 void TransportCBM( 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;
272 const float_v Cv[]=0 )
const;
282 void RotateXY(float_v angle, float_v Vtx[3]);
301 static void MultQSQt(
const float_v
Q[],
const float_v
S[], float_v SOut[],
const int kN );
305 static Int_t
IJ( Int_t
i, Int_t
j ){
306 return ( j<=i ) ? i*(i+1)/2+j :j*(j+1)/2+
i;
309 float_v &
Cij( Int_t
i, Int_t
j ){
return fC[
IJ(i,j)]; }
311 void TransportLine( float_v
S,
const float_v* dsdr, float_v
P[], float_v
C[], float_v* dsdr1=0, float_v* F=0, float_v*
F1=0 )
const ;