This notebook plots the east upflow region observed by EUI/HRIEUV, SPICE, and PHI/HRT from 2022 October 20 to 2022 October 26. Link to Figure 11.

Note: The internal hyperlink only works on GitHub Pages or nbviewer. Do not click when viewing the notebook on GitHub.

InĀ [1]:
import numpy as np
import sunpy
import sunpy.map
from sunpy.coordinates import get_horizons_coord, propagate_with_solar_surface
import matplotlib.pyplot as plt
from matplotlib import rcParams
from matplotlib import patheffects as path_effects
from matplotlib.ticker import LogFormatterSciNotation
from scipy.interpolate import LinearNDInterpolator
import astropy
import astropy.units as u
from astropy.io import fits
import astropy.constants as const
from astropy.coordinates import SkyCoord
from astropy.visualization import ImageNormalize, AsinhStretch
from astropy.visualization.wcsaxes import add_scalebar
from glob import glob
import os
from watroo import wow
from sunraster.instr.spice import read_spice_l2_fits
import sunkit_image.coalignment as coalignment
from fancy_colorbar import plot_colorbar, wcs_scalebar
InĀ [2]:
ms_style_dict = {'text.usetex': True, 'font.family': 'serif', 'axes.linewidth': 1,
                 'xtick.major.width': 1, 'xtick.major.size': 3,
                 'ytick.major.width': 1, 'ytick.major.size': 3,
                 'xtick.minor.width': 1, 'xtick.minor.size': 1.5,
                 'ytick.minor.width': 1, 'ytick.minor.size': 1.5,
                 'xtick.direction': 'in', 'ytick.direction': 'in',
                 'image.interpolation': 'none',
                 'text.latex.preamble': r'\usepackage[T1]{fontenc}'
                 r'\usepackage{amsmath}' r'\usepackage{siunitx}'
                 r'\sisetup{detect-all=True}' r'\usepackage{fixltx2e}'}
rcParams.update(ms_style_dict)
InĀ [3]:
def interpolate_spice_map_to_target_wcs(spice_map, spice_coalign_wcs, spice_time,
                                        hri_map,
                                        spice_solarx_shift, 
                                        spice_solary_shift):
    spice_nx = spice_nt = spice_map.data.shape[1]
    spice_map = spice_map.submap([0, 120]*u.pix, top_right=[spice_nx, 699]*u.pix)
    spice_ny = spice_map.data.shape[0]
    spice_pix_t, spice_pix_y, spice_pix_x = np.indices((1,*spice_map.data.shape))
    spice_world_coords = spice_coalign_wcs.pixel_to_world(spice_pix_x, spice_pix_y, spice_pix_t)[0][0,:,:]

    solar_orbiter_loc = np.flip(get_horizons_coord('solar orbiter',
                                                {'start':spice_time[-1],
                                                'stop':spice_time[0],
                                                'step':f'{spice_nt}'}))
    
    spice_pix_y_in_target_wcs = np.zeros((spice_ny, spice_nx))
    spice_pix_x_in_target_wcs = np.zeros((spice_ny, spice_nx))

    # superpixel_size = [8, 2] * u.pixel
    # hri_map = hri_map.superpixel(superpixel_size)
    target_wcs = hri_map.wcs

    for ii in range(spice_nt):
        spice_world_coord_t = SkyCoord(spice_world_coords[:,ii].Tx.to(u.arcsec) + spice_solarx_shift[ii]*u.arcsec, 
                                  spice_world_coords[:,ii].Ty.to(u.arcsec) + spice_solary_shift[ii]*u.arcsec,
                                  frame='helioprojective',obstime=spice_time[ii], 
                                  observer=solar_orbiter_loc[ii], 
                                  rsun=hri_map.meta['rsun_ref']*u.m,)
        
        with propagate_with_solar_surface(rotation_model='rigid'):
            spice_pix_x_in_target_wcs[:,ii], spice_pix_y_in_target_wcs[:,ii] = target_wcs.world_to_pixel(spice_world_coord_t)

    hri_map_pix_y, hri_map_pix_x = np.indices(hri_map.data.shape)

    spice_map_interpolator = LinearNDInterpolator((spice_pix_x_in_target_wcs.flatten(), spice_pix_y_in_target_wcs.flatten()), spice_map.data.flatten())

    spice_map_interpolated = spice_map_interpolator(hri_map_pix_x, hri_map_pix_y)
    spice_map_interpolated = sunpy.map.Map(spice_map_interpolated, target_wcs)
    spice_map_interpolated.meta['rsun_ref'] = hri_map.meta['rsun_ref']
    return spice_map_interpolated
