The usual reason for wishing to modify the WCS calibration associated with a dataset is that the data have been geometrically transformed in some way (here, we will assume a 2-dimensional image dataset). This causes the image features (stars, galaxies, etc.) to move with respect to the grid of pixels which they occupy, so that any coordinate systems previously associated with the image become invalid.
To correct for this, it is necessary to set up a Mapping which expresses the positions of image features in the new data grid in terms of their positions in the old grid. In both cases, the grid coordinates we use will have the first pixel centred at (1,1) with each pixel being a unit square.
AST allows you to correct for any type of geometrical transformation in this way, so long as a suitable Mapping to describe it can be constructed. For purposes of illustration, we will assume here that the new image coordinates XNEW and YNEW can be expressed in terms of the old coordinates XOLD and YOLD as follows:
DOUBLE PRECISION XNEW, XOLD, YNEW, YOLD DOUBLE PRECISION M( 4 ), Z( 2 ) ... XNEW = XOLD * M( 1 ) + YOLD * M( 2 ) + Z( 1 ) YNEW = XOLD * M( 3 ) + YOLD * M( 4 ) + Z( 2 )
where M is a 22 transformation matrix and Z represents a shift
of origin. This is therefore a general linear coordinate
transformation which can represent displacement, rotation,
magnification and shear.
In AST, it can be represented by concatenating two Mappings. The first is a MatrixMap, which implements the matrix multiplication. The second is a WinMap, which linearly transforms one coordinate window on to another, but will be used here simply to implement the shift of origin (alternatively, a ShiftMap could have been used in place of a WinMap). These Mappings may be constructed and concatenated as follows:
DOUBLE PRECISION INA( 2 ), INB( 2 ), OUTA( 2 ), OUTB( 2 ) INTEGER MATRIXMAP, WINMAP ... * Set up the corners of a unit square. DATA INA / 2 * 0.0D0 / DATA INB / 2 * 1.0D0 / * The MatrixMap may be constructed directly from the matrix M. MATRIXMAP = AST_MATRIXMAP( 2, 2, 0, M, ' ', STATUS ) * For the WinMap, we take the coordinates of the corners of a unit * square (window) and then shift them by the required amounts. OUTA( 1 ) = INA( 1 ) + Z( 1 ) OUTA( 2 ) = INA( 2 ) + Z( 2 ) OUTB( 1 ) = INB( 1 ) + Z( 1 ) OUTB( 2 ) = INB( 2 ) + Z( 2 ) * The WinMap will then implement this shift. WINMAP = AST_WINMAP( 2, INA, INB, OUTA, OUTB, ' ', STATUS ) * Join the two Mappings together, so that they are applied one after * the other. NEWMAP = AST_CMPMAP( MATRIXMAP, WINMAP, 1, ' ', STATUS )
You might, of course, create any other form of Mapping depending on
the type of geometrical transformation involved. For an overview of
the Mappings provided by AST, see , and
for a description of the capabilities of each class of Mapping, see
its entry in
. For an overview of how
individual Mappings may be combined, see
(
gives more details).
Assuming you have obtained a WCS calibration for your original image
in the form of a pointer to a FrameSet, WCSINFO1
(), the Mapping created above may be used to
produce a calibration for the new image as follows:
INTEGER WCSINFO1, WCSINFO2 ... * If necessary, make a copy of the WCS calibration, since we are * about to alter it. WCSINFO2 = AST_COPY( WCSINFO1, STATUS ) * Re-map the base Frame so that it refers to the new data grid * instead of the old one. CALL AST_REMAPFRAME( WCSINFO2, AST__BASE, NEWMAP, STATUS )
This will produce a pointer, WCSINFO2, to a new FrameSet in which all the coordinate systems associated with the original image are modified so that they are correctly registered with your new image instead.
For more information about re-mapping the Frames within a FrameSet,
see . Also see
for a similar example to the above, applicable to the case of reducing
the size of an image by binning.
AST A Library for Handling World Coordinate Systems in Astronomy