Page MenuHomec4science

wcs.h
No OneTemporary

File Metadata

Created
Fri, Nov 29, 06:01
/*** File libwcs/wcs.h
*** December 3, 2003
*** By Doug Mink, dmink@cfa.harvard.edu
*** Harvard-Smithsonian Center for Astrophysics
*** Copyright (C) 1994-2003
*** Smithsonian Astrophysical Observatory, Cambridge, MA, USA
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Correspondence concerning WCSTools should be addressed as follows:
Internet email: dmink@cfa.harvard.edu
Postal address: Doug Mink
Smithsonian Astrophysical Observatory
60 Garden St.
Cambridge, MA 02138 USA
*/
#ifndef _wcs_h_
#define _wcs_h_
#include "wcslib.h"
#include "fitshead.h"
/* SIRTF distortion matrix coefficients */
#define DISTMAX 10
struct Distort {
int a_order; /* max power for the 1st dimension */
double a[DISTMAX][DISTMAX]; /* coefficient array of 1st dimension */
int b_order; /* max power for 1st dimension */
double b[DISTMAX][DISTMAX]; /* coefficient array of 2nd dimension */
int ap_order; /* max power for the 1st dimension */
double ap[DISTMAX][DISTMAX]; /* coefficient array of 1st dimension */
int bp_order; /* max power for 1st dimension */
double bp[DISTMAX][DISTMAX]; /* coefficient array of 2nd dimension */
};
struct WorldCoor {
double xref; /* X reference coordinate value (deg) */
double yref; /* Y reference coordinate value (deg) */
double xrefpix; /* X reference pixel */
double yrefpix; /* Y reference pixel */
double xinc; /* X coordinate increment (deg) */
double yinc; /* Y coordinate increment (deg) */
double rot; /* rotation around axis (deg) (N through E) */
double cd[4]; /* rotation matrix */
double dc[4]; /* inverse rotation matrix */
double equinox; /* Equinox of coordinates default to 1950.0 */
double epoch; /* Epoch of coordinates default to equinox */
double nxpix; /* Number of pixels in X-dimension of image */
double nypix; /* Number of pixels in Y-dimension of image */
double plate_ra; /* Right ascension of plate center */
double plate_dec; /* Declination of plate center */
double plate_scale; /* Plate scale in arcsec/mm */
double x_pixel_offset; /* X pixel offset of image lower right */
double y_pixel_offset; /* Y pixel offset of image lower right */
double x_pixel_size; /* X pixel_size */
double y_pixel_size; /* Y pixel_size */
double ppo_coeff[6]; /* pixel to plate coefficients for DSS */
double x_coeff[20]; /* X coefficients for plate model */
double y_coeff[20]; /* Y coefficients for plate model */
double xpix; /* X (RA) coordinate (pixels) */
double ypix; /* Y (dec) coordinate (pixels) */
double zpix; /* Z (face) coordinate (pixels) */
double xpos; /* X (RA) coordinate (deg) */
double ypos; /* Y (dec) coordinate (deg) */
double crpix[4]; /* Values of CRPIXn keywords */
double crval[4]; /* Values of CRVALn keywords */
double cdelt[4]; /* Values of CDELTn keywords */
double pc[16]; /* Values of PCiiijjj keywords */
double projp[10]; /* Constants for various projections */
double longpole; /* Longitude of North Pole in degrees */
double latpole; /* Latitude of North Pole in degrees */
double rodeg; /* Radius of the projection generating sphere */
double imrot; /* Rotation angle of north pole */
double pa_north; /* Position angle of north (0=horizontal) */
double pa_east; /* Position angle of east (0=horizontal) */
double radvel; /* Radial velocity (km/sec away from observer)*/
double zvel; /* Radial velocity (v/c away from observer)*/
int imflip; /* If not 0, image is reflected around axis */
int prjcode; /* projection code (-1-32) */
int latbase; /* Latitude base 90 (NPA), 0 (LAT), -90 (SPA) */
int ncoeff1; /* Number of x-axis plate fit coefficients */
int ncoeff2; /* Number of y-axis plate fit coefficients */
int changesys; /* 1 for FK4->FK5, 2 for FK5->FK4 */
/* 3 for FK4->galactic, 4 for FK5->galactic */
int printsys; /* 1 to print coordinate system, else 0 */
int ndec; /* Number of decimal places in PIX2WCST */
int degout; /* 1 to always print degrees in PIX2WCST */
int tabsys; /* 1 to put tab between RA & Dec, else 0 */
int rotmat; /* 0 if CDELT, CROTA; 1 if CD */
int coorflip; /* 0 if x=RA, y=Dec; 1 if x=Dec, y=RA */
int offscl; /* 0 if OK, 1 if offscale */
int wcson; /* 1 if WCS is set, else 0 */
int naxis; /* Number of axes in image (for WCSLIB 3.0) */
int naxes; /* Number of axes in image */
int wcsproj; /* WCS_OLD: AIPS worldpos() and worldpix()
WCS_NEW: Mark Calabretta's WCSLIB subroutines
WCS_BEST: WCSLIB for all but CAR,COE,NCP
WCS_ALT: AIPS for all but CAR,COE,NCP */
int linmode; /* 0=system only, 1=units, 2=system+units */
int detector; /* Instrument detector number */
char instrument[32]; /* Instrument name */
char ctype[4][9]; /* Values of CTYPEn keywords */
char c1type[8]; /* 1st coordinate type code:
RA--, GLON, ELON */
char c2type[8]; /* 2nd coordinate type code:
DEC-, GLAT, ELAT */
char ptype[8]; /* projection type code:
SIN, TAN, ARC, NCP, GLS, MER, AIT, etc */
char units[4][32]; /* Units if LINEAR */
char radecsys[32]; /* Reference frame: FK4, FK4-NO-E, FK5, GAPPT*/
char radecout[32]; /* Output reference frame: FK4,FK5,GAL,ECL */
char radecin[32]; /* Input reference frame: FK4,FK5,GAL,ECL */
double eqin; /* Input equinox (match sysin if 0.0) */
double eqout; /* Output equinox (match sysout if 0.0) */
int sysin; /* Input coordinate system code */
int syswcs; /* WCS coordinate system code */
int sysout; /* Output coordinate system code */
/* WCS_B1950, WCS_J2000, WCS_GALACTIC,
* WCS_ECLIPTIC, WCS_LINEAR, WCS_ALTAZ */
char center[32]; /* Center coordinates (with frame) */
struct wcsprm wcsl; /* WCSLIB main projection parameters */
struct linprm lin; /* WCSLIB image/pixel conversion parameters */
struct celprm cel; /* WCSLIB projection type */
struct prjprm prj; /* WCSLIB projection parameters */
struct IRAFsurface *lngcor; /* RA/longitude correction structure */
struct IRAFsurface *latcor; /* Dec/latitude correction structure */
int distcode; /* Distortion code 0=none 1=SIRTF */
struct Distort distort; /* SIRTF distortion coefficients */
char *command_format[10]; /* WCS command formats */
/* where %s is replaced by WCS coordinates */
/* where %f is replaced by the image filename */
/* where %x is replaced by image coordinates */
double ltm[4]; /* Image rotation matrix */
double ltv[2]; /* Image offset */
int idpix[2]; /* First pixel to use in image (x, y) */
int ndpix[2]; /* Number of pixels to use in image (x, y) */
struct WorldCoor *wcs; /* WCS upon which this WCS depends */
struct WorldCoor *wcsdep; /* WCS depending on this WCS */
char *wcsname; /* WCS name (defaults to NULL pointer) */
char wcschar; /* WCS character (A-Z, null, space) */
};
/* Projections (1-26 are WCSLIB) (values for wcs->prjcode) */
#define WCS_PIX -1 /* Pixel WCS */
#define WCS_LIN 0 /* Linear projection */
#define WCS_AZP 1 /* Zenithal/Azimuthal Perspective */
#define WCS_SZP 2 /* Zenithal/Azimuthal Perspective */
#define WCS_TAN 3 /* Gnomonic = Tangent Plane */
#define WCS_SIN 4 /* Orthographic/synthesis */
#define WCS_STG 5 /* Stereographic */
#define WCS_ARC 6 /* Zenithal/azimuthal equidistant */
#define WCS_ZPN 7 /* Zenithal/azimuthal PolyNomial */
#define WCS_ZEA 8 /* Zenithal/azimuthal Equal Area */
#define WCS_AIR 9 /* Airy */
#define WCS_CYP 10 /* CYlindrical Perspective */
#define WCS_CAR 11 /* Cartesian */
#define WCS_MER 12 /* Mercator */
#define WCS_CEA 13 /* Cylindrical Equal Area */
#define WCS_COP 14 /* Conic PerSpective (COP) */
#define WCS_COD 15 /* COnic equiDistant */
#define WCS_COE 16 /* COnic Equal area */
#define WCS_COO 17 /* COnic Orthomorphic */
#define WCS_BON 18 /* Bonne */
#define WCS_PCO 19 /* Polyconic */
#define WCS_SFL 20 /* Sanson-Flamsteed (GLobal Sinusoidal) */
#define WCS_PAR 21 /* Parabolic */
#define WCS_AIT 22 /* Hammer-Aitoff */
#define WCS_MOL 23 /* Mollweide */
#define WCS_CSC 24 /* COBE quadrilateralized Spherical Cube */
#define WCS_QSC 25 /* Quadrilateralized Spherical Cube */
#define WCS_TSC 26 /* Tangential Spherical Cube */
#define WCS_NCP 27 /* Special case of SIN */
#define WCS_GLS 28 /* Same as SFL */
#define WCS_DSS 29 /* Digitized Sky Survey plate solution */
#define WCS_PLT 30 /* Plate fit polynomials (SAO) */
#define WCS_TNX 31 /* Gnomonic = Tangent Plane (NOAO with corrections) */
/* Coordinate systems */
#define WCS_J2000 1 /* J2000(FK5) right ascension and declination */
#define WCS_B1950 2 /* B1950(FK4) right ascension and declination */
#define WCS_GALACTIC 3 /* Galactic longitude and latitude */
#define WCS_ECLIPTIC 4 /* Ecliptic longitude and latitude */
#define WCS_ALTAZ 5 /* Azimuth and altitude/elevation */
#define WCS_LINEAR 6 /* Linear with optional units */
#define WCS_NPOLE 7 /* Longitude and north polar angle */
#define WCS_SPA 8 /* Longitude and south polar angle */
#define WCS_PLANET 9 /* Longitude and latitude on planet */
#define WCS_XY 10 /* X-Y Cartesian coordinates */
/* Method to use */
#define WCS_BEST 0 /* Use best WCS projections */
#define WCS_ALT 1 /* Use not best WCS projections */
#define WCS_OLD 2 /* Use AIPS WCS projections */
#define WCS_NEW 3 /* Use WCSLIB 2.5 WCS projections */
/* Distortion codes (values for wcs->distcode) */
#define DISTORT_NONE 0 /* No distortion coefficients */
#define DISTORT_SIRTF 1 /* SIRTF distortion matrix */
#ifndef PI
#define PI 3.141592653589793238462643
#endif
/* Conversions among hours of RA, degrees and radians. */
#define degrad(x) ((x)*PI/180.)
#define raddeg(x) ((x)*180./PI)
#define hrdeg(x) ((x)*15.)
#define deghr(x) ((x)/15.)
#define hrrad(x) degrad(hrdeg(x))
#define radhr(x) deghr(raddeg(x))
/* TNX surface fitting structure and flags */
struct IRAFsurface {
double xrange; /* 2. / (xmax - xmin), polynomials */
double xmaxmin; /* - (xmax + xmin) / 2., polynomials */
double yrange; /* 2. / (ymax - ymin), polynomials */
double ymaxmin; /* - (ymax + ymin) / 2., polynomials */
int type; /* type of curve to be fitted */
int xorder; /* order of the fit in x */
int yorder; /* order of the fit in y */
int xterms; /* cross terms for polynomials */
int ncoeff; /* total number of coefficients */
double *coeff; /* pointer to coefficient vector */
double *xbasis; /* pointer to basis functions (all x) */
double *ybasis; /* pointer to basis functions (all y) */
};
/* TNX permitted types of surfaces */
#define TNX_CHEBYSHEV 1
#define TNX_LEGENDRE 2
#define TNX_POLYNOMIAL 3
/* TNX cross-terms flags */
#define TNX_XNONE 0 /* no x-terms (old no) */
#define TNX_XFULL 1 /* full x-terms (new yes) */
#define TNX_XHALF 2 /* half x-terms (new) */
#ifdef __cplusplus /* allan: 28.4.98: added C++ prototypes */
extern "C" {
/* WCS subroutines in wcs.c */
struct WorldCoor *wcsinit (const char* hstring);
struct WorldCoor *wcsninit (
const char* hstring, /* FITS header */
int len); /* Length of FITS header */
struct WorldCoor *wcsinitn (
const char* hstring, /* FITS header */
const char* wcsname); /* WCS name */
struct WorldCoor *wcsninitn (
const char* hstring, /* FITS header */
int len, /* Length of FITS header */
const char* wcsname); /* WCS name */
struct WorldCoor *wcsinitc (
const char* hstring, /* FITS header */
const char wcschar); /* WCS character (A-Z) */
struct WorldCoor *wcsninitc (
const char* hstring, /* FITS header */
int len, /* Length of FITS header */
const char wcschar); /* WCS character (A-Z) */
void wcsfree (
struct WorldCoor *wcs); /* World coordinate system structure */
int iswcs( /* Returns 1 if wcs structure set, else 0 */
struct WorldCoor *wcs); /* World coordinate system structure */
int nowcs( /* Returns 0 if wcs structure set, else 1 */
struct WorldCoor *wcs); /* World coordinate system structure */
int pix2wcst (
struct WorldCoor *wcs, /* World coordinate system structure */
double xpix,
double ypix, /* Image coordinates in pixels */
char *wcstring, /* World coordinate string (returned) */
int lstr /* Length of world coordinate string (returned) */
);
int pix2wcs (
struct WorldCoor *wcs, /* World coordinate system structure */
double xpix,
double ypix, /* Image coordinates in pixels */
double *xpos,
double *ypos /* RA and Dec in degrees (returned) */
);
void wcsc2pix (
struct WorldCoor *wcs, /* World coordinate system structure */
double xpos,
double ypos, /* World coordinates in degrees */
char *coorsys, /* Coordinate system (B1950, J2000, etc) */
double *xpix,
double *ypix, /* Image coordinates in pixels */
int *offscl);
void wcs2pix (
struct WorldCoor *wcs, /* World coordinate system structure */
double xpos,
double ypos, /* World coordinates in degrees */
double *xpix,
double *ypix, /* Image coordinates in pixels */
int *offscl);
double wcsdist( /* Compute angular distance between 2 sky positions */
double ra0, /* World coordinates in degrees */
double dec0,
double ra1, /* World coordinates in degrees */
double dec1);
double wcsdiff( /* Compute angular distance between 2 sky positions */
double ra0, /* World coordinates in degrees */
double dec0,
double ra1, /* World coordinates in degrees */
double dec1);
struct WorldCoor* wcsxinit(
double cra, /* Center right ascension in degrees */
double cdec, /* Center declination in degrees */
double secpix, /* Number of arcseconds per pixel */
double xrpix, /* Reference pixel X coordinate */
double yrpix, /* Reference pixel X coordinate */
int nxpix, /* Number of pixels along x-axis */
int nypix, /* Number of pixels along y-axis */
double rotate, /* Rotation angle (clockwise positive) in degrees */
int equinox, /* Equinox of coordinates, 1950 and 2000 supported */
double epoch, /* Epoch of coordinates, used for FK4/FK5 conversion
* no effect if 0 */
char *proj); /* Projection */
struct WorldCoor* wcskinit( /* set up WCS structure from keyword values */
int naxis1, /* Number of pixels along x-axis */
int naxis2, /* Number of pixels along y-axis */
char *ctype1, /* FITS WCS projection for axis 1 */
char *ctype2, /* FITS WCS projection for axis 2 */
double crpix1, /* Reference pixel coordinates */
double crpix2, /* Reference pixel coordinates */
double crval1, /* Coordinate at reference pixel in degrees */
double crval2, /* Coordinate at reference pixel in degrees */
double *cd, /* Rotation matrix, used if not NULL */
double cdelt1, /* scale in degrees/pixel, if cd is NULL */
double cdelt2, /* scale in degrees/pixel, if cd is NULL */
double crota, /* Rotation angle in degrees, if cd is NULL */
int equinox, /* Equinox of coordinates, 1950 and 2000 supported */
double epoch); /* Epoch of coordinates, for FK4/FK5 conversion */
void wcsshift( /* Change center of WCS */
struct WorldCoor *wcs, /* World coordinate system structure */
double cra, /* New center right ascension in degrees */
double cdec, /* New center declination in degrees */
char *coorsys); /* FK4 or FK5 coordinates (1950 or 2000) */
void wcsfull(
struct WorldCoor *wcs, /* World coordinate system structure */
double *cra, /* Right ascension of image center (deg) (returned) */
double *cdec, /* Declination of image center (deg) (returned) */
double *width, /* Width in degrees (returned) */
double *height); /* Height in degrees (returned) */
void wcsrange(
struct WorldCoor *wcs, /* World coordinate system structure */
double *ra1, /* Min. right ascension of image (deg) (returned) */
double *ra2, /* Max. right ascension of image (deg) (returned) */
double *dec1, /* Min. declination of image (deg) (returned) */
double *dec2); /* Max. declination of image (deg) (returned) */
void setwcserr( /* Set WCS error message for later printing */
char *errmsg); /* Error mesage < 80 char */
void wcserr(); /* Print WCS error message to stderr */
void setdefwcs( /* Set flag to use AIPS WCS instead of WCSLIB */
int oldwcs); /* 1 for AIPS WCS subroutines, else WCSLIB */
int getdefwcs(); /* Return flag for AIPS WCS set by setdefwcs */
char *getradecsys( /* Return name of image coordinate system */
struct WorldCoor *wcs); /* World coordinate system structure */
void wcsoutinit( /* Set output coordinate system for pix2wcs */
struct WorldCoor *wcs, /* World coordinate system structure */
char *coorsys); /* Coordinate system (B1950, J2000, etc) */
char *getwcsout( /* Return current output coordinate system */
struct WorldCoor *wcs); /* World coordinate system structure */
void wcsininit( /* Set input coordinate system for wcs2pix */
struct WorldCoor *wcs, /* World coordinate system structure */
char *coorsys); /* Coordinate system (B1950, J2000, etc) */
char *getwcsin( /* Return current input coordinate system */
struct WorldCoor *wcs); /* World coordinate system structure */
int setwcsdeg( /* Set WCS coordinate output format */
struct WorldCoor *wcs, /* World coordinate system structure */
int degout); /* 1= degrees, 0= hh:mm:ss dd:mm:ss */
int wcsndec( /* Set or get number of output decimal places */
struct WorldCoor *wcs, /* World coordinate system structure */
int ndec); /* Number of decimal places in output string
if < 0, return current ndec unchanged */
void setwcslin( /* Set pix2wcst() mode for LINEAR coordinates */
struct WorldCoor *wcs, /* World coordinate system structure */
int mode); /* 0: x y linear, 1: x units x units
2: x y linear units */
int wcszin(
int izpix); /* Set coordinate in third dimension (face) */
int wcszout ( /* Return coordinate in third dimension */
struct WorldCoor *wcs); /* World coordinate system structure */
void savewcscoor( /* Save output coordinate system */
char *wcscoor); /* coordinate system (J2000, B1950, galactic) */
char *getwcscoor(); /* Return output coordinate system */
void savewcscom( /* Save WCS shell command */
char *wcscom); /* Shell command using output WCS string */
char *getwcscom(); /* Return WCS shell command */
void setwcsfile( /* Set filename for WCS error message */
char *filename); /* FITS or IRAF file name */
/* Coordinate conversion subroutines in wcscon.c */
void wcsconv( /* Convert between coordinate systems and equinoxes */
int sys1, /* Input coordinate system (J2000, B1950, ECLIPTIC, GALACTIC */
int sys2, /* Output coordinate system (J2000, B1950, ECLIPTIC, G ALACTIC */
double eq1, /* Input equinox (default of sys1 if 0.0) */
double eq2, /* Output equinox (default of sys2 if 0.0) */
double ep1, /* Input Besselian epoch in years */
double ep2, /* Output Besselian epoch in years */
double *dtheta, /* Longitude or right ascension in degrees
Input in sys1, returned in sys2 */
double *dphi, /* Latitude or declination in degrees
Input in sys1, returned in sys2 */
double *ptheta, /* Longitude or right ascension proper motion in deg/year
Input in sys1, returned in sys2 */
double *pphi, /* Latitude or declination proper motion in deg/year */
double *px, /* Parallax in arcseconds */
double *rv); /* Radial velocity in km/sec */
void wcsconp( /* Convert between coordinate systems and equinoxes */
int sys1, /* Input coordinate system (J2000, B1950, ECLIPTIC, GALACTIC */
int sys2, /* Output coordinate system (J2000, B1950, ECLIPTIC, G ALACTIC */
double eq1, /* Input equinox (default of sys1 if 0.0) */
double eq2, /* Output equinox (default of sys2 if 0.0) */
double ep1, /* Input Besselian epoch in years */
double ep2, /* Output Besselian epoch in years */
double *dtheta, /* Longitude or right ascension in degrees
Input in sys1, returned in sys2 */
double *dphi, /* Latitude or declination in degrees
Input in sys1, returned in sys2 */
double *ptheta, /* Longitude or right ascension proper motion in degrees/year
Input in sys1, returned in sys2 */
double *pphi); /* Latitude or declination proper motion in degrees/year
Input in sys1, returned in sys2 */
void wcscon( /* Convert between coordinate systems and equinoxes */
int sys1, /* Input coordinate system (J2000, B1950, ECLIPTIC, GALACTIC */
int sys2, /* Output coordinate system (J2000, B1950, ECLIPTIC, G ALACTIC */
double eq1, /* Input equinox (default of sys1 if 0.0) */
double eq2, /* Output equinox (default of sys2 if 0.0) */
double *dtheta, /* Longitude or right ascension in degrees
Input in sys1, returned in sys2 */
double *dphi, /* Latitude or declination in degrees
Input in sys1, returned in sys2 */
double epoch); /* Besselian epoch in years */
int wcscsys( /* Return code for coordinate system in string */
char *coorsys); /* Coordinate system (B1950, J2000, etc) */
double wcsceq ( /* Set equinox from string (return 0.0 if not obvious) */
char *wcstring); /* Coordinate system (B1950, J2000, etc) */
void wcscstr ( /* Set coordinate system type string from system and equinox */
char *cstr, /* Coordinate system string (returned) */
int syswcs, /* Coordinate system code */
double equinox, /* Equinox of coordinate system */
double epoch); /* Epoch of coordinate system */
void distortinit ( /* Set distortion coefficients from FITS header */
struct WorldCoor *wcs, /* World coordinate system structure */
const char* hstring); /* FITS header */
void setdistcode ( /* Set WCS distortion code string from CTYPEi value */
struct WorldCoor *wcs, /* World coordinate system structure */
char *ctype); /* CTYPE value from FITS header */
char *getdistcode ( /* Return distortion code string for CTYPEi */
struct WorldCoor *wcs); /* World coordinate system structure */
void pix2foc ( /* Convert pixel to focal plane coordinates */
struct WorldCoor *wcs, /* World coordinate system structure */
double x, /* Image pixel horizontal coordinate */
double y, /* Image pixel vertical coordinate */
double *u, /* Focal plane horizontal coordinate(returned) */
double *v); /* Focal plane vertical coordinate (returned) */
void foc2pix ( /* Convert focal plane to pixel coordinates */
struct WorldCoor *wcs, /* World coordinate system structure */
double u, /* Focal plane horizontal coordinate */
double v, /* Focal plane vertical coordinate */
double *x, /* Image pixel horizontal coordinate(returned) */
double *y); /* Image pixel vertical coordinate (returned) */
};
#else /* __cplusplus */
/* WCS subroutines in wcs.c */
struct WorldCoor *wcsinit(); /* set up a WCS structure from a FITS image header */
struct WorldCoor *wcsninit(); /* set up a WCS structure from a FITS image header */
struct WorldCoor *wcsinitn(); /* set up a WCS structure from a FITS image header */
struct WorldCoor *wcsninitn(); /* set up a WCS structure from a FITS image header */
struct WorldCoor *wcsinitc(); /* set up a WCS structure from a FITS image header */
struct WorldCoor *wcsninitc(); /* set up a WCS structure from a FITS image header */
struct WorldCoor *wcsxinit(); /* set up a WCS structure from arguments */
struct WorldCoor *wcskinit(); /* set up a WCS structure from keyword values */
void wcsfree(); /* Free a WCS structure and its contents */
int wcstype(); /* Set projection type from header CTYPEs */
void wcscdset(); /* Set scaling and rotation from CD matrix */
void wcsdeltset(); /* set scaling and rotation from CDELTs and CROTA2 */
void wcspcset(); /* set scaling and rotation from CDELTs and PC matrix */
int iswcs(); /* Return 1 if WCS structure is filled, else 0 */
int nowcs(); /* Return 0 if WCS structure is filled, else 1 */
void wcsshift(); /* Reset the center of a WCS structure */
void wcscent(); /* Print the image center and size in WCS units */
void wcssize(); /* Return RA and Dec of image center, size in RA and Dec */
void wcsfull(); /* Return RA and Dec of image center, size in degrees */
void wcsrange(); /* Return min and max RA and Dec of image in degrees */
double wcsdist(); /* Distance in degrees between two sky coordinates */
double wcsdiff(); /* Distance in degrees between two sky coordinates */
void wcscominit(); /* Initialize catalog search command set by -wcscom */
void wcscom(); /* Execute catalog search command set by -wcscom */
char *getradecsys(); /* Return current value of coordinate system */
void wcsoutinit(); /* Initialize WCS output coordinate system for use by pix2wcs */
char *getwcsout(); /* Return current value of WCS output coordinate system */
void wcsininit(); /* Initialize WCS input coordinate system for use by wcs2pix */
char *getwcsin(); /* Return current value of WCS input coordinate system */
int setwcsdeg(); /* Set WCS output in degrees (1) or hh:mm:ss dd:mm:ss (0) */
int wcsndec(); /* Set or get number of output decimal places */
int wcsreset(); /* Change WCS using arguments */
void wcseqset(); /* Change equinox of reference pixel coordinates in WCS */
void wcscstr(); /* Set coordinate system string from system and equinox */
void setwcslin(); /* Set output string mode for LINEAR coordinates */
int pix2wcst(); /* Convert pixel coordinates to World Coordinate string */
void pix2wcs(); /* Convert pixel coordinates to World Coordinates */
void wcsc2pix(); /* Convert World Coordinates to pixel coordinates */
void wcs2pix(); /* Convert World Coordinates to pixel coordinates */
void setdefwcs(); /* Call to use AIPS classic WCS (also not PLT or TNX */
int getdefwcs(); /* Call to get flag for AIPS classic WCS */
int wcszin(); /* Set coordinate in third dimension (face) */
int wcszout(); /* Return coordinate in third dimension */
void wcserr(); /* Print WCS error message to stderr */
void setwcserr(); /* Set WCS error message for later printing */
void savewcscoor(); /* Save output coordinate system */
char *getwcscoor(); /* Return output coordinate system */
void savewcscom(); /* Save WCS shell command */
char *getwcscom(); /* Return WCS shell command */
void setwcscom(); /* Set WCS shell commands from stored values */
void freewcscom(); /* Free memory used to store WCS shell commands */
void setwcsfile(); /* Set filename for WCS error message */
/* Coordinate conversion subroutines in wcscon.c */
void wcscon(); /* Convert between coordinate systems and equinoxes */
void wcsconp(); /* Convert between coordinate systems and equinoxes */
void wcsconv(); /* Convert between coordinate systems and equinoxes */
int wcscsys(); /* Set coordinate system from string */
double wcsceq(); /* Set equinox from string (return 0.0 if not obvious) */
void wcscstr(); /* Return system string from system code, equinox, epoch */
void distortinit(); /* Set distortion coefficients from FITS header */
void setdistcode(); /* Set WCS distortion code string from CTYPEi value */
char *getdistcode(); /* Return distortion code string for CTYPEi */
void pix2foc(); /* pixel coordinates -> focal plane coordinates */
void foc2pix(); /* focal plane coordinates -> pixel coordinates */
#endif
#endif
/* Oct 26 1994 New file
* Dec 21 1994 Add rotation matrix
* Dec 22 1994 Add flag for coordinate reversal
* Mar 6 1995 Add parameters for Digital Sky Survey plate fit
* Jun 8 1995 Add parameters for coordinate system change
* Jun 21 1995 Add parameter for plate scale
* Jul 6 1995 Add parameter to note whether WCS is set
* Aug 8 1995 Add parameter to note whether to print coordinate system
* Oct 16 1995 Add parameters to save image dimensions and center coordinates
* Feb 15 1996 Add coordinate conversion functions
* Feb 20 1996 Add flag for tab tables
* Apr 26 1996 Add epoch of positions (actual date of image)
* Jul 5 1996 Add subroutine declarations
* Jul 19 1996 Add WCSFULL declaration
* Aug 5 1996 Add WCSNINIT to initialize WCS for non-terminated header
* Oct 31 1996 Add DCnn inverse rotation matrix
* Nov 1 1996 Add NDEC number of decimal places in output
*
* May 22 1997 Change range of pcode from 1-8 to -1-8 for linear transform
* Sep 12 1997 Add chip rotation MROT, XMPIX, YMPIX
*
* Jan 7 1998 Add INSTRUME and DETECTOR for HST metric correction
* Jan 16 1998 Add Mark Calabretta's WCSLIB data structures
* Jan 16 1998 Add LONGPOLE, LATPOLE, and PROJP constants for Calabretta
* Jan 22 1998 Add ctype[], crpix[], crval[], and cdelt[] for Calabretta
* Jan 23 1998 Change wcsset() to wcsxinit() and pcode to prjcode
* Jan 23 1998 Define projection type flags
* Jan 26 1998 Remove chip rotation
* Jan 26 1998 Add chip correction polynomial
* Feb 3 1998 Add number of coefficients for residual fit
* Feb 5 1998 Make cd and dc matrices vectors, not individual elements
* Feb 19 1998 Add projection names
* Feb 23 1998 Add TNX projection from NOAO
* Mar 3 1998 Add NOAO plate fit and residual fit
* Mar 12 1998 Add variables for TNX correction surface
* Mar 23 1998 Add PLT plate fit polynomial projection; reassign DSS
* Mar 23 1998 Drop plate_fit flag from structure
* Mar 25 1998 Add npcoeff to wcs structure for new plate fit WCS
* Apr 7 1998 Change amd_i_coeff to i_coeff
* Apr 8 1998 Add wcseqset() and wcsreset() subroutine declarations
* Apr 10 1998 Rearrange order of nonstandard WCS types
* Apr 13 1998 Add setdefwcs() subroutine declaration
* Apr 14 1998 Add coordinate systems and wcscoor()
* Apr 24 1998 Add units
* Apr 28 1998 Change coordinate system flags to WCS_*
* Apr 28 1998 Change projection flags to WCS_*
* Apr 28 1998 Add wcsc2pix()
* May 7 1998 Add C++ declarations
* May 13 1998 Add eqin and eqout for conversions to and from equinoxes
* May 14 1998 Add declarations for coordinate conversion subroutines
* May 27 1998 Add blsearch()
* May 27 1998 Change linear projection back to WCS_LIN from WCS_LPR
* May 27 1998 Move hget.c and hput.c C++ declarations to fitshead.h
* May 27 1998 Include fitshead.h
* May 29 1998 Add wcskinit()
* Jun 1 1998 Add wcserr()
* Jun 11 1998 Add initialization support subroutines
* Jun 18 1998 Add wcspcset()
* Jun 25 1998 Add wcsndec()
* Jul 6 1998 Add wcszin() and wcszout() to use third dimension of images
* Jul 7 1998 Change setdegout() to setwcsdeg(); setlinmode() to setwcslin()
* Jul 17 1998 Add savewcscoor(), getwcscoor(), savewcscom(), and getwcscom()
* Aug 14 1998 Add freewcscom(), setwcscom(), and multiple WCS commands
* Sep 3 1998 Add pa_north, pa_east, imrot and imflip to wcs structure
* Sep 14 1998 Add latbase for AXAF North Polar angle (NPOL not LAT-)
* Sep 16 1998 Make WCS_system start at 1; add NPOLE
* Sep 17 1998 Add wcscstr()
* Sep 21 1998 Add wcsconp() to convert proper motions, too.
* Dec 2 1998 Add WCS type for planet surface
* Jan 20 1999 Add declaration of wcsfree()
* Jun 16 1999 Add declaration of wcsrange()
* Oct 21 1999 Add declaration of setwcsfile()
*
* Jan 28 2000 Add flags for choice of WCS projection subroutines
* Jun 26 2000 Add XY coordinate system
* Nov 2 2000 Add wcsconv() to convert coordinates when parallax or rv known
*
* Jan 17 2001 Add idpix and ndpix for trim section, ltm for readout rotation
* Jan 31 2001 Add wcsinitn(), wcsninitn(), wcsinitc(), and wcsninitc()
* Feb 20 2001 Add wcs->wcs to main data structure
* Mar 20 2001 Close unclosed comment in wcsconv() argument list
*
* Apr 3 2002 Add SZP and second GLS/SFL projection
* Apr 9 2002 Add wcs->wcsdep for pointer to WCS depending on this WCS
* Apr 26 2002 Add wcs->wcsname and wcs->wcschar to identify WCS structure
* May 9 2002 Add wcs->radvel and wcs->zvel for radial velocity in km/sec
*
* Apr 1 2003 Add wcs->distort Distort structure for distortion correction
* Apr 1 2003 Add foc2pix() and pix2foc() subroutines for distortion correction
* May 1 2003 Add missing semicolons after C++ declarations of previous two functions
* Oct 1 2003 Rename wcs->naxes to wcs->naxis to match WCSLIB 3.2
* Nov 3 2003 Add distinit(), setdistcode(), and getdistcode() to distort.c
* Dec 3 2003 Add back wcs->naxes for backward compatibility
*/

Event Timeline