]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TEvtGen/EvtGenBase/EvtVector3C.hh
Adding CMakeLists.txt
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtVector3C.hh
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/EvtVector3C.hh
12 //
13 // Description: Class for complex 3 vectors
14 //
15 // Modification history:
16 //
17 //    RYD     September 6, 1997         Module created
18 //
19 //------------------------------------------------------------------------
20
21 #ifndef EVTVECTOR3C_N
22 #define EVTVECTOR3C_N
23
24 #include "EvtGenBase/EvtComplex.hh"
25 #include "EvtGenBase/EvtVector3R.hh"
26 #include <iosfwd>
27
28 class EvtVector3C {
29
30   friend EvtVector3C rotateEuler(const EvtVector3C& v,
31                                  double phi,double theta,double ksi);
32   
33   inline friend EvtVector3C operator*(const EvtComplex& c,const EvtVector3C& v2); 
34   inline friend EvtVector3C operator*(const EvtComplex& c,const EvtVector3R& v2); 
35   inline friend EvtComplex operator*(const EvtVector3R& v1,const EvtVector3C& v2); 
36   inline friend EvtComplex operator*(const EvtVector3C& v1,const EvtVector3R& v2); 
37   inline friend EvtComplex operator*(const EvtVector3C& v1,const EvtVector3C& v2); 
38   inline friend EvtVector3C operator+(const EvtVector3C& v1,const EvtVector3C& v2);
39   inline friend EvtVector3C operator-(const EvtVector3C& v1,const EvtVector3C& v2);
40   inline friend EvtVector3C operator*(const EvtVector3C& v1,const EvtComplex& c);
41   
42
43 public:
44
45   EvtVector3C();
46   EvtVector3C(const EvtComplex&,const EvtComplex&,const EvtComplex&);
47   virtual ~EvtVector3C();
48   inline void set(const int,const EvtComplex&);
49   inline void set(const EvtComplex&,const EvtComplex&,const EvtComplex&);
50   inline void set(double,double,double);
51   inline EvtVector3C& operator*=(const EvtComplex& c);
52   inline EvtVector3C& operator/=(const EvtComplex& c);
53   inline EvtVector3C& operator+=(const EvtVector3C& v2);
54   inline EvtVector3C& operator-=(const EvtVector3C& v2);
55   inline EvtVector3C(const EvtVector3R& v1); 
56   void applyRotateEuler(double phi,double theta,double ksi);
57   inline const EvtComplex& get(int) const;
58   inline EvtVector3C conj() const;
59   EvtVector3C cross(const EvtVector3C& v2);
60   friend std::ostream& operator<<(std::ostream& c,const EvtVector3C& v); 
61   double dot( const EvtVector3C& p2 );  
62 private:
63
64   EvtComplex v[3];
65 };
66
67 inline EvtVector3C::EvtVector3C(const EvtVector3R& v1){
68
69   v[0]=EvtComplex(v1.get(0),0.0);
70   v[1]=EvtComplex(v1.get(1),0.0);
71   v[2]=EvtComplex(v1.get(2),0.0);
72
73
74
75 inline void EvtVector3C::set(const int i,const EvtComplex& c){
76
77   v[i]=c;
78   
79 }
80
81 inline void EvtVector3C::set(const EvtComplex& x,const EvtComplex& y, 
82                              const EvtComplex& z){
83
84    v[0]=x; v[1]=y; v[2]=z; 
85 }
86
87 inline void EvtVector3C::set(double x,
88                           double y,double z){
89
90      v[0]=EvtComplex(x); v[1]=EvtComplex(y); v[2]=EvtComplex(z);
91 }
92
93 inline const EvtComplex& EvtVector3C::get(int i) const {
94
95    return v[i];
96 }
97
98 inline EvtVector3C& EvtVector3C::operator*=(const EvtComplex& c){
99
100   v[0]*=c;
101   v[1]*=c;
102   v[2]*=c;
103   return *this;
104 }
105
106 inline EvtVector3C& EvtVector3C::operator/=(const EvtComplex& c){
107
108   v[0]/=c;
109   v[1]/=c;
110   v[2]/=c;
111   return *this;
112 }
113
114 inline EvtVector3C& EvtVector3C::operator+=(const EvtVector3C& v2){
115
116   v[0]+=v2.v[0];
117   v[1]+=v2.v[1];
118   v[2]+=v2.v[2];
119   return *this;
120 }
121
122 inline EvtVector3C& EvtVector3C::operator-=(const EvtVector3C& v2){
123
124   v[0]-=v2.v[0];
125   v[1]-=v2.v[1];
126   v[2]-=v2.v[2];
127   return *this;
128 }
129
130 inline EvtVector3C operator+(const EvtVector3C& v1,const EvtVector3C& v2) {
131
132   return EvtVector3C(v1)+=v2;
133 }
134
135 inline EvtVector3C operator-(const EvtVector3C& v1,const EvtVector3C& v2) {
136
137   return EvtVector3C(v1)-=v2;
138 }
139
140 inline EvtVector3C operator*(const EvtVector3C& v1,const EvtComplex& c) {
141
142   return EvtVector3C(v1)*=c;
143 }
144
145 inline EvtVector3C operator*(const EvtComplex& c,const EvtVector3C& v2){
146
147   return EvtVector3C(v2)*=c;
148 }
149
150 inline EvtVector3C operator*(const EvtComplex& c,const EvtVector3R& v2){
151
152   return EvtVector3C(v2)*=c;
153 }
154
155 inline EvtComplex operator*(const EvtVector3R& v1,const EvtVector3C& v2){
156  
157   return v1.get(0)*v2.v[0]+v1.get(1)*v2.v[1]+v1.get(2)*v2.v[2];
158 }
159
160 inline EvtComplex operator*(const EvtVector3C& v1,const EvtVector3R& v2){
161  
162   return v1.v[0]*v2.get(0)+v1.v[1]*v2.get(1)+v1.v[2]*v2.get(2);
163 }
164
165 inline EvtComplex operator*(const EvtVector3C& v1,const EvtVector3C& v2){
166  
167   return v1.v[0]*v2.v[0]+v1.v[1]*v2.v[1]+v1.v[2]*v2.v[2];
168 }
169
170 inline EvtVector3C EvtVector3C::conj() const { 
171
172   return EvtVector3C(::conj(v[0]),::conj(v[1]),
173                   ::conj(v[2]));
174 }
175
176 #endif
177