StokesCoordinate.h
Classes
- StokesCoordinate -- Interconvert between pixel and Stokes value. (full description)
Interface
- Public Members
- explicit StokesCoordinate(const Vector<Int> &whichStokes)
- StokesCoordinate(const StokesCoordinate &other)
- StokesCoordinate &operator=(const StokesCoordinate &other)
- virtual ~StokesCoordinate()
- virtual Coordinate::Type type() const
- virtual String showType() const
- virtual uInt nPixelAxes() const
- virtual uInt nWorldAxes() const
- virtual Bool toWorld(Vector<Double> &world, const Vector<Double> &pixel) const
- virtual Bool toPixel(Vector<Double> &pixel, const Vector<Double> &world) const
- Bool toPixel(Int &pixel, Stokes::StokesTypes stokes) const
- Bool toWorld(Stokes::StokesTypes &stokes, Int pixel) const
- static Double toWorld (Stokes::StokesTypes stokes)
- static Stokes::StokesTypes toWorld (Double world)
- virtual void makePixelRelative (Vector<Double>& pixel) const
- virtual void makePixelAbsolute (Vector<Double>& pixel) const
- virtual void makeWorldRelative (Vector<Double>& world) const
- virtual void makeWorldAbsolute (Vector<Double>& world) const
- Vector<Int> stokes() const
- void setStokes (const Vector<Int> &whichStokes)
- virtual Vector<String> worldAxisNames() const
- virtual Vector<Double> referencePixel() const
- virtual Matrix<Double> linearTransform() const
- virtual Vector<Double> increment() const
- virtual Vector<Double> referenceValue() const
- virtual Bool setWorldAxisNames(const Vector<String> &names)
- virtual Bool setReferencePixel(const Vector<Double> &refPix)
- virtual Bool setLinearTransform(const Matrix<Double> &xform)
- virtual Bool setIncrement(const Vector<Double> &inc)
- virtual Bool setReferenceValue(const Vector<Double> &refval)
- virtual Bool setWorldAxisUnits(const Vector<String> &units)
- virtual Vector<String> worldAxisUnits() const
- virtual Bool setWorldMixRanges (const IPosition& shape)
- virtual void setDefaultWorldMixRanges ()
- virtual Vector<Double> worldMixMin () const
- virtual Vector<Double> worldMixMax () const
- virtual String format(String& units, Coordinate::formatType format, Double worldValue, uInt worldAxis, Bool isAbsolute=True, Bool showAsAbsolute=True, Int precision = -1)
- virtual Bool near(const Coordinate& other, Double tol=1e-6) const
- virtual Bool near(const Coordinate& other, const Vector<Int>& excludeAxes, Double tol=1e-6) const
- virtual Bool save(RecordInterface &container, const String &fieldName) const
- static StokesCoordinate* restore(const RecordInterface &container, const String &fieldName)
- virtual Coordinate *clone() const
- virtual Bool doNearPixel (const Coordinate& other, const Vector<Bool>& thisAxes, const Vector<Bool>& otherAxes, Double tol=1.0e-6) const
- Private Members
- Bool toWorld(Double& world, const Double pixel) const
- Bool toPixel(Double& pixel, const Double world) const
- StokesCoordinate()
Review Status
- Reviewed By:
- Peter Barnes
- Date Reviewed:
- 1999/12/24
- Programs:
- Tests:
Prerequisite
Synopsis
Although not really a "coordinate", an axis where pixel numbers are used
for different Stokes values is in wide use. The StokesCoordinate
is a poor fit to the Coordinate polymorphic model.
You will probably find that if you try to use the Coordinate
classes polymorphically, that StokesCoordinate will cause you
to break the polymorphism. I.e. you may have to deal with
a specific StokesCoordinate)
The StokesCoordinate just maintains a list (given in the constructor) of
possibly non-monotonic Stokes values. The values of the list are the
world values (they are values from the Stokes::StokesTypes enum).
Thus world = list[pixel] where pixel is the pixel coordinate (0,1, ...)
This means that concepts such as reference pixel, reference value,
increment etc are meaningless for StokesCoordinate. You can recover these
these attributes, but the functions to set these attributes have no effect.
Note also that for the StokesCoordinate relative world coordinates are defined to be the
as absolute, since there is no meaning for a relative Stokes world value (e.g.
what is XX -RL ?? Relative pixel coordinates are defined.
All pixel coordinates are zero relative.
Example
In this example we create a StokesCoordinate housing IQUV
Vector<Int> iquv(4);
iquv(0) = Stokes::I; iquv(1) = Stokes::Q;
iquv(2) = Stokes::U; iquv(3) = Stokes::V;
StokesCoordinate stokes(iquv);
Motivation
It is conventional to make a pseudo-axis of Stokes parameters.
Another approach is to make an image type called Stokes.
To Do
- This could probably be generalized into an "enumeration axis" class.
Member Description
explicit StokesCoordinate(const Vector<Int> &whichStokes)
The length of whichStokes is the length of the axis, and the values
define which stokes are in which axis value. Often the vector will be of
length 4 and will contain Stokes::I, Q, U and V, however any valid value
from the stokes enum may be used. The values may not repeat however, e.g.
only one axis position may contain "I".
Copy constructor (copy semantics)
StokesCoordinate &operator=(const StokesCoordinate &other)
Assignment (copy semantics)
Destructor.
Returns Coordinates::STOKES.
Always returns the String "Stokes".
virtual uInt nPixelAxes() const
virtual uInt nWorldAxes() const
Always returns 1.
virtual Bool toWorld(Vector<Double> &world, const Vector<Double> &pixel) const
virtual Bool toPixel(Vector<Double> &pixel, const Vector<Double> &world) const
Convert a pixel to a world coordinate or vice versa. Returns True
if the conversion succeeds, otherwise it returns False and method
errorMessage returns an error message.
The output vectors are appropriately resized before use.
Bool toPixel(Int &pixel, Stokes::StokesTypes stokes) const
Bool toWorld(Stokes::StokesTypes &stokes, Int pixel) const
Interconvert between pixel and world as a Stokes type.
static Double toWorld (Stokes::StokesTypes stokes)
static Stokes::StokesTypes toWorld (Double world)
Interconvert between world stored as a Double and world stored as
a Stokes type. Since these functions are static, any valid
Stokes type can be used. The second function returns
Stokes::Undefined if world is illegal.
Make absolute coordinates relative and vice-versa.
For the StokesCoordinate relative world coordinates are defined to be the
same as absolute world coordinates. Relative pixels do have meaning
and are implemented (rel = abs - refPix)
Get the Stokes values (Stokes::StokesType) that we constructed
with into a vector
void setStokes (const Vector<Int> &whichStokes)
Set a new vector of Stokes values (a vector of Stokes::StokesType)
Report the value of the requested attribute.
Set the value of the requested attribute. For the StokesCoordinate,
these have no effect (always return True) except for setWorldAxisNames.
The set function has no effect as the units must be empty for a StokesCoordinate
Always returns True
Set the world min and max ranges, for use in function toMix,
for a lattice of the given shape (for this coordinate).
The implementation here gives world coordinates at the start
and end of the Stokes axis.
The output vectors are resized. Returns False if fails (and
then setDefaultWorldMixRanges generates the ranges)
with a reason in errorMessage().
The setDefaultWorldMixRanges function
gives you [-1e99->1e99].
virtual String format(String& units, Coordinate::formatType format, Double worldValue, uInt worldAxis, Bool isAbsolute=True, Bool showAsAbsolute=True, Int precision = -1)
Format a StokesCoordinate world value with the common format
interface (refer to the base class Coordinate
for basics.
A StokesCoordinate is formatted differently from other Coordinate
types. The world value is converted to the character representation
as defined by the enum StokesTypes in the class
Stokes.
Thus, all other arguments to do with formatting and precision are ignored.
virtual Bool near(const Coordinate& other, Double tol=1e-6) const
virtual Bool near(const Coordinate& other, const Vector<Int>& excludeAxes, Double tol=1e-6) const
Comparison function. Any private Double data members are compared
with the specified fractional tolerance. Don't compare on the specified
axes in the Coordinate. If the comparison returns False, method
errorMessage returns a message about why.
virtual Bool save(RecordInterface &container, const String &fieldName) const
Save the StokesCoordinate into the supplied record using the supplied field name.
The field must not exist, otherwise False is returned.
static StokesCoordinate* restore(const RecordInterface &container, const String &fieldName)
Recover the StokesCoordinate from a record.
A null pointer means that the restoration did not succeed - probably
because fieldName doesn't exist or doesn't contain a CoordinateSystem.
Make a copy of the StokesCoordinate using new. The caller is responsible for calling
delete.
virtual Bool doNearPixel (const Coordinate& other, const Vector<Bool>& thisAxes, const Vector<Bool>& otherAxes, Double tol=1.0e-6) const
Comparison only made for specified axes in this and other Coordinate
Bool toWorld(Double& world, const Double pixel) const
Bool toPixel(Double& pixel, const Double world) const
Undefined and inaccessible