Skip to main content

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

Download HEASoft

********************************************************************************
                       RELEASE NOTES FOR HEASOFT 6.37
                            August 13, 2026
********************************************************************************

The HEASoft 6.37 release is driven by new and updated mission-
specific data analysis software (IXPE, MAXI, NuSTAR, XRISM, et al.),
but as usual 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.

We continue to support installation of HEASoft from the source code
distribution, but starting with this release we no longer offer our
traditional pre-compiled binaries and instead recommend installing
pre-built HEASoft tools via the Conda package manager:

 https://heasarc.gsfc.nasa.gov/docs/software/conda.html

Please note that HEASoft 6.37 is the last major release in which
we intend to provide the FITSViewer GUI ("FV").  Support for FV
will be discontinued in future releases in favor of a new utility
"fviewer", available now via 'pip':

 pip install fviewer

 https://heasarc.github.io/fviewer/

The fviewer utility is included for testing in our 6.37 Conda packages.

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

Version 4.7.0:

- This release includes patches to security vulnerabilities.  We
  strongly encourage this upgrade, particularly for those running
  CFITSIO in web accessible applications.  Our thanks to A.
  Denkiewicz and Z. Bugaud for their extensive help with this.

- New test framework added, containing a collection of unit tests.
  Our thanks to W. Pursell for contributing this.

- Bug fix for parsing octal integer constants in expressions.  Our
  thanks to 'Cruzzil_Code' for submitting this.

- Enhanced output from uncompress2mem_from_mem function.

- Appended 'fits_' prefix to stream driver function names to reduce
  chances of potential symbol name conflicts with outside libraries.
  Our thanks to 'rtobar' for submitting this.

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

- coordpnt: Bugs fixed in converting coordinates of region files.

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

- burstfinder: Replaced VLAs with dynamic memory allocation

- hpextract: Fixed issue with array columns, including TBIT type
  allocation correction

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

- extractor (legacy Fortran): EQUINOX and RADECSYS are no longer
  written to the output when they were not present on input.

  Please also note, in the HEASPTOOLS package:

  ftextractor: a new C++ event extractor (built on the new heaev
  event-handling library) that is the modern replacement for the Fortran
  extractor and is called by XSELECT in its place for most missions (see
  xselect below).  It can also be run standalone.  Beyond reproducing
  extractor's products (events, image, spectrum, light curve, WMAP), it
  adds:

   * Joint spectropolarimetric output (Stokes covariances).  With
     stokescov=QU (default) or IQU, ftextractor writes the
     inter-spectrum covariances between the Stokes I/Q/U spectra as
     per-bin XCOV columns plus grouping keywords (XCOVSIB / COVGRP /
     COVIDX / NCOVMEM, COVFRMT='XCOV-PAIR-1' or 'XCOV-SET-1').  This
     lets XSPEC fit the Stokes spectra jointly with the new
     chistokes/chicov statistic instead of treating Q, U (and I) as
     independent.  stokescov=NONE restores the old independent-spectra
     behaviour.  (Stokes I/Q/U extraction itself, via
     stokes=NEFF/SIMPLE/UNWEIGHTED, is unchanged from extractor.)

   * Single-pass multi-product extraction.  A single run can now fan one
     pass over the events into many output products -- one per region,
     one per time interval (timesplit=yes), or one per phase window
     (phasewndfile=@list) -- rather than re-reading the events once per
     product.  XSELECT drives this through its new "per=" modifier on
     "extract".

********************************************************************************
                              HEASP / HEASPTOOLS
********************************************************************************

HEASP:

- Neural-network table-model emulation.  Table-model files may carry an
  NNPTFILE keyword pointing to a PyTorch (.pt) network that emulates the
  model; enabled via the new --with-libtorch configure option.

- Polarization cross-covariance.  Support for Q/U cross-covariance
  between spectra (XCOV), backing the new chistokes/chicov statistics.

- SVD-compressed RMFs -- a compressed RMF side-car representation (used
  by the new ftsvdcmprmf tool).

- Analytic gradients for OGIP table models.

- pha/rmf changes to existing behaviour: TLMAX is now written in
  pha::write; scalar QUALITY/SYS_ERR keyword values are now preserved on
  read; rmf::read now validates F_CHAN+N_CHAN against TLMIN+DETCHANS
  (malformed RMFs that previously loaded silently may now be flagged).

