********************************************************************************
                         RELEASE NOTES FOR HEASOFT 6.27
                                 March 26, 2020
********************************************************************************

The HEASoft 6.27 release is driven primarily by updates to mission-
specific data analysis software (MAXI, NICER, NuSTAR, Swift, XTE et al.),
but includes many other enhancements and fixes.

As before, 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
********************************************************************************

Version 3.48:

- Now can handle parentheses in path names rather than automatically
  interpreting them as output file specifiers.

- Fixed bug in imcompress.c that wasn't properly handling conversion
  between float and double types when reading from a gzip compressed
  float or double image.

- Fixed bug that was preventing use of bracket and parentheses symbols
  in pathnames when opening multiple READWRITE files, even when
  requesting no-extended-syntax usage. *This fix necessitates a
  library interface version number change.

- Fixed bug in ffmnhd / fits_movnam_hdu to properly handle wildcard
  syntax.

- Fixed bug in fits_open_extlist to handle filename[EXT] syntax
  properly.  The hdutype parameter may now be null.  More documentaion
  for this function is in cfitsio.tex.

- Added new function fits_copy_hdutab to create a new table with the same
  structure as an existing table.

- fits_copy_col / ffcpcl handles long long integer data types more
  natively to prevent precision loss.

- histo.c routines now recognize integer columns that have been scaled by
  TSCALn keywords and may be closer to floating point type.

- Added backward compatibility for very old Rice compressed files which
  were not using the ZVAL2 keyword in the way that later became standard.

- Change made to cfitsio.pc.in to prevent forcing downstream libraries
  to link against cfitsio's dependencies when using pkgconfig.

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

- Converted all cases of catching std::bad_cast exceptions from
  by-value to by-reference.

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

General:

   Made arf, pha, and rmf classes a bit more tolerant by allowing
   reading of files where extensions are identified only by HDUCLAS*
   keywords.

   Replaced deprecated auto_ptr by unique_ptr.

   Added SPneedVecCol routine to check whether a column should be vector
   or scalar.

   Changed SPcopyKeys so it only copies keywords that do not already
   exist in the target extension. This prevents overwriting keyword
   values that have been set by the tool calling the routine.

grouping:

   Changed the grouping class to include separate grouping and quality
   vectors instead of combining them in a single flag vector. Made
   corresponding changes to methods.

   Fixed bug which was incorrectly rejecting binning factors of -1 in a
   binning text file.

pha:

   Fixed a bug in convertUnits() which prevented the conversion working
   in the case of input fluxes in ph/cm^2/s/keV

   In rebinChannels set the grouping identically to 0 rather than 1 for
   consistency with the standard since a GROUPING keyword will be
   written.

   Changed setting of output quality to be bad if either any input
   channel making the bin is bad or if phafile grouping is being used
   any channel in the grouping pha is bad.

arf:

   Added handy routines to return the extension numbers of SPECRESP
   extensions in a file and the type of an extension.


arfII:

   Made recognition of arf extensions more flexible in NumberofARFs.

rmf:

   When writing output files change N_GRP and CHANNEL to J format if required.

   Fixed out-of-bounds writes in cases when the F_CHAN and N_CHAN
   vector columns are longer than N_GRP.

   Modified rmf::read so that the EBOUNDS data is first read into a
   separate rmf object so it can test for consistency between MATRIX and
   EBOUNDS keywords such as CHANTYPE and INSTRUME. If inconsistencies are
   found then messages are written to SPreportError so the calling program
   can check for them. The keywords from MATRIX take priority over
   those from EBOUNDS.

   Add handy functions to return vectors of extension numbers of
   EBOUNDS and MATRIX extensions.

   Changed rmf compression criterion to only include elements with
   values > LO_THRES instead of >= LO_THRES.

   Write EBOUNDS and MATRIX energy columns as D instead of E to avoid
   precision issues with high-resolution optical/UV spectra.

table:

   Changed ENERGIES columns from single to double precision.

   Fixed a bug in convertUnits() which prevented the conversion working
   in the case of input fluxes in ph/cm^2/s/keV

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

