disdrodb 0.2.1__py3-none-any.whl → 0.3.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 +1 -1
- disdrodb/_config.py +1 -3
- disdrodb/_version.py +2 -2
- disdrodb/accessor/__init__.py +1 -1
- disdrodb/accessor/methods.py +9 -9
- disdrodb/api/checks.py +1 -3
- disdrodb/api/configs.py +1 -3
- disdrodb/api/create_directories.py +4 -6
- disdrodb/api/info.py +1 -3
- disdrodb/api/io.py +9 -8
- disdrodb/api/path.py +1 -3
- disdrodb/cli/disdrodb_check_metadata_archive.py +2 -2
- disdrodb/cli/disdrodb_check_products_options.py +44 -0
- disdrodb/cli/disdrodb_create_summary.py +48 -22
- disdrodb/cli/disdrodb_create_summary_station.py +39 -18
- disdrodb/cli/disdrodb_data_archive_directory.py +1 -3
- disdrodb/cli/disdrodb_download_archive.py +45 -24
- disdrodb/cli/disdrodb_download_metadata_archive.py +27 -16
- disdrodb/cli/disdrodb_download_station.py +56 -26
- disdrodb/cli/disdrodb_initialize_station.py +40 -20
- disdrodb/cli/disdrodb_metadata_archive_directory.py +1 -3
- disdrodb/cli/disdrodb_open_data_archive.py +16 -11
- disdrodb/cli/disdrodb_open_logs_directory.py +29 -18
- disdrodb/cli/disdrodb_open_metadata_archive.py +25 -11
- disdrodb/cli/disdrodb_open_metadata_directory.py +32 -20
- disdrodb/cli/disdrodb_open_product_directory.py +38 -21
- disdrodb/cli/disdrodb_open_readers_directory.py +1 -3
- disdrodb/cli/disdrodb_run.py +189 -0
- disdrodb/cli/disdrodb_run_l0.py +55 -64
- disdrodb/cli/disdrodb_run_l0_station.py +47 -52
- disdrodb/cli/disdrodb_run_l0a.py +47 -45
- disdrodb/cli/disdrodb_run_l0a_station.py +38 -37
- disdrodb/cli/disdrodb_run_l0b.py +45 -45
- disdrodb/cli/disdrodb_run_l0b_station.py +37 -36
- disdrodb/cli/disdrodb_run_l0c.py +50 -47
- disdrodb/cli/disdrodb_run_l0c_station.py +41 -38
- disdrodb/cli/disdrodb_run_l1.py +49 -45
- disdrodb/cli/disdrodb_run_l1_station.py +40 -37
- disdrodb/cli/disdrodb_run_l2e.py +50 -45
- disdrodb/cli/disdrodb_run_l2e_station.py +41 -37
- disdrodb/cli/disdrodb_run_l2m.py +49 -45
- disdrodb/cli/disdrodb_run_l2m_station.py +40 -37
- disdrodb/cli/disdrodb_run_station.py +184 -0
- disdrodb/cli/disdrodb_upload_archive.py +45 -35
- disdrodb/cli/disdrodb_upload_station.py +39 -32
- disdrodb/configs.py +13 -8
- disdrodb/constants.py +4 -2
- disdrodb/data_transfer/__init__.py +1 -3
- disdrodb/data_transfer/download_data.py +38 -54
- disdrodb/data_transfer/upload_data.py +1 -3
- disdrodb/data_transfer/zenodo.py +1 -3
- 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 +46 -0
- disdrodb/fall_velocity/graupel.py +483 -0
- disdrodb/fall_velocity/hail.py +287 -0
- disdrodb/{l1/fall_velocity.py → fall_velocity/rain.py} +264 -44
- disdrodb/issue/__init__.py +1 -3
- disdrodb/issue/checks.py +1 -3
- disdrodb/issue/reader.py +1 -3
- disdrodb/issue/writer.py +1 -3
- disdrodb/l0/__init__.py +1 -1
- disdrodb/l0/check_configs.py +25 -16
- disdrodb/l0/check_standards.py +1 -3
- 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 +1 -3
- disdrodb/l0/l0a_processing.py +1 -3
- disdrodb/l0/l0b_nc_processing.py +2 -4
- disdrodb/l0/l0b_processing.py +1 -3
- disdrodb/l0/l0c_processing.py +27 -11
- disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +1 -1
- disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +1 -1
- disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +1 -1
- disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +1 -1
- disdrodb/l0/readers/LPM/GERMANY/DWD.py +190 -12
- disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +47 -6
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_PI.py +1 -1
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_T.py +5 -2
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +1 -3
- disdrodb/l0/readers/LPM/KIT/CHWALA.py +1 -3
- disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_LPM_NC.py +1 -1
- disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_RWANDA_LPM_NC.py +1 -1
- disdrodb/l0/readers/LPM/NORWAY/HAUKELISETER_LPM.py +1 -3
- disdrodb/l0/readers/LPM/NORWAY/NMBU_LPM.py +1 -3
- disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +1 -3
- disdrodb/l0/readers/LPM/SLOVENIA/UL.py +1 -3
- disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +1 -3
- disdrodb/l0/readers/LPM/UK/DIVEN.py +1 -1
- disdrodb/l0/readers/LPM/UK/WITHWORTH_LPM.py +1 -3
- disdrodb/l0/readers/LPM/USA/CHARLESTON.py +1 -3
- disdrodb/l0/readers/LPM_V0/BELGIUM/ULIEGE.py +1 -3
- disdrodb/l0/readers/LPM_V0/ITALY/GID_LPM_V0.py +1 -1
- disdrodb/l0/readers/ODM470/OCEAN/OCEANRAIN.py +123 -0
- disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +1 -1
- disdrodb/l0/readers/PARSIVEL/BASQUECOUNTRY/EUSKALMET_OTT.py +1 -1
- disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +1 -3
- disdrodb/l0/readers/PARSIVEL/EPFL/ARCTIC_2021.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/COMMON_2011.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/DAVOS_2009_2011.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_2009.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2008.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2011.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2012.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/GENEPI_2007.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007_2.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HPICONET_2010.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP2.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP4.py +1 -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 +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/PARSIVEL_2007.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/PLATO_2019.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019_WJF.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/RIETHOLZBACH_2011.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +1 -1
- disdrodb/l0/readers/PARSIVEL/EPFL/UNIL_2022.py +1 -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 +1 -1
- disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/BASQUECOUNTRY/EUSKALMET_OTT2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +1 -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 +1 -1
- disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +1 -3
- disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +1 -1
- 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 +5 -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 +1 -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 +1 -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 +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +1 -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 +1 -3
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +1 -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 +1 -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 +1 -3
- disdrodb/l0/readers/PARSIVEL2/SPAIN/LIAISE.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/SWEDEN/SMHI.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/USA/CSU.py +1 -1
- disdrodb/l0/readers/PARSIVEL2/USA/CW3E.py +1 -1
- disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +1 -3
- disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +1 -3
- disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +1 -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 +1 -3
- disdrodb/l0/readers/SWS250/BELGIUM/KMI.py +1 -3
- disdrodb/l0/readers/template_reader_raw_netcdf_data.py +1 -3
- disdrodb/l0/readers/template_reader_raw_text_data.py +1 -3
- disdrodb/l0/standards.py +4 -5
- disdrodb/l0/template_tools.py +1 -3
- disdrodb/l1/__init__.py +1 -1
- disdrodb/l1/classification.py +913 -0
- disdrodb/l1/processing.py +36 -106
- disdrodb/l1/resampling.py +8 -3
- disdrodb/l1_env/__init__.py +1 -1
- disdrodb/l1_env/routines.py +6 -6
- disdrodb/l2/__init__.py +1 -1
- disdrodb/l2/empirical_dsd.py +57 -31
- disdrodb/l2/processing.py +327 -62
- disdrodb/metadata/checks.py +1 -3
- disdrodb/metadata/download.py +4 -4
- disdrodb/metadata/geolocation.py +1 -3
- disdrodb/metadata/info.py +1 -3
- disdrodb/metadata/manipulation.py +1 -3
- disdrodb/metadata/reader.py +1 -3
- disdrodb/metadata/search.py +1 -3
- disdrodb/metadata/standards.py +1 -3
- disdrodb/metadata/writer.py +1 -3
- disdrodb/physics/__init__.py +17 -0
- disdrodb/physics/atmosphere.py +272 -0
- disdrodb/physics/water.py +130 -0
- disdrodb/physics/wrappers.py +62 -0
- disdrodb/psd/__init__.py +1 -1
- disdrodb/psd/fitting.py +22 -9
- disdrodb/psd/models.py +1 -1
- disdrodb/routines/__init__.py +5 -1
- disdrodb/routines/l0.py +26 -16
- disdrodb/routines/l1.py +8 -6
- disdrodb/routines/l2.py +8 -4
- disdrodb/routines/options.py +116 -73
- disdrodb/routines/options_validation.py +728 -0
- disdrodb/routines/wrappers.py +431 -11
- disdrodb/scattering/__init__.py +1 -1
- disdrodb/scattering/axis_ratio.py +6 -6
- disdrodb/scattering/permittivity.py +8 -8
- disdrodb/scattering/routines.py +31 -13
- disdrodb/summary/__init__.py +1 -1
- disdrodb/summary/routines.py +83 -25
- disdrodb/utils/__init__.py +1 -1
- disdrodb/utils/archiving.py +16 -9
- disdrodb/utils/attrs.py +4 -3
- disdrodb/utils/cli.py +8 -10
- disdrodb/utils/compression.py +9 -11
- disdrodb/utils/dask.py +2 -3
- disdrodb/utils/dataframe.py +1 -3
- disdrodb/utils/decorators.py +1 -3
- disdrodb/utils/dict.py +1 -1
- disdrodb/utils/directories.py +3 -5
- disdrodb/utils/encoding.py +2 -4
- disdrodb/utils/event.py +1 -1
- disdrodb/utils/list.py +1 -3
- disdrodb/utils/logger.py +1 -3
- disdrodb/utils/manipulations.py +175 -5
- disdrodb/utils/pydantic.py +80 -0
- disdrodb/utils/routines.py +1 -3
- disdrodb/utils/subsetting.py +1 -1
- disdrodb/utils/time.py +3 -2
- disdrodb/utils/warnings.py +1 -3
- disdrodb/utils/writer.py +1 -3
- disdrodb/utils/xarray.py +30 -3
- disdrodb/utils/yaml.py +1 -3
- disdrodb/viz/__init__.py +1 -1
- disdrodb/viz/plots.py +192 -18
- {disdrodb-0.2.1.dist-info → disdrodb-0.3.0.dist-info}/METADATA +2 -2
- disdrodb-0.3.0.dist-info/RECORD +358 -0
- {disdrodb-0.2.1.dist-info → disdrodb-0.3.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.3.0.dist-info}/WHEEL +0 -0
- {disdrodb-0.2.1.dist-info → disdrodb-0.3.0.dist-info}/licenses/LICENSE +0 -0
- {disdrodb-0.2.1.dist-info → disdrodb-0.3.0.dist-info}/top_level.txt +0 -0
disdrodb/__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
|
disdrodb/_config.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
|
disdrodb/_version.py
CHANGED
|
@@ -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.3.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 3, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
disdrodb/accessor/__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
|
disdrodb/accessor/methods.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
|
|
@@ -32,7 +32,7 @@ class DISDRODB_Base_Accessor:
|
|
|
32
32
|
from disdrodb.api.checks import check_time
|
|
33
33
|
|
|
34
34
|
if "time" in self._obj.coords:
|
|
35
|
-
start_time = self._obj["time"].to_numpy()
|
|
35
|
+
start_time = self._obj["time"].to_numpy().min()
|
|
36
36
|
else:
|
|
37
37
|
raise ValueError("Time coordinate not found")
|
|
38
38
|
return check_time(start_time)
|
|
@@ -43,7 +43,7 @@ class DISDRODB_Base_Accessor:
|
|
|
43
43
|
from disdrodb.api.checks import check_time
|
|
44
44
|
|
|
45
45
|
if "time" in self._obj.coords:
|
|
46
|
-
end_time = self._obj["time"].to_numpy()
|
|
46
|
+
end_time = self._obj["time"].to_numpy().max()
|
|
47
47
|
else:
|
|
48
48
|
raise ValueError("Time coordinate not found")
|
|
49
49
|
return check_time(end_time)
|
|
@@ -102,6 +102,12 @@ class DISDRODB_Base_Accessor:
|
|
|
102
102
|
|
|
103
103
|
return plot_spectrum(self._obj, **kwargs)
|
|
104
104
|
|
|
105
|
+
def plot_nd(self, **kwargs):
|
|
106
|
+
"""Plot drop number concentration N(D) timeseries."""
|
|
107
|
+
from disdrodb.viz.plots import plot_nd
|
|
108
|
+
|
|
109
|
+
return plot_nd(self._obj, **kwargs)
|
|
110
|
+
|
|
105
111
|
|
|
106
112
|
@xr.register_dataset_accessor("disdrodb")
|
|
107
113
|
class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
@@ -122,12 +128,6 @@ class DISDRODB_Dataset_Accessor(DISDRODB_Base_Accessor):
|
|
|
122
128
|
)
|
|
123
129
|
return ds
|
|
124
130
|
|
|
125
|
-
def plot_nd(self, **kwargs):
|
|
126
|
-
"""Plot drop number concentration N(D) timeseries."""
|
|
127
|
-
from disdrodb.viz.plots import plot_nd
|
|
128
|
-
|
|
129
|
-
return plot_nd(self._obj, **kwargs)
|
|
130
|
-
|
|
131
131
|
def plot_raw_and_filtered_spectra(self, **kwargs):
|
|
132
132
|
"""Plot the raw and filtered spectra."""
|
|
133
133
|
from disdrodb.viz.plots import plot_raw_and_filtered_spectra
|
disdrodb/api/checks.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
|
disdrodb/api/configs.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
|
|
@@ -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
|
|
@@ -23,7 +21,6 @@
|
|
|
23
21
|
|
|
24
22
|
import logging
|
|
25
23
|
import os
|
|
26
|
-
import shutil
|
|
27
24
|
|
|
28
25
|
from disdrodb.api.checks import (
|
|
29
26
|
check_campaign_name,
|
|
@@ -46,6 +43,7 @@ from disdrodb.api.path import (
|
|
|
46
43
|
from disdrodb.configs import get_data_archive_dir, get_metadata_archive_dir
|
|
47
44
|
from disdrodb.utils.directories import (
|
|
48
45
|
create_directory,
|
|
46
|
+
remove_file_or_directories,
|
|
49
47
|
remove_if_exists,
|
|
50
48
|
)
|
|
51
49
|
|
|
@@ -59,7 +57,7 @@ def ensure_empty_data_dir(data_dir, force):
|
|
|
59
57
|
"""Remove the content of the data_dir directory."""
|
|
60
58
|
# If force=True, remove all the directory content
|
|
61
59
|
if force:
|
|
62
|
-
|
|
60
|
+
remove_file_or_directories(data_dir)
|
|
63
61
|
# Recreate the directory
|
|
64
62
|
create_directory(data_dir)
|
|
65
63
|
else:
|
|
@@ -258,7 +256,7 @@ def create_logs_directory(
|
|
|
258
256
|
|
|
259
257
|
# Ensure empty log directory
|
|
260
258
|
if os.path.isdir(logs_dir):
|
|
261
|
-
|
|
259
|
+
remove_file_or_directories(logs_dir)
|
|
262
260
|
|
|
263
261
|
# Create logs directory
|
|
264
262
|
os.makedirs(logs_dir, exist_ok=True)
|
disdrodb/api/info.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
|
disdrodb/api/io.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
|
|
@@ -19,7 +17,6 @@
|
|
|
19
17
|
"""Routines to list and open DISDRODB products."""
|
|
20
18
|
import datetime
|
|
21
19
|
import os
|
|
22
|
-
import shutil
|
|
23
20
|
import subprocess
|
|
24
21
|
import sys
|
|
25
22
|
from pathlib import Path
|
|
@@ -41,7 +38,7 @@ from disdrodb.api.path import (
|
|
|
41
38
|
)
|
|
42
39
|
from disdrodb.l0.l0_reader import define_readers_directory
|
|
43
40
|
from disdrodb.utils.dict import extract_product_kwargs
|
|
44
|
-
from disdrodb.utils.directories import list_files
|
|
41
|
+
from disdrodb.utils.directories import list_files, remove_file_or_directories
|
|
45
42
|
from disdrodb.utils.logger import (
|
|
46
43
|
log_info,
|
|
47
44
|
)
|
|
@@ -338,8 +335,11 @@ def open_netcdf_files(
|
|
|
338
335
|
import xarray as xr
|
|
339
336
|
|
|
340
337
|
# Ensure variables is a list
|
|
341
|
-
if variables is not None
|
|
342
|
-
variables
|
|
338
|
+
if variables is not None:
|
|
339
|
+
if isinstance(variables, str):
|
|
340
|
+
variables = [variables]
|
|
341
|
+
variables = np.unique(variables).tolist()
|
|
342
|
+
|
|
343
343
|
# Define preprocessing function for parallel opening
|
|
344
344
|
preprocess = (lambda ds: ds[variables]) if parallel and variables is not None else None
|
|
345
345
|
|
|
@@ -364,6 +364,7 @@ def open_netcdf_files(
|
|
|
364
364
|
)
|
|
365
365
|
# - Subset variables
|
|
366
366
|
if variables is not None and preprocess is None:
|
|
367
|
+
variables = [var for var in variables if var in ds]
|
|
367
368
|
ds = ds[variables]
|
|
368
369
|
# - Subset time
|
|
369
370
|
if start_time is not None or end_time is not None:
|
|
@@ -509,7 +510,7 @@ def remove_product(
|
|
|
509
510
|
**product_kwargs,
|
|
510
511
|
)
|
|
511
512
|
log_info(logger=logger, msg="Removal of {product} files started.", verbose=verbose)
|
|
512
|
-
|
|
513
|
+
remove_file_or_directories(data_dir)
|
|
513
514
|
log_info(logger=logger, msg="Removal of {product} files ended.", verbose=verbose)
|
|
514
515
|
|
|
515
516
|
|
disdrodb/api/path.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
|
|
@@ -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
|
|
@@ -34,7 +34,7 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
|
|
|
34
34
|
help="Whether to raise error of finish the check",
|
|
35
35
|
)
|
|
36
36
|
def disdrodb_check_metadata_archive(metadata_archive_dir=None, raise_error=True):
|
|
37
|
-
"""
|
|
37
|
+
"""Validate the DISDRODB Metadata Archive."""
|
|
38
38
|
from disdrodb.metadata.checks import check_metadata_archive
|
|
39
39
|
|
|
40
40
|
metadata_archive_dir = parse_archive_dir(metadata_archive_dir)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# -----------------------------------------------------------------------------.
|
|
2
|
+
# Copyright (c) 2021-2026 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
|
+
"""Script to check the validity of the DISDRODB products configuration files."""
|
|
18
|
+
import sys
|
|
19
|
+
|
|
20
|
+
import click
|
|
21
|
+
|
|
22
|
+
from disdrodb.utils.cli import parse_empty_string_and_none
|
|
23
|
+
|
|
24
|
+
sys.tracebacklimit = 0 # avoid full traceback error if occur
|
|
25
|
+
|
|
26
|
+
# -------------------------------------------------------------------------.
|
|
27
|
+
# Click Command Line Interface decorator
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@click.command()
|
|
31
|
+
@click.option(
|
|
32
|
+
"--products_configs_dir",
|
|
33
|
+
type=str,
|
|
34
|
+
show_default=True,
|
|
35
|
+
default=None,
|
|
36
|
+
help="Directory with DISDRODB products configurations files",
|
|
37
|
+
)
|
|
38
|
+
def disdrodb_check_products_options(products_configs_dir):
|
|
39
|
+
"""Validate the DISDRODB products configuration files."""
|
|
40
|
+
from disdrodb.routines.options_validation import validate_products_configurations
|
|
41
|
+
|
|
42
|
+
products_configs_dir = parse_empty_string_and_none(products_configs_dir)
|
|
43
|
+
|
|
44
|
+
validate_products_configurations(products_configs_dir)
|
|
@@ -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
|
|
@@ -59,27 +59,53 @@ def disdrodb_create_summary(
|
|
|
59
59
|
data_archive_dir: Optional[str] = None,
|
|
60
60
|
metadata_archive_dir: Optional[str] = None,
|
|
61
61
|
):
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
If
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
62
|
+
"""Create summary figures and tables for DISDRODB stations.
|
|
63
|
+
|
|
64
|
+
Generates summary visualizations and statistics from DISDRODB L2E data products.
|
|
65
|
+
The DISDRODB L2E files must be available.
|
|
66
|
+
|
|
67
|
+
\b
|
|
68
|
+
Station Selection:
|
|
69
|
+
If no station filters are specified, creates summaries for ALL available stations.
|
|
70
|
+
Use data_sources, campaign_names, and station_names to filter stations.
|
|
71
|
+
Filters work together to narrow down the selection (AND logic).
|
|
72
|
+
|
|
73
|
+
\b
|
|
74
|
+
Processing Options:
|
|
75
|
+
--parallel: Reads files in parallel for faster processing (default: False)
|
|
76
|
+
--temporal_resolution: Temporal resolution of L2E product to use (default: 1MIN)
|
|
77
|
+
Valid temporal resolutions depend on available L2E products.
|
|
78
|
+
|
|
79
|
+
\b
|
|
80
|
+
Archive Directories:
|
|
81
|
+
--data_archive_dir: Custom path to DISDRODB data archive
|
|
82
|
+
--metadata_archive_dir: Custom path to DISDRODB metadata archive
|
|
83
|
+
If not specified, paths from the active DISDRODB configuration are used
|
|
84
|
+
|
|
85
|
+
\b
|
|
86
|
+
Examples:
|
|
87
|
+
# Create summaries for all stations
|
|
88
|
+
disdrodb_create_summary
|
|
89
|
+
|
|
90
|
+
# Create summaries for specific data sources
|
|
91
|
+
disdrodb_create_summary --data_sources 'EPFL NASA'
|
|
92
|
+
|
|
93
|
+
# Create summaries for specific campaigns
|
|
94
|
+
disdrodb_create_summary --campaign_names 'HYMEX_LTE_SOP2 IFLOODS'
|
|
95
|
+
|
|
96
|
+
# Create summaries for specific stations with custom temporal resolution
|
|
97
|
+
disdrodb_create_summary --station_names 'apu01 apu02' --temporal_resolution 5MIN
|
|
98
|
+
|
|
99
|
+
# Create summaries with custom archive directory
|
|
100
|
+
disdrodb_create_summary --data_sources EPFL --data_archive_dir /path/to/DISDRODB
|
|
101
|
+
|
|
102
|
+
\b
|
|
103
|
+
Important Notes:
|
|
104
|
+
- Data source names must be in UPPER CASE
|
|
105
|
+
- Campaign names must be in UPPER CASE
|
|
106
|
+
- To specify multiple values, use space-separated strings in quotes
|
|
107
|
+
- Requires L2E data products to be available for the selected stations
|
|
108
|
+
""" # noqa: D301
|
|
83
109
|
from disdrodb.routines import create_summary
|
|
84
110
|
from disdrodb.utils.dask import close_dask_cluster, initialize_dask_cluster
|
|
85
111
|
|
|
@@ -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
|
|
@@ -55,23 +55,44 @@ def disdrodb_create_summary_station(
|
|
|
55
55
|
# DISDRODB root directories
|
|
56
56
|
data_archive_dir: Optional[str] = None,
|
|
57
57
|
):
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
58
|
+
"""Create summary figures and tables for a specific DISDRODB station.
|
|
59
|
+
|
|
60
|
+
Generates summary visualizations and statistics using the DISDRODB L2E product
|
|
61
|
+
of the specified station.
|
|
62
|
+
|
|
63
|
+
\b
|
|
64
|
+
Station Specification:
|
|
65
|
+
Requires exact specification of data_source, campaign_name, and station_name.
|
|
66
|
+
All three parameters must be provided and are case-sensitive (UPPER CASE required).
|
|
67
|
+
|
|
68
|
+
\b
|
|
69
|
+
Processing Options:
|
|
70
|
+
--parallel: Reads files in parallel for faster processing (default: False)
|
|
71
|
+
--temporal_resolution: Temporal resolution of L2E product to use (default: 1MIN)
|
|
72
|
+
Valid temporal resolutions depend on available L2E products
|
|
73
|
+
|
|
74
|
+
\b
|
|
75
|
+
Archive Directory:
|
|
76
|
+
--data_archive_dir: Custom path to DISDRODB data archive
|
|
77
|
+
If not specified, the path from the active DISDRODB configuration is used
|
|
78
|
+
|
|
79
|
+
\b
|
|
80
|
+
Examples:
|
|
81
|
+
# Create summary for a specific station
|
|
82
|
+
disdrodb_create_summary_station EPFL HYMEX_LTE_SOP2 10
|
|
83
|
+
|
|
84
|
+
# Create summary with custom temporal resolution
|
|
85
|
+
disdrodb_create_summary_station EPFL HYMEX_LTE_SOP2 10 --temporal_resolution 5MIN
|
|
86
|
+
|
|
87
|
+
# Create summary with custom archive directory
|
|
88
|
+
disdrodb_create_summary_station NASA IFLOODS apu01 --data_archive_dir /path/to/DISDRODB
|
|
89
|
+
|
|
90
|
+
\b
|
|
91
|
+
Important Notes:
|
|
92
|
+
- Data source, campaign, and station names must be in UPPER CASE
|
|
93
|
+
- All three station identifiers are required (no wildcards)
|
|
94
|
+
- Requires L2E data products to be available for the specified station
|
|
95
|
+
""" # noqa: D301
|
|
75
96
|
from disdrodb.summary.routines import create_station_summary
|
|
76
97
|
from disdrodb.utils.dask import close_dask_cluster, initialize_dask_cluster
|
|
77
98
|
|
|
@@ -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
|
|
@@ -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
|
|
@@ -45,29 +45,50 @@ def disdrodb_download_archive(
|
|
|
45
45
|
metadata_archive_dir: Optional[str] = None,
|
|
46
46
|
force: bool = False,
|
|
47
47
|
):
|
|
48
|
-
"""Download DISDRODB stations
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
48
|
+
"""Download raw data for multiple DISDRODB stations from the DISDRODB Decentralized Data Archive.
|
|
49
|
+
|
|
50
|
+
It downloads station raw data files and stores them in the local DISDRODB Data Archive.
|
|
51
|
+
The data are organized by data_source, campaign_name, and station_name.
|
|
52
|
+
|
|
53
|
+
\b
|
|
54
|
+
Station Selection:
|
|
55
|
+
If no station filters are specified, downloads ALL stations.
|
|
56
|
+
Use data_sources, campaign_names, and station_names to filter stations.
|
|
57
|
+
Filters work together to narrow down the selection (AND logic).
|
|
58
|
+
Only stations with a ``disdrodb_data_url`` in their metadata will be downloaded.
|
|
59
|
+
|
|
60
|
+
\b
|
|
61
|
+
Download Behavior:
|
|
62
|
+
For webserver/FTP-hosted data:
|
|
63
|
+
- Incremental downloads: Fetch only new files when they become available
|
|
64
|
+
- Existing files on disk are skipped unless '--force True' is used
|
|
65
|
+
|
|
66
|
+
For repository-hosted data (e.g., Zenodo):
|
|
67
|
+
- Use '--force True' to download new versions when available
|
|
68
|
+
- Without '--force True', download is skipped if data already exists locally
|
|
69
|
+
|
|
70
|
+
\b
|
|
71
|
+
Download Options:
|
|
72
|
+
--force: Removes existing raw data files and forces complete re-download (default: False)
|
|
73
|
+
Warning: All existing station data will be deleted before re-downloading
|
|
74
|
+
|
|
75
|
+
\b
|
|
76
|
+
Archive Directories:
|
|
77
|
+
--data_archive_dir: Custom path to DISDRODB data archive
|
|
78
|
+
--metadata_archive_dir: Custom path to DISDRODB metadata archive
|
|
79
|
+
If not specified, paths from the active DISDRODB configuration are used
|
|
80
|
+
|
|
81
|
+
\b
|
|
82
|
+
Examples:
|
|
83
|
+
# Download all stations with available download URLs
|
|
84
|
+
disdrodb_download_archive
|
|
85
|
+
|
|
86
|
+
# Download all stations from specific data sources
|
|
87
|
+
disdrodb_download_archive --data_sources 'EPFL NASA'
|
|
88
|
+
|
|
89
|
+
# Download specific campaigns and force re-download
|
|
90
|
+
disdrodb_download_archive --campaign_names 'HYMEX_LTE_SOP2 IFLOODS' --force True
|
|
91
|
+
""" # noqa: D301
|
|
71
92
|
from disdrodb.data_transfer.download_data import download_archive
|
|
72
93
|
|
|
73
94
|
data_archive_dir = parse_archive_dir(data_archive_dir)
|
|
@@ -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
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
# -----------------------------------------------------------------------------.
|
|
17
17
|
"""Routine to download the DISDRODB Metadata Data Archive."""
|
|
18
18
|
import sys
|
|
19
|
+
from pathlib import Path
|
|
19
20
|
|
|
20
21
|
import click
|
|
21
22
|
|
|
@@ -25,7 +26,7 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
|
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
@click.command()
|
|
28
|
-
@click.argument("directory_path", metavar="
|
|
29
|
+
@click.argument("directory_path", required=False, metavar="[directory]", type=click.Path())
|
|
29
30
|
@click.option("-f", "--force", type=bool, show_default=True, default=False, help="Force overwriting")
|
|
30
31
|
def disdrodb_download_metadata_archive(
|
|
31
32
|
directory_path,
|
|
@@ -33,21 +34,31 @@ def disdrodb_download_metadata_archive(
|
|
|
33
34
|
):
|
|
34
35
|
"""Download the DISDRODB Metadata Archive to the specified directory.
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
The
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
\b
|
|
38
|
+
Download Options:
|
|
39
|
+
'--force True' removes the existing DISDRODB-METADATA directory and forces re-download.
|
|
40
|
+
The default is --force False. If the DISDRODB-METADATA directory already exists, it raises an error.
|
|
41
|
+
|
|
42
|
+
\b
|
|
43
|
+
Examples:
|
|
44
|
+
# Download metadata archive to current directory
|
|
45
|
+
disdrodb_download_metadata_archive
|
|
46
|
+
|
|
47
|
+
# Download to specific directory
|
|
48
|
+
disdrodb_download_metadata_archive /path/to/directory
|
|
49
|
+
|
|
50
|
+
# Force re-download of existing metadata archive
|
|
51
|
+
disdrodb_download_metadata_archive /path/to/directory --force True
|
|
52
|
+
|
|
53
|
+
\b
|
|
54
|
+
Important Notes:
|
|
55
|
+
- Use --force with caution as it will delete the existing metadata archive
|
|
56
|
+
""" # noqa: D301
|
|
49
57
|
from disdrodb import download_metadata_archive
|
|
50
58
|
|
|
51
|
-
|
|
59
|
+
# Default to current directory if none provided
|
|
60
|
+
directory_path = Path(directory_path or ".").resolve()
|
|
61
|
+
directory_path = parse_archive_dir(str(directory_path))
|
|
52
62
|
|
|
63
|
+
# Download metadata archive
|
|
53
64
|
download_metadata_archive(directory_path, force=force)
|