HEASPTOOLS:

- ftsvdcmprmf (NEW): builds an SVD-compressed RMF side-car (with an
  optional --emitrmf denoising mode).

- ftextractor: a new C++ event extractor (built on the new heaev
  event-handling library) that is the modern replacement for the Fortran
  extractor and is called by XSELECT in its place for most missions (see
  xselect below).  It can also be run standalone.  Beyond reproducing
  extractor's products (events, image, spectrum, light curve, WMAP), it
  adds:

   * Joint spectropolarimetric output (Stokes covariances).  With
     stokescov=QU (default) or IQU, ftextractor writes the
     inter-spectrum covariances between the Stokes I/Q/U spectra as
     per-bin XCOV columns plus grouping keywords (XCOVSIB / COVGRP /
     COVIDX / NCOVMEM, COVFRMT='XCOV-PAIR-1' or 'XCOV-SET-1').  This
     lets XSPEC fit the Stokes spectra jointly with the new
     chistokes/chicov statistic instead of treating Q, U (and I) as
     independent.  stokescov=NONE restores the old independent-spectra
     behaviour.  (Stokes I/Q/U extraction itself, via
     stokes=NEFF/SIMPLE/UNWEIGHTED, is unchanged from extractor.)

   * Single-pass multi-product extraction.  A single run can now fan one
     pass over the events into many output products -- one per region,
     one per time interval (timesplit=yes), or one per phase window
     (phasewndfile=@list) -- rather than re-reading the events once per
     product.  XSELECT drives this through its new "per=" modifier on
     "extract".

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

- ftmerge: fixed corrupted output when input files have different
  TSCAL/TZERO; propagate TNULL keywords from subsequent input files

- ftverify: Fixed CFITSIO version number in ftverify output

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

xselect v3.0:

- xselect has been reimplemented in C++ (previously Fortran).  Behaviour
  is intended to be unchanged.

- Session/save files are now written in a human-readable "name=value"
  format rather than the old Fortran-formatted layout.

- New extraction backend. Missions can use "ftextractor" instead of
  "extractor" if set in the xselect.mdb file.  This change has been
  made for ASCA, AstroSat, MAXI, IXPE, Chandra, Suzaku, XMM, NICER,
  ROSAT, Hitomi and HaloSat.

- New "per=" modifier on "extract" for multi-axis (region/time/phase)
  fan-out in a single pass.

- Phase-filter stack: "filter phase" now appends to a stack (with
  save/persistence); "list filter" shows every entry.

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

Xspec version 13.0.0:

Version 13.0 is a major release whose principal theme is Bayesian 
inference and global optimization.  A new chapter on Bayesian methods 
and a new Algorithms appendix describe the analytic-gradient and 
response-compression machinery that underpins many of the features below.
For full details, please reference the Xspec User Manual:

 https://heasarc.gsfc.nasa.gov/FTP/software/xspec/XspecManual/XspecManual-13.0.0.pdf

Spectral Model Data Files:

- Spectral model data files are no longer shipped with HEAsoft.  The
  new ftgetmodeldata tool downloads, on demand, the data files required
  by the models in use, over the network (via cURL), with version lookup
  (including a latest option), a manifest file (modelDataFiles.csv),
  and clobber and dry-run options.  See:
  https://heasarc.gsfc.nasa.gov/docs/software/xspec/modeldata.html

Bayesian inference and optimization:

- Closed-form analytic derivatives (Jacobians and their reverse-
  mode vector-Jacobian products) are now available for the great
  majority of the model library.  These provide a fast Levenberg-
  Marquardt path, in which the gradient is computed analytically
  in a single pass rather than by finite differences, and supply
  the posterior gradient used by the new Hamiltonian Monte Carlo
  sampler.  

- New hmc command: a No-U-Turn-Sampler variant of Hamiltonian
  Monte Carlo over the thawed parameters, using the analytic
  posterior gradient.  It supports warmup adaptation of the leap-
  frog step size and diagonal mass matrix, multiple independent
  chains (parallelized with "parallel hmc"), and checkpoint/resume.
  Output is written in a format compatible with "chain load".

- New nest command: a multi-ellipsoidal nested sampler that
  produces weighted posterior samples together with an estimate
  of the marginal likelihood (model evidence, log Z).  It supports
  checkpoint/resume and parallel sampling ("parallel nest").

