Changeset View
Changeset View
Standalone View
Standalone View
src/EvtGenBase/EvtVector4C.cpp
Show All 22 Lines | |||||
#include "EvtGenBase/EvtComplex.hh" | #include "EvtGenBase/EvtComplex.hh" | ||||
#include "EvtGenBase/EvtPatches.hh" | #include "EvtGenBase/EvtPatches.hh" | ||||
#include <assert.h> | #include <assert.h> | ||||
#include <iostream> | #include <iostream> | ||||
#include <math.h> | #include <math.h> | ||||
using std::ostream; | using std::ostream; | ||||
EvtVector4C::EvtVector4C() | |||||
{ | |||||
v[0] = EvtComplex( 0.0 ); | |||||
v[1] = EvtComplex( 0.0 ); | |||||
v[2] = EvtComplex( 0.0 ); | |||||
v[3] = EvtComplex( 0.0 ); | |||||
} | |||||
EvtVector4C::EvtVector4C( const EvtComplex& e0, const EvtComplex& e1, | |||||
const EvtComplex& e2, const EvtComplex& e3 ) | |||||
{ | |||||
v[0] = e0; | |||||
v[1] = e1; | |||||
v[2] = e2; | |||||
v[3] = e3; | |||||
} | |||||
EvtVector4C rotateEuler( const EvtVector4C& rs, double alpha, double beta, | EvtVector4C rotateEuler( const EvtVector4C& rs, double alpha, double beta, | ||||
double gamma ) | double gamma ) | ||||
{ | { | ||||
EvtVector4C tmp( rs ); | EvtVector4C tmp( rs ); | ||||
tmp.applyRotateEuler( alpha, beta, gamma ); | tmp.applyRotateEuler( alpha, beta, gamma ); | ||||
return tmp; | return tmp; | ||||
} | } | ||||
Show All 19 Lines | void EvtVector4C::applyBoostTo( const EvtVector4R& p4 ) | ||||
applyBoostTo( boost ); | applyBoostTo( boost ); | ||||
return; | return; | ||||
} | } | ||||
void EvtVector4C::applyBoostTo( const EvtVector3R& boost ) | void EvtVector4C::applyBoostTo( const EvtVector3R& boost ) | ||||
{ | { | ||||
double bx, by, bz, gamma, b2; | double bx = boost.get( 0 ); | ||||
double by = boost.get( 1 ); | |||||
bx = boost.get( 0 ); | double bz = boost.get( 2 ); | ||||
by = boost.get( 1 ); | double b2 = bx * bx + by * by + bz * bz; | ||||
bz = boost.get( 2 ); | |||||
double bxx = bx * bx; | |||||
double byy = by * by; | |||||
double bzz = bz * bz; | |||||
b2 = bxx + byy + bzz; | |||||
if ( b2 == 0.0 ) { | |||||
return; | |||||
} | |||||
assert( b2 < 1.0 ); | assert( b2 < 1.0 ); | ||||
gamma = 1.0 / sqrt( 1 - b2 ); | double gamma2 = 1 / ( 1 - b2 ); | ||||
double gamma = sqrt( gamma2 ); | |||||
double gb2 = ( gamma - 1.0 ) / b2; | double F = gamma2 / ( gamma + 1 ); | ||||
double gb2xy = gb2 * bx * by; | EvtComplex bp = bx * v[1] + by * v[2] + bz * v[3]; | ||||
double gb2xz = gb2 * bx * bz; | EvtComplex c = F * bp + gamma * v[0]; | ||||
double gb2yz = gb2 * by * bz; | |||||
v[1] += c * bx; | |||||
double gbx = gamma * bx; | v[2] += c * by; | ||||
double gby = gamma * by; | v[3] += c * bz; | ||||
double gbz = gamma * bz; | v[0] = gamma * ( v[0] + bp ); | ||||
EvtComplex e2 = v[0]; | |||||
EvtComplex px2 = v[1]; | |||||
EvtComplex py2 = v[2]; | |||||
EvtComplex pz2 = v[3]; | |||||
v[0] = gamma * e2 + gbx * px2 + gby * py2 + gbz * pz2; | |||||
v[1] = gbx * e2 + gb2 * bxx * px2 + px2 + gb2xy * py2 + gb2xz * pz2; | |||||
v[2] = gby * e2 + gb2 * byy * py2 + py2 + gb2xy * px2 + gb2yz * pz2; | |||||
v[3] = gbz * e2 + gb2 * bzz * pz2 + pz2 + gb2yz * py2 + gb2xz * px2; | |||||
return; | |||||
} | } | ||||
void EvtVector4C::applyRotateEuler( double phi, double theta, double ksi ) | void EvtVector4C::applyRotateEuler( double phi, double theta, double ksi ) | ||||
{ | { | ||||
double sp = sin( phi ); | double sp = sin( phi ); | ||||
double st = sin( theta ); | double st = sin( theta ); | ||||
double sk = sin( ksi ); | double sk = sin( ksi ); | ||||
double cp = cos( phi ); | double cp = cos( phi ); | ||||
Show All 20 Lines |