InĀ [4]:
def coalign_shift(big_map, small_map):
    yshift, xshift = coalignment._calculate_shift(big_map.data, small_map.data)
    reference_coord = big_map.pixel_to_world(xshift, yshift)
    Txshift = reference_coord.Tx - small_map.bottom_left_coord.Tx
    Tyshift = reference_coord.Ty - small_map.bottom_left_coord.Ty

    return Txshift, Tyshift
InĀ [5]:
def get_saffron_map(saffron_file_dir, spice_cube, spice_time, hri_map_buffer, 
                    spice_solarx_shift, spice_solary_shift):
    try:
        spice_coalign_wcs = spice_cube['Ne VIII 770 - Peak'].wcs.dropaxis(2)[:,120:700,:]
    except:
        spice_coalign_wcs = spice_cube['Ne VIII 770 / Mg VIII 772 (Merged)'].wcs.dropaxis(2)[:,120:700,:]

    saffron_NeVIII_file_path = glob(os.path.join(saffron_file_dir, '*770.42-ne_8*.fits'))[0]
    try:
        saffron_NIV_file_path = glob(os.path.join(saffron_file_dir, '*765.15-n_4*.fits'))[0]
    except:
        saffron_NIV_file_path = glob(os.path.join(saffron_file_dir, '*787.72-o_4*.fits'))[0]
    # saffron_NIV_file_path = glob(os.path.join(saffron_file_dir, '*770.42-ne_8*.fits'))[0]

    saffron_map = sunpy.map.Map(saffron_NIV_file_path)
    saffron_int_map = saffron_map[0]
    saffron_wid_map = saffron_map[2]
    saffron_int_map = sunpy.map.Map(saffron_int_map.data*saffron_wid_map.data*np.sqrt(np.pi), saffron_int_map.meta)
    saffron_int_map = interpolate_spice_map_to_target_wcs(saffron_int_map, spice_coalign_wcs, spice_time, hri_map_buffer, 
                                                         spice_solarx_shift, spice_solary_shift)
    saffron_int_size = saffron_int_map.data.shape[::-1]
    saffron_int_map_crop = saffron_int_map.submap([20,20]*u.pix, top_right=[saffron_int_size[0]-20, saffron_int_size[1]-20]*u.pix)

    spice_additional_Txshift, spice_additional_Tyshift = coalign_shift(hri_map_buffer, saffron_int_map_crop)
    saffron_int_map_NIV = saffron_int_map.shift_reference_coord(spice_additional_Txshift, spice_additional_Tyshift)

    saffron_map = sunpy.map.Map(saffron_NeVIII_file_path)
    saffron_int_map = saffron_map[0]
    saffron_wid_map = saffron_map[2]
    saffron_int_map = sunpy.map.Map(saffron_int_map.data*saffron_wid_map.data*np.sqrt(np.pi), saffron_int_map.meta)
    saffron_int_map = interpolate_spice_map_to_target_wcs(saffron_int_map, spice_coalign_wcs, spice_time, hri_map_buffer, 
                                                         spice_solarx_shift, spice_solary_shift)
    saffron_int_size = saffron_int_map.data.shape[::-1]
    saffron_int_map_crop = saffron_int_map.submap([20,20]*u.pix, top_right=[saffron_int_size[0]-20, saffron_int_size[1]-20]*u.pix)

    spice_additional_Txshift, spice_additional_Tyshift = coalign_shift(hri_map_buffer, saffron_int_map_crop)
    saffron_int_map_NeVIII = saffron_int_map.shift_reference_coord(spice_additional_Txshift, spice_additional_Tyshift)
    
    saffron_map = sunpy.map.Map(saffron_NeVIII_file_path)
    saffron_vel_map = saffron_map[1]

    saffron_velmap_data = saffron_vel_map.data.copy()
    saffron_velmap_data = (saffron_velmap_data/np.nanmedian(saffron_velmap_data) - 1)*const.c.to_value(u.km/u.s)
    saffron_velmap_median = np.nanmedian(saffron_velmap_data[120:699,:], axis=0)
    saffron_velmap_median_fit_param = np.polyfit(np.arange(saffron_velmap_median.shape[0]), saffron_velmap_median, 1)
    saffron_velmap_data = saffron_velmap_data - np.polyval(saffron_velmap_median_fit_param, np.arange(saffron_velmap_median.shape[0]))[np.newaxis,:]
    saffron_vel_map = sunpy.map.Map(saffron_velmap_data, saffron_map[1].meta)

    saffron_vel_map = interpolate_spice_map_to_target_wcs(saffron_vel_map, spice_coalign_wcs, spice_time, hri_map_buffer,
                                                            spice_solarx_shift, spice_solary_shift)
    
    saffron_vel_map = saffron_vel_map.shift_reference_coord(spice_additional_Txshift, spice_additional_Tyshift)
    
    return saffron_int_map_NIV, saffron_int_map_NeVIII, saffron_vel_map
    