- New compare command: automated model selection.  Alternative
  models are evaluated against the current data and ranked by
  the Akaike and Bayesian information criteria, by Bayesian
  evidence ("compare nest"), or by fitting each alternative
  with the global optimizer ("compare global").

- New "fit global" option: a derivative-free global optimization
  by Differential Evolution followed by a polish with the current
  fit method.  It is never-regress (the original fit is restored
  if no improvement is found), reproducible under "xset seed",
  parallelizable with "parallel global", and reports any
  competitive minima within delta stat < 9 of the best fit.  The
  improve command now uses the same Differential Evolution
  machinery as a local warm-restart and works with all fit methods,
  not just the Minuit methods.

- The Minuit fit methods (migrad, simplex) were overhauled:
  Minuit now works directly in the parameter's stored value (so
  a fit started between a parameter's soft and hard limits reaches
  the same minimum as one started inside them), hard limits are
  passed to Minuit only when they span a range of 100 or less,
  and a fit that stops short of the minimum now says so instead
  of reporting convergence --- with different warnings for running
  out of function evaluations (fit again to continue) and for
  Minuit finding no direction of improvement.  See the method command.

- New "bayes smooth" subcommand: a multi-parameter smoothness prior
  that couples a chosen parameter across datagroups, penalizing
  shell-to-shell roughness.  It is the in-engine regularizer for
  projct de-projection, with automatic selection of the regularization
  strength by the L-curve or discrepancy principle.  Several new
  single-parameter prior families were also added (cauchy, beta,
  studentst, halfnormal, powerlaw, isotropic, lognormal, gamma,
  and shiftedlognormal).

- Added an MCMC diagnostics suite, including the Rubin-Gelman R_hat
  convergence statistic, and gave chain, hmc and nest a
  common sample format.

- PyXspec gained a unified Bayesian-inference module (runHMC, runChain,
  shared result objects, and arviz interoperability), a new module
  providing numpy vectorization for local models, and several new
  methods and attributes (mostly added to the Fit class).

New fit statistics

- chistokes: a chi-squared variant that uses the per-bin Stokes
  Q/U cross-covariance when fitting polarization spectra, rather
  than treating Q and U as independent.  It has been generalized
  to an arbitrary n-member cross-spectrum covariance group (with
  the chicov alias), so any set of bin-by-bin correlated spectra
  --- overlapping extraction regions, grating orders, or the full
  Stokes I/Q/U triple --- can be fit jointly with a multivariate-
 Gaussian likelihood, per-bin Cholesky solve and graceful
  shrinkage of non-positive-definite covariances.  The covariances
  are carried in the spectrum files (COVFRMT='XCOV-SET-1'; legacy
  Q--U pair files are auto-promoted), produced by the ftextractor
  tool (stokescov=iqu) and summed under grouping by ftgrouppha.
  See the Statistics Appendix.

New models:

- Four X-ray spectropolarimetric reflection models based on
  precomputed STOKES tables, designed for joint fitting of the
  Stokes I/Q/U spectra: stdisc (reflection of a power-law
  source of arbitrary incident polarization from the distant, nearly
  neutral equatorial regions of an accretion disc), and sttorus,
  stcone and stbowl (reflection from an optically
  thick, axially symmetric torus, double cone, or double bowl --
  representing e.g.\ an opaque AGN torus, a broad-line region, or a
  super-Eddington accretion funnel -- with partially ionized, neutral,
  or Chandrasekhar electron-scattering surfaces).

Modifications to models:

- The broadening of the APEC/SPEX pseudo-continuum (set by the
  BROADPSEUDO xset option) now uses an FFT and accepts fast and
  slow options.  The fast option (equivalent to on) uses an
  abundance-weighted atomic mass so that a single FFT broadens all
  elements at once, about five times faster than the per-element slow
  calculation.

- The gsmooth and lsmooth convolution models use an FFT for the
  index 0 and index 1 cases, giving order-of-magnitude speed-ups,
  and cache the kernel FFT when it has not changed.

- Added a check that warns (yellow alert) when the fiducial energy
  at which a line width is specified falls outside the input energy
  range.

