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