Tutorial

Find datasets and parameters

Each provider (Speasy.amda, Speasy.cda, Speasy.csa, Speasy.ssc, Speasy.archive) indexes datasets by id; a dataset indexes its parameters.

using Speasy
filter(contains(r"OMNI.*HRO"), keys(Speasy.cda))
4-element Vector{String}:
 "OMNI_HRO_1MIN"
 "OMNI_HRO2_1MIN"
 "OMNI_HRO_5MIN"
 "OMNI_HRO2_5MIN"
ds = Speasy.cda["SOHO_ERNE-HED_L2-1MIN"]
keys(ds)
5-element Vector{String}:
 "est"
 "PH"
 "AH"
 "PHC"
 "AHC"
getmeta(ds)
Dict{String, Any} with 18 entries:
  "description"             => "SOHO ERNE-HED Level2 1 minute data - Rami Vaini…
  "start_date"              => "1996-05-07 17:19:56"
  "subdividedby"            => "%Y"
  "spase_DatasetResourceID" => "spase://ESA/NumericalData/SOHO/ERNE/HED/CDF/PT1…
  "Time_resolution"         => "1 minute"
  "__spz_provider__"        => "cda"
  "__spz_uid__"             => "SOHO_ERNE-HED_L2-1MIN"
  "nssdc_ID"                => "(None) "
  "HTTP_LINK"               => "https://export.srl.utu.fi/"
  "Data_type"               => "L2-1MIN>Level2 1 minute resolution"
  "serviceprovider_ID"      => "SOHO_ERNE-HED_L2-1MIN"
  "stop_date"               => "2026-09-22 23:59:39"
  "filenaming"              => "soho_erne-hed_l2-1min_%Y%m%d_%Q.cdf"
  "url"                     => "https://cdaweb.gsfc.nasa.gov/pub/data/soho/erne…
  "mastercdf"               => "https://cdaweb.gsfc.nasa.gov/pub/software/cdawl…
  "__spz_name__"            => "SOHO_ERNE_HED_L2_1MIN"
  "ID"                      => "soho_erne-hed_l2-1min_cdaweb"
  "__spz_type__"            => "DatasetIndex"

Get data

ds[parameter] and spz"provider/dataset/parameter" both give a SpeasyProduct. getdata(product, t0, t1) fetches it, as does calling the product:

getdata(ds["PH"], "2016-6-2", "2016-6-3")
SpeasyVariable{Float32, 2, PythonCall.PyArray{Float32, 2, true, true, Float32}, Tuple{VariableAxis{Float32, 1, PythonCall.PyArray{Float32, 1, true, true, Float32}}, VariableAxis{Durations.Timestamp{Dates.Nanosecond}, 1, Base.ReinterpretArray{Durations.Timestamp{Dates.Nanosecond}, 1, Int64, PythonCall.PyArray{Int64, 1, true, true, Int64}, false}}}, String, SpaceDataModel.OverlayDict{Union{String, Symbol}, Any, PythonCall.PyDict{String, Any}, Dict{Union{String, Symbol}, Any}}}: PH
  Time Range: 2016-06-02T00:00:34.503 to 2016-06-02T23:32:28.269
  Units: (cm^2 s sr MeV)^-1
  Size: (10, 906)
  Memory Usage: 44.206 KiB
  Metadata:
    CATDESC: Proton intensity in 10 energy ranges (nominal 13-130 MeV)
    FIELDNAM: Proton intensity in 10 energy ranges
    LABLAXIS: Proton intensity
    FILLVAL: Any[-9.999999848243207e30]
    VALIDMIN: Any[0.0]
    VALIDMAX: Any[100000.0]
    UNITS: (cm^2 s sr MeV)^-1
    VAR_TYPE: data
    DEPEND_0: Epoch
    DEPEND_1: P_energy
    FORMAT: E9.2
    DISPLAY_TYPE: stack_plot>NOBAR>y=PH,z=P_energy
    SCALETYP: log