- Table models (atable, mtable, etable) may now carry a neural
  network (NN) emulation of the tabulated spectra, indicated by
  an NNPTFILE keyword in the table file pointing to a PyTorch (.pt)
  weights file.  When such a table is loaded XSPEC automatically
  evaluates the model with the neural network instead of
  interpolating on the parameter grid, with no change to how the
  model is set up.  This requires XSPEC to have been built with
  libtorch (the --with-libtorch configure option).

- The crossarf mixing model can now be stacked, one copy per
  source, so that a single sky region may host several emission
  components with different spatial distributions -- for example
  an extended source and a point source, which spill into
  neighbouring regions by different fractions and so require
  separate arfs.  Each source's cross arfs are supplied by
  source-tagged XFLT keywords of the form CrossArfSrcSFromNToM
  (source S, contribution to region M from region N); the
  original CrossArfFromNToM form is unchanged and applies to source 1.

- The recorn mixing model is once again applied separately within
  each data group, so the correction norms of several spectra can
  be fitted at the same time.  Its first parameter names a single
  spectrum, so unlike the other mixing models -- whose one
  transformation spans every data group -- recorn needs one copy
  per corrected spectrum.  Each data group's copy now has its own
  spectrum number and cornorm, all of which appear in "show par"
  and can be set and fitted; in the intervening releases only the
  lowest data group's copy did anything.

Other:

