This notebook demonstrates access to the AEBS products data by means of the vires client.
For each VirES data collection the avaiable variables are listed. In addition, mapping the the variables of the source AEBS products is provided [link to spec TBD].
from viresclient import SwarmRequest
server_url = None # default VirES server
Avaiables Variables:
VirES Variable | Source Product Variable | Unit | Dimension | Description | |
---|---|---|---|---|---|
Timestamp |
t |
$-$ | scalar | UTC time of observation | |
Latitude |
Latitude |
Latitude |
$\text{deg}$ | scalar | ITRF geocentric latitude |
Longitude |
Longitude |
$\text{deg}$ | scalar | ITRF geocentric longitude | |
Latitude_QD |
Latitude_QD |
$\text{deg}$ | scalar | Quasi-dipole latitude | |
Longitude_QD |
Longitude_QD |
$\text{deg}$ | scalar | Quasi-dipole longitude | |
MLT_QD |
MLT |
$\text{hour}$ | scalar | Magnetic local time (QD) | |
J_NE |
J |
$\text{A}\ \text{km}^{-1}$ | vector [2] | North and East component of horizontal sheet current density vector in the geocentric frame | |
J_QD |
J_QD |
$\text{A}\ \text{km}^{-1}$ | scalar | East component of horizontal sheet current density in QD frame |
Note: If the standard VirES QDLat
, QDLat
and MLT
auxialiary variables default to the Latitude_QD
, Longitude_QD
, MLT_QD
stored in AEBS products if they cannot be calculated from the times and locations. (Locations in the AEBS products are incomplete due to the missing Radius
and they cannot be used to calucate the magnetic coordinates.)
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJALPL_2F')
request.set_products(
measurements=['Latitude_QD', 'Longitude_QD', 'MLT_QD', 'J_NE', 'J_QD'],
auxiliaries=['QDLat', 'QDLon', 'MLT'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z',
).as_xarray()
print(data)
The AEJxLPL quality information is accessible as a separate dataset.
Avaiables Variables:
VirES Variable | Source Product Variable | Unit | Dimension | Description |
---|---|---|---|---|
Timestamp |
t_qual |
$-$ | scalar | UTC timestamp of the quality record |
RMS_misfit |
RMS_misfit |
$\text{nT}$ | scalar | Root Mean Square error misfit between observations and model values for the oval crossing |
Confidence |
Confidence |
$-$ | scalar | Goodness of fit computed as 1 - (residual RMS / signal RMS) for the oval crossing |
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJALPL_2F:Quality')
request.set_products(
measurements=['RMS_misfit', 'Confidence'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)
Avaiables Variables:
VirES Variable | Source Product Variable | Unit | Dimension | Description | |
---|---|---|---|---|---|
Timestamp |
t |
$-$ | scalar | UTC time of observation | |
Latitude |
Latitude |
Latitude |
$\text{deg}$ | scalar | ITRF geocentric latitude |
Longitude |
Longitude |
$\text{deg}$ | scalar | ITRF geocentric longitude | |
Latitude_QD |
Latitude_QD |
$\text{deg}$ | scalar | Quasi-dipole latitude | |
Longitude_QD |
Longitude_QD |
$\text{deg}$ | scalar | Quasi-dipole longitude | |
MLT_QD |
MLT |
$\text{hour}$ | scalar | Magnetic local time (QD) | |
J_CF_NE |
J_CF |
$\text{A}\ \text{km}^{-1}$ | vector [2] | North and East component of the curl-free horizontal sheet current density vector in geocentric frame | |
J_DF_NE |
J_DF |
$\text{A}\ \text{km}^{-1}$ | vector [2] | North and East component of the divergence-free horizontal sheet current density vector in geocentric frame | |
J_CF_SemiQD |
J_CF_SemiQD |
$\text{A}\ \text{km}^{-1}$ | scalar | North component of the curl-free horizontal sheet current density in semi-QD frame | |
J_DF_SemiQD |
J_DF_SemiQD |
$\text{A}\ \text{km}^{-1}$ | scalar | East component of the divergence-free horizontal sheet current density in semi-QD frame | |
J_R |
J_r |
$\text{A}\ \text{km}^{-2}$ | scalar | Radial ionospheric current density at 110 km altitude in SemiQD frame |
Note: If the standard VirES QDLat
, QDLat
and MLT
auxialiary variables default to the Latitude_QD
, Longitude_QD
, MLT_QD
stored in AEBS products if they cannot be calculated from the times and locations. (Locations in the AEBS products are incomplete due to the missing Radius
and they cannot be used to calucate the magnetic coordinates.)
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJALPS_2F')
request.set_products(
measurements=[
'Latitude_QD', 'Longitude_QD', 'MLT_QD',
'J_CF_NE', 'J_DF_NE', 'J_CF_SemiQD', 'J_DF_SemiQD', 'J_R',
],
auxiliaries=['QDLat', 'QDLon', 'MLT'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)
The AEJxLPS quality information is accessible as a separate dataset.
Avaiables Variables:
VirES Variable | Source Product Variable | Unit | Dimension | Description |
---|---|---|---|---|
Timestamp |
t_qual |
$-$ | scalar | UTC timestamp of the quality record |
RMS_misfit |
RMS_misfit |
$\text{nT}$ | scalar | Root Mean Square error misfit between observations and model values for the oval crossing |
Confidence |
Confidence |
$-$ | scalar | Goodness of fit computed as 1 - (residual RMS / signal RMS) for the oval crossing |
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJALPS_2F:Quality')
request.set_products(
measurements=['RMS_misfit', 'Confidence'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)
VirES Variable | Source Product Variable | Unit | Dimension | Description |
---|---|---|---|---|
Timestamp |
t_Peak , t_EB , t_PB |
$-$ | scalar | UTC time of observation |
Latitude |
Latitude_Peak , Latitude_EB , Latitude_PB |
$\text{deg}$ | scalar | ITRF geocentric latitude |
Longitude |
Longitude_Peak , Longitude_EB , Longitude_PB |
$\text{deg}$ | scalar | ITRF geocentric longitude |
Latitude_QD |
Latitude_Peak_QD , Latitude_EB_QD , Latitude_PB_QD |
$\text{deg}$ | scalar | Quasi-dipole latitude |
Longitude_QD |
Longitude_Peak_QD , Longitude_EB_QD , Longitude_PB_QD |
$\text{deg}$ | scalar | Quasi-dipole longitude |
MLT_QD |
MLT_Peak , MLT_EB , MLT_PB |
$\text{hour}$ | scalar | Magnetic local time (QD) |
J_QD |
J |
$\text{A}\ \text{km}^{-1}$ | scalar | Peak eastward sheet current intensity in QD frame. Set to NaN for equatorial and polar boundaries. |
Flags |
Flags |
$-$ | scalar | Quality indicator (for more details of the binary flags see the product specification) |
PointType |
n/a | $-$ | scalar | Point type (see the details below) |
Latitude
, Longitude
, Latitude_QD
, Longitude_QD
, MLT_QD
, and J_QD
are set to NaN
if the EJ boubdaries have not been detected (also see the Flags
specification).
The multi-timestamp table structure of the source AEJxPBL products is transormed into a simple time-series. The newly introduced PointType
variable determines the type of the samples. The meaning of the bit flags is as follows:
Bit No. | False (0) | True (1) | Note |
---|---|---|---|
bit 0 (1) | WEJ | EEJ | |
bit 1 (2) | Peak | Boundary | |
bit 2 (4) | Equatorial boundary | Polar boundary | only if bit 1 set |
bit 3 (8) | Boundary pair start | Boundary pair end | only if bit 1 set |
These are the possible PointType
values:
Value | Hex. | Bin. | Meaning |
---|---|---|---|
0 | 0x0 | 0b0000 | WEJ peak (minimum) |
1 | 0x1 | 0b0001 | EEJ peak (maximum) |
2 | 0x2 | 0b0010 | WEJ equatorial boundary (pair start) |
3 | 0x3 | 0b0011 | EEJ equatorial boundary (pair start) |
6 | 0x6 | 0b0110 | WEJ polar boundary (pair start) |
7 | 0x7 | 0b0111 | EEJ polar boundary (pair start) |
10 | 0xA | 0b1010 | WEJ equatorial boundary (pair end) |
11 | 0xB | 0b1011 | EEJ equatorial boundary (pair end) |
14 | 0xE | 0b1110 | WEJ polar boundary (pair end) |
15 | 0xF | 0b1111 | EEJ polar boundary (pair end) |
Note: If the standard VirES QDLat
, QDLat
and MLT
auxialiary variables default to the Latitude_QD
, Longitude_QD
, MLT_QD
stored in AEBS products if they cannot be calculated from the times and locations. (Locations in the AEBS products are incomplete due to the missing Radius
and they cannot be used to calucate the magnetic coordinates.)
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJAPBL_2F')
request.set_products(
measurements=[
'Latitude_QD', 'Longitude_QD', 'MLT_QD',
'J_QD', 'Flags', 'PointType',
],
auxiliaries=['QDLat', 'QDLon', 'MLT'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)
Avaiables Variables:
VirES Variable | Source Product Variable | Unit | Dimension | Description |
---|---|---|---|---|
Timestamp |
t_Peak , t_EB , t_PB |
$-$ | scalar | UTC time of observation |
Latitude |
Latitude_Peak , Latitude_EB , Latitude_PB |
$\text{deg}$ | scalar | ITRF geocentric latitude |
Longitude |
Longitude_Peak , Longitude_EB , Longitude_PB |
$\text{deg}$ | scalar | ITRF geocentric longitude |
Latitude_QD |
Latitude_Peak_QD , Latitude_EB_QD , Latitude_PB_QD |
$\text{deg}$ | scalar | Quasi-dipole latitude |
Longitude_QD |
Longitude_Peak_QD , Longitude_EB_QD , Longitude_PB_QD |
$\text{deg}$ | scalar | Quasi-dipole longitude |
MLT_QD |
MLT_Peak , MLT_EB , MLT_PB |
$\text{hour}$ | scalar | Magnetic local time (QD) |
J_DF_SemiQD |
J_DF |
$\text{A}\ \text{km}^{-1}$ | scalar | Peak eastward sheet current intensity in semi-QD frame. Set to NaN for equatorial and polar boundaries. |
Flags |
Flags |
$-$ | scalar | Quality indicator (for more details of the binary flags see the product specification) |
PointType |
n/a | $-$ | scalar | Point type (see the details below) |
Latitude
, Longitude
, Latitude_QD
, Longitude_QD
, MLT_QD
, and J_DF_SemiQD
are set to NaN
if the EJ boubdaries have not been detected (also see the Flags
specification).
The multi-timestamp table structure of the source AEJxPBS products is transormed into a simple time-series. The newly introduced PointType
variable determines the type of the samples. The meaning of the bit flags is as follows:
Bit No. | False (0) | True (1) | Note |
---|---|---|---|
bit 0 (1) | WEJ | EEJ | |
bit 1 (2) | Peak | Boundary | |
bit 2 (4) | Equatorial boundary | Polar boundary | only if bit 1 set |
bit 3 (8) | Boundary pair start | Boundary pair end | only if bit 1 set |
These are the possible PointType
values:
Value | Hex. | Bin. | Meaning |
---|---|---|---|
0 | 0x0 | 0b0000 | WEJ peak (minimum) |
1 | 0x1 | 0b0001 | EEJ peak (maximum) |
2 | 0x2 | 0b0010 | WEJ equatorial boundary (pair start) |
3 | 0x3 | 0b0011 | EEJ equatorial boundary (pair start) |
6 | 0x6 | 0b0110 | WEJ polar boundary (pair start) |
7 | 0x7 | 0b0111 | EEJ polar boundary (pair start) |
10 | 0xA | 0b1010 | WEJ equatorial boundary (pair end) |
11 | 0xB | 0b1011 | EEJ equatorial boundary (pair end) |
14 | 0xE | 0b1110 | WEJ polar boundary (pair end) |
15 | 0xF | 0b1111 | EEJ polar boundary (pair end) |
Note: If the standard VirES QDLat
, QDLat
and MLT
auxialiary variables default to the Latitude_QD
, Longitude_QD
, MLT_QD
stored in AEBS products if they cannot be calculated from the times and locations. (Locations in the AEBS products are incomplete due to the missing Radius
and they cannot be used to calucate the magnetic coordinates.)
equest = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJAPBS_2F')
request.set_products(
measurements=[
'Latitude_QD', 'Longitude_QD', 'MLT_QD',
'J_DF_SemiQD', 'Flags', 'PointType',
],
auxiliaries=['QDLat', 'QDLon', 'MLT'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)
The AEJxPBS ground magnetic disturbance is avaialble as a separate dataset.
Avaiables Variables:
VirES Variable | Source Product Variable | Unit | Dimension | Description |
---|---|---|---|---|
Timestamp |
n/a | $-$ | scalar | UTC timestamp ⃰ |
Latitude |
Latitude_B |
$\text{deg}$ | scalar | Geodetic latitude ⃰ ⃰ |
Longitude |
Longitude_B |
$\text{deg}$ | scalar | Geodetic longitude ⃰ ⃰ |
B_NE |
B |
$\text{nT}$ | vector [2] | Peak value of the horizontal ground magnetic disturbance in the geodetic NE frame ⃰ ⃰ |
⃰ The ground magnetic disturbance timestamp is not present in the original product. It is assigned from the corresponding peak and therefore it may not excatly express the time of the disturbance event.
⃰ ⃰ Due to the missing elevation the geodetic coordinates cannot be reliably converted to ITRF geocentric ones.
SwarmRequest.COLLECTIONS['AEJ_PBS:GroundMagneticDisturbance'] = [
'SW_OPER_AEJ{}PBS_2F:GroundMagneticDisturbance'.format(x) for x in 'ABC'
]
SwarmRequest.PRODUCT_VARIABLES['AEJ_PBS:GroundMagneticDisturbance'] = ['B']
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AEJAPBS_2F:GroundMagneticDisturbance')
request.set_products(
measurements=['B'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)
Avaiables Variables:
Variable | Unit | Dimension | Description |
---|---|---|---|
Timestamp |
$-$ | scalar | UTC time of observation |
Latitude |
$\text{deg}$ | scalar | ITRF geocentric latitude |
Longitude |
$\text{deg}$ | scalar | ITRF geocentric longitude |
Latitude_QD |
$\text{deg}$ | scalar | Quasi-dipole latitude |
Longitude_QD |
$\text{deg}$ | scalar | Quasi-dipole longitude |
MLT_QD |
$\text{hour}$ | scalar | Magnetic local time (QD) |
Boundary_Flag |
$-$ | scalar | Indicator for equatorward (1) or poleward (2) boundary |
Pair_Indicator |
$-$ | scalar | Quality indicator (for more details of the binary flags see the product specification) |
Quality |
$-$ | vector [2] | Quality indicator of equatorward/poleward boundary (Pa, Sigma) |
Note: If the standard VirES QDLat
, QDLat
and MLT
auxialiary variables default to the Latitude_QD
, Longitude_QD
, MLT_QD
stored in AEBS products if they cannot be calculated from the times and locations. (Locations in the AEBS products are incomplete due to the missing Radius
and they cannot be used to calucate the magnetic coordinates.)
request = SwarmRequest(server_url)
request.set_collection('SW_OPER_AOBAFAC_2F')
request.set_products(
measurements=[
'Latitude_QD', 'Longitude_QD', 'MLT_QD',
'Quality', 'Pair_Indicator',
],
auxiliaries=['QDLat', 'QDLon', 'MLT'],
)
data = request.get_between(
start_time='2015-06-01T00:00:00Z',
end_time='2015-06-02T00:00:00Z'
).as_xarray()
print(data)