1 //--------------------------------------------------------------------------
4 // This software is part of the EvtGen package developed jointly
5 // for the BaBar and CLEO collaborations. If you use all or part
6 // of it, please give an appropriate acknowledgement.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 1998 Caltech, UCSB
11 // Module: EvtVector4C.cc
13 // Description: EvtComplex implemention of 4 - vectors
15 // Modification history:
17 // DJL/RYD September 25, 1996 Module created
19 //------------------------------------------------------------------------
21 #include "EvtGenBase/EvtPatches.hh"
25 #include "EvtGenBase/EvtComplex.hh"
26 #include "EvtGenBase/EvtVector4C.hh"
30 EvtVector4C::EvtVector4C(){
32 v[0]=EvtComplex(0.0); v[1]=EvtComplex(0.0);
33 v[2]=EvtComplex(0.0); v[3]=EvtComplex(0.0);
37 EvtVector4C::~EvtVector4C(){}
39 EvtVector4C::EvtVector4C(const EvtComplex& e0,const EvtComplex& e1,
40 const EvtComplex& e2,const EvtComplex& e3){
42 v[0]=e0; v[1]=e1; v[2]=e2; v[3]=e3;
46 EvtVector4C rotateEuler(const EvtVector4C& rs,
47 double alpha,double beta,double gamma){
50 tmp.applyRotateEuler(alpha,beta,gamma);
55 EvtVector4C boostTo(const EvtVector4C& rs,
56 const EvtVector4R p4){
64 EvtVector4C boostTo(const EvtVector4C& rs,
65 const EvtVector3R boost){
68 tmp.applyBoostTo(boost);
73 void EvtVector4C::applyBoostTo(const EvtVector4R& p4){
77 EvtVector3R boost(p4.get(1)/e,p4.get(2)/e,p4.get(3)/e);
85 void EvtVector4C::applyBoostTo(const EvtVector3R& boost){
87 double bx,by,bz,gamma,b2;
106 gamma=1.0/sqrt(1-b2);
109 double gb2=(gamma-1.0)/b2;
111 double gb2xy=gb2*bx*by;
112 double gb2xz=gb2*bx*bz;
113 double gb2yz=gb2*by*bz;
124 v[0]=gamma*e2+gbx*px2+gby*py2+gbz*pz2;
126 v[1]=gbx*e2+gb2*bxx*px2+px2+gb2xy*py2+gb2xz*pz2;
128 v[2]=gby*e2+gb2*byy*py2+py2+gb2xy*px2+gb2yz*pz2;
130 v[3]=gbz*e2+gb2*bzz*pz2+pz2+gb2yz*py2+gb2xz*px2;
136 void EvtVector4C::applyRotateEuler(double phi,double theta,double ksi){
139 double st=sin(theta);
142 double ct=cos(theta);
145 EvtComplex x=( ck*ct*cp-sk*sp)*v[1]+( -sk*ct*cp-ck*sp)*v[2]+st*cp*v[3];
146 EvtComplex y=( ck*ct*sp+sk*cp)*v[1]+(-sk*ct*sp+ck*cp)*v[2]+st*sp*v[3];
147 EvtComplex z=-ck*st*v[1]+sk*st*v[2]+ct*v[3];
156 ostream& operator<<(ostream& s, const EvtVector4C& v){
158 s<<"("<<v.v[0]<<","<<v.v[1]<<","<<v.v[2]<<","<<v.v[3]<<")";