Skip to main content
********************************************************************************
                       RELEASE NOTES FOR HEASOFT 6.32.1
                               August 23, 2023
********************************************************************************

The HEASoft 6.32.1 patch release contains a significant fix to
the NICER data analysis software.

There is a patch installer utility available, which can be used
to update existing 6.32 source code installations to 6.32.1:

 6.32.1 Patch Installer

This link also describes how to patch existing 6.32 pre-compiled
binary installations with the 6.32.1 updates.

********************************************************************************
                                     NICER
********************************************************************************

NICERDAS v011a:

Major bug fix related to screening of data at MPU level, resulting in
erroneous normalization and event screening.  For a further description
please see documentation of the bug and remedies here:

  NICER analysis threads

- nifpmsel: (v1.9) Fix for major bug related to per-MPU filtering;
  adds NIMPUFIX keyword upon output to confirm that the
  MPU-autoscreening fix is applied

- nicerl3-lc: (v1.5) Added check for divide-by-zero, resulting in NaN






********************************************************************************
                       RELEASE NOTES FOR HEASOFT 6.32
                               July 20, 2023
********************************************************************************

The HEASoft 6.32 release is driven by new and updated mission-specific
data analysis software (IXPE, NICER, Swift, RXTE), but as always
includes other enhancements and fixes.

Configuration-related changes throughout the package mean that users
who already have HEASoft 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
********************************************************************************

- Bug fix to fits_make_hist[d] that was introduced in 4.2.0.

- Added overflow checking for case of reading images with 8-byte
  float values into 4-byte float arrays.

- fits_write_key_longstr now handles case of writing a long keyword
  in combination with a long keyword value string.

- Add conversion of French locale comma-to-period in corner cases
  appearing in ffr2e and ffd2e functions.

- Increased the precision when writing version number to User-Agent
  strings for http connections.  This is needed to fully conform to
  3-field version string format.

- Bug fix to GTIOVERLAP() calculator function, which was being
  treated as a boolean value in expressions, and is now correctly
  treated as a floating point result.

- Bug fix to ARRAY() calculator function, which caused a memory
  overflow error

- Enhancement to the ARRAY function, such that ARRAY(V,d) can
  apply new dimensions to V, as long as the total number
  of array/vector elements does not change.

- Enhancement of long string keyword read/write functions to fully
  conform with FITS standard specifications for multi-line value
  and comment strings.  Two new functions have been added to 
  implement this: fits_get_key_com_strlen and fits_read_string_key_com.

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

- det2att, det2att2: Converted to libcoord's new applyQuatToVector()
  function; replaces conversion to a rotation matrix before applying
  to a vector

- prefilter: Added output columns ALLV6 = TERMINATOR_ANGLE DAYLIT_FRACTION
  SUN_BODY_AZIMUTH MOON_BODY_AZIMUTH (as well as various body vectors);
  (MPFIT) bug fix for mix of analytical and numerical derivatives

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

rmf:

- Added rmf::remapEnergies method to map an rmf onto a new energy
  grid.

general:

- Protected against zero-length Data in SPwriteCol.

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

- Replaced fchecksum, fcopy, fcreate, fdiff, fimgcreate, fkeypar,
  and fverify with Perl wrappers to their newer counterparts in
  HEATools:

  fchecksum -> ftchecksum
  fcopy -> ftcopy
  fcreate -> ftcreate
  fdiff -> ftdiff
  fimgcreate -> ftimgcreate
  fkeypar -> ftkeypar
  fverify -> ftverify

- fsumrows: Allow command line of up to 1024 characters

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

- Fixed "bad option" error on Mac OS when exporting a FITS table as text

********************************************************************************
                                    HEAGEN
********************************************************************************

- ftadjustgti: Added ability to invert sense of output from GTI to 'BTI'
  using a new 'invert' parameter, and added parameters 'tstart' and 'tstop'

- burstfinder: (NEW) Find time intervals in an input FITS binned light
  curve that characterize start and stop of a burst.

- mkintensfilt: Fixed error that if there were no time intervals within
  the intensity range then the input GTIs were output; added hidden
  parameters for rate and GTI extension names as well as time and
  rate column names.

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

