Skip to main content

Come analyze HEASARC, IRSA, and MAST data in the cloud! The Fornax Initiative is now welcoming all interested beta users.

********************************************************************************
                         RELEASE NOTES FOR HEASOFT 6.18
                                 February 8, 2016
********************************************************************************

The HEASoft 6.18 release is primarily driven by updates to the Swift/XRT
software and compatibility of a new set of analysis software for the Astro-H
mission pre-launch testing, but also includes updates to other packages
which have been revised to mirror the current development versions
in use at the HEASARC.

As before, configuration-related changes thoughout the package means that
users who already have HEASoft v6.x.x installed will need to completely
replace their software installation; there is no clean way to simply
overlay this new release or to update an existing installation.

********************************************************************************
                                    CFITSIO
********************************************************************************

- Version 3.38:

   - CRITICAL BUG FIX:
     Discovered that the Intel 15 and 16 compilers (and potentially other
     compilers) may silently produce incorrect code when compiling CFITSIO with
     the -O2 (or higher) optimization flag. In particular, this problem could cause 
     CFITSIO to incorrectly read the values of arrays of 32-bit integers in a 
     FITS file (i.e., images with BITPIX = 32 or table columns with TFORM = 'J') 
     when the array is being read into a 'long' integer array (and where the 
     long array elements are 8 bytes long). 
     
     One way to test if a particular system is affected by this problem
     is to compile CFITSIO V3.37 (or earlier) with optimization enabled,
     and then compare the output of the testprog.c program with the 
     testprog.out file that is distributed with CFITSIO. If there are any 
     differences in the files, then further tests should be performed to 
     determine the exact cause.
     
     The root cause of this problem was traced to the fact that CFITSIO 
     was aliasing an array of 32-bit integers and an array of 64-bit integers 
     to the same memory location.in order to obtain better data I/O efficiency
     when reading FITS files.  When CFITSIO modified the values in these
     arrays, it was essential that the processing be done in strict sequential
     order from one end of the array to the other end, as was implicit in the
     C code algorithm. In this case, however, the compiler adopted certain 
     loop optimization techniques that produced assembly code that violated 
     this assumption.  Technically, the CFITSIO code violates the "strict aliasing"
     assumption in ANSI C99, therefore the affected CFITSIO routines were
     modified so that the aliasing of different data types to the same memory
     location no longer occurs.
 
   - in imcompress.c, implemented a new set of routines that safely convert
     shorter integer arrays into a longer integer arrays (e.g. short to int)
     where both arrays are aliased to the same memory location.  These
     special routines were needed to guard against certain compiler optimization
     techniques that could produce incorrect code.
 
   - modified the 4 FnNoise5_(type) routines in quantize.c to correctly 
     count the number of non-null pixels in the input array.  Previously the
     count could be inaccurate if the image mainly consisted of null pixels.
     This could have caused certain floating point image tiles to be 
     quantized during the image compression process, when in fact the tile
     did not satisfy all the criteria to be safely quantized.
     
   - in imcomp_copy_comp2img, added THEAP to the list of binary table 
     keywords that may be present in the header of a compressed image 
     and should not be copied to the uncompressed image header.
 
   - modified fits_copy_col to check that when copying a vector column, the
     vector length in the output column is the same as in the input column.
     Also modified the code to support the case where a column is being copied
     to an earlier position in the same table (which shifts the input column
     over 1 space).

   - added configure option (--with-bzip2) to support reading bzip2 compressed 
     FITS files.  This also required modifications to drvrmem.c and drvrfile.c
     This depends on having the bzlib library installed on the 
     local machine.  This patch was submitted by Dustin Lang.
     
   - replaced calls to 'memcpy' by 'memmove' in getcolb.c, getcold.c,
     getcole.c, and getcoli.c to support cases where the 2 memory areas 
     overlap. (submitted by Aurelien Jarno)

   - modified the FITS keyword reading and writing routines to transparently
     support keywords with names longer than 8-characters.  This was implemented
     to help test a new experimental FITS convention which allows longer 
     keyword names.

   - in fits_quantize_double in quantize.c, test if iseed == N_RANDOM,
     to avoid the (unlikely) possibility of overflowing the random number
     array bounds. (The corresponding fits_quantize_float routine already
     performed this test).

   - in the FnNoise5_short routine in quantize.c, change the first 'if' 
     statement from "if (nx < 5)" to "if )nx < 9)", in order to support the
     (very rare) case where the tile is from 5 to 8 pixels wide.  Also make 
     the same change in the 3 other similar FnNoise5_* routines.

   - in the qtree_bitins64 routine in fits_hdecompress.c, must declare the
     plane_val variable as 'LONGLONG' instead of int.  This bug could have 
     caused integer overflow errors when uncompressing integer*4 images that
     had been compressed with the Hcompress algorithm, but only in cases
     where the image contains large regions of pixels whose values are close
     to the maximum integer*4 value of 2**31. 

   - in fits_hcompress.c, call the calloc function instead of malloc when
     allocating the signbits array, to eliminate the need to individually
     set each byte to zero.

   - in the ffinit routine, and in a couple other routines that call ffinit,
     initialize the *fptr input parameter to NULL, even if the input
     status parameter value is greater than zero.  This helps prevent
     errors later on if that fptr value is passed to ffclos.

   - modified ftcopy, in edithdu.c, to only abort if status > 0 rather
     than if status != 0. This had caused a problem in funpack in rare
     circumstances.

   - in imcompress.c changed all the calls to ffgdes to ffgdesll, to support
     compressed files greater than 2.1 GB in size.

   - fixed bug in ffeqtyll when it is called with 4th and 5th arguments 
     set to NULL.

   - in fitsio.h, added the standard c++ guard around the declaration of the
     function fits_read_wcstab.  (reported by Tammo Jan Dijkema, Astron.)

   - in fitsio.h, changed the prototype variable name "zero" to "zeroval" to
     avoid conflict in code that uses a literal definition of 'zero' to mean 0.

   - tweaked Makefile.in and configure.in to use LDFLAGS instead of CFLAGS 
     for linking, use Macros for library name, and let fpack and funpack 
     link with shared library.

   - modified an 'ifdef' statement in cfileio.c to test for '__GLIBC__'
     instead of 'linux' when initializing support for multi-threading.

   - modified ffeqtyll to return an effective column data type of TDOUBLE
     in the case of a 'K' (64-bit integer) column that has non-integer
     TSCALn or TZEROn keywords.
     
   - modified ffgcls (which returns the value in a column as a formatted string)
     so that when reading a 'K' (TLONGLONG) column it returns a long long integer
     value if the column is not scaled, but returns a double floating point
     value if the column has non-integer TSCALn or TZEROn values.

   - modified fitsio.h to correctly define "OFF_T long long" when using
     the Borland compiler

   - converted the 'end of line' characters in simplerng.c file to the unix
     style, instead of PC DOS.

   - updated CMakeLists.txt CMake build file which is primarily used to
     build CFITSIO on Windows machines.

   - modified fits_get_keyclass to recognize ZQUANTIZ and ZDITHER0 as
     TYP_CMPRS_KEY type keywords, i.e., keywords used in tile compressed
     image files.

   - added test to see if HAVE_UNISTD_H is defined, as a condition for 
     including unistd.h in drvrfile.c drvrnet.c, drvrsmem.c, and group.c.

   - modified the CMakelist.txt file to fix several issues (primarily for
     building CFITSIO on Windows machines)..

   - fixed bug when reading tile-compressed images that were compressed with
     the IRAF PLIO algorithm.  This bug did not affect fpack or funpack, but
     other software that reads the compressed image could be affected.  The 
     bug would cause the data values to be offset by 32768 from the actual 
     pixel values.

