CLHEP/Vector/LorentzRotation.h

// -*- C++ -*-
// CLASSDOC OFF
// $Id: LorentzRotation.h,v 1.9 1999/01/14 14:14:35 evc Exp $
// ---------------------------------------------------------------------------
// CLASSDOC ON
//
// This file is a part of the CLHEP - a Class Library for High Energy Physics.
//
// This is the definition of the HepLorentzRotation class for performing 
// Lorentz transformations (rotations and boosts) on objects of the
// HepLorentzVector class.
//
// .SS See Also
// ThreeVector.h, LorentzVector.h, Rotation.h
//
// .SS Author
// Leif Lonnblad. Modified by Evgueni Tcherniaev.

#ifndef HEP_LORENTZROTATION_H
#define HEP_LORENTZROTATION_H

#ifdef GNUPRAGMA
#pragma interface
#endif

#include "CLHEP/Vector/Rotation.h"
#include "CLHEP/Vector/LorentzVector.h"

#ifdef HEP_NO_INLINE_IN_DECLARATION
#define inline
#endif

class HepLorentzRotation {

public:

  class HepLorentzRotation_row {
  public:
    inline HepLorentzRotation_row(const HepLorentzRotation &, int);
    inline HepDouble operator [] (int) const;
  private:
    const HepLorentzRotation & rr;
    int ii;
  };
  // Helper class for implemention of C-style subscripting r[i][j] 

  inline HepLorentzRotation();
  // Default constructor. Gives a unit matrix.

  inline HepLorentzRotation(const HepRotation &);
  // Constructor for 3d rotations.

  inline HepLorentzRotation(const HepLorentzRotation &);
  // Copy constructor.

  inline HepLorentzRotation(HepDouble, HepDouble, HepDouble);
  inline HepLorentzRotation(const Hep3Vector &);
  // Constructors giving a Lorenz-boost.

  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 const HepLorentzRotation_row operator [] (int) const; 
  // Returns object of the helper class for C-style subscripting r[i][j]

  HepDouble operator () (int, int) const;
  // Fortran-style subscriptimg: returns (i,j) element of the matrix.

  inline HepLorentzRotation & operator = (const HepLorentzRotation &);
  inline HepLorentzRotation & operator = (const HepRotation &);
  // Assignment.

  inline HepBoolean operator == (const HepLorentzRotation &) const;
  inline HepBoolean operator != (const HepLorentzRotation &) const;
  // Comparisons.

  inline HepBoolean isIdentity() const;
  // Returns true if the Identity matrix.

  inline HepLorentzVector vectorMultiplication(const HepLorentzVector&) const;
  inline HepLorentzVector operator * (const HepLorentzVector &) const;
  // Multiplication with a Lorentz vector.

  HepLorentzRotation matrixMultiplication(const HepLorentzRotation &) const;
  inline HepLorentzRotation operator * (const HepLorentzRotation &) const;
  inline HepLorentzRotation & operator *= (const HepLorentzRotation &);
  inline HepLorentzRotation & transform(const HepLorentzRotation &);
  inline HepLorentzRotation & transform(const HepRotation &);
  // Matrix multiplication.
  // Note: a *= b; <=> a = a * b; while a.transform(b); <=> a = b * a;

  inline HepLorentzRotation inverse() const;
  // Return the inverse.

  inline HepLorentzRotation & invert();
  // Inverts the LorentzRotation matrix.

  inline HepLorentzRotation & boost(HepDouble, HepDouble, HepDouble);
  inline HepLorentzRotation & boost(const Hep3Vector &);
  // Lorenz boost.

  inline HepLorentzRotation & rotateX(HepDouble);
  // Rotation around x-axis.

  inline HepLorentzRotation & rotateY(HepDouble);
  // Rotation around y-axis.

  inline HepLorentzRotation & rotateZ(HepDouble);
  // Rotation around z-axis.

  inline HepLorentzRotation & rotate(HepDouble, const Hep3Vector &);
  inline HepLorentzRotation & rotate(HepDouble, const Hep3Vector *);
  // Rotation around specified vector.

protected:

  HepDouble mxx, mxy, mxz, mxt,
            myx, myy, myz, myt,
            mzx, mzy, mzz, mzt,
            mtx, mty, mtz, mtt;
  // The matrix elements.

  void setBoost(HepDouble, HepDouble, HepDouble);
  // Set elements according to a boost vector.

  inline HepLorentzRotation(HepDouble, HepDouble, HepDouble, HepDouble,
                            HepDouble, HepDouble, HepDouble, HepDouble,
                            HepDouble, HepDouble, HepDouble, HepDouble,
                            HepDouble, HepDouble, HepDouble, HepDouble);
  // Protected constructor.
};

#ifdef HEP_NO_INLINE_IN_DECLARATION
#undef inline
#endif

#ifdef HEP_SHORT_NAMES
typedef HepLorentzRotation LRotation;
#endif

#ifndef HEP_DEBUG_INLINE
#include "CLHEP/Vector/LorentzRotation.icc"
#endif

#endif /* HEP_LORENTZROTATION_H */

Generated by GNU enscript 1.6.1.