Changeset View
Changeset View
Standalone View
Standalone View
src/EvtGenBase/EvtTensor4C.cpp
Show First 20 Lines • Show All 266 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
EvtTensor4C& EvtTensor4C::operator*=( double d ) | EvtTensor4C& EvtTensor4C::operator*=( double d ) | ||||
{ | { | ||||
int i, j; | int i, j; | ||||
for ( i = 0; i < 4; i++ ) { | for ( i = 0; i < 4; i++ ) { | ||||
for ( j = 0; j < 4; j++ ) { | for ( j = 0; j < 4; j++ ) { | ||||
t[i][j] *= EvtComplex( d, 0.0 ); | t[i][j] *= d; | ||||
} | } | ||||
} | } | ||||
return *this; | return *this; | ||||
} | } | ||||
EvtTensor4C operator*( const EvtTensor4C& t1, double d ) | EvtTensor4C operator*( const EvtTensor4C& t1, double d ) | ||||
{ | { | ||||
return EvtTensor4C( t1 ) *= EvtComplex( d, 0.0 ); | return EvtTensor4C( t1 ) *= d; | ||||
} | } | ||||
EvtTensor4C operator*( double d, const EvtTensor4C& t1 ) | EvtTensor4C operator*( double d, const EvtTensor4C& t1 ) | ||||
{ | { | ||||
return EvtTensor4C( t1 ) *= EvtComplex( d, 0.0 ); | return EvtTensor4C( t1 ) *= d; | ||||
} | } | ||||
EvtComplex cont( const EvtTensor4C& t1, const EvtTensor4C& t2 ) | EvtComplex cont( const EvtTensor4C& t1, const EvtTensor4C& t2 ) | ||||
{ | { | ||||
EvtComplex sum( 0.0, 0.0 ); | EvtComplex sum( 0.0, 0.0 ); | ||||
int i, j; | int i, j; | ||||
for ( i = 0; i < 4; i++ ) { | for ( i = 0; i < 4; i++ ) { | ||||
▲ Show 20 Lines • Show All 251 Lines • ▼ Show 20 Lines | for ( i = 0; i < 4; i++ ) { | ||||
for ( j = 0; j < 4; j++ ) { | for ( j = 0; j < 4; j++ ) { | ||||
t[i][j] = EvtComplex( 0.0 ); | t[i][j] = EvtComplex( 0.0 ); | ||||
for ( k = 0; k < 4; k++ ) { | for ( k = 0; k < 4; k++ ) { | ||||
t[i][j] += lambda[i][k] * tt[k][j]; | t[i][j] += lambda[i][k] * tt[k][j]; | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
EvtTensor4C& EvtTensor4C::addScaled( EvtComplex s, const EvtTensor4C& a ) | |||||
{ | |||||
EvtComplex* u0 = reinterpret_cast<EvtComplex*>( t ); | |||||
const EvtComplex* u1 = reinterpret_cast<const EvtComplex*>( a.t ); | |||||
for ( int i = 0; i < 16; i++ ) | |||||
u0[i] += s * u1[i]; | |||||
return *this; | |||||
} | |||||
EvtTensor4C EvtGenFunctions::asymProd( const EvtVector4R& a, const EvtVector4R& b ) | |||||
{ | |||||
// t_{ij} = eps_{ijkl} a^{k} b^{l} | |||||
// eps_{ijkl} is the Levi-Civita symbol -- antisymmetric tensor | |||||
EvtTensor4C res; | |||||
EvtComplex( &t )[4][4] = res.t; | |||||
double t01 = a.get( 2 ) * b.get( 3 ) - a.get( 3 ) * b.get( 2 ); | |||||
t[0][1] = t01; | |||||
t[1][0] = -t01; | |||||
double t02 = a.get( 3 ) * b.get( 1 ) - a.get( 1 ) * b.get( 3 ); | |||||
t[0][2] = t02; | |||||
t[2][0] = -t02; | |||||
double t03 = a.get( 1 ) * b.get( 2 ) - a.get( 2 ) * b.get( 1 ); | |||||
t[0][3] = t03; | |||||
t[3][0] = -t03; | |||||
double t12 = a.get( 0 ) * b.get( 3 ) - a.get( 3 ) * b.get( 0 ); | |||||
t[1][2] = t12; | |||||
t[2][1] = -t12; | |||||
double t13 = a.get( 2 ) * b.get( 0 ) - a.get( 0 ) * b.get( 2 ); | |||||
t[1][3] = t13; | |||||
t[3][1] = -t13; | |||||
double t23 = a.get( 0 ) * b.get( 1 ) - a.get( 1 ) * b.get( 0 ); | |||||
t[2][3] = t23; | |||||
t[3][2] = -t23; | |||||
return res; | |||||
} | |||||
EvtVector4R EvtGenFunctions::asymProd( const EvtVector4R& _a, | |||||
const EvtVector4R& _b, | |||||
const EvtVector4R& _c ) | |||||
{ | |||||
// t_{ij} = eps_{ijkl} a^{j} b^{k} c^{l} | |||||
// eps_{ijkl} is the Levi-Civita symbol -- antisymmetric tensor | |||||
double a[4] = { _a.get( 0 ), _a.get( 1 ), _a.get( 2 ), _a.get( 3 ) }; | |||||
/* | |||||
double b[4] = {_b.get(0), _b.get(1), _b.get(2), _b.get(3)}; | |||||
double c[4] = {_c.get(0), _c.get(1), _c.get(2), _c.get(3)}; | |||||
double t[4] = {0}; | |||||
t[0] += a[1]*b[2]*c[3]; | |||||
t[0] -= a[1]*b[3]*c[2]; | |||||
t[0] -= a[2]*b[1]*c[3]; | |||||
t[0] += a[2]*b[3]*c[1]; | |||||
t[0] += a[3]*b[1]*c[2]; | |||||
t[0] -= a[3]*b[2]*c[1]; | |||||
t[1] -= a[0]*b[2]*c[3]; | |||||
t[1] += a[0]*b[3]*c[2]; | |||||
t[1] += a[2]*b[0]*c[3]; | |||||
t[1] -= a[2]*b[3]*c[0]; | |||||
t[1] -= a[3]*b[0]*c[2]; | |||||
t[1] += a[3]*b[2]*c[0]; | |||||
t[2] += a[0]*b[1]*c[3]; | |||||
t[2] -= a[0]*b[3]*c[1]; | |||||
t[2] -= a[1]*b[0]*c[3]; | |||||
t[2] += a[1]*b[3]*c[0]; | |||||
t[2] += a[3]*b[0]*c[1]; | |||||
t[2] -= a[3]*b[1]*c[0]; | |||||
t[3] -= a[0]*b[1]*c[2]; | |||||
t[3] += a[0]*b[2]*c[1]; | |||||
t[3] += a[1]*b[0]*c[2]; | |||||
t[3] -= a[1]*b[2]*c[0]; | |||||
t[3] -= a[2]*b[0]*c[1]; | |||||
t[3] += a[2]*b[1]*c[0]; | |||||
EvtVector4R res(t[0],t[1],t[2],t[3]); | |||||
// std::cout<<res<<std::endl; | |||||
return res; | |||||
*/ | |||||
double t01 = _b.get( 2 ) * _c.get( 3 ) - _b.get( 3 ) * _c.get( 2 ); | |||||
double t02 = _b.get( 3 ) * _c.get( 1 ) - _b.get( 1 ) * _c.get( 3 ); | |||||
double t03 = _b.get( 1 ) * _c.get( 2 ) - _b.get( 2 ) * _c.get( 1 ); | |||||
double t12 = _b.get( 0 ) * _c.get( 3 ) - _b.get( 3 ) * _c.get( 0 ); | |||||
double t13 = _b.get( 2 ) * _c.get( 0 ) - _b.get( 0 ) * _c.get( 2 ); | |||||
double t23 = _b.get( 0 ) * _c.get( 1 ) - _b.get( 1 ) * _c.get( 0 ); | |||||
double u[4] = { 0 }; | |||||
u[0] = t01 * a[1] + t02 * a[2] + t03 * a[3]; | |||||
u[1] = t12 * a[2] + t13 * a[3] - t01 * a[0]; | |||||
u[2] = t23 * a[3] - ( t02 * a[0] + t12 * a[1] ); | |||||
u[3] = -( t03 * a[0] + t13 * a[1] + t23 * a[2] ); | |||||
// std::cout<<u[0]<<" "<<u[1]<<" "<<u[2]<<" "<<u[3]<<"\n"; | |||||
return EvtVector4R( u[0], u[1], u[2], u[3] ); | |||||
} | |||||
EvtVector4C EvtGenFunctions::asymProd( const EvtVector4C& _a, | |||||
const EvtVector4R& _b, | |||||
const EvtVector4R& _c ) | |||||
{ | |||||
// t_{ij} = eps_{ijkl} a^{j} b^{k} c^{l} | |||||
// eps_{ijkl} is the Levi-Civita symbol -- antisymmetric tensor | |||||
EvtComplex a[4] = { _a.get( 0 ), _a.get( 1 ), _a.get( 2 ), _a.get( 3 ) }; | |||||
double t01 = _b.get( 2 ) * _c.get( 3 ) - _b.get( 3 ) * _c.get( 2 ); | |||||
double t02 = _b.get( 3 ) * _c.get( 1 ) - _b.get( 1 ) * _c.get( 3 ); | |||||
double t03 = _b.get( 1 ) * _c.get( 2 ) - _b.get( 2 ) * _c.get( 1 ); | |||||
double t12 = _b.get( 0 ) * _c.get( 3 ) - _b.get( 3 ) * _c.get( 0 ); | |||||
double t13 = _b.get( 2 ) * _c.get( 0 ) - _b.get( 0 ) * _c.get( 2 ); | |||||
double t23 = _b.get( 0 ) * _c.get( 1 ) - _b.get( 1 ) * _c.get( 0 ); | |||||
return EvtVector4C( t01 * a[1] + t02 * a[2] + t03 * a[3], | |||||
t12 * a[2] + t13 * a[3] - t01 * a[0], | |||||
t23 * a[3] - ( t02 * a[0] + t12 * a[1] ), | |||||
-( t03 * a[0] + t13 * a[1] + t23 * a[2] ) ); | |||||
} |