Requesting cutouts of AIA images from the JSOC#

This example shows how to request a cutout of a series of AIA images from the JSOC.

import os

import matplotlib.pyplot as plt

import astropy.units as u
from astropy.coordinates import SkyCoord
from astropy.time import Time
from astropy.visualization import ImageNormalize, SqrtStretch

import sunpy.coordinates  # NOQA
from import Fido
from import attrs as a

As this is an example, we have already worked out where we need to crop for the active region we want to showcase.

start_time = Time('2012-09-24T14:56:03', scale='utc', format='isot')
bottom_left = SkyCoord(-500*u.arcsec, -275*u.arcsec, obstime=start_time, observer="earth", frame="helioprojective")
top_right = SkyCoord(150*u.arcsec, 375*u.arcsec, obstime=start_time, observer="earth", frame="helioprojective")

Now construct the cutout from the coordinates above above using the Cutout attribute.

cutout = a.jsoc.Cutout(bottom_left, top_right=top_right, tracking=True)

Exporting data from the JSOC requires registering your email first. Please replace this with your email address once you have registered. See this page for more details.

jsoc_email = os.environ["JSOC_EMAIL"]

Now we are ready to construct the query. Note that all of this is the same for a full-frame image except for the cutout component. We will download images from a 12 hour interval centered on the time of the above cutout. We request one image every 2 hours.

query =
    a.Time(start_time - 6*u.h, start_time + 6*u.h),
Results from 1 Provider:

7 Results from the JSOCClient:

-------------------- -------- -------- -------- -------
2012-09-24T08:56:01Z  SDO/AIA    AIA_3      171    2128
2012-09-24T10:56:01Z  SDO/AIA    AIA_3      171    2128
2012-09-24T12:56:01Z  SDO/AIA    AIA_3      171    2128
2012-09-24T14:56:01Z  SDO/AIA    AIA_3      171    2128
2012-09-24T16:56:01Z  SDO/AIA    AIA_3      171    2128
2012-09-24T18:56:01Z  SDO/AIA    AIA_3      171    2128
2012-09-24T20:56:01Z  SDO/AIA    AIA_3      171    2128

Submit the export request and download the data.

files = Fido.fetch(query)
Export request pending. [id=JSOC_20230921_1386, status=2]
Waiting for 0 seconds...
7 URLs found for download. Full request totalling 7MB

Now that we’ve downloaded the files, we can create a MapSequence from them and animate them.

sequence =, sequence=True)

fig = plt.figure()
ax = fig.add_subplot(projection=sequence.maps[0])
ani = sequence.plot(axes=ax, norm=ImageNormalize(vmin=0, vmax=5e3, stretch=SqrtStretch()))