Fork me on GitHub

Changes Report

Release History

Version Date Description
1.19.1 2024-03-25 Bug fix release, with improved table compression support.
1.19.0 2024-01-19 Feature release with bug fixes.
1.18.1 2023-09-11 Important bug fix release with minor enhancements.
1.18.0 2023-07-24 Feature release with compression fixes and many improvements.
1.17.1 2023-03-15 Maintenance release with critical bug fixes.
1.17.0 2022-09-11 Improved image compression, checksum support, and incremental writing
1.16.1 2022-03-21 Maintenance release with bug fixes.
1.16.0 2021-12-13 Compliance to FITS 4.0 standard, plus many more fixes and improvements.
1.15.2 2017-04-28 Maintenance release with bug fixes.
1.15.1 2016-08-19 Maintenance release with bug fixes.
1.15.0 2016-08-07 Table compression activated.
1.14.3 2016-06-05 Maintenance release with minor bug fixes.
1.14.2 2016-03-11 Maintenance release with minor bug fixes and enhancements.
1.14.1 2016-02-24 Maintenance release with minor bug fixes and enhancements.
1.14.0 2016-01-10 full Image compression support
1.13.1 2015-08-21 Maintenance release with fixes for hierarch/longstring and rewrite bugs
1.13.0 2015-07-17 This is a stability release, before the new fits standard will be implemented in version 2.0
1.12.0 2015-02-20  
1.11.1 2014-07-07  
1.11.0 2013-06-07  
1.10.0 2012-10-25  
1.08.1 2012-02-01  
1.07.0 2012-01-20  
1.07.0 2011-11-11  
1.06.0 2011-05-23  
1.05.1 2011-02-16  
1.05.0 2010-12-12  
1.04.0 2009-12-24  
1.03.1 2009-07-27  
1.03.0 2009-07-22  
1.02.0 2009-07-08  
1.01.0 2009-06-24  
1.00.2 2009-03-09  
1.00.1 2009-02-19  
1.00.0.1 2008-07-11  
1.00.0 2008-06-10  
0.99.3 2007-12-04  
0.99.5 2007-12-04  
0.99.3 2006-12-21  
0.99.2 2006-12-15  
0.99.1 2006-07-29  
0.99.0 2006-06-23  
0.97 2003-11-01  
0.96 2003-03-20  
0.93 2001-01-01  
0.92 2000-10-12  
0.91 1996-01-02  
0.90 1996-01-01  

Release 1.19.1 – 2024-03-25

Type Changes By
Fix Compressed tables had the ZCTYPn keywords written with a 0-based index, and thus were off-by-one in the FITS convention. Now fixed. Fixes 562. attipaci
Fix Fix inconsistently maintained ColumnDesc.fileSize, by replacing it with dynamic .rowLen(). Fixes 552. attipaci
Fix Fix the compression of variable-length table columns. These were completely off-spec in prior releases, but are now properly supported as per the (C)FITSIO convention, which is slightly deviating from the documented standard. However, based on private communication with the maintainers, they are inclined to resolve this discrepancy by updating the standard to match the (C)FITSIO implementation, and therefore we adopt the (C)FITSIO way also for compressing tables. Nevertheless, we provide the static CompressedTableHDU.useOldStandardIndexing(boolean) method to allow reading compressed VLA columns produced in the other way also (i.e as the current standard actually describes it). Note, that our VLA compression support is now much better than that of (C)FITSIO, whose current release contains multiple severe bugs in that regard. Fixes 557. attipaci
Fix Fix potential narrowing conversion issues uncovered by GitHub's CodeQL. Fixes 570. attipaci
Fix Eliminate unexpected exception thrown if trying to write an empty table to a file/stream. Now it works as expected. Fixes 576. attipaci
Fix Check setting elements in ColumnTable more consistently to avoid creating corrupted FITS tables. Fixes 578. attipaci
Fix Fix ArrayIndexOutOfBoundsException when defragmenting larger heaps. Fixes 580. attipaci
Add Find header cards with regex pattern matching with `Header.findCards()`. Fixes 558. rmathar
Add Added support for optionless Rice and HCOMPRESS compression, using the default option values as per the FITS standard. As a result RICE_1 can now be used for compressing integer-type binary table columns. Fixes 563. attipaci
Add Added support for reserving space in FITS files for future additions to binary tables in situ without disturbing the rest of the FITS file. Space for extra table rows can be reserved via BinaryTable.reserveRowSpace(int), while additional heap space for VLA additions / updates can be set aside by BinaryTable.reserveHeapSpace(int) prior to writing the table to a file. Note, however that (C)FITSIO may not be able to read files with reserved row space due to its lack of support for the standard THEAP keyword. Fixes 575. attipaci
Update Creating compressed tables now also checks that the requested compression algorithms are in fact suitable for table compression, or else throws an IllegalArgumentException. (Currently, only the lossless GZIP_1, GZIP_2, RICE_1, and NOCOMPRESS are allowed by the FITS standard for tables.). Fixes 563. attipaci
Update The parallel table compression has previously resulted in a heap with irreproducible random ordering. Now, the compressed heap is ordered consistently for optimal sequential read performance. Fixes 567. attipaci
Update From here on we'll omit writing the THEAP keyword into binary table headers when they are not necessary (that is when the heap follows immediately after the main table). This allows better interoperability with (C)FITSIO, which currently lacks proper support for this standard FITS keyword. Fixes 571. attipaci
Update Support heaps up to 2GB (previously they were limited to 1GB max). Fixes 582. attipaci
Update Uses the latest maven build and runtime dependencies. attipaci

Release 1.19.0 – 2024-01-19

