CLHEP/Vector/Boost.h
// -*- C++ -*-
//
// This file is a part of the CLHEP - a Class Library for High Energy Physics.
//
// This is the definition of the HepBoost class for performing specialized
// Lorentz transformations which are pure boosts on objects of the
// HepLorentzVector class.
//
// HepBoost is a concrete implementation of Hep4RotationInterface.
//
// .SS See Also
// RotationInterfaces.h
// LorentzVector.h LorentzRotation.h
// BoostX.h BoostY.h BoostZ.h
//
// .SS Author
// Mark Fischler
#ifndef HEP_BOOST_H
#define HEP_BOOST_H
#ifdef GNUPRAGMA
#pragma interface
#endif
#ifdef HEP_NO_INLINE_IN_DECLARATION
#define inline
#endif
#include "CLHEP/Vector/RotationInterfaces.h"
#include "CLHEP/Vector/LorentzVector.h"
// Declarations of classes and global methods
class HepBoost;
inline HepBoost inverseOf ( const HepBoost & lt );
class HepBoost : public Hep4RotationInterface {
public:
// ---------- Constructors and Assignment:
inline HepBoost();
// Default constructor. Gives a boost of 0.
inline HepBoost(const HepBoost & m);
// Copy constructor.
inline HepBoost & operator = (const HepBoost & m);
// Assignment.
virtual HepBoost & set (HepDouble betaX, HepDouble betaY, HepDouble betaZ);
inline HepBoost (HepDouble betaX, HepDouble betaY, HepDouble betaZ);
// Constructor from three components of beta vector
virtual HepBoost & set (const HepRep4x4Symmetric & m);
inline HepBoost (const HepRep4x4Symmetric & m);
// Constructor from symmetric HepRep4x4
virtual HepBoost & set (Hep3Vector direction, HepDouble beta);
inline HepBoost (Hep3Vector direction, HepDouble beta);
// Constructor from a three vector direction and the magnitude of beta
virtual HepBoost & set (const Hep3Vector & boost);
inline HepBoost (const Hep3Vector & boost);
// Constructor from a 3-vector of less than unit length
// ---------- Accessors:
inline HepDouble beta() const;
inline HepDouble gamma() const;
inline Hep3Vector boostVector() const;
inline Hep3Vector getDirection() const;
inline Hep3Vector direction() const;
inline HepDouble xx() const;
inline HepDouble xy() const;
inline HepDouble xz() const;
inline HepDouble xt() const;
inline HepDouble yx() const;
inline HepDouble yy() const;
inline HepDouble yz() const;
inline HepDouble yt() const;
inline HepDouble zx() const;
inline HepDouble zy() const;
inline HepDouble zz() const;
inline HepDouble zt() const;
inline HepDouble tx() const;
inline HepDouble ty() const;
inline HepDouble tz() const;
inline HepDouble tt() const;
// Elements of the matrix.
inline HepLorentzVector col1() const;
inline HepLorentzVector col2() const;
inline HepLorentzVector col3() const;
inline HepLorentzVector col4() const;
// orthosymplectic column vectors
inline HepLorentzVector row1() const;
inline HepLorentzVector row2() const;
inline HepLorentzVector row3() const;
inline HepLorentzVector row4() const;
// orthosymplectic row vectors
virtual HepRep4x4 rep4x4() const;
// 4x4 representation.
virtual HepRep4x4Symmetric rep4x4Symmetric() const;
// Symmetric 4x4 representation.
// ---------- Decomposition:
virtual void decompose (HepRotation & rotation, HepBoost & boost) const;
virtual void decompose (HepAxisAngle & rotation, Hep3Vector & boost) const;
// Find R and B such that L = R*B -- trivial, since R is identity
virtual void decompose (HepBoost & boost, HepRotation & rotation) const;
virtual void decompose (Hep3Vector & boost, HepAxisAngle & rotation) const;
// Find R and B such that L = B*R -- trivial, since R is identity
// ---------- Comparisons:
inline HepBoolean operator == (const HepBoost &) const;
inline HepBoolean operator != (const HepBoost &) const;
// Comparisons.
inline HepBoolean isIdentity() const;
// Returns true if a null boost.
inline int compare( const HepBoost & b ) const;
int compare( const Hep4RotationInterface & lt ) const;
// Dictionary-order comparison. This is used in
// operator<, operator>, operator<=, and operator>=, which are inherited.
virtual HepDouble distance2( const Hep4RotationInterface & lt ) const;
// Distancee between this and a general transformation
inline HepDouble distance2( const HepBoost & b ) const;
// Defined as the distance2 between the vectors (gamma*betaVector)
virtual HepDouble howNear( const Hep4RotationInterface & lt ) const;
inline HepDouble howNear( const HepBoost & b ) const;
virtual HepBoolean isNear( const Hep4RotationInterface & lt,
HepDouble epsilon=tolerance) const;
virtual HepBoolean isNear( const HepBoost & lt,
HepDouble epsilon=tolerance) const;
// ---------- Properties:
virtual HepDouble norm2() const;
// (beta*gamma)^2
virtual void rectify();
// set as an exact boost, based on the timelike part of the boost matrix.
// ---------- Application:
virtual HepLorentzVector operator()( const HepLorentzVector & w ) const;
// Transform a Lorentz Vector.
inline HepLorentzVector operator* ( const HepLorentzVector & w ) const;
// Multiplication with a Lorentz Vector.
// ---------- Operations in the group of 4-Rotations
virtual HepLorentzRotation operator *
(const Hep4RotationInterface & lt) const;
// Product of two Lorentz Rotations (this) * lt - matrix multiplication
// Notice that the product of two pure boosts is no longer a pure boost
inline HepBoost inverse() const;
// Return the inverse.
inline friend HepBoost inverseOf ( const HepBoost & lt );
// global methods to invert.
inline HepBoost & invert();
// Inverts the Boost matrix.
// ---------- I/O:
virtual HepStd::ostream & print( HepStd::ostream & os ) const;
// Output form is (bx, by, bz)
protected:
inline HepLorentzVector vectorMultiplication
( const HepLorentzVector & w ) const;
// Multiplication with a Lorentz Vector.
HepLorentzRotation matrixMultiplication
(const Hep4RotationInterface & lt) const;
inline HepBoost
(HepDouble xx, HepDouble xy, HepDouble xz, HepDouble xt,
HepDouble yy, HepDouble yz, HepDouble yt,
HepDouble zz, HepDouble zt,
HepDouble tt);
// Protected constructor.
// DOES NOT CHECK FOR VALIDITY AS A LORENTZ BOOST.
inline void setBoost(HepDouble bx, HepDouble by, HepDouble bz);
HepRep4x4Symmetric rep_;
};
#ifdef HEP_NO_INLINE_IN_DECLARATION
#undef inline
#endif
#ifdef HEP_SHORT_NAMES
typedef HepBoost LBoost;
#endif
#ifndef HEP_DEBUG_INLINE
#include "CLHEP/Vector/Boost.icc"
#endif
#endif /* HEP_BOOST_H */
Generated by GNU enscript 1.6.1.