Source code for improver.cli.extract
#!/usr/bin/env python
# (C) Crown Copyright, Met Office. All rights reserved.
#
# This file is part of 'IMPROVER' and is released under the BSD 3-Clause license.
# See LICENSE in the root of the repository for full licensing details.
"""Script to extract a subset of input file data, given constraints."""
from improver import cli
from improver.cli import parameters
[docs]
@cli.clizefy
@cli.with_output
def process(
cube: cli.inputcube,
*,
constraints: parameters.multi(min=1),
units: cli.comma_separated_list = None,
ignore_failure=False,
):
"""Extract a subset of a single cube.
Extracts subset of data from a single cube, subject to equality-based
constraints.
Using a set of constraints, extract a sub-cube from the provided cube if it
is available.
Args:
cube (iris.cube.Cube):
The Cube from which a sub-cube is extracted
constraints (list):
The constraint(s) to be applied. These must be of the form
"key=value", eg "threshold=1". Multiple constraints can be provided
by repeating this keyword before each. Scalars, boolean and string
values are supported. Lists of values can be provided
e.g. key=[value1, value2, value3]. Alternatively, ranges can also
be specified e.g. key=[value1:value3].
When a range is specified, this is inclusive of the endpoints of
the range. A range can also be specified with a step value,
e.g. [value1:value2:step].
units (list):
List of units as strings corresponding to each coordinate in the
list of constraints. One or more "units" may be None and units may
only be associated with coordinate constraints. The list should be
entered as a comma separated list without spaces, e.g. mm/hr,K.
ignore_failure (bool):
Option to ignore constraint match failure and return the input
cube.
Returns:
iris.cube.Cube:
A single cube matching the input constraints or None. If no
sub-cube is found within the cube that matches the constraints.
"""
from improver.utilities.cube_extraction import ExtractSubCube
plugin = ExtractSubCube(constraints, units=units, ignore_failure=ignore_failure)
result = plugin.process(cube)
return result