]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGen/EvtGenBase/EvtVector3R.hh
Converting TEvtGen to native cmake
[u/mrichter/AliRoot.git] / TEvtGen / EvtGen / EvtGenBase / EvtVector3R.hh
CommitLineData
da0e9ce3 1//--------------------------------------------------------------------------
2//
3// Environment:
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.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtGen/EvtVector3R.hh
12//
13// Description: Class to describe real 3 vectors
14//
15// Modification history:
16//
17// RYD Sept. 5, 1997 Module created
18//
19//------------------------------------------------------------------------
20
21#ifndef EVTVECTOR3R_HH
22#define EVTVECTOR3R_HH
23
24#include <iosfwd>
25
26class EvtVector3R {
27
28 friend EvtVector3R rotateEuler(const EvtVector3R& v,
29 double phi,double theta,double ksi);
30
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);
38
39public:
40 EvtVector3R();
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);
53 double d3mag() const;
54
55private:
56
57 double v[3];
58
59};
60
61inline EvtVector3R& EvtVector3R::operator*=(const double c){
62
63 v[0]*=c;
64 v[1]*=c;
65 v[2]*=c;
66 return *this;
67}
68
69inline EvtVector3R& EvtVector3R::operator/=(const double c){
70
71 v[0]/=c;
72 v[1]/=c;
73 v[2]/=c;
74 return *this;
75}
76
77inline EvtVector3R& EvtVector3R::operator+=(const EvtVector3R& v2){
78
79 v[0]+=v2.v[0];
80 v[1]+=v2.v[1];
81 v[2]+=v2.v[2];
82 return *this;
83}
84
85inline EvtVector3R& EvtVector3R::operator-=(const EvtVector3R& v2){
86
87 v[0]-=v2.v[0];
88 v[1]-=v2.v[1];
89 v[2]-=v2.v[2];
90 return *this;
91}
92
93inline EvtVector3R operator*(double c,const EvtVector3R& v2){
94
95 return EvtVector3R(v2)*=c;
96}
97
98inline EvtVector3R operator*(const EvtVector3R& v1,double c){
99
100 return EvtVector3R(v1)*=c;
101}
102
103inline EvtVector3R operator/(const EvtVector3R& v1,double c){
104
105 return EvtVector3R(v1)/=c;
106}
107
108inline double operator*(const EvtVector3R& v1,const EvtVector3R& v2){
109
110 return v1.v[0]*v2.v[0]+v1.v[1]*v2.v[1]+v1.v[2]*v2.v[2];
111}
112
113inline EvtVector3R operator+(const EvtVector3R& v1,const EvtVector3R& v2) {
114
115 return EvtVector3R(v1)+=v2;
116}
117
118inline EvtVector3R operator-(const EvtVector3R& v1,const EvtVector3R& v2) {
119
120 return EvtVector3R(v1)-=v2;
121
122}
123
124inline double EvtVector3R::get(int i) const {
125 return v[i];
126}
127
128inline void EvtVector3R::set(int i,double d){
129
130 v[i]=d;
131}
132
133inline void EvtVector3R::set(double x,double y, double z){
134
135 v[0]=x;
136 v[1]=y;
137 v[2]=z;
138}
139
140#endif
141