What a slant-delay value rests on beyond the product's stated grid.
The three fields are independent and can all be set on one value:
held- the coverage miss a:holdcoverage policy held the value through::epoch_before_first_map,:epoch_after_last_map,:latitude_out_of_rangeor:longitude_out_of_range.nilinside coverage.degraded- aSidereon.GNSS.Ionosphere.NodeGapnaming every non-available node a:renormalizemissing-node policy interpolated around.nilwhere every weighted node held a value.assumed_mapping- what the product declares, where the single-layer factor mapped a product declaring anything butCOSZ::no_mapping,:q_factor,:absent, or{:other, code}carrying the declared code's own text.nilwhere the product declaresCOSZ, which is the factor applied.
valid? is true when the value was neither held through a coverage miss nor
degraded by a non-available node. An assumed mapping does not clear it: most
published global products declare something other than COSZ, so a nominal
result from the CODE, ESA, JPL or UPC grids would otherwise read as invalid.
A caller that cares which factor was applied reads assumed_mapping.
Summary
Types
@type assumed_mapping() :: :no_mapping | :q_factor | :absent | {:other, String.t() | nil}
@type coverage_error() ::
:epoch_before_first_map
| :epoch_after_last_map
| :latitude_out_of_range
| :longitude_out_of_range
@type t() :: %Sidereon.GNSS.Ionosphere.SlantStatus{ assumed_mapping: assumed_mapping() | nil, degraded: Sidereon.GNSS.Ionosphere.NodeGap.t() | nil, held: coverage_error() | nil, valid?: boolean() }