disdrodb 0.2.1__py3-none-any.whl → 0.4.0__py3-none-any.whl
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/__init__.py +3 -1
- disdrodb/_config.py +2 -3
- disdrodb/_version.py +2 -2
- disdrodb/accessor/__init__.py +2 -1
- disdrodb/accessor/methods.py +10 -9
- disdrodb/api/checks.py +3 -7
- disdrodb/api/configs.py +1 -3
- disdrodb/api/create_directories.py +4 -6
- disdrodb/api/info.py +1 -3
- disdrodb/api/io.py +233 -32
- disdrodb/api/path.py +3 -7
- disdrodb/cli/disdrodb_check_metadata_archive.py +3 -2
- disdrodb/cli/disdrodb_check_products_options.py +45 -0
- disdrodb/cli/disdrodb_create_summary.py +54 -28
- disdrodb/cli/disdrodb_create_summary_station.py +41 -20
- disdrodb/cli/disdrodb_data_archive_directory.py +2 -3
- disdrodb/cli/disdrodb_download_archive.py +50 -30
- disdrodb/cli/disdrodb_download_metadata_archive.py +28 -16
- disdrodb/cli/disdrodb_download_station.py +58 -29
- disdrodb/cli/disdrodb_initialize_station.py +43 -23
- disdrodb/cli/disdrodb_metadata_archive_directory.py +2 -3
- disdrodb/cli/disdrodb_open_data_archive.py +17 -13
- disdrodb/cli/disdrodb_open_logs_directory.py +31 -21
- disdrodb/cli/disdrodb_open_metadata_archive.py +26 -13
- disdrodb/cli/disdrodb_open_metadata_directory.py +34 -23
- disdrodb/cli/disdrodb_open_product_directory.py +39 -23
- disdrodb/cli/disdrodb_open_readers_directory.py +2 -3
- disdrodb/cli/disdrodb_run.py +189 -0
- disdrodb/cli/disdrodb_run_l0.py +61 -70
- disdrodb/cli/disdrodb_run_l0_station.py +50 -55
- disdrodb/cli/disdrodb_run_l0a.py +53 -51
- disdrodb/cli/disdrodb_run_l0a_station.py +41 -40
- disdrodb/cli/disdrodb_run_l0b.py +51 -51
- disdrodb/cli/disdrodb_run_l0b_station.py +40 -39
- disdrodb/cli/disdrodb_run_l0c.py +56 -53
- disdrodb/cli/disdrodb_run_l0c_station.py +44 -41
- disdrodb/cli/disdrodb_run_l1.py +55 -51
- disdrodb/cli/disdrodb_run_l1_station.py +43 -40
- disdrodb/cli/disdrodb_run_l2e.py +56 -51
- disdrodb/cli/disdrodb_run_l2e_station.py +44 -40
- disdrodb/cli/disdrodb_run_l2m.py +55 -51
- disdrodb/cli/disdrodb_run_l2m_station.py +43 -40
- disdrodb/cli/disdrodb_run_station.py +184 -0
- disdrodb/cli/disdrodb_upload_archive.py +51 -42
- disdrodb/cli/disdrodb_upload_station.py +42 -36
- disdrodb/configs.py +20 -16
- disdrodb/constants.py +5 -2
- disdrodb/data_transfer/__init__.py +1 -3
- disdrodb/data_transfer/download_data.py +45 -61
- disdrodb/data_transfer/upload_data.py +7 -11
- disdrodb/data_transfer/zenodo.py +2 -4
- disdrodb/docs.py +1 -3
- disdrodb/etc/configs/attributes.yaml +52 -2
- disdrodb/etc/configs/encodings.yaml +45 -1
- disdrodb/etc/products/L0C/ODM470/global.yaml +5 -0
- disdrodb/etc/products/L0C/global.yaml +5 -0
- disdrodb/etc/products/L1/ODM470/global.yaml +6 -0
- disdrodb/etc/products/L1/global.yaml +0 -13
- disdrodb/etc/products/L2E/LPM/1MIN.yaml +1 -0
- disdrodb/etc/products/L2E/LPM/global.yaml +36 -0
- disdrodb/etc/products/L2E/LPM_V0/1MIN.yaml +1 -0
- disdrodb/etc/products/L2E/LPM_V0/global.yaml +36 -0
- disdrodb/etc/products/L2E/ODM470/1MIN.yaml +1 -0
- disdrodb/etc/products/L2E/ODM470/global.yaml +36 -0
- disdrodb/etc/products/L2E/PARSIVEL/1MIN.yaml +1 -0
- disdrodb/etc/products/L2E/PARSIVEL/global.yaml +36 -0
- disdrodb/etc/products/L2E/PARSIVEL2/1MIN.yaml +1 -0
- disdrodb/etc/products/L2E/PARSIVEL2/global.yaml +36 -0
- disdrodb/etc/products/L2E/PWS100/1MIN.yaml +1 -0
- disdrodb/etc/products/L2E/PWS100/global.yaml +36 -0
- disdrodb/etc/products/L2E/RD80/1MIN.yaml +19 -0
- disdrodb/etc/products/L2E/SWS250/1MIN.yaml +19 -0
- disdrodb/etc/products/L2E/global.yaml +16 -2
- disdrodb/fall_velocity/__init__.py +47 -0
- disdrodb/fall_velocity/graupel.py +484 -0
- disdrodb/fall_velocity/hail.py +288 -0
- disdrodb/{l1/fall_velocity.py → fall_velocity/rain.py} +265 -44
- disdrodb/issue/__init__.py +1 -3
- disdrodb/issue/checks.py +2 -3
- disdrodb/issue/reader.py +2 -3
- disdrodb/issue/writer.py +2 -5
- disdrodb/l0/__init__.py +2 -1
- disdrodb/l0/check_configs.py +36 -29
- disdrodb/l0/check_standards.py +1 -4
- disdrodb/l0/configs/LPM/l0a_encodings.yml +17 -17
- disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +55 -55
- disdrodb/l0/configs/LPM/l0b_encodings.yml +17 -17
- disdrodb/l0/configs/LPM/raw_data_format.yml +17 -17
- disdrodb/l0/configs/LPM_V0/l0a_encodings.yml +2 -2
- disdrodb/l0/configs/LPM_V0/l0b_cf_attrs.yml +2 -2
- disdrodb/l0/configs/LPM_V0/l0b_encodings.yml +2 -2
- disdrodb/l0/configs/LPM_V0/raw_data_format.yml +2 -2
- disdrodb/l0/configs/ODM470/bins_diameter.yml +643 -0
- disdrodb/l0/configs/ODM470/bins_velocity.yml +0 -0
- disdrodb/l0/configs/ODM470/l0a_encodings.yml +11 -0
- disdrodb/l0/configs/ODM470/l0b_cf_attrs.yml +46 -0
- disdrodb/l0/configs/ODM470/l0b_encodings.yml +106 -0
- disdrodb/l0/configs/ODM470/raw_data_format.yml +111 -0
- disdrodb/l0/configs/PARSIVEL/l0b_cf_attrs.yml +1 -1
- disdrodb/l0/l0_reader.py +2 -3
- disdrodb/l0/l0a_processing.py +6 -8
- disdrodb/l0/l0b_nc_processing.py +3 -6
- disdrodb/l0/l0b_processing.py +2 -16
- disdrodb/l0/l0c_processing.py +29 -12
- disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +2 -1
- disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +18 -18
- disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +18 -18
- disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +18 -18
- disdrodb/l0/readers/LPM/GERMANY/DWD.py +244 -63
- disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +65 -23
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_AQ.py +277 -0
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_PI.py +19 -18
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_T.py +23 -19
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +19 -21
- disdrodb/l0/readers/LPM/KIT/CHWALA.py +19 -20
- disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_LPM_NC.py +1 -1
- disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_RWANDA_LPM_NC.py +18 -18
- disdrodb/l0/readers/LPM/NORWAY/HAUKELISETER_LPM.py +19 -20
- disdrodb/l0/readers/LPM/NORWAY/NMBU_LPM.py +19 -20
- disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +19 -20
- disdrodb/l0/readers/LPM/SLOVENIA/UL.py +19 -20
- disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +19 -20
- disdrodb/l0/readers/LPM/UK/DIVEN.py +1 -1
- disdrodb/l0/readers/LPM/UK/WITHWORTH_LPM.py +19 -20
- disdrodb/l0/readers/LPM/USA/CHARLESTON.py +19 -20
- disdrodb/l0/readers/LPM/USA/DEVEX.py +255 -0
- disdrodb/l0/readers/LPM_V0/BELGIUM/ULIEGE.py +3 -5
- disdrodb/l0/readers/LPM_V0/ITALY/GID_LPM_V0.py +4 -3
- disdrodb/l0/readers/ODM470/OCEAN/OCEANRAIN.py +124 -0
- disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +1 -1
- disdrodb/l0/readers/PARSIVEL/BASQUECOUNTRY/EUSKALMET_OTT.py +2 -1
- disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +2 -3
- disdrodb/l0/readers/PARSIVEL/EPFL/ARCTIC_2021.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/COMMON_2011.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/DAVOS_2009_2011.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_2009.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2008.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2011.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2012.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/GENEPI_2007.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007_2.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HPICONET_2010.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP2.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP4.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2018.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2019.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/PARSIVEL_2007.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/PLATO_2019.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019_WJF.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/RIETHOLZBACH_2011.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +2 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/UNIL_2022.py +2 -1
- disdrodb/l0/readers/PARSIVEL/JAPAN/JMA.py +1 -1
- disdrodb/l0/readers/PARSIVEL/KOREA/ICEPOP_MSC.py +159 -0
- disdrodb/l0/readers/PARSIVEL/NASA/LPVEX.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NASA/MC3E.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NCAR/OWLES_MIPS.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NCAR/PLOWS_MIPS.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +1 -1
- disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +1 -3
- disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +1 -3
- disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/BASQUECOUNTRY/EUSKALMET_OTT2.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +2 -3
- disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/CANADA/UQAM_NC.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_nc.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +2 -3
- disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +2 -2
- disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +1 -3
- disdrodb/l0/readers/PARSIVEL2/GREECE/NOA.py +4 -3
- disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +1 -3
- disdrodb/l0/readers/PARSIVEL2/ITALY/HYDROX.py +6 -3
- disdrodb/l0/readers/PARSIVEL2/JAPAN/PRECIP.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/KIT/BURKINA_FASO.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/KIT/TEAMX.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/KOREA/ICEPOP_MSC.py +161 -0
- disdrodb/l0/readers/PARSIVEL2/KOREA/ICEPOP_UCLM.py +126 -0
- disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/MPI/BCO_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/MPI/BOWTIE.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NASA/APU.py +3 -1
- disdrodb/l0/readers/PARSIVEL2/NASA/NSSTC.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_MIPS.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py +2 -3
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT_NC.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NORWAY/UIB.py +10 -2
- disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PAGASA.py +2 -3
- disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/SPAIN/CR1000DL.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/SPAIN/GRANADA.py +2 -3
- disdrodb/l0/readers/PARSIVEL2/SPAIN/LIAISE.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/SWEDEN/SMHI.py +2 -1
- disdrodb/l0/readers/PARSIVEL2/USA/CSU.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/USA/CW3E.py +2 -1
- disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +2 -3
- disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +2 -3
- disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +2 -1
- disdrodb/l0/readers/RD80/BRAZIL/ATTO_RD80.py +1 -3
- disdrodb/l0/readers/RD80/BRAZIL/CHUVA_RD80.py +1 -3
- disdrodb/l0/readers/RD80/BRAZIL/GOAMAZON_RD80.py +1 -3
- disdrodb/l0/readers/RD80/NCAR/CINDY_2011_RD80.py +1 -3
- disdrodb/l0/readers/RD80/NCAR/RELAMPAGO_RD80.py +1 -3
- disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +2 -3
- disdrodb/l0/readers/SWS250/BELGIUM/KMI.py +2 -3
- disdrodb/l0/readers/template_reader_raw_netcdf_data.py +2 -3
- disdrodb/l0/readers/template_reader_raw_text_data.py +2 -3
- disdrodb/l0/standards.py +4 -5
- disdrodb/l0/template_tools.py +7 -11
- disdrodb/l1/__init__.py +2 -1
- disdrodb/l1/classification.py +914 -0
- disdrodb/l1/processing.py +36 -106
- disdrodb/l1/resampling.py +13 -3
- disdrodb/l1_env/__init__.py +1 -1
- disdrodb/l1_env/routines.py +7 -6
- disdrodb/l2/__init__.py +2 -1
- disdrodb/l2/empirical_dsd.py +58 -31
- disdrodb/l2/processing.py +327 -61
- disdrodb/metadata/checks.py +10 -13
- disdrodb/metadata/download.py +5 -4
- disdrodb/metadata/geolocation.py +3 -4
- disdrodb/metadata/info.py +3 -5
- disdrodb/metadata/manipulation.py +1 -3
- disdrodb/metadata/reader.py +1 -3
- disdrodb/metadata/search.py +1 -4
- disdrodb/metadata/standards.py +1 -3
- disdrodb/metadata/writer.py +1 -3
- disdrodb/physics/__init__.py +17 -0
- disdrodb/physics/atmosphere.py +273 -0
- disdrodb/physics/water.py +131 -0
- disdrodb/physics/wrappers.py +63 -0
- disdrodb/psd/__init__.py +1 -2
- disdrodb/psd/fitting.py +23 -9
- disdrodb/psd/models.py +2 -1
- disdrodb/routines/__init__.py +6 -1
- disdrodb/routines/l0.py +39 -25
- disdrodb/routines/l1.py +23 -16
- disdrodb/routines/l2.py +12 -9
- disdrodb/routines/options.py +117 -73
- disdrodb/routines/options_validation.py +728 -0
- disdrodb/routines/wrappers.py +460 -40
- disdrodb/scattering/__init__.py +1 -2
- disdrodb/scattering/axis_ratio.py +6 -6
- disdrodb/scattering/permittivity.py +9 -8
- disdrodb/scattering/routines.py +33 -15
- disdrodb/summary/__init__.py +1 -1
- disdrodb/summary/routines.py +95 -30
- disdrodb/utils/__init__.py +1 -1
- disdrodb/utils/archiving.py +18 -10
- disdrodb/utils/attrs.py +7 -5
- disdrodb/utils/cli.py +8 -10
- disdrodb/utils/compression.py +10 -13
- disdrodb/utils/coords.py +45 -0
- disdrodb/utils/dask.py +7 -5
- disdrodb/utils/dataframe.py +5 -6
- disdrodb/utils/decorators.py +3 -4
- disdrodb/utils/dict.py +1 -1
- disdrodb/utils/directories.py +5 -7
- disdrodb/utils/encoding.py +4 -5
- disdrodb/utils/event.py +1 -1
- disdrodb/utils/list.py +1 -3
- disdrodb/utils/logger.py +1 -3
- disdrodb/utils/manipulations.py +175 -4
- disdrodb/utils/pydantic.py +81 -0
- disdrodb/utils/routines.py +2 -3
- disdrodb/utils/subsetting.py +1 -1
- disdrodb/utils/time.py +6 -4
- disdrodb/utils/warnings.py +2 -3
- disdrodb/utils/writer.py +5 -3
- disdrodb/utils/xarray.py +31 -3
- disdrodb/utils/yaml.py +1 -3
- disdrodb/viz/__init__.py +1 -1
- disdrodb/viz/plots.py +193 -18
- {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/METADATA +5 -4
- disdrodb-0.4.0.dist-info/RECORD +361 -0
- {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/entry_points.txt +3 -0
- disdrodb/etc/products/L1/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/LPM/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/LPM_V0/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/PARSIVEL/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/PARSIVEL2/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/PWS100/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/RD80/1MIN.yaml +0 -13
- disdrodb/etc/products/L1/SWS250/1MIN.yaml +0 -13
- disdrodb/etc/products/L2M/10MIN.yaml +0 -12
- disdrodb/l1/beard_model.py +0 -662
- disdrodb/l1/filters.py +0 -205
- disdrodb-0.2.1.dist-info/RECORD +0 -329
- {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/WHEEL +0 -0
- {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/top_level.txt +0 -0
disdrodb/psd/models.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -----------------------------------------------------------------------------.
|
|
2
|
-
# Copyright (c) 2021-
|
|
2
|
+
# Copyright (c) 2021-2026 DISDRODB developers
|
|
3
3
|
#
|
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -24,6 +24,7 @@ Source code:
|
|
|
24
24
|
- https://github.com/wolfidan/pyradsim/blob/master/pyradsim/psd.py
|
|
25
25
|
|
|
26
26
|
"""
|
|
27
|
+
|
|
27
28
|
import importlib
|
|
28
29
|
|
|
29
30
|
import dask.array
|
disdrodb/routines/__init__.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -----------------------------------------------------------------------------.
|
|
2
|
-
# Copyright (c) 2021-
|
|
2
|
+
# Copyright (c) 2021-2026 DISDRODB developers
|
|
3
3
|
#
|
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -15,9 +15,11 @@
|
|
|
15
15
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
16
|
# -----------------------------------------------------------------------------.
|
|
17
17
|
"""DISDRODB L0 software."""
|
|
18
|
+
|
|
18
19
|
from disdrodb.routines.wrappers import (
|
|
19
20
|
create_summary,
|
|
20
21
|
create_summary_station,
|
|
22
|
+
run,
|
|
21
23
|
run_l0,
|
|
22
24
|
run_l0_station,
|
|
23
25
|
run_l0a,
|
|
@@ -32,11 +34,13 @@ from disdrodb.routines.wrappers import (
|
|
|
32
34
|
run_l2e_station,
|
|
33
35
|
run_l2m,
|
|
34
36
|
run_l2m_station,
|
|
37
|
+
run_station,
|
|
35
38
|
)
|
|
36
39
|
|
|
37
40
|
__all__ = [
|
|
38
41
|
"create_summary",
|
|
39
42
|
"create_summary_station",
|
|
43
|
+
"run",
|
|
40
44
|
"run_l0",
|
|
41
45
|
"run_l0_station",
|
|
42
46
|
"run_l0a",
|
|
@@ -51,4 +55,5 @@ __all__ = [
|
|
|
51
55
|
"run_l2e_station",
|
|
52
56
|
"run_l2m",
|
|
53
57
|
"run_l2m_station",
|
|
58
|
+
"run_station",
|
|
54
59
|
]
|
disdrodb/routines/l0.py
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
1
|
# -----------------------------------------------------------------------------.
|
|
4
|
-
# Copyright (c) 2021-
|
|
2
|
+
# Copyright (c) 2021-2026 DISDRODB developers
|
|
5
3
|
#
|
|
6
4
|
# This program is free software: you can redistribute it and/or modify
|
|
7
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -22,7 +20,6 @@ import datetime
|
|
|
22
20
|
import logging
|
|
23
21
|
import os
|
|
24
22
|
import time
|
|
25
|
-
from typing import Optional
|
|
26
23
|
|
|
27
24
|
from disdrodb.api.checks import check_measurement_intervals, check_sensor_name, check_station_inputs
|
|
28
25
|
from disdrodb.api.create_directories import (
|
|
@@ -50,6 +47,7 @@ from disdrodb.l0.l0b_nc_processing import sanitize_ds
|
|
|
50
47
|
from disdrodb.l0.l0b_processing import generate_l0b
|
|
51
48
|
from disdrodb.l0.l0c_processing import TOLERANCE_SECONDS, create_l0c_datasets
|
|
52
49
|
from disdrodb.metadata import read_station_metadata
|
|
50
|
+
from disdrodb.routines.options import L0CProcessingOptions
|
|
53
51
|
from disdrodb.utils.archiving import group_files_by_time_block
|
|
54
52
|
from disdrodb.utils.dask import execute_tasks_safely
|
|
55
53
|
from disdrodb.utils.decorators import delayed_if_parallel, single_threaded_if_parallel
|
|
@@ -329,6 +327,7 @@ def _generate_l0c(
|
|
|
329
327
|
# Processing info
|
|
330
328
|
metadata,
|
|
331
329
|
# Processing options
|
|
330
|
+
folder_partitioning,
|
|
332
331
|
force,
|
|
333
332
|
verbose,
|
|
334
333
|
parallel, # this is used only to initialize the correct logger !
|
|
@@ -336,8 +335,6 @@ def _generate_l0c(
|
|
|
336
335
|
"""Define L0C product processing."""
|
|
337
336
|
# Define product
|
|
338
337
|
product = "L0C"
|
|
339
|
-
# Define folder partitioning
|
|
340
|
-
folder_partitioning = get_folder_partitioning()
|
|
341
338
|
|
|
342
339
|
# Define product processing function
|
|
343
340
|
def core(
|
|
@@ -370,11 +367,16 @@ def _generate_l0c(
|
|
|
370
367
|
|
|
371
368
|
# Write a dataset for each sample interval
|
|
372
369
|
valid_datasets = []
|
|
373
|
-
for ds in dict_ds.
|
|
370
|
+
for sample_interval, ds in dict_ds.items():
|
|
374
371
|
# Write L0C netCDF4 dataset
|
|
375
372
|
if ds["time"].size > 1:
|
|
376
373
|
# Write L0C netCDF4 dataset
|
|
377
|
-
filename = define_l0c_filename(
|
|
374
|
+
filename = define_l0c_filename(
|
|
375
|
+
ds,
|
|
376
|
+
campaign_name=campaign_name,
|
|
377
|
+
station_name=station_name,
|
|
378
|
+
sample_interval=sample_interval,
|
|
379
|
+
)
|
|
378
380
|
folder_path = define_file_folder_path(ds, dir_path=data_dir, folder_partitioning=folder_partitioning)
|
|
379
381
|
filepath = os.path.join(folder_path, filename)
|
|
380
382
|
write_product(ds, filepath=filepath, force=force)
|
|
@@ -428,8 +430,8 @@ def run_l0a_station(
|
|
|
428
430
|
debugging_mode: bool = False,
|
|
429
431
|
parallel: bool = True,
|
|
430
432
|
# DISDRODB root directories
|
|
431
|
-
data_archive_dir:
|
|
432
|
-
metadata_archive_dir:
|
|
433
|
+
data_archive_dir: str | None = None,
|
|
434
|
+
metadata_archive_dir: str | None = None,
|
|
433
435
|
):
|
|
434
436
|
"""
|
|
435
437
|
Run the L0A processing of a specific DISDRODB station when invoked from the terminal.
|
|
@@ -623,8 +625,8 @@ def run_l0b_station(
|
|
|
623
625
|
parallel: bool = True,
|
|
624
626
|
debugging_mode: bool = False,
|
|
625
627
|
# DISDRODB root directories
|
|
626
|
-
data_archive_dir:
|
|
627
|
-
metadata_archive_dir:
|
|
628
|
+
data_archive_dir: str | None = None,
|
|
629
|
+
metadata_archive_dir: str | None = None,
|
|
628
630
|
):
|
|
629
631
|
"""
|
|
630
632
|
Run the L0B processing of a specific DISDRODB station when invoked from the terminal.
|
|
@@ -804,8 +806,8 @@ def run_l0c_station(
|
|
|
804
806
|
parallel: bool = True,
|
|
805
807
|
debugging_mode: bool = False,
|
|
806
808
|
# DISDRODB root directories
|
|
807
|
-
data_archive_dir:
|
|
808
|
-
metadata_archive_dir:
|
|
809
|
+
data_archive_dir: str | None = None,
|
|
810
|
+
metadata_archive_dir: str | None = None,
|
|
809
811
|
):
|
|
810
812
|
"""
|
|
811
813
|
Run the L0C processing of a specific DISDRODB station when invoked from the terminal.
|
|
@@ -873,15 +875,6 @@ def run_l0c_station(
|
|
|
873
875
|
station_name=station_name,
|
|
874
876
|
)
|
|
875
877
|
|
|
876
|
-
# -----------------------------------------------------------------.
|
|
877
|
-
# Retrieve metadata
|
|
878
|
-
metadata = read_station_metadata(
|
|
879
|
-
metadata_archive_dir=metadata_archive_dir,
|
|
880
|
-
data_source=data_source,
|
|
881
|
-
campaign_name=campaign_name,
|
|
882
|
-
station_name=station_name,
|
|
883
|
-
)
|
|
884
|
-
|
|
885
878
|
# ------------------------------------------------------------------------.
|
|
886
879
|
# Start processing
|
|
887
880
|
t_i = time.time()
|
|
@@ -925,10 +918,30 @@ def run_l0c_station(
|
|
|
925
918
|
if filepaths is None:
|
|
926
919
|
return
|
|
927
920
|
|
|
921
|
+
# -----------------------------------------------------------------.
|
|
922
|
+
# Read station metadata and sensor name
|
|
923
|
+
metadata = read_station_metadata(
|
|
924
|
+
metadata_archive_dir=metadata_archive_dir,
|
|
925
|
+
data_source=data_source,
|
|
926
|
+
campaign_name=campaign_name,
|
|
927
|
+
station_name=station_name,
|
|
928
|
+
)
|
|
929
|
+
sensor_name = metadata["sensor_name"]
|
|
930
|
+
|
|
931
|
+
# -------------------------------------------------------------------------.
|
|
932
|
+
# Retrieve L0C processing options
|
|
933
|
+
l0c_processing_options = L0CProcessingOptions(sensor_name=sensor_name)
|
|
934
|
+
product_frequency = l0c_processing_options.product_frequency
|
|
935
|
+
folder_partitioning = l0c_processing_options.folder_partitioning
|
|
936
|
+
|
|
928
937
|
# -------------------------------------------------------------------------.
|
|
929
938
|
# Retrieve dictionary with the required files per time block
|
|
930
|
-
#
|
|
931
|
-
list_event_info = group_files_by_time_block(
|
|
939
|
+
# - Default is "day". If "month", risk of going out of memory on small laptops
|
|
940
|
+
list_event_info = group_files_by_time_block(
|
|
941
|
+
filepaths=filepaths,
|
|
942
|
+
freq=product_frequency,
|
|
943
|
+
tolerance_seconds=TOLERANCE_SECONDS,
|
|
944
|
+
)
|
|
932
945
|
|
|
933
946
|
# -----------------------------------------------------------------.
|
|
934
947
|
# Generate L0C files
|
|
@@ -941,6 +954,7 @@ def run_l0c_station(
|
|
|
941
954
|
data_dir=data_dir,
|
|
942
955
|
logs_dir=logs_dir,
|
|
943
956
|
logs_filename=event_info["start_time"].strftime("%Y%m%dT%H%M%S"),
|
|
957
|
+
folder_partitioning=folder_partitioning,
|
|
944
958
|
# Processing options
|
|
945
959
|
force=force,
|
|
946
960
|
verbose=verbose,
|
disdrodb/routines/l1.py
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
1
|
# -----------------------------------------------------------------------------.
|
|
4
|
-
# Copyright (c) 2021-
|
|
2
|
+
# Copyright (c) 2021-2026 DISDRODB developers
|
|
5
3
|
#
|
|
6
4
|
# This program is free software: you can redistribute it and/or modify
|
|
7
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -22,7 +20,6 @@ import datetime
|
|
|
22
20
|
import logging
|
|
23
21
|
import os
|
|
24
22
|
import time
|
|
25
|
-
from typing import Optional
|
|
26
23
|
|
|
27
24
|
import pandas as pd
|
|
28
25
|
|
|
@@ -42,6 +39,8 @@ from disdrodb.configs import (
|
|
|
42
39
|
get_folder_partitioning,
|
|
43
40
|
get_metadata_archive_dir,
|
|
44
41
|
)
|
|
42
|
+
from disdrodb.constants import METEOROLOGICAL_VARIABLES
|
|
43
|
+
from disdrodb.l1.classification import TEMPERATURE_VARIABLES
|
|
45
44
|
from disdrodb.l1.processing import generate_l1
|
|
46
45
|
from disdrodb.l1.resampling import resample_dataset
|
|
47
46
|
from disdrodb.metadata.reader import read_station_metadata
|
|
@@ -144,15 +143,23 @@ def _generate_l1(
|
|
|
144
143
|
folder_partitioning,
|
|
145
144
|
):
|
|
146
145
|
"""Define L1 product processing."""
|
|
146
|
+
import dask
|
|
147
|
+
|
|
148
|
+
# Define variables to load
|
|
149
|
+
# - precip_flag used for OceanRain ODM470 data only
|
|
150
|
+
# - Missing variables in dataset are simply not selected
|
|
151
|
+
variables = ["raw_drop_number", "qc_time", "precip_flag", *TEMPERATURE_VARIABLES, *METEOROLOGICAL_VARIABLES]
|
|
152
|
+
|
|
147
153
|
# Open the L0C netCDF files
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
with dask.config.set(scheduler="single-threaded"): # synchronous
|
|
155
|
+
ds = open_netcdf_files(
|
|
156
|
+
filepaths,
|
|
157
|
+
start_time=start_time,
|
|
158
|
+
end_time=end_time,
|
|
159
|
+
variables=variables,
|
|
160
|
+
parallel=False,
|
|
161
|
+
compute=True,
|
|
162
|
+
)
|
|
156
163
|
|
|
157
164
|
# Define sample interval in seconds
|
|
158
165
|
sample_interval = ensure_sample_interval_in_seconds(ds["sample_interval"]).to_numpy().item()
|
|
@@ -231,8 +238,8 @@ def run_l1_station(
|
|
|
231
238
|
parallel: bool = True,
|
|
232
239
|
debugging_mode: bool = False,
|
|
233
240
|
# DISDRODB root directories
|
|
234
|
-
data_archive_dir:
|
|
235
|
-
metadata_archive_dir:
|
|
241
|
+
data_archive_dir: str | None = None,
|
|
242
|
+
metadata_archive_dir: str | None = None,
|
|
236
243
|
):
|
|
237
244
|
"""
|
|
238
245
|
Run the L1 processing of a specific DISDRODB station when invoked from the terminal.
|
|
@@ -313,7 +320,7 @@ def run_l1_station(
|
|
|
313
320
|
return
|
|
314
321
|
|
|
315
322
|
# -------------------------------------------------------------------------.
|
|
316
|
-
# Read station metadata and
|
|
323
|
+
# Read station metadata and sensor name
|
|
317
324
|
metadata = read_station_metadata(
|
|
318
325
|
metadata_archive_dir=metadata_archive_dir,
|
|
319
326
|
data_source=data_source,
|
|
@@ -334,6 +341,7 @@ def run_l1_station(
|
|
|
334
341
|
# Generate products for each temporal resolution
|
|
335
342
|
# temporal_resolution = "1MIN"
|
|
336
343
|
# temporal_resolution = "10MIN"
|
|
344
|
+
# temporal_resolution = "ROLL2MIN"
|
|
337
345
|
for temporal_resolution in l1_processing_options.temporal_resolutions:
|
|
338
346
|
# Print progress message
|
|
339
347
|
msg = f"Production of {product} {temporal_resolution} has started."
|
|
@@ -347,7 +355,6 @@ def run_l1_station(
|
|
|
347
355
|
|
|
348
356
|
# Retrieve product options
|
|
349
357
|
product_options = l1_processing_options.get_product_options(temporal_resolution)
|
|
350
|
-
product_options = product_options.get("product_options")
|
|
351
358
|
|
|
352
359
|
# ------------------------------------------------------------------.
|
|
353
360
|
# Create product directory
|
disdrodb/routines/l2.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -----------------------------------------------------------------------------.
|
|
2
|
-
# Copyright (c) 2021-
|
|
2
|
+
# Copyright (c) 2021-2026 DISDRODB developers
|
|
3
3
|
#
|
|
4
4
|
# This program is free software: you can redistribute it and/or modify
|
|
5
5
|
# it under the terms of the GNU General Public License as published by
|
|
@@ -21,7 +21,6 @@ import datetime
|
|
|
21
21
|
import logging
|
|
22
22
|
import os
|
|
23
23
|
import time
|
|
24
|
-
from typing import Optional
|
|
25
24
|
|
|
26
25
|
import pandas as pd
|
|
27
26
|
|
|
@@ -215,8 +214,8 @@ def run_l2e_station(
|
|
|
215
214
|
parallel: bool = True,
|
|
216
215
|
debugging_mode: bool = False,
|
|
217
216
|
# DISDRODB root directories
|
|
218
|
-
data_archive_dir:
|
|
219
|
-
metadata_archive_dir:
|
|
217
|
+
data_archive_dir: str | None = None,
|
|
218
|
+
metadata_archive_dir: str | None = None,
|
|
220
219
|
):
|
|
221
220
|
"""
|
|
222
221
|
Generate the L2E product of a specific DISDRODB station when invoked from the terminal.
|
|
@@ -297,6 +296,7 @@ def run_l2e_station(
|
|
|
297
296
|
campaign_name=campaign_name,
|
|
298
297
|
station_name=station_name,
|
|
299
298
|
)
|
|
299
|
+
sensor_name = metadata["sensor_name"]
|
|
300
300
|
sample_interval = metadata["measurement_interval"]
|
|
301
301
|
if isinstance(sample_interval, list):
|
|
302
302
|
sample_interval = min(sample_interval)
|
|
@@ -305,7 +305,7 @@ def run_l2e_station(
|
|
|
305
305
|
# Generate products for each temporal resolution
|
|
306
306
|
# temporal_resolution = "1MIN"
|
|
307
307
|
# temporal_resolution = "10MIN"
|
|
308
|
-
temporal_resolutions = get_product_temporal_resolutions(product)
|
|
308
|
+
temporal_resolutions = get_product_temporal_resolutions(product=product, sensor_name=sensor_name)
|
|
309
309
|
for temporal_resolution in temporal_resolutions:
|
|
310
310
|
|
|
311
311
|
# ------------------------------------------------------------------.
|
|
@@ -339,6 +339,7 @@ def run_l2e_station(
|
|
|
339
339
|
l2e_processing_options = L2ProcessingOptions(
|
|
340
340
|
product=product,
|
|
341
341
|
temporal_resolution=temporal_resolution,
|
|
342
|
+
sensor_name=sensor_name,
|
|
342
343
|
filepaths=filepaths,
|
|
343
344
|
parallel=parallel,
|
|
344
345
|
)
|
|
@@ -621,8 +622,8 @@ def run_l2m_station(
|
|
|
621
622
|
parallel: bool = True,
|
|
622
623
|
debugging_mode: bool = False,
|
|
623
624
|
# DISDRODB root directories
|
|
624
|
-
data_archive_dir:
|
|
625
|
-
metadata_archive_dir:
|
|
625
|
+
data_archive_dir: str | None = None,
|
|
626
|
+
metadata_archive_dir: str | None = None,
|
|
626
627
|
):
|
|
627
628
|
"""
|
|
628
629
|
Run the L2M processing of a specific DISDRODB station when invoked from the terminal.
|
|
@@ -692,6 +693,7 @@ def run_l2m_station(
|
|
|
692
693
|
campaign_name=campaign_name,
|
|
693
694
|
station_name=station_name,
|
|
694
695
|
)
|
|
696
|
+
sensor_name = metadata["sensor_name"]
|
|
695
697
|
sample_interval = metadata["measurement_interval"]
|
|
696
698
|
if isinstance(sample_interval, list):
|
|
697
699
|
sample_interval = min(sample_interval)
|
|
@@ -700,7 +702,7 @@ def run_l2m_station(
|
|
|
700
702
|
# Loop
|
|
701
703
|
# temporal_resolution = "1MIN"
|
|
702
704
|
# temporal_resolution = "10MIN"
|
|
703
|
-
temporal_resolutions = get_product_temporal_resolutions(product)
|
|
705
|
+
temporal_resolutions = get_product_temporal_resolutions(product=product, sensor_name=sensor_name)
|
|
704
706
|
for temporal_resolution in temporal_resolutions:
|
|
705
707
|
|
|
706
708
|
# ------------------------------------------------------------------.
|
|
@@ -734,6 +736,7 @@ def run_l2m_station(
|
|
|
734
736
|
l2m_processing_options = L2ProcessingOptions(
|
|
735
737
|
product=product,
|
|
736
738
|
temporal_resolution=temporal_resolution,
|
|
739
|
+
sensor_name=sensor_name,
|
|
737
740
|
filepaths=filepaths,
|
|
738
741
|
parallel=parallel,
|
|
739
742
|
)
|
|
@@ -766,7 +769,7 @@ def run_l2m_station(
|
|
|
766
769
|
# -----------------------------------------------------------------.
|
|
767
770
|
# Retrieve product-model options
|
|
768
771
|
product_options = copy.deepcopy(global_product_options)
|
|
769
|
-
model_options = get_model_options(
|
|
772
|
+
model_options = get_model_options(model_name=model_name)
|
|
770
773
|
product_options["product_options"].update(model_options)
|
|
771
774
|
|
|
772
775
|
psd_model = model_options["psd_model"]
|