#ifndef ROOT_TThreeVectorComplex
#define ROOT_TThreeVectorComplex
#ifndef ROOT_TBuffer
#include "TBuffer.h"
#endif
#ifndef ROOT_TThreeVectorReal
#include "TThreeVectorReal.h"
#endif
#include <math.h>
#include <complex>
using namespace std;
typedef complex<double> Complex_t;
class TThreeVectorComplex {
friend class TLorentzTransform;
friend class TLorentzBoost;
friend class TThreeRotation;
protected:
Complex_t fVector[4];
static Double_t fResolution;
public:
TThreeVectorComplex() { }
TThreeVectorComplex(const Complex_t &x,
const Complex_t &y,
const Complex_t &z);
TThreeVectorComplex(const Float_t *array);
TThreeVectorComplex(const Double_t *array);
TThreeVectorComplex(const Complex_t *array);
TThreeVectorComplex(const TThreeVectorComplex &another);
TThreeVectorComplex(const TThreeVectorReal &another);
virtual ~TThreeVectorComplex() { }
Complex_t &operator[](const Int_t index) const;
static void SetResolution(const Double_t resolution);
Double_t Resolution() const;
Double_t Length() const;
Double_t LengthSqr() const;
TThreeVectorReal RealPart() const;
TThreeVectorReal ImagPart() const;
void GetCartesian(Complex_t &x, Complex_t &y, Complex_t &z) const;
void GetCartesian(Complex_t *array) const;
Double_t DistanceTo
(const Complex_t x, const Complex_t y, const Complex_t z) const;
Double_t DistanceTo(const Complex_t *array) const;
Double_t DistanceTo(const TThreeVectorComplex &vec2) const;
TThreeVectorComplex &operator=(const TThreeVectorReal &source);
TThreeVectorComplex &operator=(const TThreeVectorComplex &source);
TThreeVectorComplex &operator=(const Float_t *array);
TThreeVectorComplex &operator=(const Double_t *array);
TThreeVectorComplex &operator=(const Complex_t *array);
TThreeVectorComplex &operator+=(const TThreeVectorComplex &source);
TThreeVectorComplex &operator+=(const Float_t *array);
TThreeVectorComplex &operator+=(const Double_t *array);
TThreeVectorComplex &operator+=(const Complex_t *array);
TThreeVectorComplex &operator-=(const TThreeVectorComplex &source);
TThreeVectorComplex &operator-=(const Float_t *array);
TThreeVectorComplex &operator-=(const Double_t *array);
TThreeVectorComplex &operator-=(const Complex_t *array);
TThreeVectorComplex &operator*=(const Complex_t &factor);
TThreeVectorComplex &operator/=(const Complex_t &factor);
Bool_t operator==(const TThreeVectorComplex &other) const;
Bool_t operator!=(const TThreeVectorComplex &other) const;
TThreeVectorComplex &Zero();
TThreeVectorComplex &Conj();
TThreeVectorComplex &SpaceInv();
TThreeVectorComplex &Normalize(const Double_t length);
TThreeVectorComplex &Rotate(const TThreeRotation &rotOp);
TThreeVectorComplex &Rotate(const Double_t phi,
const Double_t theta,
const Double_t psi);
TThreeVectorComplex &Rotate(const TUnitVector &ahat, const Double_t angle);
TThreeVectorComplex &Cross(const TThreeVectorComplex &other);
TThreeVectorComplex &Cross(const TThreeVectorComplex &va,
const TThreeVectorComplex &vb);
Complex_t Dot(const TThreeVectorComplex &other);
TThreeVectorComplex operator-() const;
friend TThreeVectorComplex operator+(const TThreeVectorComplex &v1,
const TThreeVectorComplex &v2);
friend TThreeVectorComplex operator-(const TThreeVectorComplex &v1,
const TThreeVectorComplex &v2);
friend TThreeVectorComplex operator*(const TThreeVectorComplex &vec,
const Complex_t &factor);
friend TThreeVectorComplex operator*(const Complex_t &factor,
const TThreeVectorComplex &vec);
friend TThreeVectorComplex operator/(const TThreeVectorComplex &vec,
const Complex_t &factor);
friend TBuffer &operator>>(TBuffer &buf, TThreeVectorComplex *&vec);
friend TBuffer &operator<<(TBuffer &buf, const TThreeVectorComplex *vec);
void Print(Option_t *option="");
ClassDef(TThreeVectorComplex,1)
};
inline TThreeVectorComplex::TThreeVectorComplex
(const Complex_t &x, const Complex_t &y, const Complex_t &z)
{
fVector[1] = x;
fVector[2] = y;
fVector[3] = z;
}
inline TThreeVectorComplex::TThreeVectorComplex(const Float_t *array)
{
fVector[1] = *(array++);
fVector[2] = *(array++);
fVector[3] = *array;
}
inline TThreeVectorComplex::TThreeVectorComplex(const Double_t *array)
{
fVector[1] = *(array++);
fVector[2] = *(array++);
fVector[3] = *array;
}
inline TThreeVectorComplex::TThreeVectorComplex(const Complex_t *array)
{
fVector[1] = *(array++);
fVector[2] = *(array++);
fVector[3] = *array;
}
inline TThreeVectorComplex::TThreeVectorComplex
(const TThreeVectorComplex &another)
{
*this = another;
}
inline TThreeVectorComplex::TThreeVectorComplex
(const TThreeVectorReal &another)
{
*this = another;
}
inline Complex_t &TThreeVectorComplex::operator[](const Int_t index) const
{
if (index < 1 || index > 3) {
Error("TThreeVectorComplex::operator[]","index out of range");
return (Complex_t &)fVector[1];
}
return (Complex_t &)fVector[index];
}
inline void TThreeVectorComplex::SetResolution(const Double_t resolution)
{
fResolution = resolution;
}
inline Double_t TThreeVectorComplex::Resolution() const
{
Double_t scale = Length();
if (scale > 0)
return fResolution*scale;
else
return fResolution;
}
inline Double_t TThreeVectorComplex::Length() const
{
return sqrt(LengthSqr());
}
inline Double_t TThreeVectorComplex::LengthSqr() const
{
return Double_t(norm(fVector[1]) + norm(fVector[2]) + norm(fVector[3]));
}
inline TThreeVectorReal TThreeVectorComplex::RealPart() const
{
TThreeVectorReal R;
R.fVector[1] = real(fVector[1]);
R.fVector[2] = real(fVector[2]);
R.fVector[3] = real(fVector[3]);
return R;
}
inline TThreeVectorReal TThreeVectorComplex::ImagPart() const
{
TThreeVectorReal I;
I.fVector[1] = imag(fVector[1]);
I.fVector[2] = imag(fVector[2]);
I.fVector[3] = imag(fVector[3]);
return I;
}
inline void TThreeVectorComplex::GetCartesian
(Complex_t &x, Complex_t &y, Complex_t &z) const
{
x = fVector[1];
y = fVector[2];
z = fVector[3];
}
inline void TThreeVectorComplex::GetCartesian(Complex_t *array) const
{
*(array++) = fVector[1];
*(array++) = fVector[2];
*array = fVector[3];
}
inline Double_t TThreeVectorComplex::DistanceTo
(const Complex_t x, const Complex_t y, const Complex_t z)
const
{
Complex_t xloc(x), yloc(y), zloc(z);
xloc -= fVector[1];
yloc -= fVector[2];
zloc -= fVector[3];
return sqrt(norm(xloc) + norm(yloc) + norm(zloc));
}
inline Double_t TThreeVectorComplex::DistanceTo(const Complex_t *array) const
{
Complex_t x = fVector[1] - *(array++);
Complex_t y = fVector[2] - *(array++);
Complex_t z = fVector[3] - *array;
return sqrt(norm(x) + norm(y) + norm(z));
}
inline Double_t TThreeVectorComplex::DistanceTo
(const TThreeVectorComplex &vec2) const
{
Complex_t x = fVector[1] - vec2.fVector[1];
Complex_t y = fVector[2] - vec2.fVector[2];
Complex_t z = fVector[3] - vec2.fVector[3];
return sqrt(norm(x) + norm(y) + norm(z));
}
inline TThreeVectorComplex &TThreeVectorComplex::operator=
(const TThreeVectorReal &source)
{
fVector[1] = source.fVector[1];
fVector[2] = source.fVector[2];
fVector[3] = source.fVector[3];
return *this;
}
inline TThreeVectorComplex
&TThreeVectorComplex::operator=(const TThreeVectorComplex &source)
{
fVector[1] = source.fVector[1];
fVector[2] = source.fVector[2];
fVector[3] = source.fVector[3];
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator=
(const Float_t *array)
{
fVector[1] = *(array++);
fVector[2] = *(array++);
fVector[3] = *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator=
(const Double_t *array)
{
fVector[1] = *(array++);
fVector[2] = *(array++);
fVector[3] = *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator=
(const Complex_t *array)
{
fVector[1] = *(array++);
fVector[2] = *(array++);
fVector[3] = *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator+=
(const TThreeVectorComplex &source)
{
fVector[1] += source.fVector[1];
fVector[2] += source.fVector[2];
fVector[3] += source.fVector[3];
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator+=
(const Float_t *array)
{
fVector[1] += *(array++);
fVector[2] += *(array++);
fVector[3] += *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator+=
(const Double_t *array)
{
fVector[1] += *(array++);
fVector[2] += *(array++);
fVector[3] += *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator+=
(const Complex_t *array)
{
fVector[1] += *(array++);
fVector[2] += *(array++);
fVector[3] += *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator-=
(const TThreeVectorComplex &source)
{
fVector[1] -= source.fVector[1];
fVector[2] -= source.fVector[2];
fVector[3] -= source.fVector[3];
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator-=
(const Float_t *array)
{
fVector[1] -= *(array++);
fVector[2] -= *(array++);
fVector[3] -= *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator-=
(const Double_t *array)
{
fVector[1] -= *(array++);
fVector[2] -= *(array++);
fVector[3] -= *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator-=
(const Complex_t *array)
{
fVector[1] -= *(array++);
fVector[2] -= *(array++);
fVector[3] -= *array;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator*=
(const Complex_t &factor)
{
fVector[1] *= factor;
fVector[2] *= factor;
fVector[3] *= factor;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::operator/=
(const Complex_t &factor)
{
fVector[1] /= factor;
fVector[2] /= factor;
fVector[3] /= factor;
return *this;
}
inline Bool_t TThreeVectorComplex::operator==
(const TThreeVectorComplex &other) const
{
return (DistanceTo(other) < Resolution());
}
inline Bool_t TThreeVectorComplex::operator!=
(const TThreeVectorComplex &other) const
{
return !(*this == other);
}
inline TThreeVectorComplex &TThreeVectorComplex::Zero()
{
fVector[1] = 0;
fVector[2] = 0;
fVector[3] = 0;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::Conj()
{
fVector[1] = conj(fVector[1]);
fVector[2] = conj(fVector[2]);
fVector[3] = conj(fVector[3]);
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::SpaceInv()
{
fVector[1] = -fVector[1];
fVector[2] = -fVector[2];
fVector[3] = -fVector[3];
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::Normalize
(const Double_t length)
{
Double_t r = Length();
*this *= length/r;
return *this;
}
inline TThreeVectorComplex &TThreeVectorComplex::Cross
(const TThreeVectorComplex &other)
{
TThreeVectorComplex temp(*this);
return Cross(temp,other);
}
inline TThreeVectorComplex &TThreeVectorComplex::Cross
(const TThreeVectorComplex &va, const TThreeVectorComplex &vb)
{
fVector[1] = va.fVector[2]*vb.fVector[3] - va.fVector[3]*vb.fVector[2];
fVector[2] = va.fVector[3]*vb.fVector[1] - va.fVector[1]*vb.fVector[3];
fVector[3] = va.fVector[1]*vb.fVector[2] - va.fVector[2]*vb.fVector[1];
return *this;
}
inline Complex_t TThreeVectorComplex::Dot(const TThreeVectorComplex &other)
{
return (fVector[1]*other.fVector[1] +
fVector[2]*other.fVector[2] +
fVector[3]*other.fVector[3]);
}
inline TThreeVectorComplex TThreeVectorComplex::operator-() const
{
TThreeVectorComplex minusThis;
minusThis.fVector[1] = -fVector[1];
minusThis.fVector[2] = -fVector[2];
minusThis.fVector[3] = -fVector[3];
return minusThis;
}
inline TThreeVectorComplex operator+
(const TThreeVectorComplex &v1, const TThreeVectorComplex &v2)
{
TThreeVectorComplex result(v1);
return (result += v2);
}
inline TThreeVectorComplex operator-
(const TThreeVectorComplex &v1, const TThreeVectorComplex &v2)
{
TThreeVectorComplex result(v1);
return (result -= v2);
}
inline TThreeVectorComplex operator*
(const TThreeVectorComplex &vec, const Complex_t &factor)
{
TThreeVectorComplex result(vec);
return (result *= factor);
}
inline TThreeVectorComplex operator*
(const Complex_t &factor, const TThreeVectorComplex &vec)
{
TThreeVectorComplex result(vec);
return (result *= factor);
}
inline TThreeVectorComplex operator/
(const TThreeVectorComplex &vec, const Complex_t &factor)
{
TThreeVectorComplex result(vec);
return (result /= factor);
}
inline TBuffer &operator>>(TBuffer &buf, TThreeVectorComplex *&obj)
{
for (Int_t i=1; i<4; i++) {
Double_t real,imag;
buf >> real >> imag;
obj->fVector[i] = Complex_t(real,imag);
}
return buf;
}
inline TBuffer &operator<<(TBuffer &buf, const TThreeVectorComplex *obj)
{
for (Int_t i=1; i<4; i++) {
buf << obj->fVector[i].real() << obj->fVector[i].imag();
}
return buf;
}
#endif
ROOT page - Class index - Class Hierarchy - Top of the page
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.