summaryrefslogtreecommitdiffstats
path: root/funtools/wcs/wcs.h
diff options
context:
space:
mode:
Diffstat (limited to 'funtools/wcs/wcs.h')
-rw-r--r--funtools/wcs/wcs.h963
1 files changed, 963 insertions, 0 deletions
diff --git a/funtools/wcs/wcs.h b/funtools/wcs/wcs.h
new file mode 100644
index 0000000..1943c8d
--- /dev/null
+++ b/funtools/wcs/wcs.h
@@ -0,0 +1,963 @@
+/*** File libwcs/wcs.h
+ *** September 9, 2011
+ *** By Jessica Mink, jmink@cfa.harvard.edu
+ *** Harvard-Smithsonian Center for Astrophysics
+ *** Copyright (C) 1994-2011
+ *** 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: jmink@cfa.harvard.edu
+ Postal address: Jessica 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[9]; /* Values of CRPIXn keywords */
+ double crval[9]; /* Values of CRVALn keywords */
+ double cdelt[9]; /* Values of CDELTn keywords */
+ double pc[81]; /* Values of PCiiijjj keywords */
+ double projp[10]; /* Constants for various projections */
+ int pvfail; /* If non-zero, significant inaccuracy likely to occur in projection */
+ double projppv[2*MAXPV]; /* SCAMP constants for the PV coordinates */
+ struct poly *inv_x; /* SCAMP projection correction polynom in x */
+ struct poly *inv_y; /* SCAMP projection correction polynom in y */
+ 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)*/
+ double zpzd; /* Colat of FIP (degs) */
+ double zpr; /* Radius of FIP (degs) */
+ 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 zpnp; /* ZP polynomial order (0-9) */
+ 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[9][9]; /* Values of CTYPEn keywords */
+ char c1type[9]; /* 1st coordinate type code:
+ RA--, GLON, ELON */
+ char c2type[9]; /* 2nd coordinate type code:
+ DEC-, GLAT, ELAT */
+ char ptype[9]; /* projection type code:
+ SIN, TAN, ARC, NCP, GLS, MER, AIT, etc */
+ char units[9][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_ICRS, 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) */
+ int logwcs; /* 1 if DC-FLAG is set for log wavelength */
+};
+
+/* 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) */
+#define WCS_ZPX 32 /* Gnomonic = Tangent Plane (NOAO with corrections) */
+#define WCS_TPV 33 /* Gnomonic = Tangent Plane (NOAO with corrections) */
+#define NWCSTYPE 34 /* Number of WCS types (-1 really means no WCS) */
+
+/* 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 */
+#define WCS_ICRS 11 /* ICRS right ascension and declination */
+
+/* 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
+
+/* pi/(180*3600): arcseconds to radians */
+#define AS2R 4.8481368110953e-6
+
+/* 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))
+#define secrad(x) ((x)*AS2R)
+
+/* TNX/ZPX 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/ZPX permitted types of surfaces */
+#define TNX_CHEBYSHEV 1
+#define TNX_LEGENDRE 2
+#define TNX_POLYNOMIAL 3
+
+/* TNX/ZPX 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 /* C++ prototypes */
+extern "C" {
+#endif
+
+#ifdef __STDC__ /* Full ANSI prototypes */
+
+ /* WCS data structure initialization subroutines in wcsinit.c */
+ struct WorldCoor *wcsinit ( /* set up WCS structure from a FITS image header */
+ const char* hstring);
+
+ struct WorldCoor *wcsninit ( /* set up WCS structure from a FITS image header */
+ const char* hstring, /* FITS header */
+ int len); /* Length of FITS header */
+
+ struct WorldCoor *wcsinitn ( /* set up WCS structure from a FITS image header */
+ const char* hstring, /* FITS header */
+ const char* wcsname); /* WCS name */
+
+ struct WorldCoor *wcsninitn ( /* set up WCS structure from a FITS image header */
+ const char* hstring, /* FITS header */
+ int len, /* Length of FITS header */
+ const char* wcsname); /* WCS name */
+
+ struct WorldCoor *wcsinitc ( /* set up WCS structure from a FITS image header */
+ const char* hstring, /* FITS header */
+ char *wcschar); /* WCS character (A-Z) */
+
+ struct WorldCoor *wcsninitc ( /* set up WCS structure from a FITS image header */
+ const char* hstring, /* FITS header */
+ int len, /* Length of FITS header */
+ char *wcschar); /* WCS character (A-Z) */
+
+ /* WCS subroutines in wcs.c */
+ void wcsfree ( /* Free a WCS structure and its contents */
+ struct WorldCoor *wcs); /* World coordinate system structure */
+
+ int wcstype( /* Set projection type from header CTYPEs */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ char *ctype1, /* FITS WCS projection for axis 1 */
+ char *ctype2); /* FITS WCS projection for axis 2 */
+
+ 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 ( /* Convert pixel coordinates to World Coordinate string */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double xpix, /* Image horizontal coordinate in pixels */
+ double ypix, /* Image vertical coordinate in pixels */
+ char *wcstring, /* World coordinate string (returned) */
+ int lstr); /* Length of world coordinate string (returned) */
+
+ void pix2wcs ( /* Convert pixel coordinates to World Coordinates */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double xpix, /* Image horizontal coordinate in pixels */
+ double ypix, /* Image vertical coordinate in pixels */
+ double *xpos, /* Longitude/Right Ascension in degrees (returned) */
+ double *ypos); /* Latitude/Declination in degrees (returned) */
+
+ void wcsc2pix ( /* Convert World Coordinates to pixel coordinates */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double xpos, /* Longitude/Right Ascension in degrees */
+ double ypos, /* Latitude/Declination in degrees */
+ char *coorsys, /* Coordinate system (B1950, J2000, etc) */
+ double *xpix, /* Image horizontal coordinate in pixels (returned) */
+ double *ypix, /* Image vertical coordinate in pixels (returned) */
+ int *offscl);
+
+ void wcs2pix ( /* Convert World Coordinates to pixel coordinates */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double xpos, /* Longitude/Right Ascension in degrees */
+ double ypos, /* Latitude/Declination in degrees */
+ double *xpix, /* Image horizontal coordinate in pixels (returned) */
+ double *ypix, /* Image vertical coordinate in pixels (returned) */
+ int *offscl);
+
+ double wcsdist( /* Compute angular distance between 2 sky positions */
+ double ra1, /* First longitude/right ascension in degrees */
+ double dec1, /* First latitude/declination in degrees */
+ double ra2, /* Second longitude/right ascension in degrees */
+ double dec2); /* Second latitude/declination in degrees */
+
+ double wcsdist1( /* Compute angular distance between 2 sky positions */
+ double ra1, /* First longitude/right ascension in degrees */
+ double dec1, /* First latitude/declination in degrees */
+ double ra2, /* Second longitude/right ascension in degrees */
+ double dec2); /* Second latitude/declination in degrees */
+
+ double wcsdiff( /* Compute angular distance between 2 sky positions */
+ double ra1, /* First longitude/right ascension in degrees */
+ double dec1, /* First latitude/declination in degrees */
+ double ra2, /* Second longitude/right ascension in degrees */
+ double dec2); /* Second latitude/declination in degrees */
+
+ struct WorldCoor* wcsxinit( /* set up a WCS structure from arguments */
+ 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( /* Return RA and Dec of image center, size in degrees */
+ 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 wcscent( /* Print the image center and size in WCS units */
+ struct WorldCoor *wcs); /* World coordinate system structure */
+
+ void wcssize( /* Return image center and size in RA and Dec */
+ 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 *dra, /* Half-width in right ascension (deg) (returned) */
+ double *ddec); /* Half-width in declination (deg) (returned) */
+
+ void wcsrange( /* Return min and max RA and Dec of image in degrees */
+ 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 wcscdset( /* Set scaling and rotation from CD matrix */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double *cd); /* CD matrix, ignored if NULL */
+
+ void wcsdeltset( /* set scaling, rotation from CDELTi, CROTA2 */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double cdelt1, /* degrees/pixel in first axis (or both axes) */
+ double cdelt2, /* degrees/pixel in second axis if nonzero */
+ double crota); /* Rotation counterclockwise in degrees */
+
+ void wcspcset( /* set scaling, rotation from CDELTs and PC matrix */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ double cdelt1, /* degrees/pixel in first axis (or both axes) */
+ double cdelt2, /* degrees/pixel in second axis if nonzero */
+ double *pc); /* Rotation matrix, ignored if NULL */
+
+ void setwcserr( /* Set WCS error message for later printing */
+ char *errmsg); /* Error mesage < 80 char */
+ void wcserr(void); /* 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(void); /* 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 */
+
+ int wcsreset( /* Change WCS using arguments */
+ struct WorldCoor *wcs, /* World coordinate system data structure */
+ double crpix1, /* Horizontal reference pixel */
+ double crpix2, /* Vertical reference pixel */
+ double crval1, /* Reference pixel horizontal coordinate in degrees */
+ double crval2, /* Reference pixel vertical coordinate in degrees */
+ double cdelt1, /* Horizontal scale in degrees/pixel, ignored if cd is not NULL */
+ double cdelt2, /* Vertical scale in degrees/pixel, ignored if cd is not NULL */
+ double crota, /* Rotation angle in degrees, ignored if cd is not NULL */
+ double *cd); /* Rotation matrix, used if not NULL */
+
+ void wcseqset( /* Change equinox of reference pixel coordinates in WCS */
+ struct WorldCoor *wcs, /* World coordinate system data structure */
+ double equinox); /* Desired equinox as fractional year */
+
+ 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( /* Set third dimension for cube projections */
+ int izpix); /* Set coordinate in third dimension (face) */
+
+ int wcszout ( /* Return coordinate in third dimension */
+ struct WorldCoor *wcs); /* World coordinate system structure */
+
+ void wcscominit( /* Initialize catalog search command set by -wcscom */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ int i, /* Number of command (0-9) to initialize */
+ char *command); /* command with %s where coordinates will go */
+
+ void wcscom( /* Execute catalog search command set by -wcscom */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ int i, /* Number of command (0-9) to execute */
+ char *filename, /* Image file name */
+ double xfile, /* Horizontal image pixel coordinates for WCS command */
+ double yfile, /* Vertical image pixel coordinates for WCS command */
+ char *wcstring); /* WCS String from pix2wcst() */
+
+ void savewcscom( /* Save WCS shell command */
+ int i, /* i of 10 possible shell commands */
+ char *wcscom); /* Shell command using output WCS string */
+ char *getwcscom( /* Return WCS shell command */
+ int i); /* i of 10 possible shell commands */
+ void setwcscom( /* Set WCS shell commands from stored values */
+ struct WorldCoor *wcs); /* World coordinate system structure */
+ void freewcscom( /* Free memory storing WCS shell commands */
+ struct WorldCoor *wcs); /* World coordinate system structure */
+
+ void setwcsfile( /* Set filename for WCS error message */
+ char *filename); /* FITS or IRAF file name */
+ int cpwcs ( /* Copy WCS keywords with no suffix to ones with suffix */
+ char **header, /* Pointer to start of FITS header */
+ char *cwcs); /* Keyword suffix character for output WCS */
+
+ void savewcscoor( /* Save output coordinate system */
+ char *wcscoor); /* coordinate system (J2000, B1950, galactic) */
+ char *getwcscoor(void); /* Return output coordinate system */
+
+ /* 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 */
+ void fk425e ( /* Convert B1950(FK4) to J2000(FK5) coordinates */
+ double *ra, /* Right ascension in degrees (B1950 in, J2000 out) */
+ double *dec, /* Declination in degrees (B1950 in, J2000 out) */
+ double epoch); /* Besselian epoch in years */
+ void fk524e ( /* Convert J2000(FK5) to B1950(FK4) coordinates */
+ double *ra, /* Right ascension in degrees (J2000 in, B1950 out) */
+ double *dec, /* Declination in degrees (J2000 in, B1950 out) */
+ 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 d2v3 ( /* Convert RA and Dec in degrees and distance to vector */
+ double rra, /* Right ascension in degrees */
+ double rdec, /* Declination in degrees */
+ double r, /* Distance to object in same units as pos */
+ double pos[3]); /* x,y,z geocentric equatorial position of object (returned) */
+ void s2v3 ( /* Convert RA and Dec in radians and distance to vector */
+ double rra, /* Right ascension in radians */
+ double rdec, /* Declination in radians */
+ double r, /* Distance to object in same units as pos */
+ double pos[3]); /* x,y,z geocentric equatorial position of object (returned) */
+ void v2d3 ( /* Convert vector to RA and Dec in degrees and distance */
+ double pos[3], /* x,y,z geocentric equatorial position of object */
+ double *rra, /* Right ascension in degrees (returned) */
+ double *rdec, /* Declination in degrees (returned) */
+ double *r); /* Distance to object in same units as pos (returned) */
+ void v2s3 ( /* Convert vector to RA and Dec in radians and distance */
+ double pos[3], /* x,y,z geocentric equatorial position of object */
+ double *rra, /* Right ascension in radians (returned) */
+ double *rdec, /* Declination in radians (returned) */
+ double *r); /* Distance to object in same units as pos (returned) */
+
+/* Distortion model subroutines in distort.c */
+ 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 */
+ int DelDistort ( /* Delete all distortion-related fields */
+ char *header, /* FITS header */
+ int verbose); /* If !=0, print keywords as deleted */
+ 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) */
+
+/* Other projection subroutines */
+
+/* 8 projections using AIPS algorithms (worldpos.c) */
+ int worldpos ( /* Convert from pixel location to RA,Dec */
+ double xpix, /* x pixel number (RA or long without rotation) */
+ double ypix, /* y pixel number (Dec or lat without rotation) */
+ struct WorldCoor *wcs, /* WCS parameter structure */
+ double *xpos, /* x (RA) coordinate (deg) (returned) */
+ double *ypos); /* y (dec) coordinate (deg) (returned) */
+ int worldpix ( /* Convert from RA,Dec to pixel location */
+ double xpos, /* x (RA) coordinate (deg) */
+ double ypos, /* y (dec) coordinate (deg) */
+ struct WorldCoor *wcs, /* WCS parameter structure */
+ double *xpix, /* x pixel number (RA or long without rotation) */
+ double *ypix); /* y pixel number (dec or lat without rotation) */
+
+/* Digital Sky Survey projection (dsspos.c) */
+ int dsspos ( /* Convert from pixel location to RA,Dec */
+ double xpix, /* x pixel number (RA or long without rotation) */
+ double ypix, /* y pixel number (Dec or lat without rotation) */
+ struct WorldCoor *wcs, /* WCS parameter structure */
+ double *xpos, /* x (RA) coordinate (deg) (returned) */
+ double *ypos); /* y (dec) coordinate (deg) (returned) */
+ int dsspix ( /* Convert from RA,Dec to pixel location */
+ double xpos, /* x (RA) coordinate (deg) */
+ double ypos, /* y (dec) coordinate (deg) */
+ struct WorldCoor *wcs, /* WCS parameter structure */
+ double *xpix, /* x pixel number (RA or long without rotation) */
+ double *ypix); /* y pixel number (dec or lat without rotation) */
+
+/* SAO TDC TAN projection with higher order terms (platepos.c) */
+ int platepos ( /* Convert from pixel location to RA,Dec */
+ double xpix, /* x pixel number (RA or long without rotation) */
+ double ypix, /* y pixel number (Dec or lat without rotation) */
+ struct WorldCoor *wcs, /* WCS parameter structure */
+ double *xpos, /* x (RA) coordinate (deg) (returned) */
+ double *ypos); /* y (dec) coordinate (deg) (returned) */
+ int platepix ( /* Convert from RA,Dec to pixel location */
+ double xpos, /* x (RA) coordinate (deg) */
+ double ypos, /* y (dec) coordinate (deg) */
+ struct WorldCoor *wcs, /* WCS parameter structure */
+ double *xpix, /* x pixel number (RA or long without rotation) */
+ double *ypix); /* y pixel number (dec or lat without rotation) */
+ void SetFITSPlate ( /* Set FITS header plate fit coefficients from structure */
+ char *header, /* Image FITS header */
+ struct WorldCoor *wcs); /* WCS structure */
+ int SetPlate ( /* Set plate fit coefficients in structure from arguments */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ int ncoeff1, /* Number of coefficients for x */
+ int ncoeff2, /* Number of coefficients for y */
+ double *coeff); /* Plate fit coefficients */
+ int GetPlate ( /* Return plate fit coefficients from structure in arguments */
+ struct WorldCoor *wcs, /* World coordinate system structure */
+ int *ncoeff1, /* Number of coefficients for x */
+ int *ncoeff2, /* Number of coefficients for y) */
+ double *coeff); /* Plate fit coefficients */
+
+/* IRAF TAN projection with higher order terms (tnxpos.c) */
+ int tnxinit ( /* initialize the gnomonic forward or inverse transform */
+ const char *header, /* FITS header */
+ struct WorldCoor *wcs); /* pointer to WCS structure */
+ int tnxpos ( /* forward transform (physical to world) gnomonic projection. */
+ double xpix, /* Image X coordinate */
+ double ypix, /* Image Y coordinate */
+ struct WorldCoor *wcs, /* pointer to WCS descriptor */
+ double *xpos, /* Right ascension (returned) */
+ double *ypos); /* Declination (returned) */
+ int tnxpix ( /* Inverse transform (world to physical) gnomonic projection */
+ double xpos, /* Right ascension */
+ double ypos, /* Declination */
+ struct WorldCoor *wcs, /* Pointer to WCS descriptor */
+ double *xpix, /* Image X coordinate (returned) */
+ double *ypix); /* Image Y coordinate (returned) */
+
+/* IRAF ZPN projection with higher order terms (zpxpos.c) */
+ int zpxinit ( /* initialize the zenithal forward or inverse transform */
+ const char *header, /* FITS header */
+ struct WorldCoor *wcs); /* pointer to WCS structure */
+ int zpxpos ( /* forward transform (physical to world) */
+ double xpix, /* Image X coordinate */
+ double ypix, /* Image Y coordinate */
+ struct WorldCoor *wcs, /* pointer to WCS descriptor */
+ double *xpos, /* Right ascension (returned) */
+ double *ypos); /* Declination (returned) */
+ int zpxpix ( /* Inverse transform (world to physical) */
+ double xpos, /* Right ascension */
+ double ypos, /* Declination */
+ struct WorldCoor *wcs, /* Pointer to WCS descriptor */
+ double *xpix, /* Image X coordinate (returned) */
+ double *ypix); /* Image Y coordinate (returned) */
+
+#else /* K&R prototypes */
+
+/* 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(void); /* 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 wcsdist1(); /* Compute angular distance between 2 sky positions */
+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(); /* Return system string from system code, equinox, epoch */
+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/TNX/ZPX */
+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 */
+int cpwcs(); /* Copy WCS keywords with no suffix to ones with suffix */
+
+/* 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 */
+void fk425e(); /* Convert B1950(FK4) to J2000(FK5) coordinates */
+void fk524e(); /* Convert J2000(FK5) to B1950(FK4) coordinates */
+int wcscsys(); /* Set coordinate system from string */
+double wcsceq(); /* Set equinox from string (return 0.0 if not obvious) */
+void d2v3(); /* Convert RA and Dec in degrees and distance to vector */
+void s2v3(); /* Convert RA and Dec in radians and distance to vector */
+void v2d3(); /* Convert vector to RA and Dec in degrees and distance */
+void v2s3(); /* Convert vector to RA and Dec in radians and distance */
+
+/* Distortion model subroutines in distort.c */
+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 */
+int DelDistort(); /* Delete all distortion-related fields */
+void pix2foc(); /* pixel coordinates -> focal plane coordinates */
+void foc2pix(); /* focal plane coordinates -> pixel coordinates */
+
+/* Other projection subroutines */
+
+/* 8 projections using AIPS algorithms (worldpos.c) */
+extern int worldpos(); /* Convert from pixel location to RA,Dec */
+extern int worldpix(); /* Convert from RA,Dec to pixel location */
+
+/* Digital Sky Survey projection (dsspos.c) */
+extern int dsspos(); /* Convert from pixel location to RA,Dec */
+extern int dsspix(); /* Convert from RA,Dec to pixel location */
+
+/* SAO TDC TAN projection with higher order terms (platepos.c) */
+extern int platepos(); /* Convert from pixel location to RA,Dec */
+extern int platepix(); /* Convert from RA,Dec to pixel location */
+extern void SetFITSPlate(); /* Set FITS header plate fit coefficients from structure */
+extern int SetPlate(); /* Set plate fit coefficients in structure from arguments */
+extern int GetPlate(); /* Return plate fit coefficients from structure in arguments */
+
+/* IRAF TAN projection with higher order terms (tnxpos.c) */
+extern int tnxinit(); /* initialize the gnomonic forward or inverse transform */
+extern int tnxpos(); /* forward transform (physical to world) gnomonic projection. */
+extern int tnxpix(); /* Inverse transform (world to physical) gnomonic projection */
+
+/* IRAF ZPN projection with higher order terms (zpxpos.c) */
+extern int zpxinit(); /* initialize the gnomonic forward or inverse transform */
+extern int zpxpos(); /* forward transform (physical to world) gnomonic projection. */
+extern int zpxpix(); /* Inverse transform (world to physical) gnomonic projection */
+
+#endif /* __STDC__ */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _wcs_h_ */
+
+/* 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
+ *
+ * Aug 30 2004 Add DelDistort()
+ *
+ * Nov 1 2005 Add WCS_ICRS
+ *
+ * Jan 5 2006 Add secrad()
+ * Apr 21 2006 Increase maximum number of axes from 4 to 8
+ * Apr 24 2006 Increase maximum number of axes to 9
+ * Nov 29 2006 Drop semicolon at end of C++ ifdef
+ * Dec 21 2006 Add cpwcs()
+ *
+ * Jan 4 2007 Drop extra declaration of wcscstr()
+ * Jan 4 2007 Fix declarations so ANSI prototypes are not just for C++
+ * Jan 9 2007 Add fk425e() and fk524e() subroutines
+ * Jan 9 2007 Add worldpos.c, dsspos.c, platepos.c, and tnxpos.c subroutines
+ * Jan 10 2007 Add ANSI prototypes for all subroutines
+ * Feb 1 2007 Add wcs.wcslog for log wavelength
+ * Jul 25 2007 Add v2s3(), s2v3(), d2v3(), v2d3() for coordinate-vector conversion
+ *
+ * Mar 31 2010 Add wcsdist1(), an alternate method
+ * Apr 07 2010 Add NWCSTYPE to keep it aligned with actual number of WCS types
+ *
+ * Mar 11 2011 Add NOAO ZPX projection parameters and subroutines (Frank Valdes)
+ * Mar 14 2011 Add SCAMP polynomial projection coefficients
+ * Sep 1 2011 Add TPV TAN projectioin with SCAT PV terms
+ * Sep 9 2011 Fix comment on TPV declaration
+ */