- extractor:

  Corrected RATE for dead time when writing spectra if Buildstokes is
  true. Also added reading and propagation of DEADAPP keyword.
  Fixed error in calculation of the uncertainties for Stokes parameters Q
  and U for the UNWEIGHTED and SIMPLE options.
  These corrections were available in the patch released on Jan 31, 2023.

********************************************************************************
                                    HEASIM
********************************************************************************

- skyback: Corrections to array indexing

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

- ftcreate/fcreate: If extname parameter was given, print a warning
  if EXTNAME is also specified in the input header keyword file ('headfile').

- ftdiff/fdiff: Fixed handling of long string keywords: need to be
  converted to have bracketing single quotes to match how non-long
  strings are formatted; changed numdiffs parameter to mode '(h)idden'
  instead of '(a)sk'.

- ftmeld: Added 'minkey' and 'maxkey' parameters

- fselect (wrapper to ftselect): Fixed handling the case of an "@"
  input file for the 'expr' parameter.

- ftverify/fverify: Warn when an ampersand is found in TTYPE keywords

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

- Addressed malloc issues on newer amd64/x86_64 processors (possibly
  only occurring on Fedora OS)

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

- Fixed bad access crash from filter time cursor if the plot device
  does not have a cursor.

- Added the new hidden parameters when using mkintensfilt.

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

Parallelization

- Added parallel processing to leven when usechainrule is
  no. Added xset usechainrule option to switch between fast and slow
  second derivatives so this can be done without changing Xspec.init
  and restarting xspec.
  
- In the various models which use the apec code added option of
  multithreading over the temperatures for the calculation of lines
  in the spectrum. Multithreading here is turned on and off using xset
  APECMULTITHREAD. The default is off. For the basic apec model 
  multithreading does not provide a speed advantage. However, if
  line broadening is selected (eg using bapec) then multithreading will
  speed up the calculation. Also, for models which combine multiple
  temperatures such as cooling flow or NEI models multithreading can
  provide a significant speed increase.

Spectropolarimetry Plotting

- Changed the polangle plot so that the angles all lie between the
  mean angle ±90 degrees. This avoids plots where values jump
  between the top and bottom of the plot as the angle wraps around.

- The polangle and polfrac plots now take account of any plot
  grouping set. If any spectrum in a data group is in the same plot
  group as a spectrum in another data group then all the spectra in
  the second data group are added to the plot group for the purposes
  of these plots only.

- If any of the polfrac values or errors are calculated as NaNs
  then these are replaced by the PLT NO value and will not be plotted.

Mdefine

- Fixed mdefine to handle the case when the user is mdefining
  a convolution model which consists only of an xspec convolution model.

- Added support for table models using atable, mtable, or
  etable in mdefine expressions.

- Added 2nd to 5th order Legendre polynomials to mdefine
  built-in functions.
  
Updated Models

- bwcyc: Tightened the boundaries of parameters; now treats NaN as positive infinity

- cevmkl, cemekl: Increased lower limits of Tmax parameter

- gabs: Fixed units for Strength parameter

- tbnew: Reduced stderr logging of non-error announcements

Miscellaneous

- The syst command to set model systematic errors can now apply
  systematics to individual models (default or named) instead of to
  all models.

- The precision of parameter values from tclout(r) has been
  increased to 10 figures.

- The error command diagnostic output is now controlled by the
  chatter level.

Bug fixes

The following patches for 12.13.0 have been included:

12.13.0a. When the X axis is in energies or wavelengths, plot
          delchi and plot fitstat (or plot chisq) are not being scaled
          properly. When the X axis is in wavelengths and perhz is on, plot
          counts is unable to construct its Y axis label.

12.13.0b. If a model defined using mdefine calls another xspec
          model which requires a separate model calculation for each
          spectrum, that information is lost.

12.13.0c. plot delchi and plot fitstat/chisq are not being
          properly scaled when spectra have multiple models assigned to
          them. This also restores the insertion of systematic model error
          into plot delchi and plot fitstat/chisq, and adds it to other
          plots that were previously ignoring it.

12.13.0d. Fix to mdefine so that it can now include built-in
          Xspec convolution models as part of its expressions for additive
          and multiplicative mdefine components.

