disdrodb 0.0.21__py3-none-any.whl → 0.1.1__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 +132 -15
- disdrodb/_config.py +4 -2
- disdrodb/_version.py +9 -4
- disdrodb/api/checks.py +264 -237
- disdrodb/api/configs.py +4 -8
- disdrodb/api/create_directories.py +235 -290
- disdrodb/api/info.py +217 -26
- disdrodb/api/io.py +306 -270
- disdrodb/api/path.py +597 -173
- disdrodb/api/search.py +486 -0
- disdrodb/{metadata/scripts → cli}/disdrodb_check_metadata_archive.py +12 -7
- disdrodb/{utils/pandas.py → cli/disdrodb_data_archive_directory.py} +9 -18
- disdrodb/cli/disdrodb_download_archive.py +86 -0
- disdrodb/cli/disdrodb_download_metadata_archive.py +53 -0
- disdrodb/cli/disdrodb_download_station.py +84 -0
- disdrodb/{api/scripts → cli}/disdrodb_initialize_station.py +22 -10
- disdrodb/cli/disdrodb_metadata_archive_directory.py +32 -0
- disdrodb/{data_transfer/scripts/disdrodb_download_station.py → cli/disdrodb_open_data_archive.py} +22 -22
- disdrodb/cli/disdrodb_open_logs_directory.py +69 -0
- disdrodb/{data_transfer/scripts/disdrodb_upload_station.py → cli/disdrodb_open_metadata_archive.py} +22 -24
- disdrodb/cli/disdrodb_open_metadata_directory.py +71 -0
- disdrodb/cli/disdrodb_open_product_directory.py +74 -0
- disdrodb/cli/disdrodb_open_readers_directory.py +32 -0
- disdrodb/{l0/scripts → cli}/disdrodb_run_l0.py +38 -31
- disdrodb/{l0/scripts → cli}/disdrodb_run_l0_station.py +32 -30
- disdrodb/{l0/scripts → cli}/disdrodb_run_l0a.py +30 -21
- disdrodb/{l0/scripts → cli}/disdrodb_run_l0a_station.py +24 -33
- disdrodb/{l0/scripts → cli}/disdrodb_run_l0b.py +30 -21
- disdrodb/{l0/scripts → cli}/disdrodb_run_l0b_station.py +25 -34
- disdrodb/cli/disdrodb_run_l0c.py +130 -0
- disdrodb/cli/disdrodb_run_l0c_station.py +129 -0
- disdrodb/cli/disdrodb_run_l1.py +122 -0
- disdrodb/cli/disdrodb_run_l1_station.py +121 -0
- disdrodb/cli/disdrodb_run_l2e.py +122 -0
- disdrodb/cli/disdrodb_run_l2e_station.py +122 -0
- disdrodb/cli/disdrodb_run_l2m.py +122 -0
- disdrodb/cli/disdrodb_run_l2m_station.py +122 -0
- disdrodb/cli/disdrodb_upload_archive.py +105 -0
- disdrodb/cli/disdrodb_upload_station.py +98 -0
- disdrodb/configs.py +90 -25
- disdrodb/data_transfer/__init__.py +22 -0
- disdrodb/data_transfer/download_data.py +87 -90
- disdrodb/data_transfer/upload_data.py +64 -37
- disdrodb/data_transfer/zenodo.py +15 -18
- disdrodb/docs.py +1 -1
- disdrodb/issue/__init__.py +17 -4
- disdrodb/issue/checks.py +10 -23
- disdrodb/issue/reader.py +9 -12
- disdrodb/issue/writer.py +14 -17
- disdrodb/l0/__init__.py +17 -26
- disdrodb/l0/check_configs.py +35 -23
- disdrodb/l0/check_standards.py +46 -51
- disdrodb/l0/configs/{Thies_LPM → LPM}/bins_diameter.yml +44 -44
- disdrodb/l0/configs/{Thies_LPM → LPM}/bins_velocity.yml +40 -40
- disdrodb/l0/configs/LPM/l0a_encodings.yml +80 -0
- disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_cf_attrs.yml +84 -65
- disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_encodings.yml +50 -9
- disdrodb/l0/configs/{Thies_LPM → LPM}/raw_data_format.yml +285 -245
- disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/bins_diameter.yml +66 -66
- disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/bins_velocity.yml +64 -64
- disdrodb/l0/configs/PARSIVEL/l0a_encodings.yml +32 -0
- disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/l0b_cf_attrs.yml +23 -21
- disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/l0b_encodings.yml +17 -17
- disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/raw_data_format.yml +77 -77
- disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/bins_diameter.yml +64 -64
- disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/bins_velocity.yml +64 -64
- disdrodb/l0/configs/PARSIVEL2/l0a_encodings.yml +39 -0
- disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_cf_attrs.yml +28 -26
- disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_encodings.yml +20 -20
- disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/raw_data_format.yml +107 -107
- disdrodb/l0/configs/PWS100/bins_diameter.yml +173 -0
- disdrodb/l0/configs/PWS100/bins_velocity.yml +173 -0
- disdrodb/l0/configs/PWS100/l0a_encodings.yml +19 -0
- disdrodb/l0/configs/PWS100/l0b_cf_attrs.yml +76 -0
- disdrodb/l0/configs/PWS100/l0b_encodings.yml +176 -0
- disdrodb/l0/configs/PWS100/raw_data_format.yml +182 -0
- disdrodb/l0/configs/{RD_80 → RD80}/bins_diameter.yml +40 -40
- disdrodb/l0/configs/RD80/l0a_encodings.yml +16 -0
- disdrodb/l0/configs/{RD_80 → RD80}/l0b_cf_attrs.yml +3 -3
- disdrodb/l0/configs/RD80/l0b_encodings.yml +135 -0
- disdrodb/l0/configs/{RD_80 → RD80}/raw_data_format.yml +46 -50
- disdrodb/l0/l0_reader.py +216 -340
- disdrodb/l0/l0a_processing.py +237 -208
- disdrodb/l0/l0b_nc_processing.py +227 -80
- disdrodb/l0/l0b_processing.py +96 -174
- disdrodb/l0/l0c_processing.py +627 -0
- disdrodb/l0/readers/{ARM → LPM/ARM}/ARM_LPM.py +36 -58
- disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +236 -0
- disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +185 -0
- disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +185 -0
- disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +195 -0
- disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +210 -0
- disdrodb/l0/readers/{BRAZIL/GOAMAZON_LPM.py → LPM/KIT/CHWALA.py} +97 -76
- disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +197 -0
- disdrodb/l0/readers/LPM/SLOVENIA/CRNI_VRH.py +197 -0
- disdrodb/l0/readers/{UK → LPM/UK}/DIVEN.py +14 -35
- disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +157 -0
- disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +113 -0
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/ARCTIC_2021.py +40 -57
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/COMMON_2011.py +37 -54
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/DAVOS_2009_2011.py +34 -51
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_2009.py +34 -51
- disdrodb/l0/readers/{EPFL/PARADISO_2014.py → PARSIVEL/EPFL/EPFL_ROOF_2008.py} +38 -50
- disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +105 -0
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2011.py +34 -51
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2012.py +33 -51
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GENEPI_2007.py +25 -44
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007.py +25 -44
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007_2.py +25 -44
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HPICONET_2010.py +34 -51
- disdrodb/l0/readers/{EPFL/EPFL_ROOF_2010.py → PARSIVEL/EPFL/HYMEX_LTE_SOP2.py} +37 -50
- disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +111 -0
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HYMEX_LTE_SOP4.py +36 -54
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2018.py +34 -52
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2019.py +38 -56
- disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +105 -0
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PARSIVEL_2007.py +27 -45
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PLATO_2019.py +24 -44
- disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +140 -0
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RACLETS_2019_WJF.py +41 -59
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RIETHOLZBACH_2011.py +34 -51
- disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +117 -0
- disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +137 -0
- disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/UNIL_2022.py +42 -55
- disdrodb/l0/readers/PARSIVEL/GPM/IFLOODS.py +104 -0
- disdrodb/l0/readers/{GPM → PARSIVEL/GPM}/LPVEX.py +29 -48
- disdrodb/l0/readers/PARSIVEL/GPM/MC3E.py +184 -0
- disdrodb/l0/readers/PARSIVEL/KIT/BURKINA_FASO.py +133 -0
- disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +113 -0
- disdrodb/l0/readers/{NCAR/VORTEX_SE_2016_P1.py → PARSIVEL/NCAR/OWLES_MIPS.py} +46 -72
- disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +125 -0
- disdrodb/l0/readers/{NCAR/OWLES_MIPS.py → PARSIVEL/NCAR/PLOWS_MIPS.py} +45 -64
- disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +114 -0
- disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +176 -0
- disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +183 -0
- disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL_FGG.py +121 -0
- disdrodb/l0/readers/{ARM/ARM_LD.py → PARSIVEL2/ARM/ARM_PARSIVEL2.py} +27 -50
- disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +163 -0
- disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +163 -0
- disdrodb/l0/readers/{DENMARK → PARSIVEL2/DENMARK}/EROSION_nc.py +14 -35
- disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +189 -0
- disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +119 -0
- disdrodb/l0/readers/PARSIVEL2/GPM/GCPEX.py +104 -0
- disdrodb/l0/readers/PARSIVEL2/GPM/NSSTC.py +176 -0
- disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +32 -0
- disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +56 -0
- disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +120 -0
- disdrodb/l0/readers/{NCAR → PARSIVEL2/NCAR}/PECAN_MIPS.py +45 -64
- disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +181 -0
- disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +160 -0
- disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +160 -0
- disdrodb/l0/readers/{NCAR/PLOWS_MIPS.py → PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py} +49 -66
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +118 -0
- disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +152 -0
- disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT.py +166 -0
- disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +150 -0
- disdrodb/l0/readers/{NCAR/RELAMPAGO_RD80.py → RD80/BRAZIL/CHUVA_RD80.py} +36 -60
- disdrodb/l0/readers/{BRAZIL → RD80/BRAZIL}/GOAMAZON_RD80.py +36 -55
- disdrodb/l0/readers/{NCAR → RD80/NCAR}/CINDY_2011_RD80.py +35 -54
- disdrodb/l0/readers/{BRAZIL/CHUVA_RD80.py → RD80/NCAR/RELAMPAGO_RD80.py} +40 -54
- disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +274 -0
- disdrodb/l0/readers/template_reader_raw_netcdf_data.py +62 -0
- disdrodb/l0/readers/{reader_template.py → template_reader_raw_text_data.py} +20 -44
- disdrodb/l0/routines.py +885 -581
- disdrodb/l0/standards.py +77 -238
- disdrodb/l0/template_tools.py +105 -110
- disdrodb/l1/__init__.py +17 -0
- disdrodb/l1/beard_model.py +716 -0
- disdrodb/l1/encoding_attrs.py +635 -0
- disdrodb/l1/fall_velocity.py +260 -0
- disdrodb/l1/filters.py +192 -0
- disdrodb/l1/processing.py +202 -0
- disdrodb/l1/resampling.py +236 -0
- disdrodb/l1/routines.py +358 -0
- disdrodb/l1_env/__init__.py +17 -0
- disdrodb/l1_env/routines.py +38 -0
- disdrodb/l2/__init__.py +17 -0
- disdrodb/l2/empirical_dsd.py +1833 -0
- disdrodb/l2/event.py +388 -0
- disdrodb/l2/processing.py +528 -0
- disdrodb/l2/processing_options.py +213 -0
- disdrodb/l2/routines.py +868 -0
- disdrodb/metadata/__init__.py +9 -2
- disdrodb/metadata/checks.py +180 -124
- disdrodb/metadata/download.py +81 -0
- disdrodb/metadata/geolocation.py +146 -0
- disdrodb/metadata/info.py +20 -13
- disdrodb/metadata/manipulation.py +3 -3
- disdrodb/metadata/reader.py +59 -8
- disdrodb/metadata/search.py +77 -144
- disdrodb/metadata/standards.py +83 -80
- disdrodb/metadata/writer.py +10 -16
- disdrodb/psd/__init__.py +38 -0
- disdrodb/psd/fitting.py +2146 -0
- disdrodb/psd/models.py +774 -0
- disdrodb/routines.py +1412 -0
- disdrodb/scattering/__init__.py +28 -0
- disdrodb/scattering/axis_ratio.py +344 -0
- disdrodb/scattering/routines.py +456 -0
- disdrodb/utils/__init__.py +17 -0
- disdrodb/utils/attrs.py +208 -0
- disdrodb/utils/cli.py +269 -0
- disdrodb/utils/compression.py +60 -42
- disdrodb/utils/dask.py +62 -0
- disdrodb/utils/dataframe.py +342 -0
- disdrodb/utils/decorators.py +110 -0
- disdrodb/utils/directories.py +107 -46
- disdrodb/utils/encoding.py +127 -0
- disdrodb/utils/list.py +29 -0
- disdrodb/utils/logger.py +168 -46
- disdrodb/utils/time.py +657 -0
- disdrodb/utils/warnings.py +30 -0
- disdrodb/utils/writer.py +57 -0
- disdrodb/utils/xarray.py +138 -47
- disdrodb/utils/yaml.py +0 -1
- disdrodb/viz/__init__.py +17 -0
- disdrodb/viz/plots.py +17 -0
- disdrodb-0.1.1.dist-info/METADATA +294 -0
- disdrodb-0.1.1.dist-info/RECORD +232 -0
- {disdrodb-0.0.21.dist-info → disdrodb-0.1.1.dist-info}/WHEEL +1 -1
- disdrodb-0.1.1.dist-info/entry_points.txt +30 -0
- disdrodb/data_transfer/scripts/disdrodb_download_archive.py +0 -53
- disdrodb/data_transfer/scripts/disdrodb_upload_archive.py +0 -57
- disdrodb/l0/configs/OTT_Parsivel/l0a_encodings.yml +0 -32
- disdrodb/l0/configs/OTT_Parsivel2/l0a_encodings.yml +0 -39
- disdrodb/l0/configs/RD_80/l0a_encodings.yml +0 -16
- disdrodb/l0/configs/RD_80/l0b_encodings.yml +0 -135
- disdrodb/l0/configs/Thies_LPM/l0a_encodings.yml +0 -80
- disdrodb/l0/io.py +0 -257
- disdrodb/l0/l0_processing.py +0 -1091
- disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_OTT.py +0 -178
- disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_THIES.py +0 -247
- disdrodb/l0/readers/BRAZIL/CHUVA_LPM.py +0 -204
- disdrodb/l0/readers/BRAZIL/CHUVA_OTT.py +0 -183
- disdrodb/l0/readers/BRAZIL/GOAMAZON_OTT.py +0 -183
- disdrodb/l0/readers/CHINA/CHONGQING.py +0 -131
- disdrodb/l0/readers/EPFL/EPFL_ROOF_2008.py +0 -128
- disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP2.py +0 -127
- disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP3.py +0 -129
- disdrodb/l0/readers/EPFL/RACLETS_2019.py +0 -158
- disdrodb/l0/readers/EPFL/SAMOYLOV_2017.py +0 -136
- disdrodb/l0/readers/EPFL/SAMOYLOV_2019.py +0 -158
- disdrodb/l0/readers/FRANCE/SIRTA_OTT2.py +0 -138
- disdrodb/l0/readers/GPM/GCPEX.py +0 -123
- disdrodb/l0/readers/GPM/IFLOODS.py +0 -123
- disdrodb/l0/readers/GPM/MC3E.py +0 -123
- disdrodb/l0/readers/GPM/NSSTC.py +0 -164
- disdrodb/l0/readers/ITALY/GID.py +0 -199
- disdrodb/l0/readers/MEXICO/OH_IIUNAM_nc.py +0 -92
- disdrodb/l0/readers/NCAR/CCOPE_2015.py +0 -133
- disdrodb/l0/readers/NCAR/PECAN_FP3.py +0 -137
- disdrodb/l0/readers/NCAR/PECAN_MOBILE.py +0 -144
- disdrodb/l0/readers/NCAR/RELAMPAGO_OTT.py +0 -195
- disdrodb/l0/readers/NCAR/SNOWIE_PJ.py +0 -172
- disdrodb/l0/readers/NCAR/SNOWIE_SB.py +0 -179
- disdrodb/l0/readers/NCAR/VORTEX2_2009.py +0 -133
- disdrodb/l0/readers/NCAR/VORTEX2_2010.py +0 -188
- disdrodb/l0/readers/NCAR/VORTEX2_2010_UF.py +0 -191
- disdrodb/l0/readers/NCAR/VORTEX_SE_2016_P2.py +0 -135
- disdrodb/l0/readers/NCAR/VORTEX_SE_2016_PIPS.py +0 -170
- disdrodb/l0/readers/NETHERLANDS/DELFT.py +0 -187
- disdrodb/l0/readers/SPAIN/SBEGUERIA.py +0 -179
- disdrodb/l0/scripts/disdrodb_run_l0b_concat.py +0 -93
- disdrodb/l0/scripts/disdrodb_run_l0b_concat_station.py +0 -85
- disdrodb/utils/netcdf.py +0 -452
- disdrodb/utils/scripts.py +0 -102
- disdrodb-0.0.21.dist-info/AUTHORS.md +0 -18
- disdrodb-0.0.21.dist-info/METADATA +0 -186
- disdrodb-0.0.21.dist-info/RECORD +0 -168
- disdrodb-0.0.21.dist-info/entry_points.txt +0 -15
- /disdrodb/l0/configs/{RD_80 → RD80}/bins_velocity.yml +0 -0
- /disdrodb/l0/manuals/{Thies_LPM.pdf → LPM.pdf} +0 -0
- /disdrodb/l0/manuals/{ODM_470.pdf → ODM470.pdf} +0 -0
- /disdrodb/l0/manuals/{OTT_Parsivel.pdf → PARSIVEL.pdf} +0 -0
- /disdrodb/l0/manuals/{OTT_Parsivel2.pdf → PARSIVEL2.pdf} +0 -0
- /disdrodb/l0/manuals/{PWS_100.pdf → PWS100.pdf} +0 -0
- /disdrodb/l0/manuals/{RD_80.pdf → RD80.pdf} +0 -0
- {disdrodb-0.0.21.dist-info → disdrodb-0.1.1.dist-info/licenses}/LICENSE +0 -0
- {disdrodb-0.0.21.dist-info → disdrodb-0.1.1.dist-info}/top_level.txt +0 -0
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
device_address: 'float32' # 'uint8'
|
|
2
|
-
weather_code_synop_4677_5min: 'float32' # 'uint8'
|
|
3
|
-
weather_code_synop_4680_5min : 'float32' # 'uint8'
|
|
4
|
-
weather_code_metar_4678_5min : 'str'
|
|
5
|
-
precipitation_rate_5min : 'float32'
|
|
6
|
-
weather_code_synop_4677: 'float32' # 'uint8'
|
|
7
|
-
weather_code_synop_4680: 'float32' # 'uint8'
|
|
8
|
-
weather_code_metar_4678: 'str'
|
|
9
|
-
precipitation_rate: 'float32'
|
|
10
|
-
rainfall_rate: 'float32'
|
|
11
|
-
snowfall_rate: 'float32'
|
|
12
|
-
precipitation_accumulated: 'float32'
|
|
13
|
-
mor_visibility: 'float32' # 'uint16'
|
|
14
|
-
reflectivity: 'float32'
|
|
15
|
-
quality_index: 'float32' # 'uint8'
|
|
16
|
-
max_hail_diameter: 'float32'
|
|
17
|
-
laser_status: 'float32' # 'uint8'
|
|
18
|
-
static_signal: 'float32' # 'uint8'
|
|
19
|
-
laser_temperature_analog_status: 'float32' # 'uint8'
|
|
20
|
-
laser_temperature_digital_status: 'float32' # 'uint8'
|
|
21
|
-
laser_current_analog_status: 'float32' # 'uint8'
|
|
22
|
-
laser_current_digital_status: 'float32' # 'uint8'
|
|
23
|
-
sensor_voltage_supply_status: 'float32' # 'uint8'
|
|
24
|
-
current_heating_pane_transmitter_head_status: 'float32' # 'uint8'
|
|
25
|
-
current_heating_pane_receiver_head_status: 'float32' # 'uint8'
|
|
26
|
-
temperature_sensor_status: 'float32' # 'uint8'
|
|
27
|
-
current_heating_voltage_supply_status: 'float32' # 'uint8'
|
|
28
|
-
current_heating_house_status: 'float32' # 'uint8'
|
|
29
|
-
current_heating_heads_status: 'float32' # 'uint8'
|
|
30
|
-
current_heating_carriers_status: 'float32' # 'uint8'
|
|
31
|
-
control_output_laser_power_status: 'float32' # 'uint8'
|
|
32
|
-
reserve_status: 'float32' # 'uint8'
|
|
33
|
-
temperature_interior : 'float32' # 'uint16'
|
|
34
|
-
laser_temperature: 'float32' # 'uint16'
|
|
35
|
-
laser_current_average: 'float32' # 'uint16'
|
|
36
|
-
control_voltage: 'float32'
|
|
37
|
-
optical_control_voltage_output: 'float32'
|
|
38
|
-
sensor_voltage_supply : 'str'
|
|
39
|
-
current_heating_pane_transmitter_head : 'str'
|
|
40
|
-
current_heating_pane_receiver_head: 'str'
|
|
41
|
-
temperature_ambient: 'float32'
|
|
42
|
-
current_heating_voltage_supply: 'str'
|
|
43
|
-
current_heating_house: 'str'
|
|
44
|
-
current_heating_heads: 'str'
|
|
45
|
-
current_heating_carriers: 'str'
|
|
46
|
-
number_particles: 'float32' # 'uint16'
|
|
47
|
-
number_particles_internal_data: 'float32'
|
|
48
|
-
number_particles_min_speed: 'float32' # 'uint16'
|
|
49
|
-
number_particles_min_speed_internal_data: 'float32'
|
|
50
|
-
number_particles_max_speed: 'float32' # 'uint16'
|
|
51
|
-
number_particles_max_speed_internal_data: 'float32'
|
|
52
|
-
number_particles_min_diameter: 'float32' # 'uint16'
|
|
53
|
-
number_particles_min_diameter_internal_data: 'float32'
|
|
54
|
-
number_particles_no_hydrometeor: 'float32' # 'uint16'
|
|
55
|
-
number_particles_no_hydrometeor_internal_data: 'float32'
|
|
56
|
-
number_particles_unknown_classification: 'float32' # 'uint16'
|
|
57
|
-
number_particles_unknown_classification_internal_data: 'float32'
|
|
58
|
-
number_particles_class_1: 'float32' # 'uint16'
|
|
59
|
-
number_particles_class_1_internal_data: 'float32'
|
|
60
|
-
number_particles_class_2: 'float32' # 'uint16'
|
|
61
|
-
number_particles_class_2_internal_data: 'float32'
|
|
62
|
-
number_particles_class_3: 'float32' # 'uint16'
|
|
63
|
-
number_particles_class_3_internal_data: 'float32'
|
|
64
|
-
number_particles_class_4: 'float32' # 'uint16'
|
|
65
|
-
number_particles_class_4_internal_data: 'float32'
|
|
66
|
-
number_particles_class_5: 'float32' # 'uint16'
|
|
67
|
-
number_particles_class_5_internal_data: 'float32'
|
|
68
|
-
number_particles_class_6: 'float32' # 'uint16'
|
|
69
|
-
number_particles_class_6_internal_data: 'float32'
|
|
70
|
-
number_particles_class_7: 'float32' # 'uint16'
|
|
71
|
-
number_particles_class_7_internal_data: 'float32'
|
|
72
|
-
number_particles_class_8: 'float32' # 'uint16'
|
|
73
|
-
number_particles_class_8_internal_data: 'float32'
|
|
74
|
-
number_particles_class_9: 'float32' # 'uint16'
|
|
75
|
-
number_particles_class_9_internal_data: 'float32'
|
|
76
|
-
raw_drop_number: 'str'
|
|
77
|
-
# '521': air_temperature
|
|
78
|
-
# '522': relative_humidity
|
|
79
|
-
# '523': wind_speed
|
|
80
|
-
# '524': wind_direction
|
disdrodb/l0/io.py
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
# -----------------------------------------------------------------------------.
|
|
4
|
-
# Copyright (c) 2021-2023 DISDRODB developers
|
|
5
|
-
#
|
|
6
|
-
# This program is free software: you can redistribute it and/or modify
|
|
7
|
-
# it under the terms of the GNU General Public License as published by
|
|
8
|
-
# the Free Software Foundation, either version 3 of the License, or
|
|
9
|
-
# (at your option) any later version.
|
|
10
|
-
#
|
|
11
|
-
# This program is distributed in the hope that it will be useful,
|
|
12
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
-
# GNU General Public License for more details.
|
|
15
|
-
#
|
|
16
|
-
# You should have received a copy of the GNU General Public License
|
|
17
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
18
|
-
# -----------------------------------------------------------------------------.
|
|
19
|
-
"""Define DISDRODB Data Input/Output."""
|
|
20
|
-
import logging
|
|
21
|
-
import os
|
|
22
|
-
from typing import Union
|
|
23
|
-
|
|
24
|
-
import pandas as pd
|
|
25
|
-
|
|
26
|
-
from disdrodb.api.path import define_l0a_station_dir
|
|
27
|
-
from disdrodb.utils.directories import list_files
|
|
28
|
-
from disdrodb.utils.logger import log_info
|
|
29
|
-
|
|
30
|
-
logger = logging.getLogger(__name__)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
####--------------------------------------------------------------------------.
|
|
34
|
-
#### List Station Files
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
def _check_glob_pattern(pattern: str) -> None:
|
|
38
|
-
"""Check if the input parameters is a string and if it can be used as pattern.
|
|
39
|
-
|
|
40
|
-
Parameters
|
|
41
|
-
----------
|
|
42
|
-
pattern : str
|
|
43
|
-
String to be checked.
|
|
44
|
-
|
|
45
|
-
Raises
|
|
46
|
-
------
|
|
47
|
-
TypeError
|
|
48
|
-
The input parameter is not a string.
|
|
49
|
-
ValueError
|
|
50
|
-
The input parameter can not be used as pattern.
|
|
51
|
-
"""
|
|
52
|
-
if not isinstance(pattern, str):
|
|
53
|
-
raise TypeError("Expect pattern as a string.")
|
|
54
|
-
if pattern[0] == "/":
|
|
55
|
-
raise ValueError("glob_pattern should not start with /")
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def _check_glob_patterns(patterns: Union[str, list]) -> list:
|
|
59
|
-
"""Check if glob patterns are valids."""
|
|
60
|
-
if not isinstance(patterns, (str, list)):
|
|
61
|
-
raise ValueError("'glob_patterns' must be a str or list of strings.")
|
|
62
|
-
if isinstance(patterns, str):
|
|
63
|
-
patterns = [patterns]
|
|
64
|
-
_ = [_check_glob_pattern(pattern) for pattern in patterns]
|
|
65
|
-
return patterns
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def _get_file_list(raw_dir: str, station_name, glob_pattern) -> list:
|
|
69
|
-
"""Get the list of files from a directory based on glob pattern.
|
|
70
|
-
|
|
71
|
-
Parameters
|
|
72
|
-
----------
|
|
73
|
-
raw_dir : str
|
|
74
|
-
Campaign directory of the raw data.
|
|
75
|
-
station_name: str
|
|
76
|
-
Name of the station.
|
|
77
|
-
glob_pattern : str
|
|
78
|
-
Pattern to match.
|
|
79
|
-
|
|
80
|
-
Returns
|
|
81
|
-
-------
|
|
82
|
-
list
|
|
83
|
-
List of file paths.
|
|
84
|
-
"""
|
|
85
|
-
data_dir = os.path.join(raw_dir, "data", station_name)
|
|
86
|
-
filepaths = list_files(data_dir, glob_pattern=glob_pattern, recursive=True)
|
|
87
|
-
filepaths = sorted(filepaths)
|
|
88
|
-
return filepaths
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def _get_available_filepaths(raw_dir, station_name, glob_patterns):
|
|
92
|
-
# Retrieve filepaths list
|
|
93
|
-
filepaths = [_get_file_list(raw_dir, station_name, glob_pattern=pattern) for pattern in glob_patterns]
|
|
94
|
-
filepaths = [x for xs in filepaths for x in xs] # flatten list
|
|
95
|
-
|
|
96
|
-
# Check there are files
|
|
97
|
-
n_files = len(filepaths)
|
|
98
|
-
if n_files == 0:
|
|
99
|
-
glob_filepath_patterns = [os.path.join(raw_dir, pattern) for pattern in glob_patterns]
|
|
100
|
-
raise ValueError(f"No file found at {glob_filepath_patterns}.")
|
|
101
|
-
return filepaths
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
def _filter_filepaths(filepaths, debugging_mode):
|
|
105
|
-
"""Filter out filepaths if debugging_mode=True."""
|
|
106
|
-
if debugging_mode:
|
|
107
|
-
max_files = min(3, len(filepaths))
|
|
108
|
-
filepaths = filepaths[0:max_files]
|
|
109
|
-
return filepaths
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
def get_raw_filepaths(raw_dir, station_name, glob_patterns, verbose=False, debugging_mode=False):
|
|
113
|
-
"""Get the list of files from a directory based on input parameters.
|
|
114
|
-
|
|
115
|
-
Currently concatenates all files provided by the glob patterns.
|
|
116
|
-
In future, this might be modified to enable DISDRODB processing when raw data
|
|
117
|
-
are separated in multiple files.
|
|
118
|
-
|
|
119
|
-
Parameters
|
|
120
|
-
----------
|
|
121
|
-
raw_dir : str
|
|
122
|
-
Directory of the campaign where to search for files.
|
|
123
|
-
Format <..>/DISDRODB/Raw/<DATA_SOURCE>/<CAMPAIGN_NAME>
|
|
124
|
-
station_name : str
|
|
125
|
-
ID of the station
|
|
126
|
-
verbose : bool, optional
|
|
127
|
-
Whether to verbose the processing.
|
|
128
|
-
The default is False.
|
|
129
|
-
debugging_mode : bool, optional
|
|
130
|
-
If True, it select maximum 3 files for debugging purposes.
|
|
131
|
-
The default is False.
|
|
132
|
-
|
|
133
|
-
Returns
|
|
134
|
-
-------
|
|
135
|
-
filepaths : list
|
|
136
|
-
List of files file paths.
|
|
137
|
-
|
|
138
|
-
"""
|
|
139
|
-
glob_patterns = _check_glob_patterns(glob_patterns)
|
|
140
|
-
|
|
141
|
-
filepaths = _get_available_filepaths(raw_dir=raw_dir, station_name=station_name, glob_patterns=glob_patterns)
|
|
142
|
-
|
|
143
|
-
# Filter out filepaths if debugging_mode=True
|
|
144
|
-
filepaths = _filter_filepaths(filepaths, debugging_mode)
|
|
145
|
-
|
|
146
|
-
# Log number of files to process
|
|
147
|
-
n_files = len(filepaths)
|
|
148
|
-
data_dir = os.path.join(raw_dir, "data", station_name)
|
|
149
|
-
msg = f" - {n_files} files to process in {data_dir}"
|
|
150
|
-
log_info(logger=logger, msg=msg, verbose=verbose)
|
|
151
|
-
|
|
152
|
-
# Return file list
|
|
153
|
-
return filepaths
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
def get_l0a_filepaths(processed_dir, station_name, debugging_mode=False):
|
|
157
|
-
"""Retrieve L0A files for a give station.
|
|
158
|
-
|
|
159
|
-
Parameters
|
|
160
|
-
----------
|
|
161
|
-
processed_dir : str
|
|
162
|
-
Directory of the campaign where to search for the L0A files.
|
|
163
|
-
Format <..>/DISDRODB/Processed/<DATA_SOURCE>/<CAMPAIGN_NAME>
|
|
164
|
-
station_name : str
|
|
165
|
-
ID of the station
|
|
166
|
-
debugging_mode : bool, optional
|
|
167
|
-
If True, it select maximum 3 files for debugging purposes.
|
|
168
|
-
The default is False.
|
|
169
|
-
|
|
170
|
-
Returns
|
|
171
|
-
-------
|
|
172
|
-
filepaths : list
|
|
173
|
-
List of L0A file paths.
|
|
174
|
-
|
|
175
|
-
"""
|
|
176
|
-
station_dir = define_l0a_station_dir(processed_dir, station_name)
|
|
177
|
-
filepaths = list_files(station_dir, glob_pattern="*.parquet", recursive=True)
|
|
178
|
-
|
|
179
|
-
# Filter out filepaths if debugging_mode=True
|
|
180
|
-
filepaths = _filter_filepaths(filepaths, debugging_mode=debugging_mode)
|
|
181
|
-
|
|
182
|
-
# If no file available, raise error
|
|
183
|
-
if len(filepaths) == 0:
|
|
184
|
-
msg = f"No L0A Apache Parquet file is available in {station_dir}. Run L0A processing first."
|
|
185
|
-
raise ValueError(msg)
|
|
186
|
-
|
|
187
|
-
return filepaths
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
####--------------------------------------------------------------------------.
|
|
191
|
-
#### DISDRODB L0A product reader
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
def _read_l0a(filepath: str, verbose: bool = False, debugging_mode: bool = False) -> pd.DataFrame:
|
|
195
|
-
# Log
|
|
196
|
-
msg = f" - Reading L0 Apache Parquet file at {filepath} started."
|
|
197
|
-
log_info(logger, msg, verbose)
|
|
198
|
-
# Open file
|
|
199
|
-
df = pd.read_parquet(filepath)
|
|
200
|
-
if debugging_mode:
|
|
201
|
-
df = df.iloc[0:100]
|
|
202
|
-
# Log
|
|
203
|
-
msg = f" - Reading L0 Apache Parquet file at {filepath} ended."
|
|
204
|
-
log_info(logger, msg, verbose)
|
|
205
|
-
return df
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
def read_l0a_dataframe(
|
|
209
|
-
filepaths: Union[str, list],
|
|
210
|
-
verbose: bool = False,
|
|
211
|
-
debugging_mode: bool = False,
|
|
212
|
-
) -> pd.DataFrame:
|
|
213
|
-
"""Read DISDRODB L0A Apache Parquet file(s).
|
|
214
|
-
|
|
215
|
-
Parameters
|
|
216
|
-
----------
|
|
217
|
-
filepaths : str or list
|
|
218
|
-
Either a list or a single filepath .
|
|
219
|
-
verbose : bool
|
|
220
|
-
Whether to print detailed processing information into terminal.
|
|
221
|
-
The default is False.
|
|
222
|
-
debugging_mode : bool
|
|
223
|
-
If True, it reduces the amount of data to process.
|
|
224
|
-
If filepaths is a list, it reads only the first 3 files
|
|
225
|
-
For each file it select only the first 100 rows.
|
|
226
|
-
The default is False.
|
|
227
|
-
|
|
228
|
-
Returns
|
|
229
|
-
-------
|
|
230
|
-
pd.DataFrame
|
|
231
|
-
L0A Dataframe.
|
|
232
|
-
|
|
233
|
-
"""
|
|
234
|
-
|
|
235
|
-
from disdrodb.l0.l0a_processing import concatenate_dataframe
|
|
236
|
-
|
|
237
|
-
# ----------------------------------------
|
|
238
|
-
# Check filepaths validity
|
|
239
|
-
if not isinstance(filepaths, (list, str)):
|
|
240
|
-
raise TypeError("Expecting filepaths to be a string or a list of strings.")
|
|
241
|
-
|
|
242
|
-
# ----------------------------------------
|
|
243
|
-
# If filepath is a string, convert to list
|
|
244
|
-
if isinstance(filepaths, str):
|
|
245
|
-
filepaths = [filepaths]
|
|
246
|
-
# ---------------------------------------------------
|
|
247
|
-
# - If debugging_mode=True, it reads only the first 3 filepaths
|
|
248
|
-
if debugging_mode:
|
|
249
|
-
filepaths = filepaths[0:3] # select first 3 filepaths
|
|
250
|
-
|
|
251
|
-
# - Define the list of dataframe
|
|
252
|
-
list_df = [_read_l0a(filepath, verbose=verbose, debugging_mode=debugging_mode) for filepath in filepaths]
|
|
253
|
-
# - Concatenate dataframe
|
|
254
|
-
df = concatenate_dataframe(list_df, verbose=verbose)
|
|
255
|
-
# ---------------------------------------------------
|
|
256
|
-
# Return dataframe
|
|
257
|
-
return df
|