- prefilter:

  Updated to support POSITION and VELOCITY inputs; accepts units of
  m and km (m/s and km/s)

  Incorporated the new magnetic field model of IGRF v13 (released
  December 2019); going back to the year 2000, use full degree-13
  precision of published model instead of degree-10 truncation;
  differences expected to be less than 0.01%

  Prepared for configurable columns=ALLV4 without losing backward
  compatibility

  Added XYZMAGAUX subroutine which computes extra magnetic quantities

  Added new derived columns relating to magnetic field, view directions
  and earth viewing; these are optionally produced if columns=ALLV4
  (however, compatibility with prefilter v3 is maintained by default):

   MAGFIELD MAGFIELD_MIN MAGVECT MAGVECT_POL ZENITH_ANGLE EAST_ANGLE
   NORTH_ANGLE BEARING_ANGLE EARTHPNT_LAT EARTHPNT_LON EARTHPNT_RANGE

  Fixed bug in dependency ordering which led to segfault; now
  derived->coordquat is initialized with pointing instead of RA/DEC/ROLL

  Added MAG_ANGLE = angle between pointing direction and magnetic field

  Added more powerful ability to include or exclude columns from the
  selected list

  Support for attfile == NONE for HaloSat (ATT in .orb file)

  Addition of LOCAL_TIME derived column

- geomagterp (new task): New tool for interpolating geomagnetic
  quantities; the CALDB portion is not ready yet, so for now it's
  basically a glorified finterp

- tristarid: Updated TDISP keywords for rates in source catalog

- Updated tasks to allow longer filenames

********************************************************************************
                                     FIMAGE
********************************************************************************

- flst2im: (v1.4.1) Added support for columns scaled with non-integer
  TSCALn keywords

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

- fdiff: Added support for TLONGLONG 64-bit integers

- finterp:

  Check for TLONGLONG type

  'sortkey2' parameter can be an expression

  Improved error output and documentation

  Fixed bug in handling of new sortkey1=(expr) function with tcheck=YES;
  tcheck is now disabled when expressions are used

  Relaxed requirements upon matching input and output column properties
  when they are not needed; removed restrictions on how FITS filenames are
  specified; the extension number is no longer required if the 'first
  table extension' is acceptable; added ability to rename and/or change
  data type of source column names, as documented in the help; preserves
  compatibilty with existing usage

  Added more checking of output columns and make sure any T<col>n
  properties of existing columns aren't accidentally preserved;

  Fixed bug in 'copyall' case when writing existing file

  Fixed bug when column exists in output but is not last column

  Fixed bug in which column number is used for backward compatibility;
  allow copyall=COPYBEFORE and copyall=COPYAFTER for more flexibility
  in transferring input file to output

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

- Fixed crash when plotting image tables

- Fixed crash stemming from incorrect WCS initialization

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

- barycorr:

  In the case where TSTART & TSTOP are not in the header, set
  tstart=tstop=TIMENULLVAL to prevent trying to write these keywords.
  This problem was triggered on macOS 10.15 when using a non-Xcode
  compiler suite (MacPorts, Homebrew).

  (heautils library) HDget_frac_time(): Initialize valuei & valuef
  to avoid returning an undefined value (to e.g. barycorr) when
  TSTART & TSTOP are missing

  Handle Swift UVOT event files and Swift MAGHIST files (output of
  uvotevtlc)

  Document (and warn) about .gz input and output files

- ftadjustgti: Now uses fits_open_extlist()

- xrtraytrace: Fixed bug that used back-side mirror reflectivity
  in place of precollimator reflectivity in two places; fixed
  bug that retrieved MINENERG and MAXENERG keywords redundantly
  after FITS file was closed; fixed bug that truncated at 7 the
  number of interactions per photon path written to the PATHCODE
  column in the output events file; this number is now 8, as
  intended.

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

- extractor: Fixed trap of no xcolf/ycolf in w_events. Moved
  correction of time for TIMEPIXR to after the time filtering.
  This may make small differences for missions which do not use
  TIMEPIXR values of 0.5 but does make the filtering consistent 
  with that from ftselect.