12.13.0e. Added chain proposal uniform deltas [factor] and
          chain proposal uniform limits options. For backwards
          compatibility, chain proposal uniform defaults to chain proposal
          uniform limits.

12.13.0f. The zkerrbb model undercalculates the flux (and luminosity) 
          by a factor of (1+z)^2.

12.13.0g. The Voigt line model can have a small sub-bin
          offset and incorrect shape.


In addition the following bugs have been fixed:

- When the 'energies' command is in use for table models, a crash
  may occur if all data sets are cleared.

- The 'tabint' function (for external programs using Xspec's
  table interpolation code) is not properly handling the case
  when default LOELIMIT and HIELIMIT are in use.

PyXspec Release Notes for version 2.1.2 (Xspec 12.13.1)

New Features:

- New method 'Plot.nAddComps()' for returning the number of add 
  component plots for a given plot group.  This can be helpful for
  determining the valid range of the 'addCompNum' input argument to
  'Plot.addComps()'.
  
- Two new methods to take advantage of standard Xspec's new ability to
  set systematic model errors for specific models:
  'AllModels.systematicSingleModel' and 'AllModels.setSystematicSingleModel'. 

See also:

 https://heasarc.gsfc.nasa.gov/lheasoft/xanadu/xspec/issues/issues.html

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

XSTAR v2.59b:

- Fixed minor errors including incomplete initialization of cross
  section array in phint53.f90.  Also modified readinf of parameter
  file in xstinitable to allow for small float values of emult.

********************************************************************************
                                     IXPE
********************************************************************************

Version 3.1.0:

- ixpecalcarf (NEW): Takes an on-axis ARF (ancillary response file)
  or MRF (modulation response file) input and uses the REEF (radial
  encircled-energy file) and vignetting data from the CALDB and the
  off-axis pointing information from the Level 1 attitude data to
  correct the input response file for off-axis vignetting and
  extraction region effects.

- ixpecalcfov: New version produces a DS9 region file as output
  instead of a FITS image.  Removed the "badpix1", "badpix2",
  "badpix3", and "exc_graypix" parameters from the interface.
  Added a "print_angles" Boolean parameter to control printing
  the rotation angles for each detector (defaults to "yes" or True).
  Floating point numbers are rounded to five decimal places in the
  output region files.

- ixpeinterptemp (NEW): Takes an input Level 1 Detector Housekeeping
  file and interpolates values for missing temperature data up to a
  user-settable maximum gap in time.  This reproduces (using the
  default maximum time gap of 150 seconds) the behavior of the IXPE
  processing pipeline, which interpolates temperatures before calling
  the "ixpegaincorrtemp" tool to minimize the number of events that
  are rejected due to missing temperature data.

- ixpemkevt2gti (NEW): Takes an input pre-Level2 event file (i.e.,
  after gain correction, spurious modulation correction, and aspect
  correction, but before any event column or row filtering), a Level
  2 Housekeeping-derived GTI file, a Level 1 attitude file, and a
  Level 1 Instrument Housekeeping file to produce the produce the
  final GTI for the Level 2 events file, calculate the ONTIME,
  DEADTIME, DEADC, and FCW_ENC keyword values.

- ixpeplot_polarization (NEW): Takes the FITS file output from the
  updated ixpepolarization tool (see below) and provides standardized
  plotting for the Q and U Stokes parameters with error bars, as well
  as the associated MDP99 circle.  The results of all the input files
  and extraction regions are plotted together on the same axes using
  matplotlib.

- ixpepolarization: New version allows up to three different input
  Level 2 event files.  The resulting region file output (if an
  input region file is given) defines a polarization vector on the
  sky calculated from the combination of all input files.  In addition,
  the tool produces an output FITS file which defines the Stokes
  parameters for each sub-region in the input region file (or a single
  entry using all the events if no region file is given) for each
  event file, as well as for the sum of all input files.  Removed the
  "scale" parameter, added the additional files parameters, optional
  modulation factor filename parameters for each input file, the
  weighting scheme used to determine the Stokes parameters, and the
  standard "clobber" option for the output.  Floating point numbers
  are rounded to five decimal places in the output region files.
  In PolarizationRegion.create_line_region, precisions of "02.5f"
  on RA HMS seconds were changed to "02.3f", and precisions of
  "02.5f" on Dec sdms were changed to "02.2f", to match the decimal
  degree precision of 5 decimal places.

