diff options
Diffstat (limited to 'funtools/wcs/fitsfile.h')
-rw-r--r-- | funtools/wcs/fitsfile.h | 1286 |
1 files changed, 1286 insertions, 0 deletions
diff --git a/funtools/wcs/fitsfile.h b/funtools/wcs/fitsfile.h new file mode 100644 index 0000000..c000d18 --- /dev/null +++ b/funtools/wcs/fitsfile.h @@ -0,0 +1,1286 @@ +/*** File fitsfile.h FITS and IRAF file access subroutines + *** September 25, 2009 + *** By Jessica Mink, jmink@cfa.harvard.edu + *** Harvard-Smithsonian Center for Astrophysics + *** Copyright (C) 1996-2009 + *** 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 fitsfile_h_ +#define fitsfile_h_ +#include "fitshead.h" + +/* Declarations for subroutines in fitsfile.c, imhfile.c, imio.c, + * fileutil.c, and dateutil.c */ + +#define FITSBLOCK 2880 + +/* FITS table keyword structure */ +struct Keyword { + char kname[10]; /* Keyword for table entry */ + int lname; /* Length of keyword name */ + int kn; /* Index of entry on line */ + int kf; /* Index in line of first character of entry */ + int kl; /* Length of entry value */ + char kform[8]; /* Format for this value */ +}; + +/* Structure for access to tokens within a string */ +#define MAXTOKENS 1000 /* Maximum number of tokens to parse */ +#define MAXWHITE 20 /* Maximum number of different whitespace characters */ +struct Tokens { + char *line; /* Line which has been parsed */ + int lline; /* Number of characters in line */ + int ntok; /* Number of tokens on line */ + int nwhite; /* Number of whitespace characters */ + char white[MAXWHITE]; /* Whitespace (separator) characters */ + char *tok1[MAXTOKENS]; /* Pointers to start of tokens */ + int ltok[MAXTOKENS]; /* Lengths of tokens */ + int itok; /* Current token number */ +}; + +#ifdef __cplusplus /* C++ prototypes */ +extern "C" { +#endif + + +#ifdef __STDC__ /* Full ANSI prototypes */ + +/* Declarations for subroutines in fitsfile.c, imhfile.c, imio.c, + * fileutil.c, and dateutil.c */ + +/* FITS file access subroutines in fitsfile.c */ + int fitsropen( /* Open a FITS file for reading, returning a FILE pointer */ + char *inpath); /* Pathname for FITS tables file to read */ + char *fitsrhead( /* Read a FITS header */ + char *filename, /* Name of FITS image file */ + int *lhead, /* Allocated length of FITS header in bytes (returned) */ + int *nbhead); /* Number of bytes before start of data (returned) */ + char *fitsrtail( /* Read FITS header appended to graphics file */ + char *filename, /* Name of FITS image file */ + int *lhead, /* Allocated length of FITS header in bytes (returned) */ + int *nbhead); /* Number of bytes before start of data (returned) */ + char *fitsrimage( /* Read a FITS image */ + char *filename, /* Name of FITS image file */ + int nbhead, /* Actual length of image header(s) in bytes */ + char *header); /* FITS header for image (previously read) */ + char *fitsrfull( /* Read a FITS image of any dimension */ + char *filename, /* Name of FITS image file */ + int nbhead, /* Actual length of image header(s) in bytes */ + char *header); /* FITS header for image (previously read) */ + char *fitsrsect( /* Read a piece of a FITS image, header */ + char *filename, /* Name of FITS image file */ + char *header, /* FITS header for image (previously read) */ + int nbhead, /* Actual length of image header(s) in bytes */ + int x0, /* FITS image X coordinate of first pixel */ + int y0, /* FITS image Y coordinate of first pixel */ + int nx, /* Number of columns to read (less than NAXIS1) */ + int ny, /* Number of rows to read (less than NAXIS2) */ + int nlog); /* Note progress mod this rows */ + int fitswhead( /* Write FITS header; keep file open for further writing */ + char *filename, /* Name of FITS image file */ + char *header); /* FITS header for image (previously read) */ + int fitswexhead( /* Write FITS header in place */ + char *filename, /* Name of FITS image file */ + char *header); /* FITS header for image */ + int fitswext( /* Write FITS header and image as extension to a file */ + char *filename, /* Name of FITS image file */ + char *header, /* FITS image header */ + char *image); /* FITS image pixels */ + int fitswhdu( /* Write FITS head and image as extension */ + int fd, /* File descriptor */ + char *filename, /* Name of FITS image file */ + char *header, /* FITS image header */ + char *image); /* FITS image pixels */ + int fitswimage( /* Write FITS header and image */ + char *filename, /* Name of FITS image file */ + char *header, /* FITS image header */ + char *image); /* FITS image pixels */ + int fitscimage( /* Write FITS header and copy FITS image */ + char *filename, /* Name of output FITS image file */ + char *header, /* FITS image header */ + char *filename0); /* Name of input FITS image file */ + int isfits( /* Return 1 if file is a FITS file */ + char *filename); /* Name of file to check */ + void fitserr(); /* Print FITS error message to stderr */ + void setfitsinherit( /* Set flag to append primary data header */ + int inh); /* 1 to inherit primary data header, else 0 */ + int fitsheadsize( /* Return size of fitsheader in bytes */ + char *header); /* FITS image header */ + +/* FITS table file access subroutines in fitsfile.c */ + + int fitsrtopen( /* Open FITS table file and fill structure with + * pointers to selected keywords + * Return file descriptor (-1 if unsuccessful) */ + char *inpath, /* Pathname for FITS tables file to read */ + int *nk, /* Number of keywords to use */ + struct Keyword **kw, /* Structure for desired entries */ + int *nrows, /* Number of rows in table (returned) */ + int *nchar, /* Number of characters in one table row (returned) */ + int *nbhead); /* Number of characters before table starts */ + int fitsrthead( /* Read pointers to selected keywords + * from FITS table header */ + char *header, /* Header for FITS tables file */ + int *nk, /* Number of keywords to use */ + struct Keyword **kw, /* Structure for desired entries */ + int *nrows, /* Number of rows in table (returned) */ + int *nchar); /* Number of characters in one table row (returned) */ + void fitsrtlset(void); /* Reset FITS Table buffer limits from start of data */ + int fitsrtline( /* Return specified line of FITS table */ + int fd, /* File descriptor for FITS file */ + int nbhead, /* Number of bytes in FITS header */ + int lbuff, /* Number of bytes in table buffer */ + char *tbuff, /* FITS table buffer */ + int irow, /* Number of table row to read */ + int nbline, /* Number of bytes to read for this line */ + char *line); /* One line of FITS table (returned) */ +short ftgeti2( /* Extract column for keyword from FITS table line + * as short */ + char *entry, /* Row or entry from table */ + struct Keyword *kw); /* Table column information from FITS header */ + int ftgeti4( /* Extract column for keyword from FITS table line + * as int */ + char *entry, /* Row or entry from table */ + struct Keyword *kw); /* Table column information from FITS header */ +float ftgetr4( /* Extract column for keyword from FITS table line + * as float */ + char *entry, /* Row or entry from table */ + struct Keyword *kw); /* Table column information from FITS header */ + double ftgetr8( /* Extract column for keyword from FITS table line + * as double */ + char *entry, /* Row or entry from table */ + struct Keyword *kw); /* Table column information from FITS header */ + int ftgetc( /* Extract column for keyword from FITS table line + * as char string */ + char *entry, /* Row or entry from table */ + struct Keyword *kw, /* Table column information from FITS header */ + char *string, /* Returned string */ + int maxchar); /* Maximum number of characters in returned string */ + + void moveb ( /* Copy nbytes bytes from source+offs to dest+offd */ + char *source, /* Pointer to source */ + char *dest, /* Pointer to destination */ + int nbytes, /* Number of bytes to move */ + int offs, /* Offset in bytes in source from which to start copying */ + int offd); /* Offset in bytes in destination to which to start copying */ + + +/* IRAF file access subroutines in imhfile.c */ + + char *irafrhead( /* Read IRAF .imh header file and translate to FITS header */ + char *filename, /* Name of IRAF header file */ + int *lihead); /* Length of IRAF image header in bytes (returned) */ + char *irafrimage( /* Read IRAF image pixels (call after irafrhead) */ + char *fitsheader); /* FITS image header (filled) */ + int irafwhead( /* Write IRAF .imh header file */ + char *hdrname, /* Name of IRAF header file */ + int lhead, /* Length of IRAF header */ + char *irafheader, /* IRAF header */ + char *fitsheader); /* FITS image header */ + int irafwimage( /* Write IRAF .imh header file and .pix image file */ + char *hdrname, /* Name of IRAF header file */ + int lhead, /* Length of IRAF header */ + char *irafheader, /* IRAF header */ + char *fitsheader, /* FITS image header */ + char *image); /* IRAF image */ + int isiraf( /* return 1 if IRAF imh file, else 0 */ + char *filename); /* Name of file to check */ + char *iraf2fits( /* Convert IRAF image header to FITS image header, + * returning FITS header */ + char *hdrname, /* IRAF header file name (may be path) */ + char *irafheader, /* IRAF image header */ + int nbiraf, /* Number of bytes in IRAF header */ + int *nbfits); /* Number of bytes in FITS header (returned) */ + + char *fits2iraf( /* Convert FITS image header to IRAF image header, + * returning IRAF header */ + char *fitsheader, /* FITS image header */ + char *irafheader, /* IRAF image header (returned updated) */ + int nbhead, /* Length of IRAF header */ + int *nbiraf); /* Length of returned IRAF header */ + +/* Image pixel access subroutines in imio.c */ + + double getpix( /* Read one pixel from any data type 2-D array (0,0)*/ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel + * 16 = short, -16 = unsigned short, 32 = int + * -32 = float, -64 = double */ + int w, /* Image width in pixels */ + int h, /* Image height in pixels */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int x, /* Zero-based horizontal pixel number */ + int y); /* Zero-based vertical pixel number */ + double getpix1( /* Read one pixel from any data type 2-D array (1,1)*/ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + int w, /* Image width in pixels */ + int h, /* Image height in pixels */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int x, /* One-based horizontal pixel number */ + int y); /* One-based vertical pixel number */ + double maxvec( /* Get maximum value in vector from a image */ + char *image, /* Image array from which to extract vector */ + int bitpix, /* Number of bits per pixel in image */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Offset of first pixel to extract */ + int npix); /* Number of pixels to extract */ + double minvec( /* Get minimum value in vector from a image */ + char *image, /* Image array from which to extract vector */ + int bitpix, /* Number of bits per pixel in image */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Offset of first pixel to extract */ + int npix); /* Number of pixels to extract */ + void putpix( /* Write one pixel to any data type 2-D array (0,0)*/ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + int w, /* Image width in pixels */ + int h, /* Image height in pixels */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int x, /* Zero-based horizontal pixel number */ + int y, /* Zero-based vertical pixel number */ + double dpix); /* Value to put into image pixel */ + void putpix1( /* Write one pixel to any data type 2-D array (1,1) */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + int w, /* Image width in pixels */ + int h, /* Image height in pixels */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int x, /* One-based horizontal pixel number */ + int y, /* One-based vertical pixel number */ + double dpix); /* Value to put into image pixel */ + void addpix( /* Add to one pixel in any data type 2-D array (0,0)*/ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + int w, /* Image width in pixels */ + int h, /* Image height in pixels */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int x, /* Zero-based horizontal pixel number */ + int y, /* Zero-based vertical pixel number */ + double dpix); /* Value to add to image pixel */ + void addpix1( /* Add to one pixel in any data type 2-D array (1,1)*/ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + int w, /* Image width in pixels */ + int h, /* Image height in pixels */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int x, /* One-based horizontal pixel number */ + int y, /* One-based vertical pixel number */ + double dpix); /* Value to add to image pixel */ + void movepix( /* Move one pixel value between two 2-D arrays (0,0) */ + char *image1, /* Pointer to first pixel in input image */ + int bitpix1, /* Bits per input pixel (FITS codes) */ + int w1, /* Number of horizontal pixels in input image */ + int x1, /* Zero-based row for input pixel */ + int y1, /* Zero-based column for input pixel */ + char *image2, /* Pointer to first pixel in output image */ + int bitpix2, /* Bits per output pixel (FITS codes) */ + int w2, /* Number of horizontal pixels in output image */ + int x2, /* Zero-based row for output pixel */ + int y2); /* Zero-based column for output pixel */ + void movepix1( /* Move one pixel value between two 2-D arrays (1,1) */ + char *image1, /* Pointer to first pixel in input image */ + int bitpix1, /* Bits per input pixel (FITS codes) */ + int w1, /* Number of horizontal pixels in input image */ + int x1, /* One-based row for input pixel */ + int y1, /* One-based column for input pixel */ + char *image2, /* Pointer to first pixel in output image */ + int bitpix2, /* Bits per output pixel (FITS codes) */ + int w2, /* Number of horizontal pixels in output image */ + int x2, /* One-based row for output pixel */ + int y2); /* One-based column for output pixel */ + +/* Image vector processing subroutines in imio.c */ + + void addvec( /* Add constant to vector from 2-D array */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Offset of first pixel to which to add */ + int npix, /* Number of pixels to which to add */ + double dpix); /* Value to add to pixels */ + void multvec( /* Multiply vector from 2-D array by a constant */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Offset of first pixel to multiply */ + int npix, /* Number of pixels to multiply */ + double dpix); /* Value to add to pixels */ + void getvec( /* Read vector from 2-D array */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Offset of first pixel to extract */ + int npix, /* Number of pixels to extract */ + double *dvec0); /* Vector of pixels (returned) */ + void putvec( /* Write vector into 2-D array */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Offset of first pixel to insert */ + int npix, /* Number of pixels to insert */ + double *dvec0); /* Vector of pixels to insert */ + void fillvec( /* Write constant into a vector */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* Zero-based offset of first pixel to multiply */ + int npix, /* Number of pixels to multiply */ + double dpix); /* Value to which to set pixels */ + void fillvec1( /* Write constant into a vector */ + char *image, /* Image array as 1-D vector */ + int bitpix, /* FITS bits per pixel */ + double bzero, /* Zero point for pixel scaling */ + double bscale, /* Scale factor for pixel scaling */ + int pix1, /* One-based offset of first pixel to multiply */ + int npix, /* Number of pixels to multiply */ + double dpix); /* Value to which to set pixels */ + +/* Image pixel byte-swapping subroutines in imio.c */ + + void imswap( /* Swap alternating bytes in a vector */ + int bitpix, /* Number of bits per pixel */ + char *string, /* Address of starting point of bytes to swap */ + int nbytes); /* Number of bytes to swap */ + void imswap2( /* Swap bytes in a vector of 2-byte (short) integers */ + char *string, /* Address of starting point of bytes to swap */ + int nbytes); /* Number of bytes to swap */ + void imswap4( /* Reverse bytes in a vector of 4-byte numbers */ + char *string, /* Address of starting point of bytes to swap */ + int nbytes); /* Number of bytes to swap */ + void imswap8( /* Reverse bytes in a vector of 8-byte numbers */ + char *string, /* Address of starting point of bytes to swap */ + int nbytes); /* Number of bytes to swap */ + int imswapped(void); /* Return 1 if machine byte order is not FITS order */ + +/* File utilities from fileutil.c */ + + int getfilelines( /* Return number of lines in an ASCII file */ + char *filename); /* Name of file to check */ + char *getfilebuff( /* Return entire file contents in a character string */ + char *filename); /* Name of file to read */ + int getfilesize( /* Return size of a binary or ASCII file */ + char *filename); /* Name of file to check */ + int isimlist( /* Return 1 if file is list of FITS or IRAF image files, else 0 */ + char *filename); /* Name of file to check */ + int isimlistd( /* Return 1 if file is list of FITS or IRAF image files, else 0 */ + char *filename, /* Name of file to check */ + char *rootdir); /* Name of root directory for files in list */ + int isfilelist( /* Return 1 if list of readable files, else 0 */ + char *filename, /* Name of file to check */ + char *rootdir); /* Name of root directory for files in list */ + int isfile( /* Return 1 if file is a readable file, else 0 */ + char *filename); /* Name of file to check */ + int istiff( /* Return 1 if TIFF image file, else 0 */ + char *filename); /* Name of file to check */ + int isjpeg( /* Return 1 if JPEG image file, else 0 */ + char *filename); /* Name of file to check */ + int isgif( /* Return 1 if GIF image file, else 0 */ + char *filename); /* Name of file to check */ + int first_token( /* Return first token from the next line of an ASCII file */ + FILE *diskfile, /* File descriptor for ASCII file */ + int ncmax, /* Maximum number of characters returned */ + char *token); /* First token on next line (returned) */ + int stc2s ( /* Replace character in string with space */ + char *spchar, /* Character to replace with spaces */ + char *string); /* Character string to process */ + int sts2c ( /* Replace spaces in string with character */ + char *spchar, /* Character with which to replace spaces */ + char *string); /* Character string to process */ + +/* Subroutines for access to tokens within a string from fileutil.c */ + int setoken( /* Tokenize a string for easy decoding */ + struct Tokens *tokens, /* Token structure returned */ + char *string, /* character string to tokenize */ + char *cwhite); /* additional whitespace characters + * if = tab, disallow spaces and commas */ + int nextoken( /* Get next token from tokenized string */ + struct Tokens *tokens, /* Token structure returned */ + char *token, /* token (returned) */ + int maxchars); /* Maximum length of token */ + int getoken( /* Get specified token from tokenized string */ + struct Tokens *tokens, /* Token structure returned */ + int itok, /* token sequence number of token + * if <0, get whole string after token -itok + * if =0, get whole string */ + char *token, /* token (returned) */ + int maxchars); /* Maximum length of token */ + +/* Subroutines for translating dates and times in dateutil.c */ + + /* Subroutines to convert between floating point and vigesimal angles */ + + void ang2hr ( /* Fractional degrees to hours as hh:mm:ss.ss */ + double angle, /* Angle in fractional degrees */ + int lstr, /* Maximum number of characters in string */ + char *string); /* Character string (hh:mm:ss.ss returned) */ + void ang2deg ( /* Fractional degrees to degrees as dd:mm:ss.ss */ + double angle, /* Angle in fractional degrees */ + int lstr, /* Maximum number of characters in string */ + char *string); /* Character string (dd:mm:ss.ss returned) */ + double deg2ang ( /* Degrees as dd:mm:ss.ss to fractional degrees */ + char *angle); /* Angle as dd:mm:ss.ss */ + double hr2ang ( /* Hours as hh:mm:ss.ss to fractional degrees */ + char *angle); /* Angle in sexigesimal hours (hh:mm:ss.sss) */ + + /* Subroutines to convert from year and day of year */ + + void doy2dt( /* Year and day of year to yyyy.mmdd hh.mmss */ + int year, /* Year */ + double doy, /* Day of year with fraction */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + double doy2ep( /* Year and day of year to fractional year (epoch) */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + double doy2epb( /* year and day of year to Besselian epoch */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + double doy2epj( /* year and day of year to Julian epoch */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + char *doy2fd( /* year and day of year to FITS date */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + double doy2jd( /* year and day of year to Julian Day */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + double doy2mjd( /* year and day of year to Modified Julian Day */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + double doy2ts( /* year and day of year to seconds since 1950.0 */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + int doy2tsi( /* year and day of year to IRAF seconds since 1980-01-01 */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + time_t doy2tsu( /* year and day of year to Unix seconds since 1970-01-01 */ + int year, /* Year */ + double doy); /* Day of year with fraction */ + + /* Subroutines to convert from date and time */ + + void dt2doy( /* yyyy.mmdd hh.mmss to year and day of year */ + double date, /* Date as yyyy.mmdd + * yyyy = calendar year (e.g. 1973) + * mm = calendar month (e.g. 04 = april) + * dd = calendar day (e.g. 15) */ + double time, /* Time as hh.mmssxxxx + * if time<0, it is time as -(fraction of a day) + * hh = hour of day (0 .le. hh .le. 23) + * nn = minutes (0 .le. nn .le. 59) + * ss = seconds (0 .le. ss .le. 59) + * xxxx = tenths of milliseconds (0 .le. xxxx .le. 9999) */ + int *year, /* Year (returned) */ + double *doy); /* Day of year with fraction (returned) */ + double dt2ep( /* yyyy.ddmm and hh.mmsss to fractional year (epoch) */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + double dt2epb( /* yyyy.ddmm and hh.mmsss to Besselian epoch */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + double dt2epj( /* yyyy.ddmm and hh.mmsss to Julian epoch */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + char *dt2fd( /* yyyy.ddmm and hh.mmsss to FITS date string */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + void dt2i( /* yyyy.ddmm and hh.mmsss to year, month, day, hrs, min, sec */ + double date, /* Date as yyyy.mmdd */ + double time, /* Time as hh.mmssxxxx */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + double dt2jd( /* yyyy.ddmm and hh.mmsss to Julian Day */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + double dt2mjd( /* yyyy.ddmm and hh.mmsss to Modified Julian Day */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + double dt2ts( /* yyyy.ddmm and hh.mmsss to seconds since 1950.0 */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + int dt2tsi( /* yyyy.ddmm and hh.mmsss to IRAF seconds since 1980-01-01 */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + time_t dt2tsu( /* yyyy.ddmm and hh.mmsss to Unix seconds since 1970-01-01 */ + double date, /* Date as yyyy.mmdd */ + double time); /* Time as hh.mmssxxxx */ + + /* Subroutines to convert from epoch (various types of fractional year) */ + + void ep2dt( /* Fractional year to yyyy.mmdd hh.mmssss */ + double epoch, /* Date as fractional year */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + void epb2dt( /* Besselian epoch to yyyy.mmdd hh.mmssss */ + double epoch, /* Besselian epoch (fractional 365.242198781-day years) */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + void epj2dt( /* Julian epoch to yyyy.mmdd hh.mmssss */ + double epoch, /* Julian epoch (fractional 365.25-day years) */ + double *date, /* Date as yyyy.mmdd (returned)*/ + double *time); /* Time as hh.mmssxxxx (returned) */ + char *ep2fd( /* Fractional year to FITS date string yyyy-mm-ddThh:mm:ss.ss */ + double epoch); /* Date as fractional year */ + char *epb2fd( /* Besselian epoch to FITS date string yyyy-mm-ddThh:mm:ss.ss */ + double epoch); /* Besselian epoch (fractional 365.242198781-day years) */ + char *epj2fd( /* Julian epoch to FITS date string yyyy-mm-ddThh:mm:ss.ss */ + double epoch); /* Julian epoch (fractional 365.25-day years) */ + void ep2i( /* Fractional year to year, month, day, hours, min., sec. */ + double epoch, /* Date as fractional year */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + void epb2i( /* Besselian epoch to year, month, day, hours, min., sec. */ + double epoch, /* Besselian epoch (fractional 365.242198781-day years) */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + void epj2i( /* Julian epoch to year, month, day, hours, min., sec. */ + double epoch, /* Julian epoch (fractional 365.25-day years) */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + double ep2jd( /* Fractional year to Julian Date */ + double epoch); /* Date as fractional year */ + double epb2jd( /* Besselian epoch to Julian Date */ + double epoch); /* Besselian epoch (fractional 365.242198781-day years) */ + double epj2jd( /* Julian epoch to Julian Date */ + double epoch); /* Julian epoch (fractional 365.25-day years) */ + double ep2mjd( /* Fractional year to Modified Julian Date */ + double epoch); /* Date as fractional year */ + double epb2mjd( /* Besselian epoch to Modified Julian Date */ + double epoch); /* Besselian epoch (fractional 365.242198781-day years) */ + double epj2mjd( /* Julian epoch to Modified Julian Date */ + double epoch); /* Julian epoch (fractional 365.25-day years) */ + double ep2epb( /* Fractional year to Besselian epoch */ + double epoch); /* Date as fractional year */ + double ep2epj( /* Fractional year to Julian epoch */ + double epoch); /* Date as fractional year */ + double epb2epj( /* Besselian epoch to Julian epoch */ + double epoch); /* Besselian epoch (fractional 365.242198781-day years) */ + double epj2epb( /* Julian epoch to Besselian epoch */ + double epoch); /* Julian epoch (fractional 365.25-day years) */ + double epb2ep( /* Besselian epoch to fractional year */ + double epoch); /* Besselian epoch (fractional 365.242198781-day years) */ + double epj2ep( /* Julian epoch to fractional year */ + double epoch); /* Julian epoch (fractional 365.25-day years) */ + double ep2ts( /* Fractional year to seconds since 1950.0 */ + double epoch); /* Date as fractional year */ + double epb2ts( /* Besselian epoch to seconds since 1950.0 */ + double epoch); /* Besselian epoch (fractional 365.242198781-day years) */ + double epj2ts( /* Julian epoch to seconds since 1950.0 */ + double epoch); /* Julian epoch (fractional 365.25-day years) */ + + /* Convert from FITS standard date string */ + + void fd2dt( /* FITS standard date string to date and time */ + char *string, /* FITS date string, which may be: + * fractional year + * dd/mm/yy (FITS standard before 2000) + * dd-mm-yy (nonstandard use before 2000) + * yyyy-mm-dd (FITS standard after 1999) + * yyyy-mm-ddThh:mm:ss.ss (FITS standard after 1999) */ + double *date, /* Date as yyyy.mmdd (returned)*/ + double *time); /* Time as hh.mmssxxxx (returned) */ + void fd2doy( /* FITS standard date string to year, day of year */ + char *string, /* FITS date string */ + int *year, /* Year (returned) */ + double *doy); /* Day of year with fraction (returned) */ + double fd2ep( /* FITS standard date string to fractional year (epoch) */ + char *string); /* FITS date string */ + double fd2epb( /* FITS standard date string to Besselian epoch */ + char *string); /* FITS date string */ + double fd2epj( /* FITS standard date string to Julian epoch */ + char *string); /* FITS date string */ + char *fd2fd( /* Any FITS standard date string to ISO FITS date string */ + char *string); /* FITS date string */ + char *fd2of( /* Any FITS standard date string to old FITS date and time */ + char *string); /* FITS date string */ + char *fd2ofd( /* Any FITS standard date string to old FITS date string */ + char *string); /* FITS date string */ + char *fd2oft( /* Any FITS standard date string to old FITS time string */ + char *string); /* FITS date string */ + void fd2i( /* FITS standard date string to year, mon, day, hrs, min, sec */ + char *string, /* FITS date string */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + double fd2jd( /* FITS standard date string to Julian Day */ + char *string); /* FITS date string */ + double fd2mjd( /* FITS standard date string to Modified Julian Day */ + char *string); /* FITS date string */ + double fd2ts( /* FITS standard date to seconds since 1950-01-01 */ + char *string); /* FITS date string */ + int fd2tsi( /* FITS standard date to IRAF seconds since 1980-01-01 */ + char *string); /* FITS date string */ + time_t fd2tsu( /* FITS standard date to Unix seconds since 1970-01-01 */ + char *string); /* FITS date string */ + + /* Convert from Julian Day */ + + void jd2doy( /* Julian Day to year and day of year */ + double dj, /* Julian Day */ + int *year, /* Year (returned) */ + double *doy); /* Day of year with fraction (returned) */ + void jd2dt( /* Julian Day to yyyy.mmdd hh.mmssss */ + double dj, /* Julian Day */ + double *date, /* Date as yyyy.mmdd (returned)*/ + double *time); /* Time as hh.mmssxxxx (returned) */ + double jd2ep( /* Julian Day to fractional year */ + double dj); /* Julian Day */ + double jd2epb( /* Julian Day to Besselian epoch */ + double dj); /* Julian Day */ + double jd2epj( /* Julian Day to Julian epoch */ + double dj); /* Julian Day */ + char *jd2fd( /* Julian Day to FITS date string yyyy-mm-ddThh:mm:ss.ss */ + double dj); /* Julian Day */ + void jd2i( /* Julian Day to year, month, day, hours, min., sec. */ + double dj, /* Julian Day */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + double jd2mjd( /* Julian Day to Modified Julian day */ + double dj); /* Julian Day */ + double jd2ts( /* Julian Day to seconds since 1950.0 */ + double dj); /* Julian Day */ + time_t jd2tsu( /* Julian Day to Unix seconds since 1970-01-01T00:00 */ + double dj); /* Julian Day */ + int jd2tsi( /* Julian Day to IRAF seconds since 1980-01-01T00:00 */ + double dj); /* Julian Day */ + + /* Convert current local time to various formats */ + + void lt2dt( /* Current local time to date (yyyy.mmdd), time (hh.mmsss) */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + char *lt2fd(void); /* Current local time to FITS ISO date string */ + int lt2tsi(void); /* Current local time to IRAF seconds since 1980-01-01T00:00 */ + time_t lt2tsu(void); /* Current local time to Unix seconds since 1970-01-01T00:00 */ + double lt2ts(void); /* Current local time to IRAF seconds since 1950-01-01T00:00 */ + + /* Convert from Modified Julian Day (JD - 2400000.5) */ + + void mjd2doy( /* Modified Julian Day to year and day of year */ + double dj, /* Modified Julian Day */ + int *year, /* Year (returned) */ + double *doy); /* Day of year with fraction (returned) */ + void mjd2dt( /* Modified Julian Day to yyyy.mmdd hh.mmssss */ + double dj, /* Modified Julian Date */ + double *date, /* Date as yyyy.mmdd (returned)*/ + double *time); /* Time as hh.mmssxxxx (returned) */ + double mjd2ep( /* Modified Julian Day to fractional year */ + double dj); /* Modified Julian Date */ + double mjd2epb( /* Modified Julian Day to Besselian epoch */ + double dj); /* Modified Julian Date */ + double mjd2epj( /* Modified Julian Day to Julian epoch */ + double dj); /* Modified Julian Date */ + char *mjd2fd( /* Modified Julian Day to FITS date yyyy-mm-ddThh:mm:ss.ss */ + double dj); /* Modified Julian Date */ + void mjd2i( /* Modified Julian Day to year, month, day, hours, min, sec */ + double dj, /* Modified Julian Date */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + double mjd2jd( /* Modified Julian Day to Julian day */ + double dj); /* Modified Julian Date */ + double mjd2ts( /* Modified Julian Day to seconds since 1950.0 */ + double dj); /* Modified Julian Date */ + + /* Convert from seconds since 1950-01-01 0:00 (JPL Ephemeris time) */ + + void ts2dt( /* Seconds since 1950.0 to yyyy.mmdd hh.mmssss */ + double tsec, /* seconds since 1950.0 */ + double *date, /* Date as yyyy.mmdd (returned)*/ + double *time); /* Time as hh.mmssxxxx (returned) */ + double ts2ep( /* Seconds since 1950.0 to fractional year */ + double tsec); /* seconds since 1950.0 */ + double ts2epb( /* Seconds since 1950.0 to Besselian epoch */ + double tsec); /* seconds since 1950.0 */ + double ts2epj( /* Seconds since 1950.0 to Julian epoch */ + double tsec); /* seconds since 1950.0 */ + char *ts2fd( /* Seconds since 1950.0 to FITS date, yyyy-mm-ddT00:00:00.000 */ + double tsec); /* seconds since 1950.0 */ + void ts2i( /* Seconds since 1950.0 to year, month, day, hours, min, sec */ + double tsec, /* seconds since 1950.0 */ + int *iyr, /* year (returned) */ + int *imon, /* month (returned) */ + int *iday, /* day (returned) */ + int *ihr, /* hours (returned) */ + int *imn, /* minutes (returned) */ + double *sec, /* seconds (returned) */ + int ndsec); /* Number of decimal places in seconds (0=int) */ + double ts2jd( /* Seconds since 1950.0 to Julian Day */ + double tsec); /* seconds since 1950.0 */ + double ts2mjd( /* Seconds since 1950.0 to Modified Julian Day */ + double tsec); /* seconds since 1950.0 */ + + /* Convert from IRAF time (seconds since 1980-01-01 0:00 UT) */ + + char *tsi2fd( /* Seconds since 1980-01-01 to FITS standard date string */ + int isec); /* Seconds past 1980-01-01 */ + double tsi2ts( /* Seconds since 1980-01-01 to seconds since 1950-01-01 */ + int isec); /* Seconds past 1980-01-01 */ + void tsi2dt( /* Seconds since 1980-01-01 to date yyyy.mmdd, time hh.mmssss */ + int isec, /* Seconds past 1980-01-01 */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + + /* Convert from Unix time (seconds since 1970-01-01 0:00 UT) */ + + void tsu2dt( /* Seconds since 1970-01-01 to date yyyy.ddmm, time hh.mmsss */ + time_t isec, /* Seconds past 1970-01-01 */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + char *tsu2fd( /* Seconds since 1970-01-01 to FITS standard date string */ + time_t isec); /* Seconds past 1970-01-01 */ + double tsu2ts( /* Seconds since 1970-01-01 to seconds since 1950-01-01 */ + time_t isec); /* Seconds past 1970-01-01 */ + int tsu2tsi( /* Seconds since 1970-01-01 to local seconds since 1980-01-01 */ + time_t isec); /* Seconds past 1970-01-01 */ + + /* Convert times within a day */ + + char *tsd2fd( /* Seconds since start of day to FITS standard time string */ + double tsec); /* Seconds since start of day */ + double tsd2dt( /* Seconds since start of day to hh.mmsssss */ + double tsec); /* Seconds since start of day */ + + /* Convert from current Universal Time */ + + void ut2dt( /* Current Universal Time to date (yyyy.mmdd), time (hh.mmsss) */ + double *date, /* Date as yyyy.mmdd (returned) */ + double *time); /* Time as hh.mmssxxxx (returned) */ + void ut2doy( /* Current Universal Time to year, day of year */ + int *year, /* Year (returned) */ + double *doy); /* Day of year (returned) */ + double ut2ep(void); /* Current Universal Time to fractional year */ + double ut2epb(void); /* Current Universal Time to Besselian Epoch */ + double ut2epj(void); /* Current Universal Time to Julian Epoch */ + char *ut2fd(void); /* Current Universal Time to FITS ISO date string */ + double ut2jd(void); /* Current Universal Time to Julian Date */ + double ut2mjd(void); /* Current Universal Time to Modified Julian Date */ + int ut2tsi(void); /* Current UT to IRAF seconds since 1980-01-01T00:00 */ + time_t ut2tsu(void); /* Current UT to Unix seconds since 1970-01-01T00:00 */ + double ut2ts(void); /* Current UT to seconds since 1950-01-01T00:00 */ + + int isdate( /* Return 1 if string is FITS old or ISO date */ + char *string); /* Possible FITS date string, which may be: + * dd/mm/yy (FITS standard before 2000) + * dd-mm-yy (nonstandard FITS use before 2000) + * yyyy-mm-dd (FITS standard after 1999) + * yyyy-mm-ddThh:mm:ss.ss (FITS standard after 1999) */ + + /* Ephemeris time conversions (ET, TT, and TDT) */ + + char *et2fd( /* ET (or TDT or TT) in FITS format to UT in FITS format */ + char *string); /* Ephemeris Time as FITS date string (E not T) */ + char *fd2et( /* UT in FITS format to ET (or TDT or TT) in FITS format */ + char *string); /* FITS date string */ + void dt2et( /* yyyy.ddmm and hh.mmsss to Ephemeris Time */ + double *date, /* Date as yyyy.mmdd */ + double *time); /* Time as hh.mmssxxxx + *if time<0, it is time as -(fraction of a day) */ + double jd2jed( /* Convert from Julian Date to Julian Ephemeris Date */ + double dj); /* Julian Date */ + double jed2jd( /* Convert from Julian Ephemeris Date to Julian Date */ + double dj); /* Julian Ephemeris Date */ + double ets2ts( /* ET in seconds since 1950-01-01 to UT in same format */ + double tsec); /* ET in seconds since 1950-01-01 */ + double ts2ets( /* UT in seconds since 1950-01-01 to ET in same format */ + double tsec); /* UT in seconds since 1950-01-01 */ + void edt2dt( /* yyyy.ddmm and hh.mmsss Ephemeris Time to UT */ + double *date, /* Date as yyyy.mmdd */ + double *time); /* Time as hh.mmssxxxx + * If time<0, it is time as -(fraction of a day) */ + double utdt( /* Compute difference between UT and dynamical time (ET-UT) */ + double dj); /* Julian Date (UT) */ + + /* Sidereal Time conversions */ + + char *fd2gst( /* Convert from FITS UT date to Greenwich Sidereal Time */ + char *string); /* FITS date string */ + void dt2gst( /* Convert from UT as yyyy.mmdd hh.mmssss to Greenwich Sidereal Time */ + double *date, /* Date as yyyy.mmdd */ + double *time); /* Time as hh.mmssxxxx + * If time<0, it is time as -(fraction of a day) */ + double jd2gst( /* Calculate Greenwich Sidereal Time given Julian Date */ + double dj); /* Julian Date (UT) */ + double ts2gst( /* Calculate Greenwich Sidereal Time given Universal Time */ + double tsec); /* Time since 1950.0 in UT seconds */ + char *fd2lst( /* Convert from FITS UT date to Local Sidereal Time */ + char *string); /* FITS date string */ + void dt2lst( /* Convert from UT as yyyy.mmdd hh.mmssss to Local Sidereal Time */ + double *date, /* Date as yyyy.mmdd */ + double *time); /* Time as hh.mmssxxxx + * If time<0, it is time as -(fraction of a day) */ + double ts2lst( /* Calculate Local Sidereal Time given Universal Time */ + double tsec); /* Time since 1950.0 in UT seconds */ + double jd2lst( /* Calculate Local Sidereal Time given Julian Date */ + double dj); /* Julian Date (UT) */ + double eqeqnx( /* Compute equation of eqinoxes from Julian Date */ + double dj); /* Julian Date (UT) */ + char *fd2mst( /* Convert from FITS UT date to Mean Sidereal Time */ + char *string); /* FITS date string */ + double jd2mst( /* Convert from Julian Date to Mean Sidereal Time */ + double dj); /* Julian Date (UT) */ + double jd2mst2( /* Convert from Julian Date to Mean Sidereal Time */ + double dj); /* Julian Date (UT) */ + void dt2mst( /* Convert from UT as yyyy.mmdd hh.mmssss to Mean Sidereal Time */ + double *date, /* Date as yyyy.mmdd */ + double *time); /* Time as hh.mmssxxxx + * If time<0, it is time as -(fraction of a day) */ + double lst2dt( /* Calculate UT as hh.mmsss given UT date and + * Local Sidereal Time */ + double date0, /* UT date as yyyy.mmdd */ + double time0); /* LST as hh.mmssss */ + double lst2jd( /* Calculate UT as Julian Date given UT date and + * Local Sidereal Time */ + double sdj); /* Julian Date of desired day at 0:00 UT + sidereal time */ + char *lst2fd( /* Calculate FITS UT date and time given UT date and + * Local Sidereal Time */ + char *string); /* UT Date, LST as yyyy-mm-ddShh:mm:ss.ss */ + char *gst2fd( /* Calculate FITS UT date and time given Greenwich Sidereal Time */ + char *string); /* UT Date, GST as yyyy-mm-ddShh:mm:ss.ss */ + double gst2jd( /* Calculate FITS UT Julian Date given Greenwich Sidereal Time */ + double sdj); /* UT Date, GST as Julian Date */ + char *mst2fd( /* Calculate FITS UT date and time given Mean Sidereal Time */ + char *string); /* UT Date, MST as yyyy-mm-ddShh:mm:ss.ss */ + double mst2jd( /* Calculate FITS UT Julian Date given Mean Sidereal Time */ + double sdj); /* UT Date, MST as Julian Date */ + double ts2mst( /* Calculate Mean Sidereal Time given Universal Time */ + double tsec); /* time since 1950.0 in UT seconds */ + void setlongitude( /* Longitude for sidereal time in or out */ + double longitude); /* longitude of observatory in degrees (+=west) */ + void compnut( /* Compute nutation in longitude and obliquity and mean obliquity*/ + double dj, /* TDB (loosely ET or TT) as Julian Date */ + double *dpsi, /* Nutation in longitude in radians (returned) */ + double *deps, /* Nutation in obliquity in radians (returned) */ + double *eps0); /* Mean obliquity in radians (returned) */ + + /* Heliocentric Julian Date conversions */ + + double mjd2mhjd( /* Convert from Modified Julian Date to Heliocentric MJD */ + double mjd, /* Julian date (geocentric) */ + double ra, /* Right ascension (degrees) */ + double dec, /* Declination (degrees) */ + int sys); /* J2000, B1950, GALACTIC, ECLIPTIC */ + double mjd2hjd( /* Convert from Modified Julian Date to Heliocentric JD */ + double mjd, /* Julian date (geocentric) */ + double ra, /* Right ascension (degrees) */ + double dec, /* Declination (degrees) */ + int sys); /* J2000, B1950, GALACTIC, ECLIPTIC */ + double mhjd2mjd( /* Convert from Heliocentric Modified Julian Date to MJD */ + double mhjd, /* Modified Heliocentric Julian date */ + double ra, /* Right ascension (degrees) */ + double dec, /* Declination (degrees) */ + int sys); /* J2000, B1950, GALACTIC, ECLIPTIC */ + double jd2hjd( /* Convert from Julian Date to Heliocentric Julian Date */ + double dj, /* Julian date (geocentric) */ + double ra, /* Right ascension (degrees) */ + double dec, /* Declination (degrees) */ + int sys); /* J2000, B1950, GALACTIC, ECLIPTIC */ + double hjd2jd( /* Convert from Heliocentric Julian Date to Julian Date */ + double dj, /* Heliocentric Julian date */ + double ra, /* Right ascension (degrees) */ + double dec, /* Declination (degrees) */ + int sys); /* J2000, B1950, GALACTIC, ECLIPTIC */ + + void setdatedec( /* Set number of decimal places in FITS dates */ + int nd); /* Number of decimal places in FITS dates */ + +#else /* K&R prototypes */ + +/* FITS file access subroutines in fitsfile.c */ +extern int fitsropen(); +extern char *fitsrhead(); +extern char *fitsrtail(); +extern char *fitsrimage(); +extern char *fitsrfull(); +extern char *fitsrsect(); +extern int fitswhead(); +extern int fitswexhead(); +extern int fitswext(); +extern int fitswhdu(); +extern int fitswimage(); +extern int fitscimage(); +extern int isfits(); /* Return 1 if file is a FITS file */ +extern void fitserr(); /* Print FITS error message to stderr */ +extern void setfitsinherit(); /* Set flag to append primary data header */ +extern int fitsheadsize(); /* Return size of fitsheader in bytes */ + +/* FITS table file access subroutines in fitsfile.c */ +extern int fitsrtopen(); +extern int fitsrthead(); +extern void fitsrtlset(); +extern int fitsrtline(); +extern short ftgeti2(); +extern int ftgeti4(); +extern float ftgetr4(); +extern double ftgetr8(); +extern int ftgetc(); +extern void moveb(); /* Copy nbytes bytes from source+offs to dest+offd */ + +/* IRAF file access subroutines in imhfile.c */ +extern char *irafrhead(); +extern char *irafrimage(); +extern int irafwhead(); +extern int irafwimage(); +extern int isiraf(); +extern char *iraf2fits(); +extern char *fits2iraf(); + +/* Image pixel access subroutines in imio.c */ +extern double getpix(); /* Read one pixel from any data type 2-D array (0,0)*/ +extern double getpix1(); /* Read one pixel from any data type 2-D array (1,1)*/ +extern double maxvec(); /* Get maximum value in vector from a image */ +extern double minvec(); /* Get minimum value in vector from a image */ +extern void putpix(); /* Write one pixel to any data type 2-D array (0,0)*/ +extern void putpix1(); /* Write one pixel to any data type 2-D array (1,1) */ +extern void addpix(); /* Add to one pixel in any data type 2-D array (0,0)*/ +extern void addpix1(); /* Add to one pixel in any data type 2-D array (1,1)*/ +extern void movepix(); /* Move one pixel value between two 2-D arrays (0,0) */ +extern void movepix1(); /* Move one pixel value between two 2-D arrays (1,1) */ +extern void addvec(); /* Add constant to vector from 2-D array */ +extern void multvec(); /* Multiply vector from 2-D array by a constant */ +extern void getvec(); /* Read vector from 2-D array */ +extern void putvec(); /* Write vector into 2-D array */ +extern void fillvec(); /* Write constant into a vector */ +extern void fillvec1(); /* Write constant into a vector */ +extern void imswap(); /* Swap alternating bytes in a vector */ +extern void imswap2(); /* Swap bytes in a vector of 2-byte (short) integers */ +extern void imswap4(); /* Reverse bytes in a vector of 4-byte numbers */ +extern void imswap8(); /* Reverse bytes in a vector of 8-byte numbers */ +extern int imswapped(); /* Return 1 if machine byte order is not FITS order */ + +/* File utilities from fileutil.c */ +extern int getfilelines(); +extern char *getfilebuff(); +extern int getfilesize(); +extern int isimlist(); +extern int isimlistd(); +extern int isfilelist(); +extern int isfile(); +extern int istiff(); +extern int isjpeg(); +extern int isgif(); +extern int first_token(); + +/* Subroutines for access to tokens within a string from fileutil.c */ +int setoken(); /* Tokenize a string for easy decoding */ +int nextoken(); /* Get next token from tokenized string */ +int getoken(); /* Get specified token from tokenized string */ + +/* Subroutines for translating dates and times in dateutil.c */ + +void ang2hr(); /* Fractional degrees to hours as hh:mm:ss.ss */ +void ang2deg(); /* Fractional degrees to degrees as dd:mm:ss.ss */ +double deg2ang(); /* Degrees as dd:mm:ss.ss to fractional degrees */ +double hr2ang(); /* Hours as hh:mm:ss.ss to fractional degrees */ + +void doy2dt(); /* year and day of year to yyyy.mmdd hh.mmss */ +double doy2ep(); /* year and day of year to fractional year (epoch) */ +double doy2epb(); /* year and day of year to Besselian epoch */ +double doy2epj(); /* year and day of year to Julian epoch */ +char *doy2fd(); /* year and day of year to FITS date */ +double doy2jd(); /* year and day of year to Julian date */ +double doy2mjd(); /* year and day of year to modified Julian date */ +double doy2ts(); /* year and day of year to seconds since 1950.0 */ +int doy2tsi(); /* year and day of year to IRAF seconds since 1980-01-01 */ + +time_t doy2tsu(); /* year and day of year to Unix seconds since 1970-01-01 */ +void dt2doy(); /* yyyy.mmdd hh.mmss to year and day of year */ +double dt2ep(); /* yyyy.ddmm and hh.mmsss to fractional year (epoch) */ +double dt2epb(); /* yyyy.ddmm and hh.mmsss to Besselian epoch */ +double dt2epj(); /* yyyy.ddmm and hh.mmsss to Julian epoch */ +char *dt2fd(); /* yyyy.ddmm and hh.mmsss to FITS date string */ +void dt2i(); /* yyyy.ddmm and hh.mmsss to year, month, day, hrs, min, sec */ +double dt2jd(); /* yyyy.ddmm and hh.mmsss to Julian date */ +double dt2mjd(); /* yyyy.ddmm and hh.mmsss to modified Julian date */ +double dt2ts(); /* yyyy.ddmm and hh.mmsss to seconds since 1950.0 */ +int dt2tsi(); /* yyyy.ddmm and hh.mmsss to IRAF seconds since 1980-01-01 */ +time_t dt2tsu(); /* yyyy.ddmm and hh.mmsss to Unix seconds since 1970-01-01 */ + +void ep2dt(); /* Fractional year to yyyy.mmdd hh.mmssss */ +void epb2dt(); /* Besselian epoch to yyyy.mmdd hh.mmssss */ +void epj2dt(); /* Julian epoch to yyyy.mmdd hh.mmssss */ +char *ep2fd(); /* Fractional year to FITS date string yyyy-mm-ddThh:mm:ss.ss */ +char *epb2fd(); /* Besselian epoch to FITS date string yyyy-mm-ddThh:mm:ss.ss */ +char *epj2fd(); /* Julian epoch to FITS date string yyyy-mm-ddThh:mm:ss.ss */ +void ep2i(); /* Fractional year to year, month, day, hours, min., sec. */ +void epb2i(); /* Besselian epoch to year, month, day, hours, min., sec. */ +void epj2i(); /* Julian epoch to year, month, day, hours, min., sec. */ +double ep2jd(); /* Fractional year to Julian Date */ +double epb2jd(); /* Besselian epoch to Julian Date */ +double epj2jd(); /* Julian epoch to Julian Date */ +double ep2mjd(); /* Fractional year to modified Julian Date */ +double epb2mjd(); /* Besselian epoch to modified Julian Date */ +double epj2mjd(); /* Julian epoch to modified Julian Date */ +double ep2epb(); /* Fractional year to Besselian epoch */ +double ep2epj(); /* Fractional year to Julian epoch */ +double epb2epj(); /* Besselian epoch to Julian epoch */ +double epj2epb(); /* Julian epoch to Besselian epoch */ +double epb2ep(); /* Besselian epoch to fractional year */ +double epj2ep(); /* Julian epoch to fractional year */ +double ep2ts(); /* Fractional year to seconds since 1950.0 */ +double epb2ts(); /* Besselian epoch to seconds since 1950.0 */ +double epj2ts(); /* Julian epoch to seconds since 1950.0 */ + +void fd2dt(); /* FITS standard date string to Julian date */ +void fd2doy(); /* FITS standard date string to year, day of year */ +double fd2ep(); /* FITS standard date string to fractional year (epoch) */ +double fd2epb(); /* FITS standard date string to Besselian epoch */ +double fd2epj(); /* FITS standard date string to Julian epoch */ +char *fd2fd(); /* Any FITS standard date string to ISO FITS date string */ +char *fd2of(); /* Any FITS standard date string to old FITS date and time */ +char *fd2ofd(); /* Any FITS standard date string to old FITS date string */ +char *fd2oft(); /* Any FITS standard date string to old FITS time string */ +void fd2i(); /* FITS standard date string to year, mon, day, hrs, min, sec */ +double fd2jd(); /* FITS standard date string to Julian date */ +double fd2mjd(); /* FITS standard date string to modified Julian date */ +double fd2ts(); /* FITS standard date to seconds since 1950-01-01 */ +int fd2tsi(); /* FITS standard date to IRAF seconds since 1980-01-01 */ +time_t fd2tsu(); /* FITS standard date to Unix seconds since 1970-01-01 */ +void jd2doy(); /* Julian date to year and day of year */ +void jd2dt(); /* Julian date to yyyy.mmdd hh.mmssss */ +double jd2ep(); /* Julian date to fractional year */ +double jd2epb(); /* Julian date to Besselian epoch */ +double jd2epj(); /* Julian date to Julian epoch */ +char *jd2fd(); /* Julian date to FITS date string yyyy-mm-ddThh:mm:ss.ss */ +void jd2i(); /* Julian date to year, month, day, hours, min., sec. */ +double jd2mjd(); /* Julian date to modified Julian date */ +double jd2ts(); /* Julian date to seconds since 1950.0 */ +time_t jd2tsu(); /* Julian date to Unix seconds since 1970-01-01T00:00 */ +int jd2tsi(); /* Julian date to IRAF seconds since 1980-01-01T00:00 */ + +void lt2dt(); /* Current local time to date (yyyy.mmdd), time (hh.mmsss) */ +char *lt2fd(); /* Current local time to FITS ISO date string */ +int lt2tsi(); /* Current local time to IRAF seconds since 1980-01-01T00:00 */ +time_t lt2tsu(); /* Current local time to Unix seconds since 1970-01-01T00:00 */ +double lt2ts(); /* Current local time to IRAF seconds since 1950-01-01T00:00 */ + +void mjd2doy(); /* Convert from Modified Julian Date to Day of Year */ +void mjd2dt(); /* Modified Julian date to yyyy.mmdd hh.mmssss */ +double mjd2ep(); /* Modified Julian date to fractional year */ +double mjd2epb(); /* Modified Julian date to Besselian epoch */ +double mjd2epj(); /* Modified Julian date to Julian epoch */ +char *mjd2fd(); /* Modified Julian date to FITS date yyyy-mm-ddThh:mm:ss.ss */ +void mjd2i(); /* Modified Julian date to year, month, day, hours, min, sec */ +double mjd2jd(); /* Modified Julian date to Julian date */ +double mjd2ts(); /* Modified Julian date to seconds since 1950.0 */ + +void ts2dt(); /* Seconds since 1950.0 to yyyy.mmdd hh.mmssss */ +double ts2ep(); /* Seconds since 1950.0 to fractional year */ +double ts2epb(); /* Seconds since 1950.0 to Besselian epoch */ +double ts2epj(); /* Seconds since 1950.0 to Julian epoch */ +char *ts2fd(); /* Seconds since 1950.0 to FITS date, yyyy-mm-ddT00:00:00.000 */ +void ts2i(); /* Seconds since 1950.0 to year, month, day, hours, min, sec */ +double ts2jd(); /* Seconds since 1950.0 to Julian date */ +double ts2mjd(); /* Seconds since 1950.0 to modified Julian date */ +char *tsi2fd(); /* Seconds since 1980-01-01 to FITS standard date string */ +double tsi2ts(); /* Seconds since 1980-01-01 to seconds since 1950-01-01 */ +double tsi2ts(); /* Seconds since 1980-01-01 to seconds since 1950-01-01 */ +void tsi2dt(); /* Seconds since 1980-01-01 to date yyyy.mmdd, time hh.mmssss */ +void tsu2dt(); /* Seconds since 1970-01-01 to date yyyy.ddmm, time hh.mmsss */ +char *tsu2fd(); /* Seconds since 1970-01-01 to FITS standard date string */ +char *tsd2fd(); /* Seconds since start of day to FITS standard time string */ +double tsd2dt(); /* Seconds since start of day to hh.mmsssss */ +double tsu2ts(); /* Seconds since 1970-01-01 to seconds since 1950-01-01 */ +int tsu2tsi(); /* Seconds since 1970-01-01 to local seconds since 1980-01-01 */ +int isdate(); /* Return 1 if string is FITS old or ISO date */ +void ut2dt(); /* Current Universal Time to date (yyyy.mmdd), time (hh.mmsss) */ +void ut2doy(); /* Current Universal Time to year, day of year */ +double ut2ep(); /* Current Universal Time to fractional year */ +double ut2epb(); /* Current Universal Time to Besselian Epoch */ +double ut2epj(); /* Current Universal Time to Julian Epoch */ +char *ut2fd(); /* Current Universal Time to FITS ISO date string */ +double ut2jd(); /* Current Universal Time to Julian Date */ +double ut2mjd(); /* Current Universal Time to Modified Julian Date */ +int ut2tsi(); /* Current UT to IRAF seconds since 1980-01-01T00:00 */ +time_t ut2tsu(); /* Current UT to Unix seconds since 1970-01-01T00:00 */ +double ut2ts(); /* Current UT to IRAF seconds since 1950-01-01T00:00 */ +int sts2c(); /* Replaces spaces in a string with a specified character */ +int stc2s(); /* Replaces a specified character in a string with spaces */ +char *et2fd(); /* ET (or TDT or TT) in FITS format to UT in FITS format */ +char *fd2et(); /* UT in FITS format to ET (or TDT or TT) in FITS format */ +double jd2jed(); /* Convert from Julian Date to Julian Ephemeris Date */ +double jed2jd(); /* Convert from Julian Ephemeris Date to Julian Date */ +double ets2ts(); /* ET in seconds since 1950-01-01 to UT in same format */ +double ts2ets(); /* UT in seconds since 1950-01-01 to ET in same format */ +void dt2et(); /* yyyy.ddmm and hh.mmsss to Ephemeris Time */ +void edt2dt(); /* yyyy.ddmm and hh.mmsss Ephemeris Time to UT */ +double utdt(); /* Compute difference between UT and dynamical time (ET-UT) */ +char *fd2gst(); /* Convert from FITS UT date to Greenwich Sidereal Time */ +void dt2gst(); /* Convert from UT as yyyy.mmdd hh.mmssss to Greenwich Sidereal Time */ +double jd2gst(); /* Calculate Greenwich Sidereal Time given Julian Date */ +double ts2gst(); /* Calculate Greenwich Sidereal Time given Universal Time */ +char *fd2lst(); /* Convert from FITS UT date to Local Sidereal Time */ +void dt2lst(); /* Convert from UT as yyyy.mmdd hh.mmssss to Local Sidereal Time */ +double ts2lst(); /* Calculate Local Sidereal Time given Universal Time */ +double jd2lst(); /* Calculate Local Sidereal Time given Julian Date */ +double eqeqnx(); /* Compute equation of eqinoxes from Julian Date */ +char *fd2mst(); /* Convert from FITS UT date to Mean Sidereal Time */ +double jd2mst(); /* Convert from Julian Date to Mean Sidereal Time */ +double jd2mst2(); /* Convert from Julian Date to Mean Sidereal Time */ +void dt2mst(); /* Convert from UT as yyyy.mmdd hh.mmssss to Mean Sidereal Time */ +double lst2ts(); /* Calculate Universal Time given Local Sidereal Time */ +double lst2dt(); /* Calculate UT as yyyy.mmdd hh.mmsss given UT date and Local Sidereal Time */ +double lst2jd(); /* Calculate UT as Julian Date given UT date and Local Sidereal Time */ +char *lst2fd(); /* Calculate FITS UT date and time given UT date and Local Sidereal Time */ +char *gst2fd(); /* Calculate FITS UT date and time given Greenwich Sidereal Time */ +double gst2jd(); /* Calculate FITS UT Julian Date given Greenwich Sidereal Time */ +char *mst2fd(); /* Calculate FITS UT date and time given Mean Sidereal Time */ +double mst2jd(); /* Calculate FITS UT Julian Date given Mean Sidereal Time */ +char *fd2mst(); /* Convert from FITS UT date to Mean Sidereal Time */ +void dt2mst(); /* Convert from UT as yyyy.mmdd hh.mmssss to Mean Sidereal Time */ +double ts2mst(); /* Calculate Mean Sidereal Time given Universal Time */ +double mjd2mhjd(); /* Convert from Modified Julian Date to Heliocentric MJD */ +double mjd2hjd(); /* Convert from Modified Julian Date to Heliocentric JD */ +double mhjd2mjd(); /* Convert from Heliocentric Modified Julian Date to MJD */ +double jd2hjd(); /* Convert from Julian Date to Heliocentric Julian Date */ +double jd2mhjd(); /* Convert from Julian Date to Modified Heliocentric JD */ +double hjd2jd(); /* Convert from Heliocentric Julian Date to Julian Date */ +double hjd2mjd(); /* Convert from Heliocentric Julian Date to Modified JD */ +double hjd2mhjd(); /* Convert from Heliocentric Julian Date to Modified HJD */ +void setdatedec(); /* Set number of decimal places in FITS dates */ +void setlongitude(); /* Longitude for sidereal time in or out */ + +void compnut(); /* Compute nutation in longitude and obliquity and mean obliquity*/ + +#endif /* __STDC__ */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* fitsfile_h_ */ + +/* May 31 1996 Use stream I/O for reading as well as writing + * Jun 12 1996 Add byte-swapping subroutines + * Jul 10 1996 FITS header now allocated in subroutines + * Jul 17 1996 Add FITS table column extraction subroutines + * Aug 6 1996 Add MOVEPIX, HDEL and HCHANGE declarations + * + * Oct 10 1997 FITS file opening subroutines now return int instead of FILE * + * + * May 27 1998 Split off fitsio and imhio subroutines to fitsio.h + * Jun 4 1998 Change fits2iraf from int to int * + * Jul 24 1998 Make IRAF header char instead of int + * Aug 18 1998 Change name to fitsfile.h from fitsio.h + * Oct 5 1998 Add isiraf() and isfits() + * Oct 7 1998 Note separation of imhfile.c into two files + * + * Jul 15 1999 Add fileutil.c subroutines + * Sep 28 1999 Add (1,1)-based image access subroutines + * Oct 21 1999 Add fitswhead() + * Nov 2 1999 Add date utilities from wcscat.h + * Nov 23 1999 Add fitscimage() + * Dec 15 1999 Fix misdeclaration of *2fd() subroutines, add fd2i(), dt2i() + * Dec 20 1999 Add isdate() + * + * Jan 20 2000 Add conversions to and from Besselian and Julian epochs + * Jan 21 2000 Add conversions to old FITS date and time + * Jan 26 2000 Add conversion to modified Julian date (JD - 2400000.5 + * Mar 22 2000 Add lt2* and ut2* to get current time as local and UT + * Mar 24 2000 Add tsi2* and tsu2* to convert IRAF and Unix seconds + * Sep 8 2000 Improve comments + * + * Apr 24 2001 Add length of column name to column data structure + * May 22 2001 Add day of year date conversion subroutines + * Sep 25 2001 Add isfilelist() and isfile() + * + * Jan 8 2002 Add sts2c() and stc2s() + * Apr 8 2002 Change all long declarations to time_t for compatibility + * Jun 18 2002 Add fitserr() to print error messages + * Aug 30 2002 Add Ephemeris Time date conversions + * Sep 10 2002 Add Sidereal Time conversions + * Oct 21 2002 Add fitsrsect() to read sections of FITS images + * + * Mar 5 2003 Add isimlistd() to check image lists with root directory + * Aug 20 2003 Add fitsrfull() to read n-dimensional simple FITS images + * + * Feb 27 2004 Add fillvec() and fillvec1() + * May 3 2004 Add setfitsinherit() + * May 6 2004 Add fitswexhead() + * Aug 27 2004 Add fitsheadsize() + * + * Oct 14 2005 Add tsd2fd(), tsd2dt(), epj2ep(), epb2ep(), tsi2dt() + * + * Feb 23 2006 Add fitsrtail() to read appended FITS header + * Feb 23 2006 Add istiff(), isjpeg(), isgif() to check TIFF, JPEG, GIF files + * Sep 6 2006 Add heliocentric time conversions + * Oct 5 2006 Add local sidereal time conversions + * + * Jan 9 2007 Add ANSI prototypes + * Jan 11 2007 Add token subroutines from catutil.c/wcscat.h to fileutil.c + * Jun 11 2007 Add minvec() subroutine in imio.c + * Nov 28 2007 Add kform format to FITS table keyword data structure + * + * Sep 8 2008 Add ag2hr(), ang2deg(), deg2ang(), and hr2ang() + * + * Sep 25 2009 Add moveb() + */ |