Overlay an AIA image on a LASCO C2 coronagraph#

This example shows the steps needed to overlay the disc and off-limb components of an AIA image within the masked occulter of a LASCO C2 image.

from datetime import datetime

import hvpy
import matplotlib.pyplot as plt
from hvpy.datasource import DataSource

import astropy.units as u
from astropy.coordinates import SkyCoord

import sunpy.data.sample
from sunpy.coordinates import SphericalScreen
from sunpy.map import Map
from sunpy.util.config import get_and_create_download_dir

First, we will acquire a calibrated LASCO C2 image from Helioviewer and create a map. hvpy uses the standard datetime instead of astropy.time.

lasco_jp2_file = hvpy.save_file(hvpy.getJP2Image(datetime(2011, 6, 7, 6, 34),
                                                 DataSource.LASCO_C2.value),
                                filename=get_and_create_download_dir() + "/LASCO_C2.jp2", overwrite=True)
lasco_map = Map(lasco_jp2_file)
aia_map = Map(sunpy.data.sample.AIA_171_IMAGE)

In order to plot off-limb features of the AIA image.

Note that off-disk AIA data are not retained by default because an additional assumption is required to define the location of the AIA emission in 3D space. We can use SphericalScreen to retain the off-disk AIA data. See Reprojecting Using a Spherical Screen for more reference.

projected_coord = SkyCoord(0*u.arcsec, 0*u.arcsec,
                           obstime=lasco_map.observer_coordinate.obstime,
                           frame='helioprojective',
                           observer=lasco_map.observer_coordinate,
                           rsun=aia_map.coordinate_frame.rsun)
projected_header = sunpy.map.make_fitswcs_header(aia_map.data.shape,
                                                 projected_coord,
                                                 scale=u.Quantity(aia_map.scale),
                                                 instrument=aia_map.instrument,
                                                 wavelength=aia_map.wavelength)
# We use `~sunpy.coordinates.SphericalScreen` to ensure that the off limb AIA pixels
# are reprojected. Otherwise it will only be the on disk pixels that are reprojected.
with SphericalScreen(aia_map.observer_coordinate):
    aia_reprojected = aia_map.reproject_to(projected_header)
/home/docs/checkouts/readthedocs.org/user_builds/sunpy/checkouts/stable/examples/plotting/lasco_overlay.py:44: SunpyMetadataWarning: Missing metadata for observer: assuming Earth-based observer.
For frame 'heliographic_stonyhurst' the following metadata is missing: dsun_obs,hglt_obs,hgln_obs
For frame 'heliographic_carrington' the following metadata is missing: dsun_obs,crlt_obs,crln_obs

  obstime=lasco_map.observer_coordinate.obstime,

Finally, we plot the images by layering the AIA image on top of the LASCO C2 image.

fig = plt.figure()
ax = fig.add_subplot(projection=lasco_map)
lasco_map.plot(axes=ax)
aia_reprojected.plot(axes=ax, clip_interval=(1, 99.9)*u.percent)
ax.set_title("AIA and LASCO C2 Overlay")

plt.show()
AIA and LASCO C2 Overlay
INFO: Missing metadata for solar radius: assuming the standard radius of the photosphere. [sunpy.map.mapbase]
INFO: Using image-based autoalignment [sunpy.map.mapbase]

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

Gallery generated by Sphinx-Gallery