InĀ [6]:
def get_hri_hrt_spice(hri_file_path, hrt_file_path, spice_file_path,
                      spice_saffron_file_dir,bottom_left_coord, top_right_coord,
                      hri_Txshift=0*u.arcsec, hri_Tyshift=0*u.arcsec,
                      fsi_Txshift=0*u.arcsec, fsi_Tyshift=0*u.arcsec, 
                      rsun_ref = 696000000):
    hri_map = sunpy.map.Map(hri_file_path)
    hri_map.meta['rsun_ref'] = rsun_ref
    hri_map = hri_map.shift_reference_coord(hri_Txshift, hri_Tyshift)
    bottom_left_coord = SkyCoord(bottom_left_coord[0], bottom_left_coord[1], frame=hri_map.coordinate_frame)
    top_right_coord = SkyCoord(top_right_coord[0], top_right_coord[1], frame=hri_map.coordinate_frame)

    bottom_left_coord_buffer = SkyCoord(bottom_left_coord.Tx - 50*u.arcsec, bottom_left_coord.Ty - 50*u.arcsec, frame=hri_map.coordinate_frame)
    top_right_coord_buffer = SkyCoord(top_right_coord.Tx + 50*u.arcsec, top_right_coord.Ty + 50*u.arcsec, frame=hri_map.coordinate_frame)

    hri_map_buffer = hri_map.submap(bottom_left_coord_buffer, top_right=top_right_coord_buffer)
    hri_map = hri_map.submap(bottom_left_coord, top_right=top_right_coord)
    
    hri_map = sunpy.map.Map(wow(hri_map.data, bilateral=1, denoise_coefficients=[5,3])[0],
                            hri_map.meta)


    hrt_map = sunpy.map.Map(hrt_file_path)
    hrt_map = hrt_map.submap(bottom_left_coord, top_right=top_right_coord)
    hrt_map.meta['rsun_ref'] = rsun_ref
    
    spice_cube = read_spice_l2_fits(spice_file_path)
    with fits.open(spice_file_path) as hdul:
        spice_solarx_shift = hdul[-2].data.copy() + fsi_Txshift.to_value(u.arcsec)
        spice_solary_shift = hdul[-1].data.copy() + fsi_Tyshift.to_value(u.arcsec)

    try:
        spice_time = spice_cube['Ne VIII 770 - Peak'].time[0]
    except:
        spice_time = spice_cube['Ne VIII 770 / Mg VIII 772 (Merged)'].time[0]

    saffron_int_map_NIV, saffron_int_map_NeVIII, saffron_vel_map = get_saffron_map(spice_saffron_file_dir, spice_cube, spice_time, hri_map_buffer,
                                                         spice_solarx_shift, spice_solary_shift)
    
    saffron_int_map_NIV = saffron_int_map_NIV.reproject_to(hri_map.wcs)
    saffron_int_map_NeVIII = saffron_int_map_NeVIII.reproject_to(hri_map.wcs)
    saffron_vel_map = saffron_vel_map.reproject_to(hri_map.wcs)
    
    return hri_map, hrt_map, saffron_int_map_NIV, saffron_int_map_NeVIII,saffron_vel_map
InĀ [7]:
(hri_map_1020, hrt_map_1020,
saffron_int_map_1020_NIV, saffron_int_map_1020_NeVIII,saffron_vel_map_1020) = \
    get_hri_hrt_spice("../../src/EUI/HRI/euv174/20221020/coalign_step_boxcar/eui_map_seq_coalign_boxcar_181.fits",
                    "../../src/coalign_map/20221020/phi_los_map_shifted_to_aia.fits",
                    "../../src/SPICE/20221020/solo_L2_spice-n-ras_20221020T231536_V06_150995364-000_coalign.fits",
                    "../../src/SPICE/slimane/solo_L2.5_spice-n-ras_20221020T231536_V06_150995364-000/con-06/",
                    bottom_left_coord=[-950,590]*u.arcsec, top_right_coord=[-810,730]*u.arcsec,
                    hri_Txshift=(9.41462 - 20.8515)*u.arcsec, hri_Tyshift=(7.05089-8.29747)*u.arcsec,
                    fsi_Txshift=-14.2*u.arcsec, fsi_Tyshift=-4.5*u.arcsec)
