Sidereon.GNSS.Ionosphere.TecGridSamples (Sidereon v3.0.0)

Copy Markdown View Source

Whole-grid IONEX vertical-TEC samples.

This is the intermediate representation an IONEX product is built from and read back as, with no text in the loop: from_samples/1 followed by tec_grid_samples/1 reproduces every stored float and epoch.

map_epochs are Sidereon.GNSS.Ionosphere.Epoch values, strictly increasing. The node axes are degrees and run in the direction their signed step gives. Shell height and base radius are kilometers. TEC and RMS grids are TECU and height grids are kilometers, each indexed [map][latitude][longitude].

Absence

  • A node without a value is nil; a node holding 0.0 has a value of zero.
  • rms_maps or height_maps is nil where the product carries no such maps at all. That is not the same as maps present with every node non-available, which is a list of the same shape as tec_maps filled with nil.

RMS and height maps both hold that distinction, through the handle, the writer and a reparse: a stack present with every node nil is written out with every node at the file's missing value and read back as a stack, where nil writes no such records at all.

This whole-grid form is the only one that can state it. Sidereon.GNSS.Ionosphere.from_node_samples/5 builds from flat node samples, which carry no map-presence field: samples whose rms_tecu is nil at every node give a product with no RMS maps, because nothing in that input says the maps are declared. Build such a product from these samples instead.

What is refused

  • {:invalid_grid_field, field, value} - a field whose value is not of the field's type, with the value that is not.
  • {:value_out_of_range, field, value} - a number past the range the boundary carries that field in, with the value that is past it. An axis entry, a step, a radius and a node value are each past it when they are an integer larger in magnitude than the largest finite double, which has no double to be read onto; EXPONENT is past it outside the signed 32-bit range it crosses in.
  • the epoch refusals of Sidereon.GNSS.Ionosphere.Epoch.

Summary

Types

grid()

@type grid() :: [[[float() | nil]]]

t()

@type t() :: %Sidereon.GNSS.Ionosphere.TecGridSamples{
  base_radius_km: float(),
  dlat_deg: float(),
  dlon_deg: float(),
  exponent: integer(),
  header: Sidereon.GNSS.Ionosphere.Header.t(),
  height_maps: grid() | nil,
  lat_nodes_deg: [float()],
  lon_nodes_deg: [float()],
  map_epochs: [Sidereon.GNSS.Ionosphere.Epoch.t()],
  rms_maps: grid() | nil,
  shell_height_km: float(),
  tec_maps: grid()
}