AST Library
-----------
   A new release (V9.3.0) of the Starlink AST (astrometry) library is
now available.

   AST provides a comprehensive range of facilities for attaching
world coordinate systems (such as RA/Dec, frequency, etc.) to astronomical
data, for retrieving and interpreting that information and for generating
graphical output based on it.

   The library should be of interest to anyone writing astronomical
software which needs to manipulate coordinate system data, especially
celestial coordinate systems. AST is portable and
environment-independent.


Main Changes in this Version
----------------------------

- A new subclass of Mapping, a SplineMap, has been added, which
  represents a 2-in, 2-out Mapping defined by a pair of two-dimensional
  B-spline surfaces.


Main Changes in V9.2.14
-----------------------

- A bug that could cause astMapSplit to enter an infinite loop has been
  fixed.
- A memory leak in the Moc class has been fixed.
- A PolyMap that is equivalent to a simple shift of origin and/or a linear
  scaling on each axis is now simplified to a combination of equivalent
  simpler classes..
- If a PolyMap contains multiple coefficients that relate to the same
  input axis powers, they are now combined into a single coefficient.
- Zero-valued coefficients are now ignored by the PolyMap constructor,
  rather than being stored within the PolyMap.
- The FitsChan class can now create FITS headers containing SIP
  distortion keywords from a wider range of FrameSets. A PolyMap must
  still be present in the FrameSet but it is now allowed to deviate from
  the strict requirements of the SIP documentation in various ways (but
  only if it can be transformed into a PolyMap that does meet the
  requirements).


Main Changes in V9.2.13
-----------------------

- A bug has been fixed in the astRate method of the Mapping class, which
could cause numerical instability in the algorithm and thus return
incorrect values.


Main Changes in V9.2.12
-----------------------

- A new attribute called IgnoreBadAlt has been added to the FitsChan
class. If set, it allows unreadable alternate axis descriptions within FITS-WCS
headers to be ignored. By default, such headers would cause an error to
be reported.
- A new warning called BadAlt has been added to the FitsChan class. If
included in the list of active warnings (see attribute "Warnings"), a
warning will be created if any alternate axes are ignored when reading a
FITS-WCS header.
- The FitsChan class now supports 64 bit integer keyword values.
- The Table class now supports 64 bit integer columns.
- The FitsTable class now supports 64 bit integer columns.
- The MinOrder attribute of the Moc class can be higher than MaxOrder
to allow small features to be included in a lower-resolution MOC
when using astAddPixelMask or astAddRegion with a non-MOC region.
(It should no longer be set to a very large value to have MaxOrder
used instead in these methods.)
- When adding FITS data or string representation to a Moc object,
cells of greater order than the MaxOrder attribute will be degraded
to that resolution.
- Tracing the outline of a Moc region (via the surface mesh) has
hopefully been made more reliable with the addition of backtracking.
- Added a check for an acos parameter being out of range in internal
line length calculation in SkyFrame.
- Box simplification to Polygon in a SkyFrame checks handedness
without using astGetBounded.


Main Changes in V9.2.11
-----------------------

- A bug in the flagging of permanent memory blocks when AST is configured
--with-memdebug has been fixed.


Main Changes in V9.2.10
-----------------------

- A bug has been fixed in the astRebinSeq4 wrapper where lbnd and ubnd
had dimensions ndim_out rather than ndim_in.  Additionally the dimension
check error message was corrected to refer to input dimensions.  These
and other recent fixes to astRebinSeq were applied also to astRebin.

- Some memory allocations in PolyMap were corrected.


Main Changes in V9.2.9
----------------------

- Further changes were made to accommodate size_t string lengths in
gfortran V8.

- FitsChan private function RoundFString was updated to avoid copying
overlapping input and output strings.


Main Changes in V9.2.8
----------------------

- The Fortran interface has been changed to fix a bug caused by a change
in the way that gfortran passes character arguments. As of gfortran V8 the
length of each character argument passed to a subroutine is stored in a
size_t value rather than an int value. AST now tests the version of
gfortran at configure-time, and uses int or size_t within the Fortran
API as appropriate. Prior to this change int was always used, which could
cause undefined behaviour and segmentation faults when calling AST
routines under gfortran v8 and later.

- A bug has been fixed in astRebinSeq that could cause NaN values to
appear in the output array in cases where the overlap between two
input arrays is very small.  The fix corrects the way in which the mean
weight per input pixel is calculated. It may cause some general minor
changes to the decision about which output pixels pass the "wlim"
criterion.


Main Changes in V9.2.7
----------------------

- The FitsChan class has a new attribute called FitsRounding, which
controls rounding applied when floating point values are formatted as
FITS keyword values. Note, this changes the default rounding behaviour.
Previously, sequences of four or more 9's or 0's were always rounded.
Now, such sequences are only rounded if they extend beyond the tenth
significant digit (the default value for FitsRounding being 10). To
restore the original behaviour, set FitsRounding to 1.


Main Changes in V9.2.6
----------------------

- A bug has been fixed in the FitsChan class that caused an error to be
reported when reading a legal FITS WCS header that uses the "NCP"
projection code. The error message related to a missing alternate axis
description keyword.


Main Changes in V9.2.5
----------------------

- A new method called astNormPoints has been added to the Frame
class. This is similar to the existing astNorm method in that it can be
used to normalise axis values, but can be used on a vector of points rather
than just a single point. In addition, it has an option to choose a
normalisation that avoids discontinuities in the Frame's coordinate
system. The most common usage will be to modify vectors of sky position
in such a way as to avoid sudden jumps of 360 degrees in longitude within
groups of points that span the longitude origin.

- The mesh of points returned by astGetRegionMesh and astShowMesh are now
normalised to avoid discontinuities in celestial longitude. This uses the
new astNormPoints method described in the previous item.

- A bug has been fixed in the KeyMap class that caused astMapGet1<X>
functions to return a vector length of 1 for KeyMap entries with an
undefined value. A vector length of zero is now returned in such cases.

- The way in which the astRebinSeq<X> functions use the "wlim" argument
has been modified in order to improve the performance when the input
variances include aberrant ultra-low values. The change should result in
fewer output pixels being set bad in such cases. This change only affects
cases where the AST__GENVAR flag is not set.

- An option "--with-external-cminpack" had been added to the configure script.
It omits the internal cminpack routines from the built library, and instead
links with an external cminpack library.

Main Changes in V9.2.4
----------------------

- A bug has been fixed that could prevent the astWrite method of the
FitsChan class producing FITS-WCS headers describing alternate axes for
some of the Frames in the supplied FrameSet.  Consequently, the headers
produced by astWrite may now include alternate axis descriptions that
were not present previously. These can be supressed using the new AltAxes
attribute.
- The FitsChan class has a new attribute, AltAxes, which controls the
creation of FITS-WCS alternate axis descriptions by the astWrite method.
- The KeyMap class now supports 64 bit signed integer entries.
- Two simplification bugs introduced at V9.2.0 have been fixed.
- The YamlChan class now supports AST "native" encoding.


