This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / PHOS / CLHEP / Vector / LorentzVector.h
CommitLineData
fe4da5cc 1// -*- C++ -*-
2// CLASSDOC OFF
3// $Id$
4// ---------------------------------------------------------------------------
5// CLASSDOC ON
6//
7// This file is a part of the CLHEP - a Class Library for High Energy Physics.
8//
9// HepLorentzVector is a Lorentz vector consisting of Hep3Vector and
10// HepDouble components. Lorentz transformations (rotations and boosts)
11// of these vectors are perfomed by multiplying with objects of
12// the HepLorenzRotation class.
13//
14// .SS See Also
15// ThreeVector.h, Rotation.h, LorentzRotation.h
16//
17// .SS Authors
18// Leif Lonnblad and Anders Nilsson. Modified by Evgueni Tcherniaev.
19//
20
21#ifndef HEP_LORENTZVECTOR_H
22#define HEP_LORENTZVECTOR_H
23
24#ifdef GNUPRAGMA
25#pragma interface
26#endif
27
28#include "CLHEP/config/CLHEP.h"
29#include "CLHEP/Vector/ThreeVector.h"
30#include "CLHEP/Vector/Rotation.h"
31
32#ifdef HEP_NO_INLINE_IN_DECLARATION
33#define inline
34#endif
35
36#include <iostream.h>
37class HepLorentzRotation;
38
39class HepLorentzVector {
40
41public:
42
43 inline HepLorentzVector(HepDouble x = 0.0, HepDouble y = 0.0,
44 HepDouble z = 0.0, HepDouble t = 0.0);
45 // Constructor giving the components x, y, z, t.
46
47 inline HepLorentzVector(const Hep3Vector &, HepDouble);
48 // Constructor giving a 3-Vector and a time component.
49
50 inline HepLorentzVector(const HepLorentzVector &);
51 // Copy constructor.
52
53 inline ~HepLorentzVector();
54 // The destructor.
55
56 inline operator Hep3Vector () const;
57 inline operator Hep3Vector & ();
58 // Conversion (cast) to Hep3Vector.
59
60 inline HepDouble x() const;
61 inline HepDouble y() const;
62 inline HepDouble z() const;
63 inline HepDouble t() const;
64 // Get position and time.
65
66 inline void setX(HepDouble);
67 inline void setY(HepDouble);
68 inline void setZ(HepDouble);
69 inline void setT(HepDouble);
70 // Set position and time.
71
72 inline HepDouble px() const;
73 inline HepDouble py() const;
74 inline HepDouble pz() const;
75 inline HepDouble e() const;
76 // Get momentum and energy.
77
78 inline void setPx(HepDouble);
79 inline void setPy(HepDouble);
80 inline void setPz(HepDouble);
81 inline void setE(HepDouble);
82 // Set momentum and energy.
83
84 inline Hep3Vector vect() const;
85 // Get spatial component.
86
87 inline void setVect(const Hep3Vector &);
88 // Set spatial component.
89
90 inline HepDouble theta() const;
91 inline HepDouble cosTheta() const;
92 inline HepDouble phi() const;
93 inline HepDouble rho() const;
94 // Get spatial vector components in spherical coordinate system.
95
96 inline void setTheta(HepDouble);
97 inline void setPhi(HepDouble);
98 inline void setRho(HepDouble);
99 // Set spatial vector components in spherical coordinate system.
100
101 inline HepDouble operator () (int) const;
102 // Get components by index.
103
104 inline HepLorentzVector & operator = (const HepLorentzVector &);
105 // Assignment.
106
107 inline HepLorentzVector operator + (const HepLorentzVector &) const;
108 inline HepLorentzVector & operator += (const HepLorentzVector &);
109 // Additions.
110
111 inline HepLorentzVector operator - (const HepLorentzVector &) const;
112 inline HepLorentzVector & operator -= (const HepLorentzVector &);
113 // Subtractions.
114
115 inline HepLorentzVector operator - () const;
116 // Unary minus.
117
118 inline HepBoolean operator == (const HepLorentzVector &) const;
119 inline HepBoolean operator != (const HepLorentzVector &) const;
120 // Comparisons.
121
122 inline HepDouble perp2() const;
123 // Transverse component of the spatial vector squared.
124
125 inline HepDouble perp() const;
126 // Transverse component of the spatial vector (R in cylindrical system).
127
128 inline HepDouble perp2(const Hep3Vector &) const;
129 // Transverse component of the spatial vector w.r.t. given axis squared.
130
131 inline HepDouble perp(const Hep3Vector &) const;
132 // Transverse component of the spatial vector w.r.t. given axis.
133
134 inline HepDouble angle(const Hep3Vector &) const;
135 // Angle wrt. another vector.
136
137 inline HepDouble mag2() const;
138 inline HepDouble m2() const;
139 // Invariant mass squared.
140
141 inline HepDouble mag() const;
142 inline HepDouble m() const;
143 // Invariant mass. If mag2() is negative then -sqrt(-mag2()) is returned.
144
145 inline HepDouble dot(const HepLorentzVector &) const;
146 inline HepDouble operator * (const HepLorentzVector &) const;
147 // Scalar product.
148
149 inline HepDouble plus() const;
150 inline HepDouble minus() const;
151 // Returns the positive/negative light-cone component t +/- z.
152
153
154 inline Hep3Vector boostVector() const ;
155 // Returns the spatial components divided by the time component.
156
157 void boost(HepDouble, HepDouble, HepDouble);
158 inline void boost(const Hep3Vector &);
159 // Lorentz boost.
160
161 inline void rotateX(HepDouble);
162 // Rotate the spatial component around the x-axis.
163
164 inline void rotateY(HepDouble);
165 // Rotate the spatial component around the y-axis.
166
167 inline void rotateZ(HepDouble);
168 // Rotate the spatial component around the z-axis.
169
170 inline void rotateUz(Hep3Vector &);
171 // Rotates the reference frame from Uz to newUz (unit vector).
172
173 inline void rotate(HepDouble, const Hep3Vector &);
174 // Rotate the spatial component around specified axis.
175
176 inline HepLorentzVector & operator *= (const HepRotation &);
177 inline HepLorentzVector & transform(const HepRotation &);
178 // Transformation with HepRotation.
179
180 HepLorentzVector & operator *= (const HepLorentzRotation &);
181 HepLorentzVector & transform(const HepLorentzRotation &);
182 // Transformation with HepLorenzRotation.
183
184private:
185
186 Hep3Vector pp;
187 HepDouble ee;
188
189};
190
191ostream & operator << (ostream &, const HepLorentzVector &);
192// Output to a stream.
193
194#ifdef HEP_NO_INLINE_IN_DECLARATION
195#undef inline
196#endif
197
198#ifdef HEP_SHORT_NAMES
199typedef HepLorentzVector VectorL;
200typedef HepLorentzVector Vector4;
201typedef HepLorentzVector DVectorL;
202typedef HepLorentzVector DVector4;
203typedef HepLorentzVector FVectorL;
204typedef HepLorentzVector FVector4;
205#endif
206
207typedef HepLorentzVector HepLorentzVectorD;
208typedef HepLorentzVector HepLorentzVectorF;
209
210#ifndef HEP_DEBUG_INLINE
211#include "CLHEP/Vector/LorentzVector.icc"
212#endif
213
214#endif /* HEP_LORENTZVECTOR_H */