Demo TECxTMS_2F (total electron content)

Authors: Ashley Smith

Abstract: Access to the total electric contents (level 2 product).

%load_ext watermark
%watermark -i -v -p viresclient,pandas,xarray,matplotlib
2021-01-24T15:45:59+00:00

CPython 3.7.6
IPython 7.11.1

viresclient 0.7.1
pandas 0.25.3
xarray 0.15.0
matplotlib 3.1.2
from viresclient import SwarmRequest
import datetime as dt
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

request = SwarmRequest()

TECxTMS_2F product information

Derived total electron content (TEC)

Documentation:

  • https://earth.esa.int/web/guest/missions/esa-eo-missions/swarm/data-handbook/level-2-product-definitions#TECxTMS_2F

Check what “TEC” data variables are available

request.available_collections("IPD", details=False)
{'IPD': ['SW_OPER_IPDAIRR_2F', 'SW_OPER_IPDBIRR_2F', 'SW_OPER_IPDCIRR_2F']}
request.available_measurements("TEC")
['GPS_Position',
 'LEO_Position',
 'PRN',
 'L1',
 'L2',
 'P1',
 'P2',
 'S1',
 'S2',
 'Elevation_Angle',
 'Absolute_VTEC',
 'Absolute_STEC',
 'Relative_STEC',
 'Relative_STEC_RMS',
 'DCB',
 'DCB_Error']

Fetch one day of TEC data

request.set_collection("SW_OPER_TECATMS_2F")
request.set_products(measurements=request.available_measurements("TEC"))
data = request.get_between(dt.datetime(2014,1,1),
                           dt.datetime(2014,1,2))
[1/1] Processing:  100%|██████████|  [ Elapsed: 00:01, Remaining: 00:00 ]
      Downloading: 100%|██████████|  [ Elapsed: 00:00, Remaining: 00:00 ] (9.311MB)

Loading as pandas

