Distribution Statement
# # # This source code is subject to the license referenced at

Algorithms in GeoIPS#

An algorithm is a GeoIPS plugin designed to manipulate and convert datasets. Algorithms cannot operate independently; they take raw meteorological data and transform them. These manipulations may include quality control, time and location filtering, and derived variable calculations.

For example, an algorithm could scale data to a specific range useful for plotting.

Algorithms vary in complexity based on requirements.

A simple example is the wind barb algorithm, which primarily converts wind speed units and optionally applies data bounds.

More complex algorithms include the single channel algorithm, which involves masking, solar zenith corrections, scaling, normalization, and unit conversion. The stitched data fusion algorithm is another complex algorithm. It combines overlapping satellite data, adjusting for satellite zenith angle and parallax correction in the overlap zones.

Algorithms can be executed in two ways:

  1. Direct Invocation: Call the algorithm from within a program:

    from geoips.interfaces import algorithms
    algorithm_name = "single_source"
    algorithms.get_plugin(algorithm_name)
    

2. Inclusion in Product Specifications: Include the algorithm in a product or product default specification, which can be executed via the command line or a test script using a GeoIPS procflow.

For examples of including an algorithm in a product implementation, see the product defaults and products tutorials.

Plugin arguments#

The arguments accepted by a algorithm step (validated in Order-Based Processing workflows) are defined by the model below. These fields are generated directly from the code, so they always reflect the current validation rules.

pydantic model geoips.pydantic_models.v1.algorithms.AlgorithmArgumentsModel[source]

Algorithm step argument definition.

Pydantic model defining and validating Algorithm step arguments.

Fields:
Validators:

field gamma_list: List[float] | None = None
field grid_geo: bool | None = None
field input_units: str = None

Units of input data, for applying necessary conversions. Defaults to None, resulting in no unit conversions.

field inverse: bool = None
  • Boolean flag indicating whether to inverse (True) or not (False) * If True, returned data will be inverted * If False, returned data will not be inverted

Constraints:
  • strict = True

field mask_day: bool = None
field mask_night: bool = None
field max_day_zen: float | None = None
field max_night_zen: float | None = None
field max_outbounds: str | None = None

Method to use when applying maximum value of’output_data_range’, if specified. Valid values are: * retain: keep all pixels as is * mask: mask all pixels that are out of range * crop: set out of range values to the nearest bound (min_val or max_val)

field min_night_zen: float | None = None
field min_outbounds: str | None = None

Method to use when applying minimum value of’output_data_range’, if specified. Valid values are: * retain: keep all pixels as is * mask: mask all pixels that are out of range * crop: set out of range values to the nearest bound (min_val or max_val)

field norm: bool = None

Boolean flag indicating whether to normalize (True) or not (False)* * If True, returned data will be in the range from 0 to 1: * If False, returned data will be in the range from min_val to max_val

Constraints:
  • strict = True

field output_data_range: tuple[typing.Annotated[float, Strict(strict=True)], typing.Annotated[float, Strict(strict=True)]] | None = None

list of min and max value for output data product. This is applied LAST after all other corrections/adjustments. If None, use data.min() and data.max()

field output_units: str = None

Units of input data, for applying necessary conversions. Defaults to None, resulting in no unit conversions.

field pressure_key: str | None = None
field pressure_level_range: tuple[float, float] | None = None

list of min and max pressure levels to filter derived motion wind retrievals. Defaults to None, which results in using all wind retrievals.

field satellite_zenith_angle_cutoff: float | None = None

Cutoff for masking data where satellite zenith angle exceedsthreshold. None, no masking

field scale_factor: float | None = None
field sun_zen_correction: bool | None = None

Boolean flag indicating whether to apply solar zenith correction(True) or not (False) * If True, returned data will have solar zenith correction applied (see data_manipulations.corrections.apply_solar_zenith_correction) * If False, returned data will not be modified based on solar zenith angle)

field time_dim: int | None = None (alias 'Time_Dimension')
field time_fcst: int | None = None
field time_key: str = None
field var_map: Dict[str, str] | None = {}

Dictionary that maps input variables to names used in xobj

field variables: List[str] | None = None

List of input variables used in algorithm processing