- Changes made to the IXPE CALDB are detailed here:

  https://heasarc.gsfc.nasa.gov/docs/ixpe/caldb/ixpe_caldbhistory.html

********************************************************************************
                                     MAXI
********************************************************************************

- Corrected error message in mxproduct

********************************************************************************
                                     NICER
********************************************************************************

- niobsermerge (NEW) to combine observation data sets
   * nicerl3-spect and nicerl3-lc updated to work with merged data sets
   * nimkfmerge now properly sets TSTART/TSTOP/DATE-OBS/DATE-END in
     merged outputs

- nicerl2
   * update to filtcols=NICERV5 (see niprefilter below for new columns)
   * new parameters mingti/erodedilate to avoid shredded GTIs
   * new parameters max_lowmem and thresh_range to deal with light
     leak situation
   * new parameters keep_{forced,overshoots,undershoots}, datamode for
     event filtering
   * new parameter keep_noisering, noisering_under for filtering
     noise ringer events
   * improved default verbosity with more user-helpful output
   * bug fix to properly pass incremental parameter to prep_mkfiles
   * add geomag_tcheck parameter, allow dealing with stale geomag data

- nicerl3-spect / nicerl3-lc
   * bug fix to not accept gtifile when 3C50 background model is used
   * ignore ufafile/indir/cldir parameters if not needed
   * handle EXPOSURE=0 situations more gracefully by returning status=218
   * improved default verbosity
   * clean up temporary tco plot files

- nicerl3-lc
   * allow renormalization of light curve by number of selected detectors
   * new parameters detnormtype/detnormbuff/detnormchg to accomodate
     normalization
   * default is detnormtype=arr52, which scales light curve to equivalent
     52-detector array

- niprefilter / niprefilter2
   * new NICERV5 filter columns for filter file (below)
   * new columns {FPM,MPU}_NOISERING_COUNTS to diagnose noise ringer events
   * new column SUN_BODY_AZIMUTH to azimuth of sun in NICER body coordinates
   * new columns TOT_LOWMEM_{SCI,FIFO} for total array to diagnose lost events
   * new column DELTA_SLOW_LLD to diagnose array-averaged low energy
     threshold changes
   * bug fix to handle event files with no rows

- niautoscreen
   * better graphical display of censored detectors and MPUs with
     default chatter
   * bug fix for round-robin detection (was more agressive disabling
     than should be)
   * parameter limits now include min/max as well for overall sanity checking

- nimpumerge
   * new parameter fpmsel (=YES by default) to properly manage FPM
     selection data

- nibackgen3C50: (v1.2) fixed CEATOR keyword in output (should be CREATOR)

- nicerarf and nicerrmf: handle failures more gently by passing status=218
  up to the caller

- nicerclean
   * added keep_{forced,overshoots,undershoots,noisering} and data
     mode keywords;
   * added noisering_under parameter for noise ringer filtering support

- nimaketime
   * calculates and prints how filtering stages impact available good time
   * add min_lowmem and thresh_range parameters for dealing with light
     leak situation
   * add mingti and erodedilate parameters for "smoothing" shredded GTIs

- nicerl2 / nicermergeclean / nicerclean:
   * remove excplicit parameters from par file, use DEFAULT instead
   * for example roundrobbinscr
   * new parameters added keep_{undershoots,overshoots,forced,noisering}
     to match nicerclean
   * new parameters datamode noisering_under parameters to match nicerclean

- nifpmsel:
   * handle case of full MPU disabled better
   * handle tricky case where all FPMs in an MPU are GTI-selected by same GTI

- nigeodown:
   * Removed Perl LWP::Simple requirement (was not used anyway)
   * accomodate relative paths

- niprescreen: (NEW) tool for pre-screening NICER event data
   * not meant to be called by user
   * nimpucal updated to call niprescreen
   * new EVENT_FLAGS bit 0x40 for 'noise ringer' events detected

- nicer-l1-metadata: fixed excludepat= Perl (>v5.10) handling and set
  default to excludepat=NONE