WARNING: FITSFixedWarning: 'datfix' made the change 'Set MJDREF to 59872.969168 from DATEREF.
Set MJD-OBS to 59872.969168 from DATE-OBS.
Set MJD-BEG to 59872.969168 from DATE-BEG.
Set MJD-AVG to 59873.047270 from DATE-AVG.
Set MJD-END to 59873.125369 from DATE-END'. [astropy.wcs.wcs]
WARNING: UnitsWarning: 'W/m2/sr/nm' contains multiple slashes, which is discouraged by the FITS standard [astropy.units.format.generic]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
InĀ [8]:
(hri_map_1022, hrt_map_1022,
saffron_int_map_1022_NIV, saffron_int_map_1022_NeVIII, saffron_vel_map_1022) = \
    get_hri_hrt_spice("../../src/EUI/HRI/euv174/20221022/coalign_step_boxcar/eui_map_seq_coalign_boxcar_181.fits",
                      "../../src/coalign_map/20221022/phi_los_map_shifted_hrifov.fits",
                      "../../src/SPICE/20221022/lvl2/solo_L2_spice-n-ras_20221022T205536_V06_150995382-000_coalign.fits",
                      "../../src/SPICE/slimane/solo_L2.5_spice-n-ras_20221022T205536_V06_150995382-000/con-06/",
                      bottom_left_coord=[-60,360]*u.arcsec, top_right_coord=[80,500]*u.arcsec,
                      hri_Txshift=(6.6003 - 0)*u.arcsec, hri_Tyshift=(8.15779-0)*u.arcsec,
                      fsi_Txshift=0*u.arcsec, fsi_Tyshift=0*u.arcsec)
WARNING: FITSFixedWarning: 'datfix' made the change 'Set MJDREF to 59874.871951 from DATEREF.
Set MJD-OBS to 59874.871951 from DATE-OBS.
Set MJD-BEG to 59874.871951 from DATE-BEG.
Set MJD-AVG to 59874.950052 from DATE-AVG.
Set MJD-END to 59875.028152 from DATE-END'. [astropy.wcs.wcs]
WARNING: UnitsWarning: 'W/m2/sr/nm' contains multiple slashes, which is discouraged by the FITS standard [astropy.units.format.generic]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
InĀ [9]:
(hri_map_1023, hrt_map_1023,
saffron_int_map_1023_NIV, saffron_int_map_1023_NeVIII, saffron_vel_map_1023) = \
    get_hri_hrt_spice("../../src/EUI/HRI/euv174/20221023/coalign_step_boxcar/eui_map_seq_coalign_boxcar_181.fits",
                      "../../src/coalign_map/20221023/phi_los_map_shifted.fits",
                      "../../src/SPICE/20221023/solo_L2_spice-n-ras_20221023T195035_V03_150995388-000_coalign.fits",
                      "../../src/SPICE/slimane/solo_L2.5_spice-n-ras_20221023T195035_V03_150995388-000/con-06/",
                      bottom_left_coord=[350,320]*u.arcsec, top_right_coord=[500,470]*u.arcsec,
                      hri_Txshift=(4.26535 + 0.334497)*u.arcsec, hri_Tyshift=(7.96536 - 3.79503)*u.arcsec,
                      fsi_Txshift=0*u.arcsec, fsi_Tyshift=0*u.arcsec)
WARNING: FITSFixedWarning: 'datfix' made the change 'Set MJDREF to 59875.826803 from DATEREF.
Set MJD-OBS to 59875.826803 from DATE-OBS.
Set MJD-BEG to 59875.826803 from DATE-BEG.
Set MJD-AVG to 59875.893748 from DATE-AVG.
Set MJD-END to 59875.960690 from DATE-END'. [astropy.wcs.wcs]
WARNING: UnitsWarning: 'W/m2/sr/nm' contains multiple slashes, which is discouraged by the FITS standard [astropy.units.format.generic]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
InĀ [10]:
(hri_map_1024, hrt_map_1024,
saffron_int_map_1024_NIV, saffron_int_map_1024_NeVIII, saffron_vel_map_1024) = \
    get_hri_hrt_spice("../../src/EUI/HRI/euv174/20221024/coalign_step_boxcar/eui_map_seq_coalign_boxcar_181.fits",
                      "../../src/coalign_map/20221024/phi_los_map_shifted.fits",
                      "../../src/SPICE/20221024/solo_L2_spice-n-ras_20221024T231535_V07_150995398-000_coalign.fits",
                      "../../src/SPICE/slimane/solo_L2.5_spice-n-ras_20221024T231535_V07_150995398-000/con-06/",
                      bottom_left_coord=[660,330]*u.arcsec, top_right_coord=[860,530]*u.arcsec,
                      hri_Txshift=(1.66986 + 2.49223)*u.arcsec, hri_Tyshift=(7.60204 - 2.76366 )*u.arcsec,
                      fsi_Txshift=0*u.arcsec, fsi_Tyshift=0*u.arcsec)
