casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
casacore::LinearXform Class Reference

Perform a linear transform between input and output vectors. More...

#include <LinearXform.h>

Public Member Functions

 LinearXform (uInt naxis=1)
 Construct with specified number of axes. More...
 
 LinearXform (const Vector< Double > &crpix, const Vector< Double > &cdelt)
 Construct the linear transformation from the supplied reference pixel and increment. More...
 
 LinearXform (const Vector< Double > &crpix, const Vector< Double > &cdelt, const Matrix< Double > &pc)
 Construct a linear transformation, supplying all of the reference pixel, increment and PC matrix. More...
 
 LinearXform (const LinearXform &other)
 Copy constructor (copy sematics) More...
 
LinearXformoperator= (const LinearXform &other)
 Assignment (copy sematics) More...
 
 ~LinearXform ()
 Destructor. More...
 
uInt nWorldAxes () const
 Returns the number of world axes, which for this class is also the number of pixel axes. More...
 
Bool forward (Vector< Double > &pixel, const Vector< Double > &world, String &errorMsg) const
 Convert world coordinates to pixel coordinates (forward), or pixel coordinates to world (reverse). More...
 
Bool reverse (Vector< Double > &world, const Vector< Double > &pixel, String &errorMsg) const
 
Vector< Doublecrpix () const
 Retrieve the value of crpix, cdelt, and pc. More...
 
Vector< Doublecdelt () const
 
Matrix< Doublepc () const
 
void crpix (const Vector< Double > &newvals)
 Set the value of crpix, cdelt, and pc. More...
 
void cdelt (const Vector< Double > &newvals)
 
void pc (const Matrix< Double > &newvals)
 
LinearXformfourierInvert (String &errMsg, const Vector< Bool > &axes, const Vector< Double > &crpix, const Vector< Double > &scale) const
 Invert the LinearXform ready for use in a Fourier Transformed Coordinate. More...
 
Bool near (const LinearXform &other, Double tol=1e-6) const
 Comparison function. More...
 
Bool near (const LinearXform &other, const Vector< Int > &excludeAxes, Double tol=1e-6) const
 

Private Member Functions

void set_linprm ()
 

Private Attributes

linprm linprm_p
 A WCSLIB C-structure. More...
 
Bool isPCDiagonal_p
 

Detailed Description

Perform a linear transform between input and output vectors.

Intended use:

Internal

Review Status

Reviewed By:
Peter Barnes
Date Reviewed:
1999/12/24
Test programs:
tLinearXform

Prerequisite

Synopsis

This class represents the common linear part of a FITS coordinate transformation. In particular it does the following:

world = cdelt * PC * (pixel - crpix)

Where PC is an NxN matrix; pixel, crpix (reference pixel) and world are length N vectors; and cdelt (increment) is an NxN diagonal matrix, represented as a length N vector.

Normally this class isn't used directly, rather it is used indirectly through a class like LinearCoordinate.

The actual computations are performed by WCSLIB, written by Mark Calabretta of the ATNF.

Example

Let's make a LinearXform housing two axes with a unit diagonal PC matrix and convert from pixel to world

Vector<Double> crpix(2), cdelt(2);
crpix(0) = 10.0; crpix(1) = 20.0;
cdelt(0) = 1.0; cdelt(1) = -1.0;
String errMsg;
Vector<Double> world, pixel(2);
pixel = 10.0;
Bool ok = lxf.reverse(world, pixel, errMsg);
if (ok) {
cerr << "pixel, world = " << pixel << world << endl;
} else {
cerr << "Error : " << errMsg << endl;
}

The answer should be a world vector with values 0 and -10.

Motivation

Factor out the common linear part of coordinate transformations.

Thrown Exceptions

To Do

Definition at line 109 of file LinearXform.h.

Constructor & Destructor Documentation

casacore::LinearXform::LinearXform ( uInt  naxis = 1)

Construct with specified number of axes.

The reference pixel is assumed to be 0, and the increment is assumed to be unity, and the PC matrix is assumed to be diagonal.

casacore::LinearXform::LinearXform ( const Vector< Double > &  crpix,
const Vector< Double > &  cdelt 
)

Construct the linear transformation from the supplied reference pixel and increment.

The PC matrix is the unit matrix. crpix and cdelt must have the same number of elements.

casacore::LinearXform::LinearXform ( const Vector< Double > &  crpix,
const Vector< Double > &  cdelt,
const Matrix< Double > &  pc 
)

Construct a linear transformation, supplying all of the reference pixel, increment and PC matrix.

The vectors must be of the same length ("n") and the number of rows and columns in the matrix must also be n.

casacore::LinearXform::LinearXform ( const LinearXform other)

Copy constructor (copy sematics)

casacore::LinearXform::~LinearXform ( )

Destructor.

Member Function Documentation

Vector<Double> casacore::LinearXform::cdelt ( ) const
void casacore::LinearXform::cdelt ( const Vector< Double > &  newvals)
Vector<Double> casacore::LinearXform::crpix ( ) const

Retrieve the value of crpix, cdelt, and pc.

void casacore::LinearXform::crpix ( const Vector< Double > &  newvals)

Set the value of crpix, cdelt, and pc.

Note that since you can only set one of them, you cannot change the dimensionality of the transform using these functions. Instead use assignment on a temporary, i.e.: linxform = LinearXform (crpix,crval,pc);

Bool casacore::LinearXform::forward ( Vector< Double > &  pixel,
const Vector< Double > &  world,
String errorMsg 
) const

Convert world coordinates to pixel coordinates (forward), or pixel coordinates to world (reverse).

If the conversion works True is returned, otherwise False is returned and errorMsg is set. The output vectors are resized appropriately.

LinearXform* casacore::LinearXform::fourierInvert ( String errMsg,
const Vector< Bool > &  axes,
const Vector< Double > &  crpix,
const Vector< Double > &  scale 
) const

Invert the LinearXform ready for use in a Fourier Transformed Coordinate.

It is the callers responsibility to delete the pointer. If it fails the pointer is 0 and an error message is provided

Bool casacore::LinearXform::near ( const LinearXform other,
Double  tol = 1e-6 
) const

Comparison function.

Any private Double data members are compared with the specified fractional tolerance. You can specify axes to exclude from the comparison if you wish.

Bool casacore::LinearXform::near ( const LinearXform other,
const Vector< Int > &  excludeAxes,
Double  tol = 1e-6 
) const
uInt casacore::LinearXform::nWorldAxes ( ) const

Returns the number of world axes, which for this class is also the number of pixel axes.

LinearXform& casacore::LinearXform::operator= ( const LinearXform other)

Assignment (copy sematics)

Matrix<Double> casacore::LinearXform::pc ( ) const
void casacore::LinearXform::pc ( const Matrix< Double > &  newvals)
Bool casacore::LinearXform::reverse ( Vector< Double > &  world,
const Vector< Double > &  pixel,
String errorMsg 
) const
void casacore::LinearXform::set_linprm ( )
private

Member Data Documentation

Bool casacore::LinearXform::isPCDiagonal_p
private

Definition at line 193 of file LinearXform.h.

linprm casacore::LinearXform::linprm_p
mutableprivate

A WCSLIB C-structure.

Definition at line 191 of file LinearXform.h.


The documentation for this class was generated from the following file: