MVuvw.h
Classes
- MVuvw -- A 3D vector on Earth (full description)
Interface
- Public Members
- MVuvw()
- MVuvw(const MVPosition &other)
- MVuvw(Double in0, Double in1, Double in2)
- MVuvw(Double in0)
- MVuvw(const Quantity &l)
- MVuvw(const Quantity &l, Double angle0, Double angle1)
- MVuvw(const Quantity &l, const Quantity &angle0, const Quantity &angle1)
- MVuvw(const Quantum<Vector<Double> > &angle)
- MVuvw(const Quantity &l, const Quantum<Quantum<Double> > &angle)
- MVuvw(const Vector<Double> &other)
- MVuvw(const Vector<Quantity> &other)
- MVuvw(const MVBaseline &pos, const MVDirection &dr, Bool ew=False)
- MVuvw &operator=(const MVuvw &other)
- ~MVuvw()
- Double operator*(const MVuvw &other) const
- Bool operator== (const MVuvw &other) const
- Bool operator!= (const MVuvw &other) const
- Bool near(const MVuvw &other, Double tol=1e-13) const
- Bool near(const MVuvw &other, Quantity tol) const
- Bool nearAbs(const MVuvw &other, Double tol=1e-13) const
- MVuvw operator-() const
- MVuvw &operator+=(const MVuvw &right)
- MVuvw operator+(const MVuvw &right) const
- MVuvw &operator-=(const MVuvw &right)
- MVuvw operator-(const MVuvw &right) const
- virtual uInt type() const
- static void assure(const MeasValue &in)
- virtual void adjust()
- virtual void adjust(Double &res)
- virtual void readjust(Double res)
- virtual Double radius()
- Vector<Double> get() const
- const Vector<Double> &getValue() const
- Quantum<Vector<Double> > getAngle() const
- Quantum<Vector<Double> > getAngle(const Unit &unit) const
- Quantity getLength() const
- Quantity getLength(const Unit &unit) const
- Double uvwAngle(const MVuvw &other) const
- Quantity uvwAngle(const MVuvw &other, const Unit &unit) const
- Double separation(const MVuvw &other) const
- Quantity separation(const MVuvw &other, const Unit &unit) const
- MVuvw crossProduct(const MVuvw &other) const
- virtual void print(ostream &os) const
- virtual MeasValue *clone() const
- virtual Vector<Double> getVector() const
- virtual void putVector(const Vector<Double> &in)
- virtual Vector<Quantum<Double> > getRecordValue() const
- virtual Vector<Quantum<Double> > getXRecordValue() const
- virtual Vector<Quantum<Double> > getTMRecordValue() const
- virtual Bool putValue(const Vector<Quantum<Double> > &in)
Review Status
- Programs:
- Tests:
Prerequisite
Etymology
From Measure, Value and uvw
Synopsis
A MVuvw is a 3-vector of uvws in a rectangular frame with
internal units of m.
It can be constructed with:
- MVuvw() creates point at origin (0,0,0)
- MVuvw(MVuvw) creates a copy
- MVuvw(Double, Double, Double) creates (x,y,z) with
specified values (assuming meters)
- MVuvw(Quantity length,Double, Double) creates a MVuvw assuming
that the two values are (in radians) angle along 'equator'
and towards 'pole'.
- MVuvw(Quantity length, Quantity, Quantity) creates a MVuvw
assuming angles as in previous, or uvws
- MVuvw(Quantity, Quantum<Vector<Double> >) creates a
MVuvw from angle vector, using first two angles, and
assuming second as zero if not present.
- MVuvw(Quantum<Vector<Double> > creates from
angles or uvws, depending on the units in the
quantum vector. In the angle case,
the data derived can be scaled with the readjust() function. If
the unit of the quantum vector is length, uvw is
assumed.
- MVuvw(Vector<Double> creates from angles (less than
or equal to two elements) or x,y,z (3 elements).
- MVuvw(Vector<Quantity> creates from length+angles,
angles, or x,y,z, depending on units.
- MVuvw(MVBaseline, MVDirection) creates a uvw
in the specified reference direction (in same reference frame)
A void adjust(Double) function normalises the vector to a length of 1;
a get() returns as a
Double 3-vector the length and angles of the uvw vector;
a getAngle() returns a Quantum 2-vector, (uInt) returns the indicated
element, and getValue returns the vector.
uvws can be added and subtracted.
The multiplication of two uvws produces the in-product.
Example
See Muvw class.
Motivation
To do coordinate transformations
To Do
- Implement for EW
- Get sign (especially of V) correct
- Let it handle Vectors of UVW
- Add some rotation matrix history for speed
Member Description
Default constructor generates a (0,0,0) uvw
Copy constructor
MVuvw(Double in0, Double in1, Double in2)
Creates a specified vector
MVuvw(Double in0)
MVuvw(const Quantity &l)
Creates a vector with specified length towards pole
MVuvw(const Quantity &l, Double angle0, Double angle1)
Creates the uvw from specified (azimuth,elevation) angles and length
Creates the uvw from specified angles and length. or uvws
Thrown Exceptions
- AipsError if quantities not in angle format
If not enough angles: pole assumed (if none), or elevation =0 (if 1)
MVuvw(const Quantity &l, const Quantity &angle0, const Quantity &angle1)
MVuvw(const Quantity &l, const Quantum<Quantum<Double> > &angle)
Creates the uvw from specified angles and length. or uvws
Thrown Exceptions
- AipsError if quantities not in angle format
MVuvw(const Vector<Double> &other)
MVuvw(const Vector<Quantity> &other)
Create from specified length and/or angles and/or uvw
uvw from a baseline and a reference direction (in same frame)
MVuvw &operator=(const MVuvw &other)
Copy assignment
Destructor
Double operator*(const MVuvw &other) const
Multiplication defined as in-product
Bool operator== (const MVuvw &other) const
Bool operator!= (const MVuvw &other) const
Bool near(const MVuvw &other, Double tol=1e-13) const
Bool near(const MVuvw &other, Quantity tol) const
Bool nearAbs(const MVuvw &other, Double tol=1e-13) const
Equality comparisons
MVuvw operator-() const
MVuvw &operator+=(const MVuvw &right)
MVuvw operator+(const MVuvw &right) const
MVuvw &operator-=(const MVuvw &right)
MVuvw operator-(const MVuvw &right) const
Addition and subtraction
virtual uInt type() const
static void assure(const MeasValue &in)
Tell me your type
virtual void adjust()
virtual void adjust(Double &res)
virtual void readjust(Double res)
Normalise direction aspects by adjusting the length to 1
virtual Double radius()
Get radius(i.e. length of vector, in m) of uvw
Generate a 3-vector of coordinates (length(m), angles(rad))
Generate a 3-vector of x,y,z in m
Generate angle 2-vector (in rad)
and with specified units
Generate the length
Quantity getLength(const Unit &unit) const
and generate it with the specified units
Double uvwAngle(const MVuvw &other) const
Quantity uvwAngle(const MVuvw &other, const Unit &unit) const
Get the uvw angle between the directions. I.e. the angle between
the direction from one to the pole, and from one to the other.
Double separation(const MVuvw &other) const
Quantity separation(const MVuvw &other, const Unit &unit) const
Get the angular separation between two directions.
MVuvw crossProduct(const MVuvw &other) const
Produce the cross product
virtual void print(ostream &os) const
Print data
Clone
Get the value in internal units
virtual void putVector(const Vector<Double> &in)
Set the value from internal units (set 0 for empty vector)
Get the internal value as a Vector<Quantity>. Usable in
records. The getXRecordValue() gets additional information for records.
Note that the Vectors could be empty.
Set the internal value if correct values and dimensions