- fadmap: Path/filename corrections to COS-B/SAS-2 CALDB; corrected date
  errors introduced by Y2K updates

********************************************************************************
                                   HEASPTOOLS
********************************************************************************

- Fixed all heasptools so that output files starting with an exclamation
  mark are handled correctly.

- ftgcorrmf, ftmarfrmf, ftrgsrmfsmooth, ftrsp2rmfarf, ftstripnegchan:

  Use SPcopyKeys for the EBOUNDS extension as well as the MATRIX
  extension.

- ftmkrsp: Trapped case of an input energy bin with no response groups.

- ftsdss2xsp: Fixed check of PLATEID keyword - it is in the primary
  header, not the COADD extension.

- genrsp (wrapper to ftgenrsp): Fixed conditional parameter prompts

- rbnrmf (wrapper to ftrbnrmf): If a binfile has been specified set
  cmpmode=binfile; revised to reflect ftrbnrmf prompting behavior
  (also ftrbnrmf help file): always prompt for cmpmode, and use it
  to determine prompting for binfile & nchan; if an ebinfile is
  specified, pass ecmpmode=ebinfile; otherwise pass ecmpmode=linear
  and the ebfact value.

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

- ftdiff: Check for TLONGLONG data type

- ftimgcalc: Use fit_get_eqcoltype to more accurately reflect
  data type of image (could be 'float-like' if BSCAL is used)

- ftmgtime: Now uses fits_open_extlist(); added compatibility layer to
  support mgtime's idiosyncracies for future mgtime wrapper to ftmgtime

- ftsort: Handle TLONGLONG 64-bit integers in input columns; work with
  non-integer TSCALn values; relocated fits_copy_hdutab to CFITSIO;
  fixed case of outfile=infile where the specified column doesn't exist

- ftleapsec: Factored out leap second retrieval code into its own Perl
  library (see above)

- fitsverify (standalone ftverify variant): Use fits_open_diskfile (via
  ifdef) rather than fits_open_file per a user request.  This allows for
  file paths with special characters (e.g. brackets) that would otherwise
  fail; note that this also necessitates omitting the call to
  fits_parse_rootname (via ifdef).

********************************************************************************
                                    XRONOS
********************************************************************************

- All tasks updated to fix memory faults occurring under recent Debian-
  based systems (e.g. Ubuntu 18.10 and newer)

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

- Fixed bug in cpd command which could cause a confusing error message
  if immediately preceded by some other set command.

- (xsl_filter_intensity) Considerable simplification due to using (new)
  premax and postmax parameters for maketime.

- Minor rearrangement for some variables which were in the wrong common
  blocks; changed to initialize all global variables with some
  rearrangement to match up with common block order in xselvar.inc;
  Removed unnecessary include of xselect.h and added one of cfortran.h;
  added missing Common_AppInit prototype; replaced call of close by the
  (correct) call of fclose; changed the READ logical to EVREAD for
  clarity; these changes fix an error restoring saved sessions.

- Added support for HaloSat event files.

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

HEASoft 6.27 includes Xspec 12.11:

New Models:

    ismdust    - Extinction due to silicate and graphite grains.
    olivineabs - Extinction due to olivine grains.
    agnslim    - AGN super-Eddington accretion model.
    zkerrbb    - Redshifted version of kerrbb.
    thcomp     - Thermally comptonized continuum convolution model.
    logconst   - Convert normalization to log units.
    log10con   - Convert normalization to log10 units.

