Next Previous Up Contents
Up: Release Notes
Previous: Acknowledgements

## C.2 Version History

Releases to date have been as follows:

Version 0.3b (4 June 2003)
  First public release
Version 0.4b (8 July 2003)
  - Row subset count column in subsets window.
  - Fixed and improved broken Parameter window.
  - Fixed output of table name and parameters.
  - Output to LaTeX `tabular` environment now available.
  - SQL access buttons now greyed out when no JDBC drivers are present.
  - UCD selection now available from New Synthetic Column dialogue.
  - Column metadata display made more logical and flexible.
  - Column cardinality now calculated in Stats window.
  - Sythetic column expressions and most other column metadata now editable.
  - Null value support in evaluated expressions.
  - Integral example data provided.
  - Hierarchical browser for tables available in load dialogue.
Version 0.4-1b (10 July 2003)
  - Fixed a VOTable output bug (not escaping XML special characters).
  - Fixed a serious FITS output bug.
  - Improved bad value handling for FITS tables.
Version 0.5b (20 October 2003)
  - Can now read plain text format tables.
  - FITS files of arbitrary size can now be read (they are not loaded into memory).
  - TOPCAT can now run without errors in a secure environment (e.g. as an unsigned jar file under WebStart). Of course some actions such as Save Table are unavailable in this context.
  - Files compressed with Unix `compress` now work (as well as gzip and bzip2).
  - Added hierarchy browser to load dialog.
  - Added integral demo data (accessible from load dialog).
  - Can now drag tables from Treeview into TOPCAT load dialog (or load button).
  - Some bugfixes.
Version 0.5-1 (18 November 2003)
  - Rewrite of FITS binary table access for big efficiency improvements.
  - It's now possible to plug in user-defined algebraic methods at runtime.
  - Improved unit testing leads to some bugfixes.
Version 1.1-0 (21 April 2004)
  - User interface redesigned - now based around Control Window not table browser (much easier to work with multiple tables).
  - Extensive facilities for table joining by matching rows between multiple tables or within a single one.
  - Documentation much improved and available on- or off-line as SUN/253.
  - Self-contained table access library STIL now provided as a separate product.
  - Tables can be concatenated.
  - Better top-level control over window proliferation.
  - Columns can now be hidden/revealed not just deleted.
  - Additional output formats/variants supported:
    - VOTable using BINARY or FITS encoding, inline or by reference
    - Machine-readable plain ASCII stream
    - HTML <TABLE> element or document
  - Hybrid DOM/SAX parsing of VOTables for improved efficiency/memory usage.
  - New flag `-demo` starts up with demo data.
  - Miscellaneous efficiency improvements and bug fixes.
Version 1.1-3 (5 May 2004)
  - Functions provided for radians<->sexagesimal conversion
