disdrodb 0.1.2__tar.gz → 0.1.3__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.2/disdrodb.egg-info → disdrodb-0.1.3}/PKG-INFO +3 -2
- {disdrodb-0.1.2 → disdrodb-0.1.3}/README.md +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/__init__.py +64 -34
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/_config.py +5 -4
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/_version.py +16 -3
- disdrodb-0.1.3/disdrodb/accessor/__init__.py +20 -0
- disdrodb-0.1.3/disdrodb/accessor/methods.py +125 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/checks.py +139 -9
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/configs.py +4 -2
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/info.py +10 -10
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/io.py +237 -18
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/path.py +81 -75
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/search.py +6 -6
- disdrodb-0.1.3/disdrodb/cli/disdrodb_create_summary_station.py +91 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0_station.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0b.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0b_station.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0c.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0c_station.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l2e_station.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/configs.py +149 -4
- disdrodb-0.1.3/disdrodb/constants.py +61 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/data_transfer/download_data.py +5 -5
- disdrodb-0.1.3/disdrodb/etc/configs/attributes.yaml +339 -0
- disdrodb-0.1.3/disdrodb/etc/configs/encodings.yaml +473 -0
- disdrodb-0.1.3/disdrodb/etc/products/L1/global.yaml +13 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2E/10MIN.yaml +12 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2E/1MIN.yaml +1 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2E/global.yaml +22 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2M/10MIN.yaml +12 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2M/GAMMA_ML.yaml +8 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2M/NGAMMA_GS_LOG_ND_MAE.yaml +6 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2M/NGAMMA_GS_ND_MAE.yaml +6 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2M/NGAMMA_GS_Z_MAE.yaml +6 -0
- disdrodb-0.1.3/disdrodb/etc/products/L2M/global.yaml +26 -0
- {disdrodb-0.1.2/disdrodb/scattering → disdrodb-0.1.3/disdrodb/l0}/__init__.py +11 -9
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +4 -4
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL/l0b_cf_attrs.yml +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL/l0b_encodings.yml +3 -3
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL/raw_data_format.yml +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL2/l0b_cf_attrs.yml +5 -5
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL2/l0b_encodings.yml +3 -3
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL2/raw_data_format.yml +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PWS100/l0b_cf_attrs.yml +4 -4
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PWS100/raw_data_format.yml +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/l0a_processing.py +30 -30
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/l0b_nc_processing.py +108 -2
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/l0b_processing.py +4 -4
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/l0c_processing.py +5 -13
- disdrodb-0.1.3/disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_LPM_NC.py +66 -0
- disdrodb-0.1.2/disdrodb/l0/readers/LPM/SLOVENIA/CRNI_VRH.py → disdrodb-0.1.3/disdrodb/l0/readers/LPM/SLOVENIA/UL.py +3 -0
- disdrodb-0.1.3/disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +195 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/GPM/PIERS.py +0 -2
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/JAPAN/JMA.py +4 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +1 -1
- disdrodb-0.1.2/disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py → disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +13 -34
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +165 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +69 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +310 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +525 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +1 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/GPM/GCPEX.py +9 -7
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/KIT/BURKINA_FASO.py +1 -1
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/KIT/TEAMX.py +123 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/NASA/APU.py +120 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +1 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +1 -1
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +126 -0
- disdrodb-0.1.2/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py → disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +16 -12
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +1 -1
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +169 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT_NC.py +2 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +144 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/SPAIN/CR1000DL.py +201 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/SPAIN/LIAISE.py +137 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL2/USA/C3WE.py +146 -0
- disdrodb-0.1.3/disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +156 -0
- disdrodb-0.1.2/disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py → disdrodb-0.1.3/disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +16 -15
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/routines.py +105 -14
- {disdrodb-0.1.2/disdrodb/l0 → disdrodb-0.1.3/disdrodb/l1}/__init__.py +6 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1/filters.py +34 -20
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1/processing.py +45 -44
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1/resampling.py +77 -66
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1/routines.py +35 -43
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1_env/routines.py +18 -3
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l2/__init__.py +7 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l2/empirical_dsd.py +58 -10
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l2/event.py +27 -120
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l2/processing.py +267 -116
- disdrodb-0.1.3/disdrodb/l2/routines.py +1232 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/standards.py +3 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/psd/fitting.py +463 -144
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/psd/models.py +8 -5
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/routines.py +3 -3
- disdrodb-0.1.3/disdrodb/scattering/__init__.py +40 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/scattering/axis_ratio.py +56 -36
- disdrodb-0.1.3/disdrodb/scattering/permittivity.py +486 -0
- disdrodb-0.1.3/disdrodb/scattering/routines.py +998 -0
- {disdrodb-0.1.2/disdrodb/l1 → disdrodb-0.1.3/disdrodb/summary}/__init__.py +1 -1
- disdrodb-0.1.3/disdrodb/summary/routines.py +4120 -0
- disdrodb-0.1.3/disdrodb/utils/attrs.py +151 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/compression.py +30 -1
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/dask.py +59 -8
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/dataframe.py +61 -7
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/directories.py +35 -15
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/encoding.py +33 -19
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/logger.py +13 -6
- disdrodb-0.1.3/disdrodb/utils/manipulations.py +71 -0
- disdrodb-0.1.3/disdrodb/utils/subsetting.py +214 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/time.py +165 -19
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/writer.py +20 -7
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/xarray.py +2 -4
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/viz/__init__.py +13 -0
- disdrodb-0.1.3/disdrodb/viz/plots.py +344 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3/disdrodb.egg-info}/PKG-INFO +3 -2
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb.egg-info/SOURCES.txt +38 -5
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb.egg-info/entry_points.txt +1 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb.egg-info/requires.txt +1 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/pyproject.toml +8 -1
- disdrodb-0.1.2/disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT.py +0 -166
- disdrodb-0.1.2/disdrodb/l1/encoding_attrs.py +0 -642
- disdrodb-0.1.2/disdrodb/l2/processing_options.py +0 -213
- disdrodb-0.1.2/disdrodb/l2/routines.py +0 -868
- disdrodb-0.1.2/disdrodb/scattering/routines.py +0 -456
- disdrodb-0.1.2/disdrodb/utils/attrs.py +0 -208
- disdrodb-0.1.2/disdrodb/viz/plots.py +0 -17
- {disdrodb-0.1.2 → disdrodb-0.1.3}/.codebeatignore +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/.coveragerc +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/.gitignore +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/.pre-commit-config.yaml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/.readthedocs.yaml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/AUTHORS.md +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/CHANGELOG.md +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/CODE_OF_CONDUCT.md +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/CONTRIBUTING.rst +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/LICENSE +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/MANIFEST.in +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/Makefile +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/SECURITY.md +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/api/create_directories.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_check_metadata_archive.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_data_archive_directory.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_download_archive.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_download_metadata_archive.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_download_station.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_initialize_station.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_metadata_archive_directory.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_open_data_archive.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_open_logs_directory.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_open_metadata_archive.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_open_metadata_directory.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_open_product_directory.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_open_readers_directory.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0a.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l0a_station.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l1.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l1_station.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l2e.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l2m.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_run_l2m_station.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_upload_archive.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/cli/disdrodb_upload_station.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/data_transfer/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/data_transfer/upload_data.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/data_transfer/zenodo.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/docs.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/issue/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/issue/checks.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/issue/reader.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/issue/writer.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/check_configs.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/check_standards.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/LPM/bins_diameter.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/LPM/bins_velocity.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/LPM/l0a_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/LPM/l0b_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/LPM/raw_data_format.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL/bins_diameter.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL/bins_velocity.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL/l0a_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL2/bins_diameter.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL2/bins_velocity.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PARSIVEL2/l0a_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PWS100/bins_diameter.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PWS100/bins_velocity.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PWS100/l0a_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/PWS100/l0b_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/RD80/bins_diameter.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/RD80/bins_velocity.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/RD80/l0a_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/RD80/l0b_cf_attrs.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/RD80/l0b_encodings.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/configs/RD80/raw_data_format.yml +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/l0_reader.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/LPM.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/ODM470.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/PARSIVEL.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/PARSIVEL2.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/PWS100.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/RD80.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/SWS250.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/VPF730.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/manuals/VPF750.pdf +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/KIT/CHWALA.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/LPM/UK/DIVEN.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/ARCTIC_2021.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/COMMON_2011.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/DAVOS_2009_2011.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_2009.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2008.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2011.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2012.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/GENEPI_2007.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007_2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/HPICONET_2010.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP4.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2018.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2019.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/PARSIVEL_2007.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/PLATO_2019.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019_WJF.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/RIETHOLZBACH_2011.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/EPFL/UNIL_2022.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/GPM/IFLOODS.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/GPM/LPVEX.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/GPM/MC3E.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/OWLES_MIPS.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/PLOWS_MIPS.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +0 -0
- /disdrodb-0.1.2/disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL_FGG.py → /disdrodb-0.1.3/disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_nc.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/GPM/NSSTC.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_MIPS.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/RD80/BRAZIL/CHUVA_RD80.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/RD80/BRAZIL/GOAMAZON_RD80.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/RD80/NCAR/CINDY_2011_RD80.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/RD80/NCAR/RELAMPAGO_RD80.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/template_reader_raw_netcdf_data.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/readers/template_reader_raw_text_data.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/standards.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l0/template_tools.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1/beard_model.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1/fall_velocity.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/l1_env/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/checks.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/download.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/geolocation.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/info.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/manipulation.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/reader.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/search.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/metadata/writer.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/psd/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/__init__.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/cli.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/decorators.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/list.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/warnings.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb/utils/yaml.py +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb.egg-info/dependency_links.txt +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/disdrodb.egg-info/top_level.txt +0 -0
- {disdrodb-0.1.2 → disdrodb-0.1.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: disdrodb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: disdrodb provides tools to download, standardize, share and analyze global disdrometer data.
|
|
5
5
|
Author: Gionata Ghiggi
|
|
6
6
|
Project-URL: homepage, https://github.com/ltelab/disdrodb
|
|
@@ -33,6 +33,7 @@ Requires-Dist: numpy
|
|
|
33
33
|
Requires-Dist: scipy
|
|
34
34
|
Requires-Dist: dask[distributed]
|
|
35
35
|
Requires-Dist: xarray
|
|
36
|
+
Requires-Dist: matplotlib
|
|
36
37
|
Provides-Extra: dev
|
|
37
38
|
Requires-Dist: jupyter; extra == "dev"
|
|
38
39
|
Requires-Dist: pre-commit; extra == "dev"
|
|
@@ -190,7 +191,7 @@ disdrodb_run_l2e
|
|
|
190
191
|
disdrodb_run_l2m
|
|
191
192
|
```
|
|
192
193
|
|
|
193
|
-
### 💫 Analyze Analysis
|
|
194
|
+
### 💫 Analyze Analysis-Ready Products
|
|
194
195
|
|
|
195
196
|
The software’s `open_dataset` function **lazily** opens all station files of a given product:
|
|
196
197
|
|
|
@@ -17,10 +17,10 @@
|
|
|
17
17
|
"""DISDRODB software."""
|
|
18
18
|
|
|
19
19
|
import contextlib
|
|
20
|
-
import importlib
|
|
21
20
|
import os
|
|
22
21
|
from importlib.metadata import PackageNotFoundError, version
|
|
23
22
|
|
|
23
|
+
import disdrodb.accessor # noqa
|
|
24
24
|
from disdrodb._config import config # noqa
|
|
25
25
|
from disdrodb.api.configs import available_sensor_names
|
|
26
26
|
from disdrodb.api.io import (
|
|
@@ -35,11 +35,26 @@ from disdrodb.api.search import (
|
|
|
35
35
|
available_data_sources,
|
|
36
36
|
available_stations,
|
|
37
37
|
)
|
|
38
|
-
from disdrodb.configs import
|
|
39
|
-
|
|
38
|
+
from disdrodb.configs import (
|
|
39
|
+
define_configs,
|
|
40
|
+
get_data_archive_dir,
|
|
41
|
+
get_metadata_archive_dir,
|
|
42
|
+
get_model_options,
|
|
43
|
+
get_product_options,
|
|
44
|
+
get_scattering_table_dir,
|
|
45
|
+
)
|
|
40
46
|
from disdrodb.data_transfer.download_data import download_archive, download_station
|
|
41
47
|
from disdrodb.docs import open_documentation, open_sensor_documentation
|
|
42
|
-
from disdrodb.l0
|
|
48
|
+
from disdrodb.l0 import (
|
|
49
|
+
available_readers,
|
|
50
|
+
generate_l0a,
|
|
51
|
+
generate_l0b,
|
|
52
|
+
generate_l0b_from_nc,
|
|
53
|
+
get_reader,
|
|
54
|
+
get_station_reader,
|
|
55
|
+
)
|
|
56
|
+
from disdrodb.l1 import generate_l1
|
|
57
|
+
from disdrodb.l2 import generate_l2_radar, generate_l2e, generate_l2m
|
|
43
58
|
from disdrodb.metadata import download_metadata_archive, read_metadata_archive, read_station_metadata
|
|
44
59
|
from disdrodb.metadata.checks import (
|
|
45
60
|
check_metadata_archive,
|
|
@@ -62,22 +77,25 @@ from disdrodb.routines import (
|
|
|
62
77
|
run_l2m,
|
|
63
78
|
run_l2m_station,
|
|
64
79
|
)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
DIAMETER_COORDS
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
OPTICAL_SENSORS
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
from disdrodb.utils.manipulations import convert_from_decibel as idecibel
|
|
81
|
+
from disdrodb.utils.manipulations import convert_to_decibel as decibel
|
|
82
|
+
|
|
83
|
+
from .constants import (
|
|
84
|
+
ARCHIVE_VERSION,
|
|
85
|
+
CONVENTIONS,
|
|
86
|
+
COORDINATES,
|
|
87
|
+
DIAMETER_COORDS,
|
|
88
|
+
DIAMETER_DIMENSION,
|
|
89
|
+
GEOLOCATION_COORDS,
|
|
90
|
+
IMPACT_SENSORS,
|
|
91
|
+
OPTICAL_SENSORS,
|
|
92
|
+
PRODUCTS,
|
|
93
|
+
PRODUCTS_ARGUMENTS,
|
|
94
|
+
PRODUCTS_REQUIREMENTS,
|
|
95
|
+
SOFTWARE_VERSION,
|
|
96
|
+
VELOCITY_COORDS,
|
|
97
|
+
VELOCITY_DIMENSION,
|
|
98
|
+
)
|
|
81
99
|
|
|
82
100
|
|
|
83
101
|
def available_products():
|
|
@@ -85,21 +103,21 @@ def available_products():
|
|
|
85
103
|
return PRODUCTS
|
|
86
104
|
|
|
87
105
|
|
|
88
|
-
PRODUCTS_ARGUMENTS = {
|
|
89
|
-
"L2E": ["rolling", "sample_interval"],
|
|
90
|
-
"L2M": ["rolling", "sample_interval", "model_name"],
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
PRODUCTS_REQUIREMENTS = {
|
|
94
|
-
"L0A": "RAW",
|
|
95
|
-
"L0B": "L0A",
|
|
96
|
-
"L0C": "L0B",
|
|
97
|
-
"L1": "L0C",
|
|
98
|
-
"L2E": "L1",
|
|
99
|
-
"L2M": "L2E",
|
|
100
|
-
}
|
|
101
|
-
|
|
102
106
|
__all__ = [
|
|
107
|
+
"ARCHIVE_VERSION",
|
|
108
|
+
"CONVENTIONS",
|
|
109
|
+
"COORDINATES",
|
|
110
|
+
"DIAMETER_COORDS",
|
|
111
|
+
"DIAMETER_DIMENSION",
|
|
112
|
+
"GEOLOCATION_COORDS",
|
|
113
|
+
"IMPACT_SENSORS",
|
|
114
|
+
"OPTICAL_SENSORS",
|
|
115
|
+
"PRODUCTS",
|
|
116
|
+
"PRODUCTS_ARGUMENTS",
|
|
117
|
+
"PRODUCTS_REQUIREMENTS",
|
|
118
|
+
"SOFTWARE_VERSION",
|
|
119
|
+
"VELOCITY_COORDS",
|
|
120
|
+
"VELOCITY_DIMENSION",
|
|
103
121
|
"available_campaigns",
|
|
104
122
|
"available_data_sources",
|
|
105
123
|
"available_readers",
|
|
@@ -108,15 +126,27 @@ __all__ = [
|
|
|
108
126
|
"check_metadata_archive",
|
|
109
127
|
"check_metadata_archive_geolocation",
|
|
110
128
|
"check_station_metadata",
|
|
129
|
+
"decibel",
|
|
111
130
|
"define_configs",
|
|
112
131
|
"download_archive",
|
|
113
132
|
"download_metadata_archive",
|
|
114
133
|
"download_station",
|
|
115
134
|
"find_files",
|
|
135
|
+
"generate_l0a",
|
|
136
|
+
"generate_l0b",
|
|
137
|
+
"generate_l0b_from_nc",
|
|
138
|
+
"generate_l1",
|
|
139
|
+
"generate_l2_radar",
|
|
140
|
+
"generate_l2e",
|
|
141
|
+
"generate_l2m",
|
|
116
142
|
"get_data_archive_dir",
|
|
117
143
|
"get_metadata_archive_dir",
|
|
144
|
+
"get_model_options",
|
|
145
|
+
"get_product_options",
|
|
118
146
|
"get_reader",
|
|
147
|
+
"get_scattering_table_dir",
|
|
119
148
|
"get_station_reader",
|
|
149
|
+
"idecibel",
|
|
120
150
|
"open_dataset",
|
|
121
151
|
"open_documentation",
|
|
122
152
|
"open_logs_directory",
|
|
@@ -22,13 +22,13 @@ See https://donfig.readthedocs.io/en/latest/configuration.html for more info.
|
|
|
22
22
|
"""
|
|
23
23
|
from donfig import Config
|
|
24
24
|
|
|
25
|
-
from disdrodb.configs import
|
|
25
|
+
from disdrodb.configs import read_configs
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
def
|
|
28
|
+
def _get_default_configs():
|
|
29
29
|
"""Retrieve the default DISDRODB settings from the ``.config_disdrodb.yml`` file."""
|
|
30
30
|
try:
|
|
31
|
-
config_dict =
|
|
31
|
+
config_dict = read_configs()
|
|
32
32
|
config_dict = {key: value for key, value in config_dict.items() if value is not None}
|
|
33
33
|
except Exception:
|
|
34
34
|
config_dict = {}
|
|
@@ -38,11 +38,12 @@ def _get_disdrodb_default_configs():
|
|
|
38
38
|
_CONFIG_DEFAULTS = {
|
|
39
39
|
"data_archive_dir": None,
|
|
40
40
|
"metadata_archive_dir": None,
|
|
41
|
+
"scattering_table_dir": None,
|
|
41
42
|
"zenodo_sandbox_token": None,
|
|
42
43
|
"zenodo_token": None,
|
|
43
44
|
"folder_partitioning": "year/month",
|
|
44
45
|
}
|
|
45
|
-
_CONFIG_DEFAULTS.update(
|
|
46
|
+
_CONFIG_DEFAULTS.update(_get_default_configs())
|
|
46
47
|
|
|
47
48
|
_CONFIG_PATHS = []
|
|
48
49
|
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
# file generated by setuptools-scm
|
|
2
2
|
# don't change, don't track in version control
|
|
3
3
|
|
|
4
|
-
__all__ = [
|
|
4
|
+
__all__ = [
|
|
5
|
+
"__version__",
|
|
6
|
+
"__version_tuple__",
|
|
7
|
+
"version",
|
|
8
|
+
"version_tuple",
|
|
9
|
+
"__commit_id__",
|
|
10
|
+
"commit_id",
|
|
11
|
+
]
|
|
5
12
|
|
|
6
13
|
TYPE_CHECKING = False
|
|
7
14
|
if TYPE_CHECKING:
|
|
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
|
|
|
9
16
|
from typing import Union
|
|
10
17
|
|
|
11
18
|
VERSION_TUPLE = Tuple[Union[int, str], ...]
|
|
19
|
+
COMMIT_ID = Union[str, None]
|
|
12
20
|
else:
|
|
13
21
|
VERSION_TUPLE = object
|
|
22
|
+
COMMIT_ID = object
|
|
14
23
|
|
|
15
24
|
version: str
|
|
16
25
|
__version__: str
|
|
17
26
|
__version_tuple__: VERSION_TUPLE
|
|
18
27
|
version_tuple: VERSION_TUPLE
|
|
28
|
+
commit_id: COMMIT_ID
|
|
29
|
+
__commit_id__: COMMIT_ID
|
|
19
30
|
|
|
20
|
-
__version__ = version = '0.1.
|
|
21
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
31
|
+
__version__ = version = '0.1.3'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 1, 3)
|
|
33
|
+
|
|
34
|
+
__commit_id__ = commit_id = 'g44c8701a4'
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# -----------------------------------------------------------------------------.
|
|
2
|
+
# Copyright (c) 2021-2023 DISDRODB developers
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
# -----------------------------------------------------------------------------.
|
|
17
|
+
"""This directory defines DISDRODB xarray accessors."""
|
|
18
|
+
from .methods import DISDRODB_DataArray_Accessor, DISDRODB_Dataset_Accessor
|
|
19
|
+
|
|
20
|
+
__all__ = ["DISDRODB_DataArray_Accessor", "DISDRODB_Dataset_Accessor"]
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# -----------------------------------------------------------------------------.
|
|
2
|
+
# Copyright (c) 2021-2023 DISDRODB developers
|
|
3
|
+
#
|
|
4
|
+
# This program is free software: you can redistribute it and/or modify
|
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
|
7
|
+
# (at your option) any later version.
|
|
8
|
+
#
|
|
9
|
+
# This program is distributed in the hope that it will be useful,
|
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
# GNU General Public License for more details.
|
|
13
|
+
#
|
|
14
|
+
# You should have received a copy of the GNU General Public License
|
|
15
|
+
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
# -----------------------------------------------------------------------------.
|
|
17
|
+
"""This module defines DISDRODB xarray accessors."""
|
|
18
|
+
import xarray as xr
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class DISDRODB_Base_Accessor:
|
|
22
|
+
"""DISDRODB Xarray Base Accessor."""
|
|
23
|
+
|
|
24
|
+
def __init__(self, xarray_obj):
|
|
25
|
+
if not isinstance(xarray_obj, (xr.DataArray, xr.Dataset)):
|
|
26
|
+
raise TypeError("The 'gpm' accessor is available only for xarray.Dataset and xarray.DataArray.")
|
|
27
|
+
self._obj = xarray_obj
|
|
28
|
+
|
|
29
|
+
@property
|
|
30
|
+
def start_time(self):
|
|
31
|
+
"""Return start time."""
|
|
32
|
+
from disdrodb.api.checks import check_time
|
|
33
|
+
|
|
34
|
+
if "time" in self._obj.coords:
|
|
35
|
+
start_time = self._obj["time"].to_numpy()[0]
|
|
36
|
+
else:
|
|
37
|
+
raise ValueError("Time coordinate not found")
|
|
38
|
+
return check_time(start_time)
|
|
39
|
+
|
|
40
|
+
@property
|
|
41
|
+
def end_time(self):
|
|
42
|
+
"""Return end time."""
|
|
43
|
+
from disdrodb.api.checks import check_time
|
|
44
|
+
|
|
45
|
+
if "time" in self._obj.coords:
|
|
46
|
+
end_time = self._obj["time"].to_numpy()[-1]
|
|
47
|
+
else:
|
|
48
|
+
raise ValueError("Time coordinate not found")
|
|
49
|
+
return check_time(end_time)
|
|
50
|
+
|
|
51
|
+
@property
|
|
52
|
+
def sample_interval(self):
|
|
53
|
+
"""Return the sample interval in seconds."""
|
|
54
|
+
from disdrodb.utils.time import ensure_sample_interval_in_seconds
|
|
55
|
+
|
|
56
|
+
if "sample_interval" not in self._obj.coords:
|
|
57
|
+
raise ValueError("The sample interval is not specified in the xarray object.")
|
|
58
|
+
return int(ensure_sample_interval_in_seconds(self._obj["sample_interval"].to_numpy()))
|
|
59
|
+
|
|
60
|
+
@property
|
|
61
|
+
def diameter_bin_edges(self):
|
|
62
|
+
"""Return diameter bin edges."""
|
|
63
|
+
from disdrodb.utils.manipulations import get_diameter_bin_edges
|
|
64
|
+
|
|
65
|
+
return get_diameter_bin_edges(self._obj)
|
|
66
|
+
|
|
67
|
+
def regularize(self):
|
|
68
|
+
"""Regularize timesteps."""
|
|
69
|
+
from disdrodb.utils.time import regularize_dataset
|
|
70
|
+
|
|
71
|
+
sample_interval = self._obj.disdrodb.sample_interval
|
|
72
|
+
return regularize_dataset(self._obj, freq=f"{sample_interval}s")
|
|
73
|
+
|
|
74
|
+
def isel(self, indexers=None, drop=False, **indexers_kwargs):
|
|
75
|
+
"""Perform index-based dimension selection."""
|
|
76
|
+
from disdrodb.utils.subsetting import isel
|
|
77
|
+
|
|
78
|
+
return isel(self._obj, indexers=indexers, drop=drop, **indexers_kwargs)
|
|
79
|
+
|
|
80
|
+
def sel(self, indexers=None, drop=False, method=None, **indexers_kwargs):
|
|
81
|
+
"""Perform value-based coordinate selection."""
|
|
82
|
+
from disdrodb.utils.subsetting import sel
|
|
83
|
+
|
|
84
|
+
return sel(self._obj, indexers=indexers, drop=drop, method=method, **indexers_kwargs)
|
|
85
|
+
|
|
86
|
+
def align(self, *args):
|
|
87
|
+
"""Align DISDRODB products over time, velocity and diameter dimensions."""
|
|
88
|
+
from disdrodb.utils.subsetting import align
|
|
89
|
+
|
|
90
|
+
return align(self._obj, *args)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
@xr.register_dataset_accessor("disdrodb")
|
|
94
|
+
class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
95
|
+
"""DISDRODB Xarray Dataset Accessor."""
|
|
96
|
+
|
|
97
|
+
def __init__(self, xarray_obj):
|
|
98
|
+
super().__init__(xarray_obj)
|
|
99
|
+
|
|
100
|
+
def resample(self, accumulation_interval, rolling=True):
|
|
101
|
+
"""Resample a L1 or L2 DISDRODB Product."""
|
|
102
|
+
from disdrodb.l1.resampling import resample_dataset
|
|
103
|
+
|
|
104
|
+
sample_interval = self._obj.disdrodb.sample_interval
|
|
105
|
+
ds = resample_dataset(
|
|
106
|
+
self._obj,
|
|
107
|
+
sample_interval=sample_interval,
|
|
108
|
+
accumulation_interval=accumulation_interval,
|
|
109
|
+
rolling=rolling,
|
|
110
|
+
)
|
|
111
|
+
return ds
|
|
112
|
+
|
|
113
|
+
def plot_nd(self, **kwargs):
|
|
114
|
+
"""Plot drop number concentration N(D) timeseries."""
|
|
115
|
+
from disdrodb.viz.plots import plot_nd
|
|
116
|
+
|
|
117
|
+
plot_nd(self._obj, **kwargs)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
@xr.register_dataarray_accessor("disdrodb")
|
|
121
|
+
class DISDRODB_DataArray_Accessor(DISDRODB_Base_Accessor):
|
|
122
|
+
"""DISDRODB Xarray DataArray Accessor."""
|
|
123
|
+
|
|
124
|
+
def __init__(self, xarray_obj):
|
|
125
|
+
super().__init__(xarray_obj)
|
|
@@ -17,9 +17,12 @@
|
|
|
17
17
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
18
18
|
# -----------------------------------------------------------------------------.
|
|
19
19
|
"""DISDRODB Checks Functions."""
|
|
20
|
+
import datetime
|
|
21
|
+
import difflib
|
|
20
22
|
import logging
|
|
21
23
|
import os
|
|
22
24
|
import re
|
|
25
|
+
import sys
|
|
23
26
|
import warnings
|
|
24
27
|
|
|
25
28
|
import numpy as np
|
|
@@ -30,8 +33,10 @@ from disdrodb.api.path import (
|
|
|
30
33
|
define_issue_filepath,
|
|
31
34
|
define_metadata_filepath,
|
|
32
35
|
)
|
|
36
|
+
from disdrodb.constants import PRODUCTS, PRODUCTS_ARGUMENTS
|
|
33
37
|
from disdrodb.utils.directories import (
|
|
34
38
|
ensure_string_path,
|
|
39
|
+
list_directories,
|
|
35
40
|
list_files,
|
|
36
41
|
)
|
|
37
42
|
|
|
@@ -83,7 +88,7 @@ def check_path_is_a_directory(dir_path, path_name=""):
|
|
|
83
88
|
|
|
84
89
|
def check_directories_inside(dir_path):
|
|
85
90
|
"""Check there are directories inside the specified ``dir_path``."""
|
|
86
|
-
dir_paths =
|
|
91
|
+
dir_paths = list_directories(dir_path, recursive=False)
|
|
87
92
|
if len(dir_paths) == 0:
|
|
88
93
|
raise ValueError(f"There are not directories within {dir_path}")
|
|
89
94
|
|
|
@@ -106,6 +111,15 @@ def check_metadata_archive_dir(metadata_archive_dir: str):
|
|
|
106
111
|
return metadata_archive_dir
|
|
107
112
|
|
|
108
113
|
|
|
114
|
+
def check_scattering_table_dir(scattering_table_dir: str):
|
|
115
|
+
"""Raise an error if the directory does not exist."""
|
|
116
|
+
scattering_table_dir = str(scattering_table_dir) # convert Pathlib to string
|
|
117
|
+
scattering_table_dir = os.path.normpath(scattering_table_dir)
|
|
118
|
+
if not os.path.exists(scattering_table_dir):
|
|
119
|
+
raise ValueError(f"The DISDRODB T-Matrix scattering tables directory {scattering_table_dir} does not exists.")
|
|
120
|
+
return scattering_table_dir
|
|
121
|
+
|
|
122
|
+
|
|
109
123
|
def check_measurement_interval(measurement_interval):
|
|
110
124
|
"""Check measurement interval validity."""
|
|
111
125
|
if isinstance(measurement_interval, str) and measurement_interval == "":
|
|
@@ -216,8 +230,6 @@ def check_data_source(data_source):
|
|
|
216
230
|
|
|
217
231
|
def check_product(product):
|
|
218
232
|
"""Check DISDRODB product."""
|
|
219
|
-
from disdrodb import PRODUCTS
|
|
220
|
-
|
|
221
233
|
if not isinstance(product, str):
|
|
222
234
|
raise TypeError("`product` must be a string.")
|
|
223
235
|
valid_products = PRODUCTS
|
|
@@ -248,8 +260,6 @@ def check_product_kwargs(product, product_kwargs):
|
|
|
248
260
|
ValueError
|
|
249
261
|
If required arguments are missing or if there are unexpected extra arguments.
|
|
250
262
|
"""
|
|
251
|
-
from disdrodb import PRODUCTS_ARGUMENTS
|
|
252
|
-
|
|
253
263
|
required = set(PRODUCTS_ARGUMENTS.get(product, []))
|
|
254
264
|
provided = set(product_kwargs.keys())
|
|
255
265
|
missing = required - provided
|
|
@@ -267,8 +277,6 @@ def check_product_kwargs(product, product_kwargs):
|
|
|
267
277
|
|
|
268
278
|
def select_required_product_kwargs(product, product_kwargs):
|
|
269
279
|
"""Select the required product arguments."""
|
|
270
|
-
from disdrodb import PRODUCTS_ARGUMENTS
|
|
271
|
-
|
|
272
280
|
required = set(PRODUCTS_ARGUMENTS.get(product, []))
|
|
273
281
|
provided = set(product_kwargs.keys())
|
|
274
282
|
missing = required - provided
|
|
@@ -368,11 +376,50 @@ def has_available_data(
|
|
|
368
376
|
return False
|
|
369
377
|
|
|
370
378
|
# If no files, return False
|
|
371
|
-
filepaths = list_files(data_dir,
|
|
379
|
+
filepaths = list_files(data_dir, recursive=True)
|
|
372
380
|
nfiles = len(filepaths)
|
|
373
381
|
return nfiles >= 1
|
|
374
382
|
|
|
375
383
|
|
|
384
|
+
def check_station_inputs(
|
|
385
|
+
data_source,
|
|
386
|
+
campaign_name,
|
|
387
|
+
station_name,
|
|
388
|
+
metadata_archive_dir=None,
|
|
389
|
+
):
|
|
390
|
+
"""Check validity of stations inputs."""
|
|
391
|
+
import disdrodb
|
|
392
|
+
|
|
393
|
+
# Check data source
|
|
394
|
+
valid_data_sources = disdrodb.available_data_sources(metadata_archive_dir=metadata_archive_dir)
|
|
395
|
+
if data_source not in valid_data_sources:
|
|
396
|
+
matches = difflib.get_close_matches(data_source, valid_data_sources, n=1, cutoff=0.4)
|
|
397
|
+
suggestion = f"Did you mean '{matches[0]}'?" if matches else ""
|
|
398
|
+
raise ValueError(f"DISDRODB does not include a data source named {data_source}. {suggestion}")
|
|
399
|
+
# Check campaign name
|
|
400
|
+
valid_campaigns = disdrodb.available_campaigns(data_sources=data_source, metadata_archive_dir=metadata_archive_dir)
|
|
401
|
+
if campaign_name not in valid_campaigns:
|
|
402
|
+
matches = difflib.get_close_matches(campaign_name, valid_campaigns, n=1, cutoff=0.4)
|
|
403
|
+
suggestion = f"Did you mean campaign '{matches[0]}' ?" if matches else ""
|
|
404
|
+
raise ValueError(
|
|
405
|
+
f"The {data_source} data source does not include a campaign named {campaign_name}. {suggestion}",
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
# Check station name
|
|
409
|
+
valid_stations = disdrodb.available_stations(
|
|
410
|
+
data_sources=data_source,
|
|
411
|
+
campaign_names=campaign_name,
|
|
412
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
413
|
+
return_tuple=False,
|
|
414
|
+
)
|
|
415
|
+
if station_name not in valid_stations:
|
|
416
|
+
matches = difflib.get_close_matches(station_name, valid_stations, n=1, cutoff=0.4)
|
|
417
|
+
suggestion = f"Did you mean station '{matches[0]}'?" if matches else ""
|
|
418
|
+
raise ValueError(
|
|
419
|
+
f"The {data_source} {campaign_name} campaign does not have a station named {station_name}. {suggestion}",
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
|
|
376
423
|
def check_data_availability(
|
|
377
424
|
product,
|
|
378
425
|
data_source,
|
|
@@ -412,7 +459,6 @@ def check_metadata_file(metadata_archive_dir, data_source, campaign_name, statio
|
|
|
412
459
|
f"The metadata YAML file of {data_source} {campaign_name} {station_name} does not exist at"
|
|
413
460
|
f" {metadata_filepath}."
|
|
414
461
|
)
|
|
415
|
-
logger.error(msg)
|
|
416
462
|
raise ValueError(msg)
|
|
417
463
|
|
|
418
464
|
# Check validity
|
|
@@ -475,3 +521,87 @@ def check_issue_file(data_source, campaign_name, station_name, metadata_archive_
|
|
|
475
521
|
station_name=station_name,
|
|
476
522
|
)
|
|
477
523
|
return issue_filepath
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
def check_filepaths(filepaths):
|
|
527
|
+
"""Ensure filepaths is a list of string."""
|
|
528
|
+
if isinstance(filepaths, str):
|
|
529
|
+
filepaths = [filepaths]
|
|
530
|
+
if not isinstance(filepaths, list):
|
|
531
|
+
raise TypeError("Expecting a list of filepaths.")
|
|
532
|
+
return filepaths
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
def get_current_utc_time():
|
|
536
|
+
"""Get current UTC time."""
|
|
537
|
+
if sys.version_info >= (3, 11):
|
|
538
|
+
return datetime.datetime.now(datetime.UTC).replace(tzinfo=None)
|
|
539
|
+
return datetime.datetime.utcnow()
|
|
540
|
+
|
|
541
|
+
|
|
542
|
+
def check_start_end_time(start_time, end_time):
|
|
543
|
+
"""Check start_time and end_time value validity."""
|
|
544
|
+
start_time = check_time(start_time)
|
|
545
|
+
end_time = check_time(end_time)
|
|
546
|
+
|
|
547
|
+
# Check start_time and end_time are chronological
|
|
548
|
+
if start_time > end_time:
|
|
549
|
+
raise ValueError("Provide 'start_time' occurring before of 'end_time'.")
|
|
550
|
+
# Check start_time and end_time are in the past
|
|
551
|
+
if start_time > get_current_utc_time():
|
|
552
|
+
raise ValueError("Provide 'start_time' occurring in the past.")
|
|
553
|
+
if end_time > get_current_utc_time():
|
|
554
|
+
raise ValueError("Provide 'end_time' occurring in the past.")
|
|
555
|
+
return (start_time, end_time)
|
|
556
|
+
|
|
557
|
+
|
|
558
|
+
def check_time(time):
|
|
559
|
+
"""Check time validity.
|
|
560
|
+
|
|
561
|
+
It returns a :py:class:`datetime.datetime` object to seconds precision.
|
|
562
|
+
|
|
563
|
+
Parameters
|
|
564
|
+
----------
|
|
565
|
+
time : datetime.datetime, datetime.date, numpy.datetime64 or str
|
|
566
|
+
Time object.
|
|
567
|
+
Accepted types: ``datetime.datetime``, ``datetime.date``, ``numpy.datetime64`` or ``str``.
|
|
568
|
+
If string type, it expects the isoformat ``YYYY-MM-DD hh:mm:ss``.
|
|
569
|
+
|
|
570
|
+
Returns
|
|
571
|
+
-------
|
|
572
|
+
time: datetime.datetime
|
|
573
|
+
|
|
574
|
+
"""
|
|
575
|
+
if not isinstance(time, (datetime.datetime, datetime.date, np.datetime64, np.ndarray, str)):
|
|
576
|
+
raise TypeError(
|
|
577
|
+
"Specify time with datetime.datetime objects or a " "string of format 'YYYY-MM-DD hh:mm:ss'.",
|
|
578
|
+
)
|
|
579
|
+
|
|
580
|
+
# If numpy array with datetime64 (and size=1)
|
|
581
|
+
if isinstance(time, np.ndarray):
|
|
582
|
+
if np.issubdtype(time.dtype, np.datetime64):
|
|
583
|
+
if time.size == 1:
|
|
584
|
+
time = time[0].astype("datetime64[s]").tolist()
|
|
585
|
+
else:
|
|
586
|
+
raise ValueError("Expecting a single timestep!")
|
|
587
|
+
else:
|
|
588
|
+
raise ValueError("The numpy array does not have a numpy.datetime64 dtype!")
|
|
589
|
+
|
|
590
|
+
# If np.datetime64, convert to datetime.datetime
|
|
591
|
+
if isinstance(time, np.datetime64):
|
|
592
|
+
time = time.astype("datetime64[s]").tolist()
|
|
593
|
+
# If datetime.date, convert to datetime.datetime
|
|
594
|
+
if not isinstance(time, (datetime.datetime, str)):
|
|
595
|
+
time = datetime.datetime(time.year, time.month, time.day, 0, 0, 0)
|
|
596
|
+
if isinstance(time, str):
|
|
597
|
+
try:
|
|
598
|
+
time = datetime.datetime.fromisoformat(time)
|
|
599
|
+
except ValueError:
|
|
600
|
+
raise ValueError("The time string must have format 'YYYY-MM-DD hh:mm:ss'")
|
|
601
|
+
# If datetime object carries timezone that is not UTC, raise error
|
|
602
|
+
if time.tzinfo is not None:
|
|
603
|
+
if str(time.tzinfo) != "UTC":
|
|
604
|
+
raise ValueError("The datetime object must be in UTC timezone if timezone is given.")
|
|
605
|
+
# If UTC, strip timezone information
|
|
606
|
+
time = time.replace(tzinfo=None)
|
|
607
|
+
return time
|
|
@@ -23,6 +23,7 @@ import os
|
|
|
23
23
|
|
|
24
24
|
from disdrodb.api.checks import check_product, check_sensor_name
|
|
25
25
|
from disdrodb.api.path import define_config_dir
|
|
26
|
+
from disdrodb.utils.directories import list_directories
|
|
26
27
|
from disdrodb.utils.yaml import read_yaml
|
|
27
28
|
|
|
28
29
|
logger = logging.getLogger(__name__)
|
|
@@ -53,7 +54,7 @@ def get_sensor_configs_dir(sensor_name: str, product: str) -> str:
|
|
|
53
54
|
config_dir = define_config_dir(product=product)
|
|
54
55
|
config_sensor_dir = os.path.join(config_dir, sensor_name)
|
|
55
56
|
if not os.path.exists(config_sensor_dir):
|
|
56
|
-
list_sensors = sorted(
|
|
57
|
+
list_sensors = sorted(list_directories(config_dir, recursive=False, return_paths=False))
|
|
57
58
|
print(f"Available sensor_name are {list_sensors}")
|
|
58
59
|
raise ValueError(f"The config directory {config_sensor_dir} does not exist.")
|
|
59
60
|
return config_sensor_dir
|
|
@@ -102,4 +103,5 @@ def available_sensor_names() -> list:
|
|
|
102
103
|
Sorted list of the available sensors
|
|
103
104
|
"""
|
|
104
105
|
config_dir = define_config_dir(product="L0A")
|
|
105
|
-
|
|
106
|
+
list_sensors = sorted(list_directories(config_dir, recursive=False, return_paths=False))
|
|
107
|
+
return list_sensors
|