]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - TEvtGen/EvtGenBase/EvtVector3R.cxx
AliDecayer realisation for the EvtGen code and EvtGen itself.
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtVector3R.cxx
diff --git a/TEvtGen/EvtGenBase/EvtVector3R.cxx b/TEvtGen/EvtGenBase/EvtVector3R.cxx
new file mode 100644 (file)
index 0000000..0f90eac
--- /dev/null
@@ -0,0 +1,120 @@
+//--------------------------------------------------------------------------
+//
+// Environment:
+//      This software is part of the EvtGen package developed jointly
+//      for the BaBar and CLEO collaborations.  If you use all or part
+//      of it, please give an appropriate acknowledgement.
+//
+// Copyright Information: See EvtGen/COPYRIGHT
+//      Copyright (C) 1998      Caltech, UCSB
+//
+// Module: EvtVector3R.cc
+//
+// Description: Real implementation of 3-vectors
+//
+// Modification history:
+//
+//    RYD       September 5, 1997       Module created
+//
+//------------------------------------------------------------------------
+// 
+#include "EvtGenBase/EvtPatches.hh"
+#include <iostream>
+#include <math.h>
+#include "EvtGenBase/EvtVector3R.hh"
+using std::ostream;
+
+
+
+EvtVector3R::~EvtVector3R(){}
+
+EvtVector3R::EvtVector3R(){
+  
+  v[0]=v[1]=v[2]=0.0;
+}
+
+
+EvtVector3R::EvtVector3R(double x,double y, double z){
+  
+  v[0]=x; v[1]=y; v[2]=z;
+}
+
+EvtVector3R rotateEuler(const EvtVector3R& v,
+                       double alpha,double beta,double gamma){
+
+  EvtVector3R tmp(v);
+  tmp.applyRotateEuler(alpha,beta,gamma);
+  return tmp;
+
+}
+
+
+void EvtVector3R::applyRotateEuler(double phi,double theta,double ksi){
+
+  double temp[3];
+  double sp,st,sk,cp,ct,ck;
+
+  sp=sin(phi);
+  st=sin(theta);
+  sk=sin(ksi);
+  cp=cos(phi);
+  ct=cos(theta);
+  ck=cos(ksi);
+
+  temp[0]=( ck*ct*cp-sk*sp)*v[0]+( -sk*ct*cp-ck*sp)*v[1]+st*cp*v[2];
+  temp[1]=( ck*ct*sp+sk*cp)*v[0]+(-sk*ct*sp+ck*cp)*v[1]+st*sp*v[2];
+  temp[2]=-ck*st*v[0]+sk*st*v[1]+ct*v[2];
+
+
+  v[0]=temp[0];
+  v[1]=temp[1];
+  v[2]=temp[2];
+}
+
+ostream& operator<<(ostream& s,const EvtVector3R& v){
+  s<<"("<<v.v[0]<<","<<v.v[1]<<","<<v.v[2]<<")";
+
+  return s;
+
+}
+
+
+EvtVector3R cross( const EvtVector3R& p1,const EvtVector3R& p2 ){
+
+  //Calcs the cross product.  Added by djl on July 27, 1995.
+  //Modified for real vectros by ryd Aug 28-96
+
+  return EvtVector3R(p1.v[1]*p2.v[2] - p1.v[2]*p2.v[1],
+                    p1.v[2]*p2.v[0] - p1.v[0]*p2.v[2],
+                    p1.v[0]*p2.v[1] - p1.v[1]*p2.v[0]);
+
+}
+
+double EvtVector3R::d3mag() const
+
+// returns the 3 momentum mag.
+{
+  double temp;
+
+  temp = v[0]*v[0]+v[1]*v[1]+v[2]*v[2];
+  temp = sqrt( temp );
+
+  return temp;
+} // r3mag
+
+double EvtVector3R::dot ( const EvtVector3R& p2 ){
+
+  double temp;
+
+  temp = v[0]*p2.v[0];
+  temp += v[0]*p2.v[0];
+  temp += v[0]*p2.v[0];
+  return temp;
+} //dot
+
+
+
+
+