Library of algorithms and metrics used to characterise and/or identify jet-streams, based on xarray.
Project description
jsmetrics: Jet-stream metrics and algorithms
This is jsmetrics, a package containing implementations of various metrics and algorithms for identifying or characterising jet-streams written in Python and built from xarray. WORK IN PROGRESS
The philosophy of this package was to keep the methodology of each metric as close as possible to the given research paper’s description of it (if not exact), but to not limit the method to a given: - time period - time unit (i.e. day, month, DJF) - lat/lon resolution - latitude/longitude region (where possible), - pressure level region All of these can be handled user-side.
Installation
pip install jsmetrics
Documentation
The official documentation is at https://jsmetrics.readthedocs.io/en/latest/
My email is: thomas.keel.18@ucl.ac.uk
Usage
import xarray as xr
import jsmetrics
# load windspeed data with u- and v- component wind.
uv_data = xr.open_dataset(filename)
# run Kuang et al. 2014 metric
k14 = jsmetrics.jetstream_algorithms.kuang_et_al_2014(uv_data)
DISCLAIMER
I have tried to replicate the various metrics based on the equations and details in the methodology as accurately as possible. In some cases I have used a different dataset to the one used in the paper they originate from or with different data resolution. Further, although these metric were found with a literature search, this is not an exaustive list of all methods used to identify or characterise the jet-stream or upper-level wind. This project is very much a work in progress, so contributors are very welcome [TODO]
You can find details of each metric or algorithm here: all metrics.
Where you can find my working-out: - I have included all of my working out in jupyter-notebooks available at: … [TODO] (warning: these notebooks have not been formatted nicely) - I am currently creating a verification notebook available at: … [TODO]
Metrics & Algorithms
See all metrics for specifications of each ‘Complete’ or ‘In progress’ metric and algorithm. For progress on their completion see Status.
Metric/Algorithm |
Metric/Algorithm |
|||
---|---|---|---|---|
To start |
To start |
|||
To verify |
To verify |
|||
To verify |
Complete |
|||
In progess* |
To start |
|||
To verify |
To verify |
|||
In progress* |
To verify |
|||
To verify |
Complete |
|||
To verify |
To verify |
|||
In progress |
Complete |
|||
In progress* |
To start |
|||
Complete |
To verify |
|||
To start* |
In progress |
|||
To start |
To verify |
|||
To start |
To start |
|||
To start* |
To start |
|||
In progress* |
== help needed
Project To-Do’s
WRITE AND CLEAN-UP README
FINISH verification notebook.
WRITE plan to finish metrics.
LOOK INTO timing/benchmarking the metrics (maybe in seperate github repo)
- TO SOLVE: dealing with data from different sources (some sort of data translator module or maybe included in tests)
for example what if ‘v’ or ‘v-wind’ is passed to func instead of ‘va’ (answer: cf-xarray)
for example what if ‘mbar’ or ‘model levels’ instead of ‘plev’ (answer: pint)
TO SOLVE: subsetting longitude if it wraps around 0-360
ADD: cf_xarray (see: https://cf-xarray.readthedocs.io/en/latest/index.html)
ADD: pint (see: https://pint.readthedocs.io/en/stable/)
ADD: var names to details_for_all_metrics
Credits
The layout and content of this project and was inspired by xclim (https://github.com/Ouranosinc/xclim) which contains other climate indices and metrics.
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
History
0.0.19-alpha (2022-24-09)
Update JetStreamOccurenceAndCentreAlgorithm to skip longitude values outside lon range in data
0.0.18 (2022-23-09)
update fitted parabola func for Barnes & Polvani 2015
Add Blackport & Fyfe 2022
update Barnes & Simpson 2017 to drop all NaN slices
update to check for more than one time step for time groupby methods
add test to check all metrics when input is one time step
0.0.17 (2022-13-09)
add try and except for Grise & Polvani 2017 to account for missing vals
0.0.16 (2022-11-09)
skipna=True for calc_latitude_and_speed_where_max_ws
Barnes and Simpson mean over longitude for jet lat
0.0.15 (2022-11-09)
rename max_lat_0.01 to jet_lat for Grise & Polvani 2017
Fix get_3_latitudes_and_speed_around_max_ws to work with isel around lon
Fix barnes polvani parabola to deal with nan values
0.0.14 (2022-11-09)
add plev mean to Bracegirdle
0.0.14-alpha (2022-10-25)
update Pena Ortiz so that it returns monthyear and by day local wind maxima
remove make_empty_local_wind_maxima_data func
Fix CI
Add millibars to get_all_hPa_list
0.0.13 (2022-10-19)
fox workflow for publish to PyPi and TestPyPi
0.0.12 (2022-10-19)
fix kuang to work for southern hemisphere as well
add workflow for publish to PyPi
0.0.12-alpha (2022-10-18)
Update calc_latitude_and_speed_where_max_ws to use numpy methods
Fix Barnes and Simpson 2017 method so it runs on each longitude
0.0.11 (2022-09-15)
Update and fix the JetStreamOccurenceAndCentreAlgorithm method for Kuang
Change LICENSE
Upload to Zenodo
0.0.10 (2022-08-21)
First release to pypi
Clean up rst docs
0.0.9 (2022-08-16)
Finish tests
Remove TODOs
Outline metric_verification notebooks
Improve docs
0.0.8 (2022-07-18)
Format the readme
seperate metrics into metrics and algorithms
Reorder and write better docstrings for the utils files
Update year on LICENSE
0.0.7-beta (2022-06-30)
swap ‘plev’ and ‘lat’ in manney_et_al_2011 method so that it groups cores better
rename ‘sinouisity’ to ‘sinuosity’
0.0.7-alpha (2022-06-10)
update spatial_utils with lazy method for guessing bounds and assuming a regular grid (func is “_standardise_diffs_by_making_all_most_common_diff”)
update Pena-Ortiz method to seperate into subtropical and polar front jet
remove prints from windspeed utils
rename bp13 jet lat
0.0.6 (2022-06-09)
add Barnes & Polvani 2015
add Kerr et al. 2020
add nearest method function to general utils
Speed up Ceppi and fix integration method within (still need to verify)
Add spatial utils for grid cell m2 method
0.0.6-beta (2022-05-31)
Fix ‘get_latitude_and_speed_where_max_ws_at_reduced_resolution’ with check for np.nans
0.0.6-alpha (2022-05-25)
add Barnes & Polvani 2013
Fix ‘get_latitude_and_speed_where_max_ws’ so it can take one value
Fix Barnes & Simpson 2017 and Woollings et al. 2010 and change name of col
Fix Barnes & Polvani neighbouring lats and speed
0.0.5 (2022-05-23)
add Barnes & Simpson 2017
Update ‘get_latitude_and_speed_where_max_ws’ function
Update calc_mass_weighted wind
BIG CHANGES
Change the ‘get_latitude_and_speed_where_max_ws’ function to take abs() max -> will mean that negative u-wind values can be considered the jet lat
0.0.5-beta (2022-05-03)
update Woollings et al. 2010 with seasonal cycle
update metric details dict with ‘plev_units’ argument
fix archer and caldiera call to mass weighted ws (STILL TODO: better plev understanding)
0.0.5-alpha (2022-04-24)
add metric verification notebooks
0.0.4-beta (2022-02-09)
add description, name and DOI to metric details dict
0.0.4-alpha (2022-01-26)
remove Docker
remove get data scripts
0.0.3-gamma (2022-01-14)
remove python 3.6 compatibility
update environment yml (still broken)
0.0.3-beta (2022-01-14)
Use real part from fourier filter to Woollings and its tests
0.0.3-alpha (2022-01-14)
Remove main and experiment related files (moved to another directory so this one is cleaner)
0.0.2 (2022-01-10)
First release on github
0.0.2-beta (2022-01-10)
Add docstrings to all metrics and sub-components
0.0.2-alpha (2022-01-04)
Add docstrings to Archer & Calidera metric
0.0.1 (2022-01-04)
Allow jsmetric to call jetstream_metrics and utils
0.0.1-beta (2021-12-30)
Add currently existing metrics
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for jsmetrics-0.0.18-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 17ebf958d2e66436280c5f15aa8faaa568bedefc957bab4363961cbd7f429b82 |
|
MD5 | 5b32c5aa7bf1fbd59f8e8b9a492910c7 |
|
BLAKE2b-256 | fefe5c8d47d2d5ae1782f22f142202decc91cd0b50f15b4960568800c780ff13 |