WARNING: FITSFixedWarning: 'datfix' made the change 'Set MJDREF to 59876.969164 from DATEREF.
Set MJD-OBS to 59876.969164 from DATE-OBS.
Set MJD-BEG to 59876.969164 from DATE-BEG.
Set MJD-AVG to 59877.036108 from DATE-AVG.
Set MJD-END to 59877.103050 from DATE-END'. [astropy.wcs.wcs]
WARNING: UnitsWarning: 'W/m2/sr/nm' contains multiple slashes, which is discouraged by the FITS standard [astropy.units.format.generic]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
InĀ [11]:
(hri_map_1025, hrt_map_1025,
saffron_int_map_1025_NIV, saffron_int_map_1025_NeVIII, saffron_vel_map_1025) = \
    get_hri_hrt_spice("../../src/EUI/HRI/euv174/20221025/coalign_step_boxcar/eui_map_seq_coalign_boxcar_181.fits",
                      "../../src/coalign_map/20221025/phi_los_map_shifted.fits",
                      "../../src/SPICE/20221025/solo_L2_spice-n-ras_20221025T195035_V03_150995402-000_coalign.fits",
                      "../../src/SPICE/slimane/solo_L2.5_spice-n-ras_20221025T195035_V03_150995402-000/con-06/",
                      bottom_left_coord=[1030,320]*u.arcsec, top_right_coord=[1230,520]*u.arcsec,
                      hri_Txshift=(1.09602 - 0.419833)*u.arcsec, hri_Tyshift=(7.37633-0.200863)*u.arcsec,
                      fsi_Txshift=0*u.arcsec, fsi_Tyshift=0*u.arcsec)
WARNING: FITSFixedWarning: 'datfix' made the change 'Set MJDREF to 59877.826805 from DATEREF.
Set MJD-OBS to 59877.826805 from DATE-OBS.
Set MJD-BEG to 59877.826805 from DATE-BEG.
Set MJD-AVG to 59877.893750 from DATE-AVG.
Set MJD-END to 59877.960692 from DATE-END'. [astropy.wcs.wcs]
WARNING: UnitsWarning: 'W/m2/sr/nm' contains multiple slashes, which is discouraged by the FITS standard [astropy.units.format.generic]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
InĀ [12]:
(hri_map_1026, hrt_map_1026,
saffron_int_map_1026_NIV, saffron_int_map_1026_NeVIII, saffron_vel_map_1026) = \
    get_hri_hrt_spice("../../src/EUI/HRI/euv174/20221026/coalign_step_boxcar/eui_map_seq_coalign_boxcar_181.fits",
                      "../../src/coalign_map/20221026/phi_los_map_shifted.fits",
                      "../../src/SPICE/20221026/solo_L2_spice-n-ras_20221026T070202_V03_150995415-000_coalign.fits",
                      "../../src/SPICE/slimane/solo_L2.5_spice-n-ras_20221026T070202_V03_150995415-000/con-06/",
                      bottom_left_coord=[1300,380]*u.arcsec, top_right_coord=[1440,520]*u.arcsec,
                      hri_Txshift=(-0.0235313-6.3736)*u.arcsec, hri_Tyshift=(7.82867-0.685765)*u.arcsec,
                      fsi_Txshift=0*u.arcsec, fsi_Tyshift=0*u.arcsec)
WARNING: FITSFixedWarning: 'datfix' made the change 'Set MJDREF to 59878.293082 from DATEREF.
Set MJD-OBS to 59878.293082 from DATE-OBS.
Set MJD-BEG to 59878.293082 from DATE-BEG.
Set MJD-AVG to 59878.360027 from DATE-AVG.
Set MJD-END to 59878.426968 from DATE-END'. [astropy.wcs.wcs]
WARNING: UnitsWarning: 'W/m2/sr/nm' contains multiple slashes, which is discouraged by the FITS standard [astropy.units.format.generic]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]
INFO: Obtained JPL HORIZONS location for Solar Orbiter (spacecraft) (-144) [sunpy.coordinates.ephemeris]