Updated Models:

    Using the new 201 tabulated temperatures v3.0.9 AtomDB files
    for apec models. These CEI files reduce potential interpolation
    problems (see http://atomdb.org/interpolation/index.php).
    The interpolation scheme can be switched between log and linear
    interpolation using xset APECLOGINTERP. Another option to reduce
    interpolation errors is provided by xset APECUSENEI which
    switches all calculation of CEI spectra through the NEI
    code. This is slower but can be used to check calculations. To
    recover the older v3.0.9 files use xset APECROOT 3.0.9_51. If
    you do this and also want to use NEI models then you also need
    to use xset NEIAPECROOT 3.0.9.

    The diskline, rdblur, kdblur, kdblur2, laor, laor2, kerrconv,
    kerrdisk have all been sped up using a new FFT-based convolution
    routine.

    The xscat model has been updated to extend the range of the Rext
    parameter for MRN and ZDABAS options from 0-199 arcsec to 0-236 arcsec.

Major overhaul to code calculating statistics.  Main visible
change is that each spectrum can have a different fit statistic
but there is only a single test statistic.

Added support for responses which have been split into parts
with different resolution.  This is very effective for responses
which have high resolution but long tails down to low energies. In
the case of the XRISM Resolve instrument this will provide speed
increases of up to an order of magnitude. Note that if a file
contains multiple response extensions then XSPEC will read and use
them all unless a response extension is specified using e.g. resp.rsp{n}.

PyXspec v2.0.3:

- Plot values can now be retrieved from the individual additive
  components within a model, using the new Plot.addComp() method.

- Added Fit.nVarPars attribute to perform the equivalent of standard
  Xspec's "tclout varpar".

- Added access to standard Xspec's "rerror" command (for running the
  "error" command on response parameters.  This is now available by 
  passing a second (bool) argument to the Fit.error() method.

See also:

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

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

Xstar v2.54a:

- New in xstar version 2.54a is the inclusion of radiative excitation.
  The rate of radiative excitation for all bound-bound transitions are
  calculated and then multiplied by a factor of 1-cfrac.  So, if cfrac=1 the
  effective rate is zero and results from previous versions are recovered.

  The effects of Thomson scattering as an attenuation process in the continuum
  have now also been included, and the same 1-cfrac multiplier is used so that
  previous results can be recovered.

********************************************************************************
                                     ASCA
********************************************************************************

- ascaarf, ascaexpo, ascalin, fmosaic, gisrti, sispi: Updated to use
  GSL/FGSL random number generator

- cleansis, faintdfe: Updated to use GSL/FGSL gamma function and auxiliary
  routines

- ofaintdfe: Removed this deprecated task

********************************************************************************
                                    EXOSAT
********************************************************************************

- tkexomerge: Altered window parenting to make children windows visible

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

- mxdownload_wget: Added new ATT data types to downloadable products;
  force gmtime() to use four-digit year

- mxextract: Avoid writing repeats of STDGTI rows; replaced printf with
  headas_printf output

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

NICERDAS v007:

- nicerl2:

  Fixed crash when mkfile is specified but gzipped version does
  not exist; also changed check for missing $indir, previously
  reported as a missing file

  Added parameter 'niprefilter' which re-runs niprefilter task
  if set to YES (additional new parameters orbfile, attfile,
  prefilter_columns)

- nicerpi, nicertimecal, nicertimeconv, nimaketime, niprefilter,
  niprefilter2:

  Changes to fix the timegm() Y2020 "trap": This affects routines
  that use Perl's Time::LocalTime::timegm() function:

   http://blogs.perl.org/users/grinnz/2019/07/the-timelocal-trap.html

  For NICER, which uses timegm() for the year 1970, this would cause
  problems after the year 2020, as timegm() treats the year entry of
  "70" as meaning 2070 instead of 1970, when the run date is after
  the year 2020.

- nicerpi: Bubble pigain and pioffset parameters up to 'nicerpi' level

- nicertimeconv: Use HeaSoftLeapSec library version of NicerTime.pm;
  fixed bug in output of GPS time (offset of ~20 sec); better handle
  leap second transitions; output of MJD

- nimpumerge: Pass history parameter to subtasks

- niprefilter: When writing NULL columns (missing APID) use same
  column-ordering as normal; Added ability to re-run prefilter
  and update .mkf file in place using RUNMODE=UPDATE;
  Fixed fatal bug in handling of global start/stop time from MPU
  housekeeping; Fixed bug in handling of vehiclefile=NONE;
  Be more careful about preserving other extensions of infile;
  Fixed bug of copying keyword comments when runmode=UPDATE

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

NuSTARDAS V1.9.0:

- This is primarily a quality-of-life upgrade for the NuSTARDAS.
  The two main additions are: (1) Add the ability to save the
  barycenter-corrected event files in the output directory when
  barycorr=yes. Previously the user had to use cleanup=no to retail the
  barycenter-corrected event file, which also stored a number of other
  intermediate files. This allows for a more streamlined analysis
  approach for timing observations; (2) The "PRIOR" column is now
  preserved by default when producing the cleaned event files. This
  column is useful for recovering the time-dependent livetime on
  sub-second timescales and for high-rate observations. Please see
  the NuSTAR Software User's Guide for more details.

  There are also several minor bug fixes and other improvements:

- nupipeline: 1) when barycorr=yes and existage=3: updated the
  'nuproducts' run setting the orbit file to the "attorb" file;
  2) updated the 'nuproducts' run with `write_baryevtfile=no'.

- nuproducts: 1) added new input parameter `write_baryevtfile' to
  optionally save the barycenter-corrected event file when barycorr=yes;
  2) added an internal check to make sure that pilow, pihigh, pilowarf,
  pihigharf, grppibadhigh, grppibadlow are integer numbers; 3) added an
  internal gunzip of input mastaspectfile (to speed-up processing).

