disdrodb 0.1.5__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {disdrodb-0.1.5 → disdrodb-0.2.0}/CONTRIBUTING.rst +1 -1
- {disdrodb-0.1.5/disdrodb.egg-info → disdrodb-0.2.0}/PKG-INFO +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/__init__.py +1 -5
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/_version.py +3 -3
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/accessor/methods.py +14 -3
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/checks.py +10 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/io.py +14 -17
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/path.py +42 -77
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/search.py +89 -23
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_create_summary.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0a.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0b.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0c.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l1.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l2e.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l2m.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/configs.py +30 -83
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/constants.py +3 -2
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/data_transfer/download_data.py +4 -2
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/docs.py +2 -2
- disdrodb-0.2.0/disdrodb/etc/products/L1/LPM/1MIN.yaml +13 -0
- disdrodb-0.2.0/disdrodb/etc/products/L1/PARSIVEL/1MIN.yaml +13 -0
- disdrodb-0.2.0/disdrodb/etc/products/L1/PARSIVEL2/1MIN.yaml +13 -0
- disdrodb-0.2.0/disdrodb/etc/products/L1/PWS100/1MIN.yaml +13 -0
- disdrodb-0.2.0/disdrodb/etc/products/L1/RD80/1MIN.yaml +13 -0
- disdrodb-0.2.0/disdrodb/etc/products/L1/SWS250/1MIN.yaml +13 -0
- disdrodb-0.2.0/disdrodb/etc/products/L1/global.yaml +19 -0
- disdrodb-0.2.0/disdrodb/etc/products/L2E/5MIN.yaml +1 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/etc/products/L2E/global.yaml +1 -1
- disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_R_MAE.yaml +6 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL/l0b_encodings.yml +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/l0_reader.py +2 -2
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/l0c_processing.py +7 -3
- disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL/BASQUECOUNTRY/EUSKALMET_OTT.py +227 -0
- {disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL/GPM → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL/NASA}/LPVEX.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +3 -3
- disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL2/BASQUECOUNTRY/EUSKALMET_OTT2.py +232 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/SPAIN/GRANADA.py +1 -1
- disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL2/SWEDEN/SMHI.py +189 -0
- disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL2/USA/C3WE.py → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL2/USA/CW3E.py +4 -4
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1/processing.py +6 -5
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1/resampling.py +101 -38
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l2/processing.py +4 -3
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/search.py +3 -4
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/routines/l0.py +2 -2
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/routines/l1.py +173 -60
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/routines/l2.py +121 -269
- disdrodb-0.2.0/disdrodb/routines/options.py +345 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/routines/wrappers.py +9 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/summary/routines.py +709 -670
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/archiving.py +51 -44
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/attrs.py +1 -1
- disdrodb-0.2.0/disdrodb/utils/dict.py +33 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/encoding.py +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/routines.py +9 -8
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/time.py +9 -1
- disdrodb-0.2.0/disdrodb/viz/__init__.py +17 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/viz/plots.py +207 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0/disdrodb.egg-info}/PKG-INFO +1 -1
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb.egg-info/SOURCES.txt +29 -17
- disdrodb-0.1.5/disdrodb/etc/products/L2M/10MIN.yaml +0 -12
- disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL2/NASA/LPVEX.py +0 -109
- disdrodb-0.1.5/disdrodb/viz/__init__.py +0 -30
- {disdrodb-0.1.5 → disdrodb-0.2.0}/.codebeatignore +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/.coveragerc +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/.gitignore +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/.pre-commit-config.yaml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/.readthedocs.yaml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/AUTHORS.md +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/CHANGELOG.md +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/CODE_OF_CONDUCT.md +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/LICENSE +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/MANIFEST.in +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/Makefile +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/README.md +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/SECURITY.md +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/_config.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/accessor/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/configs.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/create_directories.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/api/info.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_check_metadata_archive.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_create_summary_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_data_archive_directory.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_download_archive.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_download_metadata_archive.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_download_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_initialize_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_metadata_archive_directory.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_open_data_archive.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_open_logs_directory.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_open_metadata_archive.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_open_metadata_directory.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_open_product_directory.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_open_readers_directory.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0a_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0b_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l0c_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l1_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l2e_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_run_l2m_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_upload_archive.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/cli/disdrodb_upload_station.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/data_transfer/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/data_transfer/upload_data.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/data_transfer/zenodo.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/etc/configs/attributes.yaml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/etc/configs/encodings.yaml +0 -0
- disdrodb-0.1.5/disdrodb/etc/products/L1/global.yaml → disdrodb-0.2.0/disdrodb/etc/products/L1/1MIN.yaml +0 -0
- disdrodb-0.1.5/disdrodb/etc/products/L2E/1MIN.yaml → disdrodb-0.2.0/disdrodb/etc/products/L2E/10MIN.yaml +0 -0
- disdrodb-0.1.5/disdrodb/etc/products/L2E/5MIN.yaml → disdrodb-0.2.0/disdrodb/etc/products/L2E/1MIN.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2E → disdrodb-0.2.0/disdrodb/etc/products/L2M}/10MIN.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/GAMMA_GS_ND_MAE.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/GAMMA_ML.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/LOGNORMAL_GS_LOG_ND_MAE.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/LOGNORMAL_GS_ND_MAE.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/LOGNORMAL_ML.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/NGAMMA_GS_LOG_ND_MAE.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/NGAMMA_GS_ND_MAE.yaml +0 -0
- {disdrodb-0.1.5/disdrodb/etc/products/L2M → disdrodb-0.2.0/disdrodb/etc/products/L2M/MODELS}/NGAMMA_GS_Z_MAE.yaml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/etc/products/L2M/global.yaml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/issue/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/issue/checks.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/issue/reader.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/issue/writer.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/check_configs.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/check_standards.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/LPM/bins_diameter.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/LPM/bins_velocity.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/LPM/l0a_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/LPM/l0b_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/LPM/raw_data_format.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL/bins_diameter.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL/bins_velocity.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL/l0a_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL/raw_data_format.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL2/bins_diameter.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL2/bins_velocity.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL2/l0a_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL2/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL2/l0b_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PARSIVEL2/raw_data_format.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PWS100/bins_diameter.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PWS100/bins_velocity.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PWS100/l0a_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PWS100/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PWS100/l0b_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/PWS100/raw_data_format.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/RD80/bins_diameter.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/RD80/bins_velocity.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/RD80/l0a_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/RD80/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/RD80/l0b_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/RD80/raw_data_format.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/SWS250/bins_diameter.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/SWS250/bins_velocity.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/SWS250/l0a_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/SWS250/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/SWS250/l0b_encodings.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/configs/SWS250/raw_data_format.yml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/l0a_processing.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/l0b_nc_processing.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/l0b_processing.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/LPM.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/ODM470.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/PARSIVEL.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/PARSIVEL2.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/PWS100.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/RD80.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/SWS250.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/VPF730.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/manuals/VPF750.pdf +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/BELGIUM/ULIEGE.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/GERMANY/DWD.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/KIT/CHWALA.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_LPM_NC.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/SLOVENIA/UL.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/LPM/UK/DIVEN.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/ARCTIC_2021.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/COMMON_2011.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/DAVOS_2009_2011.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_2009.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2008.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2011.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2012.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/GENEPI_2007.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007_2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/HPICONET_2010.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP4.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2018.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2019.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/PARSIVEL_2007.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/PLATO_2019.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019_WJF.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/RIETHOLZBACH_2011.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/EPFL/UNIL_2022.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/JAPAN/JMA.py +0 -0
- {disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL/GPM → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL/NASA}/IFLOODS.py +0 -0
- {disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL/GPM → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL/NASA}/MC3E.py +0 -0
- {disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL/GPM → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL/NASA}/PIERS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/OWLES_MIPS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/PLOWS_MIPS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/CANADA/UQAM_NC.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_nc.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/GREECE/NOA.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/ITALY/HYDROX.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/KIT/BURKINA_FASO.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/KIT/TEAMX.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/MPI/BCO_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/MPI/BOWTIE.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NASA/APU.py +0 -0
- {disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL2/GPM → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL2/NASA}/GCPEX.py +0 -0
- {disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL2/GPM → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL2/NASA}/NSSTC.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_MIPS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT_NC.py +0 -0
- disdrodb-0.1.5/disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PANGASA.py → disdrodb-0.2.0/disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PAGASA.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/SPAIN/CR1000DL.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PARSIVEL2/SPAIN/LIAISE.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/RD80/BRAZIL/CHUVA_RD80.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/RD80/BRAZIL/GOAMAZON_RD80.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/RD80/NCAR/CINDY_2011_RD80.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/RD80/NCAR/RELAMPAGO_RD80.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/SW250/BELGIUM/KMI.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/template_reader_raw_netcdf_data.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/readers/template_reader_raw_text_data.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/standards.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l0/template_tools.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1/beard_model.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1/fall_velocity.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1/filters.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1_env/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l1_env/routines.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l2/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/l2/empirical_dsd.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/checks.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/download.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/geolocation.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/info.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/manipulation.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/reader.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/standards.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/metadata/writer.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/psd/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/psd/fitting.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/psd/models.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/routines/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/scattering/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/scattering/axis_ratio.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/scattering/permittivity.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/scattering/routines.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/summary/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/__init__.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/cli.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/compression.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/dask.py +4 -4
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/dataframe.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/decorators.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/directories.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/event.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/list.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/logger.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/manipulations.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/subsetting.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/warnings.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/writer.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/xarray.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb/utils/yaml.py +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb.egg-info/dependency_links.txt +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb.egg-info/entry_points.txt +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb.egg-info/requires.txt +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/disdrodb.egg-info/top_level.txt +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/pyproject.toml +0 -0
- {disdrodb-0.1.5 → disdrodb-0.2.0}/setup.cfg +0 -0
|
@@ -118,7 +118,7 @@ Please define the name of your branch based on the scope of the contribution. Tr
|
|
|
118
118
|
|
|
119
119
|
|
|
120
120
|
\* Guidelines for the ``<data_source>``
|
|
121
|
-
- We use the institution name when campaign data spans more than 1 country (i.e. ARM,
|
|
121
|
+
- We use the institution name when campaign data spans more than 1 country (i.e. ARM, NASA)
|
|
122
122
|
- We use the country name when all campaigns (or sensor networks) are inside a given country.
|
|
123
123
|
|
|
124
124
|
|
|
@@ -39,8 +39,6 @@ from disdrodb.configs import (
|
|
|
39
39
|
define_configs,
|
|
40
40
|
get_data_archive_dir,
|
|
41
41
|
get_metadata_archive_dir,
|
|
42
|
-
get_model_options,
|
|
43
|
-
get_product_options,
|
|
44
42
|
get_scattering_table_dir,
|
|
45
43
|
)
|
|
46
44
|
from disdrodb.data_transfer.download_data import download_archive, download_station
|
|
@@ -145,8 +143,6 @@ __all__ = [
|
|
|
145
143
|
"generate_l2m",
|
|
146
144
|
"get_data_archive_dir",
|
|
147
145
|
"get_metadata_archive_dir",
|
|
148
|
-
"get_model_options",
|
|
149
|
-
"get_product_options",
|
|
150
146
|
"get_reader",
|
|
151
147
|
"get_scattering_table_dir",
|
|
152
148
|
"get_station_reader",
|
|
@@ -177,7 +173,7 @@ __all__ = [
|
|
|
177
173
|
]
|
|
178
174
|
|
|
179
175
|
|
|
180
|
-
|
|
176
|
+
package_dir = os.path.dirname(os.path.realpath(__file__))
|
|
181
177
|
|
|
182
178
|
|
|
183
179
|
def is_pytmatrix_available():
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.2.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 2, 0)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g81fde4173'
|
|
@@ -89,6 +89,12 @@ class DISDRODB_Base_Accessor:
|
|
|
89
89
|
|
|
90
90
|
return align(self._obj, *args)
|
|
91
91
|
|
|
92
|
+
def plot_spectrum(self, **kwargs):
|
|
93
|
+
"""Plot spectrum."""
|
|
94
|
+
from disdrodb.viz.plots import plot_spectrum
|
|
95
|
+
|
|
96
|
+
plot_spectrum(self._obj, **kwargs)
|
|
97
|
+
|
|
92
98
|
|
|
93
99
|
@xr.register_dataset_accessor("disdrodb")
|
|
94
100
|
class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
@@ -97,7 +103,7 @@ class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
|
97
103
|
def __init__(self, xarray_obj):
|
|
98
104
|
super().__init__(xarray_obj)
|
|
99
105
|
|
|
100
|
-
def resample(self,
|
|
106
|
+
def resample(self, temporal_resolution):
|
|
101
107
|
"""Resample a L1 or L2 DISDRODB Product."""
|
|
102
108
|
from disdrodb.l1.resampling import resample_dataset
|
|
103
109
|
|
|
@@ -105,8 +111,7 @@ class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
|
105
111
|
ds = resample_dataset(
|
|
106
112
|
self._obj,
|
|
107
113
|
sample_interval=sample_interval,
|
|
108
|
-
|
|
109
|
-
rolling=rolling,
|
|
114
|
+
temporal_resolution=temporal_resolution,
|
|
110
115
|
)
|
|
111
116
|
return ds
|
|
112
117
|
|
|
@@ -116,6 +121,12 @@ class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
|
116
121
|
|
|
117
122
|
plot_nd(self._obj, **kwargs)
|
|
118
123
|
|
|
124
|
+
def plot_raw_and_filtered_spectra(self, **kwargs):
|
|
125
|
+
"""Plot the raw and filtered spectra."""
|
|
126
|
+
from disdrodb.viz.plots import plot_raw_and_filtered_spectra
|
|
127
|
+
|
|
128
|
+
plot_raw_and_filtered_spectra(self._obj, **kwargs)
|
|
129
|
+
|
|
119
130
|
|
|
120
131
|
@xr.register_dataarray_accessor("disdrodb")
|
|
121
132
|
class DISDRODB_DataArray_Accessor(DISDRODB_Base_Accessor):
|
|
@@ -154,6 +154,16 @@ def check_rolling(rolling):
|
|
|
154
154
|
raise TypeError("'rolling' must be a boolean.")
|
|
155
155
|
|
|
156
156
|
|
|
157
|
+
def check_temporal_resolution(temporal_resolution):
|
|
158
|
+
"""Check temporal resolution validity."""
|
|
159
|
+
from disdrodb.utils.time import get_sampling_information
|
|
160
|
+
|
|
161
|
+
if not isinstance(temporal_resolution, str):
|
|
162
|
+
raise TypeError("'temporal_resolution' must be a string.")
|
|
163
|
+
# If correct, the follow should not raise error
|
|
164
|
+
sample_interval, rolling = get_sampling_information(temporal_resolution)
|
|
165
|
+
|
|
166
|
+
|
|
157
167
|
def check_folder_partitioning(folder_partitioning):
|
|
158
168
|
"""
|
|
159
169
|
Check if the given folder partitioning scheme is valid.
|
|
@@ -40,6 +40,7 @@ from disdrodb.api.path import (
|
|
|
40
40
|
define_station_dir,
|
|
41
41
|
)
|
|
42
42
|
from disdrodb.l0.l0_reader import define_readers_directory
|
|
43
|
+
from disdrodb.utils.dict import extract_product_kwargs
|
|
43
44
|
from disdrodb.utils.directories import list_files
|
|
44
45
|
from disdrodb.utils.logger import (
|
|
45
46
|
log_info,
|
|
@@ -117,7 +118,7 @@ def filter_by_time(filepaths, start_time=None, end_time=None):
|
|
|
117
118
|
start_time, end_time = check_start_end_time(start_time, end_time)
|
|
118
119
|
|
|
119
120
|
# -------------------------------------------------------------------------.
|
|
120
|
-
# - Retrieve start_time and end_time
|
|
121
|
+
# - Retrieve files start_time and end_time
|
|
121
122
|
l_start_time, l_end_time = get_start_end_time_from_filepaths(filepaths)
|
|
122
123
|
|
|
123
124
|
# -------------------------------------------------------------------------.
|
|
@@ -165,12 +166,9 @@ def find_files(
|
|
|
165
166
|
|
|
166
167
|
Other Parameters
|
|
167
168
|
----------------
|
|
168
|
-
|
|
169
|
-
The
|
|
170
|
-
It must be specified only for product L2E and L2M !
|
|
171
|
-
rolling : bool, optional
|
|
172
|
-
Whether the dataset has been resampled by aggregating or rolling.
|
|
173
|
-
It must be specified only for product L2E and L2M !
|
|
169
|
+
temporal_resolution : str, optional
|
|
170
|
+
The temporal resolution of the product (e.g., "1MIN", "10MIN", "1H").
|
|
171
|
+
It must be specified only for product L1, L2E and L2M !
|
|
174
172
|
model_name : str
|
|
175
173
|
The model name of the statistical distribution for the DSD.
|
|
176
174
|
It must be specified only for product L2M !
|
|
@@ -411,21 +409,19 @@ def open_dataset(
|
|
|
411
409
|
The name of the station.
|
|
412
410
|
product : str
|
|
413
411
|
The name DISDRODB product.
|
|
414
|
-
sample_interval : int, optional
|
|
415
|
-
The sampling interval in seconds of the product.
|
|
416
|
-
It must be specified only for product L2E and L2M !
|
|
417
|
-
rolling : bool, optional
|
|
418
|
-
Whether the dataset has been resampled by aggregating or rolling.
|
|
419
|
-
It must be specified only for product L2E and L2M !
|
|
420
|
-
model_name : str
|
|
421
|
-
The model name of the statistical distribution for the DSD.
|
|
422
|
-
It must be specified only for product L2M !
|
|
423
412
|
debugging_mode : bool, optional
|
|
424
413
|
If ``True``, it select maximum 3 files for debugging purposes.
|
|
425
414
|
The default value is ``False``.
|
|
426
415
|
data_archive_dir : str, optional
|
|
427
416
|
The base directory of DISDRODB, expected in the format ``<...>/DISDRODB``.
|
|
428
417
|
If not specified, the path specified in the DISDRODB active configuration will be used.
|
|
418
|
+
**product_kwargs : optional
|
|
419
|
+
DISDRODB product options
|
|
420
|
+
It must be specified only for product L1, L2E and L2M products !
|
|
421
|
+
For L1, L2E and L2M products, temporal_resolution is required
|
|
422
|
+
FOr L2M product, model_name is required.
|
|
423
|
+
**open_kwargs : optional
|
|
424
|
+
Additional keyword arguments passed to ``xarray.open_mfdataset()``.
|
|
429
425
|
|
|
430
426
|
Returns
|
|
431
427
|
-------
|
|
@@ -434,7 +430,8 @@ def open_dataset(
|
|
|
434
430
|
"""
|
|
435
431
|
from disdrodb.l0.l0a_processing import read_l0a_dataframe
|
|
436
432
|
|
|
437
|
-
|
|
433
|
+
# Extract product kwargs from open_kwargs
|
|
434
|
+
product_kwargs = extract_product_kwargs(open_kwargs, product=product)
|
|
438
435
|
|
|
439
436
|
# List product files
|
|
440
437
|
filepaths = find_files(
|
|
@@ -336,13 +336,13 @@ def define_issue_filepath(
|
|
|
336
336
|
|
|
337
337
|
def define_config_dir(product):
|
|
338
338
|
"""Define the config directory path of a given DISDRODB product."""
|
|
339
|
-
from disdrodb import
|
|
339
|
+
from disdrodb import package_dir
|
|
340
340
|
|
|
341
341
|
if product.upper() in ["RAW", "L0A", "L0B"]:
|
|
342
342
|
dir_name = "l0"
|
|
343
343
|
else:
|
|
344
344
|
raise NotImplementedError(f"Product {product} not implemented.")
|
|
345
|
-
config_dir = os.path.join(
|
|
345
|
+
config_dir = os.path.join(package_dir, dir_name, "configs")
|
|
346
346
|
return config_dir
|
|
347
347
|
|
|
348
348
|
|
|
@@ -448,12 +448,9 @@ def define_product_dir_tree(
|
|
|
448
448
|
----------
|
|
449
449
|
product : str
|
|
450
450
|
The DISDRODB product. See ``disdrodb.available_products()``.
|
|
451
|
-
|
|
452
|
-
The
|
|
453
|
-
It must be specified only for product L2E and L2M !
|
|
454
|
-
rolling : bool, optional
|
|
455
|
-
Whether the dataset has been resampled by aggregating or rolling.
|
|
456
|
-
It must be specified only for product L2E and L2M !
|
|
451
|
+
temporal_resolution : str, optional
|
|
452
|
+
The temporal resolution of the product.
|
|
453
|
+
It must be specified only for product L1, L2E and L2M !
|
|
457
454
|
model_name : str
|
|
458
455
|
The custom model name of the fitted statistical distribution.
|
|
459
456
|
It must be specified only for product L2M !
|
|
@@ -463,28 +460,23 @@ def define_product_dir_tree(
|
|
|
463
460
|
data_dir : str
|
|
464
461
|
Station data directory path
|
|
465
462
|
"""
|
|
466
|
-
from disdrodb.api.checks import check_product, check_product_kwargs,
|
|
463
|
+
from disdrodb.api.checks import check_product, check_product_kwargs, check_temporal_resolution
|
|
467
464
|
|
|
468
465
|
product = check_product(product)
|
|
469
466
|
product_kwargs = check_product_kwargs(product, product_kwargs)
|
|
470
467
|
if product.upper() == "RAW":
|
|
471
468
|
return ""
|
|
472
|
-
if product.upper() in ["L0A", "L0B", "L0C"
|
|
469
|
+
if product.upper() in ["L0A", "L0B", "L0C"]:
|
|
473
470
|
return ""
|
|
474
|
-
if product
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
check_sample_interval(sample_interval)
|
|
479
|
-
temporal_resolution = define_temporal_resolution(seconds=sample_interval, rolling=rolling)
|
|
480
|
-
return os.path.join(temporal_resolution)
|
|
471
|
+
if product in ["L1", "L2E"]:
|
|
472
|
+
temporal_resolution = product_kwargs.get("temporal_resolution")
|
|
473
|
+
check_temporal_resolution(temporal_resolution)
|
|
474
|
+
return temporal_resolution
|
|
481
475
|
# L2M if product == "L2M":
|
|
482
|
-
|
|
483
|
-
|
|
476
|
+
temporal_resolution = product_kwargs.get("temporal_resolution")
|
|
477
|
+
check_temporal_resolution(temporal_resolution)
|
|
484
478
|
model_name = product_kwargs.get("model_name")
|
|
485
|
-
|
|
486
|
-
check_sample_interval(sample_interval)
|
|
487
|
-
temporal_resolution = define_temporal_resolution(seconds=sample_interval, rolling=rolling)
|
|
479
|
+
|
|
488
480
|
return os.path.join(model_name, temporal_resolution)
|
|
489
481
|
|
|
490
482
|
|
|
@@ -611,12 +603,9 @@ def define_data_dir(
|
|
|
611
603
|
If not specified, the path specified in the DISDRODB active configuration will be used.
|
|
612
604
|
check_exists : bool, optional
|
|
613
605
|
Whether to check if the directory exists. The default value is ``False``.
|
|
614
|
-
|
|
615
|
-
The
|
|
616
|
-
It must be specified only for product L2E and L2M !
|
|
617
|
-
rolling : bool, optional
|
|
618
|
-
Whether the dataset has been resampled by aggregating or rolling.
|
|
619
|
-
It must be specified only for product L2E and L2M !
|
|
606
|
+
temporal_resolution : str, optional
|
|
607
|
+
The temporal resolution of the product.
|
|
608
|
+
It must be specified only for product L1, L2E and L2M !
|
|
620
609
|
model_name : str
|
|
621
610
|
The name of the fitted statistical distribution for the DSD.
|
|
622
611
|
It must be specified only for product L2M !
|
|
@@ -701,11 +690,8 @@ def define_filename(
|
|
|
701
690
|
end_time : datetime.datatime, optional
|
|
702
691
|
End time.
|
|
703
692
|
Required if add_time_period = True.
|
|
704
|
-
|
|
705
|
-
The
|
|
706
|
-
It must be specified only for product L0C, L1, L2E and L2M !
|
|
707
|
-
rolling : bool, optional
|
|
708
|
-
Whether the dataset has been resampled by aggregating or rolling.
|
|
693
|
+
temporal_resolution : str, optional
|
|
694
|
+
The temporal resolution of the product.
|
|
709
695
|
It must be specified only for product L1, L2E and L2M !
|
|
710
696
|
model_name : str
|
|
711
697
|
The model name of the fitted statistical distribution for the DSD.
|
|
@@ -716,7 +702,7 @@ def define_filename(
|
|
|
716
702
|
str
|
|
717
703
|
L0B file name.
|
|
718
704
|
"""
|
|
719
|
-
from disdrodb.api.checks import check_product, check_product_kwargs
|
|
705
|
+
from disdrodb.api.checks import check_product, check_product_kwargs, check_temporal_resolution
|
|
720
706
|
|
|
721
707
|
product = check_product(product)
|
|
722
708
|
product_kwargs = check_product_kwargs(product, product_kwargs)
|
|
@@ -729,16 +715,9 @@ def define_filename(
|
|
|
729
715
|
product_name = f"{product}"
|
|
730
716
|
|
|
731
717
|
# L0C ... sample interval known only per-file
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
# sample_interval = product_kwargs.get("sample_interval", 0)
|
|
736
|
-
# temporal_resolution = define_temporal_resolution(seconds=sample_interval, rolling=False)
|
|
737
|
-
# product_name = f"{product}.{temporal_resolution}"
|
|
738
|
-
if product in ["L2E", "L2M"]:
|
|
739
|
-
rolling = product_kwargs.get("rolling")
|
|
740
|
-
sample_interval = product_kwargs.get("sample_interval")
|
|
741
|
-
temporal_resolution = define_temporal_resolution(seconds=sample_interval, rolling=rolling)
|
|
718
|
+
if product in ["L1", "L2E", "L2M"]:
|
|
719
|
+
temporal_resolution = product_kwargs.get("temporal_resolution")
|
|
720
|
+
check_temporal_resolution(temporal_resolution)
|
|
742
721
|
product_name = f"{product}.{temporal_resolution}"
|
|
743
722
|
if product in ["L2M"]:
|
|
744
723
|
model_name = product_kwargs.get("model_name")
|
|
@@ -828,7 +807,7 @@ def define_l0b_filename(ds, campaign_name: str, station_name: str) -> str:
|
|
|
828
807
|
|
|
829
808
|
def define_l0c_filename(ds, campaign_name: str, station_name: str) -> str:
|
|
830
809
|
"""Define L0C file name."""
|
|
831
|
-
# TODO: add sample_interval as function argument
|
|
810
|
+
# TODO: add sample_interval as function argument
|
|
832
811
|
sample_interval = int(ensure_sample_interval_in_seconds(ds["sample_interval"]).data.item())
|
|
833
812
|
temporal_resolution = define_temporal_resolution(sample_interval, rolling=False)
|
|
834
813
|
starting_time, ending_time = get_file_start_end_time(ds)
|
|
@@ -839,37 +818,26 @@ def define_l0c_filename(ds, campaign_name: str, station_name: str) -> str:
|
|
|
839
818
|
return filename
|
|
840
819
|
|
|
841
820
|
|
|
842
|
-
def define_l1_filename(ds, campaign_name, station_name: str) -> str:
|
|
821
|
+
def define_l1_filename(ds, campaign_name, station_name: str, temporal_resolution: str) -> str:
|
|
843
822
|
"""Define L1 file name."""
|
|
844
|
-
# TODO: add sample_interval and rolling as function argument
|
|
845
|
-
|
|
846
823
|
starting_time, ending_time = get_file_start_end_time(ds)
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
# start_time=starting_time,
|
|
861
|
-
# end_time=ending_time,
|
|
862
|
-
# add_version=True,
|
|
863
|
-
# add_time_period=True,
|
|
864
|
-
# add_extension=True,
|
|
865
|
-
# # Product options
|
|
866
|
-
# # sample_interval=sample_interval,
|
|
867
|
-
# # rolling=rolling,
|
|
868
|
-
# )
|
|
824
|
+
filename = define_filename(
|
|
825
|
+
product="L1",
|
|
826
|
+
campaign_name=campaign_name,
|
|
827
|
+
station_name=station_name,
|
|
828
|
+
# Filename options
|
|
829
|
+
start_time=starting_time,
|
|
830
|
+
end_time=ending_time,
|
|
831
|
+
add_version=True,
|
|
832
|
+
add_time_period=True,
|
|
833
|
+
add_extension=True,
|
|
834
|
+
# Product options
|
|
835
|
+
temporal_resolution=temporal_resolution,
|
|
836
|
+
)
|
|
869
837
|
return filename
|
|
870
838
|
|
|
871
839
|
|
|
872
|
-
def define_l2e_filename(ds, campaign_name: str, station_name: str,
|
|
840
|
+
def define_l2e_filename(ds, campaign_name: str, station_name: str, temporal_resolution: str) -> str:
|
|
873
841
|
"""Define L2E file name."""
|
|
874
842
|
starting_time, ending_time = get_file_start_end_time(ds)
|
|
875
843
|
filename = define_filename(
|
|
@@ -883,8 +851,7 @@ def define_l2e_filename(ds, campaign_name: str, station_name: str, sample_interv
|
|
|
883
851
|
add_time_period=True,
|
|
884
852
|
add_extension=True,
|
|
885
853
|
# Product options
|
|
886
|
-
|
|
887
|
-
rolling=rolling,
|
|
854
|
+
temporal_resolution=temporal_resolution,
|
|
888
855
|
)
|
|
889
856
|
return filename
|
|
890
857
|
|
|
@@ -893,8 +860,7 @@ def define_l2m_filename(
|
|
|
893
860
|
ds,
|
|
894
861
|
campaign_name: str,
|
|
895
862
|
station_name: str,
|
|
896
|
-
|
|
897
|
-
rolling: bool,
|
|
863
|
+
temporal_resolution: str,
|
|
898
864
|
model_name: str,
|
|
899
865
|
) -> str:
|
|
900
866
|
"""Define L2M file name."""
|
|
@@ -910,8 +876,7 @@ def define_l2m_filename(
|
|
|
910
876
|
add_time_period=True,
|
|
911
877
|
add_extension=True,
|
|
912
878
|
# Product options
|
|
913
|
-
|
|
914
|
-
rolling=rolling,
|
|
879
|
+
temporal_resolution=temporal_resolution,
|
|
915
880
|
model_name=model_name,
|
|
916
881
|
)
|
|
917
882
|
return filename
|
|
@@ -17,6 +17,7 @@ from disdrodb.api.path import (
|
|
|
17
17
|
)
|
|
18
18
|
from disdrodb.configs import get_data_archive_dir, get_metadata_archive_dir
|
|
19
19
|
from disdrodb.constants import PRODUCTS_REQUIREMENTS
|
|
20
|
+
from disdrodb.utils.dict import extract_product_kwargs
|
|
20
21
|
from disdrodb.utils.directories import contains_files, contains_netcdf_or_parquet_files, list_directories, list_files
|
|
21
22
|
from disdrodb.utils.yaml import read_yaml
|
|
22
23
|
|
|
@@ -173,7 +174,15 @@ def list_station_names(
|
|
|
173
174
|
#### Filtering utilities for available_stations
|
|
174
175
|
|
|
175
176
|
|
|
176
|
-
def _finalize_output(list_info, return_tuple):
|
|
177
|
+
def _finalize_output(list_info, return_tuple, metadata_archive_dir, filter_kwargs):
|
|
178
|
+
# Filter stations if metadata filtering values are specified
|
|
179
|
+
if len(filter_kwargs) != 0:
|
|
180
|
+
list_info = select_stations_matching_metadata_values(
|
|
181
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
182
|
+
list_info=list_info,
|
|
183
|
+
filter_kwargs=filter_kwargs,
|
|
184
|
+
)
|
|
185
|
+
|
|
177
186
|
# - Return the (data_source, campaign_name, station_name) tuple
|
|
178
187
|
if return_tuple:
|
|
179
188
|
return list_info
|
|
@@ -192,7 +201,7 @@ def is_disdrodb_data_url_specified(metadata_filepath):
|
|
|
192
201
|
return isinstance(disdrodb_data_url, str) and len(disdrodb_data_url) > 1
|
|
193
202
|
|
|
194
203
|
|
|
195
|
-
def
|
|
204
|
+
def select_stations_with_disdrodb_data_url(metadata_archive_dir, list_info):
|
|
196
205
|
"""Keep only the stations with disdrodb_data_url specified in the metadata file."""
|
|
197
206
|
list_info_with_data = []
|
|
198
207
|
for data_source, campaign_name, station_name in list_info:
|
|
@@ -209,7 +218,41 @@ def keep_list_info_with_disdrodb_data_url(metadata_archive_dir, list_info):
|
|
|
209
218
|
return list_info_with_data
|
|
210
219
|
|
|
211
220
|
|
|
212
|
-
def
|
|
221
|
+
def _matches(metadata_value, expected_value):
|
|
222
|
+
"""Return True if metadata_value matches expected_value."""
|
|
223
|
+
# Case 1: both lists → check any intersection
|
|
224
|
+
if isinstance(metadata_value, list) and isinstance(expected_value, list):
|
|
225
|
+
return any(v in metadata_value for v in expected_value)
|
|
226
|
+
# Case 2: metadata is list → check membership
|
|
227
|
+
if isinstance(metadata_value, list):
|
|
228
|
+
return expected_value in metadata_value
|
|
229
|
+
# Case 3: expected is list → check membership
|
|
230
|
+
if isinstance(expected_value, list):
|
|
231
|
+
return metadata_value in expected_value
|
|
232
|
+
# Case 4: both scalars → direct equality
|
|
233
|
+
return metadata_value == expected_value
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
def select_stations_matching_metadata_values(metadata_archive_dir, list_info, filter_kwargs):
|
|
237
|
+
"""Keep only the stations with the specified metadata key matching the specified value."""
|
|
238
|
+
list_info_valid = []
|
|
239
|
+
for data_source, campaign_name, station_name in list_info:
|
|
240
|
+
# Define metadata filepath
|
|
241
|
+
metadata_filepath = define_metadata_filepath(
|
|
242
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
243
|
+
data_source=data_source,
|
|
244
|
+
campaign_name=campaign_name,
|
|
245
|
+
station_name=station_name,
|
|
246
|
+
)
|
|
247
|
+
# Read metadata
|
|
248
|
+
metadata = read_yaml(metadata_filepath)
|
|
249
|
+
if np.all([_matches(metadata.get(k), v) for k, v in filter_kwargs.items()]):
|
|
250
|
+
list_info_valid.append((data_source, campaign_name, station_name))
|
|
251
|
+
|
|
252
|
+
return list_info_valid
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def select_stations_with_product_directory(data_archive_dir, product, list_info):
|
|
213
256
|
"""Keep only the stations with the product directory."""
|
|
214
257
|
list_info_with_product_directory = []
|
|
215
258
|
for data_source, campaign_name, station_name in list_info:
|
|
@@ -228,7 +271,7 @@ def keep_list_info_elements_with_product_directory(data_archive_dir, product, li
|
|
|
228
271
|
return list_info_with_product_directory
|
|
229
272
|
|
|
230
273
|
|
|
231
|
-
def
|
|
274
|
+
def select_stations_with_product_data(data_archive_dir, product, list_info, **product_kwargs):
|
|
232
275
|
"""Keep only the stations with product data."""
|
|
233
276
|
# Define file checking function
|
|
234
277
|
checking_function = contains_files if product == "RAW" else contains_netcdf_or_parquet_files
|
|
@@ -265,7 +308,7 @@ def available_stations(
|
|
|
265
308
|
invalid_fields_policy="raise",
|
|
266
309
|
data_archive_dir=None,
|
|
267
310
|
metadata_archive_dir=None,
|
|
268
|
-
**
|
|
311
|
+
**filter_kwargs,
|
|
269
312
|
):
|
|
270
313
|
"""
|
|
271
314
|
Return stations information for which metadata or product data are available on disk.
|
|
@@ -289,7 +332,7 @@ def available_stations(
|
|
|
289
332
|
|
|
290
333
|
If the DISDRODB product is specified,
|
|
291
334
|
it lists the stations present in the local DISDRODB Data Archive given the specified filtering criteria.
|
|
292
|
-
The default is
|
|
335
|
+
The default is None.
|
|
293
336
|
|
|
294
337
|
data_sources : str or sequence of str, optional
|
|
295
338
|
One or more data source identifiers to filter stations by.
|
|
@@ -342,15 +385,15 @@ def available_stations(
|
|
|
342
385
|
If None, the default metadata base directory is used. Default is None.
|
|
343
386
|
**product_kwargs : dict, optional
|
|
344
387
|
Additional arguments required for some products.
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
388
|
+
It must be specified only for product L1, L2E and L2M products !
|
|
389
|
+
For L1, L2E and L2M products, ``temporal_resolution`` is required.
|
|
390
|
+
FOr L2M product, ``model_name`` is required.
|
|
348
391
|
|
|
349
392
|
Returns
|
|
350
393
|
-------
|
|
351
394
|
list
|
|
352
395
|
If ``return_tuple=True``, return a list of tuples ``(data_source, campaign_name, station_name)``.
|
|
353
|
-
If ``return_tuple=True
|
|
396
|
+
If ``return_tuple=True``, return a list of station names.
|
|
354
397
|
|
|
355
398
|
Examples
|
|
356
399
|
--------
|
|
@@ -361,15 +404,18 @@ def available_stations(
|
|
|
361
404
|
>>> # List stations with raw data available in the local DISDRODB Data Archive
|
|
362
405
|
>>> raw_stations = available_stations(product="RAW", available_data=True)
|
|
363
406
|
>>> # List stations of specific data sources
|
|
364
|
-
>>> stations = available_stations(data_sources=["
|
|
407
|
+
>>> stations = available_stations(data_sources=["NASA", "EPFL"])
|
|
365
408
|
"""
|
|
366
409
|
# Retrieve DISDRODB Data and Metadata Archive directories
|
|
367
410
|
metadata_archive_dir = get_metadata_archive_dir(metadata_archive_dir)
|
|
368
411
|
product = check_product(product) if product is not None else None
|
|
369
412
|
invalid_fields_policy = check_invalid_fields_policy(invalid_fields_policy)
|
|
370
413
|
|
|
414
|
+
# Extract product_kwargs from filter_kwargs
|
|
415
|
+
product_kwargs = extract_product_kwargs(filter_kwargs, product=product) if product is not None else {}
|
|
416
|
+
|
|
371
417
|
# Retrieve available stations from the Metadata Archive
|
|
372
|
-
# - Raise error if no stations
|
|
418
|
+
# - Raise error if no stations available !
|
|
373
419
|
list_info = list_station_names(
|
|
374
420
|
metadata_archive_dir=metadata_archive_dir,
|
|
375
421
|
data_sources=data_sources,
|
|
@@ -386,24 +432,34 @@ def available_stations(
|
|
|
386
432
|
raise_error_if_empty=raise_error_if_empty,
|
|
387
433
|
msg="No station available in the DISDRODB Metadata Archive.",
|
|
388
434
|
)
|
|
389
|
-
return _finalize_output(
|
|
435
|
+
return _finalize_output(
|
|
436
|
+
list_info,
|
|
437
|
+
return_tuple=return_tuple,
|
|
438
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
439
|
+
filter_kwargs=filter_kwargs,
|
|
440
|
+
)
|
|
390
441
|
|
|
391
442
|
# Return stations in the Metadata Archive with specified disdrodb_data_url
|
|
392
443
|
if product is None and available_data:
|
|
393
|
-
list_info =
|
|
444
|
+
list_info = select_stations_with_disdrodb_data_url(metadata_archive_dir, list_info)
|
|
394
445
|
_raise_an_error_if_no_stations(
|
|
395
446
|
list_info,
|
|
396
447
|
raise_error_if_empty=raise_error_if_empty,
|
|
397
448
|
msg="No station has the disdrodb_data_url specified in the metadata.",
|
|
398
449
|
)
|
|
399
|
-
return _finalize_output(
|
|
450
|
+
return _finalize_output(
|
|
451
|
+
list_info,
|
|
452
|
+
return_tuple=return_tuple,
|
|
453
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
454
|
+
filter_kwargs=filter_kwargs,
|
|
455
|
+
)
|
|
400
456
|
|
|
401
457
|
# If product is specified, select stations available in the local DISDRODB Data Archive
|
|
402
458
|
# - If available_data=False, search for station with the existing product directory (do not check for data)
|
|
403
459
|
data_archive_dir = get_data_archive_dir(data_archive_dir)
|
|
404
460
|
product = check_product(product)
|
|
405
461
|
if not available_data:
|
|
406
|
-
list_info =
|
|
462
|
+
list_info = select_stations_with_product_directory(
|
|
407
463
|
data_archive_dir=data_archive_dir,
|
|
408
464
|
product=product,
|
|
409
465
|
list_info=list_info,
|
|
@@ -413,11 +469,16 @@ def available_stations(
|
|
|
413
469
|
raise_error_if_empty=raise_error_if_empty,
|
|
414
470
|
msg=f"No station product {product} directory available in the local DISDRODB Data Archive.",
|
|
415
471
|
)
|
|
416
|
-
return _finalize_output(
|
|
472
|
+
return _finalize_output(
|
|
473
|
+
list_info,
|
|
474
|
+
return_tuple=return_tuple,
|
|
475
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
476
|
+
filter_kwargs=filter_kwargs,
|
|
477
|
+
)
|
|
417
478
|
|
|
418
479
|
# - If available_data=True, search for station with product data
|
|
419
480
|
product_kwargs = check_product_kwargs(product, product_kwargs)
|
|
420
|
-
list_info =
|
|
481
|
+
list_info = select_stations_with_product_data(
|
|
421
482
|
data_archive_dir=data_archive_dir,
|
|
422
483
|
product=product,
|
|
423
484
|
list_info=list_info,
|
|
@@ -429,7 +490,12 @@ def available_stations(
|
|
|
429
490
|
raise_error_if_empty=raise_error_if_empty,
|
|
430
491
|
msg=f"No station has {product} {product_kwargs} data available in the local DISDRODB Data Archive.",
|
|
431
492
|
)
|
|
432
|
-
return _finalize_output(
|
|
493
|
+
return _finalize_output(
|
|
494
|
+
list_info,
|
|
495
|
+
return_tuple=return_tuple,
|
|
496
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
497
|
+
filter_kwargs=filter_kwargs,
|
|
498
|
+
)
|
|
433
499
|
|
|
434
500
|
|
|
435
501
|
def available_data_sources(
|
|
@@ -441,7 +507,7 @@ def available_data_sources(
|
|
|
441
507
|
invalid_fields_policy="raise",
|
|
442
508
|
data_archive_dir=None,
|
|
443
509
|
metadata_archive_dir=None,
|
|
444
|
-
**
|
|
510
|
+
**kwargs,
|
|
445
511
|
):
|
|
446
512
|
"""Return data sources for which stations are available."""
|
|
447
513
|
list_info = available_stations(
|
|
@@ -455,7 +521,7 @@ def available_data_sources(
|
|
|
455
521
|
invalid_fields_policy=invalid_fields_policy,
|
|
456
522
|
data_archive_dir=data_archive_dir,
|
|
457
523
|
metadata_archive_dir=metadata_archive_dir,
|
|
458
|
-
**
|
|
524
|
+
**kwargs,
|
|
459
525
|
)
|
|
460
526
|
data_sources = [info[0] for info in list_info]
|
|
461
527
|
data_sources = np.unique(data_sources).tolist()
|
|
@@ -471,7 +537,7 @@ def available_campaigns(
|
|
|
471
537
|
invalid_fields_policy="raise",
|
|
472
538
|
data_archive_dir=None,
|
|
473
539
|
metadata_archive_dir=None,
|
|
474
|
-
**
|
|
540
|
+
**kwargs,
|
|
475
541
|
):
|
|
476
542
|
"""Return campaigns names for which stations are available."""
|
|
477
543
|
list_info = available_stations(
|
|
@@ -485,7 +551,7 @@ def available_campaigns(
|
|
|
485
551
|
invalid_fields_policy=invalid_fields_policy,
|
|
486
552
|
data_archive_dir=data_archive_dir,
|
|
487
553
|
metadata_archive_dir=metadata_archive_dir,
|
|
488
|
-
**
|
|
554
|
+
**kwargs,
|
|
489
555
|
)
|
|
490
556
|
campaign_names = [info[1] for info in list_info]
|
|
491
557
|
campaign_names = np.unique(campaign_names).tolist()
|
|
@@ -67,7 +67,7 @@ def disdrodb_create_summary(
|
|
|
67
67
|
Name of data source(s) to process.
|
|
68
68
|
The name(s) must be UPPER CASE.
|
|
69
69
|
If campaign_names and station are not specified, process all stations.
|
|
70
|
-
To specify multiple data sources, write i.e.: --data_sources '
|
|
70
|
+
To specify multiple data sources, write i.e.: --data_sources 'NASA EPFL NCAR'
|
|
71
71
|
campaign_names : str
|
|
72
72
|
Name of the campaign(s) for which to create stations summaries.
|
|
73
73
|
The name(s) must be UPPER CASE.
|