Main Changes in V9.2.0
----------------------

- A new subclass of Channel called YamlChan has been added. It allows AST
objects to be read and written using YAML. Currently, the ASDF format
developed by STSci (https://asdf-standard.readthedocs.io) is the only
supported encoding.


Main Changes in V9.1.3
----------------------

- The KeyMap class has a new method called astMapCopyEntry that can be used
to copy a single entry from one KeyMap to another.

- The astSimplify method now prefers ShiftMaps over equivalent WinMaps.

- The astSimplify method will now merge WinMaps with neighbouring
diagonal MatrixMaps.


Main Changes in V9.1.2
----------------------

- A bug in the way in which the FitsChan class reads FITS-WCS headers
that have more WCS axes than pixel axes has been fixed (i.e. axes for
which there is no CRPIX value). Previously, the missing pixel axes were
assigned a constant value 1.0. However, the default value for CRPIX
specified by FITS-WCS Paper I is 0.0, not 1.0. So now the missing pixel
axes are assigned the value 0.0.


Main Changes in V9.1.0
----------------------

- The AST source directory has been reorganised to put most of the AST
source files into a subdirectory named "src".

- A bug has been fixed in the TimeFrame class that caused the time
returned by astCurrentTime to be wrong by 37 seconds.

- The Region class has a new convenience method (astPointInRegion) to
test a if a single point is inside a Region.


Main Changes in V9.0.2
----------------------

- The AST sharable libraries now use a non-zero version number.

- The FitsChan class has a new attribute called ForceTab, which is used
in conjunction with the TabOK attribute to force the use of the
"-TAB" algorithm when writing a FrameSet out using the FITS-WCS encoding.


Main Changes in V9.0.0
----------------------

- Functions such as astResample and astMask that handle grids of data
values now have alternative interfaces that can handle grids that contain
more pixels than can be represented in a 4-byte integer. This is achieved
by using 8-byte integer arguments in place of 4-byte arguments. The names
of these "8-byte" interfaces are the same as the 4-byte interfaces but
have the digit "8" appended to the function name (before any trailing data
type code). These new interfaces are documented in an extra paragraph
entitled "Handling of Huge Pixel Arrays" attached to the reference
documentation for each such function.

Note, all C or C++ code that uses AST should be recompiled to pick up
changes made to the header file ast.h. This should be done even if you do
not intend to use the new 8-byte interfaces.


Main Changes in V8.7.2
----------------------

- By default, the AST header file "ast.h" is now installed into both
$STARLINK_DIR/include and $STARLINK_DIR/include/star. The new configure
option "--without-topinclude" can be used to prevent the header file
being installed into $STARLINK_DIR/include.


Main Changes in V8.7.1
----------------------

- The Moc class now supports version 1.1 of the MOC recommendation.
This includes new support for string and JSON encoded MOCs. See methods
astGetMocString and astAddMocString in the Moc class, and also the new
MocChan class.

- The FitsChan class will now read FITS-WCS headers that have
alternate axis descriptions but no primary axis descriptions.

Main Changes in V8.7.0
----------------------

-  A new subclass of Region called "Moc" has been added. A Moc
describes an arbitrary region of the sky in the form of a set of HEALPix
cells using the IVOA Multi-Order Coverage scheme..

-  The Region class has a new method called astGetRegionDisc, which
returns the centre and radius of a disc that just encloses a
2-dimensional Region.

- The Bounded attribute defined by the Region class is now always
non-zero for Regions defined within a SkyFrame, regardless of whether the
Region has been negated. Previously, it was non-zero only if the Region
had not been negated. Note, this change only affects Regions defined
within SkyFrames.

Main Changes in V8.6.3
----------------------

- Small memory leaks in Region  and FitsChan classes have been fixed.

-  A bug that could cause an internal buffer overrun within the FitsChan
class when writing out a FITS-WCS spectral axis with the "-LOG" algorithm
has been fixed.

- The test that a Mapping conforms to the requirements of the SIP FITS
distortion scheme has been improved.

- The astRebinSeq method of the Mapping class can now use a different
weight when pasting each separate input data array into the output mosaic.

Main Changes in V8.6.2
----------------------

- The astWrite method of the FitsChan class can now create FITS-WCS headers
that include keyords describing focal plane distortion using the
conventions of the Spitzer SIP scheme. This is however only possible if
the SipOK attribute of the FitsChan is set to a non-zero value (which is
the default), and the FrameSet being written out contains an appropriate
PolyMap that conforms to the requirements of the SIP convention.

- The behaviour of the astLinearApprox method of the Mapping class has
been changed in cases where the Mapping being approximated generates bad
(AST__BAD) values for one or more of its outputs. Previously, any such
Mapping would be deemed non-linear and no fit would be returned. Now, a
fit is returned, provided the other outputs of the Mapping are linear,
but the fit contains AST__BAD values for the coefficients describing the
bad Mapping output.

- The astRebinSeq<X> functions accepts a new flag, AST__PARWGT, which
allows the initial weight to be given for the data being pasted into the
output arrays (the initial weight to use should be include in the "params"
array). This initial weight defaults to 1.0 if the AST__PARWGT flag is not
given.

Main Changes in V8.6.1
----------------------

- A new function call astCreatedAt is now available that returns the function
name, file path and line number at which an AST object was first created.

- The number of digits used to format floating point values has been
increased in order to avoid loss of precision when converting from binary
to string and back to binary. This could cause very small changes in numerical
values returned by AST functions.

- If a FrameSet is supplied as the "Map" argument to astAddFrame, it now
extracts and stores the base->current Mapping from the supplied FrameSet.
Previously, the entire FrameSet was stored as the Mapping.


Main Changes in V8.5.1
----------------------

- A new class of Mapping called ChebyMap has been added. This is a
Mapping that implements Chebyshev polynomial transformations.

- If the function that delivers error messages to the user (astPutErr) is
re-implemented, the new version can now be registered at run-time using
the new astSetPutErr function. Previously, the new version needed to be
linked into the application at build time.

- A bug has been fixed in the PolyMap class that caused incorrect values
to be returned for the TranForward and TranInverse attributes if the PolyMap
has been inverted.

- The KeyMap class has a new method called astMapGetC (AST_MAPGETC) which
returns a named entry as a single string. If the entry is a vector the
returned string is a comma-separated list of its elements, enclosed in
parentheses.

- The Frame class now has a new attribute called DTAI, which can be used
to specify the number of leap seconds at the moment represented by the
Frame's Epoch attribute. By default, the internal look-up table of leap
seconds contained within AST is used. The DTAI attribute allows old
versions of AST, which may not include the most recent leap seconds, to
be used with new data.

- The TimeMap class has been changed so that some conversions now require
a "Dtai" value (i.e. the number of leap seconds) to be supplied by the
caller. If AST__BAD is supplied for "Dtai", the internal look-up table of
leap seconds contained within AST will be used. The conversions affected
are those between TAI and UTC, and those between TT and TDB.

Main Changes in V8.3.0
----------------------

- The PAL library files included in the AST distribution have been updated
to PAL version 0.9.7.

- Multiple identical NormMaps in series will now be simplified to a
single NormMap.

- A NormMap that encapsulates a basic Frame will now be simplified to a
UnitMap.

- The astTimeAdd (AST_TIMEADD) method of the TimeMap class now include an
extra argument that gives the number of values supplied in the arguments
array. Note, any existing code that uses this method will need to be
changed.

- The astSlaAdd (AST_SLAADD) method of the SlaMap class now include an
extra argument that gives the number of values supplied in the arguments
array. Note, any existing code that uses this method will need to be
changed.

- The astSpecAdd (AST_SPECADD) method of the SpecMap class now include an
extra argument that gives the number of values supplied in the arguments
array. Note, any existing code that uses this method will need to be
changed.

- If the astMapRegion (AST_MAPREGION) method is used to map a Region into
a new Frame that has fewer axes than the original Region, and if the
inverse transformation of the supplied Mapping does not specify a value
for the missing axes, then those axes are removed entirely from the
Region. Previously they were retained, but supplied with bad values. This
affects the number of mesh points per axes for such Regions, and so
affects the accuracy of overlap determination.


Main Changes in V8.3.0
----------------------

- A new method called astAxNorm has been added to the Frame class that
normalises an array of axis values. When used with SkyFrames, it allows
longitude values to be normalised into the shortest range.

- A bug has been fixed in the Fortran include file AST_PAR that caused constants
related to PI to be defined as single rather than double precision.

- A bug has been fixed in the astGetRegionBounds method that could
cause the wrong bounds to be returned for regions spanning a longitude =
zero singularity.

Main Changes in V8.2.0
----------------------

- A new class of Mapping called UnitNormMap has been added that converts a
vector to a unit vector relative to a specified centre, plus length. A
UnitNormMap has N inputs and N+1 outputs.The lower N output coordinates
represent a unit vector parallel to the supplied input vector, and the
(N+1)'th output coordinate is the length of the input vector.

- The restriction that Mappings are immutable has been extended to all
Mapping classes. This means that attributes representing parameters of
a Mapping's forward or inverse transformation cannot be changed after
the Mapping has been created. In order to minimise the risk to existing
software, this rule does not apply to Mappings that have not yet been
included in other objects such as CmpMaps or FrameSets, or which have not
yet been cloned. In other words, an error is reported if an attempt is
made to change the nature of a Mapping's transformation, but only if the
reference count of the Mapping is greater than one. The Mapping classes
affected include: GrismMap, LutMap, PcdMap, SphMap, WcsMap and ZoomMap.


Main Changes in V8.1.0
----------------------

- The configure script has a new option "--without-fortran" that allows
AST to be built in situations where no Fortran compiler is available. The
resulting library has no Fortran interface and so cannot be used within
Fortran applications. Also, the link scripts do not attempt to include the
fortran runtime libraries.

Main Changes in V8.0.7
----------------------

- A bug in FitsChan has been fixed which could cause a small shift in
  spectral axis value when writing out a spectral cube to FITS-WCS headers,
  This shift occurred only if the celestial axes in the cube were not FK5
  (RA,Dec).

- Avoid some more compiler warnings.

- A "BadKeyValue" warning is now issued by the FitsChan class if an illegal
FITS keyword value is encountered. See attribute "Warnings" and function
"astWarnings".

Main Changes in V8.0.6
----------------------

- Fix bug in FitsChan that caused SIP headers to be treated as linear
when creating a FrameSet from the headers.

- Fix bug in LutMap that incorrectly allowed an inverse lutmap to be used
even if the original LutMap was not monotonic.

- Allow attributes to be set for each plane of a Plot3D.

- Avoid some compiler warnings.

Main Changes in V8.0.5
----------------------

- The SkyFrame class has a new attribute called SkyTol, which specifies
the smallest significant distance within the SkyFrame. It is used to
decide if the Mapping between two SkyFrames can be considered a unit
transformation. The default value is 0.001 arc-seconds.

- A bug has been fixed in the FitsChan class that prevented illegal
characters within FITS keyword names (i.e. characters not allowed by the
FITS standard) being detected. This bug could under some circumstances
cause a subsequent segmentation violation to occur.

- A "BadKeyName" warning is now issued by the FitsChan class if a FITS
keyword name is encountered that contains any illegal characters. See
attribute "Warnings" and function "astWarnings".

Main Changes in V8.0.4
----------------------

- The behaviour of the astAddFrame method has been changed slightly.
Previously, astAddFrame modified the FrameSet by storing references to
the supplied Mapping and Frame objects within the FrameSet. This meant
that any subsequent changes to the current Frame of the modified FrameSet
also affected the supplied Frame object. Now, astAddFrame stores deep
copies of the Mapping and Frame objects (rather than references) within
the modified FrameSet. This means that subsequent changes to the modified
FrameSet will now have no effect on the supplied Frame.

- The choice of default tick-mark for time axes has been improved, to avoid
previous issues which could result in no suitable gap being found, or
inappropriate tick marks when using formatted dates.

- A new method called astRegionOutline has been added to the Plot class.
It draws the outline of a supplied AST Region.

- A bug has been fixed that could cause astSimplfy to enter an infinite loop.

- Some improvements have been made to the Mapping simplification process
that allow more Mappings to be simplified.

- The Frame class has a new read-only attribute called "InternalUnit",
which gives the units used for the unformatted (i.e. floating-point) axis
values used internally by application code. For most Frames, the
InternalUnit value is just the same as the Unit value (i.e. formatted and
unformatted axis values use the same units). However, the SkyFrame class
always returns "rad" for InternalUnit, regardless of the value of Unit,
indicating that floating-point SkyFrame axis values are always in units
of radians.

- The LutMap class has a new attribute called LutEpsilon, which specifies
the relative error of the values in the table. It is used to decide if
the LutMap can be simplified to a straight line.


Main Changes in V8.0.3
----------------------

- Methods astRebin, astRebinSeq, astResample and astTranGrid now report an
error if an array is specified that has more pixels than can be counted by
a 32 bit integer.

- The hypertext documentation is now generated using Tex4HT rather
than latex2html. The format of the hypertext docs has changed
significantly.

- Another bug fix associated with reading CAR projections from FITS-WCS headers.

- Constructor options strings of the form "..., "%s", text );" can now be
supplied. This avoids a security issue associated with the alternative
form "..., text );".


Main Changes in V8.0.2
----------------------

- For security reasons, the change introduced to astAppendString in
  V8.0.1 has been moved to a new function called astAppendStringf, and
  astAppendString itself has been reverted to its V8.0.0 version.


Main Changes in V8.0.1
----------------------

- The macro used to invoke the astAppendString utility function has
  changed to allow printf-style conversions to be included in the
  supplied text. Any code that uses this macro must be re-compiled.

- The astRebin and astRebinSeq family of functions now include support
  for arrays with char (byte) and unsigned char (unsigned byte) data types.

- The Base and Current attributes of a FrameSet may now be set using the
  Domain name or the index of the required Frame.

- The FITS XPH projection is now supported.

- The order of WCS axes within new FITS-WCS headers created by astWrite
  can now be controlled using a new attribute called FitsAxisOrder.

Main Changes in V8.0.0
----------------------

- AST is now distributed under the Lesser GPL licence.

- Least squares fitting of N-dimensional polynomials is now done using
files copied from the C/C++ Minpack package (see
http://devernay.free.fr/hacks/cminpack/index.html).

- Use of the IAU SOFA library has been replaced by ERFA library, which is
a re-badged copy of SOFA distributed under a less restrictive license. A
copy of ERFA is included within AST.

Main Changes in V7.3.4
----------------------

- By default, the simplification of Polygons no longer checks that the
edges are not bent by the simplification. A new attribute, SimpVertices,
can be set to zero in order to re-instate this check.

- The Polygon class has a new method, astConvex, that returns a Polygon
representing the shortest polygon (i.e. convex hull) enclosing a
specified set of pixel values within a supplied array.

Main Changes in V7.3.3
----------------------

- The FitsChan class has new attributes CardName and CardComm, which hold
the keyword name and comment of the current card.

- When reading FITS-WCS headers that include polynomial distortion in the
SIP format, any inverse transformation specified in the header is now
ignored and a new inverse is created to replace it based on the supplied
forward transformation. Previously, an inverse was created only if the
header did not include an inverse. The accuracy of the inverse
transformation has also been improved, although it may now be slower to
evaluate in some circumstances.

- A bug has been fixed that could over-write the FitsChan CarLin attribute
with a non-zero value if the header contains a spectral axis.

- The default options for each newly created FitsChan can now be
specified via the environment variable FITSCHAN_OPTIONS.

Main Changes in V7.3.2
----------------------

- Fix support for reading GLS projections from FITS headers.

- The KeyMap class has new sorting options "KeyAgeUp" and "KeyAgeDown" that
retain the position of an existing entry if its value is changed. See the
SortBy attribute.

- A bug has been fixed in FitsChan that caused CDELT keywords for sky
axes to be treated as radians rather than degrees when reading a FITS
header, if the corresponding CTYPE values included no projection code.


Main Changes in V7.3.1
----------------------

- Fix bug that could cause a segmentation fault when reading a FITS TNX
header.

Main Changes in V7.3.0
----------------------

- IMPORTANT! The interface for the astRebinSeq<X> (AST_REBINSEQ) family
of functions has been changed in order to allow a greater number of
pixels to be pasted into the output array. In C, the "nused" parameter
is now a pointer to a "int64_t" variable, instead of a simple "int". In
Fortran, the NUSED argument for AST_REBINSEQ<X> is now an INTEGER*8.

APPLICATION CODE SHOULD BE CHANGED ACCORDINGLY TO AVOID SEGMENTATION
FAULTS AND OTHER ERRATIC BEHAVIOUR.

- Added a new facility to the FrameSet class to allow each Frame to be
associated with multiple Mappings, any one of which can be used to
connect the Frame to the other Frames in the FrameSet. The choice of
which Mapping to use is controlled by the new "Variant" attribute of the
FrameSet class.

- Mappings (but not Frames) that have a value set for their Ident attribute
are now left unchanged by the astSimplify (AST_SIMPLIFY) function.

Main Changes in V7.2.0
----------------------

- A new method call astMapDefined has been added to the KeyMap class.
It checks if a given key name has a defined value in a given KeyMap.


Main Changes in V7.1.1
----------------------

- A bug has been fixed in FitsChan that caused inappropriate CTYPE values
to be generated when writing a FrameSet to FITS-WCS headers if the
current Frame describes generalised spherical coordinates (i.e. a
SkyFrame with System=Unknown).

- When a FitsChan is used to write an "offset" SkyFrame (see attribute
SkyRefIs) to a FITS-WCS encoded header, two alternate axis descriptions
are now created - one for the offset coordinates and one for the absolute
coordinates. If such a header is subsequently read back into AST, the
original offset SkyFrame is recreated.


Main Changes in V7.1.0
----------------------

- IMPORTANT! The default behaviour of astRebinSeq is now NOT to conserve
flux. To conserve flux, the AST__CONSERVEFLUX flag should be supplied
when calling astRebinSeq. Without this flag, each output value is a
weighted mean of the neighbouring input values.

- A new flag AST__NONORM can be used with astRebinSeq<X> to indicate that
normalisation of the output arrays is not required. In this case no
weights array need be supplied.

- A bug has been fixed in astAddFrame (AST_ADDFRAME) method that could
result in the incorrect inversion of Mappings within the FrameSet when
the AST__ALLFRAMES flag is supplied for the "iframe" parameter.

- The astRate method has been re-written to make it faster and more
reliable.

Main Changes in V7.0.6
----------------------

- A bug has been fixed in astRebinSeq<X> which could result in
incorrect normalisation of the final binned data and variance values.

- When reading a FrameSet from a FITS-DSS header, the keywords CNPIX1 and
CNPIX2 now default to zero if absent. Previously an error was reported.

Main Changes in V7.0.5
----------------------

- The FitsChan class can now read FITS headers that use the SAO
convention for representing distorted TAN projections, based on the use
of "COi_j" keywords to hold the coefficients of the distortion polynomial.


Main Changes in V7.0.4
----------------------

- The previously private grf3d.h header file is now installed into
prefix/include.


Main Changes in V7.0.3
----------------------

- A bug has been fixed which could cause an incorrect axis to be used when
accessing axis attributes within CmpFrames. This could happen if axes
within the CmpFrame have been permuted.

- A bug has been fixed in the SkyFrame class that could cause the two
values of the SkyRef and/or SkyRefP attributes to be reversed.

- Bugs have been fixed in the CmpRegion class that should allow the border
around a compound Region to be plotted more quickly, and more accurately.
Previously, component Regions nested deeply inside a CmpRegion may have
been completely or partially ignored.

- A bug has been fixed in the Plot3D class that caused a segmentation
violation if the MinTick attribute was set to zero.

- The astResampleX set of methods now includes astResampleK and
astResampleUK that handles 64 bit integer data.

Main Changes in V7.0.2
----------------------

- The libstarlink_ast_pal library is no longer built if the "--with-external_pal"
option is used when AST is configured.


Main Changes in V7.0.1
----------------------

- The levmar and wcslib code distributed within AST is now stored in the
main AST library (libstarlink_ast.so) rather than in separate libraries.


Main Changes in V7.0.0
----------------------

- Fundamental positional astronomy calculations are now performed
using the IAU SOFA library where possible, and the Starlink PAL library
otherwise (the PAL library contains a subset of the Fortran Starlink SLALIB
library re-written in C). Copies of these libraries are bundled with AST
and so do not need to be obtained or built separately, although external
copies of SOFA and PAL can be used if necessary by including the
"--with-external_pal" option when configuring AST.


Main Changes in V6.0-1
-----------------------

- The Spitzer "-SIP" distortion code is now recognised within FITS
headers that describe non-celestial axes, as well as celestial axes.

- A bug has been fixed that could cause inappropriate equinox values to
be used when aligning SkyFrames if the AlignSystem attribute is set.

- The format of the version string for AST has changed from
"<major>.<minor>-<release>" to "<major>.<minor>.<release>".

Main Changes in V6.0
-----------------------

- This version of AST is the first that can be used with the Python
AST wrapper module, starlink.Ast, available at http://github.com/timj/starlink-pyast.

- When reading a FITS-WCS header, the FitsChan class now recognises the
non-standard "TPV" projection code within a CTYPE keyword value. This
code is used by SCAMP (see www.astromatic.net/software/scamp) to
represent a distorted TAN projection.

- The Plot class has been changed to remove visual anomalies (such as
incorrectly rotated numerical axis labels) if the graphics coordinates have
unequal scales on the X and Y axes.

- The graphics escape sequences used to produce graphical sky axis labels
can now be changed using the new function astTuneC (AST_TUNEC).

Main Changes in V5.7-2
-----------------------

- The PolyMap class can now use an iterative Newton-Raphson method to
evaluate the inverse the inverse transformation if no inverse
transformation is defined when the PolyMap is created.

- The FitsChan class has a new method astWriteFits (AST_WRITEFITS)
which writes out all cards currently in the FitsChan to the associated
external data sink (specified either by the SinkFile attribute or the
sink function supplied when the FitsChan was created), and then empties
the FitsChan.

- The FitsChan class has a new method astReadFits (AST_READFITS)
which forces the FitsChan to reads cards from the associated external
source and appends them to the end of the FitsChan.

- The FitsChan class has a new read-only attribute called "Nkey", which
holds the number of keywords for which values are held in a FitsChan.

- The FitsChan class has a new read-only attribute called "CardType", which
holds the data type of the keyword value for the current card.

- The FitsChan astGetFits<X> (AST_GETFITS<X>) methods can now be used to
returned the value of the current card.

- If the FitsChan astRead method reads a FITS header that uses the
-SIP (Spitzer) distortion code within the CTYPE values, but which does
not provide an inverse polynomial correction, and for which the PolyTran
method of the PolyMap class fails to create an accurate estimate of the
inverse polynomial correction, then an iterative method will be used to
evaluate the inverse correction for each point transformed.

- The Object class has a new function astToString (C only), which creates
an in-memory textual serialisation of a given AST Object. A corresponding
new function called astFromString re-creates the Object from its
serialisation.


Main Changes in V5.7-1
-----------------------

- All classes of Channel can now read to and write from specified text
files, without the need to provide source and sink functions when the
Channel is created. The files to use are specified by the new attributes
SourceFile and SinkFile.

- The FitsChan class now ignores trailing spaces in character-valued WCS
keywords when reading a FrameSet from a FITS header.

- If the FitsChan astRead method reads a FITS header that uses the -SIP
(Spitzer) distortion code within the CTYPE values, but which does not
provide an inverse polynomial correction, the FitsChan class will now use
the PolyTran method of the PolyMap class to create an estimate of the
inverse polynomial correction.



Main Changes in V5.7-0
-----------------------

- The FitsChan class support for the IRAF-specific "TNX" projection has
been extended to include reading TNX headers that use a Chebyshev
representation for the distortion polynomial.

- The FitsChan class support for the IRAF-specific "ZPX" projection has
been extended to include reading ZPX headers that use simple or Chebyshev
representation for the distortion polynomial.

- A bug has been fixed in the FitsChan class that caused headers
including the Spitzer "-SIP" distortion code to be read incorrectly if no
inverse polynomial was specified in the header.

- A new attribute called PolyTan has been added to the FitsChan class. It
can be used to indicate that FITS headers that specify a TAN projection
should be interpreted according to the "distorted TAN" convention
included in an early draft of FITS-WCS paper II. Such headers are created
by (for instance) the SCAMP tool (http://www.astromatic.net/software/scamp).

- The PolyMap class now provides a method called astPolyTran (AST_POLYTRAN)
that adds an inverse transformation to a PolyMap by sampling the forward
transformation on a regular grid, and then fitting a polynomial function
from the resulting output values to the grid of input values.


Main Changes in V5.6-1
-----------------------

- Tables can now have any number of parameters describing the global
properties of the Table.

- Frames now interpret the unit string "A" as meaning "Ampere" rather
than "Angstrom", as specified by FITS-WCS paper I.

- A bug has been fixed in the astFindFrame (AST_FINDFRAME) method that
allowed a template Frame of a more specialised class to match a target
frame of a less specialised class. For example, this bug would allow a
template SkyFrame to match a target Frame. This no longer happens.


Main Changes in V5.6-0
-----------------------

- New functions astBBuf (AST_BBUF) and astEBuf (AST_EBUF) have been added
to the Plot class. These control the buffering of graphical output
produced by other Plot methods.

- New functions astGBBuf and astGEBuf have been added to the interface
defined by file grf.h. The ast_link command has been modified so that the
-grf_v3.2 switch loads dummy versions of the new grf functions. This
means that applications that use the -grf_v3.2 switch should continue to
build without any change. However, the new public functions astBBuf and
astEBuf described in the previous item will report an error unless the
new grf functions are implemented. If you choose to implement them, you
should modify your linking procedure to use the -grf (or -grf_v5.6)
switch in place of the older -grf_v3.2 switch. See the description of the
ast_link command for details of these switches.

- New method astGetRegionMesh (AST_GETREGIONMESH) returns a set of
positions covering the boundary, or volume, of a supplied Region.

Main Changes in V5.5-0
-----------------------

- The FitsChan "TabOK" attribute is now an integer value rather
than a boolean value. As in previous versions, it is used to indicate
whether the "-TAB" algorithm should be supported by the astRead
(AST_READ) and astWrite (AST_WRITE) methods, but in addition it is now
also used to give the version number to assign to any table generated as
a consequence of calling astWrite (AST_WRITE).  A negative or zero value
(the default) indicates that support for the -TAB algorithm is not
available, where as a positive non-zero value indicates that support is
available and also gives the table version number to use when creating
subsequent -TAB headers.


Main Changes in V5.4-0
-----------------------

- The FitsChan class now has an option to support reading and writing
of FITS-WCS headers that use the -TAB algorithm described in FITS-WCS paper
III. This option is controlled by a new FitsChan attribute called TabOK.
See the documentation for TabOK for more information.

- A new class called "Table" has been added. A Table is a KeyMap in
which each entry represents a cell in a two-dimensional table.

- A new class called "FitsTable" has been added. A FitsTable is a
Table that has an associated FitsChan holding headers appropriate to a
FITS binary table.

- KeyMaps can now hold byte (i.e. "unsigned char" or BYTE) values.

- A new method called astMapRename (AST_MAPRENAME) has been added to rename
an existing entry in a KeyMap.

- KeyMaps have a new attribute called KeyCase that can be set to zero to
make the handling of keys case insensitive.

Main Changes in V5.3-2
-----------------------

- A bug has been fixed in the FitsChan class that could cause wavelength
axes to be assigned the units "m/s" when reading WCS information from a
FITS header.

- The astSet function (AST_SET) now allows literal commas to be included in
string attribute values. String attribute values that include a literal
comma should be enclosed in quotation marks.

- A bug in FitsChan has been fixed that caused "-SIN" projection codes within
FITS-WCS headers to be mis-interpreted, resulting in no FrameSet being
read by astRead.

- The KeyMap class has a new attribute called "SortBy". It controls
the order in which keys are returned by the astMapKey (AST_MAPKEY) function.
Keys can be sorted alphabetically or by age, or left unsorted.

- Access to KeyMaps holding thousands of entries is now significantly
faster.

- KeyMaps can now hold word (i.e. "short int" or INTEGER*2) values.

Main Changes in V5.3-1
-----------------------

- The KeyMap class has a new method called astMapCopy/AST_MAPCOPY that
copies entries from one KeyMap to another KeyMap.

- The KeyMap class now supports entries that have undefined values. A
new method called astMapPutU/AST_MAPPUTU will store an entry with undefined
value in a keymap.

- The KeyMap class has a new boolean attribute called MapLocked. If true
(non-zero), an error is reported if an attempt is made to add any new entries
to a KeyMap (the value associated with any old entry may still be changed #
without error). The default is false (zero).

- The Object class has a new method called astHasAttribute/AST_HASATTRIBUTE
that returns a boolean value indicating if a specified Object has a named
attribute.

- The SkyFrame class has two new read-only boolean attributes called
IsLatAxis and IsLonAxis that can be used to determine the nature of a
specified SkyFrame axis.

- A bug has been fixed in the astRebin(Seq)/AST_REBIN(SEQ) methods
that could cause flux to be lost from the edges of the supplied array.

- A bug has been fixed in the astRebin(Seq)/AST_REBIN(SEQ) methods
that caused the first user supplied parameter to be interpreted as the
full width of the spreading kernel, rather than the half-width.

- The StcsChan class now ignores case when reading STC-S phrases (except
that units strings are still case sensitive).

- The Channel class now has an Indent attribute that controls indentation
in the text created by astWrite/AST_WRITE. The StcsIndent and XmlIndent
attributes have been removed.

- All classes of Channel now use the string "<bad>" to represent the
floating point value AST__BAD, rather than the literal formatted value
(typically "-1.79769313486232e+308" ).

- The KeyMap class now uses the string "<bad>" to represent the
floating point value AST__BAD, rather than the literal formatted value
(typically "-1.79769313486232e+308" ).

- The KeyMap class has a new method called astMapPutElem<X>/AST_MAPPUTELEM<X>
that allows a value to be put into a single element of a vector entry in
a KeyMap. The vector entry is extended automatically to hold the new
element if required.

- The DSBSpecFrame class now reports an error if the local oscillator
frequency is less than the absolute value of the intermediate frequency.

- A new method astQuadApprox produces a quadratic fit to a 2D Mapping.

- A new method astSkyOffsetMap produces a Mapping from absolute SkyFrame
coordinates to offset SkyFrame coordinates.


Main Changes in Version 5.3
---------------------------

- The details of how a Frame is aligned with another Frame by the
astFindFrame and astConvert (AST_FINDFRAME and AST_CONVERT) functions
have been changed. The changes mean that a Frame can now be aligned with
an instance of a sub-class of Frame, so long as the number of axes and
the Domain values are consistent. For instance, a basic 2-dimensional
Frame with Domain "SKY" will now align successfully with a SkyFrame,
conversion between the two Frames being achieved using a UnitMap.

- The arrays that supply input values to astMapPut1<X> are now declared
"const".

- Added method astMatchAxes (AST_MATCHAXES) to the Frame class. This
allows corresponding axes in two Frames to be identified.

- The astAddFrame (AST_ADDFRAME) method can now be used to append one or
more axes to all Frames in a FrameSet.


Main Changes in Version 5.1
---------------------------

- A new method called astSetFitsCM (AST_SETFITSCM) has been added to
the FitsChan class. It stores a pure comment card in a FitsChan (that
is, a card with no keyword name or equals sign).

- A new attribute called ObsAlt has been added to the Frame class. It
records the geodetic altitude of the observer, in metres. It defaults to
zero. It is used when converting times to or from the TDB timescale, or
converting spectral positions to or from the topocentric rest frame, or
converting sky positions to or from horizon coordinates. The FitsChan
class will include its effect when creating a set of values for the
OBSGEO-X/Y/Z keywords, and will also assign a value to it when reading a
set of OBSGEO-X/Y/Z keyword values from a FITS header.

- The TimeMap conversions "TTTOTDB" and "TDBTOTT", and the SpecMap
conversions "TPF2HL" and "HLF2TP", now have an additional argument -
the observer's geodetic altitude.

- The Polygon class has been modified to make it consistent with the
IVOA STC definition of a Polygon. Specifically, the inside of a polygon
is now the area to the left of each edge as the vertices are traversed in
an anti-clockwise manner, as seen from the inside of the celestial sphere.
Previously, AST used the anti-clockwise convention, but viewed from the
outside of the celestial sphere instead of the inside. Any Polygon saved
using previous versions of AST will be identified and negated automatically
when read by AST V5.2.

- A new class of Channel, called StcsChan, has been added that allows
conversion of suitable AST Objects to and from IVOA STC-S format.

- A new method called astDownsize (AST_DOWNSIZE) has been added to the
Polygon class. It produces a new Polygon that contains a subset of the
vertices in the supplied Polygon. The subset is chosen to retain the main
features of the supplied Polygion, in so far as that is possible, within
specified constraints.

- A new constructor called astOutline (AST_OUTLINE) has been added to the
Polygon class. Given a 2D data array, it identifies the boundary of a
region within the array that holds pixels with specified values. It then
creates a new Polygon to describe this boundary to a specified accuracy.

- A new method called astRemoveRegions (AST_REMOVEREGIONS) has been added
to the Mapping class. It removes the masking effects of any Regions found
within a (possibly compound) Mapping or Frame. In effect, it replaces
each Region found within the Mapping or Frame with a UnitMap or
equivalent Frame.

- A new set of methods, called astMapGetElem<X> (AST_MAPGETELEM<X>) has
been added to the KeyMap class. They allow a single element of a vector
valued entry to be returned.

- A new attribute called KeyError has been added to the KeyMap Class. It
controls whether the astMapGet... (AST_MAPGET...) family of functions report
an error if an entry with the requested key does not exist in the KeyMap.

Main Changes in Version 5.1
---------------------------

- The astUnlock function now has an extra parameter that controls whether
or not an error is reported if the Object is currently locked by another
thread.

- The values of the AST__THREADSAFE macro (defined in ast.h) have
been changed from "yes" and "no" to "1" and "0".

- The PointList class has a new method, astPoints, that copies the axis
values from the PointList into a supplied array.

- The PointList class has a new (read-only) attribute, ListSize, that
gives the number of points stored in the PointList.

- A new method (astIntersect) has been added to the Frame class. It
determines the position at which two geodesic curves intersect.

- The XmlStrict attribute and astXmlWarnings function have been removed.
The same functionality is now available via the existing Strict attribute,
a new attribute called ReportLevel, and a new function called astWarnings.

- A bug in the type-checking of Objects passed as arguments to constructor
functions has been fixed. This bug could lead to applications crashing or
showing strange behaviour if an inappropriate class of Object was
supplied as an argument to a constructor.

- The astPickAxes function will now return a Region, if possible, when
applied to a Region. If this is not possible, a Frame will be returned as
before.

- The default gap size between the ISO date/time labels used by the Plot
class when displaying an annotated axis described by a TimeFrame has been
changed. The changes are meant to improve the labelling of calendar time
axes that span intervals from a day to a few years.

Main Changes in Version 5.0
---------------------------

-  AST is now thread-safe. Many of the macro definitions in the "ast.h"
header file have changed, and so all source code that include "ast.h"
should be re-compiled.

-  The TimeFrame class now support Local Time as a time scale. The offset
from UTC to Local Time is specified by a new TimeFrame attribute called
LTOffset.

-  Addition of a new class called Plot3D that provides facilities for
producing 3-dimensional annotated coordinate grids.

-  A correction for diurnal aberration is now included when
converting between AZEL and other celestial coordinate systems. The
correction is based on the value of the ObsLat Frame attribute (the
geodetic latitude of the observer).

-  A bug has been fixed which caused the DUT1 attribute to be ignored
by the SkyFrame class when finding conversions between AZEL and other
celestial coordinate systems.

-  The Channel class has a new attribute called Strict which controls
whether or not to report an error if unexpected data items are found
within an AST Object description read from an external data source. Note,
the default behaviour is now not to report such errors. This differs from
previous versions of AST which always reported an error is unexpected
input items were encountered.



Main Changes in Version 4.5
---------------------------

- All FITS-CLASS headers are now created with a frequency axis. If the
FrameSet supplied to astWrite contains a velocity axis (or any other form
of spectral axis) it will be converted to an equivalent frequency axis
before being used to create the FITS-CLASS header.

- The value stored in the FITS-CLASS keyword "VELO-LSR" has been changed
from the velocity of the source to the velocity of the reference channel.

- Addition of a new method call astPurgeWCS (AST_PURGEWCS) to the FitsChan
class. This method removes all WCS-related header cards from a FitsChan.

- The astRebinSeq functions now have an extra parameter that is used to
record the total number of input data values added into the output
array. This is necessary to correct a flaw in the calculation of output
variances based on the spread of input values. NOTE, THIS CHANGE WILL
REQUIRE EXISTING CODE THAT USES ASTREBINSEQ TO BE MODIFIED TO INCLUDE THE
NEW PARAMETER (CALLED "NUSED").
- The Plot class now honours the value of the LabelUp attribute even if
numerical labels are placed around the edge of the Plot. Previously
LabelUp was only used if the labels were drawn within the interior of
the plot. The LabelUp attribute controls whether numerical labels are
drawn horizontally or parallel to the axis they describe.
- The Plot class has a new attribute called GrfContext that can be used
to communicate context information between an application and any
graphics functions registered with the Plot class via the astGrfSet
(AST_GRFSET) function.
- Functions registered with the Plot class using astGrfSet (AST_GRFSET)
now take a new additional integer parameter, "grfcon". The Plot class
sets this parameter to value of the Plot's GrfContext attribute before
calling the graphics function. NOTE, THIS CHANGE WILL REQUIRE EXISTING
CODE THAT USES astGrfSet (AST_GRFSET) TO BE MODIFIED TO INCLUDE THE
NEW PARAMETER.
-  Support has been added for the FITS-WCS "HPX" projection (HEALPix).
-  A new flag "AST__VARWGT" can be supplied to astRebinSeq. This causes
the input data values to be weighted using the reciprocals of the input
variances (if supplied).
- The Frame class has a new read-only attribute called NormUnit that
returns the normalised value of the Unit attribute for an axis. Here,
"normalisation" means cancelling redundant units, etc. So for instance, a
Unit value of "s*(m/s)" would result in a NormUnit value of "m".
- A new method astShowMesh has been added to the Region class. It
displays a mesh of points covering the surface of a Region by writing out
a table of axis values to standard output.
- A bug has been fixed that could segmentation violations when setting
attribute values.

Main Changes in Version 4.4
---------------------------

- The astFindFrame (AST_FINDFRAME) method can now be used to search a
CmpFrame for an instance of a more specialised class of Frame (SkyFrame,
TimeFrame, SpecFrame, DSBSpecFrame or FluxFrame). That is, if an instance
of one of these classes is used as the "template" when calling
astFindFrame, and the "target" being searched is a CmpFrame (or a
FrameSet in which the current Frame is a CmpFrame), then the component
Frames within the CmpFrame will be searched for an instance of the
supplied template Frame, and, if found, a suitable Mapping (which will
include a PermMap to select the required axes from the CmpFrame) will be
returned by astFindFrame. Note, for this to work, the MaxAxes and MinAxes
attributes of the template Frame must be set so that they cover a range
that includes the number of axes in the target CmpFrame.

- The DSBSpecFrame class has a new attribute called AlignSB that
specifies whether or not to take account of the SideBand attributes when
aligning two DSBSpecFrames using astConvert (AST_CONVERT).

- The Frame class has a new attribute called Dut1 that can be used to
store a value for the difference between the UT1 and UTC timescales at
the epoch referred to by the Frame.

- The number of digits used to format the Frame attributes ObsLat and
ObsLon has been increased.

- The use of the SkyFrame attribute AlignOffset has been changed. This
attribute is used to control how two SkyFrames are aligned by astConvert.
If the template and target SkyFrames both have a non-zero value for
AlignOffset, then alignment occurs within the offset coordinate systems
(that is, a UnitMap will always be used to align the two SkyFrames).

- The Plot class has a new attribute called ForceExterior that can be
used to force exterior (rather than interior) tick marks to be produced,
even if this would result in less than 3 tick marks being produced.

- The TimeFrame class now supports conversion between angle based
timescales such as UT1 and atomic based timescales such as UTC.


Main Changes in Version 4.3
---------------------------

- The SpecFrame class has a new attribute called SourceSys that specified
whether the SourceVel attribute (which specifies the rest frame of the
source) should be accessed as an apparent radial velocity or a redshift.
Note, any existing software that assumes that SourceVel always represents
a velocity in km/s should be changed to allow for the possibility of
SourceVel representing a redshift value.

-  The astGetFitsS (AST_GETFITSS) function now strips trailing white space
from the returned string, if the original string contains 8 or fewer
characters.


Main Changes in Version 4.2
---------------------------

- The SideBand attribute of the DSBSpecFrame class can now take the
option "LO" in addition to "USB" and "LSB". The new option causes the
DSBSpecFrame to represent the offset from the local oscillator frequency,
rather than either of the two sidebands.

- The FitsChan class has been changed so that it writes out a VELOSYS
keyword when creating a FITS-WCS encoding (VELOSYS indicates the
topocentric apparent velocity of the standard of rest). FitsChan also
strips out VELOSYS keywords when reading a FrameSet from a FITS-WCS
encoding.

- The FitsChan class has a new method called astRetainFits (AST_RETAINFITS)
that indicates that the current card in the FitsChan should not be
stripped out of the FitsChan when an AST Object is read from the FitsChan.
Unless this method is used, all cards that were involved in the creation
of the AST Object will be stripped from the FitsChan after a read operation.

- The ast_link_adam and ast_link scripts now ignore the -fsla and -csla
options, and always link against the minimal cut-down version of SLALIB
distributed as part of AST.

- A problem with unaligned memory access that could cause bus errors on
Solaris has been fixed.

- A new function called astTune (or AST_TUNE) has been added which can be
used to get and set global AST tuning parameters. At the moment there are
only two such parameter, both of which are concerned with memory management
within AST.

- A new method called astTranGrid (AST_TRANGRID in Fortran) has been
added to the Mapping class. This method creates a regular grid of points
covering a rectangular region within the input space of a Mapping, and
then transforms this set of points into the output space of the Mapping,
using a piecewise-continuous linear approximation to the Mapping if
appropriate in order to achieve higher speed.

- A new subclass of Mapping has been added called SwitchMap. A
SwitchMap represents several alternate Mappings, each of which is used to
transforms input positions within a different region of the input
coordinate space.

- A new subclass of Mapping has been added called SelectorMap. A
SelectorMap tests each input position to see if it falls within one of
several Regions. If it does, the index of the Region containing the
input position is returned as the Mapping output.

- The behaviour of the astConvert (AST_CONVERT) method when trying to
align a CmpFrame with another Frame has been modified. If no conversion
between positions in the Frame and CmpFrame can be found, an attempt is
now made to find a conversion between the Frame and one of two component
Frames contained within the CmpFrame. Thus is should now be possible to
align a SkyFrame with a CmpFrame containing a SkyFrame and a SpecFrame
(for instance). The returned Mapping produces bad values for the extra
axes (i.e. for the SpecFrame axis in the above example).

Main Changes in Version 4.1
---------------------------

- A new control flag has been added to the AST_RESAMPLE<X>/astResample<X>
functions which produces approximate flux conservation.

- The SkyFrame class now supports a System value of "AZEL" corresponding
to horizon (azimuth/elevation) coordinates.

- The FitsChan class allows the non-standard strings "AZ--" and "EL--" to
be used as axis types in FITS-WCS CTYPE keyword values.

- The Frame class now has attributes ObsLon and ObsLat to specify
the geodetic longitude and latitude of the observer.

- The ClockLon and ClockLat attributes have been removed from the
TimeFrame class. Likewise, the GeoLon and GeoLat attributes have been
removed from the SpecFrame class. Both classes now use the ObsLon and
ObsLat attributes of the parent Frame class instead. However, the old
attribute names can be used as synonyms for ObsLat and ObsLon. Also,
dumps created using the old scheme can be read succesfully by AST V4.1
and converted to the new form.

- A new function astMapSplit has been added to the Mapping class. This
splits a Mapping into two component Mappings which, when combined in
parallel, are equivalent to the original Mapping.

- The default value for the SkyRefIs attribute has been changed from
"Origin" to "Ignored". This means that if you want to use a SkyFrame
to represent offsets from some origin position, you must now set the
SkyRefIs attribute explicitly to either "Pole" or "Origin", in addition
to assigning the required origin position to the SkyRef attribute.


Main Changes in Version 4.0
---------------------------

- Experimental support for reading IVOA Space-Time-Coordinates (STC)
descriptions using the XmlChan class has been added. Support is included
for a subset of V1.20 of the draft STC specification.

- A new set of methods (AST_REBIN<X>/astRebin<X>) has been added to
the Mapping class. These are accurately flux-conserving alternatives to the
existing AST_RESAMPLE<X>/astResample<X> methods.


Main Changes in Version 3.7
---------------------------

- Support for time coordinate systems has been introduced through the
addition of two new classes, TimeFrame and TimeMap. The TimeFrame is a
1-dimensional Frame which can be used to describe moments in time (either
absolute or relative) in various systems (MJD, Julian Epoch, etc.) and
referred to various time scales (TAI, UTC, UT1, GMST, etc). The TimeMap
is a Mapping which can transform time values between these various
systems and time scales.


Main Changes in Version 3.6
---------------------------

- If the Format attribute associated with an axis of a SkyFrame starts
with a percent character (%), then axis values are now formatted and
unformatted as a decimal radians value, using the Format syntax of a
simple Frame.

- The Plot class has a new attribute called Clip which controls the
clipping performed by AST at the plot boundary.

- The PolyMap class has been modified to allow a PolyMap to be written
succesfully to a FitsChan using Native encoding.

- A minimal cut down subset of the C version of SLALIB is now included
with the AST distribution and built as part of building AST. This means
that it is no longer necessary to have SLALIB installed separately at
your site. The SLALIB code included with AST is distributed under the
GPL. The default behaviour of the ast_link script is now to link with
this internal slalib subset. However, the ``-csla'' option can still be
used to force linking with an external full C SLALIB library. A new
option ``-fsla'' has been introduced which forces linking with the
external full Fortran SLALIB library.


Main Changes in Version 3.5
---------------------------

- AST now provides facilities for representing regions of various
shapes within a coordinate system. The Region class provides general
facilities which are independent of the specific shape of region being
used. Various sub-classes of Region are also now available which provide
means of creating Regions of specific shape. Facilities provided by the
Region class include testing points to see if they are inside the
Region, testing two Regions for overlap, transforming Regions from one
coordinate system to another, etc.

- A new class of 1-dimensional Frame called FluxFrame has been added which
can be used to describe various systems for describing observed value at a
single fixed spectral position.

- A new class of 2-dimensional Frame called SpecFluxFrame has been added which
can be used to describe a 2-d frame spanned by a spectral position axis
and an observed value axis.

- A new class of Mapping called RateMap has been added. A RateMap encapsulates
a previously created Mapping. The inputs of the RateMap correspond to the
inputs of the encapsulated Mapping. All RateMaps have just a single
output which correspond to the rate of change of a specified output of
the encapsulated Mapping with respect to a specified input.

- The SkyFrame class now supports a value of "J2000" for System. This
system is an equatorial system based on the mean dynamical equator and
equinox at J2000, and differs slightly from an FK5(J2000) system.

- Methods have been added to the FitsChan class to allow values for named
keywords to be changed or added.

- The parameter list for the astRate method of the Mapping class has been
modified. It no longer returns a second derivative estimate. Existing
code which uses the astRate (AST_RATE) method will need to be changed.
