Saving and loading sunpy Maps with asdf#

In this example we are going to look at how we can save and load a GenericMap with asdf.

asdf is a modern file format designed to meet the needs of the astronomy community. It has deep integration with Python, SunPy and Astropy as well as implementations in other languages. It can be used to store known Python objects in a portable, well defined file format. It is primarily useful for storing complex Astropy and SunPy objects in a way that can be loaded back into the same form as they were saved.

Here, even though we will be working with AIAMap specifically, the process can be extended to any GenericMap, including ones created using custom FITS files.

import asdf
import astropy.units as u

import sunpy.data.sample
import sunpy.map

We begin by creating an AIAMap object using the sample data.

aia_map = sunpy.map.Map(sunpy.data.sample.AIA_171_IMAGE)
aia_map.peek(clip_interval=(1, 99.99)*u.percent)
AIA $171 \; \mathrm{\mathring{A}}$ 2011-06-07 06:33:02

We can now save this object to an asdf file to use later. Saving it like this allows us to preserve all of the metadata of the object along with the actual array data. When we load the asdf again, we get an identical AIAMap object.

asdf files work by saving a dictionary internally, so to save the object we need to put it into a dictionary. This becomes what asdf calls a “tree”.

tree = {'aia_map': aia_map}

We can now write the data to an asdf file like so:

with asdf.AsdfFile(tree) as asdf_file:
    asdf_file.write_to("sunpy_map.asdf")

This asdf file is a portable file and can be safely loaded by anyone with Astropy, sunpy and asdf installed. We can reload it like so:

with asdf.open("sunpy_map.asdf") as asdf_file:
    reloaded_aia_map = asdf_file['aia_map']
    reloaded_aia_map.peek(clip_interval=(1, 99.99)*u.percent)
AIA $171 \; \mathrm{\mathring{A}}$ 2011-06-07 06:33:02

Total running time of the script: (0 minutes 1.332 seconds)

Gallery generated by Sphinx-Gallery