diff --git a/CITATION.cff b/CITATION.cff index 763e6283..c3c84b02 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -3,7 +3,7 @@ cff-version: 1.0.3 message: If you use this software, please cite it using these metadata. # FIXME title as repository name might not be the best name, please make human readable -title: 'openradar/xradar: xradar v0.7.0' +title: 'openradar/xradar: xradar v0.8.0' doi: 10.5281/zenodo.7091737 # FIXME splitting of full names is error prone, please check if given/family name are correct authors: @@ -36,7 +36,7 @@ authors: affiliation: Federal Office of Meteorology and Climatology MeteoSwiss orcid: https://orcid.org/0009-0006-1419-0556 -version: 0.7.0 -date-released: 2024-10-26 +version: 0.8.0 +date-released: 2024-11-04 repository-code: https://github.com/openradar/xradar license: MIT diff --git a/docs/conf.py b/docs/conf.py index 096a39ef..b9621714 100755 --- a/docs/conf.py +++ b/docs/conf.py @@ -84,7 +84,6 @@ "python": ("https://docs.python.org/3/", None), "numpy": ("https://numpy.org/doc/stable/", None), "xarray": ("https://docs.xarray.dev/en/stable/", None), - "datatree": ("https://xarray-datatree.readthedocs.io/en/latest/", None), "pyproj": ("https://pyproj4.github.io/pyproj/stable/", None), } diff --git a/docs/datamodel.md b/docs/datamodel.md index fdcecdc9..8a76edbf 100644 --- a/docs/datamodel.md +++ b/docs/datamodel.md @@ -3,13 +3,13 @@ With the forthcoming standard [FM301], which is a subset of [CfRadial2.0], as a basis for the xradar data model we can take full advantage of [Xarray] and the whole software stack. -We facilitate {py:class}`datatree:datatree.DataTree` to bundle the different sweeps of a radar volume into one structure. These sweep datasets are essentially {py:class}`xarray:xarray.Dataset` which contain metadata attributes and variables ({py:class}`xarray:xarray.DataArray`). +We facilitate {py:class}`xarray:xarray.DataTree` to bundle the different sweeps of a radar volume into one structure. These sweep datasets are essentially {py:class}`xarray:xarray.Dataset` which contain metadata attributes and variables ({py:class}`xarray:xarray.DataArray`). ## DataTree The DataTree consists of one global root group and several sweep groups. Optionally, groups containing parameter and calibration can be part of the datatree. -Internal representation: {py:class}`datatree:datatree.DataTree` +Internal representation: {py:class}`xarray:xarray.DataTree` ## Global Scope / Root Group diff --git a/docs/exporters.md b/docs/exporters.md index fc7f3d09..e1610f84 100644 --- a/docs/exporters.md +++ b/docs/exporters.md @@ -4,27 +4,23 @@ Exporting is only supported for acknowledged standards. Currently xradar can export: -- [](#odim-h5) -- [](#cfradial2) -- [](#cfradial1) - ## ODIM_H5 ### to_odim -With {class}`~xradar.io.export.to_odim` an xradar {py:class}`datatree:datatree.DataTree` +With {class}`~xradar.io.export.to_odim` an xradar {py:class}`xarray:xarray.DataTree` can be saved to an ODIM_H5 file (v2.2 at the moment). ## CfRadial2 ### to_cfradial2 -With {class}`~xradar.io.export.to_cfradial2` an xradar {py:class}`datatree:datatree.DataTree` +With {class}`~xradar.io.export.to_cfradial2` an xradar {py:class}`xarray:xarray.DataTree` can be saved to a CfRadial2-like file. ## CfRadial1 ### to_cfradial1 -With {class}`~xradar.io.export.to_cfradial1` an xradar {py:class}`datatree:datatree.DataTree` +With {class}`~xradar.io.export.to_cfradial1` an xradar {py:class}`xarray:xarray.DataTree` can be saved to a CfRadial1-like file. diff --git a/docs/history.md b/docs/history.md index de8481ad..f670a742 100644 --- a/docs/history.md +++ b/docs/history.md @@ -1,6 +1,6 @@ # History -## 0.8.0 (2024-10-28) +## 0.8.0 (2024-11-04) This is the first version which uses datatree directly from xarray. Thus, xarray is pinned to version >= 2024.10.0. @@ -13,7 +13,6 @@ This is the first version which uses datatree directly from xarray. Thus, xarray * Use DataTree from xarray and add xarray nightly run ({pull}`213`, {pull}`214`, {pull}`215`, {pull}`218`) by [@kmuehlbauer](https://github.com/kmuehlbauer). * ADD: Added new accessor `map_over_sweeps` for volume operations on DataTrees and a matching decorator ({pull}`203`) by [@syedhamidali](https://github.com/syedhamidali). - ## 0.7.0 (2024-10-26) This is the last version which uses datatree from xarray-contrib/datatree. Thus, xarray is pinned to version 2024.9.0. diff --git a/docs/importers.md b/docs/importers.md index 9ef93fca..dc63c8cf 100644 --- a/docs/importers.md +++ b/docs/importers.md @@ -1,16 +1,6 @@ # Importers -To import different radar data different approaches are used. - -Currently xradar can import: - -- [](#cfradial1) -- [](#odim-h5) -- [](#gamic-hdf5) -- [](#furuno-scn-and-scnx) -- [](#rainbow) -- [](#iris-sigmet) -- [](#nexradlevel2) +The backends use different approaches to ingest the data. ## CfRadial1 @@ -27,7 +17,7 @@ group with all data and metadata can be returned. With {func}`~xradar.io.backends.cfradial1.open_cfradial1_datatree` all groups (eg. ``sweeps_0`` and ``root`` are extracted from the source file and added as ParentNodes -and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +and ChildNodes to a {py:class}`xarray:xarray.DataTree`. ## ODIM_H5 @@ -45,7 +35,7 @@ more functions are applied on that {py:class}`xarray:xarray.Dataset`. With {func}`~xradar.io.backends.odim.open_odim_datatree` all groups (eg. ``datasetN``) are extracted. From that the ``root`` group is processed. Everything is finally added as -ParentNodes and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. ## GAMIC HDF5 @@ -62,7 +52,7 @@ more functions are applied on that {py:class}`xarray:xarray.Dataset`. With {func}`~xradar.io.backends.odim.open_gamic_datatree` all groups (eg. ``scanN``) are extracted. From that the ``root`` group is processed. Everything is finally added as -ParentNodes and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. ## Furuno SCN and SCNX @@ -80,7 +70,7 @@ a {py:class}`xarray:xarray.Dataset` with the sweep group. With {func}`~xradar.io.backends.furuno.open_furuno_datatree` the single group is extracted. From that the ``root`` group is processed. Everything is finally -added as ParentNodes and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +added as ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. ## Rainbow @@ -97,7 +87,7 @@ more functions are applied on that {py:class}`xarray:xarray.Dataset`. With {func}`~xradar.io.backends.rainbow.open_rainbow_datatree` all groups (eg. ``0``) are extracted. From that the ``root`` group is processed. Everything is finally added as -ParentNodes and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. ## Iris/Sigmet @@ -115,7 +105,7 @@ more functions are applied on that {py:class}`xarray:xarray.Dataset`. With {func}`~xradar.io.backends.iris.open_iris_datatree` all groups (eg. ``1``) are extracted. From that the ``root`` group is processed. Everything is finally added as -ParentNodes and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. ## NexradLevel2 @@ -133,4 +123,55 @@ more functions are applied on that {py:class}`xarray:xarray.Dataset`. With {func}`~xradar.io.backends.nexrad_level2.open_nexradlevel2_datatree` all groups (eg. ``1``) are extracted. From that the ``root`` group is processed. -Everything is finally added as ParentNodes and ChildNodes to a {py:class}`datatree:datatree.DataTree`. +Everything is finally added as ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. + +## Datamet + +### DataMetBackendEntrypoint + +The xarray backend {class}`~xradar.io.backends.datamet.DataMetBackendEntrypoint` +opens the file with {class}`~xradar.io.backends.datamet.DataMetStore`. Several +private helper functions are used to conveniently access data and +metadata. Finally, the xarray machinery returns a {py:class}`xarray:xarray.Dataset` +with wanted group (eg. ``0``). Depending on the used backend kwargs several +more functions are applied on that {py:class}`xarray:xarray.Dataset`. + +### open_datamet_datatree + +With {func}`~xradar.io.backends.datamet.open_nexradlevel2_datatree` +all groups (eg. ``1``) are extracted. From that the ``root`` group is processed. +Everything is finally added as ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. + +## Halo Photonics Lidar + +### HPLBackendEntrypoint + +The xarray backend {class}`~xradar.io.backends.hpl.HPLBackendEntrypoint` +opens the file with {class}`~xradar.io.backends.hpl.HplStore`. Several +private helper functions are used to conveniently access data and +metadata. Finally, the xarray machinery returns a {py:class}`xarray:xarray.Dataset` +with wanted group (eg. ``0``). Depending on the used backend kwargs several +more functions are applied on that {py:class}`xarray:xarray.Dataset`. + +### open_hpl_datatree + +With {func}`~xradar.io.backends.hpl.open_hpl_datatree` +all groups (eg. ``1``) are extracted. From that the ``root`` group is processed. +Everything is finally added as ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. + +## Metek MRR2 + +### MRRBackendEntrypoint + +The xarray backend {class}`~xradar.io.backends.metek.MRRBackendEntrypoint` +opens the file with {class}`~xradar.io.backends.metek.MRR2DataStore`. Several +private helper functions are used to conveniently access data and +metadata. Finally, the xarray machinery returns a {py:class}`xarray:xarray.Dataset` +with wanted group (eg. ``0``). Depending on the used backend kwargs several +more functions are applied on that {py:class}`xarray:xarray.Dataset`. + +### open_metek_datatree + +With {func}`~xradar.io.backends.metek.open_metek_datatree` +all groups (eg. ``1``) are extracted. From that the ``root`` group is processed. +Everything is finally added as ParentNodes and ChildNodes to a {py:class}`xarray:xarray.DataTree`. diff --git a/docs/usage.md b/docs/usage.md index 3e7dca7f..f34832cd 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -19,16 +19,14 @@ importers exporters notebooks/Accessors notebooks/Mapping_Sweeps +notebooks/CfRadial1_Model_Transformation ``` ```{toctree} :maxdepth: 2 -:caption: Examples +:caption: Backends -notebooks/CfRadial1_Model_Transformation notebooks/CfRadial1 -notebooks/CfRadial1_Export -notebooks/Transform notebooks/ODIM_H5 notebooks/GAMIC notebooks/Furuno @@ -37,9 +35,17 @@ notebooks/Iris notebooks/HaloPhotonics notebooks/MRR notebooks/NexradLevel2 +``` + +```{toctree} +:maxdepth: 2 +:caption: Examples + +notebooks/CfRadial1_Export notebooks/Read-plot-Sigmet-data-from-AWS notebooks/plot-ppi notebooks/angle_reindexing notebooks/Multi-Volume-Concatenation.ipynb notebooks/multiple-sweeps-into-volume-scan.ipynb +notebooks/Transform ``` diff --git a/examples/notebooks/CfRadial1_Export.ipynb b/examples/notebooks/CfRadial1_Export.ipynb index 1758f8fb..e135ad0a 100644 --- a/examples/notebooks/CfRadial1_Export.ipynb +++ b/examples/notebooks/CfRadial1_Export.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# CfRadial1" + "# CfRadial1 - Export" ] }, { @@ -265,5 +265,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/notebooks/CfRadial1_Model_Transformation.ipynb b/examples/notebooks/CfRadial1_Model_Transformation.ipynb index 80e81dc7..595ae588 100644 --- a/examples/notebooks/CfRadial1_Model_Transformation.ipynb +++ b/examples/notebooks/CfRadial1_Model_Transformation.ipynb @@ -2,10 +2,11 @@ "cells": [ { "cell_type": "markdown", - "id": "59447ad6-ac47-494e-b696-4335b36b205b", + "id": "0", "metadata": {}, "source": [ - "# CfRadial1 to CfRadial2 - A data model transformation\n", + "# CfRadial1 to CfRadial2\n", + "## A data model transformation\n", "\n", "In this notebook we show how to transform the CfRadial1 Data model to a CfRadial2 representation.\n", "\n", @@ -17,7 +18,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6f96b5d8-2b96-4fd7-b8ba-166c34a8dcd2", + "id": "1", "metadata": {}, "outputs": [], "source": [ @@ -31,7 +32,7 @@ }, { "cell_type": "markdown", - "id": "33d50be4-dfe5-4d99-a936-67a9a76bac94", + "id": "2", "metadata": {}, "source": [ "## Download\n", @@ -42,7 +43,7 @@ { "cell_type": "code", "execution_count": null, - "id": "d3c6d408-5ab2-43c3-afd1-b3a703ef3b24", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -51,7 +52,7 @@ }, { "cell_type": "markdown", - "id": "b987dcfd-5105-4483-932e-71b8002e5f09", + "id": "4", "metadata": {}, "source": [ "## Open CfRadial1 file using xr.open_dataset\n", @@ -62,7 +63,7 @@ { "cell_type": "code", "execution_count": null, - "id": "0e0a7a18-3a4c-4940-96e0-6059f0b3da48", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -75,7 +76,7 @@ }, { "cell_type": "markdown", - "id": "b37bc43e", + "id": "6", "metadata": {}, "source": [ "## Extract CfRadial2 Groups and Subgroups\n", @@ -85,7 +86,7 @@ }, { "cell_type": "markdown", - "id": "e1d1b525", + "id": "7", "metadata": {}, "source": [ "### Extract CfRadial2 Root-Group\n", @@ -100,7 +101,7 @@ }, { "cell_type": "markdown", - "id": "f4f3ff2f", + "id": "8", "metadata": {}, "source": [ "#### optional=True" @@ -109,7 +110,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e4b1557d", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -122,7 +123,7 @@ }, { "cell_type": "markdown", - "id": "7459f970", + "id": "10", "metadata": {}, "source": [ "#### optional=False" @@ -131,7 +132,7 @@ { "cell_type": "code", "execution_count": null, - "id": "fff2a34d", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -144,7 +145,7 @@ }, { "cell_type": "markdown", - "id": "65cf9049", + "id": "12", "metadata": {}, "source": [ "### Extract Root-Group metadata groups\n", @@ -159,7 +160,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b992ec33", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -168,7 +169,7 @@ }, { "cell_type": "markdown", - "id": "fd5589ce", + "id": "14", "metadata": {}, "source": [ "Again we use a convenience function to extract the group." @@ -177,7 +178,7 @@ { "cell_type": "code", "execution_count": null, - "id": "04af8243", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -189,7 +190,7 @@ }, { "cell_type": "markdown", - "id": "c926508e", + "id": "16", "metadata": {}, "source": [ "#### The radar_calibration sub-group\n", @@ -201,7 +202,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8cb5f197", + "id": "17", "metadata": {}, "outputs": [], "source": [ @@ -210,7 +211,7 @@ }, { "cell_type": "markdown", - "id": "6bcaa501", + "id": "18", "metadata": {}, "source": [ "Again we use a convenience function to extract the group." @@ -219,7 +220,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9f61ce7f", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -231,7 +232,7 @@ }, { "cell_type": "markdown", - "id": "2ca0320a", + "id": "20", "metadata": {}, "source": [ "#### The georeference_correction sub-group\n", @@ -243,7 +244,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9e76d49e", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -252,7 +253,7 @@ }, { "cell_type": "markdown", - "id": "c7739019", + "id": "22", "metadata": {}, "source": [ "Again we use a convenience function to extract the group." @@ -261,7 +262,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a42c442f", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -274,7 +275,7 @@ }, { "cell_type": "markdown", - "id": "042da0a9", + "id": "24", "metadata": {}, "source": [ "### Sweep groups\n", @@ -285,7 +286,7 @@ { "cell_type": "code", "execution_count": null, - "id": "70224a48", + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -294,7 +295,7 @@ }, { "cell_type": "markdown", - "id": "7f4f2c1c-5961-43f6-8c40-cbe796dd12dd", + "id": "26", "metadata": {}, "source": [ "Again we use a convenience function to extract the different sweep groups. We can call this function with kwargs:\n", @@ -309,7 +310,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cf93cd38-0f00-4dec-b7af-4e0ca6a111d1", + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -320,7 +321,7 @@ }, { "cell_type": "markdown", - "id": "38b326e1", + "id": "28", "metadata": {}, "source": [ "#### Examining first sweep with `optional=False`" @@ -329,7 +330,7 @@ { "cell_type": "code", "execution_count": null, - "id": "729e1ee3", + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -340,7 +341,7 @@ }, { "cell_type": "markdown", - "id": "32652409", + "id": "30", "metadata": {}, "source": [ "#### `optional=False` and `site_coords=False`" @@ -349,7 +350,7 @@ { "cell_type": "code", "execution_count": null, - "id": "deaaa18e", + "id": "31", "metadata": {}, "outputs": [], "source": [ @@ -362,7 +363,7 @@ }, { "cell_type": "markdown", - "id": "65a43c95", + "id": "32", "metadata": {}, "source": [ "#### `optional=False`, `site_coords=True` and `first_dim=\"auto\"`" @@ -371,7 +372,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ef477a6d", + "id": "33", "metadata": {}, "outputs": [], "source": [ @@ -384,7 +385,7 @@ }, { "cell_type": "markdown", - "id": "e320f119", + "id": "34", "metadata": {}, "source": [ "## Read as CfRadial2 data representation\n", @@ -399,7 +400,7 @@ { "cell_type": "code", "execution_count": null, - "id": "efc02939", + "id": "35", "metadata": {}, "outputs": [], "source": [ @@ -410,7 +411,7 @@ }, { "cell_type": "markdown", - "id": "666b41bd", + "id": "36", "metadata": {}, "source": [ "Each DataTree-node itself represents another DataTree." @@ -419,7 +420,7 @@ { "cell_type": "code", "execution_count": null, - "id": "426b4256", + "id": "37", "metadata": {}, "outputs": [], "source": [ @@ -429,7 +430,7 @@ { "cell_type": "code", "execution_count": null, - "id": "04083ab1", + "id": "38", "metadata": {}, "outputs": [], "source": [ @@ -439,7 +440,7 @@ }, { "cell_type": "markdown", - "id": "97ee3558-d138-4669-8bcf-91cb493669af", + "id": "39", "metadata": {}, "source": [ "#### Roundtrip with `to_netcdf`" @@ -447,7 +448,7 @@ }, { "cell_type": "markdown", - "id": "55515cf9", + "id": "40", "metadata": {}, "source": [ "Write DataTree to netCDF4 file, reopen and compare with source. This just tets if roundtripping the DataTree works." @@ -456,7 +457,7 @@ { "cell_type": "code", "execution_count": null, - "id": "65cd9185", + "id": "41", "metadata": {}, "outputs": [], "source": [ @@ -469,7 +470,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5921f261", + "id": "42", "metadata": {}, "outputs": [], "source": [ @@ -481,7 +482,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bf23b4ce", + "id": "43", "metadata": {}, "outputs": [], "source": [ @@ -492,7 +493,7 @@ }, { "cell_type": "markdown", - "id": "54aaa127", + "id": "44", "metadata": {}, "source": [ "#### Roundtrip with `xradar.io.to_cfradial2`" @@ -501,7 +502,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ca7ba21f", + "id": "45", "metadata": {}, "outputs": [], "source": [ @@ -511,7 +512,7 @@ { "cell_type": "code", "execution_count": null, - "id": "003efee0", + "id": "46", "metadata": {}, "outputs": [], "source": [ @@ -521,7 +522,7 @@ { "cell_type": "code", "execution_count": null, - "id": "42b00295-08c6-4b03-b293-69fb141239f7", + "id": "47", "metadata": {}, "outputs": [], "source": [ @@ -534,7 +535,7 @@ { "cell_type": "code", "execution_count": null, - "id": "de63c0fc-7d9f-443d-b802-e1c903930142", + "id": "48", "metadata": {}, "outputs": [], "source": [ @@ -546,7 +547,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8753ef39-f4eb-48c8-b084-e3e50aee337a", + "id": "49", "metadata": {}, "outputs": [], "source": [ @@ -557,7 +558,7 @@ }, { "cell_type": "markdown", - "id": "fa2c9b84-ce4a-46fb-bd2d-54bcc683f4e1", + "id": "50", "metadata": {}, "source": [ "### Datasets\n", @@ -568,7 +569,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e5e50281-6f8b-4400-b4c9-fb17d07eac24", + "id": "51", "metadata": {}, "outputs": [], "source": [ @@ -580,7 +581,7 @@ { "cell_type": "code", "execution_count": null, - "id": "679d0844-6852-43c4-a2ee-78ccd7d8e943", + "id": "52", "metadata": {}, "outputs": [], "source": [ @@ -590,7 +591,7 @@ }, { "cell_type": "markdown", - "id": "84b2975f", + "id": "53", "metadata": {}, "source": [ "## Conclusion\n", diff --git a/examples/notebooks/HaloPhotonics.ipynb b/examples/notebooks/HaloPhotonics.ipynb index d0dd909d..c508f193 100644 --- a/examples/notebooks/HaloPhotonics.ipynb +++ b/examples/notebooks/HaloPhotonics.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Loading A Halo Photonics Doppler lidar .hpl processed file." + "## Halo Photonics Doppler Lidar" ] }, { @@ -101,5 +101,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/notebooks/MRR.ipynb b/examples/notebooks/MRR.ipynb index 8367425a..f3c1ae9e 100644 --- a/examples/notebooks/MRR.ipynb +++ b/examples/notebooks/MRR.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Loading Metek MRR2 data" + "## Metek MRR2" ] }, { diff --git a/examples/notebooks/Mapping_Sweeps.ipynb b/examples/notebooks/Mapping_Sweeps.ipynb index a7cb9154..cfa9079f 100644 --- a/examples/notebooks/Mapping_Sweeps.ipynb +++ b/examples/notebooks/Mapping_Sweeps.ipynb @@ -5,7 +5,9 @@ "id": "0", "metadata": {}, "source": [ - "# map_over_sweeps Accessor and Decorator" + "# Map Over Sweeps\n", + "\n", + "## map_over_sweeps Accessor and Decorator" ] }, { diff --git a/examples/notebooks/Multi-Volume-Concatenation.ipynb b/examples/notebooks/Multi-Volume-Concatenation.ipynb index 7da7b134..255d1099 100644 --- a/examples/notebooks/Multi-Volume-Concatenation.ipynb +++ b/examples/notebooks/Multi-Volume-Concatenation.ipynb @@ -2,15 +2,15 @@ "cells": [ { "cell_type": "markdown", - "id": "21d5c274-9c13-487f-b730-e81b51ba3dc8", + "id": "0", "metadata": {}, "source": [ - "# How to Read in Multiple Volume Scans Into a Single Object and Visualize" + "# Timeseries of Sweeps" ] }, { "cell_type": "markdown", - "id": "be04f4a4-6785-4c14-826c-e5658d7d5a58", + "id": "1", "metadata": {}, "source": [ "## Imports" @@ -19,7 +19,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8836d8f2-73bc-44a6-9497-ef4db1d23deb", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ }, { "cell_type": "markdown", - "id": "53a1ad17-9ba6-4e4a-848f-0a400b1ee33e", + "id": "3", "metadata": {}, "source": [ "## Access Radar Data from the Open Radar Data Package" @@ -48,7 +48,7 @@ { "cell_type": "code", "execution_count": null, - "id": "812e71e6-c342-4a69-afaf-b9b522ec5508", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -62,7 +62,7 @@ }, { "cell_type": "markdown", - "id": "ac4b54b5-7da0-41ac-b3d4-cf38bd359a8f", + "id": "5", "metadata": {}, "source": [ "## Read the Data using Xradar\n", @@ -72,7 +72,7 @@ { "cell_type": "code", "execution_count": null, - "id": "4fb67393-a88b-4881-8db4-37a464967a40", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -111,7 +111,7 @@ { "cell_type": "code", "execution_count": null, - "id": "44092459-1eda-46ea-b8f4-a61d1a825e66", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -129,7 +129,7 @@ }, { "cell_type": "markdown", - "id": "2fb714c1-1e68-43cd-8c30-95fa7722184f", + "id": "8", "metadata": {}, "source": [ "## Visualize the Dataset\n", @@ -140,7 +140,7 @@ }, { "cell_type": "markdown", - "id": "3b9b40b7-aaa3-48ac-9250-873bd89761ba", + "id": "9", "metadata": {}, "source": [ "### Georeference the Dataset" @@ -149,7 +149,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8c7c6077-f5a2-4b97-aa14-f2972f7b0320", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -159,7 +159,7 @@ }, { "cell_type": "markdown", - "id": "3504819e-c213-493e-a618-4ec1697b8352", + "id": "11", "metadata": {}, "source": [ "### Extract the geoaxis information" @@ -168,7 +168,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a52a8afe-a262-47c8-86cd-e47a29ec4b92", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -178,7 +178,7 @@ }, { "cell_type": "markdown", - "id": "01918e00-5208-4f69-ae1a-3779c4c18a56", + "id": "13", "metadata": {}, "source": [ "### Use the FacetGrid to visualize" @@ -187,7 +187,7 @@ { "cell_type": "code", "execution_count": null, - "id": "607da5a6-effc-4cb9-a69a-00967d654cbd", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -232,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31105962-b49b-4464-b372-afecf36c2456", + "id": "15", "metadata": {}, "outputs": [], "source": [] diff --git a/examples/notebooks/NexradLevel2.ipynb b/examples/notebooks/NexradLevel2.ipynb index 2a404609..5c38f251 100644 --- a/examples/notebooks/NexradLevel2.ipynb +++ b/examples/notebooks/NexradLevel2.ipynb @@ -38,23 +38,13 @@ "id": "3", "metadata": {}, "outputs": [], - "source": [ - "filename = \"../../../../Downloads/KDMX20200810_154746_V06\"" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4", - "metadata": {}, - "outputs": [], "source": [ "filename = DATASETS.fetch(\"KATX20130717_195021_V06\")" ] }, { "cell_type": "markdown", - "id": "5", + "id": "4", "metadata": {}, "source": [ "## xr.open_dataset\n", @@ -65,7 +55,7 @@ { "cell_type": "code", "execution_count": null, - "id": "6", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -76,7 +66,7 @@ { "cell_type": "code", "execution_count": null, - "id": "7", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -86,7 +76,7 @@ { "cell_type": "code", "execution_count": null, - "id": "8", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -97,7 +87,7 @@ }, { "cell_type": "markdown", - "id": "9", + "id": "8", "metadata": {}, "source": [ "### Plot Time vs. Azimuth" @@ -106,7 +96,7 @@ { "cell_type": "code", "execution_count": null, - "id": "10", + "id": "9", "metadata": {}, "outputs": [], "source": [ @@ -115,7 +105,7 @@ }, { "cell_type": "markdown", - "id": "11", + "id": "10", "metadata": {}, "source": [ "### Plot Range vs. Time\n", @@ -126,7 +116,7 @@ { "cell_type": "code", "execution_count": null, - "id": "12", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -135,7 +125,7 @@ }, { "cell_type": "markdown", - "id": "13", + "id": "12", "metadata": {}, "source": [ "### Plot Range vs. Azimuth\n" @@ -144,7 +134,7 @@ { "cell_type": "code", "execution_count": null, - "id": "14", + "id": "13", "metadata": {}, "outputs": [], "source": [ @@ -153,7 +143,7 @@ }, { "cell_type": "markdown", - "id": "15", + "id": "14", "metadata": {}, "source": [ "## backend_kwargs\n", @@ -164,7 +154,7 @@ { "cell_type": "code", "execution_count": null, - "id": "16", + "id": "15", "metadata": {}, "outputs": [], "source": [ @@ -174,7 +164,7 @@ { "cell_type": "code", "execution_count": null, - "id": "17", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -184,7 +174,7 @@ }, { "cell_type": "markdown", - "id": "18", + "id": "17", "metadata": {}, "source": [ "## open_nexradlevel2_datatree\n", @@ -195,7 +185,7 @@ { "cell_type": "code", "execution_count": null, - "id": "19", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -205,7 +195,7 @@ { "cell_type": "code", "execution_count": null, - "id": "20", + "id": "19", "metadata": {}, "outputs": [], "source": [ @@ -215,7 +205,7 @@ }, { "cell_type": "markdown", - "id": "21", + "id": "20", "metadata": {}, "source": [ "### Plot Sweep Range vs. Time" @@ -224,7 +214,7 @@ { "cell_type": "code", "execution_count": null, - "id": "22", + "id": "21", "metadata": {}, "outputs": [], "source": [ @@ -233,7 +223,7 @@ }, { "cell_type": "markdown", - "id": "23", + "id": "22", "metadata": {}, "source": [ "### Plot Sweep Range vs. Azimuth" @@ -242,7 +232,7 @@ { "cell_type": "code", "execution_count": null, - "id": "24", + "id": "23", "metadata": {}, "outputs": [], "source": [ @@ -252,7 +242,7 @@ { "cell_type": "code", "execution_count": null, - "id": "25", + "id": "24", "metadata": {}, "outputs": [], "source": [ @@ -263,7 +253,7 @@ { "cell_type": "code", "execution_count": null, - "id": "26", + "id": "25", "metadata": {}, "outputs": [], "source": [ @@ -274,7 +264,7 @@ { "cell_type": "code", "execution_count": null, - "id": "27", + "id": "26", "metadata": {}, "outputs": [], "source": [ @@ -284,7 +274,7 @@ { "cell_type": "code", "execution_count": null, - "id": "28", + "id": "27", "metadata": {}, "outputs": [], "source": [ @@ -294,7 +284,7 @@ { "cell_type": "code", "execution_count": null, - "id": "29", + "id": "28", "metadata": {}, "outputs": [], "source": [ @@ -307,7 +297,7 @@ { "cell_type": "code", "execution_count": null, - "id": "30", + "id": "29", "metadata": {}, "outputs": [], "source": [ @@ -317,7 +307,7 @@ { "cell_type": "code", "execution_count": null, - "id": "31", + "id": "30", "metadata": {}, "outputs": [], "source": [] diff --git a/examples/notebooks/Read-plot-Sigmet-data-from-AWS.ipynb b/examples/notebooks/Read-plot-Sigmet-data-from-AWS.ipynb index 3f083f20..f269fd9b 100644 --- a/examples/notebooks/Read-plot-Sigmet-data-from-AWS.ipynb +++ b/examples/notebooks/Read-plot-Sigmet-data-from-AWS.ipynb @@ -2,16 +2,16 @@ "cells": [ { "cell_type": "markdown", - "id": "fe40a09b", + "id": "0", "metadata": {}, "source": [ - "# Read and plot Sigmet files available on AWS using Xradar \n", + "# Work with AWS\n", "This example shows how to access radar data from the Colombian national radar network public on Amazon Web Services. We will look at the bucket structure and plot a PPI using the Xradar library. Radar reflectivity is filtered using some polarimetric values and xarray functionality." ] }, { "cell_type": "markdown", - "id": "924ac38f", + "id": "1", "metadata": {}, "source": [ "## Imports" @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a9d2cc01", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -40,7 +40,7 @@ }, { "cell_type": "markdown", - "id": "59dbfdb5", + "id": "3", "metadata": {}, "source": [ "## IDEAM AWS Bucket\n", @@ -65,7 +65,7 @@ { "cell_type": "code", "execution_count": null, - "id": "37b38b59", + "id": "4", "metadata": {}, "outputs": [], "source": [ @@ -86,7 +86,7 @@ }, { "cell_type": "markdown", - "id": "d8e1c788", + "id": "5", "metadata": {}, "source": [ "Let's suppose we want to check the radar files on **2022-10-6** from the Guaviare radar" @@ -95,7 +95,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ee045227", + "id": "6", "metadata": {}, "outputs": [], "source": [ @@ -107,7 +107,7 @@ }, { "cell_type": "markdown", - "id": "ecfacdd5", + "id": "7", "metadata": {}, "source": [ "### Connecting to the AWS bucket\n", @@ -117,7 +117,7 @@ { "cell_type": "code", "execution_count": null, - "id": "263d95a3", + "id": "8", "metadata": {}, "outputs": [], "source": [ @@ -135,7 +135,7 @@ }, { "cell_type": "markdown", - "id": "d3993934-42d3-499d-b044-21a8cb8a608f", + "id": "9", "metadata": {}, "source": [ "We can use the Filesystem interfaces for Python [fsspec](https://filesystem-spec.readthedocs.io/en/latest/) to access the data from the s3 bucket" @@ -144,7 +144,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bc357556", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -158,7 +158,7 @@ { "cell_type": "code", "execution_count": null, - "id": "97ed695c", + "id": "11", "metadata": {}, "outputs": [], "source": [ @@ -168,7 +168,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c4ba117d", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -177,7 +177,7 @@ }, { "cell_type": "markdown", - "id": "fe456548", + "id": "13", "metadata": {}, "source": [ "## Reflectivity and Correlation coefficient plot" @@ -186,7 +186,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ed4fba5c", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -198,7 +198,7 @@ }, { "cell_type": "markdown", - "id": "278eecc3", + "id": "15", "metadata": {}, "source": [ "The dataset object has range and azimuth as coordinates. To create a polar plot, we need to add the georeference information using `xd.georeference.get_x_y_z()` module from [xradar](https://docs.openradarscience.org/projects/xradar/en/stable/index.html)" @@ -207,7 +207,7 @@ { "cell_type": "code", "execution_count": null, - "id": "3078aa6e", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -217,7 +217,7 @@ }, { "cell_type": "markdown", - "id": "d779053a", + "id": "17", "metadata": {}, "source": [ "Now x, y, and z have been added to the dataset coordinates. Let's create the new plot using the georeference information. " @@ -226,7 +226,7 @@ { "cell_type": "code", "execution_count": null, - "id": "85bb2051", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -240,7 +240,7 @@ }, { "cell_type": "markdown", - "id": "6fb18393", + "id": "19", "metadata": {}, "source": [ "## Filtering data\n", @@ -251,7 +251,7 @@ { "cell_type": "code", "execution_count": null, - "id": "834b156e", + "id": "20", "metadata": {}, "outputs": [], "source": [ @@ -269,7 +269,7 @@ }, { "cell_type": "markdown", - "id": "7cb866a8", + "id": "21", "metadata": {}, "source": [ "Polarimetric variables can also be used as indicators to remove different noises from different sources. For example, the $\\rho_{HV}$ measures the consistency of the shapes and sizes of targets within the radar beam. Thus, the greater the $\\rho_{HV}$, the more consistent the measurement. For this example we can use $\\rho_{HV} > 0.80$ as an acceptable threshold " @@ -278,7 +278,7 @@ { "cell_type": "code", "execution_count": null, - "id": "80242e59-746d-463f-a667-246e3f37d16f", + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -297,7 +297,7 @@ }, { "cell_type": "markdown", - "id": "ad8060e0", + "id": "23", "metadata": {}, "source": [ "## Axis labels and titles\n", @@ -307,7 +307,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b48519af", + "id": "24", "metadata": {}, "outputs": [], "source": [ diff --git a/examples/notebooks/Transform.ipynb b/examples/notebooks/Transform.ipynb index fba92233..bd96c304 100644 --- a/examples/notebooks/Transform.ipynb +++ b/examples/notebooks/Transform.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Transform" + "# CfRadial1 <-> CfRadial2" ] }, { @@ -160,5 +160,5 @@ } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 } diff --git a/examples/notebooks/multiple-sweeps-into-volume-scan.ipynb b/examples/notebooks/multiple-sweeps-into-volume-scan.ipynb index 17c5b96a..75f5c943 100644 --- a/examples/notebooks/multiple-sweeps-into-volume-scan.ipynb +++ b/examples/notebooks/multiple-sweeps-into-volume-scan.ipynb @@ -5,7 +5,7 @@ "id": "0", "metadata": {}, "source": [ - "# Volume scan from multiple sweeps using xradar\n", + "# AWS Volumes to ARCO\n", "This example shows how to create a volume scan from multiple sweep files stored on AWS. The volume scan structure is based on [tree-like](https://xarray-datatree.readthedocs.io/en/latest/generated/datatree.DataTree.html) hierarchical collection of xarray objects " ] }, diff --git a/examples/notebooks/plot-ppi.ipynb b/examples/notebooks/plot-ppi.ipynb index a1325325..7f7529dd 100644 --- a/examples/notebooks/plot-ppi.ipynb +++ b/examples/notebooks/plot-ppi.ipynb @@ -2,16 +2,16 @@ "cells": [ { "cell_type": "markdown", - "id": "f15f38bb-57f7-4104-8824-9feec9deee47", + "id": "0", "metadata": {}, "source": [ - "# Create a Plan Position Indicator (PPI) Plot\n", + "# Plan Position Indicator\n", "A Plan Position Indicator (PPI) plot is a common plot requested by radar scientists. Let's show how to create this plot using `xradar`" ] }, { "cell_type": "markdown", - "id": "91562ade-05d4-4b1e-ab7b-720b04641c61", + "id": "1", "metadata": {}, "source": [ "## Imports" @@ -20,7 +20,7 @@ { "cell_type": "code", "execution_count": null, - "id": "ce9365db-30f0-4df1-944f-b3c739c0ef99", + "id": "2", "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ { "cell_type": "code", "execution_count": null, - "id": "02f07bb2-d1ad-40c2-9a32-3795de327003", + "id": "3", "metadata": {}, "outputs": [], "source": [ @@ -43,7 +43,7 @@ }, { "cell_type": "markdown", - "id": "100584b5-d600-4f93-980b-6c1dde9335a8", + "id": "4", "metadata": {}, "source": [ "## Read in some data\n", @@ -54,7 +54,7 @@ { "cell_type": "code", "execution_count": null, - "id": "cf955c1f-fa3b-4545-b90a-7afcd9b11b31", + "id": "5", "metadata": {}, "outputs": [], "source": [ @@ -63,7 +63,7 @@ }, { "cell_type": "markdown", - "id": "b88a784c-8a18-4a75-973e-5723acdcb4b0", + "id": "6", "metadata": {}, "source": [ "Read the data using the `cfradial1` engine" @@ -72,7 +72,7 @@ { "cell_type": "code", "execution_count": null, - "id": "e97d5717-e6aa-4155-abe5-0960d846ed1c", + "id": "7", "metadata": {}, "outputs": [], "source": [ @@ -82,7 +82,7 @@ }, { "cell_type": "markdown", - "id": "7eb28292-d412-4b9f-b506-b983f750ae18", + "id": "8", "metadata": {}, "source": [ "## Add georeferencing\n", @@ -91,7 +91,7 @@ }, { "cell_type": "markdown", - "id": "998f378e-7bed-473c-bab9-fa2fffb9513c", + "id": "9", "metadata": {}, "source": [ "### Georeference Accessor\n", @@ -101,7 +101,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eaa2ee4c-98f2-41d2-b16e-9d05ad8608da", + "id": "10", "metadata": {}, "outputs": [], "source": [ @@ -111,7 +111,7 @@ }, { "cell_type": "markdown", - "id": "53683020-5503-4be6-8eb5-2fc40c340ef3", + "id": "11", "metadata": {}, "source": [ "Please observe, that the additional coordinates `x`, `y`, `z` have been added to the dataset. This will also add `spatial_ref` CRS information on the used Azimuthal Equidistant Projection." @@ -120,7 +120,7 @@ { "cell_type": "code", "execution_count": null, - "id": "a2579869-1e4f-48d2-93eb-d57084d78fe6", + "id": "12", "metadata": {}, "outputs": [], "source": [ @@ -129,7 +129,7 @@ }, { "cell_type": "markdown", - "id": "cb6af121-0c94-4508-84bb-7d089e5259af", + "id": "13", "metadata": {}, "source": [ "### Use the Function\n", @@ -139,7 +139,7 @@ { "cell_type": "code", "execution_count": null, - "id": "9c51a29c-77ba-4b0a-a01b-f5ae0fd18681", + "id": "14", "metadata": {}, "outputs": [], "source": [ @@ -149,7 +149,7 @@ }, { "cell_type": "markdown", - "id": "72231f7d-2b93-4f15-a8c7-66e4f64f7f8f", + "id": "15", "metadata": {}, "source": [ "## Plot our Data\n", @@ -162,7 +162,7 @@ { "cell_type": "code", "execution_count": null, - "id": "c2f4cfaa-eba9-4b9d-8d84-7b60027ae0fb", + "id": "16", "metadata": {}, "outputs": [], "source": [ @@ -171,7 +171,7 @@ }, { "cell_type": "markdown", - "id": "505e3ad9-ff77-4d7c-b09e-28b87c3328b5", + "id": "17", "metadata": {}, "source": [ "### Plot PPI on map with cartopy\n", @@ -182,7 +182,7 @@ { "cell_type": "code", "execution_count": null, - "id": "2b67992f-3ba5-4579-a72e-7303623ccad4", + "id": "18", "metadata": {}, "outputs": [], "source": [ @@ -192,7 +192,7 @@ }, { "cell_type": "markdown", - "id": "9a3d9c1e-0eac-4fc2-bf0e-c8feffc520c3", + "id": "19", "metadata": {}, "source": [ "Second, we create a matplotlib GeoAxes and a nice map." @@ -201,7 +201,7 @@ { "cell_type": "code", "execution_count": null, - "id": "b9b7680c-9ca2-4b93-8d19-69b9bdb64ae3", + "id": "20", "metadata": {}, "outputs": [], "source": [ diff --git a/pyproject.toml b/pyproject.toml index 1f79e2f0..d8c0bd9a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ classifiers=[ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Atmospheric Science", ] diff --git a/tests/conftest.py b/tests/conftest.py index dc737b80..012d0433 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. import os.path diff --git a/tests/io/test_cfradial1.py b/tests/io/test_cfradial1.py index e764f29c..be9b0f9a 100644 --- a/tests/io/test_cfradial1.py +++ b/tests/io/test_cfradial1.py @@ -1,3 +1,8 @@ +#!/usr/bin/env python +# Copyright (c) 2023-2024, openradar developers. +# Distributed under the MIT License. See LICENSE for more info. + + import tempfile import xarray as xr diff --git a/tests/io/test_datamet.py b/tests/io/test_datamet.py index 91ab4ec5..4ec9546c 100644 --- a/tests/io/test_datamet.py +++ b/tests/io/test_datamet.py @@ -1,3 +1,8 @@ +#!/usr/bin/env python +# Copyright (c) 2024, openradar developers. +# Distributed under the MIT License. See LICENSE for more info. + + import tarfile import pytest diff --git a/tests/io/test_hpl.py b/tests/io/test_hpl.py index 9576ca3b..60ea8816 100644 --- a/tests/io/test_hpl.py +++ b/tests/io/test_hpl.py @@ -1,3 +1,8 @@ +#!/usr/bin/env python +# Copyright (c) 2024, openradar developers. +# Distributed under the MIT License. See LICENSE for more info. + + import xarray as xr from open_radar_data import DATASETS diff --git a/tests/io/test_io.py b/tests/io/test_io.py index 23977a92..1b7c871c 100644 --- a/tests/io/test_io.py +++ b/tests/io/test_io.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """Tests for `io` module.""" diff --git a/tests/io/test_iris.py b/tests/io/test_iris.py index 6468c260..ff9fcf4c 100644 --- a/tests/io/test_iris.py +++ b/tests/io/test_iris.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2023, openradar developers. +# Copyright (c) 2023-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """Tests for `io.backends.iris` module. diff --git a/tests/io/test_metek.py b/tests/io/test_metek.py index 6ee5371b..cb04056f 100644 --- a/tests/io/test_metek.py +++ b/tests/io/test_metek.py @@ -1,3 +1,7 @@ +#!/usr/bin/env python +# Copyright (c) 2024, openradar developers. +# Distributed under the MIT License. See LICENSE for more info. + """ Tests for the MRR2 backend for xradar """ diff --git a/tests/test_accessors.py b/tests/test_accessors.py index 38260be8..b31fa612 100644 --- a/tests/test_accessors.py +++ b/tests/test_accessors.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. import numpy as np diff --git a/tests/test_model.py b/tests/test_model.py index d0b10a97..7c6bff64 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """Tests for `xradar` model package.""" diff --git a/tests/test_xradar.py b/tests/test_xradar.py index aee6e1b6..a2b3eff0 100644 --- a/tests/test_xradar.py +++ b/tests/test_xradar.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """Tests for `xradar` package.""" diff --git a/xradar/__init__.py b/xradar/__init__.py index 84570189..4a990dca 100644 --- a/xradar/__init__.py +++ b/xradar/__init__.py @@ -1,3 +1,7 @@ +#!/usr/bin/env python +# Copyright (c) 2022-2024, openradar developers. +# Distributed under the MIT License. See LICENSE for more info. + """ xradar ====== diff --git a/xradar/accessors.py b/xradar/accessors.py index b8e59dbd..2e08eee3 100644 --- a/xradar/accessors.py +++ b/xradar/accessors.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/georeference/__init__.py b/xradar/georeference/__init__.py index 9b93f580..309455bb 100644 --- a/xradar/georeference/__init__.py +++ b/xradar/georeference/__init__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2023, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/georeference/projection.py b/xradar/georeference/projection.py index 5e63ca3a..41d0c226 100644 --- a/xradar/georeference/projection.py +++ b/xradar/georeference/projection.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2023, openradar developers. +# Copyright (c) 2023-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/georeference/transforms.py b/xradar/georeference/transforms.py index 031ea7a3..20e3d1e2 100644 --- a/xradar/georeference/transforms.py +++ b/xradar/georeference/transforms.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/backends/__init__.py b/xradar/io/backends/__init__.py index 946d0b54..71770aec 100644 --- a/xradar/io/backends/__init__.py +++ b/xradar/io/backends/__init__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/backends/cfradial1.py b/xradar/io/backends/cfradial1.py index 77478e9c..7a8a7f51 100644 --- a/xradar/io/backends/cfradial1.py +++ b/xradar/io/backends/cfradial1.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/backends/common.py b/xradar/io/backends/common.py index 1ab8c69a..aa91a961 100644 --- a/xradar/io/backends/common.py +++ b/xradar/io/backends/common.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/backends/furuno.py b/xradar/io/backends/furuno.py index ab47687f..8e34aead 100644 --- a/xradar/io/backends/furuno.py +++ b/xradar/io/backends/furuno.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/backends/iris.py b/xradar/io/backends/iris.py index 731f8283..59f0d126 100644 --- a/xradar/io/backends/iris.py +++ b/xradar/io/backends/iris.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. diff --git a/xradar/io/backends/metek.py b/xradar/io/backends/metek.py index 0451c59f..09ade801 100644 --- a/xradar/io/backends/metek.py +++ b/xradar/io/backends/metek.py @@ -1,3 +1,7 @@ +#!/usr/bin/env python +# Copyright (c) 2024, openradar developers. +# Distributed under the MIT License. See LICENSE for more info. + """ Metek MRR2 raw and processed data ================================= diff --git a/xradar/io/backends/rainbow.py b/xradar/io/backends/rainbow.py index 12bd69f0..8067e73f 100644 --- a/xradar/io/backends/rainbow.py +++ b/xradar/io/backends/rainbow.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/export/cfradial1.py b/xradar/io/export/cfradial1.py index 491b652a..8e5cfb65 100644 --- a/xradar/io/export/cfradial1.py +++ b/xradar/io/export/cfradial1.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2023, openradar developers. +# Copyright (c) 2023-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/export/cfradial2.py b/xradar/io/export/cfradial2.py index a94a0a44..5e21be8a 100644 --- a/xradar/io/export/cfradial2.py +++ b/xradar/io/export/cfradial2.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/io/export/odim.py b/xradar/io/export/odim.py index d0084200..549fadff 100644 --- a/xradar/io/export/odim.py +++ b/xradar/io/export/odim.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/transform/__init__.py b/xradar/transform/__init__.py index 11b14d31..5a176ea0 100644 --- a/xradar/transform/__init__.py +++ b/xradar/transform/__init__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022, openradar developers. +# Copyright (c) 2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """ diff --git a/xradar/util.py b/xradar/util.py index edac5b79..f75a24f8 100644 --- a/xradar/util.py +++ b/xradar/util.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# Copyright (c) 2022-2023, openradar developers. +# Copyright (c) 2022-2024, openradar developers. # Distributed under the MIT License. See LICENSE for more info. """