StormScopeMRMS#
- class earth2studio.models.px.StormScopeMRMS(
- model_spec,
- means,
- stds,
- latitudes,
- longitudes,
- variables=array(['refc'], dtype='<U4'),
- conditioning_variables=array(['abi01c', 'abi02c', 'abi03c', 'abi07c', 'abi08c', 'abi09c', 'abi10c', 'abi13c'], dtype='<U6'),
- conditioning_means=None,
- conditioning_stds=None,
- conditioning_data_source=None,
- glm_mask=None,
- conditioning_glm_mask=None,
- topo=None,
- nexrad_proximity=None,
- mrms_coverage_mask=None,
- glm_data_source=None,
- sampler_args={'S_churn': 10, 'num_steps': 100},
- y_coords=None,
- x_coords=None,
- input_times=array([0], dtype='timedelta64[h]'),
- output_times=array([1], dtype='timedelta64[h]'),
- input_interp_max_dist_km=12.0,
- conditioning_interp_max_dist_km=12.0,
- glm_interp_max_dist_km=14.0,
- amp=True,
- compile=False,
- NANWC202680 GB
StormScope model forecasting MRMS data on the HRRR grid.
This model supports multiple variants at different temporal resolutions, selected by passing
model_nametoload_model(default:"3km_10min"). Variant names are semantic (<resolution>_<cadence>):3km_10min: 3km resolution, 10 minute timestep, MRMS+GLM nowcasting (default)6km_1hr: 6km resolution, 60 minute timestep (legacy nearcasting)
Use
list_available_models()to inspect the variants in a given package. Legacy training-style names are still accepted as aliases.Variants whose input cadence is finer than their output cadence use a sliding window of input timesteps and predict one output timestep; others use a single input timestep and predict one output timestep. All StormScopeMRMS models by default expect GOES-East data as conditioning; typically in a forecasting run this can be provided by passing the predictions from a StormScopeGOES model to this model’s
call_with_conditioningmethod. Otherwise, the user must provide a conditioning data source for the model to use during inference.- Parameters:
model_spec (list[dict[str, Any]]) – Sequence of stage specifications; see StormScopeBase.
means (torch.Tensor) – Per-variable mean for normalization, shape [1, C, 1, 1].
stds (torch.Tensor) – Per-variable std for normalization, shape [1, C, 1, 1].
latitudes (torch.Tensor) – Latitudes of the grid, expected shape [H, W].
longitudes (torch.Tensor) – Longitudes of the grid, expected shape [H, W].
variables (np.ndarray, optional) – MRMS input variables. Default is [“refc”].
conditioning_variables (np.ndarray, optional) – Auxiliary conditioning variables (typically GOES channels). Default is [“abi01c”, “abi02c”, “abi03c”, “abi07c”, “abi08c”, “abi09c”, “abi10c”, “abi13c”].
conditioning_means (torch.Tensor | None, optional) – Means to normalize any external conditioning data. Default is None.
conditioning_stds (torch.Tensor | None, optional) – Stds to normalize any external conditioning data. Default is None.
conditioning_data_source (Any | None, optional) – Data source for external conditioning. Default is None.
sampler_args (dict[str, float | int] | None, optional) – Default sampler arguments passed to the diffusion sampler. Default is {“num_steps”: 100, “S_churn”: 10}.
y_coords (np.ndarray | None, optional) – Y coordinates of the grid, expected shape [H, W]. Default is None, in which case the model uses the enumerated indices inferred from the latitude and longitude grid shapes.
x_coords (np.ndarray | None, optional) – X coordinates of the grid, expected shape [H, W]. Default is None, in which case the model uses the enumerated indices inferred from the latitude and longitude grid shapes.
input_times (np.ndarray, optional) – Input timesteps, of type timedelta64. Default is [0 h] (i.e., the current time).
output_times (np.ndarray, optional) – Output timesteps, of type timedelta64. Default is [1 h] (i.e., 1 hour from the current time).
input_interp_max_dist_km (float, optional) – Maximum distance in kilometers for nearest neighbor interpolation of input data. Points beyond this distance are masked as invalid. Default is 12.0.
conditioning_interp_max_dist_km (float, optional) – Maximum distance in kilometers for nearest neighbor interpolation of conditioning data. Points beyond this distance are masked as invalid. Default is 26.0.
mrms_coverage_mask (torch.Tensor | None, optional) – Boolean NEXRAD-coverage mask of shape
[H, W]on the model grid, True where MRMS data is considered valid (inside NEXRAD circular coverage). When provided, it is used as the initialvalid_maskand is ANDed with any interpolator-derived mask built bybuild_input_interpolator(). Loaded automatically from the package for non-deprecated variants. Default is None.glm_data_source (DataSource | None, optional) – Gridded GLM source (e.g.
earth2studio.data.GOESGLMGrid) for variants with aglm_densitystate channel (3km_10minonly). When set,__call__()(andcreate_iterator()) fetch, regrid, and inject GLM into the state automatically on every step. Not used by the coupled path (call_with_conditioning()), where the caller is responsible for populating GLM channels. Default is None.glm_mask (Tensor | None)
conditioning_glm_mask (Tensor | None)
topo (Tensor | None)
nexrad_proximity (Tensor | None)
glm_interp_max_dist_km (float)
amp (bool)
compile (bool)
Note
To have a unified coordinate system over CONUS for convenience, the model uses the HRRR grid. As a result, there are portions of the domain which go beyond the extent of the MRMS data, so these portions are masked as invalid (set to NaN).
Note
GLM state channel. The
3km_10minvariant includes aglm_densitychannel (gridded GLM lightning counts, normalized withlog1p) as part of its state — both an input observation and a predicted output (the6km_1hrvariant has no GLM channel). Because the GLM source lives on a different native grid from MRMS,glm_densityis handled separately from the radar channels and is the GLM analogue of the GOESconditioning:Auto path (
__call__()/create_iterator()): passglm_data_source(e.g.earth2studio.data.GOESGLMGrid) toload_modeland GLM is fetched, bilinearly regridded, and injected into the state automatically on every step — exactly asconditioning_data_sourceis fetched viafetch_conditioning(). The GLM bilinear interpolator is built lazily on the first call. The input statexonly needs its radar channels populated (the GLM channels are overwritten); a zero placeholder is fine. In this case, the model will be using ground-truth GLM observations during the rollout, so is not doing pure forecasting (and can only be run for dates in the past where the full timeseries of GLM observations is available).Coupled path (
call_with_conditioning()): just as this method takesconditioningfrom the caller rather than the data source, it leaves the entire state — GLM included — to the caller and never touchesglm_data_source. Populate the GLM channels ofxyourself (e.g. viafetch_glm()for the initial state); during the rollout GLM then flows autoregressively from the model’s own predictions, like the radar channels. This is the more typical pure-forecast use case.
- __call__(x, coords)[source]#
Runs the prognostic model one step. Assumes the last two dimensions of the input tensor are the spatial dimensions.
- Parameters:
x (torch.Tensor) – Input tensor.
coords (CoordSystem) – Input coordinate system.
- Returns:
Output tensor and coordinate system.
- Return type:
tuple[torch.Tensor, CoordSystem]
- create_iterator(x, coords)[source]#
Creates an iterator to perform time-integration of the prognostic model.
- Parameters:
x (torch.Tensor) – Input tensor.
coords (CoordSystem) – Input coordinate system.
- Yields:
Iterator[tuple[torch.Tensor, CoordSystem]] – Iterator that generates time-steps of the prognostic model containing the output data tensor and coordinate system dictionary.
- Return type:
Iterator[tuple[Tensor, OrderedDict[str, ndarray]]]
- classmethod load_default_package()[source]#
Load the default StormScope package from Hugging Face.
- Return type:
- classmethod load_model(
- package,
- model_name='3km_10min',
- conditioning_data_source=None,
- glm_data_source=None,
- amp=True,
- compile=False,
Load model from package.
- Parameters:
package (Package) – Package to load model from
model_name (Literal["3km_10min", "6km_1hr"], optional) –
Variant to load. Available variants (see
list_available_models()):"3km_10min": 3km resolution, 10 minute timestep, MRMS+GLM nowcasting"6km_1hr": 6km resolution, 60 minute timestep, MRMS+GLM nearcasting
Legacy training-style names are accepted as aliases. Default is
"3km_10min".conditioning_data_source (DataSource | ForecastSource | None, optional) – Data source to use for conditioning (GOES), by default None.
glm_data_source (DataSource | None, optional) – Gridded GLM source (e.g.
earth2studio.data.GOESGLMGrid) used for variants with aglm_densitystate channel (3km_10minonly — the6km_1hrvariant has no GLM channel). The GLM analogue ofconditioning_data_source: when set,__call__()(andcreate_iterator()) fetch, regrid, and inject GLM into the state automatically. The coupled path (call_with_conditioning()) does not use it — there the caller populates the GLM channels ofx(e.g. viafetch_glm()). By default None.amp (bool, optional) – Enable automatic mixed precision (autocast) for the sampler’s network forward passes. Default is True.
compile (bool, optional) – Compile each staged expert with
torch.compile(“reduce-overhead”). Default is False.
- Returns:
Instantiated StormScopeMRMS model
- Return type:
PrognosticModel