ROOTPWA
Vec.h
Go to the documentation of this file.
1 #ifndef __VEC_H_
2 #define __VEC_H_
3 
4 
5 #include <iostream>
6 #include <fstream>
7 #include <cmath>
8 #include <cassert>
9 
10 
11 class threeVec {
12 
13 private:
14 
15  double _x, _y, _z;
16 
17  void _init(double, double, double);
18 
19 public:
20 
21  threeVec();
22  threeVec(double, double, double);
23  threeVec(const threeVec&);
24  ~threeVec();
25 
26  threeVec operator + (const threeVec&) const;
27  threeVec operator - (const threeVec&) const;
28  threeVec operator - () const;
29  double operator * (const threeVec&) const;
30  threeVec operator / (const threeVec&) const;
31  friend threeVec operator * (double, const threeVec&);
32  friend threeVec operator * (const threeVec&, double);
33  threeVec& operator = (const threeVec&);
36  threeVec& operator *= (double);
37 
38  const threeVec& print(std::ostream& = std::cout) const;
39  threeVec& scan(std::istream& is = std::cin);
40 
41  threeVec write(std::ostream&) const;
42  threeVec read(std::istream&);
43 
44  double& operator [] (const int i);
45  const double& operator [] (const int i) const;
46  double& el(const int i) { return operator[](i); }
47  const double& el(const int i) const { return operator[](i); }
48  threeVec set(double, double, double);
49 
50  int operator == (const threeVec&) const;
51  int operator != (const threeVec&) const;
52  int operator < (const threeVec&) const;
53  int operator > (const threeVec&) const;
54  int operator >= (const threeVec&) const;
55  int operator <= (const threeVec&) const;
56 
57  double x() const;
58  double y() const;
59  double z() const;
60 
61  double r() const;
62  double theta() const;
63  double cosTheta() const;
64  double phi() const;
65 
66  double len() const;
67  double lenSq() const;
68 
69  threeVec& x(double x);
70  threeVec& y(double y);
71  threeVec& z(double z);
72 
73  threeVec& cartesian(double x, double y, double z);
74  threeVec& polar(double r, double theta, double phi);
75 
76  double operator~() const;
77 
78 };
79 
80 
81 std::ostream& operator << (std::ostream& os, const threeVec& V);
82 std::istream& operator >> (std::istream& is, threeVec& V);
83 
84 
85 class fourVec {
86 
87 private:
88 
89  double _t;
91 
92  void _init(double, threeVec);
93 
94 public:
95 
96  fourVec();
97  fourVec(double, threeVec);
98  fourVec(const fourVec&);
99  ~fourVec();
100 
101  fourVec operator + (const fourVec&) const;
102  fourVec operator - (const fourVec&) const;
103  fourVec operator - () const;
104  double operator * (const fourVec&) const;
105  threeVec operator / (const fourVec&) const;
106  friend fourVec operator*(double,const fourVec&);
107  friend fourVec operator*(const fourVec&,double);
108  fourVec& operator = (const fourVec&);
109  fourVec& operator += (const fourVec&);
110  fourVec& operator -= (const fourVec&);
111  fourVec& operator *= (double);
112 
113  const fourVec& print(std::ostream& = std::cout) const;
114  fourVec& scan(std::istream& = std::cin);
115 
116  fourVec write(std::ostream&) const;
117  fourVec read(std::istream&);
118 
119  fourVec mass(double);
120 
121  double& operator [] (const int);
122  const double& operator [] (const int) const;
123  double& el(const int i) { return this->operator[](i); }
124  const double& el(const int i) const { return this->operator[](i); }
125  fourVec set(double, double, double, double);
126  fourVec set(double, threeVec);
127 
128  int operator == (const fourVec&) const;
129  int operator != (const fourVec&) const;
130  int operator < (const fourVec&) const;
131  int operator > (const fourVec&) const;
132  int operator >= (const fourVec&) const;
133  int operator <= (const fourVec&) const;
134 
135  threeVec V() const;
136  double x() const;
137  double y() const;
138  double z() const;
139  double t() const;
140 
141  double r() const;
142  double theta() const;
143  double cosTheta() const;
144  double phi() const;
145 
146  fourVec& V(threeVec V);
147  fourVec& x(double x);
148  fourVec& y(double y);
149  fourVec& z(double z);
150  fourVec& t(double t);
151 
152  fourVec& cartesian(double x, double y, double z);
153  fourVec& polar(double r, double theta, double phi);
154 
155  double len() const;
156  double lenSq() const;
157 
158 
159  double operator~() const;
160 
161 };
162 
163 
164 std::ostream& operator << (std::ostream& os, const fourVec& v);
165 std::istream& operator >> (std::istream& is, fourVec& v);
166 
167 
168 #endif // __VEC_H_