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]");
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>