Figure 11¶

(You may have to pull down to see the notebook preview of the figure)

back to top

InĀ [13]:
fig = plt.figure(figsize=(8,6.2), layout='constrained')
ax11 = fig.add_subplot(5,6,1, projection=hri_map_1020)
ax21 = fig.add_subplot(5,6,1+1*6, projection=saffron_vel_map_1020)
ax31 = fig.add_subplot(5,6,1+2*6, projection=saffron_int_map_1020_NeVIII)
ax41 = fig.add_subplot(5,6,1+3*6, projection=saffron_int_map_1020_NIV)
ax51 = fig.add_subplot(5,6,1+4*6, projection=hrt_map_1020)

ax12 = fig.add_subplot(5,6,2, projection=hri_map_1022)
ax22 = fig.add_subplot(5,6,2+1*6, projection=saffron_vel_map_1022)
ax32 = fig.add_subplot(5,6,2+2*6, projection=saffron_int_map_1022_NeVIII)
ax42 = fig.add_subplot(5,6,2+3*6, projection=saffron_int_map_1022_NIV)
ax52 = fig.add_subplot(5,6,2+4*6, projection=hrt_map_1022)

ax13 = fig.add_subplot(5,6,3, projection=hri_map_1023)
ax23 = fig.add_subplot(5,6,3+1*6, projection=saffron_vel_map_1023)
ax33 = fig.add_subplot(5,6,3+2*6, projection=saffron_int_map_1023_NeVIII)
ax43 = fig.add_subplot(5,6,3+3*6, projection=saffron_int_map_1023_NIV)
ax53 = fig.add_subplot(5,6,3+4*6, projection=hrt_map_1023)

ax14 = fig.add_subplot(5,6,4, projection=hri_map_1024)
ax24 = fig.add_subplot(5,6,4+1*6, projection=saffron_vel_map_1024)
ax34 = fig.add_subplot(5,6,4+2*6, projection=saffron_int_map_1024_NeVIII)
ax44 = fig.add_subplot(5,6,4+3*6, projection=saffron_int_map_1024_NIV)
ax54 = fig.add_subplot(5,6,4+4*6, projection=hrt_map_1024)

ax15 = fig.add_subplot(5,6,5, projection=hri_map_1025)
ax25 = fig.add_subplot(5,6,5+1*6, projection=saffron_vel_map_1025)
ax35 = fig.add_subplot(5,6,5+2*6, projection=saffron_int_map_1025_NeVIII)
ax45 = fig.add_subplot(5,6,5+3*6, projection=saffron_int_map_1025_NIV)
ax55 = fig.add_subplot(5,6,5+4*6, projection=hrt_map_1025)

ax16 = fig.add_subplot(5,6,6, projection=hri_map_1026)
ax26 = fig.add_subplot(5,6,6+1*6, projection=saffron_vel_map_1026)
ax36 = fig.add_subplot(5,6,6+2*6, projection=saffron_int_map_1026_NeVIII)
ax46 = fig.add_subplot(5,6,6+3*6, projection=saffron_int_map_1026_NIV)
ax56 = fig.add_subplot(5,6,6+4*6, projection=hrt_map_1026)


hri_map_1020.plot(axes=ax11, norm=ImageNormalize(), title=None)
saffron_vel_map_1020.plot(axes=ax21, norm=ImageNormalize(vmin=-40,vmax=40), title=None,
                          cmap='coolwarm')
saffron_int_map_1020_NeVIII.plot(axes=ax31, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1020_NeVIII.data,1),
                                                        vmax=np.nanpercentile(saffron_int_map_1020_NeVIII.data,97),
                                                        stretch=AsinhStretch(0.05)), title=None, cmap='inferno')

saffron_int_map_1020_NIV.plot(axes=ax41, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1020_NIV.data,0.5),
                                                        vmax=np.nanpercentile(saffron_int_map_1020_NIV.data,99.5),
                                                        stretch=AsinhStretch(0.1)), title=None, cmap='inferno')

hrt_map_1020.plot(axes=ax51, norm=ImageNormalize(vmin=-1500,vmax=1500), title=None, cmap='hmimag')

