EEFxTMS_2F (Equatorial electric field)#

Abstract: Access to the equatorial electric field (level 2 product).

%load_ext watermark
%watermark -i -v -p viresclient,pandas,xarray,matplotlib
Python implementation: CPython
Python version       : 3.11.6
IPython version      : 8.18.0

viresclient: 0.14.1
pandas     : 2.1.3
xarray     : 2023.12.0
matplotlib : 3.8.2
from viresclient import SwarmRequest
import datetime as dt
import numpy as np
import matplotlib.pyplot as plt

request = SwarmRequest()

EEFxTMS_2F product information#

Dayside equatorial electric field, sampled at every dayside equator crossing +- 20mins

Documentation:

Check what “EEF” data variables are available#

request.available_collections("EEF", details=False)
{'EEF': ['SW_OPER_EEFATMS_2F', 'SW_OPER_EEFBTMS_2F', 'SW_OPER_EEFCTMS_2F']}
request.available_measurements("EEF")
['EEF', 'EEJ', 'RelErr', 'Flags']

Fetch all the EEF and EEJ values from Bravo during 2016#

request.set_collection("SW_OPER_EEFBTMS_2F")
request.set_products(measurements=["EEF", "EEJ", "Flags"])
data = request.get_between(
    dt.datetime(2016,1,1),
    dt.datetime(2017,1,1)
)
# The first three and last three source (daily) files
data.sources[:3], data.sources[-3:]
(['SW_OPER_EEFBTMS_2F_20160101T000000_20160101T235959_0501',
  'SW_OPER_EEFBTMS_2F_20160102T000000_20160102T235959_0501',
  'SW_OPER_EEFBTMS_2F_20160103T000000_20160103T235959_0501'],
 ['SW_OPER_EEFBTMS_2F_20161229T000000_20161229T235959_0501',
  'SW_OPER_EEFBTMS_2F_20161230T000000_20161230T235959_0501',
  'SW_OPER_EEFBTMS_2F_20161231T000000_20161231T235959_0501'])