df = data.as_dataframe()
df.head()
DCB_Error Elevation_Angle S2 DCB Relative_STEC_RMS Spacecraft Latitude L1 PRN Absolute_VTEC P2 Radius LEO_Position Longitude Absolute_STEC L2 P1 GPS_Position S1 Relative_STEC
Timestamp
2014-01-01 00:00:04 0.832346 39.683333 36.83 -11.446853 0.555675 A -1.482419 -6.261986e+06 15 10.894886 2.182914e+07 6.878338e+06 [6668214.544000001, -1677732.674, -177943.9959... -14.122572 16.429938 -6.261989e+06 2.182913e+07 [22448765.690377887, 5421379.431197803, -13409... 36.83 24.041127
2014-01-01 00:00:04 0.832346 37.478137 34.75 -11.446853 0.488000 A -1.482419 -1.466568e+07 18 10.461554 2.135749e+07 6.878338e+06 [6668214.544000001, -1677732.674, -177943.9959... -14.122572 16.456409 -1.466568e+07 2.135749e+07 [16113499.491062254, -16306172.004347403, -126... 34.75 22.754795
2014-01-01 00:00:04 0.832346 24.681787 30.90 -11.446853 1.313984 A -1.482419 -5.455452e+06 22 9.529846 2.277638e+07 6.878338e+06 [6668214.544000001, -1677732.674, -177943.9959... -14.122572 20.434286 -5.455454e+06 2.277638e+07 [10823457.339250825, -24014739.352816023, -248... 30.90 15.585271
2014-01-01 00:00:04 0.832346 24.647445 29.87 -11.446853 0.899036 A -1.482419 -3.402816e+06 24 9.357587 2.298847e+07 6.878338e+06 [6668214.544000001, -1677732.674, -177943.9959... -14.122572 20.085094 -3.402821e+06 2.298846e+07 [20631539.59055339, 13441368.439225309, 100505... 29.87 52.291341
2014-01-01 00:00:04 0.832346 30.753636 30.88 -11.446853 0.546729 A -1.482419 -2.285981e+06 25 8.597559 2.229900e+07 6.878338e+06 [6668214.544000001, -1677732.674, -177943.9959... -14.122572 15.676947 -2.285986e+06 2.229899e+07 [16637723.905075422, -10692759.977004562, 1761... 30.88 52.672067

NB: The time interval is not always the same:

times = df.index
np.unique(np.sort(np.diff(times.to_pydatetime())))
array([datetime.timedelta(0), datetime.timedelta(seconds=10)],
      dtype=object)
len(df), 60*60*24
(49738, 86400)

Loading and plotting as xarray

ds = data.as_xarray()
ds
<xarray.Dataset>
Dimensions:            (Timestamp: 49738, WGS84: 3)
Coordinates:
  * Timestamp          (Timestamp) datetime64[ns] 2014-01-01T00:00:04 ... 2014-01-01T23:59:54
  * WGS84              (WGS84) <U1 'X' 'Y' 'Z'
Data variables:
    Spacecraft         (Timestamp) object 'A' 'A' 'A' 'A' ... 'A' 'A' 'A' 'A'
    Elevation_Angle    (Timestamp) float64 39.68 37.48 24.68 ... 49.64 45.71
    S2                 (Timestamp) float64 36.83 34.75 30.9 ... 23.03 37.73 37.5
    Relative_STEC_RMS  (Timestamp) float64 0.5557 0.488 1.314 ... 0.6458 3.041
    Latitude           (Timestamp) float64 -1.482 -1.482 -1.482 ... -81.7 -81.7
    Absolute_VTEC      (Timestamp) float64 10.89 10.46 9.53 ... 8.365 7.912
    P2                 (Timestamp) float64 2.183e+07 2.136e+07 ... 2.171e+07
    S1                 (Timestamp) float64 36.83 34.75 30.9 ... 23.03 37.73 37.5
    Relative_STEC      (Timestamp) float64 24.04 22.75 15.59 ... 16.92 26.51
    DCB_Error          (Timestamp) float64 0.8323 0.8323 ... 0.8323 0.8323
    DCB                (Timestamp) float64 -11.45 -11.45 ... -11.45 -11.45
    L1                 (Timestamp) float64 -6.262e+06 -1.467e+07 ... -3.41e+06
    PRN                (Timestamp) uint16 15 18 22 24 25 29 ... 7 15 16 18 21 26
    Radius             (Timestamp) float64 6.878e+06 6.878e+06 ... 6.88e+06
    LEO_Position       (Timestamp, WGS84) float64 6.668e+06 ... -6.808e+06
    Longitude          (Timestamp) float64 -14.12 -14.12 -14.12 ... 1.559 1.559
    Absolute_STEC      (Timestamp) float64 16.43 16.46 20.43 ... 10.77 10.78
    L2                 (Timestamp) float64 -6.262e+06 -1.467e+07 ... -3.41e+06
    P1                 (Timestamp) float64 2.183e+07 2.136e+07 ... 2.171e+07
    GPS_Position       (Timestamp, WGS84) float64 2.245e+07 ... -2.111e+07
Attributes:
    Sources:         ['SW_OPER_TECATMS_2F_20140101T000000_20140101T235959_0301']
    MagneticModels:  []
    RangeFilters:    []
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(15,5), sharex=True)
ds["Absolute_VTEC"].plot.line(x="Timestamp", ax=axes[0])
ds["Absolute_STEC"].plot.line(x="Timestamp", ax=axes[1]);
fig.subplots_adjust(hspace=0)
/opt/conda/lib/python3.7/site-packages/pandas/plotting/_matplotlib/converter.py:103: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.

To register the converters:
	>>> from pandas.plotting import register_matplotlib_converters
	>>> register_matplotlib_converters()
  warnings.warn(msg, FutureWarning)
../_images/03d__Demo-TECxTMS_2F_16_1.png