Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
LorentzVector.h
Go to the documentation of this file.
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// double 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, Mark Fischler
19//
20
21#ifndef HEP_LORENTZVECTOR_H
22#define HEP_LORENTZVECTOR_H
23
24#ifdef GNUPRAGMA
25#pragma interface
26#endif
27
28#include <iostream>
30
31namespace CLHEP {
32
33// Declarations of classes and global methods
34class HepLorentzVector;
35class HepLorentzRotation;
36class HepRotation;
37class HepAxisAngle;
38class HepEulerAngles;
39class Tcomponent;
40HepLorentzVector rotationXOf( const HepLorentzVector & vec, double delta );
41HepLorentzVector rotationYOf( const HepLorentzVector & vec, double delta );
42HepLorentzVector rotationZOf( const HepLorentzVector & vec, double delta );
43HepLorentzVector rotationOf
44 ( const HepLorentzVector & vec, const Hep3Vector & axis, double delta );
45HepLorentzVector rotationOf
46 ( const HepLorentzVector & vec, const HepAxisAngle & ax );
47HepLorentzVector rotationOf
48 ( const HepLorentzVector & vec, const HepEulerAngles & e );
49HepLorentzVector rotationOf
50 ( const HepLorentzVector & vec, double phi,
51 double theta,
52 double psi );
53inline
54HepLorentzVector boostXOf( const HepLorentzVector & vec, double beta );
55inline
56HepLorentzVector boostYOf( const HepLorentzVector & vec, double beta );
57inline
58HepLorentzVector boostZOf( const HepLorentzVector & vec, double beta );
60 ( const HepLorentzVector & vec, const Hep3Vector & betaVector );
62 ( const HepLorentzVector & vec, const Hep3Vector & axis, double beta );
63
65
66
67/**
68 * @author
69 * @ingroup vector
70 */
71
73
74public:
75
76 enum { X=0, Y=1, Z=2, T=3, NUM_COORDINATES=4, SIZE=NUM_COORDINATES };
77 // Safe indexing of the coordinates when using with matrices, arrays, etc.
78 // (BaBar)
79
80 inline HepLorentzVector(double x, double y,
81 double z, double t);
82 // Constructor giving the components x, y, z, t.
83
84 inline HepLorentzVector(double x, double y, double z);
85 // Constructor giving the components x, y, z with t-component set to 0.0.
86
87 explicit HepLorentzVector(double t);
88 // Constructor giving the t-component with x, y and z set to 0.0.
89
91 // Default constructor with x, y, z and t set to 0.0.
92
93 inline HepLorentzVector(const Hep3Vector & p, double e);
94 inline HepLorentzVector(double e, const Hep3Vector & p);
95 // Constructor giving a 3-Vector and a time component.
96
98 // Copy constructor.
99
101 // The destructor.
102
103 inline operator const Hep3Vector & () const;
104 inline operator Hep3Vector & ();
105 // Conversion (cast) to Hep3Vector.
106
107 inline double x() const;
108 inline double y() const;
109 inline double z() const;
110 inline double t() const;
111 // Get position and time.
112
113 inline void setX(double);
114 inline void setY(double);
115 inline void setZ(double);
116 inline void setT(double);
117 // Set position and time.
118
119 inline double px() const;
120 inline double py() const;
121 inline double pz() const;
122 inline double e() const;
123 // Get momentum and energy.
124
125 inline void setPx(double);
126 inline void setPy(double);
127 inline void setPz(double);
128 inline void setE(double);
129 // Set momentum and energy.
130
131 inline Hep3Vector vect() const;
132 // Get spatial component.
133
134 inline void setVect(const Hep3Vector &);
135 // Set spatial component.
136
137 inline double theta() const;
138 inline double cosTheta() const;
139 inline double phi() const;
140 inline double rho() const;
141 // Get spatial vector components in spherical coordinate system.
142
143 inline void setTheta(double);
144 inline void setPhi(double);
145 inline void setRho(double);
146 // Set spatial vector components in spherical coordinate system.
147
148 double operator () (int) const;
149 inline double operator [] (int) const;
150 // Get components by index.
151
152 double & operator () (int);
153 inline double & operator [] (int);
154 // Set components by index.
155
157 // Assignment.
158
161 // Additions.
162
165 // Subtractions.
166
168 // Unary minus.
169
172 // Scaling with real numbers.
173
174 inline bool operator == (const HepLorentzVector &) const;
175 inline bool operator != (const HepLorentzVector &) const;
176 // Comparisons.
177
178 inline double perp2() const;
179 // Transverse component of the spatial vector squared.
180
181 inline double perp() const;
182 // Transverse component of the spatial vector (R in cylindrical system).
183
184 inline void setPerp(double);
185 // Set the transverse component of the spatial vector.
186
187 inline double perp2(const Hep3Vector &) const;
188 // Transverse component of the spatial vector w.r.t. given axis squared.
189
190 inline double perp(const Hep3Vector &) const;
191 // Transverse component of the spatial vector w.r.t. given axis.
192
193 inline double angle(const Hep3Vector &) const;
194 // Angle wrt. another vector.
195
196 inline double mag2() const;
197 // Dot product of 4-vector with itself.
198 // By default the metric is TimePositive, and mag2() is the same as m2().
199
200 inline double m2() const;
201 // Invariant mass squared.
202
203 inline double mag() const;
204 inline double m() const;
205 // Invariant mass. If m2() is negative then -sqrt(-m2()) is returned.
206
207 inline double mt2() const;
208 // Transverse mass squared.
209
210 inline double mt() const;
211 // Transverse mass.
212
213 inline double et2() const;
214 // Transverse energy squared.
215
216 inline double et() const;
217 // Transverse energy.
218
219 inline double dot(const HepLorentzVector &) const;
220 inline double operator * (const HepLorentzVector &) const;
221 // Scalar product.
222
223 inline double invariantMass2( const HepLorentzVector & w ) const;
224 // Invariant mass squared of pair of 4-vectors
225
226 double invariantMass ( const HepLorentzVector & w ) const;
227 // Invariant mass of pair of 4-vectors
228
229 inline void setVectMag(const Hep3Vector & spatial, double magnitude);
230 inline void setVectM(const Hep3Vector & spatial, double mass);
231 // Copy spatial coordinates, and set energy = sqrt(mass^2 + spatial^2)
232
233 inline double plus() const;
234 inline double minus() const;
235 // Returns the positive/negative light-cone component t +/- z.
236
237 Hep3Vector boostVector() const;
238 // Boost needed from rest4Vector in rest frame to form this 4-vector
239 // Returns the spatial components divided by the time component.
240
241 HepLorentzVector & boost(double, double, double);
243 // Lorentz boost.
244
245 HepLorentzVector & boostX( double beta );
246 HepLorentzVector & boostY( double beta );
247 HepLorentzVector & boostZ( double beta );
248 // Boost along an axis, by magnitue beta (fraction of speed of light)
249
250 double rapidity() const;
251 // Returns the rapidity, i.e. 0.5*ln((E+pz)/(E-pz))
252
253 inline double pseudoRapidity() const;
254 // Returns the pseudo-rapidity, i.e. -ln(tan(theta/2))
255
256 inline bool isTimelike() const;
257 // Test if the 4-vector is timelike
258
259 inline bool isSpacelike() const;
260 // Test if the 4-vector is spacelike
261
262 inline bool isLightlike(double epsilon=tolerance) const;
263 // Test for lightlike is within tolerance epsilon
264
265 HepLorentzVector & rotateX(double);
266 // Rotate the spatial component around the x-axis.
267
268 HepLorentzVector & rotateY(double);
269 // Rotate the spatial component around the y-axis.
270
271 HepLorentzVector & rotateZ(double);
272 // Rotate the spatial component around the z-axis.
273
275 // Rotates the reference frame from Uz to newUz (unit vector).
276
277 HepLorentzVector & rotate(double, const Hep3Vector &);
278 // Rotate the spatial component around specified axis.
279
282 // Transformation with HepRotation.
283
286 // Transformation with HepLorenzRotation.
287
288// = = = = = = = = = = = = = = = = = = = = = = = =
289//
290// Esoteric properties and operations on 4-vectors:
291//
292// 0 - Flexible metric convention and axial unit 4-vectors
293// 1 - Construct and set 4-vectors in various ways
294// 2 - Synonyms for accessing coordinates and properties
295// 2a - Setting space coordinates in different ways
296// 3 - Comparisions (dictionary, near-ness, and geometric)
297// 4 - Intrinsic properties
298// 4a - Releativistic kinematic properties
299// 4b - Methods combining two 4-vectors
300// 5 - Properties releative to z axis and to arbitrary directions
301// 7 - Rotations and Boosts
302//
303// = = = = = = = = = = = = = = = = = = = = = = = =
304
305// 0 - Flexible metric convention
306
307 static ZMpvMetric_t setMetric( ZMpvMetric_t met );
308 static ZMpvMetric_t getMetric();
309
310// 1 - Construct and set 4-vectors in various ways
311
312 inline void set (double x, double y, double z, double t);
313 inline void set (double x, double y, double z, Tcomponent t);
314 inline HepLorentzVector(double x, double y, double z, Tcomponent t);
315 // Form 4-vector by supplying cartesian coordinate components
316
317 inline void set (Tcomponent t, double x, double y, double z);
318 inline HepLorentzVector(Tcomponent t, double x, double y, double z);
319 // Deprecated because the 4-doubles form uses x,y,z,t, not t,x,y,z.
320
321 inline void set ( double t );
322
323 inline void set ( Tcomponent t );
324 inline explicit HepLorentzVector( Tcomponent t );
325 // Form 4-vector with zero space components, by supplying t component
326
327 inline void set ( const Hep3Vector & v );
328 inline explicit HepLorentzVector( const Hep3Vector & v );
329 // Form 4-vector with zero time component, by supplying space 3-vector
330
332 // Form 4-vector with zero time component, equal to space 3-vector
333
334 inline void set ( const Hep3Vector & v, double t );
335 inline void set ( double t, const Hep3Vector & v );
336 // Set using specified space vector and time component
337
338// 2 - Synonyms for accessing coordinates and properties
339
340 inline double getX() const;
341 inline double getY() const;
342 inline double getZ() const;
343 inline double getT() const;
344 // Get position and time.
345
346 inline Hep3Vector v() const;
347 inline Hep3Vector getV() const;
348 // Get spatial component. Same as vect.
349
350 inline void setV(const Hep3Vector &);
351 // Set spatial component. Same as setVect.
352
353// 2a - Setting space coordinates in different ways
354
355 inline void setV( double x, double y, double z );
356
357 inline void setRThetaPhi( double r, double theta, double phi);
358 inline void setREtaPhi( double r, double eta, double phi);
359 inline void setRhoPhiZ( double rho, double phi, double z );
360
361// 3 - Comparisions (dictionary, near-ness, and geometric)
362
363 int compare( const HepLorentzVector & w ) const;
364
365 bool operator >( const HepLorentzVector & w ) const;
366 bool operator <( const HepLorentzVector & w ) const;
367 bool operator>=( const HepLorentzVector & w ) const;
368 bool operator<=( const HepLorentzVector & w ) const;
369
370 bool isNear ( const HepLorentzVector & w,
371 double epsilon=tolerance ) const;
372 double howNear( const HepLorentzVector & w ) const;
373 // Is near using Euclidean measure t**2 + v**2
374
375 bool isNearCM ( const HepLorentzVector & w,
376 double epsilon=tolerance ) const;
377 double howNearCM( const HepLorentzVector & w ) const;
378 // Is near in CM frame: Applicable only for two timelike HepLorentzVectors
379
380 // If w1 and w2 are already in their CM frame, then w1.isNearCM(w2)
381 // is exactly equivalent to w1.isNear(w2).
382 // If w1 and w2 have T components of zero, w1.isNear(w2) is exactly
383 // equivalent to w1.getV().isNear(w2.v()).
384
385 bool isParallel( const HepLorentzVector & w,
386 double epsilon=tolerance ) const;
387 // Test for isParallel is within tolerance epsilon
388 double howParallel (const HepLorentzVector & w) const;
389
390 static double getTolerance();
391 static double setTolerance( double tol );
392 // Set the tolerance for HepLorentzVectors to be considered near
393 // The same tolerance is used for determining isLightlike, and isParallel
394
395 double deltaR(const HepLorentzVector & v) const;
396 // sqrt ( (delta eta)^2 + (delta phi)^2 ) of space part
397
398// 4 - Intrinsic properties
399
400 double howLightlike() const;
401 // Close to zero for almost lightlike 4-vectors; up to 1.
402
403 inline double euclideanNorm2() const;
404 // Sum of the squares of time and space components; not Lorentz invariant.
405
406 inline double euclideanNorm() const;
407 // Length considering the metric as (+ + + +); not Lorentz invariant.
408
409
410// 4a - Relativistic kinematic properties
411
412// All Relativistic kinematic properties are independent of the sense of metric
413
414 inline double restMass2() const;
415 inline double invariantMass2() const;
416 // Rest mass squared -- same as m2()
417
418 inline double restMass() const;
419 inline double invariantMass() const;
420 // Same as m(). If m2() is negative then -sqrt(-m2()) is returned.
421
422// The following properties are rest-frame related,
423// and are applicable only to non-spacelike 4-vectors
424
426 // This 4-vector, boosted into its own rest frame: (0, 0, 0, m())
427 // The following relation holds by definition:
428 // w.rest4Vector().boost(w.boostVector()) == w
429
430 // Beta and gamma of the boost vector
431 double beta() const;
432 // Relativistic beta of the boost vector
433
434 double gamma() const;
435 // Relativistic gamma of the boost vector
436
437 inline double eta() const;
438 // Pseudorapidity (of the space part)
439
440 inline double eta(const Hep3Vector & ref) const;
441 // Pseudorapidity (of the space part) w.r.t. specified direction
442
443 double rapidity(const Hep3Vector & ref) const;
444 // Rapidity in specified direction
445
446 double coLinearRapidity() const;
447 // Rapidity, in the relativity textbook sense: atanh (|P|/E)
448
450 // Boost needed to get to center-of-mass frame:
451 // w.findBoostToCM() == - w.boostVector()
452 // w.boost(w.findBoostToCM()) == w.rest4Vector()
453
454 Hep3Vector findBoostToCM( const HepLorentzVector & w ) const;
455 // Boost needed to get to combined center-of-mass frame:
456 // w1.findBoostToCM(w2) == w2.findBoostToCM(w1)
457 // w.findBoostToCM(w) == w.findBoostToCM()
458
459 inline double et2(const Hep3Vector &) const;
460 // Transverse energy w.r.t. given axis squared.
461
462 inline double et(const Hep3Vector &) const;
463 // Transverse energy w.r.t. given axis.
464
465// 4b - Methods combining two 4-vectors
466
467 inline double diff2( const HepLorentzVector & w ) const;
468 // (this - w).dot(this-w); sign depends on metric choice
469
470 inline double delta2Euclidean ( const HepLorentzVector & w ) const;
471 // Euclidean norm of differnce: (delta_T)^2 + (delta_V)^2
472
473// 5 - Properties releative to z axis and to arbitrary directions
474
475 double plus( const Hep3Vector & ref ) const;
476 // t + projection in reference direction
477
478 double minus( const Hep3Vector & ref ) const;
479 // t - projection in reference direction
480
481// 7 - Rotations and boosts
482
483 HepLorentzVector & rotate ( const Hep3Vector & axis, double delta );
484 // Same as rotate (delta, axis)
485
486 HepLorentzVector & rotate ( const HepAxisAngle & ax );
488 HepLorentzVector & rotate ( double phi,
489 double theta,
490 double psi );
491 // Rotate using these HepEuler angles - see Goldstein page 107 for conventions
492
493 HepLorentzVector & boost ( const Hep3Vector & axis, double beta );
494 // Normalizes the Hep3Vector to define a direction, and uses beta to
495 // define the magnitude of the boost.
496
498 ( const HepLorentzVector & vec, double delta );
500 ( const HepLorentzVector & vec, double delta );
502 ( const HepLorentzVector & vec, double delta );
504 ( const HepLorentzVector & vec, const Hep3Vector & axis, double delta );
506 ( const HepLorentzVector & vec, const HepAxisAngle & ax );
508 ( const HepLorentzVector & vec, const HepEulerAngles & e );
510 ( const HepLorentzVector & vec, double phi,
511 double theta,
512 double psi );
513
515 ( const HepLorentzVector & vec, double beta );
517 ( const HepLorentzVector & vec, double beta );
519 ( const HepLorentzVector & vec, double beta );
521 ( const HepLorentzVector & vec, const Hep3Vector & betaVector );
523 ( const HepLorentzVector & vec, const Hep3Vector & axis, double beta );
524
525private:
526
527 Hep3Vector pp;
528 double ee;
529
530 DLL_API static double tolerance;
531 DLL_API static double metric;
532
533}; // HepLorentzVector
534
535// 8 - Axial Unit 4-vectors
536
537static const HepLorentzVector X_HAT4 = HepLorentzVector( 1, 0, 0, 0 );
538static const HepLorentzVector Y_HAT4 = HepLorentzVector( 0, 1, 0, 0 );
539static const HepLorentzVector Z_HAT4 = HepLorentzVector( 0, 0, 1, 0 );
540static const HepLorentzVector T_HAT4 = HepLorentzVector( 0, 0, 0, 1 );
541
542// Global methods
543
544std::ostream & operator << (std::ostream &, const HepLorentzVector &);
545// Output to a stream.
546
547std::istream & operator >> (std::istream &, HepLorentzVector &);
548// Input from a stream.
549
552
555// Scaling LorentzVector with a real number
556
558// Dividing LorentzVector by a real number
559
560// Tcomponent definition:
561
562// Signature protection for 4-vector constructors taking 4 components
564private:
565 double t_;
566public:
567 explicit Tcomponent(double t) : t_(t) {}
568 operator double() const { return t_; }
569}; // Tcomponent
570
571} // namespace CLHEP
572
573#include "CLHEP/Vector/LorentzVector.icc"
574
575#endif /* HEP_LORENTZVECTOR_H */
friend HepLorentzVector boostYOf(const HepLorentzVector &vec, double beta)
double et(const Hep3Vector &) const
HepLorentzVector(const HepLorentzVector &)
HepLorentzVector(const Hep3Vector &v)
double invariantMass() const
HepLorentzVector operator-() const
HepLorentzVector & operator=(const Hep3Vector &v)
bool isParallel(const HepLorentzVector &w, double epsilon=tolerance) const
double pseudoRapidity() const
bool isNearCM(const HepLorentzVector &w, double epsilon=tolerance) const
double theta() const
friend HepLorentzVector boostXOf(const HepLorentzVector &vec, double beta)
void setV(double x, double y, double z)
Hep3Vector boostVector() const
double perp(const Hep3Vector &) const
HepLorentzVector & boost(const Hep3Vector &)
double cosTheta() const
HepLorentzVector & boost(double, double, double)
bool operator!=(const HepLorentzVector &) const
double et2(const Hep3Vector &) const
HepLorentzVector(const Hep3Vector &p, double e)
HepLorentzVector & boostZ(double beta)
Hep3Vector getV() const
HepLorentzVector(Tcomponent t)
HepLorentzVector rest4Vector() const
bool operator==(const HepLorentzVector &) const
void setVectM(const Hep3Vector &spatial, double mass)
HepLorentzVector(double x, double y, double z)
int compare(const HepLorentzVector &w) const
friend HepLorentzVector rotationYOf(const HepLorentzVector &vec, double delta)
friend HepLorentzVector rotationOf(const HepLorentzVector &vec, const Hep3Vector &axis, double delta)
friend HepLorentzVector boostOf(const HepLorentzVector &vec, const Hep3Vector &axis, double beta)
HepLorentzVector(double x, double y, double z, Tcomponent t)
void set(double x, double y, double z, Tcomponent t)
void set(const Hep3Vector &v, double t)
double diff2(const HepLorentzVector &w) const
double dot(const HepLorentzVector &) const
Hep3Vector vect() const
void set(Tcomponent t, double x, double y, double z)
static ZMpvMetric_t getMetric()
double howParallel(const HepLorentzVector &w) const
bool operator<=(const HepLorentzVector &w) const
HepLorentzVector & operator*=(double)
static double setTolerance(double tol)
double restMass2() const
double deltaR(const HepLorentzVector &v) const
HepLorentzVector & boostX(double beta)
double euclideanNorm() const
double minus() const
void set(double x, double y, double z, double t)
double eta(const Hep3Vector &ref) const
HepLorentzVector & rotate(double, const Hep3Vector &)
HepLorentzVector & rotateZ(double)
friend HepLorentzVector boostOf(const HepLorentzVector &vec, const Hep3Vector &betaVector)
Hep3Vector v() const
void setRThetaPhi(double r, double theta, double phi)
void setVectMag(const Hep3Vector &spatial, double magnitude)
HepLorentzVector & operator-=(const HepLorentzVector &)
HepLorentzVector operator+(const HepLorentzVector &) const
HepLorentzVector & boostY(double beta)
bool isLightlike(double epsilon=tolerance) const
void setV(const Hep3Vector &)
double howNear(const HepLorentzVector &w) const
double howLightlike() const
double operator[](int) const
double perp2() const
void set(double t, const Hep3Vector &v)
double howNearCM(const HepLorentzVector &w) const
HepLorentzVector & rotateX(double)
double invariantMass2() const
HepLorentzVector(Tcomponent t, double x, double y, double z)
HepLorentzVector & operator+=(const HepLorentzVector &)
bool operator<(const HepLorentzVector &w) const
HepLorentzVector & operator/=(double)
double euclideanNorm2() const
bool isNear(const HepLorentzVector &w, double epsilon=tolerance) const
friend HepLorentzVector boostZOf(const HepLorentzVector &vec, double beta)
void setVect(const Hep3Vector &)
bool operator>(const HepLorentzVector &w) const
double coLinearRapidity() const
Hep3Vector findBoostToCM() const
void setREtaPhi(double r, double eta, double phi)
HepLorentzVector & rotateUz(const Hep3Vector &)
double perp2(const Hep3Vector &) const
HepLorentzVector(double x, double y, double z, double t)
void set(const Hep3Vector &v)
friend HepLorentzVector rotationXOf(const HepLorentzVector &vec, double delta)
HepLorentzVector(double e, const Hep3Vector &p)
static double getTolerance()
double invariantMass2(const HepLorentzVector &w) const
double delta2Euclidean(const HepLorentzVector &w) const
HepLorentzVector & rotateY(double)
static ZMpvMetric_t setMetric(ZMpvMetric_t met)
bool isSpacelike() const
void set(Tcomponent t)
friend HepLorentzVector rotationZOf(const HepLorentzVector &vec, double delta)
double operator()(int) const
bool operator>=(const HepLorentzVector &w) const
void setRhoPhiZ(double rho, double phi, double z)
double angle(const Hep3Vector &) const
double restMass() const
HepLorentzVector & operator=(const HepLorentzVector &)
HepLorentzVector & transform(const HepRotation &)
double operator*(const HepLorentzVector &) const
Tcomponent(double t)
#define DLL_API
Definition: defs.h:19
Definition: DoubConv.h:17
HepLorentzVector HepLorentzVectorD
HepLorentzVector rotationYOf(const HepLorentzVector &vec, double delta)
HepLorentzVector rotationXOf(const HepLorentzVector &vec, double delta)
@ TimePositive
Definition: LorentzVector.h:64
@ TimeNegative
Definition: LorentzVector.h:64
HepLorentzRotation operator*(const HepRotation &r, const HepLorentzRotation &lt)
HepLorentzVector boostOf(const HepLorentzVector &vec, const Hep3Vector &betaVector)
std::istream & operator>>(std::istream &is, HepRandom &dist)
Definition: Random.cc:120
HepLorentzVector rotationZOf(const HepLorentzVector &vec, double delta)
HepLorentzVector HepLorentzVectorF
HepLorentzVector rotationOf(const HepLorentzVector &vec, const Hep3Vector &axis, double delta)
HepLorentzVector boostXOf(const HepLorentzVector &vec, double beta)
HepLorentzVector boostZOf(const HepLorentzVector &vec, double beta)
HepLorentzVector boostYOf(const HepLorentzVector &vec, double beta)
std::ostream & operator<<(std::ostream &os, const HepRandom &dist)
Definition: Random.cc:116
HepLorentzVector operator/(const HepLorentzVector &, double a)