hri_map_1022.plot(axes=ax12, norm=ImageNormalize(), title=None)
saffron_vel_map_1022.plot(axes=ax22, norm=ImageNormalize(vmin=-40,vmax=40), title=None,
                            cmap='coolwarm')

saffron_int_map_1022_NeVIII.plot(axes=ax32, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1022_NeVIII.data,1),
                                                        vmax=np.nanpercentile(saffron_int_map_1022_NeVIII.data,97),
                                                        stretch=AsinhStretch(0.05)), title=None, cmap='inferno')

saffron_int_map_1022_NIV.plot(axes=ax42, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1022_NIV.data,0.5),
                                                        vmax=np.nanpercentile(saffron_int_map_1022_NIV.data,99.5),
                                                        stretch=AsinhStretch(0.1)), title=None, cmap='inferno')

hrt_map_1022.plot(axes=ax52, norm=ImageNormalize(vmin=-1500,vmax=1500), title=None, cmap='hmimag')

hri_map_1023.plot(axes=ax13, norm=ImageNormalize(), title=None)
saffron_vel_map_1023.plot(axes=ax23, norm=ImageNormalize(vmin=-40,vmax=40), title=None,
                            cmap='coolwarm')
saffron_int_map_1023_NeVIII.plot(axes=ax33, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1023_NeVIII.data,1),
                                                        vmax=np.nanpercentile(saffron_int_map_1023_NeVIII.data,99),
                                                        stretch=AsinhStretch(0.05)), title=None, cmap='inferno')

saffron_int_map_1023_NIV.plot(axes=ax43, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1023_NIV.data,0.5),
                                                        vmax=np.nanpercentile(saffron_int_map_1023_NIV.data,99.5),
                                                        stretch=AsinhStretch(0.1)), title=None, cmap='inferno')

hrt_map_1023.plot(axes=ax53, norm=ImageNormalize(vmin=-1500,vmax=1500), title=None, cmap='hmimag')

hri_map_1024.plot(axes=ax14, norm=ImageNormalize(), title=None)
saffron_vel_map_1024.plot(axes=ax24, norm=ImageNormalize(vmin=-40,vmax=40), title=None,
                            cmap='coolwarm')
saffron_int_map_1024_NeVIII.plot(axes=ax34, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1024_NeVIII.data,1),
                                                        vmax=np.nanpercentile(saffron_int_map_1024_NeVIII.data,99),
                                                        stretch=AsinhStretch(0.05)), title=None, cmap='inferno')

saffron_int_map_1024_NIV.plot(axes=ax44, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1024_NIV.data,0.5),
                                                        vmax=np.nanpercentile(saffron_int_map_1024_NIV.data,99.5),
                                                        stretch=AsinhStretch(0.1)), title=None, cmap='inferno')

hrt_map_1024.plot(axes=ax54, norm=ImageNormalize(vmin=-1500,vmax=1500), title=None, cmap='hmimag')

hri_map_1025.plot(axes=ax15, norm=ImageNormalize(), title=None)
saffron_vel_map_1025.plot(axes=ax25, norm=ImageNormalize(vmin=-40,vmax=40), title=None,
                            cmap='coolwarm')
saffron_int_map_1025_NeVIII.plot(axes=ax35, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1025_NeVIII.data,1),
                                                        vmax=np.nanpercentile(saffron_int_map_1025_NeVIII.data,99),
                                                        stretch=AsinhStretch(0.05)), title=None, cmap='inferno')

saffron_int_map_1025_NIV.plot(axes=ax45, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1025_NIV.data,0.5),
                                                        vmax=np.nanpercentile(saffron_int_map_1025_NIV.data,99.5),
                                                        stretch=AsinhStretch(0.1)), title=None, cmap='inferno')

hrt_map_1025.plot(axes=ax55, norm=ImageNormalize(vmin=-1500,vmax=1500), title=None, cmap='hmimag')

hri_map_1026.plot(axes=ax16, norm=ImageNormalize(), title=None)
im26 = saffron_vel_map_1026.plot(axes=ax26, norm=ImageNormalize(vmin=-40,vmax=40), title=None,
                            cmap='coolwarm')
im36 = saffron_int_map_1026_NeVIII.plot(axes=ax36, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1026_NeVIII.data,1),
                                                        vmax=np.nanpercentile(saffron_int_map_1026_NeVIII.data,99),
                                                        stretch=AsinhStretch(0.05)), title=None, cmap='inferno')

