.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "generated/gallery/paper_figures.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_generated_gallery_paper_figures.py: ============= Paper Figures ============= Recreation of figures from the original paper [Garton2018]_. .. [Garton2018] https://www.swsc-journal.org/articles/swsc/pdf/2018/01/swsc170041.pdf Start of with imports .. GENERATED FROM PYTHON SOURCE LINES 12-32 .. code-block:: Python import copy import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import LogNorm from matplotlib.patches import Rectangle from sunpy.map import ( Map, all_coordinates_from_map, coordinate_is_on_solar_disk, pixelate_coord_path, sample_at_coords, ) import astropy.units as u from astropy.coordinates import SkyCoord from astropy.units import UnitsError from astropy.visualization import make_lupton_rgb .. GENERATED FROM PYTHON SOURCE LINES 33-43 Figure 2 -------- A summary plot showing SDO/AIA 131Å, 171Å, 193Å, 211Å, 335Å and 94Å observations from 2016-09-22 at 12:00 UT. A small equatorial coronal hole (CH) is visible close to disk center, it is more visible in some wavelengths than others. .. note:: Figures 2 and 3 use data from a different date compared to later figures. .. GENERATED FROM PYTHON SOURCE LINES 44-82 .. code-block:: Python m94 = Map("https://jsoc1.stanford.edu/data/aia/synoptic/2016/09/22/H1200/AIA20160922_1200_0094.fits") m131 = Map("https://jsoc1.stanford.edu/data/aia/synoptic/2016/09/22/H1200/AIA20160922_1200_0131.fits") m171 = Map("https://jsoc1.stanford.edu/data/aia/synoptic/2016/09/22/H1200/AIA20160922_1200_0171.fits") m193 = Map("https://jsoc1.stanford.edu/data/aia/synoptic/2016/09/22/H1200/AIA20160922_1200_0193.fits") m211 = Map("https://jsoc1.stanford.edu/data/aia/synoptic/2016/09/22/H1200/AIA20160922_1200_0211.fits") m335 = Map("https://jsoc1.stanford.edu/data/aia/synoptic/2016/09/22/H1200/AIA20160922_1200_0335.fits") fig, axes = plt.subplot_mosaic( [["131", "171"], ["193", "211"], ["335", "94"]], layout="constrained", figsize=(6, 9), per_subplot_kw={ "131": {"projection": m131}, "171": {"projection": m171}, "193": {"projection": m193}, "211": {"projection": m211}, "335": {"projection": m335}, "94": {"projection": m94}, }, ) temps = { "131": 0.4, "171": 0.7, "193": 1.2, "211": 2.0, "335": 2.5, "94": 6.3, } for m in [m131, m171, m193, m211, m335, m94]: wave_str = f"{m.wavelength.value:0.0f}" line_coords = SkyCoord([-200, 0], [-100, -100], unit=(u.arcsec, u.arcsec), frame=m.coordinate_frame) m.plot(axes=axes[wave_str], clip_interval=(0.1, 99.9) * u.percent) axes[wave_str].set_title(f"{wave_str} Å {temps[wave_str]} MK") axes[wave_str].plot_coord(line_coords, "w", linewidth=1.5) axes[wave_str].set_facecolor("k") .. image-sg:: /generated/gallery/images/sphx_glr_paper_figures_001.png :alt: 131 Å 0.4 MK, 171 Å 0.7 MK, 193 Å 1.2 MK, 211 Å 2.0 MK, 335 Å 2.5 MK, 94 Å 6.3 MK :srcset: /generated/gallery/images/sphx_glr_paper_figures_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none Files Downloaded: 0%| | 0/1 [00:00] .. GENERATED FROM PYTHON SOURCE LINES 335-342 Figure 6 -------- Figure 6 shows the log transformed and clipped 171, 193, and 211 as a tri-color image (top left). Candidate CH masks for each intensity ratio pair are also shown 193Å - 171Å (top right), 211Å - 171Å (bottom left), and 211Å - 193Å (bottom right). These were obtained by thresholding ratios of the log transformed and clipped observations. .. GENERATED FROM PYTHON SOURCE LINES 343-386 .. code-block:: Python # From IDL code how they were obtained unclear maybe fitting of intensity valley? d171_min, d171_max = 1.2, 3.9 d193_min, d193_max = 1.4, 3.0 d211_min, d211_max = 0.8, 2.7 d171_clipped = np.clip(np.log10(m171.data), d171_min, d171_max) d171_clipped_scaled = ((d171_clipped - d171_min) / (d171_max - d171_min)) * 255 d193_clipped = np.clip(np.log10(m193.data), d193_min, d193_max) d193_clipped_scaled = ((d193_clipped - d193_min) / (d193_max - d193_min)) * 255 d211_clipped = np.clip(np.log10(m211.data), d211_min, d211_max) d211_clipped_scaled = ((d211_clipped - d211_min) / (d211_max - d211_min)) * 255 tri_color_img = make_lupton_rgb( d171_clipped_scaled, d193_clipped_scaled, d211_clipped_scaled, Q=10, stretch=50 ) mask_171_211 = (d171_clipped_scaled / d211_clipped_scaled) >= ( (np.mean(m171.data[disk_mask]) * 0.6357) / np.mean(m211.data[disk_mask]) ) mask_211_193 = (d211_clipped_scaled + d193_clipped_scaled) < ( 0.7 * (np.mean(m193.data[disk_mask]) + np.mean(m211.data[disk_mask])) ) mask_171_193 = (d171_clipped_scaled / d193_clipped_scaled) >= ( (np.mean(m171.data[disk_mask]) * 1.5102) / np.mean(m193.data[disk_mask]) ) fig, axes = plt.subplot_mosaic( [["tri", "193_171"], ["211_171", "211_193"]], layout="constrained", figsize=(6, 6) ) axes["tri"].imshow(tri_color_img, origin="lower") axes["193_171"].imshow(mask_171_193, origin="lower") axes["193_171"].set_title("171 / 193") axes["211_171"].imshow(mask_171_211, origin="lower") axes["211_171"].set_title("171 / 211") axes["211_193"].imshow(mask_211_193, origin="lower") axes["211_193"].set_title("211 / 193") .. image-sg:: /generated/gallery/images/sphx_glr_paper_figures_005.png :alt: 171 / 193, 171 / 211, 211 / 193 :srcset: /generated/gallery/images/sphx_glr_paper_figures_005.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:349: RuntimeWarning: divide by zero encountered in log10 d171_clipped = np.clip(np.log10(m171.data), d171_min, d171_max) /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:349: RuntimeWarning: invalid value encountered in log10 d171_clipped = np.clip(np.log10(m171.data), d171_min, d171_max) /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:352: RuntimeWarning: divide by zero encountered in log10 d193_clipped = np.clip(np.log10(m193.data), d193_min, d193_max) /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:352: RuntimeWarning: invalid value encountered in log10 d193_clipped = np.clip(np.log10(m193.data), d193_min, d193_max) /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:355: RuntimeWarning: divide by zero encountered in log10 d211_clipped = np.clip(np.log10(m211.data), d211_min, d211_max) /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:355: RuntimeWarning: invalid value encountered in log10 d211_clipped = np.clip(np.log10(m211.data), d211_min, d211_max) /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:362: RuntimeWarning: divide by zero encountered in divide mask_171_211 = (d171_clipped_scaled / d211_clipped_scaled) >= ( /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:362: RuntimeWarning: invalid value encountered in divide mask_171_211 = (d171_clipped_scaled / d211_clipped_scaled) >= ( /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:370: RuntimeWarning: divide by zero encountered in divide mask_171_193 = (d171_clipped_scaled / d193_clipped_scaled) >= ( /home/docs/checkouts/readthedocs.org/user_builds/chimera-py/checkouts/latest/examples/paper_figures.py:370: RuntimeWarning: invalid value encountered in divide mask_171_193 = (d171_clipped_scaled / d193_clipped_scaled) >= ( Text(0.5, 1.0, '211 / 193') .. GENERATED FROM PYTHON SOURCE LINES 387-392 Figure 7 -------- Figure 7 shows the log transformed and clipped 171, 193, and 211 as a tri-color image (left) and the final CH mask obtained by taking the product of the individual candidate masks. .. GENERATED FROM PYTHON SOURCE LINES 393-399 .. code-block:: Python fig, axes = plt.subplot_mosaic([["tri", "comb_mask"]], layout="constrained", figsize=(6, 3)) axes["tri"].imshow(tri_color_img, origin="lower") axes["comb_mask"].imshow(mask_171_193 * mask_171_211 * mask_211_193, origin="lower") .. image-sg:: /generated/gallery/images/sphx_glr_paper_figures_006.png :alt: paper figures :srcset: /generated/gallery/images/sphx_glr_paper_figures_006.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 400-405 Figure 8 -------- Figure 8 shows the top 5 (by area) contours created from the CH mask over plotted on the same tri-color image as in Figures 6 and 7. .. GENERATED FROM PYTHON SOURCE LINES 406-424 .. code-block:: Python mask_map = Map(((mask_171_193 * mask_171_211 * mask_211_193).astype(int), m171.meta)) try: contours = mask_map.contour(0.5 / u.s) except UnitsError: contours = mask_map.contour(50 * u.percent) contours = sorted(contours, key=lambda x: x.size, reverse=True) fig, axes = plt.subplot_mosaic( [["seg"]], layout="constrained", figsize=(6, 3), subplot_kw={"projection": m171} ) m171.plot(axes=axes["seg"]) axes["seg"].imshow(tri_color_img) # For the moment just plot to top 5 contours based on "size" for contour for contour in contours[:6]: axes["seg"].plot_coord(contour, color="w", linewidth=0.5) .. image-sg:: /generated/gallery/images/sphx_glr_paper_figures_007.png :alt: AIA $171 \; \mathrm{\mathring{A}}$ 2016-10-31 02:32:10 :srcset: /generated/gallery/images/sphx_glr_paper_figures_007.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 22.121 seconds) .. _sphx_glr_download_generated_gallery_paper_figures.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: paper_figures.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: paper_figures.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: paper_figures.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_