#ifndef ROOT_Math_GenVector_Translation3D
#define ROOT_Math_GenVector_Translation3D 1
#ifndef ROOT_Math_GenVector_DisplacementVector3D
#include "Math/GenVector/DisplacementVector3D.h"
#endif
#ifndef ROOT_Math_GenVector_PositionVector3Dfwd
#include "Math/GenVector/PositionVector3Dfwd.h"
#endif
#ifndef ROOT_Math_GenVector_LorentzVectorfwd
#include "Math/GenVector/LorentzVectorfwd.h"
#endif
#include <iostream>
namespace ROOT {
namespace Math {
class Plane3D;
class Translation3D {
public:
typedef DisplacementVector3D<Cartesian3D<double>, DefaultCoordinateSystemTag > Vector;
Translation3D() {}
template<class IT>
Translation3D(IT begin, IT end)
{
fVect.SetCoordinates(begin,end);
}
Translation3D(double dx, double dy, double dz) :
fVect( Vector(dx, dy, dz) )
{ }
template<class CoordSystem, class Tag>
explicit Translation3D( const DisplacementVector3D<CoordSystem,Tag> & v) :
fVect(Vector(v.X(),v.Y(),v.Z()))
{ }
template<class CoordSystem, class Tag>
Translation3D (const PositionVector3D<CoordSystem,Tag> & p1, const PositionVector3D<CoordSystem,Tag> & p2 ) :
fVect(p2-p1)
{ }
const Vector & Vect() const { return fVect; }
template<class IT>
void SetComponents(IT begin, IT end) {
fVect.SetCoordinates(begin,end);
}
template<class IT>
void GetComponents(IT begin, IT end) const {
fVect.GetCoordinates(begin,end);
}
template<class IT>
void GetComponents(IT begin) const {
fVect.GetCoordinates(begin);
}
void
SetComponents (double dx, double dy, double dz ) {
fVect.SetCoordinates(dx,dy,dz);
}
void
GetComponents (double &dx, double &dy, double &dz) const {
fVect.GetCoordinates(dx,dy,dz);
}
void
SetXYZ (double dx, double dy, double dz ) {
fVect.SetXYZ(dx,dy,dz);
}
template<class CoordSystem, class Tag >
PositionVector3D<CoordSystem,Tag> operator() (const PositionVector3D <CoordSystem,Tag> & p) const {
PositionVector3D<CoordSystem,Tag> tmp;
tmp.SetXYZ (p.X() + fVect.X(),
p.Y() + fVect.Y(),
p.Z() + fVect.Z() ) ;
return tmp;
}
template<class CoordSystem, class Tag >
DisplacementVector3D<CoordSystem,Tag> operator() (const DisplacementVector3D <CoordSystem,Tag> & v) const {
return v;
}
template<class CoordSystem, class Tag1, class Tag2 >
void Transform (const PositionVector3D <CoordSystem,Tag1> & p1, PositionVector3D <CoordSystem,Tag2> & p2 ) const {
PositionVector3D <CoordSystem,Tag2> tmp;
tmp.SetXYZ( p1.X(), p1.Y(), p1.Z() );
p2 = operator()(tmp);
}
template<class CoordSystem, class Tag1, class Tag2 >
void Transform (const DisplacementVector3D <CoordSystem,Tag1> & v1, DisplacementVector3D <CoordSystem,Tag2> & v2 ) const {
v2.SetXYZ(v1.X(), v1.Y(), v1.Z() );
}
template <class CoordSystem >
LorentzVector<CoordSystem> operator() (const LorentzVector<CoordSystem> & q) const {
return q;
}
Plane3D operator() (const Plane3D & plane) const;
template<class AVector >
AVector operator * (const AVector & v) const {
return operator() (v);
}
Translation3D & operator *= (const Translation3D & t) {
fVect+= t.Vect();
return *this;
}
Translation3D operator * (const Translation3D & t) const {
return Translation3D( fVect + t.Vect() );
}
void Invert() {
SetComponents( -fVect.X(), -fVect.Y(),-fVect.Z() );
}
Translation3D Inverse() const {
return Translation3D( -fVect.X(), -fVect.Y(),-fVect.Z() );
}
bool operator == (const Translation3D & rhs) const {
if( fVect != rhs.fVect ) return false;
return true;
}
bool operator != (const Translation3D & rhs) const {
return ! operator==(rhs);
}
private:
Vector fVect;
};
std::ostream & operator<< (std::ostream & os, const Translation3D & t);
}
}
#endif /* ROOT_Math_GenVector_Translation3D */
Last change: Wed Jun 25 08:30:32 2008
Last generated: 2008-06-25 08:30
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.