im46 = saffron_int_map_1026_NIV.plot(axes=ax46, norm=ImageNormalize(vmin=np.nanpercentile(saffron_int_map_1026_NIV.data,0.5),
                                                        vmax=np.nanpercentile(saffron_int_map_1026_NIV.data,99.5),
                                                        stretch=AsinhStretch(0.1)), title=None, cmap='inferno')

im56 = hrt_map_1026.plot(axes=ax56, norm=ImageNormalize(vmin=-1500,vmax=1500), title=None, cmap='hmimag')

clb26, clb_ax26 = plot_colorbar(im26, ax26,
              bbox_to_anchor=(1.07, 0.05, 0.12, 0.9),)
clb26.set_label(r'$\mathrm{[km\,s^{-1}]}$', labelpad=5)

clb36, clb_ax36 = plot_colorbar(im36, ax36, 
                bbox_to_anchor=(1.07, 0.05, 0.12, 0.9),)
clb36.set_ticks([])
# clb36.set_label(r'$\mathrm{[W\,m^{-2}\,sr^{-1}]}$', labelpad=18)

clb46, clb_ax46 = plot_colorbar(im46, ax46,
                bbox_to_anchor=(1.07, 0.05, 0.12, 0.9), )
clb46.set_ticks([])
# clb46.set_label(r'$\mathrm{[W\,m^{-2}\,sr^{-1}]}$', labelpad=11)

clb56, clb_ax56 = plot_colorbar(im56, ax56,
                bbox_to_anchor=(1.07, 0.05, 0.12, 0.9), )
clb56.set_label(r'$\mathrm{[Gauss]}$', labelpad=4)

clb_ax56.yaxis.set_major_formatter(LogFormatterSciNotation())




for ax_ in fig.get_axes():
    ax_.axis('off')
    ax_.coords[0].axislabels.set_visible(False)
    ax_.coords[1].axislabels.set_visible(False)
    ax_.coords[0].set_ticklabel_visible(False)
    ax_.coords[1].set_ticklabel_visible(False)
    ax_.coords[0].set_ticks_visible(False)

for ax_ in (ax51,ax52,ax53,ax54,ax55,ax56):
    wcs_scalebar(ax_, length=20*u.arcsec, color='black', label=r'$20^{\prime\prime}$', corner='bottom right', borderpad=0.02,
                 frame=True,bbox_props=dict(boxstyle='round,pad=-0.1',facecolor='white', edgecolor='#91989F', alpha=0.5))
    
ax11.text(-0.1, 0.5, r'HRI\textsubscript{EUV}', transform=ax11.transAxes, rotation=90, va='center', ha='center')
ax21.text(-0.1, 0.5, r'Ne\,\textsc{viii} $v_{\rm Doppler}$', transform=ax21.transAxes, rotation=90, va='center', ha='center')
ax31.text(-0.1, 0.5, r'Ne\,\textsc{viii} $I_{\rm tot}$', transform=ax31.transAxes, rotation=90, va='center', ha='center')
ax41.text(-0.1, 0.5, r'N\,\textsc{iv} $I_{\rm tot}$', transform=ax41.transAxes, rotation=90, va='center', ha='center')
ax51.text(-0.1, 0.5, r'HRT $B_{\rm LOS}$', transform=ax51.transAxes, rotation=90, va='center', ha='center')

ax46.text(0.05, 0.95, r'\textbf{O\,\textsc{iv}}', transform=ax46.transAxes, va='top', ha='left', color='white',
          path_effects=[path_effects.withStroke(linewidth=2, foreground='black')])

ax11.text(0.5, 1.1, r'2022-10-20', transform=ax11.transAxes, va='center', ha='center')
ax12.text(0.5, 1.1, r'2022-10-22', transform=ax12.transAxes, va='center', ha='center')
ax13.text(0.5, 1.1, r'2022-10-23', transform=ax13.transAxes, va='center', ha='center')
ax14.text(0.5, 1.1, r'2022-10-24', transform=ax14.transAxes, va='center', ha='center')
ax15.text(0.5, 1.1, r'2022-10-25', transform=ax15.transAxes, va='center', ha='center')
ax16.text(0.5, 1.1, r'2022-10-26', transform=ax16.transAxes, va='center', ha='center')

# from matplotlib._layoutgrid import plot_children
# plot_children(fig)

plt.savefig('../../figs/ms_eis_eui_upflow/hri_spice_phi_evolution.pdf', bbox_inches='tight', dpi=300)
No description has been provided for this image
InĀ [14]:
saffron_vel_map_1020.save("../../src/coalign_map/20221020/saffron_vel_map_zoomin_east.fits", overwrite=True)