Draft:Nom.tam.fits

nom.tam.fits is a full-featured, fast, 100% pure Java library for reading, writing, and modifying FITS files. The library owes its origins to Thomas A. McGlynn (hence the nom.tam prefix) at NASA Goddard Space Flight Center. Currently, it is maintained by Attila Kov&aacute;cs at the Center for Astrophysics | Harvard & Smithsonian.

Using the library effectively requires a level of familiarity with the FITS standards. and conventions. For example, while the library will automatically interpret and populate the mandatory minimum data description in FITS headers, it will not automatically process most optional standard or conventional header entries. It is up to the users to extract or complete the description of data, for example to include FITS world coordinate systems (WCS) , physical units, etc.

nom.tam.fits is an open-source, community maintained project hosted on GitHub as nom-tam-fits/nom-tam-fits. Further information and documentation, including a User's Guide and API documentation, can be found there.

History
The brief history of the library presented here is derived from (a) release notes and documentation published on the original HEASARCH home page of the project; (b) the commit history, release notes, and other documentation, published in the GitHub repository ; (c) public and private communications among the three lead maintainers who spearheaded the project at various stages of its existence.

The library was originally conceived and developed by Thomas A. McGlynn at NASA Goddard Space Flight Center. It was originally written for Java 1.0, which influenced many of the original design choices that remain in place to this day. The first published version was version 0.92 (12 October 2000), and was followed by a series of development releases, up until 0.99.6 (4 December 2007).

The library reached 'stable' status with the 1.0.0 release on 11 July 2008. Tom McGlynn remained the lead developer through version 1.12.0 (25 February 2015), occasionally integrating contributions from users, as attested by the release notes.

In 2015, Tom passed the baton to Richard van Nieuwhoven, who has already contributed significantly to version 1.12.0, and who then continued to oversee releases 1.13.0 (20 July 2016) through 1.15.2 (28 April 2017) as Tom took on a less active advisory role in the project. Ritchie has been instrumental in adding the initial image and table compression support to the library, as well as modernizing the API to use Java 6 features, such as generic types and the java.nio package. He also migrated the source code to GitHub (at version 1.12.0), set up continuous integration, added unit testing with nearly complete code coverage, set up a build system with Apache Maven, and began publishing GPG-signed release packages to both GitHub and the Maven Central repository.

In 2021, Attila Kov&aacute;cs from the Center for Astrophysics | Harvard & Smithsonian took over as the lead maintainer (still with the blessing from Tom McGlynn), and continued overseeing releases starting with 1.16.0 (13 December 2021). Continuous integration was migrated from Travis CI to GitHub Actions, and successive releases were/are aimed at fixing outstanding bugs, improving compliance to the FITS standard, providing a more consistent user experience, and more complete, more accurate documentation. The source was also updated to utilize Java 8 features, such as diamond operators, try-with-resources constructs, and default methods in interfaces.

At least 14 other developers (excluding bots) have also contributed bits and pieces to the library since the project's presence on GitHub, based on the contributor statistics available in the GitHub repository.

Adoption
At the time of writing this article, the GitHub project repository lists 73 other GitHub repositories that utilize nom.tam.fits. A few are also listed as dependents on Maven Central.

Some examples of software that rely on nom.tam.fits to handle FITS files (in no particular order):


 * NASA's Planetary Data System (PDS), specifically its Transform Tool, PDSView and PDS4 JParser components.


 * NASA's Interoperable Remote Component (IRC) software, which provided data aquisition for astronomical cameras such as CSO/SHARC-2 and IRAM/GISMO.


 * Starlink Project's Starlink Tables Infrastructure Library (STIL), used e.g. by TOPCAT.


 * Dataverse project.


 * International Virtual Observatory Alliance (IVOA) Data Access Layer (specifically the cadc-data-ops-fits submodule) and FITS package.


 * AstroImageJ is ImageJ for astronomy.


 * Advanced Data mining And Machine learning System (ADAMS) spectral base modules.


 * Spectral Line Identification and Modelling (SLIM) component of the MADCUBA software package for the analysis of astronomical data cubes.


 * CRUSH a data reduction package for many ground based or airborne far-infrared and submillimeter cameras, such as CSO/SHARC-2 and SOFIA/HAWC+.


 * JNUM Java numerical classes with an astronomy focus.


 * Terran Interstellar Plotter System (TRIPS), a stellar cartography system for stellar databases.


 * AstroToolBox for visualizing, identifying, and classifying astronomical objects.


 * JParsec for ephemerides computation.


 * Control and Data Handling (CDH) component for the SOFIA/HAWC+ camera.

Releases
Early releases, and related documentation, for versions 0.92 through 1.15.1 are available at the original HEASARCH site.

More recent releases (1.15.2 and later) are available on the GitHub project site.

Starting with version 1.12.0 (21 February 2015) releases are also published to the Maven Central Repository.

Starting with version 1.16.0, releases now follow a predictable, quarterly schedule with releases targeted around the 15th of March, June, September, and/or December. In the weeks and month(s) leading up to releases, a number of release candidates are published briefly on the GitHub project site to allow sufficient testing of the fixes and new features.

Redistribution
The nom.tam.fits library is also redistributed as the libfits-java package for Debian Linux, and as the nom-tam-fits RPM package by Fedora Linux. However, as of the writing of this article both of these redistributions are based on outdated versions of the library (specifically version 1.15.2).