- nuscreen: added the "PRIOR" column to the list of columns that are
  preserved by default when the cleaned event files are created.

********************************************************************************
                                     ROSAT
********************************************************************************

- detect: Updated to use GSL/FGSL gamma function and auxiliary routines

- pcecor, pctcor, pcpicor, pcsasscor: Retired these deprecated tasks;
  no longer needed since ROSAT data has been reprocessed using the
  necessary corrections (i.e. with SASS version SASS7_8)

********************************************************************************
                                    SUZAKU
********************************************************************************

- xisarfgen: Updated to support PHAFILE==NONE

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

BAT:

- batdetmask, bat-burst-advocate, batsurvey, batsurvey-detmask:

  Changes to fix the timegm() Y2020 "trap": This affects routines
  that use Perl's Time::LocalTime::timegm() function:

   http://blogs.perl.org/users/grinnz/2019/07/the-timelocal-trap.html

- batcelldetect:

  MPFIT: Bug fixes for two-sided derivative mode (buffer overflow
  avoidance as well as correct two-sided calculation)

UVOT:

- uvotmaghist, uvotproduct, uvotsource: Improved region validation
  for UVOT photometry/light curves.

- uvotproduct: Install uvotproduct ds9 v7 grid file in REFDATA

XRT:

- xrtgrblc: Modified XRT pipeline with correct settings to match
  revisions to nH code

- xrtgrblc, xrtgrblcspec: Added support for high resolution HI4PI
  all-sky nH map with nhmap=2

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

- hxtrsp, pcarsp: Updated to call ftrbnrmf instead of rbnrmf
  (rbnrmf is merely a wrapper to ftrbnrmf)

- pcaextspect2:

  Changes to fix the timegm() Y2020 "trap": This affects routines
  that use Perl's Time::LocalTime::timegm() function:

   http://blogs.perl.org/users/grinnz/2019/07/the-timelocal-trap.html

  Also: bug fix for C-preprocessor macro expansion error

- trans2fits: New wrtparm=O option to create OGIP-compatible event
  files (mostly cribbed from xenon2fits work several eyars ago);
  further mods to simplify code and to write new output columns that
  counts various interesting flags

- addshots, addsine, fakelc: Updated to use GSL/FGSL random number generator

- xenon2fits: (O)GIP output format now agrees with trans2fits

- Removed buggy and erroneous clause meant to deal with empty GTI
  entries, and other overzealous GTI checking

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

- Dropped support for Cygwin in favor of Windows Subsystem for Linux (WSL)

- Fixed bugs in the DESTDIR mechanism

- HEASoft now includes the GSL & FGSL libraries, and therefore GNU Fortran
  compilers older than v5.x are unsupported.

- PGPLOT:

  Updated PGPLOT dynamic library build to link in PNG library (if
  available); this aids external packages (e.g. ISIS) using our libpgplot
  by allowing the PNG dependency to be inherited.

  SVG driver: improved support for Microsoft Edge SVG implementation

- Fixed history keyword writing for long (>72 char) lines;
  some characters were being lost using the previous algorithm