imf = spz"amda/imf"
imf("2016-6-2", "2016-6-3")
SpeasyVariable{Float32, 2, PythonCall.PyArray{Float32, 2, true, true, Float32}, Tuple{UnitRange{Int64}, VariableAxis{Durations.Timestamp{Dates.Nanosecond}, 1, Base.ReinterpretArray{Durations.Timestamp{Dates.Nanosecond}, 1, Int64, PythonCall.PyArray{Int64, 1, true, true, Int64}, false}}}, String, SpaceDataModel.OverlayDict{Union{String, Symbol}, Any, PythonCall.PyDict{String, Any}, Dict{Union{String, Symbol}, Any}}}: imf
  Time Range: 2016-06-02T00:00:15 to 2016-06-02T23:59:59
  Units: nT
  Size: (3, 5400)
  Memory Usage: 106.605 KiB
  Metadata:
    CATDESC: imf
    FIELDNAM: b_gse
    FORMAT: F11.4
    VAR_TYPE: data
    FILLVAL: Any[NaN]
    SI_CONVERSION: 1e-9>T
    VALIDMIN: Any[-3.4028234663852886e38]
    VALIDMAX: Any[3.4028234663852886e38]
    DATA: N/A
    DISPLAY_TYPE: time_series
    TENSOR_FRAME: GSE
    TENSOR_ORDER: 0
    UNITS: nT
    VAR_NOTES: 
    DEPEND_0: AMDA_TIME
    LABL_PTR_1: Any["bx", "by", "bz"]

Several parameters: broadcast, or getdata(ds, t0, t1) for all of a dataset's.

omni = Speasy.cda["OMNI_HRO_1MIN"]
flow_speed, pressure = getdata.((omni["flow_speed"], omni["Pressure"]), "2016-6-2", "2016-6-3")
times(pressure), parent(pressure)
(time [ Units: ns, Size: (1440,)], Float32[1.41 1.46 … NaN NaN])

SSCWeb trajectories take the coordinate system as a last path segment (default gse):

spz"ssc/wind/gsm"("2016-6-2", "2016-6-3")
SpeasyVariable{Float64, 2, PythonCall.PyArray{Float64, 2, true, true, Float64}, Tuple{UnitRange{Int64}, VariableAxis{Durations.Timestamp{Dates.Nanosecond}, 1, Base.ReinterpretArray{Durations.Timestamp{Dates.Nanosecond}, 1, Int64, PythonCall.PyArray{Int64, 1, true, true, Int64}, false}}}, String, SpaceDataModel.OverlayDict{Union{String, Symbol}, Any, PythonCall.PyDict{String, Any}, Dict{Union{String, Symbol}, Any}}}: Position
  Time Range: 2016-06-02T00:00:00 to 2016-06-02T23:48:00
  Units: km
  Size: (3, 120)
  Memory Usage: 4.420 KiB
  Metadata:
    CoordinateSystem: GSM
    UNITS: km

Python-style get_data

get_data takes the same arguments as Python speasy.get_data, including its dynamic inventory:

ace_imf = speasy.inventories.data_tree.amda.Parameters.ACE.MFI.ace_imf_all.imf
get_data(ace_imf, "2016-6-2", "2016-6-3")
SpeasyVariable{Float32, 2, PythonCall.PyArray{Float32, 2, true, true, Float32}, Tuple{UnitRange{Int64}, VariableAxis{Durations.Timestamp{Dates.Nanosecond}, 1, Base.ReinterpretArray{Durations.Timestamp{Dates.Nanosecond}, 1, Int64, PythonCall.PyArray{Int64, 1, true, true, Int64}, false}}}, String, SpaceDataModel.OverlayDict{Union{String, Symbol}, Any, PythonCall.PyDict{String, Any}, Dict{Union{String, Symbol}, Any}}}: imf
  Time Range: 2016-06-02T00:00:15 to 2016-06-02T23:59:59
  Units: nT
  Size: (3, 5400)
  Memory Usage: 106.605 KiB
  Metadata:
    CATDESC: imf
    FIELDNAM: b_gse
    FORMAT: F11.4
    VAR_TYPE: data
    FILLVAL: Any[NaN]
    SI_CONVERSION: 1e-9>T
    VALIDMIN: Any[-3.4028234663852886e38]
    VALIDMAX: Any[3.4028234663852886e38]
    DATA: N/A
    DISPLAY_TYPE: time_series
    TENSOR_FRAME: GSE
    TENSOR_ORDER: 0
    UNITS: nT
    VAR_NOTES: 
    DEPEND_0: AMDA_TIME
    LABL_PTR_1: Any["bx", "by", "bz"]