[fitsbits] WCSLIB 3.5
Mark Calabretta
Mark.Calabretta at atnf.CSIRO.AU
Mon Jun 28 03:16:00 EDT 2004
Greetings,
WCSLIB 3.5 is now available from http://www.atnf.csiro.au/~mcalabre.
Although the change notes (appended) are fairly lengthy, the main
developments are that of a new FITS WCS parser for image headers, and
the extension of the wcsprm struct to include all WCS keywords defined
in Papers I, II, & III. A FORTRAN wrapper is provided for the parser.
The parser accepts a complete FITS header in a character array as may
conveniently be extracted by fits_hdr2str() in the latest release of
CFITSIO. However, note that in CFITSIO 2.490, line 2541 of getkey.c
must be changed from
realloc(header, (*nkeys *80) + 1);
to
realloc(*header, (*nkeys *80) + 1);
This will be fixed in the next release.
A version of the parser that understands BINTABLE WCS keywords will be
produced in future.
Mark Calabretta
ATNF
>>>
WCSLIB version 3.5 (2004/06/28)
-------------------------------
* WCSLIB now provides a function, wcspih() implemented as a Flex description,
that parses a FITS image header, either that of a primary HDU or an image
extension. Given a character array containing the header it identifies and
reads all WCS cards for the primary coordinate description and up to 26
alternate descriptions and returns this information as an array of wcsprm
structs. A service routine, wcsvfree(), is provided to free the memory
allocated by wcspih(). The relevant header file for these functions is
wcshdr.h.
Test programs, tpih1 and tpih2, are provided to verify wcspih. The first
simply prints the contents of the structs using wcsprt(). The second uses
cpgsbox() to draw coordinate graticules. A FITS WCS test header has been
developed to provide input to these test programs. It is implemented as a
list of card images, wcs.cards, one card per line, together with a program,
tofits, that compiles these into a valid FITS file. tpih1 uses its own code
to read this, whereas tpih2 uses the fits_hdr2str() function from CFITSIO.
* Removed twcsprt, tpih exercises wcsprt() much more thoroughly than twcsprt
ever did. Modified twcs1 to print the size of the various structs as
twcsprt used to.
* Although they are not used in any coordinate calculations, the wcsprm struct
now provides data members for storing all of the auxiliary FITS WCS header
cards defined in Papers I, II, and III, such as WCSNAMEa, EQUINOXa, and
CNAMEia. Members are also provided for storing the alternate descriptor
code (the "a" in CTYPEia), and the binary table column number. These are
supported by the high level WCSLIB routines, wcsini(), wcscopy(), wcsfree(),
and wcsprt(). Refer to wcs.h for details.
* The number of PVi_ma cards for which wcsini() allocates memory is now set by
a global variable, NPVMAX (previously a C-preprocessor macro). This
defaults to 64 but may be changed by a new function, wcsnpv(). The wcsprm
struct contains a new member, npvmax, that records the value of this number
at the time the struct was initialized. This is in addition to npv which
records the actual number of cards that were encountered.
Similarly, NPSMAX (default 8) is used for the number of PSi_ma cards, and it
may be changed via wcsnps().
The axis number, i, in the pvcard struct used for storing PVi_ma cards may
now be set to 0 to indicate the latitude axis.
* calloc() is now used in place of malloc() in allocating memory for arrays,
and inclusion of malloc.h has been replaced with stdlib.h for all platforms.
wcsfree() checks that wcs.flag != -1 before testing wcs.m_flag when freeing
memory allocated by wcsini() in case the struct is uninitialized. Similarly
for linfree().
* In prj.h, renamed C-preprocessor macros INI, PRT, SET, X2S and S2X to
PRJINI, PRJPRT, PRJSET, PRJX2S and PRJS2X to reduce the likelihood of
namespace clashes. Similarly in spc.h.
Also, in prj.c, changed the name of helper routine offset() to prjoff() to
reduce the likelihood of global namespace conflicts.
* In line with bonx2s() and bons2x(), bonset() now recognizes the equatorial
case of Bonne's projection as Sanson-Flamsteed, mainly so that the auxiliary
information in the prjprm struct more accurately reflects the truth.
Modified tcel2 to exercise this by using an equatorial Bonne projection in
place of the Hammer-Aitov.
* zpns2x() used prj.w[0] for bounds checking, though this had not been set
by zpnset() for polynomials of degree N < 3. Consequently, bounds checking
for N < 3 was unreliable (reported by David Berry, STARLINK).
* Changed some variable names in tscs2x(), cscx2s(), cscs2x(), qscx2s(), and
qscs2x() to match Paper II, and likewise changed some inequality tests in
qscs2x() without changing the results.
* Minor tidying up of output formatting in prjprt().
* Added the alternate version code to FITS WCS keywords mentioned in comments,
e.g. CTYPEi changed to CTYPEia.
More information about the fitsbits
mailing list