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: EvtGen/EvtVector3R.hh
13 // Description: Class to describe real 3 vectors
15 // Modification history:
17 // RYD Sept. 5, 1997 Module created
19 //------------------------------------------------------------------------
21 #ifndef EVTVECTOR3R_HH
22 #define EVTVECTOR3R_HH
28 friend EvtVector3R rotateEuler(const EvtVector3R& v,
29 double phi,double theta,double ksi);
31 inline friend EvtVector3R operator*(double c,const EvtVector3R& v2);
32 inline friend double operator*(const EvtVector3R& v1,const EvtVector3R& v2);
33 inline friend EvtVector3R operator+(const EvtVector3R& v1,const EvtVector3R& v2);
34 inline friend EvtVector3R operator-(const EvtVector3R& v1,const EvtVector3R& v2);
35 inline friend EvtVector3R operator*(const EvtVector3R& v1,double c);
36 inline friend EvtVector3R operator/(const EvtVector3R& v1,double c);
37 friend EvtVector3R cross(const EvtVector3R& v1,const EvtVector3R& v2);
41 EvtVector3R(double x,double y ,double z);
42 virtual ~EvtVector3R();
43 inline EvtVector3R& operator*=(const double c);
44 inline EvtVector3R& operator/=(const double c);
45 inline EvtVector3R& operator+=(const EvtVector3R& v2);
46 inline EvtVector3R& operator-=(const EvtVector3R& v2);
47 inline void set(int i,double d);
48 inline void set(double x,double y ,double z);
49 void applyRotateEuler(double phi,double theta,double ksi);
50 inline double get(int i) const;
51 friend std::ostream& operator<<(std::ostream& s,const EvtVector3R& v);
52 double dot(const EvtVector3R& v2);
61 inline EvtVector3R& EvtVector3R::operator*=(const double c){
69 inline EvtVector3R& EvtVector3R::operator/=(const double c){
77 inline EvtVector3R& EvtVector3R::operator+=(const EvtVector3R& v2){
85 inline EvtVector3R& EvtVector3R::operator-=(const EvtVector3R& v2){
93 inline EvtVector3R operator*(double c,const EvtVector3R& v2){
95 return EvtVector3R(v2)*=c;
98 inline EvtVector3R operator*(const EvtVector3R& v1,double c){
100 return EvtVector3R(v1)*=c;
103 inline EvtVector3R operator/(const EvtVector3R& v1,double c){
105 return EvtVector3R(v1)/=c;
108 inline double operator*(const EvtVector3R& v1,const EvtVector3R& v2){
110 return v1.v[0]*v2.v[0]+v1.v[1]*v2.v[1]+v1.v[2]*v2.v[2];
113 inline EvtVector3R operator+(const EvtVector3R& v1,const EvtVector3R& v2) {
115 return EvtVector3R(v1)+=v2;
118 inline EvtVector3R operator-(const EvtVector3R& v1,const EvtVector3R& v2) {
120 return EvtVector3R(v1)-=v2;
124 inline double EvtVector3R::get(int i) const {
128 inline void EvtVector3R::set(int i,double d){
133 inline void EvtVector3R::set(double x,double y, double z){