********************************************************************************
                                    CCFITS
********************************************************************************

Version 2.5 - Updates since HEASoft 6.17 include:

- For reading Keywords, added conversion of numerical types to strings.

- Added support for variable-width string columns (12/15)

- Added new ExtHDU::copyColumn function, implemented in the Table class.
  (This also requires a conforming change in CFITSIO, included
  in CFITSIO v3.38.)

- Changed the Column container member of the Table class from a map
  to a multimap (now typedefed to 'ColMap').  This is to allow proper 
  handling of case where multiple columns within table share the same
  name.  NOTE: This resulted in a change to the public interface:
  ExtHDU and Table column() accessor functions now return a multimap.

- Removed the ImageExt::image() accessor function from the public
  interface.  This was intended for internal use only.

- Now allows image write calls to expand the outer-most (NAXISN)
  dimension of the image.  This was a feature of CFITSIO that
  wasn't previously supported in CCfits.

- Implemented full-read internal caching for images.  Previously
  image read calls resulted in disk reads even when current values
  were available in memory.

- Fix to ColumnData::writeData.  It should not resize the internal
  m_data vector to a smaller size when a write operation passes in a
  just a partial portion of the column.  (gcc had been covering up
  this bug since the resize call wasn't actually erasing any values).

- Added Column::read functions for retrieving a single row of a vector
  column into a std::vector.  Previously this was only allowed for
  valarrays.

- Added new function HDU::readNextKey.

- Removed #ifdef HAVE_CONFIG_H test for including config.h due to
  potential conflicts with users' customized autotools config.h files.

********************************************************************************
                                      APE
********************************************************************************

- Refactoring so that if HEADASNOQUERY is set, all prompts are
  suppressed throughout all ape code. This is to make it easier
  for scripts to take advantage of the HEADASNOQUERY mode. The
  immediate need is for Astro-H scripting to work properly.

- Make ape_util_strcmp consistently return -1, 1, or 0, rather than
  return whatever strcmp returns. This is to make the behavior
  platform-independent.

- Add checks for validity of mode parameter. Must have type "s" and
  must have a valid mode for a value ("h", "hl", "q", "ql").
  Only check for correct values of "mode" parameter when value
  checking is enabled.

- Check for validity of parameter file while opening.  Do not
  check values though, so that bad values may be fixed by the
  user through running the calling code that uses the parameter
  file.

********************************************************************************
                                     HEASP
********************************************************************************

- Fixed error in conversion from ergs/cm^2/s.  All other conversions
  involving ergs are correct.

- Fixed default value of ResponseThreshold to 0.0, not 1.0, if
  LO_THRES is not present in the input file. Improved some vector
  initializations.

- Fix to SPcalcShifts to avoid an infinite loop if for some
  reason a shift was entered which made no change (i.e. no
  offset or slope change).

- Added utility routine SPfindExtensions which returns the numbers
  of all extensions with a given keyword equal to a specified value.

********************************************************************************
                                    QDP/PLT:
********************************************************************************

Synchronize with A. Tennant's current QDP/PLT  distribution:

- Call FRELUN if WModel command fails.
- 'Model insensitive to parameter' had gone away...
- Fixed bug reading mal-formed model (.mod) files.
- Ignore NO data values when plotting residuals.
- Additional check when reading CMD array.
- Internal bug fixes.
- SCR B/W does not restart plot device.
- Fix bug in SEt LEngth command.
- Add the LY (Linear in Y) component.

********************************************************************************
                                   ATTITUDE
********************************************************************************

- makefilter:

  Fixed intermittent crash when reading from bit type columns, caused
  by an unininitalized variable (anynull).

  Fixed bug when trying to build expressions from input column from
  an expression in the configuration file.

********************************************************************************
                                   CALTOOLS
********************************************************************************

- (RMF read routine) Increase size of error message string to
  prevent write errors ("End of record") when message exceeds 80
  chars (seen in rbnrmf output).

********************************************************************************
                                    FUTILS
********************************************************************************

- finterp: Bug fix: update odata->nul[] properly so that extraneous
  NULLs are not written when extrap=NULL; Bug fix: handle integers
  with TSCALn/TZEROn keywords properly; Bug fix: copy all standard
  tabular keywords, including WCS.  Allow multiple column names in
  incolname; increase path name sizes to 1024 characters.

********************************************************************************
                                      FV
********************************************************************************

- Work around http 2.7+ package bugs in Tcl 8.5.15; put configCatalog
  under itcl::code space (fixes SkyView connection bug).

********************************************************************************
                                    HEASARC
********************************************************************************

- extractor: Increased the maximum number of GTIs to one million
  for Astro-H.

********************************************************************************
                                    HEATOOLS
********************************************************************************

- ftconvert: Clear data array before pushing new values onto it
  in successive iterations of the main data-reading loop.  Without
  clearing it, the same 1000 values were being repeatedly written
  to the output file (for input files with more than 1000 rows).

- ftdiff: Terminating null character in array of excluded keywords
  was being assigned to the wrong position (FLEN_KEYWORD+1).
  Use fffree() to free string arrays that were allocated by
  fits_read_key_longstr (ffgkls).

- ftsort: Initialize infptr/outfptr to prevent memory fault for
  some data on Linux.

********************************************************************************
                                     TIME
********************************************************************************

- mgtime: Increase maximum number of rows in GTI to 2.5^6 to
  accommodate Astro-H data.

********************************************************************************
                                    XIMAGE
********************************************************************************

- When searching for WCS keywords, avoid mistaking the "PCOUNT"
  keyword for the "PCi_ja" WCS keyword.  This confusion results in
  the WCSAXES keyword being incorrectly placed in front of PCOUNT,
  violating the FITS standard.

********************************************************************************
                                    XSELECT
********************************************************************************

- xselect.mdb: Added ASTRO-H and ASTROSAT entries.

- Trapped the case of not being able to create the obscat file
  in XSL_MAKEO.

- The various size entries in the MDB now default to TLMAX since
  this is what all modern event files should use. This can still
  be overridden by settings in the xselect.mdb file.

- Fixed bug in XSL_MDB_INST which allowed SXS to be incorrectly
  identified when the instrument required was SXI.  Add sensible
  defaults if respneedreg and extendresp are not set in the mdb file.
  Change documentation to reflect making more mdb items optional.
  Changed CHARACTER declaration to remove those in obsolete format.

- Added call to ape_util_override_query_mode to override any
  attempt to turn off prompting (e.g. using HEADASNOQUERY), as
  xselect is not wired for that option.  This was not a problem
  until recent changes to APE which suppress all prompting
  throughout APE when HEADASNOQUERY is set.  This fixes a hang
  when running xselect inside scripts which turn HEADASNOQUERY
  on; xselect was not prompting for standard parameters (prefix,
  data_dir, etc.) and was therefore unable to parse the input
  command file (.xco).

********************************************************************************
                                     XSPEC
********************************************************************************

HEASoft 6.18 includes Xspec v12.9.0i (patch level "i"):

 http://heasarc.gsfc.nasa.gov/xanadu/xspec/issues/issues.html

********************************************************************************
                                     XSTAR
********************************************************************************

Version 2.2.1bn26 - updates since v221bn24 (HEASOFT 6.17) include:

XSTAR:

- Changes to fix error in compton heating-cooling.

- Mods to ucalc to avoid applying charge exchange rates when
  temperature is out of range.

- Added routines for apec compatibility.

- Extended photoionization cross section (type 49) extrapolation
  from 20 keV to 200 keV.

- Changed to fully implement effect of metastables on the bryans
  collisional ionization data.

- Fixed code which calculates charge transfer ionization of O --> O+.

********************************************************************************
                                     SWIFT
********************************************************************************

- swifttime: v1.7 with updated extrapolation coefficients and
  minor change to approach.

UVOT:

- Avoid calculations triggering divide-by-zero exceptions
  when source and/or background regions do not overlap image.

- uvotcentroid: Perl 5.22.1 (and newer) disallows use of an
  array as a reference.

- uvotlss: Bug fix: was not storing FITS header when passed
  position on command line.  Bug fix: was not determining the
  filter when lssfile parameter did not indicate CALDB so no
  corrections were found/applied.

- uvotmaghist: Noted that ra/dec/srcas/bkgas are deprecated.

XRT (ISAC Build 32 Software Release - XRTDAS v3.2.0):

- xrtpccorr: Handle of events with RAWX/RAWY coordinate values
  out of nominal range.

- xrtscreen: Exclusion from GTIs of CCD frames with RAWX/RAWY
  coordinates out of nominal range for Photon Counting mode.

- xrtgrblc: The code block beginning at line 1335 depends on the user
  having engaged the "bincurve" parameter, yet lacked that condition
  in the "if" condition.  The structure rawBLC is only populated if
  bincurve=yes, and is used in this conditional block.  Added "&&
  $params{bincurve}" to the if condition.