Version 1.3 (20 October 2004)
  This version has introduced many improvements in scalability, efficiency and functionality. TOPCAT is now quite happy with tables of a million rows or more (and hundreds of columns) even on systems with quite modest memory/CPU resources. The main improvements are as follows:
  Plotting
    - Plotting is much faster and can handle many more points
    - Subsets can be selected from plot window by tracing out a non-rectangular region
    - You have more choice over plotting symbols (including semi-transparent ones)
    - Finally X or Y axes can be flipped!
    - Export to encapsulated PostScript is of improved quality (though for many points file sizes can get large)
    - Export to GIF format is available
    - Regression lines can be plotted and coefficients displayed (experimental capability - could be improved)
  Table Formats
    - "`-disk`" flag allows use of disk backing storage for large tables
    - New 'FITS-plus' format stores rich table/column metadata in a FITS file
    - VOTable handler now fully VOTable 1.1 and 1.0 compatible
    - VOTable parsing now works with Java 5.0 platform
    - Comma-Separated Value format now supported for input and output
    - ASCII input handler rewritten to cope with much larger tables
    - ASCII handler now understands d/D as exponent letter as well as e/E
    - ASCII handler now uses Short/Float not Integer/Double where appropriate to save memory
    - ASCII format fixed bug for -0 degrees/hours in sexagesimal angles
    - Null handling improved for FITS & VOTable formats
    - FITS files store column descriptions in TCOMMx headers
    - Better error messages for unparsable tables
  Table Joins
    - Various efficiency improvements and reductions in memory requirements
    - In cases of multiple possible matches, the closest is now chosen rather than picking one at random
    - Pair match now adds column containing score for each match (distance between points)
    - Units can be selected RA/Dec columns and match errors (so it doesn't need to be all in radians)
    - New match types suitable for multivariate matching (anistropic Cartesian, Sky+X, Sky+XY)
  Data/Metadata Manipulation
    - Can add/remove table parameters
    - One-step column replacement dialogue from data or column windows
    - Synthetic column expressions now written out to column descriptions
  GUI Navigation and Display
    - Improved rendering of numbers in tables (esp. Floats)
    - Better detection of displayed table column widths
    - New Control Window option on File menus
    - Better window resizing for some dialogue boxes
    - Less confusing error messages in many places
  Algebraic Expressions
    - All available functions are now fully documented in help document and interactive Method Window
    - Many new trig, coordinate, type conversion, string manipulation functions
    - Big performance improvements for null values
  Activation Actions
    - Clicking a point in the plot highlights the corresponding row in the data window and vice versa
    - Row selection can trigger display sky cutout region display
    - Row selection can trigger user-defined actions on activation

  In addition, the following incompatibilities and changes have been introduced since the last version:

  - The input format for tables can now be specified in the load window (via a selection box) or on the command line (using the "`-f`" flag). FITS files and VOTables can still be identified automatically (i.e. it's not necessary to specify format in this case) but ASCII tables cannot: you must now specify the format when loading ASCII tables. This change allows better error messages and support for more text-like formats.
  - Algebraic expressions referencing row subsets now use the underscore character ("_") rather than the hash character ("#") to indicate a subset ID.
  - Classes containing user-supplied functions for algebraic expressions are now specified using the properties "`jel.classes`" and "`jel.classes.activation`", not "`gnu.jel.static.classes`".
  - The default output format for FITS tables is now the so-called "FITS-plus" format, which has a BINTABLE in its first extension as before, but the text of a VOTable stored in its primary HDU. This can store more metadata for TOPCAT, but should behave just the same for other FITS-compatible applications. The old behaviour can be restored if desired by specifying "FITS-basic" format.
Version 1.3-1 (10 November 2004)
  Minor changes:
  - 2MASS cutout servers now available from Activation Window
  - Added Starlink logo to all windows
Version 1.3-2 (6 Dec 2004)
  Bug fix:
  - Error in parsing empty VOTable TD elements fixed.
Version 1.4 (4 Feb 2005)
  Load Dialogues
    The graphical table load dialogue has been overhauled, and now has two main new features. First, it has been rewritten so that the GUI does not freeze during a long load; it is still currently not possible to interact with other TOPCAT windows while a load is taking place, but you can now cancel a load that is in progress.

    Secondly, the provision of load dialogues has been modularised, and a number of new dialogues provided. The new ones are:

    - Cone Search
    - MySpace Browser
    - Registry Query
    - SIAP Query
    If the required classes are present, you can acquire tables from these external sources as well as the traditional methods of loading from disk etc. New command line flags corresponding to each of these have been added to ensure that they are present and make them prominent in the load dialogue. Furthermore it is possible to plug in additional load dialogues at runtime using the `startable.load.dialogs` system property.

    The appearance of the Load Window has changed; now only the File Browser button is visible along with the Location field in the body of the window, but the DataSources menu can be used to display other available table import dialogues.

  Packaging
    The program can now be obtained in two standalone forms: `topcat-full.jar` and `topcat-lite.jar`. The former is much larger than before (11 Mbyte), since it contains a number of classes to support custom load dialogues such as the MySpace browser and web service interaction, as well as the SoG classes. The latter contains only the classes for the core functionality, and is much smaller (3 Mbyte).
  Explode Array Column action
    There is now a new button in the Columns Window which replaces an array-valued column with a scalar column for each of its elements.
  Paste'n'Load
    You can now load a table by pasting its filename or URL as text into the table list in the Control Window (using the X selection on X-windows - not sure if or how this works on other platforms).
  Help message
    The result of `topcat -help` is now more comprehensive, describing briefly what each option does and listing system properties as well as arguments/flags proper.
Version 1.4-1 (8 February 2005)
  - Added Search Column item to Data Window column popup menu
Version 1.5 (17 March 2005)
  File Access
    Load dialogues have changed again somewhat, and save dialogues as well. The default file browser in both cases is now a Filestore Browser, which is very much like the standard file browser, but can browse files in remote filesystems as well; currently supported are files in AstroGrid's MySpace or on an SRB (Storage Resource Broker) server. You can now save files to these remote locations as well as load from them.

    In addition, the save dialogue now displays the current row subset and sort order - this makes it easier to see and/or change the details of the table you're about to save.

  BugFixes
    A few more minor changes have been made.
    - Error display dialogue boxes have been improved in some places
    - Various bugs relating to JDBC database access have been fixed
    - Some minor issues relating to VOTables with single-character columns have been addressed
Version 1.6 (30 June 2005)
  Activation Actions
    Some more activation functionality has been added:
    - New View URL as Web Page option introduced in Activation Window
    - New System class of activation functions containing `exec` functions which execute commands on the local operating system
    - New Browsers class of activation functions for displaying URLs in web browsers (external or basic fallback one)
  Algebraic Functions
    New Times class added containing functions for converting between Modified Julian Day and ISO 8601 format epochs.
  Sky Matching
    The default sky matching algorithm now uses HEALPix rather than HTM for assigning sky pixels to RA,Dec positions. This gives much faster sky matches in most cases, and uses somewhat less memory so can be used on larger tables. It has also fixed a bug which missed out some possible matches. HTM-based matching is currently still provided as an option, but this is mainly for debugging purposes and may be withdrawn in the future.
  Logging
    The message logging has been tidied up. The main observable consequence of this is that fewer untidy messages are written to the console when TOPCAT is run from a standalone jar file rather than a full starjava installation. By specifying the new `-verbose` (or `-v`) flag one or more times you can get those messages back. The messages (in fact all logging messages at any level) can also be viewed from the GUI by using the new File|Show Log menu option from the Control Window.
  SOAP Services
    TOPCAT now acts as a SOAP server; SOAP requests can now be made to a running instance of TOPCAT to get it to display tables by location or by sending XML for a VOTable direct. Because of limitations in Axis, this latter method won't work for arbitrarily large tables.
  Documentation changes
    The `tablecopy` tool is no longer covered in this document; it is replaced by the `tcopy` tool in the separate STILTS package. There has also been some reorganisation of this document, mainly in the appendices.
  Minor changes
    - Added `-version` flag
    - Added (dummy) Print option to Data Window. This just presents a message to the effect that you should save to a printable format.
    - Fixed a bug which gave errors when expressions contained a `NULL_` test on the first column of a table.
    - Modified one of the demo tables to contain a column with URLs in it.
Version 1.6-1 (7 July 2005)
  Bugfixes:
  - Work around AstroGrid/Sun bug which prevented loading short VOTables from MySpace.
  - Ensure that filestore browsers are kept up to date when dialogues are displayed.
Version 1.7 (30 September 2005)
  Crossmatching
    There have been major improvements in the flexibility, and minor improvements to performance, of two-table crossmatching.
    - New match algorithm Sky with Errors introduced. This allows you to specify a column giving the maximum permissible match error (so it can vary per row) rather than a fixed value for the whole table.
    - In the case of multiple possible matches between the two tables, instead of automatically giving you only the closest match, you can now select whether you'd like only the closest one or all those which fit your criteria.
    - You can now specify which rows you want to see in the output: 1 and 2, 1 or 2, All from 1, All from 2, 1 not 2, 2 not 1, 1 xor 2. This is pretty much all the possibilities which make sense, and in particular allows you to do 'left outer joins' (1 not 2).
    - The match score column which results from most matches now comes (a) in sensible units where possible (e.g. arcseconds not radians) and (b) with metadata which tells you what its meaning and units are.
    - More information is available in added columns after the match; as well as the match score, information about matched groups is inserted where appropriate.
    - The "Spherical Polar" match algorithm is now rebadged as the hopefully less confusing "Sky 3d".
    Similar changes for 1-table and multi-table matches should follow in future versions.
  MySpace Access
    MySpace I/O has been re-implemented to use the ACR rather than the (now deprecated) CDK classes it was using before. As well as probably being more reliable and less likely to break with future changes in MySpace server protocols, this gives the benefit of single sign on. The effect of this is that you will need to have the AstroGrid desktop running on your machine before you can access MySpace from TOPCAT.
  Algebraic functions
    - Added Julian Epoch and Besselian Epoch conversion functions to `Times` class.
    - Added `RANDOM` special function.
  Miscellaneous
    - When you select a column in the Columns window, it now scrolls the table in the Data Window so that the selected column is visible. This is a boon when dealing with tables that have very many columns.
    - String "`null`" interpreted as a blank value in ASCII tables.
    - Added new activation action to launch system default browser.
  Bugfixes
    - Fixed some relatively harmless bugs to do with actions available when you select the dummy "Index" column. You can now unsort from a popup menu in the table viewer window.
    - Believed to work fine with Java 1.5 now (there were previously some issues with MySpace at Java 1.5).
    - Fixed bug in ASCII input handler which misidentified blank lines, or DOS-format line ends, as end of file.
Version 1.7-1 (4 October 2005)
  Bugfixes:
  - Fixed broken MySpace access on MS Windows.
Version 1.8 (13 October 2005)
  - Added Sky Coordinates Window; it's now easy to add new sky coordinate columns based on old ones in different coordinate systems.
  - `roundDecimal` and `formatDecimal` functions introduced for more control over visual appearance of numeric values.
  - Now copes with 'K'-format FITS binary table columns (64-bit integers).
  - Modifications to JNLP files.
Version 2.0 (3 February 2006)
  A major upgrade of TOPCAT's visualisation capabilities has taken place in this release. There are considerable improvements in functionality, flexibility and efficiency over previous versions:
  New graphics windows
    In addition to the 2-d scatter plot from previous versions, the following visualisation windows are now available:
    - Histogram (1-d)
    - 3-d Cartesian scatter plot
    - 3-d Spherical scatter plot (with optional radial dimension)
    - 2-d Density map (2-d histogram)
    The new 3-d functionality does not require you to install Java3D or any other third-party 3D toolkit to work (nor does it take advantage of any such toolkit which may be present).
  Multi-dataset/multi-table plotting
    The plot windows are no longer associated with a single table. All of them allow you to display data from different tables, or from different tuples of columns of the same table, on the same plot. You can layer as many plots as you like on the same axes, using different plotting styles for the different datasets. As before, you can still display data from different subsets of the same table and same columns using different styles.
  Plotting Styles
    All the graphics windows allow you to set the plotting style for each data set individually, using a wide range of options including colour, line width, marker size, (histogram) bar style, etc. This allows you considerable control over the visual details of the plots.
  Transparent markers
    All the 2-d and 3-d scatter plots allow you to render points using markers of variable transparency. In a crowded plot, this allows you to see much more information than using opaque points, since you can get some idea of how many points (of different data sets) have been drawn at a given point on the plotting surface.
  Line drawing & linear correlation
    The 2-d scatter plot can now optionally plot lines associated with data sets. It can either draw straight line segments joining all the plotted points in a set, or draw per-dataset linear correlation lines. In the latter case it will report line gradient, intercept and correlation coefficient.
  Improved column selection
    The selector boxes for selecting which columns to plot are now 'editable' - that is, instead of selecting the column from a drop down list it is now also possible to type an expression into them instead. This may be more convenient if there is a very long list of columns. It also means that you can use an algebraic expression based on the names of one or more columns instead of a simple column name. The selectors also have small arrow boxes next to them which makes it easy to cycle through the list of known columns. These features are also available at some other places in the program where a column value is required.
  Manual axis configuration
    As well as zooming in and out using the mouse, you can now set the axis limits by typing them into an axis dialogue box. You can also set the text which will form the axis annotation on the plot.
  Status line
    Most plots now feature a panel at the bottom of the window indicating how many points have been plotted and the current position of the mouse pointer (if any) on the plotting surface.
  Performance
    Scatter plots of large datasets now use considerably less memory and around an order of magnitude less CPU time than previously (a 2-d million point replot now takes about 1 second - plotting it the first time may be rather longer since it needs to acquire the data which may be I/O intensive).

  Some non graphics-related improvements have also been made as follows:

  - Selection of a subset in the Control Window now triggers its selection in other windows (plot, statistics, subsets). The same thing doesn't happen the other way around, since that might lead to confusing consequences.
  - Boolean columns now display null values distinctly from false ones. Additionally, null/false distinctions are handled more carefully in FITS and VOTable files.
  - The Sky Coordinates Window now suggests names for new columns.
  - The Filestore Browser now allows you to enter the position in a file of the table to load (e.g. HDU index for FITS or TABLE index for VOTable).
  - Added Hide All & Reveal All actions to the Columns window.
  - When joining tables, column name comparison to determine whether deduplication is required is now case-insensitive.
  - Fixed a problem which was causing TOPCAT to crash when attempting to save an altered copy of a FITS file under the same name.
  - The manual has been reorganised somewhat, and a new Quick Start section added.
  - There is an experimental implementation of the Aladin interoperability interface. This hasn't really been tested however, so may not work. Improved Aladin interoperability is expected in future releases.
  - Fixed a bug in Cartesian crossmatching algorithms which failed to match if the required error in any dimension was zero.
Version 2.1 (7 April 2006)
  A number of graphical and other improvements have been made at this release.
  Stacked Line Plot
    A new Stacked Line Plot visualisation window has been added. This is especially suitable for use with time series data.
  Asynchronous data reading in graphics windows
    All the graphics windows now read data for plotting asynchronously. What this means is that when you change the plot in a way which requires the data to be read or re-read then the GUI will not lock up and you can do other things, including changing the plot in other ways before it has completed drawing. A progress bar at the bottom of the window indicates progress. This is only noticeable for large (slow to read) files.
  Axis Zooming
    The existing Histogram, 2-D Scatter Plot and Density Map windows, as well as the new Stacked Line Plot, now allow you to do a 1-d zoom by dragging the mouse near the axis, as well as the 2-d zoom by dragging on the plot surface.
  PLASTIC Tool Interoperability
    TOPCAT now sends and services messages using the PLatform for AStronomical Tool InterConnection protocol. See Section 9.
  IPAC Data Format
    Data files in the IPAC format defined by the CalTech's Infrared Processing and Analysis Center can now be read. This is how data from the Spitzer satellite amongst others is normally provided.
  String-typed coordinate columns
    If suitably identified (e.g. by UCD or units), string-valued columns which represent data in certain well-known forms, currently sexagesimal angles and ISO-8601-format dates, can now be treated directly as numeric values in column selector boxes such as the ones in the plotting windows, rather than having to define a new column using a string->numeric converter.
  Memory Error Reporting
    When the JVM runs out of memory, it now attempts to post a popup window explaining this rather than just writing a terse message to the console. This popup also gives you the opportunity to view a new section added to the documentation: Tips for Large Tables.
  SOAP Service deprecated
    TOPCAT no longer by default runs a SOAP server for accepting tables. You can choose to run it by specifying the `-soap` flag on the command line. This facility may be withdrawn in future versions, in view of the fact that the PLASTIC service can provide similar functionality.
  Logo fade
    The Starlink logo at the top of every window is set to fade out gradually over the period 1-APR-2006 to 1-SEP-2006.
  Bug fixes and minor alterations
    - Export of GIF and Encapsulated PostScript images from the graphics windows has been improved - unwanted grey backgrounds round the edges are now rendered transparent in GIFs and white in EPS. A section on Exporting Graphics has also been added to the manual.
    - A number of graphical anomalies such as the plot bounds being reset when an axis Flip button was toggled have been ironed out.
    - The JDBC behaviour has been improved: some bugs have been fixed and it now no longer asks for an SQL username/password twice.
    - Work around intermittent bug when loading small files from MySpace.
    - Density maps are now exported into FITS format with better WCS headers where appropriate.
    - The SDSS JPEG cutout activation action URL has been updated from DR2 to DR4.
    - A bug which caused the first row in a table to be included erroneously in graphical subset selections has been fixed.
    - Added an offset selector toggle button to the Histogram window.
Version 2.1-1 (13 April 2006)
  Sphere Zoom
    You can now zoom in the Spherical Plot.
  PLASTIC
    There are some improvements to the PLASTIC functionality and documentation.
    - In addition to Broadcast actions for the various PLASTIC messages transmission types, there are now corresponding Send actions which allow you to direct the message to only a single selected listener application. These actions are now enabled/disabled according to whether any suitable PLASTIC listeners are registered.
    - You can now pop up a little window from the Control Window's Interop menu which displays the currently registered PLASTIC listeners. The functionality of this window may be extended in future releases.
    - When TOPCAT receives a `showObjects` message, it now checks if a matching subset exists rather than always creating and adding a new one. If it does, it just sets current the existing one. This can cut down (a bit) on proliferation of Row Subsets.
    - The PLASTIC section of the manual has been improved.
    - Some of the screenshots have been updated to include PLASTIC-related features.
    - URLs using the `file:` scheme sent by TOPCAT in PLASTIC messages now correctly conform to RFC 1738.
  MySpace
    A workaround has been introduced for MySpace browsing performance problems. Run with `-Dmyspace.cache=true` to speed it up at the expense of accuracy.
Version 2.1-2 (21 April 2006)
  This is mainly a bug fix release.
  - Added explode columns option to Data Window popup menu.
  - Fix bug present since v2.0 which was sometimes drawing wrong numeric labels near zero in 2D plots. A side effect is that exponential multipliers will more often be used on axis labels (as in versions prior to v2.0). Hopefully somewhat improved axis labelling will be present in future versions.
  - Fixed bug which was writing unclosed LINK elements in VOTables.
  - Fixed some NullPointerException bugs in column selection and 2D plot.
  - Fixed bug in scrolling to correct column in Data Window when column is selected in Columns Window.
Version 2.1-3 (11 May 2006)
  Bug fixes and some minor enhancements.
  - Implements send and receive of PLASTIC `ivo://votech.org/votable/highlightObject` message.
  - Added new `csv-noheader` output format.
  - Added skew and kurtosis calculations to Statistics Window.
  - Improved, though still imperfect, retention of table-wide metadata in VOTables.
  - Fixed bug in writing `votable-fits-href` and `votable-binary-href` format tables from the file browser.
  - `mark.workaround` system property, see Section 10.2.3.
Version 2.2 (7 July 2006)
  Column-oriented storage
    New features for permitting column-oriented storage (`colfits` format, `startable.storage` policy "`sideways`") have been introduced. These can provide considerable efficiency improvements for certain tasks when working with very large (and especially wide) tables.
  Bug fixes
    - Fixed bug which caused some points to be missed out in spherical plots.
    - ISO-8601 strings now permit times of 24:00:00 as they should.
    - Quoted unit values are examined to determine probable column data types.
  Other items
    - Added flux conversion functions (Jansky<->magnitude).
Version 2.2-1 (3 August 2006)
  - Added new coordinate system ICRS for sky coordinate conversions.
  - Eliminated some unsightly but harmless stack dumps that could occur during plotting.
  - TUCDnn header cards now used in FITS files to transmit UCDs (non-standard mechanism).
  - Added TST (Tab-Separated Table) format input and output handlers.
  - Efficiency improvements for column-oriented access.
  - Improved responsiveness when viewing table data for extremely large tables.
Version 2.3 (5 October 2006)
  Various modifications and improvements:
  - Removed Starlink logo from the top right corner of all TOPCAT windows, including screenshots in documentation. New logos (Starlink, Astrogrid, VOTech, Bristol) are added in About window.
  - Added new Add Sample Subset, Add Head Subset and Add Tail Subset utility tool buttons to the Subset Window.
  - Direct MySpace access using `ivo:` or `myspace:` URLs is now provided - see new Section 4.2.
  - Added time conversion functions between MJD and Decimal Year.
  - ISO-8601 column numerical values (e.g. in plots) are now by default Decimal Year rather than Julian Epoch. The numerical values are quite close, but Decimal Year is probably more what you'd intuitively expect.
  - Added `toHex` and `fromHex` numeric conversion functions.
  - Added `-J` flag to `topcat` startup script for passing flags directly to Java.
  - Added Sample (as opposed to Population) Standard Deviation/Variance calculation options to the Statistics Window.
  - Improved listing for functions in Appendix B of user document (subsection for each function class).
  - Modified presentation of HTML version of user document using CSS.
  Bug fixes:
  - Fixed bug (introduced at v2.2-1) which made table display and adding columns slow, and column widths the wrong size.
  - Fixed bug (introduced at v2.0) which prevented Exact matches using non-numeric columns. Exact match now also deals with array-valued columns.
  - Fixed PLASTIC bug which was ignoring ID argument of `ivo://votech.org/votable/loadFromURL` message.
  - Fixed bug in coordinate conversion that caused bad behaviour in the presence of malformed input coords.
  - Fixed bug with plotting very large or very small axis labels in 3-d plots.
  - Fixed a couple of minor crossmatching bugs (which would not have affected results).
Version 2.3-1 (Starlink Hokulei release)
  - Output to MySpace can now be streamed, if running under J2SE1.5 or later.
  - Intercept OutOfMemoryErrors during 3D plotting to give an explanatory popup.
  - Fixed bug in axis range checking.
  - Fixed bug in handling of single quotes in FITS file metadata.
  - Concatenation column assignments now smarter for fully compatible input tables.
  - Some optimisations for very large files.
  - Added Vega<->AB magnitude conversion constants to Fluxes functions.
  - Encapsulated PostScript exported from graphics windows is improved. These files should now print when sent directly to a printer, and the image size is now guaranteed sensible for a portrait A4/letter page.
  - Added hyperbolic trig functions (`sinh`, `cosh`, `tanh` and inverses) Maths class (sinh, cosh, tanh and inverses).
  - Added cosmology distance calculations in class Distances.

  Graphics upgrades

  - Column selector panels in graphics windows are now in scrollers.
Version 3.0 (5 July 2007)
  This release includes major visualisation improvements and some changes to the plotting user interface:
  Error bars
    Comprehensive plotting of symmetric and asymmetric error bars (and crosshairs, and boxes, and ellipses, ...) in 1, 2 and 3 dimensional plots is now provided -- see Appendix A.5.1.3.
  Auxiliary (colour) axes
    It is now possible to modify the colour of plotted points according to values in one or more axes additional to the spatial ones -- see Appendix A.5.1.5.
  Histogram Weighting
    The Histogram and Density Map windows now have the option of weighting the quantity represented, so that the binned values are sums rather than just counts.
  Density Map Colour Scale
    When the density map is in indexed (non-RGB) mode you can now select from various colour maps to represent bin occupancy. This makes level differences easier to see.
  Plot window rearrangement
    Buttons which affect data selection are now arranged in their own toolbar below the plot (Appendix A.5.1.1). The size of the plot control area can be manually resized to give more room for the plot itself by using the Split Window () button, which is useful on small screens.
  Expression language enhancements
    Table parameters can now be referenced in expressions using `param$` notation (Section 7.3), and both columns and parameters can be referenced by UCD using `ucd$` notation (Section 7.1).
  Statistics & Histogram result re-use
    The Statistics and Histogram windows now both provide Save and Import actions, which take the data presented in the window and allow it to be saved to a file or imported directly into TOPCAT as a new table.
  Cartesian 3D zoom
    It is now possible to zoom the 3D Plot towards the centre in the same way as the Spherical Plot.
  GAVO Millennium simulation database load dialogue
    You can now directly query the GAVO Millennium database service (Appendix A.6.11). Thanks to Gerard Lemson of GAVO for contributing code for this.
  Row subset improvements
    Row Subset names can now be re-used, and when you are asked to select a new subset name you are allowed to choose one from the list of existing ones. When a row selection is received from another application via PLASTIC the subset name (the name of the sending application) is re-used in this way. This helps to keep the number of subsets under control.

    Receving a row subset from PLASTIC in this way, and certain other actions, now cause the subset to be shown straight away (and updated if necessary) on any existing plots, which makes this kind of PLASTIC interaction more responsive.

    The size of each subset, and also the corresponding percentage of the table it represents, is now calculated automatically and displayed in the Subset Window. The old behaviour of only calculating sizes on request can be reinstated using the Autocount rows () menu item if required.

  Fix Vertical in 3D plots
    A Stay Upright () button is provided in the Cartesian and spherical 3D plots which allow you to keep the Z axis/north pole vertical during rotations.
  Quantile calculation
    The Statistics Window can now calculate quantiles (median, quartiles, .001, .01, .99 and .999) on request.
  Minor changes and bugfixes
    - JPEG and PNG now plot export available from all graphics windows.
    - Dramatic performance improvement for transparent pixel plotting in 3D plots on some platforms.
    - Added locale-specific `formatDecimalLocal()` functions in class Formats.
    - Added `fluxToLuminosity` and `luminosityToFlux` functions in class Fluxes.
    - Improved deduplication of column names when joining tables.
    - 3D plots now correctly report number of visible points.
    - Improved error message for broken CSV files.
    - Improved error reporting in the presence of a deficient JVM (such as GNU `gcj`).
    - Worked around a Mac OSX Java bug which caused table display to go funny when columns were deleted.
    - Fixed error in output of FITS table `TNULL` n header cards - write them as numeric not string values.
    - Fixed a number of bugs in responding to PLASTIC messages (threading, failure to respond).
    - 3D plots now plot symbols for all subsets not just one, as for 2D plots.
    - Fixed bug which prevented non-string parameter values from being reassigned.
Version 3.0-1 (Starlink Puana release)
  - Added error bars capped by arrows.
  - Fixed bug which caused error bars in legend to draw in the wrong colour in EPS output.
Version 3.1 (29 August 2007)
  - You can now annotate plotted points using text labels in 2d and 3d scatter plots - use the Draw Label () button to assign a column containing label text.
  - Radial axis control in sphere plot is now not visible by default - you need to click the Radial Coordinates () button in the dataset toolbar to enable it.
  - New Show Legend () button in plot windows determines whether a legend will be displayed next to the plot.
  - New Hide Legend checkbox in style editor windows which allows subset legend entries to be excluded from the displayed legend individually.
Version 3.2 (28 January 2008)
  Functionality enhancements
    - Considerably improved display of per-table metadata in the Parameter Window. It is now possible to view long or multi-line parameter values.
    - FITS header cards in table HDU are now read (but not written) as table parameters.
    - Add mouse wheel zoom for 3D plots.
    - Add Write Mode selector to SQL Output Dialogue, to allow appending and optional drop prior to create of new table in database.
    - Now TOPCAT will automatically register with a PLASTIC hub any time one becomes available - the hub does not have to be running when TOPCAT starts. As a corrollary, if you start an internal or external hub from the Interop menu, you no longer need to explicitly invoke the Register item afterwards.
    - Add `-exthub` flag which starts a new external PLASTIC hub.
    - Activation window permits selection of different image viewers for View URL as Image option. Note this is not currently provided for the Display Cutout Image option - this may be addressed in the future.
  Bugfixes and minor improvements
    - Added `-stilts` convenience flag so you can easily run STILTS from a TOPCAT installation.
    - Fix calculation error in `fluxToLuminosity` function.
    - Fix some bugs associated with text label plotting.
    - Error bars for zero/negative values are now correctly extended to the axis (rather than being omitted) in 2D plots with logarithmic axes.
    - Modified the size of some windows - now posts somewhat smaller windows if a small screen is in use.
    - System properties specified explicitly on command line now take precendence over those in `.starjava.properties` file.
    - Embedded spaces in output ASCII format table column names are now substituted with underscores, which prevents writing ASCII tables that cannot be read.
    - Downgraded from WARNING to INFO log messages about the (extremely common) VOTable syntax error of omitting a FIELD/PARAM element's `datatype` attribute.
    - Starting an external hub now works more reliably.
Version 3.3 (19 August 2008)
  Functionality enhancements:
    - Added normalisation option () to Histogram Window.
    - In overplots using different tables, an attempt is now made to use the same columns/expressions for axis values as for the main table. This may be convenient when overplotting data from several similar tables.
    - FITS files with columns using variable-length arrays ('P' or 'Q' data type descriptors) can now be read (in random access mode, i.e. from an uncompressed FITS file on disk, only).
    - The lut.files system property can now be used to configure custom colour maps for auxiliary axes and density maps - see Section 10.2.3.
    - New class Arrays added to algebraic functions.
    - Histogram Offset control now works for logarithmic X scale as well as linear.
  Bug fixes and other changes:
    - Efficiency improvements (~25%? in both CPU time and memory usage) for HEALPix-based sky crossmatching. Thanks to Nikolay Kouropatkine at Fermilab for a new version of the PixTools library which provided this improvement (this version also fixed a - minor? - HEALPix bug).
    - Sexagesimal field identification for ASCII input files has become more forgiving; it now accepts minutes or seconds equal to 60 without a syntax error.
    - Fixed a pair matching performance bug (slower if tables were not given in the right order) introduced at v1.4.
    - The `-disk` flag is now honoured when loading tables from JDBC, which makes it possible to input larger datasets from RDBMS.
    - Fixed problem which caused the graphics system to hang or fail when drawing Dot-to-dot lines in 2D plot for points a very long way off the screen.
    - Fixed bug which caused incorrect plotting of cumulative histograms with small weights.
    - Slight modification to spike-style bar drawing in Histogram, now has tidier appearance when using dashed lines.
  Internal
    There has been extensive internal reorgamisation of the plotting classes. There should be no user-visible effects of this, but please report anything which seems to be misbehaving.
Version 3.4 (23 December 2008)
  SAMP
    TOPCAT now uses SAMP as a (preferred) alternative to PLASTIC for inter-tool interoperability. SAMP is now usually the default; the old behaviour can be recovered using the `-plastic` command-line flag. Although much of the messaging behaviour remains the same, various improvements to the GUI accompany this change:
    - New SAMP Panel at the bottom of the Control Window summarising status
    - New SAMP Status () toolbar button in Control Window, which pops up new SAMP Window
    - Other slight rerrangements of toolbar buttons and menu items in Control Window
    - Broadcast Row checkbox added near Activation Action in Control Window
    For more discussion see Section 9.
  Registry Access
    TOPCAT's registry access has finally been updated to use VOResource 1.03 and the Registry Interface 1.01 (it was previously using very out of date protocols). This means that the Cone Search dialogue (as well as the semi-supported SIAP and Registry dialogues) will now pick up a much more up to date set of services. Additionally, you can choose your own registry service, and the registry searches in those dialogues now feature keyword searches rather than picking up all known cone/SIAP services. See Appendix A.9.2.
  Other enhancements
    - Table columns and parameters can now be referenced by Utype using utype$ syntax in a similar way to using UCDs - see Section 7.1.
    - When a new subset is created by whatever method, the user can now elect to transmit it to other applications using SAMP/PLASTIC as an alternative to adding a new subset to the table's subset list.
    - Add items to Help menu for viewing help in the default web browser rather than TOPCAT's help browser.
    - Add a plot output format option to write gzipped PostScript.
    - `-version` command line flag now reports subversion revision as well as symbolic version number.
  Bugfixes
    - Fixed histogram bug (blank plot) for small values when using logarithmic Y axis.
    - Fix stacktrace error in 3D plots when no data is available.
    - The SIMBAD name resolver is fixed in the cone search window (it was using a no-longer-supported service format).
Version 3.4-1 (27 March 2009)
  - Note Sybase ASE works (documentation edit only)
  - Fixed bug which caused SIAP queries to fail every time.
  - SIAP load dialogue now has name resolution capability.
  - Added SSAP load dialogue. Basic functionality only.
  - Added documentation for previously-unadvertised SIAP/SSAP load dialogues.
  - Fixed bug which caused registry queries (Cone, SIA, SSA) to fail for Java 1.6.
  - Fixed bug which caused blank Contact field in registry query results.
  - Can now query registry for more registry services.
  - Fits BINTABLE TZERO/TSCAL value reading improvements:
    - Columns with integer TZERO values now read as integers rather than floating point values where possible. This includes unsigned longs ('K'), which were previously represented as doubles with lost precision. Unsigned longs which are too large however (>263) are read as nulls.
    - Byte-valued columns can now be written out by `fits-basic` output handler as signed byte values (TFORM=B,TZERO=-128) rather than signed shorts (TFORM=I).
    - More comprehensive testing.
    - Fixed bug in calculating value scaled double ('D') values.
    - Fixed bug in typing value for scaled float ('E') arrays.
  - Added column selector documentation Appendix A.1.4.
  - Fix bug when decoding `file:`-type URLs containing `%xx` escapes.
  - Fix error reporting bug in registry search.
  - Report application name and version in User-Agent header of outgoing HTTP requests.
  - Provide aliases `-sia` and `-ssa` for `-siap` and `-ssap` command line flags.
  - Fix SIA and SSA queries to avoid exponential notation in parameters; there is currently no standard concerning numeric representations, but this avoids problems with some servers.
  - The fixed length Substring Array Convention for string arrays (`TFORMnn=rAw`) is now understood for FITS binary tables.
  - Fixed `-noserv` flag.
  - Fixed so that attempting to run services under unfavourable firewall conditions does not cause startup to hang.
  - Minor SAMP bugs fixed (JSAMP upgraded to 0.3-1).
Version 3.4-2 (17 July 2009)
  - Plot windows now allow a plot title to be set from the Configure Axes and Title window (Appendix A.5.1.2).
  - Loading message now displayed in control window table list when table is being loaded from PLASTIC or SAMP, or during startup.
  - Incoming and outgoing SAMP `load.table` messages now use the `name` parameter, which gives a better chance of a useful human-readable name being attached to transmitted tables.
  - Sexagesimal delimiters can now be spaces as alternative to colons in Cone/SSA/SIA load dialogues.
  - GAVO load dialogue updated in line with modified database service.
  - Work around J2SE mark/reset bug when loading table direct from URL.
  - Produce null rather than nonsense results from sky coordinate conversions with unphysical latitudes.
  - Produce null rather than questionable results from sexagesimal conversions with mins/secs out of range.
  - Startup script improved to provide some cosmetic improvements for Mac users: the TOPCAT icon is shown in the dock rather than the generic Java icon, and the menu application name is set to "TOPCAT" rather than the classname. Note these don't take effect if running directly using `java -jar`.
  - STILTS run using `topcat -stilts` from standalone jar can now correctly report starjava revision.
Version 3.4-3 (31 July 2009)
  - Fixed two bugs related to drag and drop: intermittent failure of drop (Mac only?), and application crash when making a drop that fails.
Version 3.5 (6 November 2009)
  There are several improvements in this version, many of them to do with improved functionality and usability for loading or acquiring data both from local files and from various Virtual Observatory services.

  Multiple-table load
    TOPCAT will now load multiple tables from a single file if multiple tables are present, rather than just the first one. This applies to multi-extension FITS files which contain more than one table HDU, and to VOTable documents which contain more than one TABLE element. It affects the Filestore dialogue, naming files on the command line, and the new VizieR load dialogue.

    In previous versions, when you selected a multi-extension FITS file or VOTable from one of the load dialogues or on the command line, only the first table contained in it would be loaded, and any others were silently ignored. Such files often only contain a single table, but not always. Now, if multiple tables are present in the container file, each one will appear as a new table in the tables list. Other table file formats are not currently affected, since there is no mechanism for storing multiple tables in, say, a CSV file.

  Multiple Cone, SIA and SSA searches
    In previous versions, it was possible to use the Virtual Observatory Cone Search, Simple Image Access and Simple Spectral Access services to locate catalogue records, images and spectra respectively in a single (cone-shaped) region of the sky, with position and radius entered manually. In this version it is possible to execute such a query for each row of an input table, with position and radius obtained from table data in appropriate columns. This effectively gives a join between a local table and a remote one exposed by a cone-like searchable VO interface.
  VizieR load dialogue
    A new VizieR load dialogue has been introduced to make queries directly to CDS's VizieR service. Thanks to Thomas Boch for contributing code for this.
  VO menu
    A new menu labelled VO (for Virtual Observatory) has been added to the Control Window. This currently contains single and multiple Cone, SIA and SSA queries and the service specific load dialogues, namely the VizieR and Millennium ones. All these features are also available elsewhere in the GUI, but the new menu groups together VO-related functionality for convenience.
  Positional search dialogue enhancements
    A number of improvements have been made to the Cone Search, SIA and SSA dialogues; these applies both to the old single-region search dialogues and the new multi-region searches.
    - The service URL can now be entered (e.g. cut'n'pasted) directly as an alternative to obtaining it from a registry search. This allows use of unregistered services, as well as making it easy to select the service URL for pasting elsewhere.
    - The resource table returned from the registry search can now be sorted by column contents, by clicking on the selected column header.
    - While searching the registry, some indication of the number of services found so far is displayed.
    - Searching the registry is less likely to result in an out of memory error.
    - The (not very useful, and potentially confusing) registry Update button has been withdrawn; its function is now available only from the Registry menu instead.
    - The metadata contained in tables returned from a successful search is improved.
    - The SIA and SSA dialogues now have a selector for choosing the desired image/spectrum format.
    - The SIA and SSA dialogues now longer require explicit entry of a size parameter (these protocols define default behaviour for when no non-zero size has been specified).
    - The SIA and SSA now automatically query the registry for all appropriate services when first displayed. This is sensible behaviour at the moment, since there is at time of writing a reasonable number of them. A directed search may be given instead at the user's option.
    - The Cone Search window provides better instructions on use when first displayed.

    A new section Section 6 has been added to the manual providing an introduction to the concepts of VO data access, and a new apendix section Appendix A.9 describes the various single- and multiple-query windows.

  Storage Policy change
    The way that TOPCAT stores large tables has changed. In previous versions, table data was held in memory (the default Storage Policy was "`memory`")) unless the `-disk` flag was specified (to use the "`disk`" storage policy), in which case it was stored in temporary disk files. If you didn't put `-disk` on the command line, it was common to run out of memory when working with large tables.

    Now, the default storage policy is "`adaptive`". This means that relatively small tables are held in memory, and larger ones are stored in temporary files. The effect should be that most of the time, you don't need to specify any special options, and you can work with small or large tables without running out of memory. Using `-disk` is still permissible, and may help in unusual circumstances. Running out of memory is still a possibility, but should be much less common.

    The old behaviour can be restored by using the new `-memory` command-line flag.

    The only differences you notice from this change should be good ones, however it is slightly experimental. Please contact the author if you suspect it has introduced any problems.

  SAMP-related enhancements
    - Spectrum Display activation action now uses SAMP or PLASTIC to display in a suitably compliant external spectrum viewer. The old behaviour was to display the spectrum in an internal SPLAT window, but it didn't work very well.
    - The JSAMP library has been upgraded to v1.0, giving some SAMP behaviour changes, enhancements and bugfixes. Control of things like TOPCAT server port and server endpoint hostname are now configurable using `jsamp.*` system properties.
    - The `-jsamp` command-line flag has been added for convenience so that the TOPCAT jar file can be used easily as a JSAMP toolkit.
  VOTable-related enhancements
    - Namespacing of VOTable documents made more intelligent, and configurable using the `votable.namespacing` system property.
    - VOTable 1.2 supported.
    - The VOTable 1.2 `xtype` attribute is now used to try to identify columns containing ISO-8601 format dates, which allows them to be treated as numeric values for plotting etc.
    - As described above, when loading a VOTable document which contains multiple TABLE elements, all the contained TABLEs are now separately loaded into TOPCAT rather than just the first one, which is what used to happen.
  Loading changes
    - The Load Window now has toolbar buttons as well as items in the DataSources menu for more convenient access to the various load dialogues.
    - The command-line flags corresponding to load dialogues (`-tree`, `-file`, `-sql`, `-cone`, `-gavo`, `-registry`, `-sia`, `-ssa`) have been withdrawn from use; they were probably not widely used, and are of minimal usefulness with the new load window toolbar buttons.
    - While a table is loading an entry is now visible in the Control Window table list. Previously it was not always clear whether a slow load was in progress or not.
  Bugfixes and minor enhancements
    - There are improvements (and possibly new problems) in the loading dialogue framework. One item is that a failed load less often closes the dialogue.
    - HTML table output is now HTML 4.01 by default (includes THEAD and TBODY tags).
    - There is a workaround for illegally truncated type declarations in IPAC tables.
    - XML, including VOTable, output is handled more carefully; fix VOTable output encoding to be UTF-8, and ensure no illegal XML characters are written.
    - Fixed plotting bugs - caused intermittent GUI corruption (e.g. missing toolbar buttons), especially on MacOS.
    - Bug fixed in crossmatching output: entries which should have been null were sometimes written as non-null (typically large negative numbers) in FITS and in non-TABLEDATA VOTable output. This affected cells in otherwise non-nullable columns where the entire row was absent. The previous behaviour is not likely to have been mistaken for genuine results.
    - `parse*` string->numeric conversion functions now cope with leading or trailing whitespace.
    - The list of example queries in the GAVO load dialogue has been extended to match those in its web interface.
    - Fixed an obscure bug which could under rare circumstances cause truncation of strings with leading/trailing whitespace read from text-format files.
Version 3.5-1 (21 December 2009)
  This version has one significant new feature:
  - Plot windows can now export to PDF as well as other formats.
  Other than that, is is mostly performance and usability enhancements and bugfixes:
  - Fixed a bug which caused an error when attempting to load multiple files from the command line.
  - Improve documentation of 3D windows, including zoom options.
  - Fixed a bug which caused an error when attempting to do cone/SIA/SSA search from directly supplied service URL.
  - Improve error reporting from multi-cone (etc) window.
  - You can now cut and paste from the linear correlation coefficient display in the 2-d plot style editor.
  - Faster display of load window and VO menu options.
  - Fixed internationalisation bug which could cause cone searches etc to fail in locales that use "," for a decimal point.
  - Registry searches are now faster and less likely to run out of memory. Registry-search-based operations (cone search dialogues etc) now run in topcat-lite configuration as well as topcat-full.
  - Now warns about non-active resources returned from registry searches (which shouldn't happen).
  - Improved helpfulness of error messages in multi-cone etc windows.
  - Performance improvements when loading from VOTable documents which contain many small tables, both in general and in the special case of SIA/SSA results. This makes a big difference in some cases.
Version 3.5-2 (24 March 2010)
  - Add memory monitor indicator in control window.
  - Considerable performance and scalability improvements to the crossmatching algorithms. For several common regimes, using default settings, memory use has been decreased by a factor of about 5, and CPU time reduced by a factor of about 3.
  - Add optional tuning controls (Tuning Parameters and Full Profiling) to the crossmatching windows. Experimentation with these can lead to significant performance improvements for given matches.
  - Fixed a crossmatch bug; it was giving a possibility of suboptimal "Best Match Only" match assignments when pair matching in crowded fields. Crossmatch results thus may differ between earlier versions and this one. Both are reasonable, but the newer behaviour is more correct. In non-crowded fields, there should be no change.
  - Add new functions to Arrays: `array` functions for constructing arrays, and new aggregating functions `median` and `quantile`.
  - Added Verbosity selector in multi-cone window.
  - Improved logging of registry searches.
  - Adjusted the way that data types are read from JDBC databases. Date, Time and Timestamp type columns will now be converted to Strings which means they can be written to most output formats (previously they were omitted from output tables).
  - Match Window documentation extended and somewhat reorganised (they now have their own appendix subsection).
  - MacOS icons improved: thanks to Simon Murphy (ANU) for this contribution.
  - Memory management adjusted further - default (Adaptive) storage policy now uses direct allocation (=`malloc()`) for intermediate-sized buffers to avoid running out of java heap space.
  - Further performance improvement for VOTable documents with very many TABLEs.
  - Fix bug in code for handling very large mapped FITS files. This was causing fatal read errors in some cases.
  - Fix issue when sending some SAMP messages (unhelpful reuse of message tags).
  - Fixed minor error when a directory in the file browser got deleted while visible.
  - Fix minor scrolling bug in table and column windows.
  - Fix histogram save/export bug: the exported table now has the same X bounds as the currently displayed histogram.
  - Withdraw embedded SPLAT application. SPLAT could previously be used in some circumstances for in-JVM display of spectra, but this facility didn't work well and was presumably little used. You can still view spectra by configuring an Activation Action to talk to an external spectrum viewer (SPLAT or some other choice) via SAMP or PLASTIC.
  - Withdraw SOAP server functionality. This has been deprecated since v2.1. External control is better handled using SAMP (or PLASTIC). If anybody misses this functionality, get in touch and I will consider a similar but less SOAPy alternative.
Version 3.6 (6 August 2010)
  This version contains some new features and usability enhancements, and a number of bugfixes.
  Load/Save Dialogue improvements:
    - There is a new System Browser option when loading and saving. This does essentially same job as the old Filestore Browser (still available), selecting a file to load or save, but it uses the system-default GUI to do it. For Mac and Windows users, this may present a more familiar and functional interface to the file system (for Linux users, it is probably not an improvement). Both options are available, so you can choose whichever you prefer.
    - You can now save multiple tables at once. The Save Window now offers three ways of saving: Current Table, Multiple Tables and Session. Current Table saves the current Apparent Table as before. Multiple Table saves some or all of the loaded Apparent Tables to a container file (typically Multi-Extension FITS or multi-TABLE VOTable). Session saves some or all tables as well, but additionally saves many aspects of the TOPCAT state, such as table subsets, sort order, hidden columns etc.
  Other significant enhancements:
    - Finally - you can delete and rename row subsets in the Subset Window! Apologies to those who've been asking that this has taken so long to implement.
    - There are new actions in the Control Window File menu to change the order of loaded tables in the table list (move them up and down). You can use ALT-up/down keys to do the same thing. This may be useful in conjunction with the new session/multi-table save facility.
    - Utype metadata items are now visible in the Parameter and Column windows.
    - The JSAMP library has been upgraded to version 1.1. This means that the hub will appear in the "System Tray" where possible (when using java 1.6+, and when using a suitable display manager). It also recognises the SAMP_HUB environment variable for non-standard hub locations.
    - There are a couple of improvements in the VizieR load dialogue: it has options to display sub-tables within catalogues and to include or exclude obsolete catalogues.
  Minor enhancements:
    - The current table can now be discarded by hitting the Delete key in the Control Window table list.
    - SDSS image cutout downloads updated to DR7 (was DR4).
    - The unofficial column type "`long`" is recognised in IPAC format tables.
    - An efficiency warning is now issued for large compressed FITS files.
    - Format row counts are displayed with group separators (e.g. thousands separated by commas) in some places for better readability.
  Fixes for bugs and misfeatures:
    - Table parameter values in algebraic expressions now evaluate to their current value, rather than the value when the expression was entered.
    - Tables in TOPCAT now have private copies of column and table metadata. This means that changing a column name or parameter in one table will not affect other tables. It should also prevent a related bug that allowed the column headings in the table browser to get out of step with those in the columns window and elsewhere.
    - Receipt of a SAMP `table.highlight.row` message will no longer cause a similar message to be sent back (and similarly for the PLASTIC `ivo://votech.org/votable/highlightObject` message). The previous behaviour was an unwanted implementation side effect which could sometimes cause problems in interaction with other tools.
    - Fixed bug in FITS-plus metadata output (table parameters were getting lost).
    - Better behaviour (warn + failover) when attempting to read large files on 32-bit OS or JVM.
    - Corrected literature references in Fluxes conversion class documentation (thanks to Mattia Vaccari).
    - Fix memory usage issues (unnecessarily large output graphics files, possible out of memory errors) for density plots with large pixel sizes.
    - Fixed bug in CSV file parsing that could ignore header row in absence of non-numeric columns.
    - Fix some minor bugs with Cancel operation during table save.
    - Reinstate help buttons from Save Window toolbar (erroneously removed since version 2.0).
    - Make sure that failed load of table with no rows reports as such rather than failing silently.
    - Loading tables by typing their name directly in the Load Window now loads multiple tables if present not just the first one, in common with most of the other load dialogue types.
    - Upgraded PixTools HEALPix library to 2010/02/09 version. This fixes a bug that could theoretically cause deficient crossmatch results, though I haven't managed to produce such errors.
    - Fixed (I hope) "Table no longer loaded" error when sending tables via SAMP.

  Finally, from this release TOPCAT requires version 1.5 (a.k.a. 5.0) of the Java J2SE Runtime Environment; it will no longer run on version 1.4, which is now very old. I don't expect this to cause compatibility issues for anyone, but I'm interested to hear if that's not the case.

Version 3.7 (23 December 2010)
  This version contains some significant enhancements and a number of minor improvements and bugfixes.
  Load Dialogues:
    Table loading has had a major overhaul. Load dialogues are no longer modal, that is you can now interact with the rest of the application while they are open. This has a number of benefits:
    - A slow load doesn't prevent you from doing other things.
    - You can be loading several different tables at once, either from the same or from different places.
    - You can use the Help system while a load dialogue is open (load dialogues now have the usual Help button like other TOPCAT windows).

    It has also enabled some related changes:

    - Progress is reported for each table load - you can see how many rows have loaded and, if known, how many there are in total
    - Cancelling a load in progress is more straightforward and works more reliably than in earlier versions

    A few related bugs and idiosyncracies have been corrected at the same time.

  Registry Queries:
    The registry search interface used in single and multiple VO access windows has been improved:
    - When specifying a keyword search for Cone, SIA or SSA services, you can select which registry record fields to match (ShortName, ID, Title, Publisher, Subjects etc). This makes it much easier to get the records you're interested in.
    - The Subjects field is now displayed for retrieved records.
    - Lists of registry records (i.e. Cone, SIA or SSA services) can now be sent to/received from other tools via SAMP (`voresource.loadlist`{,`.cone`,`.siap`,`.ssap`} MTypes).
    - Sky coordinates can be received from other tools via SAMP and used to set Cone, SIA or SSA position (`coord.pointAt.sky` MType).
  BaSTI Load Dialogue:
    A new load dialogue is available for accessing the INAF-OATS BaSTI (Bag of Stellar Tracks and Isochrones) service -- code contributed by Marco Molinaro.
  Searchable Help:
    The Help browser now has a Search tab as well as the Table of Contents tab, so you can do text searching on the extensive help document.
  Minor Enhancements:
    - Storage management improvements; removed restriction on large (>2Gb) non-FITS datasets in some circumstances.
    - Fix so FITS tables >2Gb can be used in 32-bit mode (though slower than 64-bit).
    - All windows have a new Scrollable option in their File menu. It is not generally recommended to use this option, since in general the windows are arranged so that resizing them will resize sensible parts of them, but it may be useful if using some of the larger windows on an unusually small screen.
    - FITS files now store table names in EXTNAME (and possibly EXTVAR) header cards.
    - Window placement should now behave a bit more like platform norms, rather than sitting in the top left corner.
    - When a table is discarded, it is now deselected from any table selector (for instance in a plot, match or concatenation window).
    - HTML table output now writes cell contents which look like URLs in HTML <A> tags.
    - Basic authorization (`http://user:pass@host/path`) on table URLs handled.
    - Logs current version and whether it is up to date with latest release on startup. This behaviour can be controlled by the [-no]checkversion flag.
    - Belatedly added STFC logo to About window.
    - Add recommendation to use 64-bit java in large table tips section.
  Bug Fixes:
    - Fix bug in registry result table which displayed resource identifier instead of publisher in the Publisher column.
    - Fix SAMP table load bug which tripped over "+" characters in URLs.
    - Fix regression bug from v3.6 - loading jdbc tables from command line or text entry now works again.
    - Fixed file pointer `int` overflow bug in FITS MultiMappedFiles.
    - Fixed a couple of bugs relating to VOTable strict mode.
    - Possibly fixed a not-well-characterised bug in registry search.
Version 3.8 (9 May 2011)
  TAP
    A new TAP load dialogue supporting data retrieval using the Table Access Protocol (TAP) has been introduced. This provides SQL-like free-form access to any remote databases exposed with the TAP protocol.
  SAMP changes
    An internal SAMP hub is now by default started when TOPCAT starts up if no existing hub is apparently running, so under normal circumstances the SAMP panel at the bottom right of the Control Window should be active all the time. This means that you don't need to do any explicit preparation to communicate with other SAMP-aware applications. If you want to return to the previous behaviour (hub only started by explicit user action), use the `-nohub` flag on the command line. You can connect and disconnect with the hub by clicking the connection logo at the right of the SAMP panel.

    The JSAMP library is upgraded to JSAMP v1.2, which fixes one or two bugs and supports the experimental Web Profile, though Web Profile support is not switched on by default.

  Other enhancements
    - Random Groups HDUs are now tolerated, though not interpreted, within FITS files.
    - Add quintuple match option to multi-table match window (someone requested it!).
    - You can now re-activate a row in the table viewer window by deselecting and then re-selecting it.
    - Expressions in column selectors are now left (and coloured grey) rather than deleted in the case of a syntax error.
    - Improve text rendering in Available Functions window.
    - GAVO load dialogue now uses fixed-width font for SQL entry.
    - Registry search now includes Publisher field by default.
  Bug fixes and workarounds
    - JDBC table input handler now effectively downcasts BigInteger/BigDecimal types to Long/Double. The PostgreSQL JDBC driver seems to use the Big* types routinely for numeric values (which I don't think it used to do).
    - Add workaround for J2SE bug #4795134, which could cause errors when reading compressed FITS files.
    - Fix FITS character handling bug which could cause corrupted FITS files on output in presence of non-ASCII characters.
    - Fix (some) JDBC connection leaks.
    - Attempt case-sensitive matching before case-insensitive for column names.
Version 3.9 (27 October 2011)
  Crossmatching:
    - Additional asymmetric match options have been added to the Pair Match window - as well as the old symmetric Best Match option, you can now choose to do a match which identifies the best match for each row of one or the other input table (see Output Rows Selector Box). They correspond to finding the best match in table B for each row in table A, and in crowded fields often provide more intuitive semantics than the previous symmetric `best` option (in non-crowded fields there is generally no difference). This replicates the matching performed by some other tools, including Aladin.
    - New Match Algorithms, 2-d Cartesian Ellipses and Sky Ellipses, have been introduced to permit matching of general elliptical, rather than just circular, regions in both planar and sky coordinates. Another, N-d Cartesian with Errors, has been added for dealing with per-object errors in Cartesian coordinates (previously per-object errors could only be handled in sky coords).
    - Fixed a significant bug in sky crossmatching. If all points in a table were on one side of the RA=0 line, but the error radius extended across that line, matches on the other side could be missed. Matches could also be missed if different tables used different conventional ranges for RA (e.g. -180..180 in one case and 0..360 in another). This fix may in some, but not most, cases result in slower matching than previously.
    - Semantics of the Sky With Errors match algorithm have changed slightly.
  Notable usability improvements:
    - You can now change the column order of a table by dragging the rows up and down in the Columns Window.
    - Algebraic functions involving angles are now mostly available using degrees as well as radians. The `Coords` class has been replaced by `CoordsDegrees` and `CoordsRadians` classes providing sky coordinate functions, and a new class `TrigDegrees` provides normal degree-based trigonometric functions alongside the radian-based versions in `Maths`. The functions in the various activation action classes now take degrees and not radians. Some of the old function names have changed to make clear that they use radians and not degrees.
    - The File|Discard Table action in the Control Window can now remove multiple tables at once if more than one is selected.
    - ADQL parsing and syntax highligting has been added to the TAP load dialogue, thanks to Grégory Mantelet's ADQL library.
    - TAP queries are now synchronous by default (the Synchronous checkbox is now checked by default).
    - The SQL Query Dialogue (finally) has a multi-line entry field for SQL query text.
    - Add To Browser button to Help Window - this displays the currently displayed help page in your normal web browser.
    - New convenience button added to Available Functions window which is a shortcut to display of the expression syntax in the Help browser.
  Other upgrades and enhancements:
    - JSAMP has been upgraded to version 1.3-1. The main change is that the Web Profile is now enabled by default in the SAMP hub that TOPCAT launches. There are also more options in the Hub menus, and it will overwrite any moribund `.samp` file at startup, which should eliminate annoying persistent "404 No handler for URL" warnings.
    - Add Delete On Exit checkbox to Running Jobs tab of TAP load dialogue. Jobs are now created by default with Delete On Exit set true (you can change the default with the Deletion menu).
    - You can now run JyStilts from the `topcat-*.jar` jar files in the same way as from `stilts.jar`.
    - Add experimental system properties `star.basicauth.user` and `star.basicauth.password`.
    - Added the experimental `topcat.exttools` system property to allow custom tools to be added to the main toolbar at runtime.
    - Improve resilience of multi-cone operation in the presence of unreliable or inconsistent DAL services.
    - Added new constants to expression language `POSITIVE_INFINITY`, `NEGATIVE_INFINITY` and `NaN`.
    - Add `-running` flag which loads tables specified on the command line into a existing instance of TOPCAT if one is already running.
    - Add new `join` function to Arrays class to combine array elements into a string.
    - TAP load dialogue uses modified upload ID as per most recent TAPRegExt draft. This may cause some TAP services incorrectly to appear not to support uploads if they have not made a similar update.
  Bug fixes:
    - Improved some issues (reporting wrong row subset counts and membership) related to changing subset definitions.
    - Fix cone search verbosity parameter so that VERB=3 is not erroneously ignored.
    - Fix bug introduced at v3.7 related to labelling loaded files (improper handling and propagation of `LOAD_SOURCE` table parameter).
    - A PARAMref element with no referent in a VOTable no longer causes an uncaught NullPointerException.
    - Fix a small bug related to enabledness of buttons in control window and hub connection.
    - Work round an obscure java misfeature which could cause the wrong cell to be edited if a sort interrupts an edit.
Version 4.0b (28 March 2013)
  TOPCAT version 4 includes a complete rewrite of the plotting (see below for details). The new plotting functionality is however experimental and changes may be made to the GUI following user feedback. For this reason, the classic plot windows remain available from their usual toolbar buttons and the new plot windows are currently hidden away in the Graphics menu. The "b" designation of this version acknowledges the experimental nature of the visualisation changes, but other new features are considered stable.

  Logo:
    I finally bid an affectionate farewell to the Top Cat Hannah-Barbera cartoon graphic. Never having had any legal right whatsoever to use this logo my conscience has eventually got the better of me and TOPCAT now has an excellent new logo kindly drawn by my friend Phil Hall. It's still a yellow cat.
  Plotting:
    Four new "Layer plot" windows are available from the Graphics menu: Plane, Sky, Cube and Sphere layer plots. These feature a new more powerful (and, yes, more complicated) user interface, and are fully documented in Appendix A.4. New functionality includes:
    New Sky Coordinate Plot
      - Choice of projection: Sin (rotatable), Aitoff, Plate Carrée
      - Data and view sky coordinate systems selected separately: options are equatorial, galactic, supergalactic, ecliptic
      - Sky coordinate grid labelled and visible at all zooms
    New data plot options
      - vectors
      - ellipses (with position angle)
      - pair, triple, ... data point lines/polygons
      - contours
      - variable size markers
    Improved interactive response
      - In 2d and sky plots mouse wheel zooms around cursor position
      - In 2d and sky plots you can drag the plot around
      - In 3d plots right mouse button recentres cube on selected point
      - In 3d plots zooming zooms data in the cube rather than enlarging the cube wireframe itself
      - Many controls are sliders which update the plot as you slide
    New plot colouring modes
      Density colour coding for all plot types, with density colour map based either on dataset colour or chosen from a fixed set. Flat, transparent and aux colour coding still available as before.
    Better support for large datasets
      Several features have been introduced to provide more meaningful visualisation of large datasets. Improved density-like plots and contours give you better ways to understand plots containing many more points than there are pixels to plot them on. There is separately some improvement in scalability: up to roughly 10 million points is currently feasible depending on available memory etc, though it depends what you're doing. However, I hope to improve this limit in future.
    Improved axis labelling
      - Choice of font size and style
      - Option of LaTeX input for non-ASCII characters etc
      - Log axes labelled better
      - Minor tick option
    Legend options
      External or manually positioned internal placement.
    Analytic function plotting in 2D
      Plot functions of X or Y coordinate using TOPCAT expression language.
    (Note this plot change list was missing from the v4.0 release and retrospectively added at v4.0-1).
  Other new capabilities:
    - Use MOC footprints to speed up multi-cone searches, including footprint icon display in multicone window.
    - Add IPAC output format.
    - Add new class KCorrections to the expression language, containing a method for calculating K-corrections following the method of Chilingarian and Zolotukhin.
    - VOTable input and output are now supported for version 1.3 of the VOTable standard.
    - The version of the VOTable format used for VOTable output can now be selected, by using the system property `votable.version`. Output version is VOTable 1.2 by default. VOTable output no longer includes `schemaLocation` attribute.
    - You can now reference tables in multi-extension FITS files by name (EXTNAME or EXTNAME-EXTVER) as an alternative to by HDU index.
  Other enhancements:
    - ADQL parsing in the TAP window can now highlight all unknown symbols not just one of them. This is possible by upgrading to the official v1.1 of Grégory Mantelet's ADQL library, which improves some other aspects of ADQL parsing as well.
    - Add new function `hypot` (=sqrt(x*x+y*y)) to the `Maths` class in expression language.
    - Add new `split` functions for string splitting to the `Strings` class in expression language.
    - Some changes to the `toString` function: it now works on non-numeric values, gives the right answer for `Long` integers and character values, and returns a blank value rather than the string "null" or "NaN" for blank inputs.
    - Sexagesimal to numeric angle conversion functions now permit the seconds part of the sexagesimal string to be missing.
    - Changes to the IPAC format definition are accommodated: the "long"/"l" type, which is apparently now official, no longer generates a warning, and headers may now use minus signs instead of whitespace.
    - Fixed SAMP table loads to honour "name" parameter.
    - PNG graphics output no longer has transparent background.
    - Upgrade JSAMP library to version 1.3-3.
    - Work around change in VizieR output so that VizieR catalogue searching works again. This may be a temporary change.
    - Update URLs for GAVO Millennium database service at request of Gerard Lemson.
    - Add new class Coverage to the expression language containing MOC-related functions (currently, just `inMoc`).
    - Add explanatory section to manual on Multi-Object Matches.
    - Add `-debug` flag to manage logging messages better.
  Bug fixes:
    - Fix serious and long-standing bug (bad TZERO header, causes subsequent reads to fail) for FITS output of boolean array columns.
    - Fix small but genuine sky matching bug. The effect was that near the poles matches near the specified threshold could be missed. The bug was in the PixTools library, fixed at the 2012-07-28 release.
    - Fix bug which failed when attempting to read FITS files with complex array columns (`TFORMn=rC/rM`).
    - Fix failure when loading very large sequential tables.
    - Fixed table concatenation so that column datatype array size etc is consistent with both input tables not just the first one.
    - Adjust SQL writer to avoid type error for MySQL.
    - Fix plotting bug that might have caused mysterious failures to update the plot. Or it might not.
    - Fix ADQL parsing in TAP window so that TAP_UPLOAD tables are treated correctly.
    - Fix bug which could cause truncation of strings in FITS and possibly VOTable output when tables were hand-edited to add strings longer than previously-declared length.
    - Fixed bug in multi-table matches (>2 tables) which could result in output rows with columns from only a single table, i.e. not representing an inter-table match.
    - Fix bug in HMS sexagesimal formatting: minus sign was omitted from negative angles. Now the output is forced positive.
    - Fix minor bug associated with deleting the current row subset (this now causes All to become current).
    - Cope with 1-column CSV files.
    - Fix (some, though probably not all) possible bug(s) related to running on Java 1.7 on Mac.
    - Use the correct form "`rows`"/"`bytes`" rather than "`row`"/"`byte`" for TAP capability unit values.
    - Infinite floating point values are now correctly encoded in VOTable output ("`+Inf`"/"`-Inf`", not "`Infinity`"/"`-Infinity`" as in previous versions).
    - Fixed some layout problems which could lead to zero-width text entry fields for RA/Dec.
    - Fixed bug when attempting to explode a hidden array column.
    - Fix error bar rendering bug which could result in diagonal lines being offset near the edge of plots.
    - Fix problem with GUI locking up when plotting outsize histograms.
    - Fixed bug in stacked line plot which caused scribbly drawing in the presence of null X axis values.
    - Fixed problem with row highlight messages bouncing for ever between applications when the Transmit Row activation action is in use.
    - Improve behaviour when deleting a parameter in the Parameter Window.
Version 4.0-1 (1 July 2013)
  New Functionality
    - Add read-only support for CDF (NASA Common Data Format) files. Currently, no attempt is made to present time-like values in a human-friendly way, but this may improve in a future release. The SAMP `table.load.cdf` MType is also supported for receiving CDF files.
    - Improve handling of HTTP basic authorization. HTTP 401s now pop up a user/password dialogue window, unless the `star.basicauth.*` system properties have been set up.
    - Add options to calculate the (scaled or unscaled) Median Absolute Deviation in the Statistics window.
  Minor enhancements
    - Now subscribes to SAMP `voresource.loadlist.tap` MType, accepting resource list in TAP load dialogue "Select Service" tab.
    - The Columns window now makes a better attempt at displaying non-standard per-column metadata of unusual types, in particular array values.
    - Line plotting improved in layer plots (including better dashing, new antialias option).
    - Implemented fixes to reduce the chance of users inadvertently overloading external Cone/SIA/SSA services with multicone-like queries. First, fix it so that abandoned queries are properly terminated, rather than continuing to hit the server until completion or JVM shutdown. Second, implement a sensible default maximum value for the Parallelism field in the multi-cone (etc) panel (though this may be adjusted with a system property).
    - Source code is now managed by git and not subversion. The format of the "Starjava revision" string reported by the `-version` flag and the Help|About menu item has changed accordingly.
  Bug fixes
    - Fix CSV regression bug introduced at v4.0b - CSV files now work again with MSDOS-style line breaks.
    - TAP example queries now quote table and column names where necessary. This fixes a bug that was particularly evident with the VizieR TAP service for which nearly all table names are not legal ADQL identifiers.
    - Quoting behaviour has changed when generating SQL to write to RDBMS tables. This ought to reduce problems related to mixed-case identifiers. However, it is possible that it could lead to unforseen new anomalies.
    - Fix bug with reading session files containing 1-column tables.
    - Fixed FITS output bug which could result in badly-formed string-valued header cards (no closing quote).
    - Turn off layer plot optimisation that could result in lost precision for double values.
    - Fix layer plot bug that broke the plot if both handles of a range slider were dragged to the same position.
    - Fixed it so that layer plot axis range settings are reset when the Rescale button is used.
    - Fixed a bug that caused an exception when a table in a layer plot was deleted from the application.
    - Fixed a bug when zooming way out from a sky plot.
Version 4.1 (7 March 2014)
  In this version, the new plotting windows appear for the first time in the main Control Window toolbar, and are no longer considered experimental. There have been many changes to their user interface and functionality since the last release. The old plotting windows are still available from the Control Window Graphics menu, but are now considered somewhat deprecated, and will not be developed or fixed further.

  Navigation changes to the new plotting windows:
    - In 2d plots, right-button drag (or ctrl-drag) does a 2-d anisotropic zoom - you can stretch or squash the plot in both directions.
    - In 3d plots, right-button drag (or ctrl-drag) does a 2-d anisotropic zoom along the 2 axes most face-on.
    - In 3d plots, middle-button drag (or shift-drag) slides the plot along the 2 axes most face-on.
    - In 2d plots, the pan/zoom actions (wheel, pan-drag, zoom-drag) can be done outside the plot to affect just one axis.
    - Most navigation mouse actions now show visual feedback on the screen.
    - A new tab Navigation is added to the Axis controls. This lets you configure zoom/pan actions, for instance selecting zoom factor and X/Y/XY zoom options for when mouse wheel is used.
    - A hints panel is added below the plot showing current mouse navigation actions.
    - Removed zoom in/out buttons in the toolbar of the layer plot windows; there are better ways to zoom.
  Other changes to the new plotting windows:
    - Histogram plot type added. You can also add histograms to a normal plane plot if you want to.
    - Layer plot windows now have a progress bar at the bottom for loading data, and optionally for other potentially slow operations like replotting, identifying a point, turning blob-selected points into a subset etc.
    - For very large/slow plots, intermediate subsampled plots are optionally displayed while panning/zooming to improve responsiveness.
    - Toolbar buttons rearranged; the buttons for adding and removing layer controls are now in the layer control panel not the main plot window toolbar.
    - When a pair crossmatch completes successfully, you get the option to plot the results, which shows you exactly how the located matches relate to the input positions (pairs of points are plotted).
    - Text label plotting now has crowding configuration options: according to configuration, text labels are only drawn if there aren't too many close together.
    - New grid and label colour configuration options for plane and sky plots.
    - More colour maps added.
    - Antialiasing option added for grid line and label drawing.
    - New auto transparency shading mode.
    - Add some padding around auto-ranged plot limits.
    - Changing table in a plot now tries to retain the coordinate values if they still make sense.
    - Axis tick labelling improved, including avoiding overlapping tick labels.
    - Sky plot re-ranging improved: new data set now re-ranges unless lock button is set.
    - Clip selector added for density and aux colour maps, which means you can now use just part of a colour map, giving you much more control over colouring.
    - Sky plot position formatting now honours sexagesimal setting.
    - Some minor threading/performance improvements.
    - Experimental time plot type added. This plot type is considered experimental and appears in the Graphics menu but not currently on the main toolbar. It can plot time series and spectrograms. May be improved in future versions.
    - The control for plotting pairs of points works differently (now has its own layer control not just a Form). The triple-point form (which didn't work properly) is withdrawn for now.
  Other enhancements:
    - A new experimental SAMP message `table.get.stil` is supported, allowing SAMP clients to retrieve tables from TOPCAT.
    - URL selector fields in Activation Action window are now editable.
    - Add cuboid match algorithm to match windows.
    - The Exact matcher now considers scalar numeric values equal if they have the same numeric value; they are no longer required to have the same type.
    - Array-valued per-column metadata items are now displayed properly.
    - The `toString` function now works for byte and boolean values as well as other data types.
    - Replace the (slightly dangerous, also undocumented) Apply Subset option in the table viewer window with a new Highlight Subset option. Also add a new Highlight Subset option in the Subsets window.
    - In the old-style histogram plot, exporting it now provides cumulative counts if the visible histogram is currently in cumulative mode.
    - Keyboard focus is more helpfully positioned by default in some dialogue windows (it starts off in the first text field).
  Bugfixes etc:
    - Fix a registry access bug related to namespaces. It is now finally possible to query the STSci/NVO/VAO registry, as well as the AstroGrid and Euro-VO registries, from the Cone/SIA/SSA/TAP VO windows. Queries to the STSci registry have not been working since mid-2010 as a consequence of bugs in (mostly) the TOPCAT client and (partially) the STSci registry service.
    - Work around bug in MacOS text rendering in plots that painted text in the wrong direction when not horizontal (e.g. letters going backwards when running vertically). The workaround involves defaulting to antialiased text when drawing axis grids for MacOS. As well as getting the text the right way round this does look a bit nicer, but it is also perceptibly slower. If speed is more important than correctness you can turn it off using the Antialias checkbox in the Axes-Grid tabs of the various plot windows.
    - Withdraw Labels tab in the Sphere plot, since it didn't do anything.
    - Rename the File menu in most windows to Window, which is much more appropriate.
    - Fix bug when concatenating tables whose data cells may have been edited by hand.
    - Fix service selection bug (NullPointerException) in multi-SIA/SSA windows.
    - Fix bug which prevented access to long integer array elements from expression language.
    - Fix bug in Statistics window so that Boolean columns correctly report mean values (true/true+false proportion).
    - Fix TST input handler so TST files with fewer than 3 columns can be read.
    - Upgrade JSAMP to version 1.3-4 (hub now supports web clients with `https` URLs).
    - Moved text documenting `table.load.cdf` and `table.load.stil` SAMP MTypes from the transmit section (wrong) to the receive section (right) of this document.
    - Minor improvements to CDF support.
    - Fix some plot threading issues.
    - The reported point count is improved in plots.
    - Better handling of OutOfMemoryErrors during plotting.
    - Better handling of LaTeX errors in axis labelling.
Version 4.2 (4 July 2014)
  Significant new functionality and changes:
    - Add the new CDS X-Match Upload Window. In most cases (matching with a table that can be found in VizieR) this window can and should be used instead of the old Multi-Cone window - it is much faster. The button for this window replaces the MultiCone button in the main Control Window toolbar. MultiCone is still available from the VO and Joins menus, but is now for most purposes deprecated.
    - Windows with a Registry Query Panel can now talk to the registry using either RI1.0 (the only option in previous versions) or RegTAP. RegTAP is generally much better (faster, less bandwidth, more reliable), and is the default choice, but a selector allows you to revert to RI1.0 if preferred.
    - The "frame"-style zooming that was used in old-style plots is now available in the new-style plots - drag the mouse using the middle button or shift key.
    - The TAP Window button replaces the Concatenate window button on the toolbar. The Concatenate window is still available from the Joins menu. This is not new functionality, but the UI change reflects the growing usefulness of TAP services.
  Minor improvements:
    - Form configuration options are now preserved, rather than reset, when a new table is selected in one of the plot windows.
    - Registry search panels now display resource count at the bottom of the resource list.
    - Update the endpoint for the NVO/VAO RI1.0 registry (now deprecated in favour of RegTAP), on advice from Theresa Dower.
    - Fixed TAP load dialogue so that by default it stays open after a table is loaded (the Stay Open option is set true by default).
    - Improve TAP window Running Jobs display. The Job URL is now always shown even when the other job details scroll off screen, and the details scroll to the top not the bottom when a job is selected or refreshed.
    - Upgraded Gregory Mantelet's ADQL library to version 1.2. Better ADQL parsing.
    - Modify the way antialiasing is controlled in plot windows. The Grid antialiasing option, where present, now just covers the actual grid lines. Text antialiasing is now selected with a new "Antialias" option in the (now possibly misnamed) "Text Syntax" item in Font configuration. This now affects the Aux axis and Legend labelling as well as the grid labelling.
    - Added new graphics output format `png-transp` to generate PNG files with transparent backgrounds.
  Bug fixes:
    - Set antialiasing on by default for OSX - get it right this time.
    - Fixed some bugs related to TAP table uploads.
    - Fix out-by-one error in reporting of Row of min/max values in Statistics window.
    - Add missing geometric reserved words to ADQL reserved word list. Has a slight effect on ADQL validation in TAP window.
    - No longer disable "View URL As ..." options in Activation window when no suitable columns are present.
    - Fixed bug in which cube plot navigation help button gave you sphere plot help and vice versa.
Version 4.2-1 (13 November 2014)
  New functionality:
    - Add (experimental) read-only support for Gaia/DPAC GBIN format.
    - Add special variables `$ncol` and `$nrow` to the expression language to refer to the column and row counts in the underlying table. The special variable `index` is also deprecated in favour of `$index` or `$0`.
    - Support viewing tables up to 231 (2 billion) rows in the table viewer window. The previous limit was 227 (134 million) rows. This does not necessarily mean that using TOPCAT on Gigarow tables is a good idea!
  Minor improvements and bugfixes:
    - Change the default RegTAP registry endpoint to `http://reg.g-vo.org/tap`, which should have good reliability, since it can point to different RegTAP services as required.
    - Add some more colour maps for aux/density shading.
    - Fix regression bug (introduced at v4.2) which caused authentication to fail when using the SQL Query load dialogue.
    - Attempting to write FITS tables with >999 columns now fails with a more helpful error message.
    - Somewhat improved Unicode handling in VOTables. If you load a VOTable with columns marked `datatype="unicodeChar"` and save it again, the columns now remain `unicodeChar` instead of getting squashed to type `char`. Some lurking Unicode-related issues remain.
    - Fix time plot to work for ISO-8601 times. This change also breaks use of ISO-8601 times in non-time plots, but that didn't work particularly well before. Please complain if this change of functionality causes a problem.
    - Fix problem with activation action image viewer selection box.
    - Update JSAMP to v1.3.5.
Version 4.2-2 (6 February 2015)
  Plotting enhancements:
    - New Linear Fitting form for Plane plot. This reinstates behaviour available from old plot windows, but it provides some more options, like point weighting.
    - New SizeXY form, which allows plotting (optionally autoscaled) markers with horizontal and vertical extents independently determined by input data.
    - New Frame fixed control in plot windows with two tabs, Size and Title. Size allows explicit setting of output plot dimensions and alignment in pixels - can be useful when exporting plots. Title lets you add a text title at the top of the plot.
    - New Save/Import options in Histogram window allow you to export histogram bin data as a new table (this reinstates behaviour available from old plot windows).
    - More flexibility when assigning colour maps, in the Aux Axis control, Density shading mode, and Spectrogram layer control. These now provide a Scaling option allowing use of Square and Sqrt mappings as well as Linear and Logarithmic, and a Quantise slider allowing quantisation of the colour map to discrete levels.
    - Rescale Y button added to Histogram window.
    - Histogram normalisation option adjusted so that total area under bars, rather than total height of bars, is fixed.
    - Tick Crowding configuration option added to Aux Axis control Ramp tab. Also changed default for Aux axis to use fewer ticks.
    - Some "dart" options (fixed-base open or filled triangles) added for plotting vectors.
    - Some "triangle" options (variable-base open or filled triangles) added for plotting ellipses.
    - Max Marker Size option replaced with with Autoscaling option in plot Size form. You can now optionally turn off autoscaling and specify marker size in pixels instead.
    - Every slider control in plot windows now has a little button on the right that resets it to its default value.
    - The text labels for configuration options and coordinate entry fields in the plot windows now provide a tooltip of the form "`name=value`". These strings give the STILTS parameter assignment corresponding to the current setting.
  Other enhancements
    - New Column Classification Window lets you add mutually exclusive subsets based on column contents.
  FITS I/O:
    - Reworked part of the FITS input implementation, in particular adjusting the way memory mapping is done to reduce resource requirements on some platforms. If you notice any difference, it should be reduced virtual and perhaps resident memory usage, and some (~10%?) performance improvements, when reading large FITS/colfits files. However, please report anything that appears to be working worse than before.
    - Colfits files can now be accessed from streams, not just uncompressed disk files (though that's not necessarily a good idea).
  MacOS packaging
    Some changes have been made to the MacOS DMG file/application bundle. I believe these are at worst harmless, but pre-release testing of platform-specific features is patchy, so problems are possible - please report if you find any, or if the following items don't seem to be working.
    - OSX application bundle adjusted so that the DMG file should work on any MacOS with either legacy Apple Java 6 or Oracle/OpenJDK Java 7+ installed.
    - OSX application bundle adjusted (I think) so that application working directory is user's home directory.
  Bugfixes and workarounds:
    - Fixed a query bug (missing `REQUEST=queryData` parameter) in the Multiple SSA Query window. This long-standing bug would have stopped this window working at all with well-behaved SSA services.
    - Fixed error in fits-var output (PCOUNT header card did not include block alignment gap).
    - Graphics coordinates are now calculated in floating point rather than as integers. This fixes problems that could cause scaled vectors, ellipses etc to be drawn with shapes or orientations badly wrong due to rounding errors. It also improves plotting of analytic functions, especially to vector contexts (PDF/EPS).
    - Fix some problems to do with zooming to very large/small plot axis ranges.
    - Hide error bars (etc) that would extend to negative values on logarithmic axes; previously they were being drawn in anomalous places.
    - Fix Aux axis positioning for 3D plots so that the numeric labels don't get snipped off at top and bottom.
    - Add a hack that allows LDAC FITS tables to be treated sensibly in auto-format-detection mode.
    - Make VOTable handling more robust against unknown (illegal) datatypes.
Version 4.2-3 (14 April 2015)
  Histogram enhancements:
    - New Kernel Density Estimate plotting option variants added in the Histogram and Plane plot windows: KDE, KNN and Densogram.
    - More flexible normalisation options for histogram/KDE plots: normalise by area, maximum bar height, or total bar height.
    - The Bars fixed control is now relabelled Bins, and has separate tabs for Histogram, KDE and General controls.
    - The existing Bin Size slider, and new kernel Smoothing sliders, now display current width in data units as the slider is moved.
    - More bar styles are available for Histogram plots; Semi Filled (the new default) and Semi Steps options make it easier to understand multiple overplotted data sets. Note Semi Steps does not currently export very nicely to PDF/EPS.
    - Sketch mode is switched off by default.
  Minor improvements:
    - More slider controls have options allowing explicit entry of values from the keyboard (colour map quantisation, marker/vector/ellipse scaling values).
    - More slider controls have text value readout displays alongside the slider (colour map quantisation, marker size/errorbar scaling values).
    - Column data read in as unsigned bytes will now be written out as unsigned bytes where the output format permits; previously they were forced to 16-bit signed integers. This affects FITS, VOTable and CDF I/O handlers.
    - The Subset Styles panel in table data layer controls now has a Visible checkbox indicating whether the subset undergoing subset-specific configuration is currently visible in the plot.
    - Be less strict about recognising colfits files (tolerate implicit TDIMn headers).
    - Tables specified on the command line may now use syntax that reads data from a unix pipeline.
    - OSX application bundle fixed to run application in user's home directory (broken in previous version).
  Bug fixes:
    - Fix minor ADQL parse failure when using TAP tables named without explicit schema prefix by service.
    - Fix regression bug (from v4.2-2) that caused problems in Histogram and Spectrogram layers: New subset from visible action wasn't working, and the displayed point count was always zero.
    - Work round FITS read bug that could cause problems for VOTables using inline FITS serialization, and possibly elsewhere.
    - Fix bug that caused trouble when auto-ranging a plot with a single sky position.
    - Catch and report the error properly if the user enters a bad explicit axis range (max value <= min value).
Version 4.3 (17 August 2015)
  TAP client enhancements:
    The TAP client GUI and implementation in the TAP Load Window have been much improved. As well as being generally more capable and easy to use, the GUI is now quite usable for services providing very large datasets, for instance TAPVizieR (~30,000 tables). In detail:
    - TAP service discovery is now done by default by requesting search terms relating to the tables, rather than the services, that you're interested in. The old (by service) GUI is still available in a different tab.
    - The TAP metadata display has been reorganised; schemas and tables are displayed in a searchable tree on the left of the panel, with details of the currently highlighted schema/table in tabs on the right. Organisation of tables at the schema level is now visible. Much more information about the schemas and tables is available, and it's displayed better.
    - The Columns and Foreign Keys metadata display tables can now be sorted by clicking on column headers.
    - Much more information about the TAP service is displayed, including a full service description and listing of available geometry functions, user-defined functions and data models (if the service/registry provides this information).
    - For large services, metadata acquisition is now done as required on a table-by-table basis, rather than attempting to download all the metadata up front. This works much better for services with very many tables.
    - The query entry panel has many new features, including multiple query entry tabs, full query text Undo/Redo, and limited support for pasting table and column names that have been selected in the GUI.
    - A new Quick Look mode has been introduced alongside the Synchronous and Asynchronous modes, to execute a query whose result is displayed but not loaded into TOPCAT.
    - The Examples menu has been extended to include various sub-menus with more ADQL query examples appropriate to the current service, including examples provided by the service itself for services supporting the (somewhat) standard `/examples` endpoint.
    - The Examples menu GUI has been modified to facilitate browsing, and a button is provided to link to web pages describing the selected example in more detail.
    - The TAP menu has new options for configuring Metadata Acquisition, Response Format, Upload Format, Service Discovery, and HTTP-level compression. The old Deletion menu has been moved under this TAP menu as Job Deletion.
    - Where supported by the service, the BINARY2 VOTable serialization is used by default to retrieve TAP results, which should reduce bandwidth and (marginally) improve handling of null values.
    - For upload queries, tables are now by default uploaded to the service using the TABLEDATA rather than BINARY VOTable serialization. BINARY ought to work, but at least some services (e.g. CADC) currently fail with BINARY uploads. The default can be changed using the TAP|Upload Format menu item.
    - There is a change in the way that TAP service metadata is interpreted: table/column names are now expected to be delimited if required. An attempt is made to fix up names that not delimited when they obviously should be. May cause some ADQL examples to work incorrectly in the presence of non-compliant service table metadata reports.
    - The ADQL syntax highlighting is now sensitive to User-Defined Functions declared by the service (if any are declared), so that misuse of UDFs or use of non-existent UDFs can signalled. This is thanks to an upgrade to Grégory Mantelet's ADQL parser library.
    - Improve error reporting in the face of non-VOTable TAP error responses. In many cases this makes it much easier to see what's going wrong with a TAP query.
    - As a diagnostic tool, when making TAP queries, a log message giving a roughly equivalent `curl(1)` command is now issued at the CONFIG level (visible using flags `-verbose -verbose`).
  Bugfixes:
    - Fix a serious bug in processing of FITS bit vector (`TFORMn='rX'`) columns. Values read from these columns are presented as a `boolean[]` array. In all previous versions of STIL the bits have appeared in that array in the wrong sequence (LSB..MSB per byte rather than the other way round). Apologies to anyone who may have got incorrect science results from this error in the past, and thanks to Paul Price for helping to diagnose it.
    - Fix a less serious bug with `TFORMn='rX'` processing; attempting to read a single-element bit vector column (`TFORMn=1X` or `X`) previously resulted in an error making the file unreadable. Values read from such columns are now presented as Boolean scalars.
    - Fix a VOTable reading bug relating to bit vector columns (`datatype="bit"`) appearing in BINARY/BINARY2 serializations. This one was more obvious, it would usually generate an error when attempting to read the file.
    - Fix serious bug in time conversion for CDF TIME_TT2000 data types. This was giving completely wrong (deep future) labels when using TIME_TT2000 columns in time plots.
    - Fix sky plot vector bug: delta latitude and delta longitude values were being used the wrong way round.
    - Upgrade JEL to v2.0.2. Fixes problem with evaluating void-typed expressions (especially user-supplied activation actions), and possibly some other obscure bugs.
    - Prevent submission of multi-cone/SIA queries for which the Search Radius parameter is blank.
  Minor enhancements and behaviour changes:
    - Added some functions to the Arrays class that return array-valued results from array-valued parameters: `add`, `subtract`, `multiply`, `divide`, `reciprocal`, `condition`.
    - HTTP-level compression is now requested (`Accept-Encoding gzip` request headers included) in most places where it makes sense. This should substantially reduce required bandwidth in communications with HTTP services that support this.
    - When clicking on the headers of columns to sort the rows in displayed JTables that show registry services and VizieR catalogues, clicks now cycle between three options (up, down, none) rather than just two (up, down).
    - Minor improvement to version reporting (reports java specification version, no longer issues warning for absent revision string).
    - Update JCDF library to v1.1 (minor changes to do with leap seconds).
    - Now only runs in PLASTIC mode if the `-plastic` flag is set explicitly (otherwise runs in the default SAMP mode). Previously it ran in PLASTIC mode if a `.plastic` lockfile was present.
    - Activation action summary messages are now written via an INFO log message rather than just printing to standard output. To see them you now need to run the application with the `-verbose` flag. The various `exec` functions however do now write their output direct to stdout/stderr rather than including them in a return value.
    - Custom Code activation action invocation behaviour has subtly changed when one of the values in the expression is from an integer or boolean column, and that column has a blank value. In that case, it's not possible to represent the column value properly to the function (since integer/boolean values can't be null). Previously, the function was invoked with a zero/false value where the null would have been. Now, the function is not invoked at all. Note this only applies to Activation Actions (which are expected to have side-effects); expressions evaluated as column values etc are, as previously, executed but the result is ignored.
    - Modify the heuristics that determine whether the first row of a CSV file is a header.
Version 4.3-1 (22 October 2015)
  New features:
    - A new Hints tab is added to the TAP load dialogue, with useful tips to jog your memory about ADQL syntax.
    - The expression language has a new way of referring to a column; if you use the form "`Object$`<column-id>" you get the value as an Object not a primitive. This is a special-interest measure for user-defined activation functions that need to see null numeric values.
    - Adjustments to the GBIN input handler: avoid descending into Class-typed members of gbin list objects, and add logging for object->column translations.
  Bugfixes
    - Fix error reporting bug when a non-VOTable response is received from a TAP service.
    - Fix TAP service location bug that caused an error if searching in By Tables tab with only Service field selected.
    - Fix bug in ADQL parsing that failed to recognise column names that are delimited identifiers when qualified by table names.
    - Bugfix updates to ADQL library: disallow use of spurious schema names for tables with no schema name; disallow table-qualified names in ORDER/GROUP BY clauses.
    - Upgrade to JCDF v1.2 - fixes a bug when reading large (multi-Gb) CDF files.
Version 4.3-2 (27 October 2015)
  Crossmatching bug fix
    Fix a long-standing crossmatch bug relating to range restriction during pre-processing. This could have caused missed associations (but not false positives) near the edge of coverage regions when using per-row errors, if the scale of the errors differed (especially differed significantly) between the matched tables. It affected match algorithms Sky with Errors, <n>-d Cartesian with Errors, 2d_ellipse and Sky Ellipses only. Thanks to Grant Kennedy (IoA) for reporting this bug.
  Density plots
    Some more options for making weighted density plots have been added. Since v4.0 the Density shading mode has let you see the density of plotted points, but this lacked some features. Three new ways to do density plots are added; these all give you the option of weighting by an additional coordinate (like the Aux mode), choosing the combination method (mean, median, sum, max, ...), and displaying the quantitative value-colour mapping on the shared colour ramp (previously aux axis) beside the plot. The new density plots are:
    - Weighted shading mode, using shaped marker kernels on the screen pixel grid, available for all plot types
    - SkyDensity form, using HEALPix bins on the celestial sphere, for the Sky plot
    - Density form (later replaced by Grid form) using square N*N screen pixel bins, for the Plane plot
    The details are somewhat experimental and may undergo some adjustments in future releases (feedback welcome).
  Colour maps
    There are various changes affecting selection and display of colour maps used for density and aux axis shading:
    - The default colour map for Aux mode, and other layers using the shared colour map, is no longer Rainbow! It's Inferno. Rainbow colour maps are much hated by visualisation experts. Of course you can still choose Rainbow if you like.
    - Add some new colour maps: Viridis, Inferno, Magma and Plasma from Matplotlib 1.5, the SRON rainbow variant developed by Paul Tol, some diverging maps (HotCold, RdBu, PiYG, BrBG) and a qualitative constant chroma/luminance map HueCL.
    - The options for Density and Aux shading are now mostly the same as each other except where there's good reason to differ. Previously they were different in haphazard ways. The order of the options is now a bit more rational too (similar maps are grouped together, more common ones near the start).
    - An attempt is made to give the default form of each colour map a sensible name, without leading minus signs.
    - Fix it so that the whole range of each map is distinguishable from white. This is a good idea when you're plotting symbols on a white background, which is common in topcat. Perhaps there are cases it's not such a good idea; if you think so, complain and I may change it back.
    - Try to fix it so that all the colour maps go in the same direction (light->dark) where applicable.
    - Throw out a couple of particularly useless colour maps.
    - Colour map ramp display is now different for non-absolute maps; their effect is shown on a selection of base colours, not just for one base colour.
  Minor items
    - Try harder to identify epoch columns (suitable for time plot), in particular look for VOTable `xtype` of JD or MJD, and `units` of year.
    - Add some functions to the Tilings class to do with solid angles (`healpixSqdeg`, `healpixSteradians`, `steradiansToSqdeg`, `sqdegToSteradians`, `SQDEG`).
    - Tweaked `topcat` startup script to work better if it's invoked from a symbolic link.
    - Fix the description in SUN/253 document of Sky ellipse and vector plot forms, previously they were not distinguished from the Plane variants of those forms.
    - Fix plot bug; titles were painted in white for pixel export formats.
    - Rationalise plot report logging. Some more diagnostic information about plots is now logged at the INFO level (visible if topcat is run with the `-verbose` flag).
Version 4.3-3 (10 June 2016)
  Expression Language
    The JEL library underlying the expression language parser has been upgraded to v2.1.1 (thanks to Konstantin Metlov), now supporting variable-length argument lists among other things. This allows the following improvements:
    - New functions that support any number of arguments are provided: `array`, `intArray`, `stringArray` in class Arrays; `concat`, `join` in class Strings; `sum`, `mean`, `variance`, `stdev`, `min`, `max`, `median`, `countTrue` in new class Lists; and `exec` in activation class System.
    - Some old lists of similarly-named functions with fixed numbers of arguments have been replaced by single functions that take an arbitrary number of arguments (e.g. `array(x1)`, `array(x1,x2)`, ... `array(x1,x2,x3,x4,x5,x6,x7,x8)` replaced by `array(values...)`).
    - The 2-argument `min`/`max` functions in class `Arithmetic` have been renamed `minNaN`/`maxNaN` to avoid confusion, but in most cases existing expressions involving min/max will work as before.
    - Some functions that used to require string arguments will now auto-convert numeric types (e.g. `exec("do_stuff.py",toString(RA),toString(DEC))` can now be written `exec("do_stuff.py",RA,DEC)`).
    - You can now implement user-defined functions with variable numbers of arguments.
    - Writing large (>=2**31) literal integers used to fail with and inscrutable error message. Now the message tells you to append the "`L`" character.
  Time plot
    The Time Plot window (available from the Control window Graphics menu) has been enhanced so that it can make multi-zone plots - multiple plots stacked vertically that share the same horizontal (time) axis but have independent vertical axes. The time plot itself and this multi-zone feature are currently experimental; in future versions they may be improved or changed, and the multi-zone feature may be extended to other plot types. Some other changes have gone along with this:
    - Plotted points (Mark form) in the time plot now supports shading modes as for other plot types.
    - The spectrogram layer now uses the (per plot, or more precisely per-zone) Aux colour map rather than a colour map specific to the layer. This means that the colour ramp is now displayed alongside the plot, so you can see quantitatively what colour corresponds to what value. It also means that to adjust the colour map, you now need to use the Aux fixed control rather than controls in the spectrogram's Style tab.
    - The plot window tries to guess the time coordinate and fill it in automatically.
    - The Function layer control now works in the experimental Time plot, rather than throwing an error. However, it doesn't work very well, since the time coordinate is in unix seconds rather than something more user-friendly.
    - Fixed a serious bug in ISO-8601 axis labelling in the time plot. In some cases axis labels were being drawn at positions badly different from the correct position.
  Miscellaneous enhancements and changes
    - This and subsequent releases target Java SE 6, so will no longer run under the (now very ancient) Java 5 runtime.
    - Add Fill plotting mode for Plane and Time plots.
    - The TAP window now uses blocking HTTP requests rather than repeated polls to wait for asynchronous TAP job completion from services that declare themselves UWS 1.1 compliant.
    - Improve sky plot border painting.
    - Clean up noisy Cubehelix colour map.
    - New function `countTrue` in class Arrays.
    - VERBose selector added to Cone Search dialogue.
    - UType matching is now case-insensitive when identifying likely columns in Activation window.
    - Replace Opaque Limit with Transparency config option for plane and sky density plots.
    - Update list of VizieR mirrors.
    - Changed implementation of GIF exporter for plots, from Acme to ImageIO. Shouldn't be any noticable difference.
  Bug fixes
    - Fix the sky join syntax example in the TAP window Hints panel, which was incorrect (comma and parenthesis misplaced).
    - Fix bug in cumulative histogram calculation.
    - Fix read failure for FITS files with non-blank TDIM for zero-length columns.
    - Fix bugs that led to timezone-dependent results when reading ISO-8601 or decimal year time columns.
    - Fix numeric field truncation bug in LaTeX table output.
    - Fix bug in which expression metadata was sometimes not revealed in Columns Window display following addition of a new synthetic column (regression bug since v4.0b).
    - Don't use white as one of the auto-selected plotting colours, since it's likely to be invisible (this was a regression bug introduced at v4.3-2).
Version 4.3-4 (13 September 2016)
  Visualisation and HEALPix
    - Add options (from layer control Report panel or plot window Export menu) to export the HEALPix density map calculated by a SkyDensity plot; either save it to disk or import it as a new table.
    - New Healpix layer control in the sky plot lets you plot tables that represent healpix maps (e.g. as exported from `SkyDensity` plot).
    - Add some HEALPix-related functions to the Tilings class: conversions from pixel index to sky position and conversions between ring and nested schemes.
    - Colour ramp Clip control (e.g. for the Aux Axis) now has a new Default checkbox. When checked, a default clip is applied, which avoids very light colours, and when unchecked you can use the double-slider over the whole range. Previously, the double-slider range was pre-clipped, so very light colours were not available.
    - Improve performance of some plot types. In weighted shading mode you can now adjust the colour map without appreciable delay. SkyDensity plots are somewhat improved.
  TAP/VO enhancements
    - The TAP window now honours the (TAP 1.1) `column_index` column if it is present in the `TAP_SCHEMA.columns` table. This means that columns can be displayed in a predefined, rather than random, order in the column metadata display tab if the service supports that.
    - The TAP window also now acquires and displays non-standard, as well as standard, table and column metadata items if provided by the TAP service. These come from non-standard columns in the `TAP_SCHEMA``.tables` and `.columns` tables, or from attributes in custom namespaces in the TableSet document, depending on metadata acquisition policy. Services can use this if they wish to report things like table row counts or column data limits.
    - Add VOSI 1.1-style `detail`-sensitive `/tables` endpoint query options to the TAP|Metadata Acquisition menu in the TAP window.
  Bug fixes and minor enhancements
    - The GBIN input handler can now pick up more metadata from the classpath. For suitable tables, metadata included in datamodel classes if present can be interrogated to provide table and column descriptions and UCDs. There are still some deficiencies of this functionality (no column order, utypes and units missing, large file "temp.xml" written to current directory) dependent on issues in the upstream Gaia libraries and ICD.
    - Fix bug that caused read failures for large (>0.5Gb) FITS files outside of the current directory on 32-bit JVMs. This was a regression bug since v4.2-2.
    - Fix long-standing bug that failed to release file descriptors when opening FITS tables (could cause an error if very many FITS files were opened).
    - Improve the Concatenation Window. You can now use algebraic expressions for the appended table columns, and changes to the appended table no longer reset the window state.
    - Fix minor border-painting bug in sky plot window (sky outline painted on GUI components).
    - Combiner option `stdev` replaces `variance` in density, sky density and weighted plot layers.
Version 4.3-5 (23 September 2016)
  - Add Lock Aux Range action to plot window toolbars and Aux Axis Control Range tab. This lets you prevent the display from updating the Aux colour ramp range during navigation. It also affects some dynamic Auto-Scale range calculations in a similar way.
  - Fix aux ranging bug in some plot types (SkyDensity, Healpix, Density, Weighted) that used an aux data range too small to show colour variations when Aux scaling was logarithmic and negative data values were present.
  - Add Registry menu to TAP load window, allowing list of RegTAP registries to be updated (as for other VO windows).
  - Improved performance (better memory use, faster) of some plot types (SkyDensity, Healpix, Density, Weighted).
Version 4.4 (8 March 2017)
  Visualisation improvements
    - The GUI has changed in the Form tab of plot window Data Layer Control panels. To add (and remove) forms there is now a Forms button that pops up a menu rather than the toolbar with form icons that used to be there. This change was necessitated because there were getting to be too many icons to fit in the default width of the toolbar. But it's probably an improvement anyway since you can now see the name of each available form as well as its icon.
    - Improved the documentation of plot Forms and Shading Modes in the user document - each option now has a screenshot showing it in action.
    - The colour selector widget now comes with a new Free colour chooser button, giving you various ways to select any RGB colour you like.
    - New Grid plot form, to plot a 2-d weighted histogram. This replaces the Density form, which has been withdrawn (Grid can do all the same things and more, except specify bin size in screen pixels).
    - New Quantile plot form, which can (e.g.) plot median lines through noisy data.
    - New Gaussian plot form for Gaussian fits to histograms.
    - New normalisation (scaling) option unit for histogram, KDE, and KNN layers.
    - New normalisation (scaling) options per_day etc for histogram, KDE and KNN layers in the Time plot window only.
    - The Histogram control is now available from the Time as well as the Plane plot window, so you can now plot histograms with a temporal horizontal axis.
    - Various tweaks to the details of how plots are positioned on the screen or in output graphics files.
  Miscellaneous enhancements
    - Fixed the match score (distance measure) for the Sky+X and Sky+XY matching algorithms. Previously, the score was a linear sum of the unscaled distances for the constituent matchers, which meant a Best match was pretty meaningless. Now, it adds scaled distances in quadrature, so Best matching should give you a somewhat sensible result.
    - The Sky with Errors and N-dimensional Cartesian with Errors matching algorithms now report output separations as scaled (dimensionless) values rather than in physical units. This means the results are more comparable, so Best match results will make more sense.
    - The Maths function `hypot` now takes an arbitrary number of arguments (instead of exactly two).
    - Added STScI service to default list of RegTAP registry endpoints.
    - Minor improvements to the logic in the Concatenation Window that tries to match up columns between the two tables.
    - Update JCDF library to v1.2-2 (2017-01-01 leap second).
  Bug fixes
    - Fix KDE/KNN plotting bug that could get scaling badly wrong for normalised cumulative plots.
    - Fix nasty Concatenation Window bug; the current subset and sort order of the Appended table were not properly taken account of in the output. This was a regression bug introduced at v4.3-4.
    - Fix a regression bug (since v4.3-2) in the Frame layer control; values entered were being ignored for image export or display or both.
    - Fixed a bug that could show Error information for the wrong job in the TAP Running Jobs tab.
    - Fix TAP window bug that prevented job status from being updated in Running Jobs tab.
    - Fix small bug in Plane/Time plot windows; horizontal axis label was sometimes off the bottom of the plot by a few pixels.
    - Fix subpixel offset of colour ramp frame in PDF/PostScript graphics output.
    - Remove spurious padding from EPS graphics output.
Version 4.5 (29 September 2017)
  New functionality
    - New STILTS Control in plot windows. This displays a STILTS plotting command that can regenerate the currently visible plot.
    - Saving and loading sessions now preserves algebraic expressions used to define columns and row subsets (previously only the fixed values were saved and the expressions were lost and could not be edited on reload). Note that sessions saved by this version cannot be loaded by older versions (though the other way round is OK).
    - New SkyGrid Layer Control can draw multiple sky system coordinate axis grids on sky plot.
    - New plot forms XYCorr and SkyCorr for error ellipses rotated as specified by Gaia-style correlation values.
    - Add click-header-to-sort action for a number of displayed JTables: the Columns, Statistics, Parameters and Subsets windows. This makes it easier to deal with very wide tables.
    - Add position angle calculation functions `posAngDegrees` and `posAngRadians` to expression language.
  Table I/O changes
    - It is now possible to write and re-read tables with >999 columns to FITS or colfits format. The new limit is 2^31 columns. This uses a non-standard convention; software that is not aware of the convention (e.g. CFITSIO or earlier STILTS versions) will only be able to use the first 998 columns of tables written in this way.
    - For VOTable columns that reference `COOSYS` elements, the relevant information is now visible (`CoosysSystem`, `CoosysEpoch`, `CoosysEquinox`) in the Columns Window.
    - Any columns referencing `COOSYS` elements read from VOTable-based formats (VOTable or FITS-plus) will now be written out to VOTable-based formats with equivalent COOSYS references included. Currently not table parameters though.
    - The default version for output VOTables is now VOTable 1.3. New output formats `votable-binary2-inline` and `votable-binary2-href` are now offered alongside the five previously available VOTable variants.
    - Slight changes to the FITS-plus output handler VOTable formatting in the primary HDU; now uses default output VOTable version rather than VOTable 1.1.
    - FITS keywords using the ESO HIERARCH convention can now be read as table parameters rather than ignored when reading FITS tables.
  Minor enhancements and changes
    - Added Durham Galaxy Formation Catalogue URLs to the Virgo-Millennium Simulation Query window (which has been slightly renamed from the GAVO Millennium Run Query window).
    - The Euro-VO RegTAP Registry is now included in the hard-coded list of options in VO window registry selectors.
    - Updated experimental TAP|Service Discovery|Reg Prototype menu option to match v1.1 of Data Discovery Note.
    - Replace option autoscale with unit in SkyVector and SkyEllipse sky plot forms.
    - Change autoscaling defaults for plot forms Vector, SkyVector, XYEllipse, SkyEllipse; autoscaling is now turned off by default. Apologies for this change in behaviour, but it's better for consistency with new layers XYCorr and SkyCorr, and presents less danger of misinterpreted plots.
  Bug fixes
    - Update PixTools (HEALPix) library to 2017-09-06 version (https://github.com/kuropat/eag-HEALPix, `447a7be073876dba32`). This fixes a bug in `healpixRingIndex` that could give the wrong value for small values of longitude near zero. It seems possible that this might have led to very infrequent missed associations when crossmatching in these regions, but tests appear to indicate that no such errors would actually have resulted.
    - Fix misfeature in SkyVector and SkyEllipse plot forms; these now preserve orientation on the sky even when the View and Data Sky Systems differ. Previously the Delta Longitude/Latitude and Position Angle parameters were always interpreted in the View, rather than the Data, sky system.
    - TAP examples are now picked up from the `/examples` document using more lenient rules (no requirements for a containing `vocab` attribute).
    - TAP Examples display line now copes better with long and multi-line names from service-provided examples.
    - Long fields (>10240 characters) in output CSV files are no longer truncated.
    - If a table is received from SAMP with a `table-id` that has already been seen, it will not be loaded (a SAMP error response is returned).
    - Fix bug in plot title placement.
    - Fix bug when saving tables generated from plots (e.g. SkyDensity HEALPix maps) that sometimes saved data from the wrong plot.
    - Fix bug in Statistics Window table export/import actions; it was failing if the Sum statistic was included in the presence of boolean columns.
Version 4.5-1 (7 November 2017)
  This is mainly a bugfix release, because of the issue with metadata bloat listed below. You are advised to update if you have v4.5.
  New expression language functions
    - New functions `desigTo*` for extracting positions from IAU-style object designations (like `2MASS J04355524+1630331`) - use with care.
    - New functions `polarDistanceDegrees` and `polarDistanceRadians`; these calculate the distance in 3d space between two positions specified in spherical polar coordinates.
    - New `phase` functions to help with phase folding given a known period. A new modulus function `mod`, whose output is always positive (unlike the `%` operator) is also added.
  Bug fixes and workarounds
    - Fix nasty bug introduced at v4.5 with STILTS integration; viewing plots added large numbers of table parameters with names "`uk.ac.starlink.topcat.plot2.TopcatLayer*`". This led to useless metadata bloat (potentially very many `INFO` elements) when saving previously plotted tables to VOTable or FITS-plus format. As well removing this bug, at this version any such metadata is discarded when loading tables into TOPCAT, so a load/save cycle with this version will get rid of it.
    - Upgrade JEL to v2.1.2: now you can use functions in the expression language that have the same name as table columns.
    - Modify the way that synthetic column expressions are represented in column description metadata.
Version 4.6 (24 April 2018)
  Activation and DataLink
    There has been a complete overhaul of the Activation Action system, partly motivated by the need to work with the DataLink standard, and some related DataLink functionality introduced:
    - A new Activation Window replaces the old one, with more flexibility, better configurability, better reporting, and better extensibility.
    - You can now configure multiple activation actions at once.
    - The result (success/failure plus detail message) is visible for each action performed.
    - New general-purpose actions available: Load Table, Run System Command, Send VOTable.
    - New DataLink-related actions: Invoke Service, Invoke Datalink Row, View Datalink Table.
    - The new framework is also much more extensible, so other actions will be added in the future, and it's also possible to plug in your own at runtime.
    - A new Datalink Window is added for viewing {links}-response tables and invoking their links.
    - DataLink-style Service Descriptor RESOURCEs in input VOTables (and FITS-plus tables) now become table parameters; they can be viewed in the Parameter Window with class `ServiceDescriptor`, and will survive a VOTable Save/Load cycle.
    Note at this release the Activation Window configuration is not persisted, so you have to set it up every time you load a table. In future releases, it is planned to save configuration state with table sessions.
  New expression language functions
    - Add class Gaia to the expression language. This contains functions for estimating distances from parallaxes and propagating astrometric parameters and errors to different epochs. These astrometric functions are not specific to data from the Gaia astrometry satellite, but are presented in a form convenient for use with the Gaia DR2 source catalogue.
    - New array manipulation functions `slice` and `pick` added to class Arrays.
    - New utility function `square` added to class Maths.
  Plotting enhancements
    - Various improvements to the Contour plotting form. You can now contour quantities weighted by a given coordinate, rather than just point density. The smoothing from weighted point samples to the grid being contoured can be performed using sum, mean and other combination methods, it now uses a Gaussian kernel rather than a square top hat, and performance is considerably improved especially at large smoothing widths. The contour levels used are now reported, so can be seen at the bottom of the Form tab in the control panel. The contours are now plotted correctly right up to the edge of the visible plot, and various bugs have been fixed.
    - The Histogram plot now offers the Combine option (sum, mean, median, min, max, stdev, etc) for weighted histograms. This means that you can plot e.g. the mean value of a given quantity per interval on the X axis rather than just the summed quantity. A corresponding (though somewhat less well-defined) option is also provided when plotting KDEs and Densograms.
    - The Combine option that configures how values are binned in various histogram-like plots (SkyDensity, Healpix, Grid, and since this version also Contour, Histogram, KDE) now has two new options, sum-per-unit and count-per-unit. These work like the existing sum and count options, but scale the combined values by the relevant unit (e.g. X axis unit or solid angle). Where these units are physical, a Per Unit parameter is also provided for scaling in convenient units: second, day, year etc for time (Time plot), and square degree, arcminute, arcecond etc for solid angle (SkyDensity, Healpix). In some cases, the default Combine values have changed.
    - The Histogram plot form now lets you export the calculated binned data per plot layer for histograms plotted in the Plane and Time plot windows as well as in the Histogram window (from the Report panel or Export|Layer Data menu).
    - The Linear Fit form is now available in the Time Plot window as well as the Plane Plot.
  Minor behaviour changes
    - The width of table selector widgets is now limited, so tables with very long labels no longer result in very wide windows.
    - Improvements in documentation of the expression language functions: in the Function documentation section classes are now listed in alphabetical order, and the documentation of each function is more complete, including descriptions of all parameters and return values, with examples in some cases. Some readability improvements have also been made in the Available Functions Window.
    - The Available Functions window icon is now a bit less ugly.
    - The IPAC table reader now matches data type specifications case-insensitively.
    - Adjust subset name assignment heuristics in Column Classification Window.
    - Updated URLs in Messier demo table.
    - Rearrange TAP|Metadata Acquisition menu options in the TAP window to reflect current practice and standards. The default behaviour (Auto) now uses VOSI-1.1-style scalable tables endpoint rather than VOSI-1.0 for relatively small services (this is still VOSI-1.0 compatible), the CADC option is withdrawn, and some of the other options are re-ordered.
  Bugfixes
    - Update JCDF to v1.2-3; fixes some CDF reading bugs.
    - Stop the right hand side of the subsets stack being obscured by the scrollbar when there are too many subsets to see at once.
    - Fix a bug in the Data Window Subset From Unselected Rows action - it was including all unselected rows rather than just the visible ones, as per documentation. This was a regression bug introduced at v4.2-1.
    - Prevent MultiCone window from sending cone search queries with `sr=NaN`.
    - Fix bug in VOSI 1.1 TAP metadata acquisition detail request URLs (spuriously doubled '/' character).
Version 4.6-1 (18 May 2018)
  Activation Action improvements
    There have been several improvements to the Activation Window. In most cases these were intended parts of the new activation framework introduced in v4.6, but didn't get completed before the (Gaia DR2-imposed) release date for that version.
    - Persistence: all activation state in the Activation Window is now preserved when you save a session.
    - Multiple activation: buttons are now provided to invoke actions on every (apparent) table row in turn, rather than just on a selected row.
    - Download URL activation action added.
    - Plot Table activation action added, as well as a corresponding URL invocation action in the Datalink Window.
    - Add/Remove buttons: the Activation Window now has toolbar buttons for adding and removing actions in the displayed list (previously these were only available as menu items).
    - `sleep` and `sleepMillis` functions added to System class.
    - Import Parameters option added to Load Table activation action.
  Bugfixes
    - Fix SoG internal image viewer to work with non-HTTP URLs.
    - Fix SAMP-related activation actions so they work with filenames as well as URLs for locations (as documented).
    - Fix a bug in the TAP client that caused a read error for result VOTables longer than 2Gb.
    - Introduce a fallback RangeSlider for use in plot windows when the JIDE-OSS one is unavailable. That cures some circumstances in which plot windows could fail, e.g. (apparently?) Java 10 on OSX or use of Nimbus Look&Feel. It does mean that range sliders may look ugly in at least some OSX environments, but at least it doesn't crash.
    - Improvements and bugfixes related to guessing activation service and resource types.
    - Fix minor GUI issue with selecting TAP services by double-clicking on their name in the selection tree.
    - Fix range bug; caused plot failure when plotting very large numbers with no variation (e.g. gaia_source solution_id).
  Minor upgrades and changes
    - Upgrade Grégory Mantelet's ADQL parsing library to v1.4.
    - Remove dependency on external library BrowserLauncher2 (`edu.stanford.ejalbert.BrowserLauncher`); now use `java.awt.Desktop` functions instead. This may improve browser interactions on some platforms. Obsolete browser options Firefox and Mozilla have been removed from the View in Web Browser activation action.
    - VOTable output tweaked: single quotes now used for attribute values if attribute contains double quotes.
    - Set the JVMVersion setting in the OSX DMG Info.plist to 1.8+ (was previously 1.3+). Although it will run on Java 1.6, some problems (scrambled JTables) have been reported with 1.6, apparently fixed at 1.8. However, I'm not sure whether the OSX runtime honours this setting; quite possibly it will make no difference. If you notice this either fixes or breaks anything when running on a Mac, I'd be interested to know!
Version 4.6-2 (2 November 2018)
  Plotting:
    - New Draw Subset Polygon action added to Plane Plot. This lets you draw a polygonal shape with mouse clicks, and constructs the corresponding algebraic expression to define subsets.
    - New Sphere Grid layer control, for plotting a spherical net around the origin, added to the Cube and Sphere plot windows.
    - New Line3d plot form, for plotting lines joining points in 3d, added to the Cube and Sphere plot windows.
    - New Sort Axis option, for joining out-of-sequence points, added to Line plot form.
    - Provide independent grid crowding controls for longitude and latitude in the SkyGrid layer control. Previously there was one control that determined crowding in both directions. This change may have introduced slight changes to sky axis grid line spacing at low crowding levels.
    - Contour level calculations improved; in some cases this previously didn't work well at low point density, resulting in missing contours. The zero point slider function has also changed slightly, it is now not phase folded.
    - The sphere plot now centers axes on zero if the center would otherwise be near zero.
    - Add option to set bin phase by text entry as well as by slider for Histogram and Grid plot layers.
    - Address long-standing plot auto-ranging issue; when auto-ranging resulted in the bottom X limit or right-hand Y limit being exactly equal to zero, the corresponding zero-valued results were not plotted. Auto-ranging has been slightly adjusted to avoid that. This results in pixel-level changes to plot appearance in some cases; these can be avoided interactively adjusting or explicitly setting ranges, e.g. in the Axis Control Range tab.
  Expression Language:
    - New functions in class Gaia: `polarXYZ`, `astromXYZ`, `astromUVW`, `icrsToGal`, `galToIcrs`, `icrsToEcl`, `icrsToEcl`. These can calculate Cartesian position and velocity components from (e.g. Gaia) astrometric parameters.
    - New Shapes class added for working with polygons in the X,Y plane, with functions `isInside` and `polyLine`. This is used by the Draw Subset Polygon action.
    - Rearrange expression language documentation slightly: there is a new section listing Special Tokens. This includes "`$random`", which was previously undocumented and named "`RANDOM`".
    - Special evaluation tokens `$index0`/`$00`, `$nrow0` and `$ncol0` added; these operate on the apparent, rather than the base table.
    - New functions `urlEncode` and `urlDecode` added to Strings class.
    - New convenience function `exp10` in class Maths.
  Activation Actions:
    - New Download URL action added to the list of options in the Invoke Service activation action and the DataLink Window.
    - TAP example queries now use recently-activated sky positions where appropriate.
    - New Display Image Region activation action added.
    - Security measures put in place to defend against loading maliciously configured session files.
  Miscellaneous Improvements:
    - Column Search Window introduced (replaces and upgrades similar action from column popup menu).
    - The Columns metadata browser in the TAP Window now shows arraysize information if present in the Type column, and includes a new Xtype column (TAP 1.1).
    - Add a status line at the bottom of the Data Window displaying total, visible and selected row counts.
  Minor enhancements and behaviour changes:
    - Default value of `votable.strict` system property is now `true`. That means that by default, missing `arraysize` attributes on character-valued VOTable FIELD/PARAM elements are taken seriously (indicating a single character) rather than being interpreted as `arraysize="*"`. Note this could change VOTable interpretation: columns that previously omitted an arraysize declaration when they shouldn't have done may now be interpreted as 1-character rather than multi-character columns. You can restore the old behaviour with `-Dvotable.strict=false` if required.
    - Introduce a couple of measures to reduce the likelihood of unintentional service overload from multicone-type queries (Multiple Positional Search Panel): add a progressive delay for Retry error handling modes, and decrease parallelism default value to 3 (from 5) and soft maximum to 5 (from 10).
    - GBIN read fix to work around changed behaviour in recent GaiaTools (versions 19.4.*, >=20.1.0 and >=21.0.0) that caused GBIN table reading to fail.
    - Load progress reports now format long numbers to include separators (e.g. commas every three digits).
    - Modified `topcat` and `stilts` startup script behaviour for OS X. The scripts are now duplicated in `TOPCAT.app/Contents/Resources/bin` in the DMG file, which may be a more conventional location(?) and may mean that Homebrew installation works better(?).
    - Slight improvements to the JDBC Configuration section of this manual.
    - Tables generated by an internal match now have a name like `match(ID)`, indicating their origin.
    - Slightly improved reporting of Service Descriptor descriptions in Parameter Window.
    - Small change to MOC handling that might possibly avoid some network-related performance issues.
  Bugfixes:
    - Fix function plotting so that NaN values are omitted rather than interpolated.
    - Fix bug that meant View Image Internally datalink invocation option failed in absence of JAI/SoG.
    - Fix bug that failed to update the table row header when the content of a DataLink panel changed.
    - Fix i18n bug that caused slider text values to be reported with unwanted precision in certain (e.g. fr, de) locales.
    - Fix minor bug in TAP Resume Job tab that continued unnecessary polling of ERROR/ABORTED status jobs.
    - Fix bug that reported wrong column name in column window for renamed synthetic columns loaded from a session file.
    - Fix bugs in `topcat` startup script particularly for OS X, relating to following symbolic links, locating icons and suppressing unwanted output on stderr.
Version 4.6-3 (9 May 2019)
  Plotting enhancements
    - Introduced new colour scaling options `histogram` and `histolog` for the Scaling selector in the Aux Axis Control and certain other places. This can make it much easier to see structure in quantities that do not vary smoothly over their min-max range.
    - Improvements to the Draw Algebraic Subset action (renamed from Draw Subset Polygon, and icon slightly adjusted):
      - New shape modes Box and Ellipse in Plane Plot.
      - Now also available in Sky Plot, with shape modes Circle and Polygon.
      - Visual feedback improved (little squares mark click position and indicate drawing mode).
      - Algebraic expression reported continuously at bottom of plot during drawing.
      - On completion, Multi Algebraic Subset Window now displays inclusion expression in TOPCAT and (where possible) ADQL formats; ADQL can be pasted into TAP queries.
      - New similar Algebraic Subset From Visible action added to Plane and Cube plots; TOPCAT and ADQL expressions displayed.
    - New options for measuring distances on plots:
      - The Sky Plot window now by default draws a small scale bar at the bottom left corner, indicating the scale of the plot in degrees, minutes or seconds. It is controlled by the Draw Scale Bar control in the Sky Axes Control Grid tab.
      - A new Measure Distance action is available in the Plane, Histogram, Sky and Time plot windows. This lets you use the mouse interactively to measure the distance and/or vector components between two points.
    - Options to plot polygons:
      - New Quad Position Layer Control in all plot types, with new plot forms Poly4 and Mark4 for plotting quadrilaterals (or triangles).
      - New Polygon form for polygons with arbitrary numbers of vertices (may be improved or adapted in future).
    - Improvements to the Healpix plot.
      - HEALPix levels up to 20 can now be plotted (previous maximum was 13).
      - Autoranging now works properly, so the plot is correctly centered on the data if it only covers part of the sky.
      - Graphical subset selection and point activation now works for (the centers of) HEALPix pixels in the same way as for markers.
      - Memory management is improved for fairly large maps.
    - The Line plot form now has an Aux coordinate that can vary the colour of the line along its length according to some third quantity.
    - Improve defaulting of coordinate values in plot windows. Column names and UCDs are now used in more cases to choose default values for plotting.
    - New projection option Car0 available in the Sky Axes Control Projection tab. This is like Car (Plate Carrée) but has longitude=0 at the left/right edge rather than the center of the plot.
  HEALPix-FITS support
    Various changes to support the semi-standard HEALPix-FITS serialization convention. Available information about HEALPix encoding (level, index column, ordering scheme, coord sys) can now be stored in custom table parameters (of the form `STIL_HPX_*`), and is used by FITS output handlers to insert the relevant FITS headers. The existing FITS handlers do this where it's not disruptive, and the new fits-healpix output handler will additionally move and rename columns where the convention requires. This metadata is round-tripped by FITS and VOTable I/O handlers. It is added automatically when exporting HEALPix maps from the SkyDensity plot form. FITS support is not perfect: the `BAD_DATA` FITS keyword is ignored, and the 1024-element array-valued column variant is not understood. When the Sky Plot encounters a table tagged with this HEALPix metadata, it now makes use of that information to improve defaulting in HEALPix layer controls, and in some cases by defaulting the initial plot layer to be of type HEALPix rather than scatter plot.
  VOTable 1.4 support
    Support is introduced for version 1.4 of the VOTable format and its new `TIMESYS` element.
    - For VOTable columns that reference TIMESYS elements, the relevant information is now visible (`TimesysTimeorigin`, `TimesysTimescale`, `TimesysRefposition`) in the Columns Window.
    - Any columns referencing TIMESYS elements read from VOTable-based formats (VOTable or FITS-plus) can now be written out to VOTable-based formats with equivalent TIMESYS references included, so TIMESYS round-tripping for columns works; however this will only be done if the VOTable output format is set to version 1.4. By default (at least as long as 1.4 is not finalised) the output version is 1.3. To enable this TIMESYS output, set the system property `-Dvotable.version=1.4`. Currently this TIMESYS output works only for table columns (FIELDs) not parameters (PARAMs).
    - The `timeoffset` attribute of a TIMESYS element referenced by a VOTable column is used to make sense of column data when interpreting it as an absolute time. Currently, the only use of this is in time plots.
    - `FIELD/@ref` attributes are no longer imported as "`VOTable ref`" column aux metadata items, since they often interfere with TIMESYS references. Doing this was probably always a bad idea since the referencing is not kept track of within the application, so withdrawing this functionality makes sense, but beware that it might change or break some existing behaviour.
  Other enhancements
    - Overflow or error flags indicated by DALI `<INFO name="QUERY_STATUS"/>` elements in loaded VOTables are now reported in the Rows line of the Control Window properties panel.
    - You can now edit the Shape metadata item in the Columns window by double-clicking on it, e.g. to specify a fixed length for unknown-length array columns. This can be useful when preparing metadata for output and also to enable the Explode Array Column action.
    - New functions `indexOf` in class Arrays to find position of a given value in an array.
    - New functions `parseInts` and `parseDoubles` in class Conversions for extracting array values from strings (experimental).
    - If an expression with bad syntax is entered in the Function Layer Control Function Expression field, it is now greyed out like in column selectors rather than deleted. This makes it easier to enter function expressions.
    - Fix synthetic column and subset definition GUIs so that users are prevented from supplying an algebraic expression which references itself. Such recursive definitions cannot be evaluated and lead to bad behaviour of the application.
    - Fix expressions so that `$ID` column references referring to nonexistent columns are rejected when entered rather than causing trouble during later evaluation.
    - A sequence number is now appended to plot window titles, which may make it easier to keep track of plots from the window manager or desktop.
  Bug and misfeature fixes
    - Healpix and Spectrogram layer controls now default to initially displaying only the current subset if one is defined, rather than the whole dataset.
    - Vizier queries now use the output flag "`-out.meta=Dhul`" rather than "`-out.meta=DhuL`"; this means that some link columns get meaningful content that did not before.
    - Added bumper to Vizier table selection control in CDS Upload Match window.
    - Fix some bugs relating to plotting values close to the limits of the double precision range.
    - Fix bug that prevented the STILTS control working when the plot is empty.
    - Fix bug/misfeature in CDF table parameter construction: CDF global attributes were ignored (with a "WARNING: Omitting complicated global attribute" message) if they contained any null entries. Now such entries are just ignored and the table parameter is constructed from the global attribute using the non-null entries.
    - Fix a problem with the Link2 plot form that caused short lines that should span the antimeridian to appear as long lines crossing the whole sky. Such links are now just not drawn.
    - Improve colour ramp quantisation (e.g. Shader Quantise control in Aux Axis Control); the full colour range is now included.
    - Worked round a performance issue that meant in some environments (OpenJDK?) creating a large subset could lock up the GUI for a long time.
    - Downgrade log messages about UDFs with unparsable signatures when parsing TAPRegExt documents; now INFO not WARNING.
    - Use period not comma as decimal separator for non-sexagesimal sky plot axis labels regardless of Locale; also avoid trailing comma sometimes erroneously present.
Version 4.7 (18 November 2019)
  Runtime environment: Java 8
    From this release, TOPCAT requires Java 8 (a.k.a. Java 1.8) or greater to run, rather than Java 6 as for previous releases. Java 8 has been around since 2014, so it should be available on all but very ancient platforms. If startup fails with a `java.lang.UnsupportedClassVersionError` then you need to upgrade.
  New or enhanced functionality:
    - Most of the plotting, though not the intial data preparation, will now run in parallel for large (>1e5 row) datasets. This should make interacting (e.g. pan, zoom, change settings) with slow plots faster on multi-core machines. (In rare cases this multi-threading might cause problems with memory usage; it can be effectively turned off if required by using the system property `java.util.concurrent.ForkJoinPool.common.parallelism`.)
    - New activation actions Display HiPS Cutout and Send HiPS Cutout; these make it easy to access imagery for many surveys using the excellent hips2fits service from CDS.
    - New class URLs contains expression language utility functions for constructing certain service URLs: `hips2fitsUrl`, `bibcodeUrl`, `doiUrl`, `arxivUrl`, `simbadUrl` and `nedUrl`. Existing functions `urlEncode` and `urlDecode` have been moved to `URLs` from class Strings.
    - Rework the View in Web Browser activation action so that it can show web pages for not only URLs and filenames, but things like DOIs, bibcodes and arXiv identifiers too.
    - New JavaFX browser option in the View in Web Browser activation action. This is like the existing Basic Browser, but more capable, e.g. it can render JavaScript. Note JavaFX is not available with all Java installations.
    - Add Pause Sequence action to Activation Window.
    - Activation Window sequence actions now update activated row (display highlight in table viewer and plots) as they progress.
    - New Delay activation action added as a convenience for use with "slideshows".
    - Add tiny Show/Hide All buttons at the bottom of the subset list in the Data Layer Control Subsets tab.
    - Add new Use Position configuration option to polygon plot form to toggle inclusion of reference position in polygon vertex list.
    - Add new Fix Errors button for common ADQL errors in the TAP Window.
    - Modified behaviour for offset (e.g. unsigned) longs in FITS files. 64-bit integer columns (`TFORMn='K'`) with non-zero integer offsets (`TSCALn=1`, `TZEROn<>0`) are now represented internally as Strings; previously they were represented as Long integers, but values out of the possible range appeared as null (with a warning written through the logging system). Such columns are most commonly seen representing unsigned long values. If written back out to FITS, the offset long value will be reinstated, but other output formats cannot encode unsigned longs, so they will stay as strings.
    - New functions `parseBigInteger` and `parseBigDecimal` in class Conversions.
  Minor enhancements and behaviour changes:
    - VOTable output now writes VOTable version 1.4 by default (was 1.3).
    - Modified plot legend display so that small markers are displayed a bit bigger in the legend than on the plot for readability.
    - Add new colour map Cividis.
    - Upgraded ADQL parser from 1.4 to VOLLT 1.5-1. Should result in minor improvements to TAP ADQL syntax highlighting.
    - Permit FITS and VOTable files with zero-length string columns. Previously all-null or zero-length string columns were sometimes forced to single-character values.
    - Fix one RegTAP example query in accordance with RegTAP-1.0 Erratum #1.
    - Add more detail (response content) to certain bad response TAP error messages.
    - Update mapped file unmapping implementation to work for java9+.
    - Minor changes to behaviour when querying TAP 1.1 services (REQUEST parameter is omitted).
    - Deprecate Display Cutout Image activation action; Display HiPS Cutout is usually a better choice.
    - The front page screenshot montage (which was very out of date) is replaced by one with up-to-date screenshots.
    - Registry queries for standard services now search for `intf_role='std'` instead of `intf_type='vs:paramhttp'`, which is the recommended pattern for RegTAP 1.1, and believed to work for current contents of known searchable registries.
    - Eliminate unnecessary "(no position)" text in Display Image activation action log message.
    - JSAMP to version 1.3.7.
  Bugfixes:
    - Avoid sometimes losing precision when reading ASCII/CSV values in the range +/-(1e-45..1e-38).
    - Fix TAP window to avoid locking up GUI in case of slow loading service logo image.
    - Fix Execute Code activation action so that the Synchronous option is set false by default (this was a bug - true can cause responsiveness problems for slow commands).
    - JEL bug fix update, to avoid unwanted debugging output for String function null returns.
    - Fix Quantile plot form bug (no non-JIDE RangeSlider fallback) that stopped it working in some environments such as Java 10 on OSX and Nimbus L&F.
    - Fix load error encountered when specifying a Cone Search service by URL rather than selecting from a registry query list. This was a regression error since v4.6-2.
    - Fix GUI updates when current subset expression is edited: data window view and apparent row count are now updated accordingly.
    - Fix plot axis ranging bug: padding was not always applied properly for logarithmic axes.
Version 4.7-1 (5 June 2020)
  File Formats:
    - The ECSV (Enhanced Character Separated Values) storage format is now supported for input and output.
    - The Feather storage format is now supported for input and output.
  Performance:
    A number of implementation changes have been made which may improve performance, particularly for crossmatching (typical improvements for large sky crossmatches are a factor of 2, though YMMV). These should have no effect on the results, but if anybody notices crossmatching behaviour which is changed since previous versions or otherwise suspicious, please report it.
    - The HEALPix implementation has been replaced; all HEALPix manipulation is now done using the excellent cds-healpix-java library written by François-Xavier Pineau from CDS, which speeds up sky crossmatching considerably. Many thanks to François-Xavier and to CDS for providing this library and for assistance with its use; thanks also to Nikolay Kuropatkin from FermiLab whose PixTools library served this purpose in TOPCAT up till now.
    - Rows are now binned during crossmatches using a HashSet rather than a TreeSet.
    - Evaluations of the `arcsin` function in Sky matches now use the (Apache via cds-healpix) FastMath implementation rather than the standard J2SE version.
    - Performance is improved when reading long String values from FITS files.
  Visualisation:
    - New Area Layer Control, offering forms Area, Central and AreaLabel, can plot region data supplied as area coordinates in the form of STC-S (e.g. from ObsCore/EPN-TAP `s_region`), DALI polygon/circle/point or (ASCII) MOC columns on Sky, Plane or Sphere plots.
    - The Time Plot window is no longer labelled experimental, and now appears on the main control window toolbar. When selecting its time coordinate, you can now also select how input values are mapped to time (as MJD, JD, ISO-8601 etc), which makes it much easier to plot time quantities from input tables with insufficient metadata.
    - The default initial layer in the Time Plot is now Line, not Mark.
    - Scatter plot marker size now defaults to a value dependent on the number of rows in the table, so by default large tables have small markers and small tables have larger markers.
    - Provide more options in the Shape selector for the Mark plot form: versions of circle, cross etc with thicker lines.
    - Maximum marker Size in Mark plot form is increased from 5 to 9.
    - Add line thickness control to the contour plot.
    - Improved plot axis labelling in LaTeX mode, e.g. in LaTeX write "3x106" not "`3e6`".
    - The Sky Plot position layer control now automatically selects lon/lat coordinates for EPN-TAP tables (`midLon(c1min,c1max)`, `midLat(c2min,c2max)`) where available. Similarly, `c`{`1`,`2`}{`min`,`max`} values are automatically used for the sky plot Quad Position Layer Control, so that EPN-TAP-style bounding boxes are displayed by default.
    - Add replacement marker functionality (Minimal Size/Shape options) to Poly4 form, so that small polygons aren't too small to see.
    - Improve accuracy when drawing large HEALPix tile boundaries in some cases for SkyDensity and Healpix sky plot layers.
    - The Sort Axis option for the Line plotter in the Time plot window now presents the option Time rather than X (or Y).
    - Add Center option to the Label plot Anchor selector.
  Other minor enhancements/changes:
    - Basic support for SIA version 2 as well as version 1 in the SIA Query and Multiple SIA Query windows.
    - It is now permitted to provide blank RA/Dec entries in the SSA Query window. This is legal according to the SSA standard and reasonable for e.g. theory services.
    - Remove SAMP Window button from main Control Window toolbar for reasons of space; this option is still available in the Interop menu.
    - Add new functions `midLon` and `midLat` to Sky class.
    - Add new conversion functions `*ToUnixSec` to Times class.
    - Adjust coordinate labels for SkyVector plot form, to make it more obvious that cos(lat) premultiplication is required for Delta Lon.
    - Reorder registry service URLs for the (largely obsolete) RI1.0-mode registry search in the Registry Search Panel. Default is now Euro-VO, which still offers a working RI1.0 service; the (moribund?) AstroGrid services are demoted.
  Bug and misfeature fixes:
    - Fix Ellipse mode in the Plane Plot's Draw Algebraic Subset action; the ellipse expression was previously covering an area 2-0.5 smaller than the drawing.
    - Fix polygon plot form in Sphere Plot; this combination was failing to plot anything, now it works.
    - FITS ASCII table extensions with TFORM values of `In` are now treated as 64-bit integers for `n>=10` rather than `n>10`.
    - Fix regression bug since last release that refused to make dataless plots.
    - Slightly improve plot axis labelling for small numbers; remove unnecessary decimal point in scientific notation in some cases.
    - Fix fairly harmless NullPointerException report when displaying a blank plot with too few auto-selected axes (regression).
Version 4.7-2 (24 August 2020)
  New Functionality:
    - SVG (Scalable Vector Graphics) is now one of the supported graphic output formats in the Plot Export Window.
  Bug fixes and minor enhancements:
    - Fix plot failure when supplying nonexistent columns for optional coordinates. This was sometimes causing significant knockon problems elsewhere in the GUI.
    - Fix Healpix trouble at large angles, e.g. sky crossmatch failure with match radius >6 degrees.
    - Fix regression bug at v4.7-1 which failed to update subset content in plots when subset name was reused.
    - Fix some regression bugs at v4.7-1 related to selection boxes with user-entered values: user-entered VizieR Table ID/Alias values in the CDS Upload X-Match window didn't work; user-entered Maximum Row Count values for the VizieR load dialogue caused the load to fail; and user-entered UCD values in the Synthetic Column window were ignored. These are all now fixed.
    - Fix ECSV output bug: encoding was incorrect for metadata scalars with certain non-alphanumeric first characters, leading to invalid YAML.
    - Remove some unhelpful per-column metadata items from ECSV output.
    - Improve seeding of the expression language `$random` special value; it should now be less dependent on JVM details.
    - TAP `curl(1)` equivalent logging flag error fixed (write `--compressed` not `--compress`).
    - Improve HiPS Survey selection menu in the View/Send HiPS cutout activation actions so that the submenus are not too tall for the screen.
Version 4.7-3 (23 October 2020)
  Packaging
    - The build of the .dmg file for MacOS has been reworked. It should no longer get confused by versions of Java 6 installed alongside Java 8; it may also avoid security issues in accessing some local directories. This should make things work better for (some) MacOS users, but please report if there are new problems.
  Minor enhancements
    - The Position Layer Control for the Plane Plot now has an X<->Y button for convenience, which lets you switch the contents of the X and Y coordinate value fields.
    - Minor fixes to match window help text.
    - Improve guesses about default coordinates in Area plots.
  Bug fixes
    - Upgrade cds-healpix-java library to v0.28_1; avoid occasional sky crossmatch failures (termination with error).
    - Fix minor plotting bug that could cause white points to be invisible.
Version 4.8 (11 January 2021)
  In this version, the table handling library STIL has been upgraded to v4.0, which enables some enhancements including multithreading and new I/O handler features.
  Notable new functionality:
    - Auto file format detection now examines filenames to help guess format; this means that e.g. when loading CSV files named with the "`.csv`" extension, it is no longer necessary to select "CSV" in the Load Window Format selector.
    - Scheme specifiers can now be entered in the Load Window to load tables not corresponding to external files. Options currently provided include simple sequence, simulated sky and strange attractor data.
    - Add more example tables (using skysim and attractor schemes) to the Example Tables menu.
    - Table input/output handlers specified in the table Save/Load Windows can now in some cases take parenthesised options, e.g. you can type in "votable(version=V12,format=BINARY)" instead of just selecting "votable". For examples see individual handler documentation, e.g. the VOTable output handler and ECSV input handler.
    - Improved performance when multiple threads are accessing synthetic columns or subsets concurrently.
    - Statistics calculations in Statistics Window now execute in parallel.
    - New Approximate Quantile Calculation option in Statistics Window that runs in limited memory.
  Minor enhancements:
    - COOSYS and TIMESYS attributes are now preserved during VOTable I/O for table PARAMs (as well as for FIELDs, which was already the case). However, they are not currently displayed in the application GUI for table parameters, only for columns.
    - The Table I/O section has been somewhat reorganised and tidied up.
    - Add new options `acos` and `cos` for Scaling in the Aux Axis Control etc; these provide linear-like stretch functions with steeper/flatter ends, which may be useful for shading by quantities with most variation near to/far from the middle of the range.
    - Perform part of the Sort operation in parallel.
    - Slightly improved documentation for CDS Upload X-Match Window.
    - Add Plot|Parallel Caching menu option in plot windows; this is experimental and not generally recommended.
  Bugfixes:
    - Upgrade JEL to v2.1.2: fixes a bug that could cause trouble when reloading saved sessions with certain boolean-valued synthetic columns: load could fail or values could be inverted. Also some efficiency improvements in object creation.
    - Fix histogram ranging bug (plot failure under certain circumstances).
    - Avoid inserting `NULL_VALUE` custom metadata entries into ECSV output.
    - Fix annoying column selector bug that sometimes required an extra click.
    - Fix up MacOS application packaging issue so that (hopefully) `topcat`/`stilts` startup scripts work on Mac M1 architecture.
    - Cope better with infinite values in aux plot coordinates.
Version 4.8-1 (10 June 2021)
  File formats:
    - Apache Parquet format is now supported for input and output (note not available in all configurations).
    - AAS Machine-Readable Table (MRT) format is now supported for input.
    - ECSV format input and output handlers are upgraded to version 1.0 of the ECSV format, meaning they can now read and write array-valued columns.
    - Add configuration option `header` for CSV input handler, to indicate whether header line is present.
    - Add configuration option `maxSample` for CSV and ASCII input handlers to reduce 2-pass read time.
    - Variable-length array-valued columns in FITS tables (`P`/`Q` descriptors) can now be read even in compressed or streamed FITS files.
  Other new functionality:
    - Add new XYArray Layer Control with associated plot forms Lines, Marks, YErrors and XYErrors forms for plotting array-valued columns such as per-row spectra and time series.
    - Add new functions to class Arrays for working with array values: `arrayFunc`, `intArrayFunc`, `sequence`, `constant`.
    - Add new SAMP Message activation action for sending custom SAMP messages.
    - The Cumulative option in histogram-like plots can now take the values none/forward/reverse, not just true/false.
    - Introduce the Aitoff0 projection alongside Aitoff in sky plots. In the same way as Car/Car0, this gives an Aitoff projection but with the longitude=0 line at the left/right edge instead of the center.
    - The Table tab in the TAP window now reports approximate row count if provided by VODataService 1.2 `nrows` element (TableSet-VOSI metadata acquisition mode only).
    - Add new table scheme test.
  Minor enhancements and workarounds:
    - Maximum line thickness in line plots raised from 5 to 9.
    - Collapse whitespace in some metadata display items, such as column/parameter Description entries.
    - The fits-var output handler now avoids use of the THEAP keyword (no pre-heap gap is written). Heap padding is legal FITS, but bugs in other FITS software mean that some third party components (including `fverify` in FTOOLS e.g. v3.14-3.50) have problems with such files.
    - JDBC output no longer attempts to create VARCHAR(0) columns.
    - Space-delimited ECSV files now write empty fields quoted.
    - Unknown or unsupported column datatype values in ECSV files are now treated like `string` rather than causing table read failure.
    - Empty strings in FITS 1-character columns are now returned as blank values rather than ASCII NUL ('`\0`').
    - Undersized, including zero-length, strings written to FITS columns are now by default terminated with an ASCII NUL rather than in some cases padded with spaces.
    - Modify Example RegTAP "TAP accessURLs" query in TAP window to avoid aux resources.
  Bugfixes:
    - Fix regression bug in previous release (v4.8) that broke use of `jdbc:` URLs and SQL Query window.
    - Fix regression bug in previous release (v4.8) that meant table drag'n'drop wasn't working.
    - Fix regression bug in previous release (v4.8) that failed to re-read Byte-typed synthetic columns from saved sessions in some circumstances.
    - Upgrade cds-healpix-java library to v0.29.3; this avoids occasional sky crossmatch failures (termination with error) introduced at TOPCAT v4.7-1.
    - Fix bug in FOV tab of sky plot axes control that could point to the wrong position for some projections such as Car0.
    - Fix TAP metadata column display so that numeric non-standard items are actually shown; previously the columns appeared but with blank values.
    - Fix problem with evaluation of a synthetic column/subset referencing a second synthetic column whose expression gets edited to yield a different type.
    - Fix issue with cumulative histograms; bars beyond the last sample are now displayed with total value not zero.
    - Fix bug that meant writing long (>2Gb) fits-var files could output incorrect/corrupted FITS.
    - Fix long-standing file caching bug; mostly seemed to affect large (>2Gb) streams.
    - Fix long-standing logic error in ASCII/CSV input handler that could misidentify column types and cause read failures.
    - Fix plot failure when trying to use Histogram aux scaling and aux limits set explicitly outside of data range.
    - FITS TZERO headers are now written correctly with numeric values rather than string values.
Version 4.8-2 (15 October 2021)
  New functionality:
    - Ellipse selection in the Draw Algebraic Subset action can now be rotated rather than just aligned with the axes ("Ellipse" is renamed "Aligned Ellipse", and there is a new option "Rotated Ellipse").
    - A new Thickness control has been added to several plot forms to enable lines thicker than a single pixel when drawing error bars, arrows, outlines, pair links etc: `Vector`, `Error Bars`, `SkyVector`, `SkyEllipse`, `SkyCorr`, `XYEllipse`, `XYCorr`, `SizeXY`, `Area`, `Polygon`, `Poly4`, `Link2`, `YErrors`, `XYErrors`.
    - New Area type UNIQ to plot single HEALPix tiles e.g. from MOC files in the Area Layer Control.
    - The Log Window, which has been broken since v4.7-1, and not much use before that, has been rewritten. It now presents logging information, including things like external service access details, in a useful way.
    - New functions in class VO to check syntax of UCD and VOUnit strings.
    - Add Auto-Invoke option to View Datalink Table activation action's Datalink display.
    - Copy/paste is now possible from the Activation Window Results panel.
    - Add Julian Day manipulation functions `jdToMjd` and `mjdToJd` to class Times.
  Minor enhancements and behaviour changes:
    - Replace function `julianToUnixSec` in class Times, which didn't do what it said it did, with `jdToUnixSec`.
    - The `mjdToIso` and `mjdToDate` functions in class Times now prepend the string "`(BCE)`" to dates before the common era.
    - Guess meaning for some non-standard COORDSYS values in HEALPix-FITS files, e.g. allow "GALACTIC" instead of "G".
    - Revert to sequential processing in some cases for HEALPix plots to reduce resource usage.
    - Columns that are all blank in ASCII-like tables (CSV, ASCII, TST) are now interpreted as String not boolean.
    - Files compressed using multi-stream bzip2 compression (e.g. `pbzip2` output) are now supported alongside single-stream bzip2.
    - Simplify (aligned) ellipse expression in algebraic subset; it doesn't need a square root.
    - The Fast config option has been withdrawn from polygon-plotting forms `Area`, `Polygon`, `Poly4`; the shape-filling algorithm has been improved, and it's no longer necessary to choose between speed and accuracy.
  Bugfixes:
    - Fix serious threading bug that could return nonsense values from fixed-length string fields during parallel processing, for instance statistics calculation, of large cached or randomised tables.
    - Fix behaviour for a couple of activation actions (Invoke Service and Invoke Datalink Row), that invoked the wrong row for tables with sorted rows.
    - Fix aux ranging bug that meant supplying a fixed Maximum Aux value was ignored without a fixed Minimum Aux value. This was a regression bug introduced at v4.6-3.
    - Upgrade of cds-healpix-java library to v0.30.2; this fixes some HEALPix cell plotting bugs.
Version 4.8-3 (31 January 2022)
  New functionality:
    - The PDS4 (NASA's Planetary Data System v4) file format is now supported for input tables.
    - The SAMP MType `table.load.pds4` is now supported alongside some other format-specific table.load.* messages.
    - Add new plane plot forms StatLine and StatMark; these can plot per-element averages etc of fixed-length-array-valued columns such as spectra.
    - Plots using Grid Form now allow export of the calculated density map to a table.
    - New per-element quantities available in Statistics Window for fixed-length-array-valued columns (Array Means, Array Sums etc).
    - New class Randoms contains pseudo-random number generation functions. Special token `$random` is now deprecated.
    - Provide quantile options for some Combine selectors.
  Minor enhancements and behaviour changes:
    - Add new colour map Painbow.
    - Improve the way that Auto-Invoke works for View/Invoke Datalink Row activation types; these now work properly with the sequence auto-play feature.
    - Modify ADQL sent to DaCHS RegTAP services; should speed up registry queries in some cases, especially when using the Description field.
    - Subject keyword matching in registry searches is relaxed; a keyword can match part of a subject term, it doesn't have to match the subject term exactly.
    - Follow HTTP->HTTPS 3xx redirects when parsing VOTables in a few places that it didn't work before.
    - The test for whether a newly-defined row subset adds an entry to the subset list or replaces an existing entry is now based on case-insensitive, rather than case-sensitive, name matching.
    - Subset row count is no longer recalculated when synthetic subset expression is selected/highlighted but not changed.
    - Improve identification of TIME_TT2000 columns as time values in certain CDF files.
    - Improved auto-ranging for some histogram-like plotters; changing style attributes like normalisation will now reset the plot view as appropriate.
    - Improved auto-ranging for Gaussian plot.
    - Make a couple of adjustments to SVG graphics output: output is now to a bare `svg` element (no XML or DOCTYPE declaration), and a `viewBox` attribute is included which may improve scaling behaviour in some contexts.
    - Permit leading '`s`' in ASCII-MOC area specifications, following MOC 2.0.
  Bug fixes:
    - Fix Session Save/Load bug; row subsets created using the Invert Subset action applied to an algebraic subset were not being loaded correctly (they always contained all rows).
    - Fix bug in parsing `MOC-ASCII` strings in Area plot; trailing depth specifier was interpreted as cell index and some cells near end of MOC were omitted/misshapen.
    - Fix failure when attempting to read unsigned 32-bit integer values from parquet files.
    - Bugfix update of JCDF to v1.2-4.
Version 4.8-4 (6 April 2022)
  Performance
    - Substantial I/O performance improvements, mainly for FITS and VOTable formats e.g.: writing to FITS 2x, reading FITS from a stream 2x, reading VOTable with inline BINARY/BINARY2 4x, writing VOTable with inline BINARY/BINARY2 2x, writing VOTable with TABLEDATA 1.5x.
    - A new Parallel Execution toolbar button is present in the Match Windows. This should speed up matching for large tables on multi-core machines. It should make no difference to the results, but since it is less well tested than the sequential mode, at this release it is turned off by default.
    - Other matching performance improvements.
    - FITS I/O is now all done internally, there is no longer a dependency on the nom.tam.fits package.
  New functionality
    - New class Bits with bit manipulation functions `bitCount`, `hasBit`, `toBinary`, `fromBinary`.
    - Add RMS Deviation report to LinearFit plot output.
    - Add Select All and Deselect All buttons to the Multiple Table Save and Session Save panels.
    - Add configuration options `compact` and `encoding` to VOTable output handler. By default thin (<=4 column) TABLEDATA VOTables are now written in "compact" mode, using reduced whitespace.
    - FITS BINTABLE headers used as table parameters now support FITS 4.0 long-string syntax (CONTINUE records).
    - FITS header values of the form "(a,b,c,...)" are now interpreted where possible as numeric arrays; this works for long-string values (CONTINUE records) as well.
  Bug fixes and workarounds
    - Fix bug that broke plots (and other things?) using expressions that generated RuntimeExceptions. This was a regression bug since TOPCAT 4.8.
    - Upgrade JEL to v2.1.3-pre1. This fixes a bug that caused evaluation failure when comparing a String against null.
    - Defend against OutOfMemoryErrors in the presence of very deep MOCs.
    - ECSV format now preserves table name.
    - Upgrade Unity library to 1.1 pre-release and improve VOUnits validation reporting (new status "GUESSED_UNIT").
    - FITS BINTABLE reader now copes with (illegal?) embedded spaces in TDIMn headers.
    - Adjust MRT null handling; "-" in a single-character field no longer interpreted as null.
Version 4.8-5 (10 June 2022)
  New Functionality
    - Add new plane plot form ArrayQuantile. This can be used to e.g. to plot medians of multiple spectra that are not aligned on the same wavelength grid.
    - When using the XYArray Layer Control, you can now omit either the X or Y array value, and a suitable linear sequence will be assumed.
    - Add X/Y Offset options for Label plot form.
  Performance
    - Reduce number of file mapping calls by FITS readers.
  Bug Fixes
    - Fix FITS parsing issue that could result in StackOverflowError for long array-valued headers.
    - Fix bugs in StatLine/StatMark forms that incorrectly treated blank array values and negative array values on logarithmic axes.
    - Fix bug in multi-threaded read of string columns from colfits files.
    - Table columns in Data Window are now always wide enough for column name.
    - Fix legend positioning bug for Label form.
    - Aitoff sky projections are now more correctly documented as Hammer-Aitoff (though not renamed in the UI).
Version 4.8-6 (8 July 2022)
  Enhancements
    - The View Datalink Table activation type now provides an alternative option for giving Datalink table location; you can supply either the full URL or the {links} endpoint and an ID value.
    - Adjust datalink table row-matching heuristics to work with less constrained datalink metadata; this provides smoother operation for (e.g.) Gaia DR3 datalink activation actions.
    - Modify functions `add`, `subtract`, `multiply`, `divide` in class Arrays; these now all take either two array arguments or an array and a scalar in either order.
    - New function `dotProduct` in class Arrays.
    - Provide `value*` functions for column references to strangely-named columns.
    - Tweaks to default plot setup to avoid using identifiers as coordinates in some cases.
  Bugfix
    - Fix FITS output so it doesn't fail when attempting to write metadata with non-ASCII Unicode characters.
Version 4.8-7 (5 October 2022)
  New functionality
    - Add new Activated Row Subset to each table; this can be used to highlight plotted rows on activation.
    - Add new plot form Handles to mark reference positions for X/Y array data, thus allowing activation and graphical selection with XYArray plots.
    - New function `sequence(n,start,step)` in class Arrays.
    - New functions `tfcatStatus` and `tfcatMessage` in class VO for validating instances of the Time-Frequency Radio Catalogue format.
    - Provide new option TFCAT for Area type in Area Layer Control, giving partial support for TFCat shape descriptions.
    - Semi-standard `nrows` column from `tap_schema.tables` table is now recorded and displayed as TAP table row count if present.
  Performance:
    - Crossmatching performance improvements: sky matching does better pre-selection of potential matches based on sky region, post-processing row sorting etc accelerated, various other steps parallelised. Large matches might typically be about twice as fast as before.
    - Matching is now done in parallel by default; sequential execution can be selected using the Parallel Execution Tuning control if preferred.
  Minor changes and usability improvements:
    - Improve Row Subset redefinition behaviour for plotting: when a subset name is re-used, any plot configuration (colours etc) set up for the old subset is retained for the new one, and it keeps its position in the displayed stack.
    - Improve formatting of some sections of this document.
    - Extend ranges a bit beyond (0-1) for axis range sliders.
    - Prevent image display window from grabbing focus during e.g. Display HiPS Cutout activation.
    - When a new column is added, the Column and Table viewer window displays are now scrolled to ensure that the new entry is visible.
    - When a new Row Subset is added, the Subset window display is scrolled to ensure that the new subset is visible.
    - Blob drawing doesn't disappear until after new subset is defined.
    - Add new section listing Colour Maps to this document.
    - Add some new colour maps from CMasher: Cosmic, Ember, Gothic, Rainforest, Voltage, Bubblegum, Gem, Chroma, Neon, Tropical (sequential); Guppy, Iceburn, Redshift, Pride (diverging); Infinity (cyclic).
  Bugfixes and workarounds:
    - Improve behaviour of some Axis Control tabs; in particular the Range and View tabs of the Cube and Sphere plot windows, and the FOV tab of the Sky plot window, which have long been somewhat broken, now work properly.
    - Prevent annoying lines appearing in plot window before plot is displayed.
    - Fix VOTable reader so BINARY/2 VOTables with no columns don't read forever.
    - Fix PDS4 reader to accept columns of type `ASCII_Numeric_Base16` without the read operation failing.
Version 4.8-8 (20 April 2023)
  Axis drawing improvements and changes:
    - Secondary X and Y axes can now be drawn in the Plane and Histogram Plots; see Plane Axes control Secondary tab and example plot.
    - Secondary T and Y axes can now be drawn in the Time Plot: see Time Axes control Secondary tab.
    - Matching ticks are now plotted by default on all four sides of Plane, Histogram and Time plots, rather than just on primary (bottom/left) axes. This can be configured with the new Shadow Ticks option in the Axes Control Grid tab.
    - Reduce frequency of minor ticks.
    - Major tick marks on axes now extend only inside the plot bounds not outside.
    - Grid lines plotted in the Plane, Time and Sky plots are now all partially transparent and plotted over the plot content (previously they were opaque and the Sky grid was drawn over, while the Plane and Time lines were drawn under, the plot content). Grid line transparency is controlled by the new Grid Transparency slider in the Axes Control Grid tab. Grid line colour can now be controlled in Time plots as for Plane and Sky.
    - Add new options ExternalSys and InternalSys to Label Positioning selector of Sky Axes Control Grid panel, to display lon/lat axis names alongside axis values.
  Other new functionality:
    - You can now draw Ellipse shapes when using Draw Algebraic Subset with the Sky Plot.
    - New function `inSkyEllipse`.
    - Upgrade ADQL support in the TAP window to accommodate ADQL 2.1, thanks to new version of Grégory Mantelet's VOLLT ADQL library. Syntax validation and highlighting, and help from the ADQL Examples menu and Hints tab, are now done according to the ADQL version (2.0 or 2.1) shown in the Service Capabilities panel, and to the declared capabilities. ADQL 2.1 nominally corresponds to version PR-ADQL-2.1-20230418. The TAP Service metadata display tab now also has two additional headings to display service-specific characteristics: ADQL 2.1 Optional Features and Non-Standard Language Features.
    - The Columns Window and Subsets Window have new Edit Column/Subset actions respectively, that open a popup window to edit name, expression, etc. These are now activated automatically if you enter an invalid algebraic expression in the metadata JTables, rather than just wiping out your new expression and reverting to the previous one.
    - New action Collapse Columns to Array in the Columns Window.
    - The Examples menu in the TAP Window now presents Service-Provided examples in a hierarchical menu if the service `/examples` endpoint uses DALI-examples continuation documents.
    - Make use of DataLink metadata introduced at DataLink 1.1. Values `content_qualifier` and `local_semantics` are now displayed in the DataLink Window and if present these and the Service Descriptor ContentType are used to make better decisions abut manipulating links.
    - Add Sort Axis config option to Lines plot form.
    - Add configuration options `readMeta` and `hierarchicalNames` to the GBIN input handler.
    - VOTable service descriptor I/O now preserves `contentType` and `exampleURL` PARAMs, introduced in DataLink 1.1
  Workarounds and minor behaviour improvements:
    - Modify column width determination in text-like output formats (`text`, `ascii`, `ipac`) to avoid occasional unwanted truncation of formatted values. Tables are now read in two passes, the first to establish column widths and the second to write the data. By default all rows are sampled, but the `sampledRows` option can be configured so that only some rows are sampled, which is more like the old behaviour.
    - Update Ucidy library to v1.3, corresponding to UCDList 1.5 EN.
    - If only one single point is visible in a Sky Plot using the (default) sin projection, the default view is now zoomed out to the whole sky rather than zoomed in to a few milliarcsec.
    - Improve ECSV reader performance, especially for Gaia DR3 bulk download files (which use semi-standard "`null`" token).
    - Write empty string not semi-standard "`nan`" token for NaN in ECSV writer.
    - Table parameters, as well as columns, named in column selectors now include their units metadata.
    - Avoid oversized service icons in TAP window Service tab.
    - Recognise "`smoc`" as an alternative to "`moc`" when examining xtype values for area format defaults.
    - Improve reporting and defaulting of activation action URL invocation.
    - Better titling of Activation Action windows.
    - The JDBC input scheme should now read columns that are array-valued in the database as array values that can be used in TOPCAT; previously they were read as opaque `Array` objects.
    - Make FITS and VOTable output handlers robust against input tables that declare incorrect row counts.
    - The PDS4 reader now reads `Ascii_Numeric_Base16/8/2` fields as numeric not string (updated pds4-jparser library code).
    - Slight change to RESOURCE structure of Primary HDU metadata in multi-table FITS-plus output. This fixes a problem in which saved Service Descriptors could end up associated with the wrong tables.
    - HTTP redirects with response code 308 (Permanent Redirect) are now handled in the same way as 307 (Temporary Redirect).
    - Withdraw Antialias config option from Lines plot form, since it didn't really work.
    - Improve handling of illegal sky coordinates (latitude out of range) in sky matching; in v4.8-7 only, bad positions caused match failure, now they are just ignored.
    - Improve transparency rendering in SkyGrid plot.
  Bug fixes:
    - Fix a nasty bug that could plot SkyVector, SkyEllipse and SkyCorr forms incorrectly. The numeric value of the shape size coordinates (ellipse radii, vector extents) was interpreted in degrees before being rescaled as appropriate, so that values of a few tens or larger resulted in signficant distortions. Now fixed.
    - Fix stability issue when using the Best Match, symmetric selection option (which should be used with caution) in the Pair Match Window. Results may be different in crowded regions, and may also have differed between v4.8-6 and v4.8-7, but are not obviously more or less correct.
    - Fix Cartesian matcher overflow issue; for very large ratio between coordinate extent and match radius this could cause pathologically slow, though not incorrect, crossmatching.
    - Fixed bug which failed to plot some markers of multi-marker shapes like Mark2 when multithreaded (i.e. for large tables). Regression bug since introduction of multithreaded plotting in TOPCAT v4.7.
    - Fix line drawing bug that meant dotted and dashed lines were often not displayed correctly. This was a regression bug introduced in TOPCAT 4.6-3.
    - Fix auto-range and export bugs that ignored final bar for forward cumulative histograms.
    - Fix Basic image viewer in Display Image/Display Image Region activation types to display (uncompressed) FITS images, by re-including nom.tam.fits library in standalone jar files; this was a regression bug, broken since v4.8-4.
    - Avoid some plot failures related to oversized legends and undersized plot windows.
    - Adjust colour ramp (aux axis) painting to avoid faint white stripes seen when vector graphics (e.g. PDF) output was rendered in some external viewers.
    - Fail with an error rather than silently reading a broken table when encountering GaiaTools/zStd-jni bug during GBIN input.
    - Empty/invalid fields encountered by the PDS4 reader no longer cause the table read to fail.
Version 4.9 (1 November 2023)
  New functionality:
    - New Corner Plot Window added.
    - The authentication handling has changed, and it is now possible to log in to TAP services that comply with the (draft) "SSO_next" proposal for advertising authentication methods in the VO. The `star.basicauth.user`/`star.basicauth.password` system properties can no longer be used to set authentication information globally for the application (this was a rather insecure practice anyway).
    - Column metadata export actions (Import as Table, Save as Table) added to Columns Window.
    - You can now Search for columns by metadata in the the Columns Window. This is available as the Search Column action in the toolbar and Columns menu, and also using the new popup menu available from the metadata display JTable.
  Minor enhancements and behaviour changes:
    - MacOS topcat-full.dmg file should now work for both Intel and Apple Silicon architectures.
    - Add new Sky + X with Errors Match Algorithm option.
    - Update hard-coded Registry URLs for Euro-VO and STSci to use https not http protocol.
    - Avoid annoying popup in Cone/SIA/SSA windows when position is resolved before radius is filled in.
    - Flag ConeSearch 1.03-style error result tables.
    - Column names with embedded carriage returns are now recognised in column selectors.
  Bugfixes:
    - Fix a bug in the Pair Match and Multiple Match windows which assigned the created `matched`/`match<N>` subsets to completely the wrong rows. These subsets are only created for some match types, and everything else about the matches was unaffected. STILTS was not affected. This was a regression bug since v4.8-4. Thanks to Claire Greenwell (Durham) for reporting this.
    - Fix bug which ignored some points when painting multi-threaded, multi-dataset or multi-subset plots. This bug was introduced in v4.7 and was supposed to be fixed at v4.8-8 but wasn't.
    - Fix TAP window to select ADQL-2.0 not ADQL-2.1 if service declares no ADQL versions.
    - Fix TAP capabilities parsing to identify language features with non-standard capitalisations.
    - Fix fencepost error in reverse cumulative histogram plotting.
    - Fix missing secondary X axis bug in stacked Time plots.
    - Fix bug in histogram plotting that could cause crashes for small ranges far from the origin.
    - Fix aux axis/legend positioning issue in sky plot (regression bug introduced at v4.8-8).
    - Fix bug in ADQL syntax highlighting related to delimited identifiers (quoted table names). This bug was only introduced with the VOLLT upgrade in the last release (TOPCAT v4.8-8).
    - Fix issues to do with sky coordinate system choice that sometimes caused SkyGrid and Healpix layers to generate broken STILTS commands for export.
Version 4.9-1 (29 February 2024)
  TAP window improvements:
    - ADQL functions and declared features, including UDFs, are now listed in a separate ADQL tab with the TAP metadata.
    - Schemas and tables are now listed by default in service-defined order in the TAP window metadata tree. A new Sort control can switch back to alphabetic.
    - Initially selecting, or subsequently double-clicking, a table in the TAP Select Service tab will now select it for display in the Use Service tab metadata panel.
    - The TAP Use Service tab now initially displays the Columns not the Schema metadata tab.
    - Choose better columns for TAP window ADQL examples under some circumstances.
    - Use TAP 1.1-specific communications (avoid `REQUEST=doQuery`, use `RESPONSEFORMAT` not `FORMAT`) in data queries to TAP services known to declare TAP 1.1 compliance.
    - Improve scrolling in TAP window Service, Schema and Table tabs.
  Other new functionality:
    - Add support for HAPI time-series services: query window, input handler and scheme.
    - The Cube Plot Window has a new Coordinates selector that lets you specify positions as Cartesian 3-vectors (XYZ) or spherical polar (Lon, Lat, Radius) coordinates as alternatives to the normal Cartesian components (X, Y, Z).
    - Add Circle mode for the Plane Plot in the Draw Algebraic Subset action.
    - The spectrogram plot now tries to plot spectra on a spectral axis, as controlled by the new Scale Spectra style control.
    - New array functions `loop` with arguments `(start,end)` or `(start,end,step)`.
    - The first argument of the `inMoc` and `nearMoc` Coverage functions can now be an ASCII MOC string as well as a MOC file location or VizieR table identifier.
  Minor enhancements and behaviour changes:
    - The gap between vertically stacked plots in the Time Plot window can now be adjusted using the Frame Control Spacing tab.
    - The Time Axis label can now be configured in the Time Plot.
    - Add instructions in the Time Plot documentation about abusing it to stack non-temporal plots.
    - The Function layer control is now available from the Corner Plot Window.
    - ISO-8601 conversion functions in Times now accept a trailing "`Z`" even for date-only specifications, and now accept `YYYY-DDD` format for dates as well as `YYYY-MM-DD`.
    - The CoosysRefposition metadata item (VOTable 1.5) is now listed if present in the Columns Window.
    - Some fixes/improvements to the `topcat` startup script. It now works better in the MacOS DMG image, it's more robust against pathnames with embedded spaces, and it will use `topcat-extra.jar` if present in preference to `topcat-full.jar`.
    - Update list of VizieR mirrors servers in VizieR Query window.
    - Add new colour map Sunset.
    - Use authentication and HTTP-level compression for external (href-referenced) VOTable STREAM data.
    - Improve error reporting for corrupted/truncated FITS files.
    - Upgrade VOLLT adqlLib to official 2.0-beta release.
    - Upgrade Unity to v1.1, which corresponds to REC-VOUnits-1.1. Only minor functional differences expected since previous version (1.1-b1).
    - Upgrade snakeyaml library (used for ECSV headers) from 1.25 to 2.2. No change in behaviour (or security) expected, but prevents vulnerability warnings in some circumstances.
  Bugfixes:
    - Fix sky match failure in case of very large error radius (>22 deg).
    - Fix bug in legend/aux axis text style configuration for Time Plot. This was a regression bug present only in TOPCAT v4.9.
    - Fix STILTS control bug that did not include all settings for the Corner Plot.
    - Fix FITS multi-table read bug that sometimes generated a spurious error popup when reading basic FITS files.
    - Cope better with out of range pixel indices in healpix plots.
    - Some spectrogram/time plot bug fixes.
    - Fix some problems with images in the PDF version of this document.
    - Update JSAMP to v1.3.8. This may improve hub Web Profile browser compatibility.
Version 4.10 (7 August 2024)
  Source code
    At this version the source code and build system have been substantially tidied up so that the application can be built straightforwardly using modern versions of Java (8, 11, 17, 21) with a minimum of warnings. This should be mostly invisible to users, but a few behaviour changes may be observed:
    - Some changes have been made to URL handling. Syntactically invalid URIs are now mostly rejected. This should not be noticeable in most cases, but questionable usages like embedded spaces in URLs may need to be replaced by their `%`-encoded equivalents.
    - The SoG internal image viewer has been withdrawn, since the required JAI classes are now unlikely to be available.
    - The `topcat-lite` configuration is no longer supplied, since it's no longer significantly smaller than `topcat-full`.
    - WebStart is no longer supported, since it has been removed from more recent versions of Java.
  I/O handler improvements
    - Documentation for I/O handler config options now mostly reports their default values.
    - Add to this document detailed documentation of FITS-plus and Wide FITS conventions.
    - FITS output handling improved and reorganised to provide more flexible configuration options; this is now all documented under the FITS heading, there is no longer a separate `colfits` section in the documentation.
    - Xtypes are now written into FITS headers using the non-standard header card `TXTYPnnn`.
    - Non-standard FITS headers `TUCDnnn` and `TUTYPnnn` are now written with comment parts, space permitting.
    - Upgrade parquet support libraries to parquet-mr 1.13.1. This means that Snappy compression is now supported in parquet for MacOS ARM, as well as other, architectures.
    - Add support for LZ4_RAW compression to Parquet I/O handlers.
    - Decrease size of parquet output files in most cases when writing NaNs and empty strings/arrays.
    - Parquet input handler now copes with some additional variants of array-valued columns.
    - New config option `date` for VOTable output handler.
    - New config options `compression`, `usedict` for Parquet output handler.
    - New config option `tryUrl` for Parquet input handler, set false by default to avoid cryptic error messsages when trying to open remote parquet files.
    - New config option `useFloat` in MRT input handler, set false by default to avoid a rare bug that could read large values as infinite.
  Minor enhancements and behaviour changes
    - Treatment of null values in the astrometric epoch propagation functions `epochProp` and `epochPropErr` has changed; null values for parallax and proper motion are now treated as if zero rather than invalidating the propagation. This (partly) follows behaviour of corresponding functionality in Gaia and VO ADQL propagation UDFs, and is more likely what you want to see.
    - Add Corner Plot Table option to DataLink Window Action selector.
    - MacOS DMG now bundled with Java 11 not Java 8, fixes poor rendering of selected tab label in JTabbedPane. This also avoids runtime warnings on some MacOS versions about secure coding.
    - About application button on MacOS should now display custom About TOPCAT window.
    - Improve metadata in tables created by Match windows; they now record match parameters such as max error.
    - Column XType is now displayed in the Columns Window.
    - Avoid writing `arraysize="1"` in `FIELD`/`PARAM` elements of VOTables with version >=1.3, in accordance with VOTable 1.3 Erratum #3.
    - Avoid non-VOUnit units in output VOTables in some cases.
    - New `test` scheme options "`g`" and "`w`".
    - Upgrade JSAMP to v1.3.9.
  Bugfixes
    - Fix annoying bug where text pasted into the TAP URL selector got mixed up with the placeholder text.
    - Fix some bugs to do with authentication and metadata acquisition in the TAP window.
    - Fix issue with display of multi-line text in TAP window ADQL tree on MacOS.
    - Fix bug in TAP window ADQL tab tree population in presence of illegal syntax for UDF form.
    - Fix ADQL Hints tab in TAP window which failed to load for some versions of Java.
    - Initial highlight of selected table in TAP window now works as well for delimited-identifer table names.
    - Bugfix update of CDS HEALPix library to v0.30.3, prevents occasional plot failures.
    - Fix parquet input handler bug related to compression.
    - Fix broken STC-S BOX parsing for Area plots.
    - Fix VOTable output bug that wrote infinite floating point array elements to TABLEDATA as "`+/-Infinity`" rather than "`+/-Inf"`.
    - Avoid stack overflow errors for long ASCII MOCs in Coverage functions.
    - Fix authentication bug to do with redirects.
    - Fix column search bug.
Version 4.10-1 (6 November 2024)
  New functionality
    - New STILTS Window button available from some windows: Match, TAP, CDS Upload X-Match, single cone, SIA, SSA, and multiple cone, SIA, SSA.
    - New Tick Label Angles configuration option in Grid tab of most plot type axis controls; allows angled labels that can accommodate more major ticks on crowded axes. Cube/Sphere (sometimes) and Corner plots now use angled axis labels by default.
    - New config option Sideways in Histogram Bins control General tab. This allows histogram-like plots to be accumulated on the vertical, not horizontal, axis.
  Minor enhancements
    - STC-S encoding in Area-like plots now copes with UNIONs of all shapes, not just of POLYGONs.
    - More units (seconds with SI prefixes) are now properly handled in VOTable `TIMESYS`-referencing fields.
    - Cope with whitespace round input URLs better than previous version (regression).
    - Update JSON-java library to 20240303. Behaviour is not expected to change in interesting ways, but some vulnerabilities are addressed.
  Bugfixes
    - Fix regression bug (since v4.9) in HTTP 3xx redirect handling that failed to cope with relative Location field values.
    - Fix regression issue (since v4.10) in URL construction that meant (at least) use of the `-running` command-line argument didn't work properly with relative filenames.
    - Fix bug in TAP curl logging.
Version 4.10-2 (8 November 2024)
  Bugfix
    - Fix failure when using STILTS window in Match windows for most matcher types other than Sky.

Next Previous Up Contents
Up: Release Notes
Previous: Acknowledgements

TOPCAT - Tool for OPerations on Catalogues And Tables
Starlink User Note253
TOPCAT web page: http://www.starlink.ac.uk/topcat/
Author email: m.b.taylor@bristol.ac.uk
Mailing list: topcat-user@jiscmail.ac.uk