df = data.as_dataframe()
df.head()
EEF Latitude EEJ Longitude Spacecraft Flags
Timestamp
2016-01-01 00:05:42.636437504 -0.829534 -4.859140 [24.298409660724694, 25.21776167830186, 20.418... -54.437434 B 0
2016-01-01 00:52:24.213226496 -0.781043 7.236889 [45.424242213581074, 44.42757660120377, 34.358... 113.752507 B 0
2016-01-01 01:38:42.575929600 -2.571197 -11.654174 [17.501920350641985, 15.9999760662759, 9.54703... -78.042841 B 0
2016-01-01 02:27:07.161820416 -0.434457 7.519415 [47.737232450260244, 43.650295454193774, 28.56... 89.978253 B 0
2016-01-01 03:14:22.379351552 -1.864807 -8.346228 [44.44319343970153, 44.357071234833676, 32.170... -101.909106 B 0
ax = df.plot(y="EEF", figsize=(20,10))
ax.set_ylim((-2, 2));
ax.set_ylabel("EEF [mV/m]");
../_images/f69bff1f34cf55186334c4df1a73b2b08b13b1a3080fa35b3ea5c60b3b3af541.png

Take a look at the time jumps between entries… Nominally the product should produce one measurement “every dayside equator crossing ±20 minutes”

times = df.index
delta_t_minutes = [t.seconds/60 for t in np.diff(times.to_pydatetime())]
print("Range of time gaps (in minutes) between successive measurements:")
np.unique(np.sort(delta_t_minutes))
Range of time gaps (in minutes) between successive measurements:
array([  42.63333333,   42.65      ,   42.66666667,   42.68333333,
         42.7       ,   42.71666667,   42.73333333,   42.75      ,
         42.76666667,   42.78333333,   42.8       ,   42.81666667,
         42.83333333,   42.85      ,   42.86666667,   42.88333333,
         42.9       ,   42.91666667,   42.93333333,   42.95      ,
         42.96666667,   42.98333333,   43.        ,   43.01666667,
         43.03333333,   43.05      ,   43.06666667,   43.08333333,
         43.1       ,   43.11666667,   43.13333333,   43.15      ,
         43.16666667,   43.18333333,   43.2       ,   43.21666667,
         43.23333333,   43.25      ,   43.26666667,   43.28333333,
         43.3       ,   43.31666667,   43.33333333,   43.35      ,
         43.36666667,   43.38333333,   43.4       ,   43.41666667,
         43.43333333,   43.45      ,   43.46666667,   43.48333333,
         43.5       ,   43.51666667,   43.53333333,   43.55      ,
         43.56666667,   43.58333333,   43.6       ,   43.61666667,
         43.63333333,   43.65      ,   43.66666667,   43.68333333,
         43.7       ,   43.71666667,   43.73333333,   43.75      ,
         43.76666667,   43.78333333,   43.8       ,   43.81666667,
         43.83333333,   43.85      ,   43.86666667,   43.88333333,
         43.9       ,   43.91666667,   43.93333333,   43.95      ,
         43.96666667,   43.98333333,   44.        ,   44.01666667,
         44.03333333,   44.05      ,   44.06666667,   44.08333333,
         44.1       ,   44.11666667,   44.13333333,   44.15      ,
         44.16666667,   44.18333333,   44.2       ,   44.21666667,
         44.23333333,   44.25      ,   44.26666667,   44.28333333,
         44.3       ,   44.31666667,   44.33333333,   44.35      ,
         44.36666667,   44.38333333,   44.4       ,   44.41666667,
         44.43333333,   44.45      ,   44.46666667,   44.48333333,
         44.5       ,   44.51666667,   44.53333333,   44.55      ,
         44.56666667,   44.58333333,   44.6       ,   44.61666667,
         44.63333333,   44.65      ,   44.66666667,   44.68333333,
         44.7       ,   44.71666667,   44.73333333,   44.75      ,
         44.76666667,   44.78333333,   44.8       ,   44.81666667,
         44.83333333,   44.85      ,   44.86666667,   44.88333333,
         44.9       ,   44.91666667,   44.93333333,   44.95      ,
         44.96666667,   44.98333333,   45.        ,   45.01666667,
         45.03333333,   45.05      ,   45.06666667,   45.08333333,
         45.1       ,   45.11666667,   45.13333333,   45.15      ,
         45.16666667,   45.18333333,   45.2       ,   45.21666667,
         45.23333333,   45.25      ,   45.26666667,   45.28333333,
         45.3       ,   45.31666667,   45.33333333,   45.35      ,
         45.36666667,   45.38333333,   45.4       ,   45.41666667,
         45.43333333,   45.45      ,   45.46666667,   45.48333333,
         45.5       ,   45.51666667,   45.53333333,   45.55      ,
         45.56666667,   45.58333333,   45.6       ,   45.61666667,
         45.63333333,   45.65      ,   45.66666667,   45.68333333,
         45.7       ,   45.71666667,   45.73333333,   45.75      ,
         45.76666667,   45.78333333,   45.8       ,   45.81666667,
         45.83333333,   45.85      ,   45.86666667,   45.88333333,
         45.9       ,   45.91666667,   45.93333333,   45.95      ,
         45.96666667,   45.98333333,   46.        ,   46.01666667,
         46.03333333,   46.05      ,   46.06666667,   46.08333333,
         46.1       ,   46.11666667,   46.13333333,   46.15      ,
         46.16666667,   46.18333333,   46.2       ,   46.21666667,
         46.23333333,   46.25      ,   46.26666667,   46.28333333,
         46.3       ,   46.31666667,   46.33333333,   46.35      ,
         46.36666667,   46.38333333,   46.4       ,   46.41666667,
         46.43333333,   46.45      ,   46.46666667,   46.48333333,
         46.5       ,   46.51666667,   46.53333333,   46.55      ,
         46.56666667,   46.58333333,   46.6       ,   46.61666667,
         46.63333333,   46.65      ,   46.66666667,   46.68333333,
         46.7       ,   46.71666667,   46.73333333,   46.75      ,
         46.76666667,   46.78333333,   46.8       ,   46.81666667,
         46.83333333,   46.85      ,   46.86666667,   46.88333333,
         46.9       ,   46.91666667,   46.93333333,   46.95      ,
         46.96666667,   46.98333333,   47.        ,   47.01666667,
         47.03333333,   47.05      ,   47.06666667,   47.08333333,
         47.1       ,   47.11666667,   47.13333333,   47.15      ,
         47.16666667,   47.18333333,   47.2       ,   47.21666667,
         47.23333333,   47.25      ,   47.26666667,   47.28333333,
         47.3       ,   47.31666667,   47.33333333,   47.35      ,
         47.36666667,   47.38333333,   47.4       ,   47.41666667,
         47.43333333,   47.45      ,   47.46666667,   47.48333333,
         47.5       ,   47.51666667,   47.53333333,   47.55      ,
         47.56666667,   47.58333333,   47.6       ,   47.61666667,
         47.63333333,   47.65      ,   47.66666667,   47.68333333,
         47.7       ,   47.71666667,   47.73333333,   47.75      ,
         47.76666667,   47.78333333,   47.8       ,   47.81666667,
         47.83333333,   47.85      ,   47.86666667,   47.88333333,
         47.9       ,   47.91666667,   47.93333333,   47.95      ,
         47.96666667,   47.98333333,   48.        ,   48.01666667,
         48.03333333,   48.05      ,   48.06666667,   48.08333333,
         48.1       ,   48.11666667,   48.13333333,   48.15      ,
         48.16666667,   48.18333333,   48.2       ,   48.21666667,
         48.23333333,   48.25      ,   48.26666667,   48.28333333,
         48.3       ,   48.31666667,   48.33333333,   48.35      ,
         48.36666667,   48.38333333,   48.4       ,   48.41666667,
         48.43333333,   48.45      ,   48.46666667,   48.48333333,
         48.5       ,   48.51666667,   48.53333333,   48.55      ,
         48.56666667,   48.58333333,   48.6       ,   48.61666667,
         48.63333333,   48.65      ,   48.66666667,   48.68333333,
         48.7       ,   48.71666667,   48.73333333,   48.75      ,
         48.76666667,   48.78333333,   48.8       ,   48.81666667,
         48.83333333,   48.85      ,   48.86666667,   48.88333333,
         48.9       ,   48.91666667,   48.93333333,   48.95      ,
         48.96666667,   48.98333333,   49.        ,   49.01666667,
         49.03333333,   49.05      ,   49.06666667,   49.08333333,
         49.1       ,   49.11666667,   49.13333333,   49.15      ,
         49.16666667,   49.18333333,   49.2       ,   49.21666667,
         49.23333333,   49.25      ,   49.26666667,   49.28333333,
         49.3       ,   49.31666667,   49.33333333,   49.35      ,
         49.36666667,   49.38333333,   49.4       ,   49.41666667,
         49.43333333,   49.45      ,   49.46666667,   49.48333333,
         49.5       ,   49.51666667,   49.53333333,   49.55      ,
         49.56666667,   49.58333333,   49.6       ,   49.61666667,
         49.63333333,   49.65      ,   49.66666667,   49.68333333,
         49.7       ,   49.71666667,   49.73333333,   49.75      ,
         49.76666667,   49.78333333,   49.8       ,   49.81666667,
         49.83333333,   49.85      ,   49.86666667,   49.88333333,
         49.9       ,   49.91666667,   49.93333333,   49.95      ,
         49.96666667,   49.98333333,   50.        ,   50.01666667,
         50.03333333,   50.05      ,   50.06666667,   50.08333333,
         50.1       ,   50.11666667,   50.13333333,   50.15      ,
         50.16666667,   50.18333333,   50.2       ,   50.21666667,
         50.23333333,   50.25      ,   50.26666667,   50.28333333,
         50.3       ,   50.31666667,   50.33333333,   50.35      ,
         50.36666667,   50.38333333,   50.4       ,   50.41666667,
         50.43333333,   50.45      ,   50.46666667,   50.48333333,
         50.5       ,   50.51666667,   50.53333333,   50.55      ,
         50.56666667,   50.58333333,   50.6       ,   50.61666667,
         50.63333333,   50.65      ,   50.66666667,   50.68333333,
         50.7       ,   50.71666667,   50.73333333,   50.75      ,
         50.76666667,   50.78333333,   50.8       ,   50.81666667,
         50.83333333,   50.85      ,   50.86666667,   50.88333333,
         50.9       ,   50.91666667,   50.93333333,   50.95      ,
         50.96666667,   50.98333333,   51.        ,   51.01666667,
         51.03333333,   51.05      ,   51.06666667,   51.08333333,
         51.1       ,   51.11666667,   51.13333333,   51.15      ,
         51.16666667,   51.18333333,   51.2       ,   51.21666667,
         51.23333333,   51.25      ,   51.26666667,   51.28333333,
         51.3       ,   51.31666667,   51.33333333,   51.35      ,
         51.36666667,   51.38333333,   51.4       ,   51.41666667,
         51.43333333,   51.45      ,   51.46666667,   51.48333333,
         51.5       ,   51.51666667,   51.53333333,   51.55      ,
         51.56666667,   51.58333333,   51.6       ,   51.61666667,
         51.63333333,   51.65      ,   51.66666667,   51.68333333,
         51.7       ,   51.71666667,   51.73333333,   51.75      ,
         51.76666667,   51.78333333,   51.8       ,   51.81666667,
         51.83333333,   51.85      ,   51.86666667,   51.88333333,
         51.9       ,   51.91666667,   51.93333333,   51.95      ,
         51.96666667,   51.98333333,   52.        ,   52.01666667,
         52.03333333,   52.05      ,   52.06666667,   52.08333333,
         52.1       ,   52.11666667,   91.51666667,   91.6       ,
         91.65      ,   91.86666667,   92.05      ,   92.26666667,
         92.36666667,   92.6       ,   92.7       ,   93.03333333,
         93.21666667,   93.36666667,   93.53333333,   93.63333333,
         93.65      ,   93.66666667,   93.68333333,   93.7       ,
         93.71666667,   93.76666667,   93.81666667,   93.83333333,
         93.85      ,   93.86666667,   93.88333333,   93.9       ,
         93.91666667,   93.93333333,   94.01666667,   94.03333333,
         94.05      ,   94.06666667,   94.08333333,   94.1       ,
         94.11666667,   94.15      ,   94.18333333,   94.2       ,
         94.23333333,   94.25      ,   94.28333333,   94.3       ,
         94.38333333,   94.43333333,   94.45      ,   94.48333333,
         94.53333333,   94.55      ,   94.58333333,   94.6       ,
         94.63333333,   94.66666667,   94.68333333,   94.7       ,
         94.71666667,   94.73333333,   94.75      ,   94.76666667,
         94.78333333,   94.81666667,   94.83333333,   94.85      ,
         94.86666667,   94.88333333,   94.9       ,   94.91666667,
         94.93333333,   94.95      ,   95.01666667,   95.03333333,
         95.05      ,   95.1       ,   95.15      ,   95.16666667,
         95.18333333,   95.2       ,   95.28333333,   95.3       ,
         95.35      ,   95.43333333,   95.45      ,   95.56666667,
         95.58333333,   95.6       ,   95.61666667,   95.63333333,
         95.65      ,   95.66666667,   95.68333333,   95.7       ,
         95.71666667,   95.75      ,   95.76666667,   95.78333333,
         95.8       ,   95.81666667,   95.83333333,   95.85      ,
         95.86666667,   95.88333333,   95.91666667,   96.01666667,
         96.23333333,   96.96666667,   97.        ,   97.63333333,
         97.76666667,   97.9       ,   98.05      ,   98.08333333,
        854.51666667, 1050.66666667])

Access the EEJ estimate via xarray instead of pandas#

Since the EEJ estimate has both time and latitude dimensions, it is not suited to pandas. Here we load the data as a xarray.Dataset which better handles n-dimensional data.

ds = data.as_xarray()
ds
<xarray.Dataset>
Dimensions:     (Timestamp: 10837, EEJ_QDLat: 81)
Coordinates:
  * Timestamp   (Timestamp) datetime64[ns] 2016-01-01T00:05:42.636437504 ... ...
  * EEJ_QDLat   (EEJ_QDLat) float64 -20.0 -19.5 -19.0 -18.5 ... 19.0 19.5 20.0
Data variables:
    Spacecraft  (Timestamp) object 'B' 'B' 'B' 'B' 'B' ... 'B' 'B' 'B' 'B' 'B'
    EEJ         (Timestamp, EEJ_QDLat) float64 24.3 25.22 20.42 ... -64.46 -65.7
    Flags       (Timestamp) uint16 0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
    EEF         (Timestamp) float64 -0.8295 -0.781 -2.571 ... 0.464 1.55 0.6551
    Latitude    (Timestamp) float64 -4.859 7.237 -11.65 ... -4.03 7.651 -0.77
    Longitude   (Timestamp) float64 -54.44 113.8 -78.04 ... -129.1 39.1 -153.0
Attributes:
    Sources:         ['SW_OPER_EEFBTMS_2F_20160101T000000_20160101T235959_050...
    MagneticModels:  []
    AppliedFilters:  []

Let’s select a subset (one month) and visualise it:

_ds = ds.sel({"Timestamp": "2016-01"})

fig, ax1 = plt.subplots(nrows=1, figsize=(15,3), sharex=True)
_ds.plot.scatter(x="Timestamp", y="EEJ_QDLat", hue="EEJ", vmax=10, s=1, linewidths=0, ax=ax1)
<matplotlib.collections.PathCollection at 0x7f19a4b18850>
../_images/538cacd2dc22c3a0901e3c1e41b3238e4fb9bb2a8f03546153d860030ecfcb63.png