Home | Back
AST Library
-----------
   A new release (V7.3.4) 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
----------------------------

- 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 mathod, 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 segmenatation 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 gtiven 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 libast_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 (libast.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 gebnerated 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 absoliute 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 succesfully 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 val;ues 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 comminicate 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 afte 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 achive 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 throught 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 mimimal 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 distrubuted 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 ovserved 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 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.