- New group command for runtime (re)grouping of spectra without
  re-reading the files.  Its most important use is "group back",
  which lays a coarser super-bin grouping on top of the current
  source binning --- each super-bin spanning a whole number of
  source bins --- to reduce a bias in the C statistic when a
  background is present (the W statistic, see the Statistics
  Appendix of the Xspec Manual.  That statistic profiles out one
  background-rate nuisance parameter per source bin; when the
  background has few counts per bin these estimates are noisy and
  bias the fitted source parameters --- an incidental-parameters
  problem that can reach tens of percent for faint sources on a
  low-count background.  Sharing a single background rate across
  the source bins of each super-bin shrinks the number of nuisance
  parameters and can bring the bias down to a few percent.  The
  pooled-background path is selected automatically whenever a
  background super-bin grouping has been set up at runtime with
  "group back"; a GROUPING column carried by the background file
  (e.g. from ftgrouppha) is not used for this, since on input
  XSPEC applies the source grouping to the background.  The
  command also regroups the source spectrum itself ("group data"
  with optbin, minsn, mincounts, const, or file); all grouping
  is persisted in save files, recoverable with "tclout group",
  and available in PyXspec.

- New sim command for bulk posterior-predictive simulation: it
  draws many parameter sets (from the loaded chains, or from the
  fit covariance scaled by "sim fsigma"), realizes each as a
  simulated dataset in the loaded spectra, optionally refits it
  (a parametric bootstrap), and accumulates the results --- the
  in-program replacement for the scripted "tclout simpars" + newpar
  + fakeit loop (the multifake script).  Because the realization
  happens in place no files are written and the original state is
  restored on completion.  An optional command file ("sim @cmdfile")
  is run on every realization and may return a row of numbers or
  append to a per-realization output file; the products are
  recovered with "tclout sim".  The whole run is reproducible
  under "xset seed" and parallelizable with "parallel sim".

- The plot command allows finer control over plot stacks by using
  the pipe (|) character to delimit them, e.g.
  "plot da res | mo | ld rat" draws three stacks.  At present
  up to four stacks may be drawn, each holding up to four panes.

- New plot options dspec, despec and deespec: the model-independent
  counterparts of ufspec, eufspec and eeufspec.  The flux density
  is obtained by a regularized truncated-SVD inversion of the
  detector response rather than by scaling the data by the model-
 dependent unfolded/folded ratio, so the plotted data points do
  not move when the model is changed.

- Operational switches of the form "xset CONTROL_STRING yes" 
  control the numerical paths used in fitting and model
  evaluation and enable cross-check validation modes.  For example,
  DISABLE_ANALYTIC_GRAD reverts fits to finite-difference
  derivatives.  They are listed in a new table in the xset entry,
  separate from the model control strings.

- "chain info" and margin accept a parameter number of 0 to report
  and plot the distribution of the statistic values stored in a chain.

- The identify command gained a spex option to search the SPEX line list.

- Python local models are now supported in the standalone (Tcl) version
  of XSPEC, not only in PyXspec.  A Python model function may also
  opt into a faster vectorized interface with the @xspec.vectorized
  decorator, receiving zero-copy numpy arrays instead of Python
  tuples and lists --- avoiding the per-element Python-object overhead.

- Rank-K SVD compression of response matrices is now supported: a
  compressed side-car file (produced by the ftsvdcmprmf tool) can be
  loaded with the response command and tuned with the svdrank
  and svdeps options for fast folding 
  (See the Algorithms Appendix of the Xspec Manual).

- The XSPEC libraries were reorganized so they can be linked into
  third-party C++ programs without Tcl or PGPLOT: core start-up was
  split into a new XSCore library, and the model and data classes
  were split into separate XSModel and XSData libraries.  The PLT
  plotting package was modernized to call PLT and PGPLOT directly from C++.


Fixes:

Many user-visible bugs present in earlier versions have been fixed.
The more significant fixes are grouped by area below; a complete
list of the user-facing fixes in this release is given in the Xspec
User Manual's Release Notes Appendix.

Models:

- The btapec model overwrote the helium abundance with the metal
  abundance, producing a wrong continuum whenever the abundance
  parameter was not 1.

- The zvgabs absorption-line width was applied in km/s instead of
  the equivalent keV value.

- The velocity-broadened Lorentzian and Voigt models (the vlorentz and
  vvoigt families) shipped with a width-parameter hard maximum of 20
  km/s, below their own default of 100 km/s, so a fit could never raise
  the width above 20 km/s.  The maxima now match the vgauss family.

- The xmmpsf and suzpsf PSF mixing models set the model flux to zero
  above 6 keV.

- Out-of-bounds memory writes in the diskline model (when a line's
  blue edge fell in the first energy bin) and the pileup model
  (when max_ph=1) could corrupt memory or crash XSPEC.

- The vvnpshock and vvsedov models (and their bvvnpshock/bvvsedov
  variants) reused stale ionization fractions when only the electron
  temperature was changed, giving a wrong spectrum.

Data, responses and setup:

- Defining a model with more than one data group loaded read out of
  bounds, aborting XSPEC on builds compiled with array-bounds assertions.

- An ignore or notice command whose channel range lay
  entirely above the spectrum's channel count could crash.

- Deleting several spectra in a single data command could remove
  the wrong spectra.

- A table-model file path containing a slash or a hyphen was corrupted
  when the component was added with addcomp.

- Channels re-noticed after a dummyrsp command were incorrectly
  folded to zero.

- Variable-length QUALITY and GROUPING columns were incorrectly
  assumed to be scalar when their repeat count was 1.

Fitting and statistics:

- A segmentation fault in the cstat statistic when all channels
  are ignored.

- The default Levenberg-Marquardt (leven) method could leave
  parameters stuck pegged at a hard limit.

- A parameter resting on one of its limits was given a numerical
  derivative half its true value, so the Levenberg-Marquardt step
  for it was twice as long as it should be.  Additive norms met
  this routinely.  On the paths that differentiate the statistic
  directly ("xset usechainrule no", and the recorn cornorm) the
  same parameter could hang fit outright.

- fit could abort the whole session, or read out of bounds with a
  Minuit method, when the covariance matrix was ill-conditioned or
  not positive-definite; it now issues a recoverable error.

- The empirical distribution function test statistics could crash or
  return NaN: with every channel ignored, with a model integrating to
  zero over the noticed range, or with a spectrum that was folded but
  not fitted.

- The recorn cornorm parameter could not be fitted: because it
  rescales the data rather than the model, the chain-rule derivative was
  identically zero, so it was pegged as insensitive and fit stopped with
  "No variable parameters for fit".

- untie could free a mixing-model parameter outside the lowest data
  group, producing a parameter that could not be displayed, set or
  fitted but still consumed a degree of freedom.

Plotting:

- "plot sensitivity" and insensitivity drew the first detector's curve
  for every response of a multiple-response spectrum.

- "plot delchi", ufspec, fitstat and icounts could crash for a plot
  group whose spectrum has no response for an active model source.

- The polarization plots polfrac and polangle returned NaN or zero for
  multiple-source models and could contain spurious or infinite bins.

Commands and scripting:

- "autosave 0" crashed XSPEC with a divide-by-zero on the next command.

- Running a script by a path containing a directory component (for
  example @../model) failed to append the default .xcm suffix.

- energies with the log option and a low energy of 0 silently built
  a degenerate energy grid for every model.


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

New version 2.59i:

- Changes to fix the brems emissivity unit error.  Previously, the
  brems emissivity was erroneously assumed to be per sr, when in
  fact  the expression used was summed over angle.  Now this has
  been corrected. In routine for calculating heating, cooling, and
  radiative transfer (heat.f90) divide 'brcems' by 4pi.

********************************************************************************
                                   BURSTCUBE
********************************************************************************

- Fixed install scripts to use $PYTHON and added more error trapping

********************************************************************************
                                    HITOMI
********************************************************************************

- hxisgdmerge: Now initializes the variable 'clean' to "false".

- mxsgti: Version number and comments updated to reflect a
  previous change

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

Changes to the IXPE Python Tools:

- ixpeproduct:

  Changed logging output of calls to other ftools (e.g. extractor);
  calls are now the exact format of the command-line call to that tool,
  allowing users to capture such lines from log and re-run them at their
  own command line

  Now allows users to provide both no "srcregfile" argument and a
  "radius" of zero.  This condition will result in the entire
  observed area being used as the source region, any value of
  "bgregfile" being ignored, and a message being logged to let the
  user know this is the case.

  Now handles event and attitude files that have been split into
  multiple components due to the change of one or more critical
  processing parameter.

  Call to extractor to produce light curve files has been changed
  to use a stokes weight of "unweighted" instead of the weight
  specified by the argument "weight".  This results in the correct
  "I" light curve being produced, and in "Q" and "U" light curves
  being produced, though they may not match the weighting specified
  by the user.

- ixpefilemerge (NEW):

  Comprehensively merge multiple IXPE HK or event files into a
  single output file; covers all HDUs of the original file, including
  recalculating the GTI and the time bounds of the resulting output

- ixpeflagbgd:

  Parameters for each of the three background rejection algorithms
  used have been changed from being hard-coded to being looked up
  from a bgdparam CALDB file (which have been added to the latest
  CALDB).

  A new parameter "bgdparam" can be used to select automatic lookup
  of the bgdparam file from the CALDB (default), or to allow the
  user to supply the name of their own bgdparam file.

- ixpepolarization:

  Infile1, infile2, and infile3 arguments have been replaced by a
  single argument "infile" which can be a single file, a list of
  files, or an @file.

  Modfact1, modfact2, and modfact3 arguments have similarly been
  replaced by a single argument "modfact".  Thus, ixpepolarization
  now allows more than three input files.  Each input file still
  generates unique HDU's, but now multiple input files with the
  same DETNAM will be combined into an HDU named "COMBINED <DETNAME>".
  The HDU combining all input files has been renamed "COMBINED FILES".

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

MAXI (version 3.1):

- mxdownload_wget: Changed JAXA URL for archive access

- mxevtfilter: Removed unused scancondition filtering and associated
  parameters; addressd EXPOSURE keyword settings; remove event files
  with no source data

- mxevtgti: efficiency improvements, better support of user GTI input

- mxgtiwmap: Added more informative error message when HVHIST input
  is not given as expected

- mxlcraw: Improved column write sturcturing and memory management;
  replaced VLAs with dynamic memory allocation; read TBYTE, improved
  allocations in reading; use long for indexing; sort unsigned char
  instead of boolean; efficiency improvements

- mxlcurve: Updates to handle small time bins, additional header
  keywords; corrected indexing to get all scans; long type instead
  of int rows; full scans for indexing instead of only good scans;
  match data types to FITS column types; efficiency improvements

- mxpha: Adjusted BACKSCAL keyword; accept single time interval input

- mxpipeline: Revised to match new code/tools; 'getfkey' not 'get_fkey';
  improved support of lists of files in place of CALDB settings for
  parameters COLEA, HVHIST, and TELDEF; streamlined checksum updates;
  updated EXPOSURE in all spectral extensions; set maskfile to NONE
  if no background

- mxpsfcorr: Replaced Perl task with equivalent (faster) C code solution

- mxscan: OGIP unit settings for TUNIT

- mxscancond: Shift camera number assignment earlier in code; header
  keyword updates; simplified column build strategy; changed flagging to
  match TBYTE instead of boolean; removed unnecessary casting in calloc;
  efficiency improvements

- maxitool library: Converted obscure flag from bool to int to match TTYPE

********************************************************************************
                                     NUSTAR
********************************************************************************

NuSTARDAS v2.1.6:

- numetrology: Updated to accommodate changes to the duty cycle of the
  NuSTAR metrology lasers (used for determining the quaternions from
  the detector coordinates onto the sky. No change is performance is
  expected. This change allows the additional METSTATE values of 14,
  22, 30 which correspond to different cadence modes for the two
  metrology lasers.  Changes should be transparent to the user and
  are not expected to affect science analysis.

- numkarf: Support HTTPS access to CALDB files in S3 buckets

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

XRTDAS v3.7.2:

- Updates to support newer compilers

********************************************************************************
                                     XRISM
********************************************************************************

- xaarfgen: Turned on perl autoflush.

- xapipeline and rslpipeline: Added the parameters 'excltelgti' and
  'fractelgti' to fine-tune the exclusion of telemetry GTI from the
  computation of time-dependent Resolve energy gain.

- xtdpipeline: Added second call to xtdflagpix tool to complete the
  bad pixel flagging following the PI calculation.

- xmatraceback: Bugs were fixed pertaining to some of the values in
  the output photon fractions FITS file, and to the alignment between
  raytracing photons and the detector.  Differences in traceback
  images are expected to be negligible but users should re-run the
  tool to verify this, and to correct the photon fractions output file.

- rslbratios: Several bug fixes were implemented. Also, a new output
  file is created that contains GTI corresponding to time intervals
  that exclude periods of PSP limit violations. The screen output
  resulting from PSP limit violations is substantially reduced. It
  is recommended that the updated tool be re-run on user data.

- rslmkrmf: Parameter processing slightly altered. The tool now
  requires 'whichrmf' to be set to 'X' if 'splitcomb' is 'yes'.

- rslmkrsp: Improvements were made to the handling of some of the
  input parameters. The tool does not need to be re-run on user data.

- rslmpcor: A file existence check was removed because it did not
  work for remote files.

- rslmxsgti: Version and comments updated to reflect a previous change.

- xtdflagpix: Bugs were fixed in the accumulation of individual
  event flags into the bad status flag. The tool does not need to
  be re-run on user data.

- xtdpixclip: Improved handling of the 'emax' parameter.  Introduced
  a new input parameter 'timeintfile', which is the name of a GTI
  file that enables restricting histograms and the threshold
  determination to specified time intervals.

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

- pcarsp and rddescr: fixed interaction bug that prevented EDS-binned
  responses from working; this affects EDS modes like Binned and Event
  modes other than GoodXenon; make shift file name be more unique; xpcaarf
  is less chatty to prevent huge command logs

- xtedatamode: (NEW) Scans an XTE observation and reports on its
  contents; a command-line version of 'xdf'

- pcaprepobsid and pcamergeobsids: do a more careful assessment of
  the data files available and create 256-bin and/or EDS gain-
  corrected background as needed; typo fix to error message in
  pcaprepobsid

- pcaphasyserr: Change to RMS calculation of fractional systematic error

- fcollect: Output MISSION metadata keyword for output filter file

- pcaprepfile2: new parameters gaincorr and gcorrfile allow gain
  correction of background estimates

- XTE Perl tasks: more meticulous error return status for use by
  the caller (e.g. HEASoftPy)

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

- Revised Python configuration to allow for a venv-installed Python

- Support for using a system-installed copy of the WCS library, utilized
  via configure option "--with-wcslib=[PATH]" (has no effect if FV is
  included in the build as FV requires WCSLIB object files)

- New configure option "--with-libtorch[=PATH] is available to enable
  libtorch NN table-model support in HEASP.  If specified without a PATH,
  it will attempt to auto-detect torch support via '$PYTHON import torch'.

- New configure option "--with-giza=[PATH]" (beta) is available to provide
  the location of GIZA library and headers; if specified and found, HEASoft
  will use GIZA for (most) PGPLOT handling, but will use our embedded
  copy of PGPLOT if not.

  The "--with-giza" option should have no effect on Ximage since it
  currently requires PGPLOT.

- manifest.yaml: new file listing the latest versions of the heasoft
  components

- historical_versions.csv: new CSV of all past versions of heasoft
  components, back to heasoft v5