- niextract-events: Write revised DATE-OBS, DATE-END, and (optionally)
  OBS_ID keywords

- nimpucal: optimized calculation of PI_RATIO

- nivigsum: Better handling of off-axis warning when large numbers of
  detectors are disabled

- SCORPEON:
  * niscorpcalc: Bug fix to properly read SAA/trapped map metadata keywords
  * internally factor code into Perl library

- Multiple tasks updated to change overall chatter level and logging
  to provide more useful information to the user and less chaff


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

BAT:

- batcelldetect: (MPFIT) Bug fix for mix of analytical and numerical derivatives

- batmaskwtevt: Use the more efficient applyQuatToVector()

UVOT:

- uvotlc: Updated skipped parameter mode to 'hl' and help file

- uvotmaghist: Updated skipped parameter mode to 'hl' and help file

- uvotproduct: Updated skipped parameter mode to 'hl' and help file

- uvotsource: Update description of 'skipreason' parameter

- uvotimsum: Added method=VARIANCE and updated EXPOSURE calculation
  for weighted sums

********************************************************************************
                                     XTE
********************************************************************************

- hxtback: Updated to use ftselect instead of fselect.

- pcaextspect2: Adjusted background spectrum to properly handle
  fractional counts by using HDUCLAS3=RATE; now runs pcaphasyserr
  by default

- pcaphasyserr: (NEW) Apply systematic error estimate to PHA spectrum

- pcarmf: Major updates (version 12.0):

  * photon energy range increased from 1.5-80 to 1.5-100 keV
  * new EPICS2017 Xenon cross sections, which are new default (lbl_sigma=3)
  * internal code factorization for readability and maintainability
  * gaussian response components are now properly calculated with
    inverse gaussian
  * avoid unnecessary calculations for zero matrix elements
  * per-anode lower level discriminator function revised based on Crab data
  * New parameters xe_xsect_{k1,l1,l2,l3,m}_norm to allow adjustment
    of EPICS2017 Xenon cross sections on per-shell basis.  The "M"
    parameter scales M, N and O shell cross sections as a group.
  * New parameters pralmy_mult_p{0,1,2,3,4} to adjust propane, aluminum,
    and mylar densities up and down as a single unit.
  * Adjust layer1-3 density downward by Xenon leak rate.
  * Further adjusted the low-energy correction factors to accomodate a
    larger range of targets, not just the Crab
  * Further refinement of detlld lower level discriminator threshold functions

- pcarmf / xpcaarf: revised response parameters for improved
  absolute flux calibration; further updates based on refined
  calibration analysis

- pcarsp: (v11.8) Bug fix when computing weighted responses for single layer

- rddescr: new parameter gainroot which helps control extra output files

- saextrct: Modified to handle missing keywords

********************************************************************************
                                  HEASoftPy:
********************************************************************************

New version 1.3:

- Added a patch installer script 'hpyupdate'

- Added a fix for CFITSIO version confilict between AstroPy (through
  IXPE import) and PyXspec

- Added timestamp check to read par files from sys_pfiles after a
  fresh installation

- Fixed an issue of reading par files with extra white space

- Updated utils.local_pfiles to use tempfile instead of process id

- Added utils.local_pfiles_context to be used as context manager
  for local pfiles

- Fixed logging error in IXPE tests

- Moved mode check from HSPTask to HSPTask.read_pfile + code style updates.

- Added explict ISO-8859-15 in the return of subprocess.Popen

********************************************************************************
                                     MISC.
********************************************************************************

- Allow Python 3.6 and SciPy 1.5 which were previously disallowed

- Disallow GNU C++ older than v5.1

- Revised tests for C, C++, and Fortran compilers to alleviate
  somewhat the need for setting compiler environment variables
  (CC, CXX, FC)

- Reduced use of "-Wl,-no_compact_unwind" linker flag (in place to
  silence warnings from Fortran code) to prevent uncaught exceptions
  in C++-based tools.

- headas-setup script: Removed extraneous double-quotes from user
  PATH variables. Unpaired double quotes in PATH are an increasingly
  common problem on WSL.

- Updated XPI parser to accept command lines up to 4000 characters