Full Changelog#
0.12.0 (2026-03-26)#
Breaking Changes#
Increased minimum version of astropy to 7.1.1 to simplify internal code within aiapy. (#385)
Restored
calibration_versionparameter toaiapy.calibrate.degradationfunction. While it was removed to simplify the API, in hindsight it is clear that this parameter is necessary to properly handle cases where multiple calibration versions are present in the correction table. (#385)aiapy.calibrate.utils.get_correction_tablenow defaults to the latest version from SSW instead of the JSOC. The table has not seen an update in a while, so this avoids an unnecessary network call to the JSOC. (#385)
New Features#
Added a new GitHub backup mirror for SSWIDL files used by aiapy. (#391)
Bug Fixes#
Ensured that
aiapy.calibrate.degradationnow once again accounts for possibility of multiple calibration versions in correction table. This resolves issues where incorrect degradation corrections were applied due to multiple entries in the calibration table. (#385)
0.11.0 (2025-12-23)#
Breaking Changes#
Renamed
aiapy.psf.psftoaiapy.psf.calculate_psfto better reflect its purpose. (#363)Dropped Python 3.10 support. The minimum required Python version is now 3.11. (#364)
The keyword,
use_gpu, inaiapy.psf.calculate_psfandaiapy.psf.deconvolvehas been removed. (#365)Renamed all “util” modules to “utils”. (#366)
Moved
aiapy.psf.psf.filter_mesh_parameterstoaiapy.psf.filter_mesh_parameters. (#367)Make the
sourcekeyword forget_correction_table()andget_pointing_table()optional. The default source forget_correction_table()“SSW” is and the default source forget_pointing_table()is “jsoc”. (#369)Passing a correction table or pointing table explicitly is no longer required for functions that use these tables. In cases where a table is not passed explicitly, the a table is created using the default source. (#369)
Increased minimum required version of Python to 3.12. (#378)
Increased minimum required version of sunpy to 7.0.0 (#378)
New Features#
Modify
update_pointing()to allow for updating pointing information of maps that have been cropped. This function no longer raises an exception if the input map does not include the full Sun or is not at the expected resolution. A warning is now raised if the plate scale is significantly different (\(>1\%\)) than the expected plate scale. (#362)Removed the need for CuPy in
aiapy.psf.calculate_psfandaiapy.psf.deconvolve. It has been replaced with JAX which enables faster CPU computations with optional GPU support.This means that the performance of these calculations has been significantly improved on machines without a compatible NVIDIA GPU. In early testing, it is around 15 times faster on the CPU compared to NumPy. (#365)
0.10.2 (2025-09-13)#
Bug Fixes#
Added support for
sunpy.time.TimeRangeforaiapy.calibrate.utils.get_pointing_table. (#360)
0.10.1 (2025-02-12)#
New Features#
Added a function
check_quality_flagto interpret quality flags fromQUALITYkeyword. (#350)
0.10.0 (2025-01-08)#
Breaking Changes#
Removed
fix_observer_locationas it is no longer needed. (#346)Due to the temporary shutdown of the JSOC, many of the functions within
aiapyare currently not functioning as they rely on the JSOC to retrieve data.In an effort to enable other sources of data to be provided to the broken functions, the following breaking changes have been made:
aiapy.calibrate.correct_degradation: The “calibration_version” keyword has been removed and “correction_table” is now a required argument. To get a correction table, one can use theaiapy.calibrate.utils.get_correction_table. This allows one to select between, JSOC, SSW, or a custom correction table. For SSW, the correction table will be the latest version of the SSW correction table (V10). If you want to use the JSOC, you can pass in “jsoc” as a string argument.aiapy.calibrate.estimate_error: “error_table” is now a required argument. To get the error table, one can use theaiapy.calibrate.utils.get_error_table. By default, this function will fetch the most recent version of the error table (V3) from SSW.aiapy.response.Channel.eve_correction: “correction_table” is now a required argument.As in
aiapy.calibrate.correct_degradation, one can use theaiapy.calibrate.utils.get_correction_tableto get the correction table.
aiapy.calibrate.update_pointing: “pointing_table” is now a required argument. To get the pointing table, one can useaiapy.calibrate.utils.get_pointing_table. This function now has a “source” keyword which can be used to select between “JSOC” (plus a start and end time) and “LMSAL” to get a copy of the pointing information dated from 11/20/2024 stored on LMSAL servers.
Note that many of the files from SSW are not updated with any frequency and provide worse results than using the data from the JSOC. (#346)
Bug Fixes#
Use
reference_datewhen constructing an observer coordinate and in place of pullingT_OBSdirectly from the header. (#345)
0.9.1 (2024-07-23)#
Bug Fixes#
Fixed Spike issue with data being loaded as floats.
0.9.0 (2024-07-22)#
Breaking Changes#
All inputs and outputs that previously used “counts” or “ct” now use “DN”. (#338)
Minimum version of
sunpysupported is nowsunpy6.0.0
0.8.0 (2024-05-11)#
Breaking Changes#
Removed the
aiapy.calibrate.normalize_exposurefunction. The same functionality can be achieved by dividing aMapby the exposure time property,my_map / my_map.exposure_time. (#182)All the functions in aiapy, that took keywords have been made to only accept them as keyword arguments. This means that you can no longer pass them as positional arguments. (#313)
Removed
setup.cfgandsetup.pyfiles, this means you will need to use a modern version of pip (23.0 or above) to install this package now. (#313)Increased the minimum version of Python to 3.10 (#313)
Downgraded warning for Multiple Valid Epochs (
aiapy.utils.utils._select_epoch_from_correction_table) to a logging debug message. (#318)
New Features#
Added extra mirrors to fetch files from SSW. (#322)
Documentation#
Cleaned up notes on AIA data preparation and included respiking procedure in the list of steps. (#182)
Transformed the documentation layout. (#318)
Fixed incorrect IDL routine reference in the
aiapy.calibrate.estimate_errordocumentation. (#322)Improved the “Requesting specific AIA images from the JSOC” Example to animate and use Fido instead of DRMS. (#323)
Internal Changes#
Catch all
erfa.core.ErfaWarningthat are raised when we convert the times from the error and degradation tables into UTC while making themastropy.time.Timeobjects. (#324)
0.7.4 (2023-10-31)#
Bug Fixes#
Fixed mismatch with the sample data downloder.
Fixed theme build to use the new sunpy theme.
0.7.3 (2023-04-05)#
Bug Fixes#
Fixed missing citation. (#177)
0.7.3 (2023-04-05)#
Bug Fixes#
Fixed missing citation. (#177)
0.7.2 (2023-01-18)#
Breaking Changes#
Removed kwargs from
correct_degradation,degradationto ensure that the correct keywords are passed into these functions and the function calls that require these keywords. (#170)Several private internal functions now raise
ValueErrorinstead ofIndexError, some of these will now be raised to the user when callingcorrect_degradation, therefore any code that checks for this error type will need updating. (#170)
Bug Fixes#
Documentation#
Added a warning about
registerthat it will not return a 4096 by 4096 Map, but most likely a 4094 by 4094 Map. (#170)
Trivial Changes#
Added several tests to ensure that
degradationworks on all wavelengths and the ones it does not, raise the correct error. (#170)
0.7.1 (2022-11-28)#
Bug Fixes#
Change SSW mirror due to the old one being down. (#167)
0.7 (2022-08-04)#
Breaking Changes#
Minimum version of
Pythonsupported is nowPython3.8.0. (#159)Minimum version of
sunpysupported is nowsunpy4.0.0 LTS. (#159)aiapy.calibrate.register()use_scipykeyword has been removed and replaced with amethodkeyword that defaults to usescipyby default. It is also possible to usescikit-imageoropencvorcupy(provided you have either one installed.) (#159)
New Features#
Added a “cupy” method to
aiapy.calibrate.register()that will use cupy to do the affine_transform. (#159)
0.6.4 (2022-01-14)#
Bug Fixes#
Fixes a bug where columns in the pointing table used to update the pointing information were being converted to masked float values. This bugfix ensures that any column used in the pointing update does not have a mask and any values that are masked are filled with NaN. This bug arises in astropy>=5.0. (#151)
Documentation#
Fixed escaping of characters in equations in multiple docstrings. (#146)
0.6.3 (2021-11-05)#
Bug Fixes#
Fixes a bug in
aiapy.calibrate.update_pointingconcerning how the row in 3-hourly master pointing table is chosen. Previously, the row withT_STARTclosest toDATE_OBSwas chosen. Now, the row corresponding toT_OBSgreater than or equal toT_STARTAND less thanT_STOPis chosen. (#137)Update the
x0_mpandy0_mpkeywords when updating the pointing information inaiapy.calibrate.update_pointing. (#140)
Internal Changes#
In the case where a submap is passed into
aiapy.calibrate.fetch_spikes, create the full-frame WCS directly from the submap WCS rather than creating an intermediate dummy full-frame map. (#139)
0.6.2 (2021-11-02)#
Bug Fixes#
Fixed a bug in the units on the table returned by
aiapy.calibrate.utils.get_pointing_table. TheX0andY0columns were incorrectly being assigned units of arcseconds instead of pixels. (#132)Fixed an off-by-one bug in
aiapy.calibrate.update_pointingwhere theCRPIX1andCRPIX2keywords were not being properly updated from theX0andY0columns in the master pointing table. (#132)
0.6.1 (2021-11-01)#
Bug Fixes#
Fixed a compatibility issue with sunpy>=3.1 in which creating a full-frame WCS in
aiapy.calibrate.fetch_spikeswas throwing an exception. (#126)Added a check on
aiapy.calibrate.update_pointingso that passing in a submap or a map not at the full AIA resolution, raises an exception. (#127)
0.6.0 (2021-10-27)#
Breaking Changes#
Pin minimum version of Python to 3.7 (#114)
Pin minimum version of sunpy to 3.0.0 LTS.
New Features#
Added a new function
aiapy.utils.telescope_number()that returns the associated telscope number for a given filter wavelength. (#116)Added a new function
aiapy.calibrate.utils.get_error_table()to fetch and parse the table with the associate error parameters. This is used primarily inaiapy.calibrate.estimate_error(). (#116)Added a new function
aiapy.calibrate.estimate_error()to calculate the error for a given set of AIA counts and the associated channel. This is an exact port of the IDL functionaia_bp_estimate_error. (#116)
Bug Fixes#
aiapy.calibrate.update_pointingnow skips updating keywords if the pointing values are missing from the pointing table returned from JSOC. (#120)
0.5.1 (2021-05-24)#
Backwards Incompatible Changes#
Pin sunpy dependency to
<=3.0to allow for backwards compatibility withsearch_metadata. (#111)
0.5.0 (2021-04-09)#
Features#
Add a flag to
aiapy.psf.deconvolve()that sets negative intensity values to zero before performing the deconvolution. (#107)
0.4.0 (2020-12-10)#
Features#
Added a function (
aiapy.utils.sdo_location()) to obtain the SDO location at a given time. (#57)Added a function (
aiapy.calibrate.respike()) for reinserting hot pixels into level 1 images. (#62)Updated default calibration version to 10. Added test for version 10 (#90)
Bug Fixes#
Updated default calibration version number for degradation correction. Added tests for multiple calibration versions (#74)
Fixed a bug where an out of date calibration epoch was used if there were older duplicate versions available in the same epoch. (#90)
aiapy.calibrate.utils.get_pointing_tablenow raises a more user-friendlyRuntimeErrorif no pointing information can be found during the requested times. Previously it would raise aKeyError. (#91)aiapy.calibrate.update_pointingnow searches 12 hours either side of the map date for pointing information. This allows for some very rare instances where more than 3 hours elapses between pointing information updates. (#91)
0.3.2 (2020-11-29)#
No significant changes.
0.3.1 (2020-11-15)#
Features#
aiapy.calibrate.register()now raises a warning if the level number is missing or is greater than 1. (#94)
0.3.0 (2020-10-06)#
Features#
Added a function (
aiapy.calibrate.normalize_exposure) to normalize an image by its exposure time. (#78)aiapy.calibrate.degradation()can now acceptTimeobjects with length greater than 1. This makes it easier to compute the channel degradation over long intervals. (#80)Citation information for
aiapyis now available fromaiapy.__citation__. (#82)The pointing table can now be passed in as a keyword argument to
aiapy.calibrate.update_pointing(). Added aaiapy.calibrate.utils.get_pointing_table()to retrieve the 3-hour pointing table from JSOC over a given time interval. (#84)
Bug Fixes#
The
CROTA2keyword update inaiapy.calibrate.update_pointing()now includes the value ofSAT_ROTfrom the FITS header. Previously, the keyword was only being updated withINSTROT. (#84)
0.2.0 (2020-07-16)#
Features#
Functionality for respiking level 1 images and fetching spike data from JSOC
Updated calibration data now fetched from JSOC to account for instrument degradation
Compatibility fix with sunpy > 2.0.0 which previously caused level 1.5 maps to expand by several pixels
Functionality for fetching the location of SDO in time
0.1.0 (2020-03-31)#
Features#
Update pointing keywords in the header using the 3-hour pointing values from the JSOC
Correct Heliographic Stonyhurst observer location
Register images by removing the roll angle, centering the image, and scaling to a common resolution (i.e. “aia_prep”)
Calculate wavelength response functions for all channels, including time-dependent effects
Account for channel degradation in image correction
Compute the point spread function and deconvolve an image with the point spread function (with optional GPU acceleration)