Type Changes By
Fix Workaround for read-only FITS files on Windows network shares. Fixes 496. cek
Fix Keywords with hyphens in STScIExt had the wrong form previously. Fixes 531. attipaci
Fix Small fixes to HashedList handling iterator access corner cases. Fixes 532. attipaci
Fix Binary table NAXIS1 value was sometimes stored as a string. Fixes 535. attipaci
Add New targeted Data and HDU creation from Java objects via new Data+.from(Object) and Data+.toHDU() methods, replacing the now deprecated and unsafe [...]HDU.encapsulate(Object) methods. Fixes 488. attipaci
Add New Header.mergeDistinct(Header) method to allow copying non-conflicting header keywords from one FITS header to another. Fixes 489. attipaci
Add New inspection methods to UndefinedData class, to easily retrieve XTENSION type, BITPIX, and data size/shape information from HDUs containing unsupported data types. Fixes 490. attipaci
Add New access methods for parameters stored in RandomGroupsHDU types, according to the FITS specification. Fixes 492. attipaci
Add A better way to control how FITS I10 type columns are treated in ASCII tables, via static AsciiTable.setI10PreferInt(boolean) and .isI10PreferInt() methods. Fixes 494. attipaci
Add New methods to make the decompression of selected CompressedTableHDU tiles even easier (and safer) to use. Fixes 520. attipaci
Add New WCS and DateTime enums with an enumeration of all standard FITS WCS and date-time related keywords, and recognized values (constants). The WCS enums support alternate coordinate systems via the WCS.alt(char) method. For example to generate the "CTYPE1A" standard keyword you may call WCS.CTYPEna.alt('A').n(1). Fixes 531. attipaci
Add Support for INHERIT keyword via Fits.getCompleteHeader(...) methods. These methods will populate the mandatory FITS header keywords in the the selected HDU, and return either the updated header or else a new header composed up of both the explicitly defined keywords in the selected HDU and the inherited (non-conflicting) entries from the primary HDU. Fixes 532. attipaci
Add Adding standardized (IFitsHeader) keywords to HDU headers will now check that the keyword can be used with the associated HDU type (if any), and may throw an IllegalArgumentException if the usage is inappropriate. The type of checks (if any) can be adjusted via the new Header.setKeywordChecking() and/or the static Header.setDefaultKeywordChecking() methods. Fixes 534. attipaci
Add Setting values for HeaderCards with standardized (IFitsHeader) keywords now checks that the assigned value is compatible for the given keyword, and may throw an appropriate exception (such as a newly added ValueTypeException), or else log a warning message depending on the current value checking policy. The policy can be adjusted via the new static HeaderCard.setValueCheckPolicy() method. Fixes 534. attipaci
Add New FitsKey class to replace the poorly named FitsHeaderImpl class. (The latter continues to exist in deprecated form for compatibility). Added new functionality. Fixes 538. attipaci
Add New Standard.match(String) method to match one of the reserved keyword templates of the FITS standard to a keyword instance, such as "CTYPE1A" to WCS.CTYPEna. Fixes 538. attipaci
Update Demoted FitsException to be a soft exception, extending IllegalStateException. As a result, users are no longer required to catch these, or its derivatives such as HeaderCardException. Some methods that have previously thrown IllegalStateException may now throw a FitsException, in a backwards compatible way. Fixes 519. attipaci
Update Deprecated IHeaderAccess interface and its implementations. These were meant for internal use anyway, and with HeaderCardException now being a soft exception these classes just add confusion without providing any functionality that isn't readily available without them. Fixes 519. attipaci
Update The constructor of PaddingException does not throw a FitsException, and FitsCheckSum.Checksum also does not throw an IllegalArgumentException -- so they are now declared as such. Some related javadoc updates. Fixes 518. attipaci
Update Improvements to AsciiTable with addColumn() argument checking and more specific documentation. Fixes 525. attipaci
Update Synonyms has been extended to enumerate all synonymous WCS keys and a few other keywords with equivalent definitions. Fixes 531. attipaci
Update Added impl() method to IFitsHeader interface with a default implementation to eliminate code that was duplicated many times over across enums. Fixes 531. attipaci
Update IFitsHeader.n(int...) now checks that the supplied indices are in the 0-999 range, or else throw an IndexOutOfBoundsException. If too many indices are supplied it will throw a NoSuchElementException. And, if the resulting indexed keyword exceeds the 8-byte limit of standard FITS keywords it will throw an IllegalStateException. Fixes 531. attipaci
Update Attempting to create a HeaderCard with a standard keyword that has unfilled indices will throw an IllegalArgumentException. Fixes 531. attipaci
Update CompressedImageHDU.getTileHDU() now updates CRPIXna keywords also in the alternate coordinate systems (if present) for the selected cutout image. attipaci
Update Corrections to standard keyword sources, deprecations, synonyms, comments and associated javadoc. Fixes 538. attipaci
Update Change from unmaintained findbugs build dep to spotbugs successor. attipaci
Update Migrate testing from JUnit 4 to JUnit 5 Vintage. attipaci
Update Uses the latest maven build and runtime dependencies attipaci
Update Fully revised README (User's guide), with better organization, new sections, further clarifications, and many corrections. attipaci

Release 1.18.1 – 2023-09-11

Type Changes By
Fix Fixed broken default reading of ASCII tables in 1.18.0, without explicitly having to set FitsFactory.setUseAsciiTables(true). Fixes 466. attipaci
Add New Fits.verifyIntegrity(), BasicHDU.verifyIntegrity() and .verifyDataIntegrity() methods for verifying file / HDU integrity based on the stored checksums and/or data sums. The now useless checksum access methods of before have been deprecated and should be avoided. Fixes 474. attipaci
Add FitsInputStream to calculate checksums for all bytes that are read/skipped, allowing checksum verification for stream-based inputs also. Fixes 476. attipaci
Add Added Header.getCard() methods similar to existing .findCard(), but without changing the position at which new cards are added. The new method is now used more widely internally when interpreting headers. New Header.prevCard() method to complement existing .nextCard(), and .seekHead() / .seekTail() methods to set the position for new additions at the head or tail of the header space respectively. Fixes 475. attipaci
Update Updated README for proper checksum verification procedures. Fixes 473. attipaci
Update New cleaner-looking logos for github icons / profile image. Fixes 472. attipaci
Update Updated maven build and runtime dependencies to their latest releases. attipaci

Release 1.18.0 – 2023-07-24

Type Changes By
Fix Fixed use of ZDITHER0 keyword to restore or record random generator seed when dithering is used in (de)compression. Fixes 377. attipaci
Fix Fixed tiled (de)compresssion of some quantized images via GZIP. Fixes 349. attipaci
Fix Fixed incorrect handling of CONTINUE keywords with no quoted string value (a regression since 1.16). Fixes 436. attipaci
Fix Conversion of variable length float[] or double[] arrays to complex was broken since forever. Now it works for the first time as expected. Fixes 438. attipaci
Fix Fixed incorrect variable-length complex array descriptors in binary tables. Fixes 455. attipaci
Fix Consistent String return for both fixed and variable-length string columns in binary tables. Fixes 445. attipaci
Fix Fixed compressed table tiling with tile sizes that do not divide the table rows. Fixes 456. attipaci
Fix Fixed incorrect HCompress SCALE parameter handling. Fixes 462. attipaci
Add Added ability to stride while tiling. Fixes 387. at88mph
Add Added ability to stream image cutouts. Fixes 356. at88mph
Add Added ability to stream compressed image cutouts. Fixes 400. at88mph
Add Added NullDataHDU for more intuitive support for header only HDUs with no associated data. Fixes 335. attipaci
Add Added support for alternative RandomAccess immplementations. Fixes 352. at88mph
Add Added support for ComplexValue-based column in BinaryTable. Fixes 183. attipaci
Add Added support for bit-based columns (FITS type 'X') in binary tables. Fixes 450. attipaci
Add Added support for null (undefined) logical values for FITS logical columns in binary tables. Fixes 451. attipaci
Add More user-friendly data access in BinaryTable, using Java boxing for scalar primitive entries, and automatic type conversion (both narrowing and widening) for singleton values when possible. Many new BinaryTable methods to make it easier to build and use binary tables. Fixes 448. attipaci
Add Allow accessing binary table entries / rows directly from file in deferred read mode. The README for reading binary tables has been updated accordingly. Fixes 437. attipaci
Add Allow defragmenting binary table heaps to expunge stale data, and to optimize heap area for best sequential read performance. Fixes 453. attipaci
Add Simplified access to select tiles / regions of compressed data in both tile compressed tables and images. Fixes 452. attipaci
Add Support for the Substring Array Convention. (However, we will prefer the use of the more generic TDIM over the convention for fixed-width string-based columns.). Fixes 178. attipaci
Add Use HIERARCH-style keywords more easily within the library via the static methods of the Hierarch class. Fixes 458. attipaci
Update Significantly improved IO performance, now typically 2.5 to 4 times faster for images than prior releases and a whopping 25-50 times faster for reading streams than 1.15.2. Fixes 414. attipaci
Update Improved dithering performance by calculating the random sequence only once, and more efficiently. Fixes 407. attipaci
Update Significantly faster table data access and row additions. Fixes 441. attipaci
Update Unified deferred read implementation for all Data classes. Fixes 207. attipaci
Update Consistent behavior and method visibilities across Data subclasses. Fixes 395. attipaci
Update Stop the automatic creation of random group HDUs from compatible table data. Instead create binary or ASCII tables as appropriate given the FitsFactory settings. The FITS standard discourages the use of random group HDUs going forward, and support should be typically limited to dealing with some older existing data files in that format. If there is ever a need to create new random group HDUs, you can do it explicitly via RandomGroupsHDU.createFrom(Object[][]). Fixes 434. attipaci
Update Disable automatic (and inconsistent) detection of complex binary table data, when adding real-valued data columns to a binary table. Users should call BinaryTable.setComplexColumn() explicitly if pairwise real values should be converted to complex. Fixes 446. attipaci
Update Check data consistency when adding or setting data in binary tables. Fixes 447. attipaci
Update Do not use ASCII NUL (0x00) for padding between string array elements in binary tables, since it violates the FITS standard, in which an ASCII NUL terminates the entire string array entry. Fixes 454. attipaci
Update Tables now support up to Integer.MAX_VALUE (~2-billion) rows regardless of entry size. Fixes 131. attipaci
Update Improved handling of shared compression settings across option copies, and including validation. Fixes 461. attipaci
Update Various tweaks to FitsDate that should not affect user behavior. Fixes 394. attipaci
Update Revised PaddingException API and seamless internal handling. Fixes 420. attipaci
Update Header access methods in BasicHDU no longer remove significant leading spaces from strings. Fixes 435. attipaci
Update No longer exposing mutable internal arrays to users, giving them copies instead. Fixes 426. attipaci
Update Deprecate unsafe methods that should only be used internally (if at all) and never by users. Fixes 336. attipaci
Update FitsUtil.reposition() deprecated and changed to take FitsIO argument to match usage. Fixes 209. attipaci
Update Remove unnecessary IO synchronization in FitsFile, FitsInputStream, and FitsOutputStream classes. Fixes 429. attipaci
Update Deprecate hexadecimal values in headers. FITS does not support these, and you should not use them. Fixes 425. attipaci
Update Deprecate BigInteger and BigDecimal values in headers. FITS does not support these, and you should not use them. Fixes 430. attipaci
Update Code cleanup -- Consistent source code formating etc. Fixes 424. attipaci
Update Public user API javadoc now complete. It could be improved, but at least all packages, classes, and methods intentionally exposed to users are documented. Fixes 160. attipaci
Update Online API documentation is restricted to public classes and methods only, as appropriate for users who want to read/write FITS files. Classes and methods intended for internal use are clearly indicated when these are exposed in the public. Contributors can still generate the full documentation locally if desired using maven. Fixes 427. attipaci
Update Fully revised README (Getting Started guide) with better and more up-to-date examples. attipaci
Update Upgrade from JDK 11 to 17 for creating signed packages in the CI (but still in Java 8 compatibility mode). Fixes 402. attipaci
Update Updated maven build and runtime dependencies to their latest releases. attipaci

Release 1.17.1 – 2023-03-15

Type Changes By
Fix Fixed first extension written as primary if primary HDU contained no data (affects 1.17.0). Fixes 368. attipaci
Fix Fixed incorrect checksum calculated directly from file in multi-HDU FITS, and other checksum fixes (affects 1.17.0). Fixes 367. attipaci
Fix Fixed occasional NullPointerException in tiled image compression resulting from incomplete initializiation of TiledImageCompressionOperation. Fixes 341. keastrid
Update Fixed GitHub Actions site build error, by removing unused broken dependency from POM. Fixes 373. attipaci
Add Upload coverage report to Coveralls.io also (forks need to set a repo token via the repo secret COVERALLS_REPO_TOKEN if want to enable reporting also). Fixes 376. attipaci

Release 1.17.0 – 2022-09-11

Type Changes By
Add Generalized tile compression for any-dimensional images based on the FITSIO convention. Fixes 319. attipaci
Fix Fixed broken tile compression of non-square images. Fixes 318. attipaci
Fix CompressedImageHDU.fromInageHDU() now defaults to tiling by row if tile size is not explicitly specified, as per FITS specification and also for consistent behavior in higher dimensions. Fixes 318. attipaci
Update Safe incremental HDU writing via new FitsOutput interface, which is used to check whether HDUs should be set primary or not depending on where it is located in the output. Fixes 266. attipaci
Update Simpler, faster, and more versatile FitsChecksum class, with support for incremental checksum updates, checksum retrieval, and checksum computations directly from files. Fixes 323. attipaci
Add New checksumming methods: BasicHDU.calcChecksum(), .setChecksum(), .getStoredChecksum(), and .getStoredDataSum(); Data.calcChecksum(); Fits.calcChecksum(int) and .setChecksum(int) -- as well as an extended static API for `FitsCheckSum`. Fixes 323. attipaci
Update Checksum in-memory headers/data with less overhead through piped streams. Fixes 328. attipaci
Update Fits.setChecksum(), .setCheckSum(int), and .calcChecksum(int) compute checksum directly from the file, if possible, for deferred read data (i.e. data not currently loaded into RAM). This eliminates the need to keep potentially huge data volumes in RAM when computing or updating checksums in an existing FITS file. Fixes 323. attipaci
Update Fits.setChecksum() will now checksum all HDUs, including those not already loaded from disk -- keeping data in deferred read mode if possible. Fixes 323. attipaci
Add Added Fits.rewrite() to simplify re-writing the entire Fits objects, e.g. after updating checksums. The implementation is efficient in that it skips data segments in deferred read mode. BasicHDU.rewrite() is modified to make it efficient also. Fixes 323. attipaci
Add User adjustable header comment alignment position via Header.setCommentAlignPosition(int) and checking via .getCommentAlignPosition(). Fixes 283. attipaci
Add New Fits.getHDU() methods to select HDU from Fits by name (and version). Fixes 145. attipaci
Update Duplicate header keys, during parsing, are repoted though separate logger instance from Header's, with verbosity controlled via Header.setParserWarningsEnabled(boolean). Fixes 311. attipaci
Update Suppress repeated duplicate keyword warnings when parsing and improve checks for FITS standard violations. Added Header.getDuplicateKeySet() method to check which keywords have duplicates. Fixes 292. attipaci
Update Replacing header keys logs a warning when existing value type is incompatible wth the newly associated standardized keyword. Fixes 292. attipaci
Update Creation of header entries with standardized keywords logs a warning if associated value type is incompatible with the keyword. Fixes 292. attipaci
Update Improved header card ordering implementation. Fixes 292. attipaci
Add Added Data.isDeferred() method (defaulting to false) that can be used to check if a FITS Data object might be in deferred read mode, that is if it may not be fully loaded into RAM. Note, that while the method is properly implemented for the built-in data types of the library, it may not properly reflect the deferred status of external data implementations unless these override the method with something meaningful also. Fixes 323. attipaci
Update New logo. Fixes 74. attipaci

Release 1.16.1 – 2022-03-21

Type Changes By
Fix Fixed broken Java 8 compatibility of 1.16.0 due to Java compiler flags in POM. Note, after the change the build itself will require Java 9 or later!. Fixes 252. attipaci
Fix Fixed potential unchecked null in BinaryTableHDU. Fixes 243. attipaci
Update No Logger warnings about duplicate header cards if Header parser warnings are disabled. Fixes 257. attipaci
Update Added default ArrayDataInput/Output implementations. Fixes 210. attipaci
Update Removed runtime dependency on javax.annotation-api. Fixes 229. attipaci
Update Mostly automated updates of dependencies. dependabot

Release 1.16.0 – 2021-12-13

Type Changes By
Update This release contains numerous API changes and additions. While the source code is generally back-compatible with previous versions of this library for compiling, some method signatures have changed, and as a result the JAR should not be used as a drop-in replacement for applications that were compiled against earlier versions. To use version 1.16.0 of this library you should always compile your application against it. Fixes 197. attipaci
Update Long strings enabled by default (FITS 4.0 standard). Fixes 161. attipaci
Update Permissive default 'FitsFactory' settings: error-free reading of some flawed 3rd party files by default (as long as they can be made sense of). However, issued encountered with 3rd party FITS files are logged so they can be inspected. Added new 'FitsFactory.setDefaults()' method to restore default settings more easily. Fixes 195. attipaci
Update Set 'FitsFactory.useHierarch(true)' by default. HIERARCH style keys are written upper-case only by default, but case-sensitive support can also be enabled via a call to the 'setCaseSensitive(boolean)' method of the 'IHierarchKeyFormatter' instance used by 'FitsFactory'. Fixes 125. olebole
Add Added support for preallocated blank header space, as per FITS 4.0 standard. via 'Header.ensureCardSpace(int)' and 'Header.getMinimumSize()'. Headers remain rewritable in-place as long as they don't exceed their original size in the file. Fixes 177. attipaci
Add Added support for complex values in FITS headers, as specified by the FITS standard, via new 'ComplexValue' class. Fixes 172. attipaci
Add Added support for header integers in hexadecimal format, as specified by the FITS standard, e.g. via 'addHexValue(...)' and 'getHexValue(...)' methods in both 'Header' and 'HeaderCard' classes. Fixes 167. attipaci
Fix Prevent the creation of invalid header entries from code, by throwing informative runtime exceptions. New runtime exception classes 'HierarchNotEnabledException', 'LongStringsNotEnabledException', 'LongValueException', 'UnclosedQuoteException' are used to report when illegal action was pre-empted relating to FITS headers. Fixes 171. attipaci
Fix Prevent creating header cards with NaN and Infinite values. The FITS standard does not support these. Fixes 165. attipaci
Update More predictable explicit precision control for header decimals. The same number of decimal places are shown after the leading figure regardless whether fixed-decimal or scientific (exponential) notation is used. Fixes 169. attipaci
Add Added optional support for using 'D' instead of 'E' as the exponent in decimal representations (via 'FitsFactory.setUseExponentD(boolean)' setting), as specified by the FITS standard. Fixes 120. wcleveland
Update Fully preserve long comments for string values, including internal spaces in the comment, using the now standard long string convention. Fixes 173. attipaci
Update Simpler, better methods for adding creating comment and history entries in headers, such as via 'Header.insertComment(String)' or '.insertHistory(String)', or via 'HeaderCard.createCommentCard(String)' or '.createHistoryCard(String)'. Fixes 170. attipaci
Update 'Header.addValue(...)' and 'Header.insert...(...)' methods now return the newly created 'HeaderCard' objects for convenience. Fixes 170. attipaci
Update More predictable header card ordering when editing headers, both directly or indirectly via an iterator. Fixes 121. attipaci
Update New FITS IO class hierarchies for better layering and separation of functionality. Standard IO functions (for reading, writing, positioning, and skipping) now conform to their canonical contracts in the core Java API. The messy old IO API is also supported, though deprecated, to provide back compatibility until the next major release. The new IO classes are also 2 to 3 times faster than before. Fixes 192. attipaci
Update 'FitsHeap' access made a lot more efficient with true random access. Fixes 188. attipaci
Fix No 'EOFException' is thrown when skipping beyond the end of file, since it should be allowed in random access mode. Fixes 187. attipaci
Fix Consistent handling of logical ('true'/'false') values in FITS binary tables, including newly added support for 'null' (or undefined) values also as per FITS standard. Fixes 186. attipaci
Fix In prior versions 'char[]' arrays in binary tables were written as 16-bit Unicode and read back as 'short[]' integers. FITS recognises only ASCII character arrays with 1-byte per character. A new 'FitsFactory.setUseUnicodeChars(boolean)' option can toggle compliance to the FITS standard for 'char[]' arrays. However, the misconceived prior behavior remains the default to maintain back compatibility until the next major release. Fixes 184. attipaci
Add Replace fragmented 'PrimitiveType...' hierarchy with a more aptly named one-stop 'ElementType' class. The old hierarchy is also available, albeit in deprecated form. Fixes 182. attipaci
Add Type safe BITPIX values via new 'Bitpix' enum providing a restricted set. The unsafe BITPIX methods have been deprecated for removal in a future release. Fixes 191. attipaci
Add Added new 'Header.setParserWarningsEnabled(boolean)' option to log FITS standard violations when reading (3rd party) headers. Fixes 175. attipaci
Fix No more 'Logger' warnings on multiple CONTINUE keywords, tolerant HIERARCH parsing, and other small fixes. Fixes 153. attipaci
Add 'FitsDate' equals() / hashCode() / compareTo() implementations. Fixes 138. FinitePhaseSpace
Fix Fix management of sub-seconds in 'FitsDate'. Fixes 135. Zlika
Fix Check for and reject non-ASCII or non-printable characters in headers. The FITS standard allows only ASCII characters in the range of 0x20 to 0x7E in the headers. The new static method 'HeaderCard.sanitize(String)' is available to users to replace characters outside of the supported range with '?'. Fixes 130. olebole
Fix Minor fixes prior to release. Fixes 123. wcleveland
Update Source code updated for Java 8, with diamond operators and try-with-resources used throughout as appropriate. Fixes 164. attipaci
Fix Revised when exceptions are thrown, and they are made more informative by providing more essential details and traceable causes. Fixes 162. attipaci
Fix HIERARCH header cards are now written to conform to 'cfitsio' specification, which requires a space before '='. While the HIERARCH convention itself does not specify the extra space, it certainly allows for it, and with the change our FITS files shall be more conformant to, and readable, by yet another widely used library. Fixes 159. attipaci
Fix Check for 'markSupported()' when attempting to use 'mark()' or 'reset()' methods in 'ArrayDataInput', and throw an appropriate runtime exception if the methods are not supported by the implementation. Fixes 158. mbtaylor
Fix Fixed issues with handling of single quotes as part of user-supplied strings. Fixes 156. attipaci
Fix "I10" format ASCII tables are parsed as 32-bit 'int[]' by default (for back compatibility), unless 'TLMIN/TLMAX' or 'TDMIN/TDMAX' header entries indicate a more extended range. Added new 'AsciiTable(Header, boolean)' constructor to optionally change the preference to read "I10" ASCII table data as 64-bit 'long[]' columns. Fixes 143. mbtaylor
Fix Changed to generated serialVersionUIDs from 1L for classes that require it. Fixes 190. attipaci
Fix Various smaller fixes and improvements throughout, increased unit test coverage, and more comprehensive unit tests. attipaci
Fix Deprecated classes and methods that (a) were exposed in the public API even though they should not have been, (b) had names that poorly reflected their function, (c) were poorly conceived/designed in the first place, and/or (d) were prone to misuse with unpredictable results. The deprecated API remains supported nonetheless, and slated for removal in the next major release (2.0) only. attipaci
Fix A lot of the Javadoc API documentation has been revised and improved. attipaci

Release 1.15.2 – 2017-04-28

Type Changes By
Update Maintenance release with bug fixes.
Add Header can be controlled to specify the header card order. Fixes 113. ritchieGitHub
Fix ImageHDU tiler corrupts values after 2GB worth of data bug fixed. Fixes 112. ritchieGitHub
Fix Non standard BITPIX allowed during de/compression. Fixes 108. ritchieGitHub
Fix Add tiler support for ImageHDU from uncompressing a CompressedImageHDU?. Fixes 107. ritchieGitHub
Fix Remove redundant spaces in HIERARCH keys . Fixes 106. ritchieGitHub
Fix Fix integer overflow in case of negative values in combination with a defined blank value of Integer.MIN_VANUE. Fixes 105. ritchieGitHub
Fix make the worker threads deamons so they do not hold of a shutdown enhancement. Fixes 104. ritchieGitHub
Fix Update Outdated documentation in introduction enhancement, thanks to MaxNoe. Fixes 98. ritchieGitHub
Fix Fix Reading boolean arrays with getColumn bug. Fixes 90. ritchieGitHub

Release 1.15.1 – 2016-08-19

Type Changes By
Update Maintenance release with bug fixes.
Fix Comment type header cards where not protected against to long comments, that can result in corrupted headers. Fixes 102. ritchieGitHub
Fix Introduction document verified and corrected kind thanks to Maximilian Nöthe. Fixes 101. MaxNoe

Release 1.15.0 – 2016-08-07

Type Changes By
Update Binary table compression and tiling are now fully supported by nom-tam-fits. An API for easy handling of compressed tables is now provided.
Add Binary table compression now fully supported. Fixes 61. ritchieGitHub
Add The dummy compression algorithm NOCOMPRESS is now supported. Fixes 70. ritchieGitHub
Update Multiple code quality fixes, provided by various developers. Fixes 96.

Release 1.14.3 – 2016-06-05

Type Changes By
Update Maintenance release with bug fixes.
Update Removal of redundent attribute "rowSize". Attention here the public api has a minor change, the deletColumns in the ColumnTable does not return an int anymore. Fixes 92. ritchieGitHub
Update Fix for a bug in encurling the multim arrays of the BinaryTable with variable length columns. Fixes 91. ritchieGitHub

Release 1.14.2 – 2016-03-11

Type Changes By
Update Maintenance release with important bug fixes and the restoration of java 6 support.
Update Fits does not handle comments that start with 8 blank characters correctly when reading/writing/reading bug. Fixes 84. ritchieGitHub
Update Restored Java 6 compatibility. Fixes 80. ritchieGitHub

Release 1.14.1 – 2016-02-24

Type Changes By
Update Maintenance release with minor bug fixes and enhancements.
Update Important note for all users, since 1.13.0 a bug is fixed in the table behavior. This can cause problems for users expecting the "buggy" result. See the issue on github for more details. Fixes 79. ritchieGitHub
Update Since a approximately 1.12.0 nom-tam-fits uses java.util.logging for all logs, the details what and where to log to can therefore be configured freely. Fixes 77. ritchieGitHub
Fix In case of long strings the difference between a null comment and an empty string was not detected correctly. Fixes 76. ritchieGitHub
Add Image compression support for the null pixel mask, this allows correct NaN with the use of lossy compression's. Fixes 60. ritchieGitHub

Release 1.14.0 – 2016-01-10

Type Changes By
Update Image compression and tiling are now fully supported by nom-tam-fits. A 100% Java implementation of the compression libraries available in cfitsio was implemented. An API for easy handling of compressed images is now provided. Support for binary table compression and the NULL_PIXEL_MASK features is anticipated in the next release.
Update When [de]compressing all available CPU's are automatically utilized.
Update Internal compression allows FITS files to be created where the data are efficiently stored, but the metadata is still easily accessible. The tiling of images is particularly critical for supporting efficient access to subsets of very large images. A user can easily access only the tiles that overlap the region of interest and can skip data not of interest. While some skipping might be possible with uncompressed FITS files (i.e., read only the rows overlapping the desired subset), internal tiles can be much more efficient when the image is substantially larger than the subset. Most compression algorithms interfere with the ability to skip uninteresting data, but tiles are compressed independently, so users can benefit both from the compression and the selection of only a subset of the image.
Add Added a [de]compression API supporting all compression methods in the proposed updates to the FITS standard. Fixes 48. ritchieGitHub
Fix Wrong checksum calculation corrected. Fixes 26. ritchieGitHub
Fix Some problems with data segments that are bigger than 2GB corrected. Fixes 54. ritchieGitHub
Fix Header parsing performance optimization. Fixes 62. ritchieGitHub
Fix Comment style cards with a empty key value can now be used multiple times. Fixes 68. ritchieGitHub
Update Alignment of hierarch headercard values deactivated. Fixes 68. ritchieGitHub
Add The formatting of hierarch card keys can mow be be controlled. Two formats are provided. Fixes 72. ritchieGitHub

Release 1.13.1 – 2015-08-21

Type Changes By
Update Maintenance release with fixes for hierarch/longstring and rewrite bugs.
Fix After the correction of #44 the padding calculation of the fits header was wrong, now the calculation is consistent. Fixes 46. ritchieGitHub
Fix Improved the calculation of the number of cards to be used for a longstring in case of a hierarch cards because it was wrong when some special string lengths where used. Now rewriting is useing the new calculation to see if the header fits in place. Fixes 44. ritchieGitHub
Fix More variants of the hierarch keywords as in #16. Fixes 43. ritchieGitHub
Fix More variants of the hierarch keywords allowed (lowercase and dot), but writing will convert the keywords back to the standard. Fixes 16. ritchieGitHub

Release 1.13.0 – 2015-07-17

Type Changes By
Update Major updates to the util package including a set of routines for efficient copyying of arrays of all types. Some of the special FITS values are collected in the FitsIO class. New buffering utility classes have also been created. Some methods that were public in the util package but which were not used in the FITS library have been removed. The logging is now using java.util.logging, no standard out or stanard error is used anymore.
Update Added utilty class for updating checksums
Update Added examples in utilities package for how to use new Header enumerations.
Update Builder pattern for the creation of cards introduced. Fixes 35. ritchieGitHub
Fix Fixed handling of binary tables built from an empty state row by row. Fixed coupling of binary tables and the FITS heap to allow copying of binary tables using the internal ColumnTable representation. Fixes 24.
Update Reorganized compression and added internal compression package. Fixes 23. ritchieGitHub
Remove Tile compression, will be implemented from scratch in 2.0 and is not yet available in 1.13.0. Fixes 23. ritchieGitHub
Update Unit tests extended to cover 92% of the library . Fixes 29. ritchieGitHub
Update Longstring support was improved and longer comments are now supported. Fixes 17. ritchieGitHub
Fix Compression dependecy to apache compression is now optional again. Fixes 20. ritchieGitHub
Fix When reading/writing the same card the comment moved one blank to the right. Fixes 12. ritchieGitHub
Fix All javadoc's are now java-8 compatible and produce no warnings. Fixes 29. ritchieGitHub
Update Support for biginteger and bigdecimal. Fixes 15. ritchieGitHub
Update Generic detection of the value type of a card. Fixes 14. ritchieGitHub
Update Insert a header card at a specific position. Fixes 7. ritchieGitHub
Update All internally used keyword references are now enumerations. Fixes 36. ritchieGitHub
Update Comment mapping is now moved to the standard keyword enumeration. Fixes 37. ritchieGitHub
Update The settings of FitsFactory are now changeable to thread local specific settings. Fixes 21. ritchieGitHub

Release 1.12.0 – 2015-02-20

Type Changes By
Add Enumerations where added for ~1000 more or less Standard fits headers are now included (making compile references to headers possible). ritchieGitHub
Add Moved the sources to github and the artifacts to the central repo. ritchieGitHub
Add Moved the license to maven as build system, incl reorganisation of the project. tests are no included in the published jars any more. ritchieGitHub
Update Moved the license to the official unlicensed. ritchieGitHub
Add Creation of a project site on github with issue management. ritchieGitHub
Update Java formatting/licence updating is now done by the maven plug ins. ritchieGitHub
Update Moved the code to Java 1.6 and @Override is now consistent. ritchieGitHub
Add Richard van Nieuwenhoven joined the team. tmcglynn

Release 1.11.1 – 2014-07-07

Type Changes By
Update Debuggging statements inadverently left in V111.0 were removed. tmcglynn

Release 1.11.0 – 2013-06-07

Type Changes By
Fix Fixed error in handling of strings with non-terminated quotes so that these don't crash program (thanks to Kevin McAbee) Kevin McAbee
Update Deferred allocation of memory when creating FitsHeap's (thanks to Vincenzo Forchi, ESO). Vincenzo Forchi
Update Fixed error in getting size of associated data for dummy headers in Header.getDataSize(). This could return 1 rather than 0 if NAXIS=0 was used to signal a dummy. This doesn't affect data when read normally (as full HDUs) since the ImageData class does the computation correctly. (Thanks to Pat Dowler, CADC) Pat Dowler
Add The source code JAR (fits_src.jar) includes a number of new classes for which the corresponding class files are not included in fits.jar. These classes are pre-alpha versions of support for tile compressed data that is being developed. Interested Users may take a look at these, but they definitely are not expected to work today. Support for Rice, Gzip and HCompress compression is expected. tmcglynn

Release 1.10.0 – 2012-10-25

Type Changes By
Update No functional changes to the FITS code are included in this release. All internal documentation has been updated to reflect that this library is now available in the public domain. tmcglynn

Release 1.08.1 – 2012-02-01

Type Changes By
Fix Fixed error in the writing of ASCII table columns where all of the elements of the table were null or 0 length strings. Previously we would write a column with TFORM A0. This is not supported by CFITSIO and since it is not valid Fortran is of dubious legality for FITS. Such columns are now written with A1 (issue noted by Jason Weiss, UCLA). Jason Weiss
Fix AsciiTable did not check if columns were of a valid type (if the FitsFactory methods were used, then a BinaryTable would be written, but a user can explicitly instantiate an AsciiTable). A FitsException is now returned if a column other than a String, double, int or long array is used tmcglynn

Release 1.07.0 – 2012-01-20

Type Changes By
Add Added boolean hadDuplicates() and List getDuplicates() methods to Header to allow users to track if there were duplicate keywords in a header. tmcglynn

Release 1.07.0 – 2011-11-11

Type Changes By
Update This release contains some new features suggested by Booth Hartley (IPAC) who supplied modified code including: Booth Hartley
Update Allow a FITS file to have invalid data after a valid FITS HDU. User can call FitsFactory.setAllowTerminalJunk(true) to enable this. The Fits object will return all valid HDUs. Note that whatever follows the valid FITS data must start with something that is clearly not FITs. This includes modifications to FitsFactory and Header. tmcglynn
Update Allow users to find original size of headers as they were read from some source file. The library throws away duplicate key values, so that the number of header cards in the header as read may be smaller than the original data. The getOriginalSize() gets the original size of the header in bytes. A resetOriginalSize() allows the user to tell the library that this header has been updated on disk and now has the same number of records as internally. tmcglynn
Fix Fixed the order of the EXTEND keyword to follow the NAXISn keywords when it is specified. This constraint on the EXTEND keyword is no longer required in the latest version of the standard, but it doesn't hurt anything and may make the file more acceptable to some readers. tmcglynn
Fix Fixed JavaDoc errors for a number of files. tmcglynn
Fix Fixed a bug in Header.rewriteable() related to the same issue as the original size. tmcglynn
Update Updated Fits.setChecksum so that it will now set both the CHECKSUM and DATASUM keywords. tmcglynn
Update Added tests for the new capabilities above and updated the checksum test. tmcglynn

Release 1.06.0 – 2011-05-23

Type Changes By
Update Substantial reworking of compression to accommodate BZIP2 compression. The Apache Bzip library is used or since this is very slow, the user can specify a local command to do the decompression using the BZIP_DECOMPRESSOR environment variable. This is assumed to require a '-' argument which is added if not supplied by the user. The decompressor should act as a filter between standard input and output. tmcglynn
Update User compression flags are now completely ignored and the compression and the compression is determined entirely by the content of the stream. The Apache library will be needed in the classpath to accommodate BZIP2 inputs if the user does not supply the BZIP_DECOMPRESSOR. tmcglynn
Update Adding additional compression methods should be much easier and may only involve adding a couple of lines in the FitsUtil.decompress function if a decompressor class is available. tmcglynn
Update One subtle consequence of how compression is now handled is that there is no advantage for users to create their own BufferedDataInputStream's. Users should just provide a standard input stream and allow the FITS library to wrap it in a BufferedDataInputStream. tmcglynn
Fix A bug in the UndefinedData class was detected Vincenzo Forchi and has been corrected. V. Forchi
Update The nom.tam.util.AsciiFuncs class now handles ASCII encoding to more cleanly separate this functionality from the FITS library and to enable Java 1.5 compatibitity. (Suggested by changes of L.Bourges) Other V1.5 incompatiblities removed. tmcglynn
Update The HeaderCommentsMap class is now provided to enable users to control the comments that are generated in system generated header cards. The map is initialized to values that should be the same as the current defaults. This should allow users to emulate the comments of other packages. tmcglynn
Update All Java code has been passed through NetBeans formatter so that it should have a more uniform appearance. tmcglynn

Release 1.05.1 – 2011-02-16

Type Changes By
Fix The implementation of long string values was incorrect, using COMMENT rather than CONTINUE cards.noted originally by V. Forchi. V. Forchi
Fix The placement of the header cursor after opening a primary array was such that unless the user took explicit action to move the cursor, new header records would be written before the EXTEND keyword which is a violation of the FITS standard (although it would not affect the operations of this library). The library now leaves the cursor just after the EXTEND keyword where new keywords are legal. It's still possible for users to write an illegal header but now it requires at least a little effort on their part.noted originally by V. Forchi. V. Forchi
Update This build procedure for FITS library has been changed. The library is now stored as a NetBeans project and the standard NetBeans build script has been modified to generate the fits.jar and fits_src.jar. The names of a number of the test procedures have been slightly modified (XXXTester -> XXXTest) and test data are included in the class jar file. tmcglynn

Release 1.05.0 – 2010-12-12

Type Changes By
Update Adding methods to allow finer control of the placement of metadata records for columns of FITS tables. This could previously be done using Cursors, but the TableHDU.setTableMeta() methods now allow these to be specified more directly. This involves changes only to TableHDU. Usage is illustrated in the test method BinaryTableTest.columnMetaTest.by Laurent Bourges Laurent Bourges
Update Adding more rigor to the transformation between bytes and strings and fixing a bug in the handling of strings with embedded nuls. According to the standard an embedded null should terminate an string in a binary table.by Laurent Bourges The standard also precludes other non-printing characters from strings. This has been ignored previously, but there is now a method FitsFactory.setCheckAsciiString(boolean flag) which can be called to turn on checking. A warning will be issued and non-printing characters will be converted to spaces if this flag is set. Only a single warning will be issued regardless of the number of invalid characters are seen. There are changes in a number of classes where the conversions occur to ensure that the ASCII charset is used. How these changes work is illustrated in BinaryTableTest.specialStringsTest.by Laurent Bourges Laurent Bourges
Update Handling fixed and variable length, single and double precision complex data. The library uses a float[2] or double[2] for a complex scalar. This is mostly bug fixes to existing code and changes are only in BinaryTable and BinaryTableHDU. The method BinaryTableHDU.setComplexColumn() allows the user to tell the FITS writer that a field which otherwise would be treated as a float or double array (with most rapidly varying dimensionality of 2) should be treated as complex. The internal data representations are identical. Variable length complex data will be found automatically if number of elements actually varies. A variable length complex column is a 3-D float or double array where the last dimension (for Java) is always 2, the first dimension is the number of rows in the table and the middle dimension is the number of complex numbers in the row and may vary from row to row. Other variable length columns are represented as 2-D arrays, where the first index points to the row, and the second index enumerates the elements in the row. Use of complex columns is illustrated in BinaryTableTest in the routines testSimpleComplex (fixed columns), testVar (variable length columns), and buildByColumn and buildByRow where columns and rows containing complex numbers are added to existing tables.by Laurent Bourges tmcglynn
Update Changing the null HDU created when a table is to be written without a prior image to use a vector with dimensionality 0 rather than a one-dimensional vector with a dimension of 0. I.e, use NAXIS=0 rather than NAXIS=1, NAXIS1=0.by Laurent Bourges tmcglynn
Update Consolidating the writing of padding at the end of FITS elements into the FitsUtil.pad methods. tmcglynn
Update Adding the reset() method to the FitsElement interface. This attempts to reset the Fits input stream pointer to the beginning of the element. It does not throw exceptions but will return false if not successful. This is intended to make it easier for user who wish to use low-level I/O to read FITS data, by allowing them to position the stream to the beginning of the data they are interested in. tmcglynn
Update Changed FitsUtil.HDUFactory(Object x) to accept a Header object as well as the various kinds of data inputs. tmcglynn
Update Provided a method in BinaryTable to get back the ModelRow array. This makes is easier for users to do low level I/O in binary tables. An ArrayDataInput object will read a row of the table, given the result of getModelRow(). tmcglynn
Update Added a getColumns() method to TableHDU. This returns an Object[] array where each entry is the result of getColumn(n) tmcglynn

Release 1.04.0 – 2009-12-24

Type Changes By
Update Support for the HEASARC long strings convention has been added. This affects only the Header class. Two new public static methods have been added. setLongStringsEnabled(boolean) allows the use to enable/disable the handling of long strings. getLongStringsEnabled() returns the current setting. By default long strings are disabled. The convention is enabled automatically whenever a header is read which has the LONGSTRN keyword is read. It is not disabled if subsequent headers are read which do not have this keyword. The addValue(String,String,String), getStringValue(String) and removeCard(String) methods are affected, allowing the user to set, read and delete long string values. The library does NOT ensure that users do not interpolate new keywords or comments inside the card sequence that is used to store the long string value. tmcglynn
Fix A bug in the processing of keyword values with embedded apostrophes was fixed. Apostrophe's were properly doubled in encoding but the doubling was left when the values were read. tmcglynn
Fix A potential bug in the processing of headers discovered by Mark Taylor was fixed. Mark Taylor

Release 1.03.1 – 2009-07-27

Type Changes By
Add The implementation of the FitsUtil.byteArrayToStrings method was changed so that trimmed space from strings can be cleaned up more efficiently. Change suggested by J.C. Segovia (ESA). There should be no effect -- other than memory usage -- on external programs. J.C. Segovia
Update Users might want to note that when reading string values in binary tables, both leading and trailing spaces are trimmed from the string values. tmcglynn

Release 1.03.0 – 2009-07-22

Type Changes By
Add This release adds further support for large datasets where the size of an HDU may exceed 2GB. In ArrayDataInput (and the BufferedFile and BufferedDataInputStream that implement it) int skipBytes(int) method of java.io.DataInput is now overloaded with long skipBytes(long). In ArrayFuncs int computeSize(Object) method is augmented with long computeLSize(Object) It was not possible to use the same name here since the argument type is the same. Similarly int nElements(Object) is now matched with long nLElements(Object) These changes should not affect current usage of the existing methods. References to skipBytes and computeSize in the FITS classes now take advantage of these new methods. While these changes increase the support of the library for large datasets, there are still a number of restictions that arise from Java's limit that array indices must be ints. E.g., no single dimension can exceed 2 GB, and the total size of the heap for a given binary table HDU cannot exceed 2 GB. ASCII tables may also be limited to 2 GB in some circumstances. Files which exceed these limits may be readable using line by line approaches, but users will need to use the library at a much lower level. tmcglynn
Add The Header.read() method may now throw an IOException in circumstances where it would previously throw an Error. It probably should throw a FitsException, but that was not in the signature and might have broken existing programs. tmcglynn
Fix A bug in the new PaddingException was fixed which allows use of Tilers with truncated Image HDUs. tmcglynn
Update Some obsolete comments indicating that BITPIX=64 was an extension of FITS were deleted. FITS has officially supported longs for a fair number of years now. tmcglynn
Update The regression tests have been augmented to test the new features, but users should note that the new BigFileTester test takes a very long time to run. E.g., on the primary development machine this takes 240 seconds while all of the other tests finish in just a few seconds. The time is simply the time it takes to write a file of known content that is more than 2 GB in size. tmcglynn

Release 1.02.0 – 2009-07-08

Type Changes By
Update ASCII tables with data fields that were blank filled were not being handled properly. According to the FITS standards, numeric fields where the FITS table has blanks are to be treated as containing 0. A parsing error was being returned. The getInt, getLong, and getDouble methods in ByteParser were changed to acoommodate this case (getFloat simply calls getDouble).suggested by L. Michel L. Michel
Update A new exception, PaddingException, which inherits from FitsException has been added. This exception is thrown when an otherwise valid HDU is not properly padded to the next 2880 byte boundary. The exception class has a getTruncatedHDU method which allows the user to get the information in the truncated HDU. In addition to the new class changes were made in BinaryTable, AsciiTable, UndefinedData, ImageData and RandomGroupsData to throw the exception at the appropriate time. The main Fits method was also updated so that when its readHDU() method is being used, the notional header that is given to the truncated HDU in the Data classes is replaced by the actual header. If a user wishes to ignore padding exceptions, then a FITS file may be read using the following idiom in the new nom.tam.fits.test.PaddingTester to see a complete example of this idiom. tmcglynn

Release 1.01.0 – 2009-06-24

Type Changes By
Update A number of changes were implemented to handle large FITS files more gracefully and to correct bugs associated with large files. This includes a change to the method Data.getTrueSize(); This method was public only for the BinaryTable data type and previously returned an int. It now returns a long. User programs which called this method will need to be recompiled. Specific bugs were noted by Javier Diaz and Juan Carlos Segovia. Note that the program may still fail on very large files but it should give more informative error messages when it does so tmcglynn
Fix A bug noted by Thomas Granzer in the handling of HIERARCH keyword values was also corrected. tmcglynn

Release 1.00.2 – 2009-03-09

Type Changes By
Fix Fixed bug where reading a table by rows caused reading a subsequent HDU to fail. Added tests to BinaryTableTester and HeaderCardTester. tmcglynn

Release 1.00.1 – 2009-02-19

Type Changes By
Fix Fixed bug where exponential notation in FITS header keywords used 'e' rather than 'E' (noted by Javier Diaz) Javier Diaz

Release 1.00.0.1 – 2008-07-11

Type Changes By
Add The major chage to this release is support for .Z compressed images. A problem reading past the end of files in normal FITS processing was included in the 1.0 release and was fixed (7/11/08). The earlier jars were overwritten. The problem shows up in the regression test suite. tmcglynn

Release 1.00.0 – 2008-06-10

Type Changes By
Add The major chage to this release is support for .Z compressed images. This is implemented by using the uncompress command which must be in the user's execution path. tmcglynn
Update There is much more dynamic checking of the magic number of inputs to determine whether the input to the FITS constructor is compressed or not, and if compressed what the compression type is. This can still be confused but in many cases it will get the compression right regardless of what the user specifies. Future versions may completely ignore the user specified compression flag. tmcglynn
Fix Bug fix to BinaryTable by A. Kovacs A. Kovacs

Release 0.99.3 – 2007-12-04

Type Changes By
Fix Binary table handling of 1 character strings. tmcglynn

Release 0.99.5 – 2007-12-04

Type Changes By
Update Added Support HTTPS, FTP and FILE URLs tmcglynn
Update Added Fits(String,compressed) constructor tmcglynn
Update Made some of the methods in FitsFactory public. tmcglynn
Update Added getRawElement method to Binary table. tmcglynn
Update Changed handling of double values in header so that they all fit into the fixed format. In rare circumstances this may result in a loss of precision. tmcglynn
Fix Additional fixes for zero length and null strings tmcglynn
Fix Fix to handling of Strings in Binary tables (A. Kovacs) A. Kovacs

Release 0.99.3 – 2006-12-21

Type Changes By
Update Additional changes to handle null and zero length strings. tmcglynn

Release 0.99.2 – 2006-12-15

Type Changes By
Update Moved code to use subversion repository and Ant compile scripts. tmcglynn
Update Major transformations of all test code to use Junit and automated checking rather than comparing print outs. tmcglynn
Update nom.tam.fits.utilities package created and FitsCopy and FitsReader classes were moved there. tmcglynn
Update A few test classes, e.g., BigImage and RMFUpdTest were deleted and their functions subsumed into the other tests. tmcglynn
Update Test routines now considered standard part of library. There are not separate JARs for the test routines. tmcglynn
Update Note that the test routines use Annotations and may not compile with versions of Java prior to 1.5. tmcglynn
Add ArrayFuncs: Added arrayEquals() methods which allow comparison of arrays of arbitrary dimensionality. Used extensively in the updated test classes. tmcglynn
Fix AsciiTable: Setting a row, column or element de-nulls any elements that were set to null. Fixed offsets in columns after column was deleted. tmcglynn
Fix FitsUtil: Fixed bug in maxLength which looked for nulls in the array pointer rather than the individual strings. Added check for nulls in stringsToByteArray tmcglynn
Fix HeaderCard: Truncated String in one argument constructor to a maximum of 80 characters. tmcglynn
Fix BinaryTable: Fixed handling of columns with 0 width (e.g., 0 length strings, or arrays of 0 length. tmcglynn
Fix ColumnTable: Fixed handling of columns with 0 width. tmcglynn

Release 0.99.1 – 2006-07-29

Type Changes By
Update Added new methods to delete rows and columns from both binary and ASCII tables. There are changes to many of the table classes including util/ColumnTable. These changes were suggested by row deletion code written by R. Mathar, but the actual implementation is entirely independent and errors are handled somewhat differently than in his code. There are deleteColumns and deleteRows methods in TableHDU that delete either a specified range or all tables or columns after (and including) the one specified. tmcglynn
Update The util.HashedList implementation has been completely revised. It now uses a HashedMap for keyed access and an ArrayList for sequential access. It no longer implements a simple but custom list structure. The public interface was not significantly changed. tmcglynn
Update Header now sorts keywords before a header is written to ensure that required keywords come where they need to be. Previously users needed to work to make sure that they wrote required keywords in the right location in the header. A new class, HeaderOrder, is used. tmcglynn
Fix A number of errors in the handling of variable length arrays were fixed. These were pointed out by Guillame Belanger. This included changes to util.ColumnTable but mostly BinaryTable and FitsHeap. tmcglynn
Update A number of changes mostly to BinaryTable or documentation in other routines suggested by R. MAthar. R.J. Mathar

Release 0.99.0 – 2006-06-23

Type Changes By
Update The three packages, nom.tam.fits, nom.tam.util and nom.tam.image have been combined into a single JAR file for the convenience of the user. tmcglynn
Add Added support for Checksums. Use the setChecksum methods in the FITS class to add checksums to FITS HDUs. The static method setChecksum(HDU) adds a checksum to a given HDU. The instance method setChecksum() adds checksums to all HDUs in the file. Note that setting the checksum should be the last step before writing the file since any manipulation of the file is likely to invalidate the checksum. (This code was contributed by R.J. Mathar, Leiden University). R.J. Mathar
Add Changed handling of 1-d arrays with a single element so that they can be distinguished from scalar values. No TDIM will be be created for scalar columns, and a TDIMn = '(1)' will give an array rather than a scalar value. (Suggested by Jorgo Bakker. ESA) For data written using the previous version of the FITS library, this may cause problems when the data is read with the new version, since the type of the returned column will be different. tmcglynn
Add When checking if a file is compressed, the actual content of the file will be used if possible rather than the name (Suggested by Laurent Michel, CDS) Laurent Michel
Update The code used to support TFORMn = 'xNNN' where the array dimension followed rather than preceded the format type. This has been deleted (Suggested by Laurent Michel, CDS) Laurent Michel
Update Zero-length string values should now be allowed as header keyword values (Bug noted by Fred Romelfanger, ST ScI and Jorgo Bakker, ESA). Fred Romelfanger and Jorgo Bakker
Update The addLine methods in Header are now public rather than protected. tmcglynn
Update If the Fits.write() method is called using a BufferedFile, then the size of the file is truncated at the end of the write. Otherwise if the FITS data was being written into a previously existing file of greater length, there would be extra bytes at the end of the file. This is still possible if the user uses the write methods for individual constituents of the FITS object. tmcglynn
Add The ArrayFuncs.newInstance method now accepts an dimension array of length 0 and returns a 1-d array of length 1 to emulate a scalar. tmcglynn
Fix Corrected bug in writing a binary table when the read of that table had been deferred. tmcglynn

Release 0.97 – 2003-11-01

Type Changes By
Fix Version 0.97 corrects several bugs in the handling header keywords and ASCII tables and Images. tmcglynn
Update The HeaderCard class now has constructor with the signature (String,String,boolean) which may be used to generate either a comment style card with the keyword and value given, or a card with a null value tmcglynn
Fix The handling of the EXTEND keyword has been made consistent with FITS standards tmcglynn
Fix ASCII tables are first read to an intermediate byte buffer and then parsed as needed. Bugs where this buffer was being deleted at inappropriate times, or left undeleted when it was invalid were fixed. This should fix errors when AsciiTables are read from non-seekable sources. This should slightly speed up most access to ASCII tables tmcglynn
Fix In certain circumstances an Image would not be properly initialized before it was to be written tmcglynn
Fix The routines Header, HeaderCard, ImageData and AsciiTableData where modified in this release tmcglynn
Add The getChannel method was added to BufferedFile tmcglynn

Release 0.96 – 2003-03-20

Type Changes By
Update The handling of PCOUNT, GCOUNT and EXTEND keywords was changed in images so that the first two are only generated for extensions and the first only for primary HDU's. tmcglynn
Fix A bug in the creation of ASCII Table Headers was fixed. Some of the header cards in the header were being inserted as if they were comments, allowing multiple copies to be generated. This was also possible when a Header was created from an array of strings. tmcglynn

Release 0.93 – 2001-01-01

Type Changes By
Add The HeaderCard class has been modified to handle The HIERARCH keyword convention. The FitsFactory now has methods set/getUseHierarch to enable/disable this processing tmcglynn
Add A new interface FitsElement has been added which is implemented by the BasicHDU, Header, Data and FitsHeap classes. It enables users to more easily deal with FITS data at the byte level. There is also a public method getDataSize in Header to get the size in bytes of the associated data element including padding. The FitsHeap class has been made public tmcglynn
Fix Several bugs relating to null images were corrected. (Thanks to Jens Knudstrup) (ImageData) Jens Knudstrup
Fix The handling of EOF conditions in array reads in the BufferedFile and BufferedDataInputStream classes was made consistent with the behavior of java.io classes reading byte arrays tmcglynn
Fix Several bug fixes implemented by Alan Brighton (and already fixed in the Jsky distribution) were incorporated tmcglynn
Fix All references to the java.lang.reflect.Array.newInstance() methods were modified to use new methods with the same signature in ArrayFuncs. These new methods throw an OutOfMemory exception when an array cannot be created. The JVM methods seem -- in contradiction to the documentation -- to simply return null. Previously the program could mysteriously crash when used to read large files, when the null in a dynamic allocation was eventually dereferenced tmcglynn

Release 0.92 – 2000-10-12

Type Changes By
Update BinaryTable Fixed bug initializing BinaryTable's read from streams (rather than files) tmcglynn

Release 0.91 – 1996-01-02

Type Changes By
Update FitsDate: added getFitsDateString tmcglynn
Update Header: FitsDate: made several methods public tmcglynn
Update added checking for initial keywords before write tmcglynn
Update BinaryTable: removed TDIM keywords for variable length columns tmcglynn
Update BinaryTable: fixed bug that made BinaryTable(Object[][]) constructor unusable tmcglynn
Update BinaryTableHDU: fixed usage of THEAP keyword tmcglynn
Update AsciiTable: use blanks for data filler rather than nulls tmcglynn
Update BasicHDU made getDummyHDU public tmcglynn
Update HeaderCard fixed padding of string values which sometimes had one too many spaces tmcglynn
Update image.ImageTiler allow requests for tiles that are not fully within the original image tmcglynn
Update util.ByteFormatter: changed formatter to use 'E' (rather than 'e') for exponents since 'e' not legal for FITS ASCII tables tmcglynn

Release 0.90 – 1996-01-01

Type Changes By
Update Support for ASCII tables tmcglynn
Update Deferred input for images and tables (data is read only when user actually requests it) tmcglynn
Update Image subsetting without reading the entire image tmcglynn
Update Reading individual rows and elements of tables without reading the entire table tmcglynn
Update Support for in-place rewriting of headers and data tmcglynn
Update Transparent support for Strings in ASCII and Binary tables tmcglynn
Update Transparent support for booleans in binary tables, including varying length columns tmcglynn
Update Efficient buffered random access methods tmcglynn
Update More flexible support for I/O of primitive arrays tmcglynn