This page was generated by nbsphinx from docs/examples/solo_epd.ipynb.
Interactive online version: Binder badge Google Colab badge

Solar Orbiter HET data

This notebook plots energetic particle fluxes measured by the Energetic Particle Detector (EPD) suite aboard Solar Orbiter — more precisely its High Energy Telescope (HET), which covers the high-energy end of the suite (electrons from ~0.3 MeV, protons from ~10 MeV, and heavy ions). Lower, suprathermal energies are covered by EPD’s other sensors (STEIN, SIS), not by HET itself.

The products are fetched from AMDA using their string identifiers ("amda/solo_het_omni_eflux", …). These IDs come straight from the AMDA inventory: they are the same products you would find by browsing spz.inventories.tree.amda with tab-completion or by searching on the AMDA website.

Only for Google Colab users:

[ ]:
%pip install --upgrade ipympl speasy
[ ]:
try:
    from google.colab import output
    output.enable_custom_widget_manager()
except:
    print("Not running inside Google Collab")

For all users:

[ ]:
import speasy as spz
%matplotlib widget
# Use this instead if you are not using jupyterlab yet
#%matplotlib notebook

import matplotlib
import matplotlib.pyplot as plt

import pandas as pd
import numpy as np

[3]:
start = "2020-11-28T00:00:00"
stop = "2020-12-05T00:00:00"

Solar Orbiter electron flux

amda/solo_het_omni_eflux is the HET omnidirectional electron flux (flux integrated over all viewing directions).

[7]:
solo_eflux:spz.SpeasyVariable = spz.get_data("amda/solo_het_omni_eflux", start, stop)
[8]:
print(np.unique(np.diff(solo_eflux.time), return_counts=True))
(array([1000000000, 1001000000], dtype='timedelta64[ns]'), array([603798,   1000]))
[9]:
eflux_df = solo_eflux.to_dataframe()
# resample to 1s
eflux_df = eflux_df.resample("1s").ffill()
eflux_df.rolling(600).mean().plot()
plt.yscale("log")

Solar Orbiter proton flux

amda/solo_het_omni_hhcflux is the HET omnidirectional proton (hydrogen) flux, given in 4 energy channels.

[14]:
solo_hflux:spz.SpeasyVariable = spz.get_data("amda/solo_het_omni_hhcflux", start, stop)
[ ]:
print(np.unique(np.diff(solo_hflux.time), return_counts=True))
[16]:
hflux_df = solo_hflux.to_dataframe()
# resample to 1s
hflux_df = hflux_df.resample("1s").ffill()
hflux_df.rolling(600).mean().plot()
plt.yscale("log")

Another view of the proton flux

amda/solo_het_omni_hflux is a closely related HET proton product; here we plot it directly as a spectrogram with SpeasyVariable.plot().

[17]:
plt.figure()
pas_omni:spz.SpeasyVariable = spz.get_data("amda/solo_het_omni_hflux", start, stop)
pas_omni.plot(cmap='rainbow', vmin=1e-3, vmax=1e2, edgecolors="face")
plt.tight_layout()