Running pydropsonde#
To run pydropsonde
on a set of sonde profiles, you first need to create a configuration file (see Config Files).
Further, you can provide the path to the config file through the -c
option.
By default, pydropsonde
would search for dropsonde.cfg in the current directory.
pydropsonde -c <path_to_config_file>
Using pydropsonde as a package#
Sometimes it is not necessary to run the full pydropsonde processing pipeline. In that case, pydropsonde
can be used as a regular Python package.
Here, we give an example of how to use pydropsonde
to process from a Level 3 dataset to Level 4.
import xarray as xr
from pydropsonde.processor import Gridded
from pydropsonde import pipeline
from pydropsonde.circles import Circle
root = "QmTpimQBT8AngwDPRTWYqCXctbhqMiP3NiPeEfXt3JomuU"
l3_ds = xr.open_dataset(
f"ipfs://{root}/products/HALO/dropsondes/Level_3/PERCUSION_Level_3.zarr",
engine="zarr",
)
Then, the Gridded
object used in pydropsonde
has to be created and the circle times have to be added (in this case from the flight flight segmentation file).
gridded = Gridded(sondes={}, global_attrs={})
gridded.set_l3_ds(l3_ds)
gridded.get_circle_times_from_segmentation(
"https://orcestra-campaign.github.io/flight_segmentation/all_flights.yaml"
)
gridded.alt_dim = "altitude"
gridded.sonde_dim = "sonde"
gridded.create_interim_l4()
Using the segment times, a dictionary with the circles can be created.
circles = pipeline.create_and_populate_circle_object(gridded, None).circles
Once this is done, the Level 4 processing can be conducted step by step.
def iterate_function_over_circles(circles, function, **kwargs):
for id, circle in circles.items():
function(circle, **kwargs)
iterate_function_over_circles(circles, Circle.get_xy_coords_for_circles)
iterate_function_over_circles(circles, Circle.drop_vars)
iterate_function_over_circles(circles, Circle.interpolate_na_sondes, method="akima")
iterate_function_over_circles(circles, Circle.extrapolate_na_sondes, max_alt=300)
iterate_function_over_circles(circles, Circle.apply_fit2d)
iterate_function_over_circles(circles, Circle.add_divergence)
iterate_function_over_circles(circles, Circle.add_vorticity)
iterate_function_over_circles(circles, Circle.add_omega)
iterate_function_over_circles(circles, Circle.add_wvel)
iterate_function_over_circles(circles, Circle.add_circle_id_variable)
iterate_function_over_circles(circles, Circle.drop_latlon)
iterate_function_over_circles(circles, Circle.get_circle_flight_id)
iterate_function_over_circles(circles, Circle.add_regression_stderr)
iterate_function_over_circles(circles, Circle.add_circle_variables_to_ds)
Warning
The pydropsonde functions that calculate the circle products modify the Circle
objects in place and some of the above functions delete variables.
Depending on what you are doing, copying before the processing steps might be necessary.
Finally, the circles can be concatenated and saved to a zarr file.
gridded.concat_circles()
gridded.get_l4_dir(".")
gridded.get_l4_filename("test_l4.zarr")
gridded.update_history_l4()
gridded.global_attrs = {
"global": {"author": "it's me"},
"l4": {"title": "this is a test"},
}
gridded.write_l4()