disdrodb 0.3.0__py3-none-any.whl → 0.5.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.
Files changed (198) hide show
  1. disdrodb/__init__.py +2 -0
  2. disdrodb/_config.py +1 -0
  3. disdrodb/_version.py +2 -2
  4. disdrodb/accessor/__init__.py +1 -0
  5. disdrodb/accessor/methods.py +1 -0
  6. disdrodb/api/checks.py +2 -4
  7. disdrodb/api/io.py +224 -24
  8. disdrodb/api/path.py +2 -4
  9. disdrodb/cli/disdrodb_check_metadata_archive.py +1 -0
  10. disdrodb/cli/disdrodb_check_products_options.py +1 -0
  11. disdrodb/cli/disdrodb_create_summary.py +6 -6
  12. disdrodb/cli/disdrodb_create_summary_station.py +2 -2
  13. disdrodb/cli/disdrodb_data_archive_directory.py +1 -0
  14. disdrodb/cli/disdrodb_download_archive.py +5 -6
  15. disdrodb/cli/disdrodb_download_metadata_archive.py +1 -0
  16. disdrodb/cli/disdrodb_download_station.py +2 -3
  17. disdrodb/cli/disdrodb_initialize_station.py +3 -3
  18. disdrodb/cli/disdrodb_metadata_archive_directory.py +1 -0
  19. disdrodb/cli/disdrodb_open_data_archive.py +1 -2
  20. disdrodb/cli/disdrodb_open_logs_directory.py +2 -3
  21. disdrodb/cli/disdrodb_open_metadata_archive.py +1 -2
  22. disdrodb/cli/disdrodb_open_metadata_directory.py +2 -3
  23. disdrodb/cli/disdrodb_open_product_directory.py +1 -2
  24. disdrodb/cli/disdrodb_open_readers_directory.py +1 -0
  25. disdrodb/cli/disdrodb_run.py +6 -6
  26. disdrodb/cli/disdrodb_run_l0.py +6 -6
  27. disdrodb/cli/disdrodb_run_l0_station.py +3 -3
  28. disdrodb/cli/disdrodb_run_l0a.py +6 -6
  29. disdrodb/cli/disdrodb_run_l0a_station.py +3 -3
  30. disdrodb/cli/disdrodb_run_l0b.py +6 -6
  31. disdrodb/cli/disdrodb_run_l0b_station.py +3 -3
  32. disdrodb/cli/disdrodb_run_l0c.py +6 -6
  33. disdrodb/cli/disdrodb_run_l0c_station.py +3 -3
  34. disdrodb/cli/disdrodb_run_l1.py +6 -6
  35. disdrodb/cli/disdrodb_run_l1_station.py +3 -3
  36. disdrodb/cli/disdrodb_run_l2e.py +6 -6
  37. disdrodb/cli/disdrodb_run_l2e_station.py +3 -3
  38. disdrodb/cli/disdrodb_run_l2m.py +6 -6
  39. disdrodb/cli/disdrodb_run_l2m_station.py +3 -3
  40. disdrodb/cli/disdrodb_run_station.py +3 -3
  41. disdrodb/cli/disdrodb_upload_archive.py +6 -7
  42. disdrodb/cli/disdrodb_upload_station.py +3 -4
  43. disdrodb/configs.py +7 -8
  44. disdrodb/constants.py +1 -0
  45. disdrodb/data_transfer/download_data.py +8 -8
  46. disdrodb/data_transfer/upload_data.py +6 -8
  47. disdrodb/data_transfer/zenodo.py +1 -1
  48. disdrodb/fall_velocity/__init__.py +1 -0
  49. disdrodb/fall_velocity/graupel.py +1 -0
  50. disdrodb/fall_velocity/hail.py +1 -0
  51. disdrodb/fall_velocity/rain.py +1 -0
  52. disdrodb/issue/checks.py +1 -0
  53. disdrodb/issue/reader.py +1 -0
  54. disdrodb/issue/writer.py +1 -2
  55. disdrodb/l0/__init__.py +1 -0
  56. disdrodb/l0/check_configs.py +21 -23
  57. disdrodb/l0/check_standards.py +0 -1
  58. disdrodb/l0/configs/LPM/l0a_encodings.yml +17 -17
  59. disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +55 -55
  60. disdrodb/l0/configs/LPM/l0b_encodings.yml +17 -17
  61. disdrodb/l0/configs/LPM/raw_data_format.yml +17 -17
  62. disdrodb/l0/configs/LPM_V0/l0a_encodings.yml +2 -2
  63. disdrodb/l0/configs/LPM_V0/l0b_cf_attrs.yml +2 -2
  64. disdrodb/l0/configs/LPM_V0/l0b_encodings.yml +2 -2
  65. disdrodb/l0/configs/LPM_V0/raw_data_format.yml +2 -2
  66. disdrodb/l0/l0_reader.py +1 -0
  67. disdrodb/l0/l0a_processing.py +5 -5
  68. disdrodb/l0/l0b_nc_processing.py +1 -2
  69. disdrodb/l0/l0b_processing.py +1 -13
  70. disdrodb/l0/l0c_processing.py +2 -1
  71. disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +1 -0
  72. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +17 -17
  73. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +17 -17
  74. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +17 -17
  75. disdrodb/l0/readers/LPM/GERMANY/DWD.py +55 -52
  76. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +18 -17
  77. disdrodb/l0/readers/LPM/ITALY/GID_LPM_AQ.py +277 -0
  78. disdrodb/l0/readers/LPM/ITALY/GID_LPM_PI.py +18 -17
  79. disdrodb/l0/readers/LPM/ITALY/GID_LPM_T.py +18 -17
  80. disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +18 -18
  81. disdrodb/l0/readers/LPM/KIT/CHWALA.py +18 -17
  82. disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_RWANDA_LPM_NC.py +17 -17
  83. disdrodb/l0/readers/LPM/NORWAY/HAUKELISETER_LPM.py +18 -17
  84. disdrodb/l0/readers/LPM/NORWAY/NMBU_LPM.py +18 -17
  85. disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +18 -17
  86. disdrodb/l0/readers/LPM/SLOVENIA/UL.py +18 -17
  87. disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +18 -17
  88. disdrodb/l0/readers/LPM/UK/WITHWORTH_LPM.py +18 -17
  89. disdrodb/l0/readers/LPM/USA/CHARLESTON.py +18 -17
  90. disdrodb/l0/readers/LPM/USA/DEVEX.py +255 -0
  91. disdrodb/l0/readers/LPM_V0/BELGIUM/ULIEGE.py +2 -2
  92. disdrodb/l0/readers/LPM_V0/ITALY/GID_LPM_V0.py +3 -2
  93. disdrodb/l0/readers/ODM470/OCEAN/OCEANRAIN.py +1 -0
  94. disdrodb/l0/readers/PARSIVEL/BASQUECOUNTRY/EUSKALMET_OTT.py +1 -0
  95. disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +1 -0
  96. disdrodb/l0/readers/PARSIVEL/EPFL/ARCTIC_2021.py +1 -0
  97. disdrodb/l0/readers/PARSIVEL/EPFL/COMMON_2011.py +1 -0
  98. disdrodb/l0/readers/PARSIVEL/EPFL/DAVOS_2009_2011.py +1 -0
  99. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_2009.py +1 -0
  100. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2008.py +1 -0
  101. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +1 -0
  102. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2011.py +1 -0
  103. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2012.py +1 -0
  104. disdrodb/l0/readers/PARSIVEL/EPFL/GENEPI_2007.py +1 -0
  105. disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007.py +1 -0
  106. disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007_2.py +1 -0
  107. disdrodb/l0/readers/PARSIVEL/EPFL/HPICONET_2010.py +1 -0
  108. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP2.py +1 -0
  109. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +1 -0
  110. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP4.py +1 -0
  111. disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +1 -0
  112. disdrodb/l0/readers/PARSIVEL/EPFL/PARSIVEL_2007.py +1 -0
  113. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +1 -0
  114. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019_WJF.py +1 -0
  115. disdrodb/l0/readers/PARSIVEL/EPFL/RIETHOLZBACH_2011.py +1 -0
  116. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +1 -0
  117. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +1 -0
  118. disdrodb/l0/readers/PARSIVEL/EPFL/UNIL_2022.py +1 -0
  119. disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +1 -0
  120. disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +1 -0
  121. disdrodb/l0/readers/PARSIVEL2/BASQUECOUNTRY/EUSKALMET_OTT2.py +1 -0
  122. disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +1 -0
  123. disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_nc.py +1 -0
  124. disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +1 -0
  125. disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +1 -0
  126. disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +1 -1
  127. disdrodb/l0/readers/PARSIVEL2/ITALY/HYDROX.py +1 -0
  128. disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +1 -0
  129. disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +1 -0
  130. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +1 -0
  131. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +1 -0
  132. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py +1 -0
  133. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +1 -0
  134. disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PAGASA.py +1 -0
  135. disdrodb/l0/readers/PARSIVEL2/SPAIN/GRANADA.py +1 -0
  136. disdrodb/l0/readers/PARSIVEL2/SWEDEN/SMHI.py +1 -0
  137. disdrodb/l0/readers/PARSIVEL2/USA/CW3E.py +1 -0
  138. disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +1 -0
  139. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +1 -0
  140. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +1 -0
  141. disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +1 -0
  142. disdrodb/l0/readers/SWS250/BELGIUM/KMI.py +1 -0
  143. disdrodb/l0/readers/template_reader_raw_netcdf_data.py +1 -0
  144. disdrodb/l0/readers/template_reader_raw_text_data.py +1 -0
  145. disdrodb/l0/template_tools.py +6 -8
  146. disdrodb/l1/__init__.py +1 -0
  147. disdrodb/l1/classification.py +1 -0
  148. disdrodb/l1/resampling.py +5 -0
  149. disdrodb/l1_env/routines.py +1 -0
  150. disdrodb/l2/__init__.py +1 -0
  151. disdrodb/l2/empirical_dsd.py +1 -0
  152. disdrodb/l2/processing.py +1 -0
  153. disdrodb/metadata/checks.py +9 -10
  154. disdrodb/metadata/download.py +1 -0
  155. disdrodb/metadata/geolocation.py +2 -1
  156. disdrodb/metadata/info.py +2 -2
  157. disdrodb/metadata/search.py +0 -1
  158. disdrodb/physics/atmosphere.py +1 -0
  159. disdrodb/physics/water.py +1 -0
  160. disdrodb/physics/wrappers.py +1 -0
  161. disdrodb/psd/__init__.py +0 -1
  162. disdrodb/psd/fitting.py +1 -0
  163. disdrodb/psd/models.py +1 -0
  164. disdrodb/routines/__init__.py +1 -0
  165. disdrodb/routines/l0.py +13 -9
  166. disdrodb/routines/l1.py +17 -12
  167. disdrodb/routines/l2.py +4 -5
  168. disdrodb/routines/options.py +1 -0
  169. disdrodb/routines/options_validation.py +12 -12
  170. disdrodb/routines/wrappers.py +33 -33
  171. disdrodb/scattering/__init__.py +0 -1
  172. disdrodb/scattering/permittivity.py +1 -0
  173. disdrodb/scattering/routines.py +3 -3
  174. disdrodb/summary/routines.py +12 -5
  175. disdrodb/utils/archiving.py +2 -1
  176. disdrodb/utils/attrs.py +3 -2
  177. disdrodb/utils/compression.py +1 -2
  178. disdrodb/utils/coords.py +45 -0
  179. disdrodb/utils/dask.py +5 -2
  180. disdrodb/utils/dataframe.py +4 -3
  181. disdrodb/utils/decorators.py +2 -1
  182. disdrodb/utils/directories.py +2 -2
  183. disdrodb/utils/encoding.py +2 -1
  184. disdrodb/utils/manipulations.py +1 -0
  185. disdrodb/utils/pydantic.py +1 -0
  186. disdrodb/utils/routines.py +1 -0
  187. disdrodb/utils/time.py +3 -2
  188. disdrodb/utils/warnings.py +1 -0
  189. disdrodb/utils/writer.py +4 -0
  190. disdrodb/utils/xarray.py +1 -0
  191. disdrodb/viz/plots.py +1 -0
  192. {disdrodb-0.3.0.dist-info → disdrodb-0.5.0.dist-info}/METADATA +4 -3
  193. disdrodb-0.5.0.dist-info/RECORD +361 -0
  194. {disdrodb-0.3.0.dist-info → disdrodb-0.5.0.dist-info}/WHEEL +1 -1
  195. disdrodb-0.3.0.dist-info/RECORD +0 -358
  196. {disdrodb-0.3.0.dist-info → disdrodb-0.5.0.dist-info}/entry_points.txt +0 -0
  197. {disdrodb-0.3.0.dist-info → disdrodb-0.5.0.dist-info}/licenses/LICENSE +0 -0
  198. {disdrodb-0.3.0.dist-info → disdrodb-0.5.0.dist-info}/top_level.txt +0 -0
@@ -110,11 +110,11 @@ total_gross_volume_solid_precipitation:
110
110
  description: Total (gross) volume of particles classified as solid precipitation
111
111
  long_name: Total (gross) volume of particles classified as solid precipitation
112
112
  units: ""
113
- number_particles_great_pellet:
113
+ number_particles_large_pellet:
114
114
  description: Number of particles classified as great pellet
115
115
  long_name: Number of particles classified as great pellet
116
116
  units: ""
117
- total_gross_volume_great_pellet:
117
+ total_gross_volume_large_pellet:
118
118
  description: Total (gross) volume of particles classified as great pellet
119
119
  long_name: Total (gross) volume of particles classified as great pellet
120
120
  units: ""
@@ -253,7 +253,7 @@ total_gross_volume_solid_precipitation:
253
253
  fletcher32: false
254
254
  contiguous: false
255
255
  chunksizes: 5000
256
- number_particles_great_pellet:
256
+ number_particles_large_pellet:
257
257
  dtype: uint16
258
258
  zlib: true
259
259
  complevel: 3
@@ -262,7 +262,7 @@ number_particles_great_pellet:
262
262
  contiguous: false
263
263
  chunksizes: 5000
264
264
  _FillValue: 65535
265
- total_gross_volume_great_pellet:
265
+ total_gross_volume_large_pellet:
266
266
  dtype: float32
267
267
  zlib: true
268
268
  complevel: 3
@@ -300,7 +300,7 @@ total_gross_volume_solid_precipitation:
300
300
  - 99999.999
301
301
  nan_flags: null
302
302
  field_number: "31"
303
- number_particles_great_pellet:
303
+ number_particles_large_pellet:
304
304
  n_digits: 5
305
305
  n_characters: 5
306
306
  n_decimals: 5
@@ -310,7 +310,7 @@ number_particles_great_pellet:
310
310
  - 99999
311
311
  nan_flags: null
312
312
  field_number: "32"
313
- total_gross_volume_great_pellet:
313
+ total_gross_volume_large_pellet:
314
314
  n_digits: 8
315
315
  n_characters: 9
316
316
  n_decimals: 5
disdrodb/l0/l0_reader.py CHANGED
@@ -15,6 +15,7 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """Define DISDRODB L0 readers routines."""
18
+
18
19
  import inspect
19
20
  import logging
20
21
  import os
@@ -18,11 +18,9 @@
18
18
 
19
19
  import logging
20
20
  import os
21
- from typing import Union
22
21
 
23
22
  import numpy as np
24
23
  import pandas as pd
25
- import pyarrow.parquet as pq
26
24
 
27
25
  from disdrodb.l0.check_standards import check_l0a_column_names, check_l0a_standards
28
26
  from disdrodb.l0.l0b_processing import infer_split_str
@@ -769,7 +767,7 @@ def concatenate_dataframe(list_df: list, logger=None, verbose: bool = False) ->
769
767
 
770
768
 
771
769
  def read_l0a_dataframe(
772
- filepaths: Union[str, list],
770
+ filepaths: str | list,
773
771
  debugging_mode: bool = False,
774
772
  ) -> pd.DataFrame:
775
773
  """Read DISDRODB L0A Apache Parquet file(s).
@@ -790,6 +788,8 @@ def read_l0a_dataframe(
790
788
  L0A Dataframe.
791
789
 
792
790
  """
791
+ from disdrodb.api.io import open_parquet_files
792
+
793
793
  # ----------------------------------------
794
794
  # Check filepaths validity
795
795
  if not isinstance(filepaths, (list, str)):
@@ -806,7 +806,7 @@ def read_l0a_dataframe(
806
806
 
807
807
  # ---------------------------------------------------
808
808
  # Define the list of dataframe
809
- df = pq.ParquetDataset(filepaths).read().to_pandas()
809
+ df = open_parquet_files(filepaths, use_threads=False)
810
810
 
811
811
  # Reduce rows
812
812
  if debugging_mode:
@@ -832,7 +832,7 @@ def read_l0a_dataframe(
832
832
 
833
833
 
834
834
  def generate_l0a(
835
- filepaths: Union[list, str],
835
+ filepaths: list | str,
836
836
  reader,
837
837
  sensor_name,
838
838
  issue_dict=None,
@@ -17,7 +17,6 @@
17
17
  """Functions to process DISDRODB raw netCDF files into DISDRODB L0B netCDF files."""
18
18
 
19
19
  import logging
20
- from typing import Union
21
20
 
22
21
  import numpy as np
23
22
 
@@ -534,7 +533,7 @@ def open_raw_netcdf_file(
534
533
 
535
534
 
536
535
  def generate_l0b_from_nc(
537
- filepaths: Union[list, str],
536
+ filepaths: list | str,
538
537
  reader,
539
538
  sensor_name,
540
539
  metadata,
@@ -40,6 +40,7 @@ from disdrodb.utils.attrs import (
40
40
  set_coordinate_attributes,
41
41
  set_disdrodb_attrs,
42
42
  )
43
+ from disdrodb.utils.coords import add_dataset_crs_coords
43
44
  from disdrodb.utils.encoding import set_encodings
44
45
  from disdrodb.utils.logger import log_info
45
46
  from disdrodb.utils.time import ensure_sorted_by_time
@@ -391,19 +392,6 @@ def set_variable_attributes(ds: xr.Dataset, sensor_name: str) -> xr.Dataset:
391
392
  return ds
392
393
 
393
394
 
394
- def add_dataset_crs_coords(ds):
395
- """Add the CRS coordinate to the xr.Dataset."""
396
- # TODO: define CF-compliant CRS !
397
- # - CF compliant
398
- # - wkt
399
- # - add grid_mapping name
400
- # -->
401
- # attrs["EPSG"] = 4326
402
- # attrs["proj4_string"] = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
403
- ds = ds.assign_coords({"crs": ["WGS84"]})
404
- return ds
405
-
406
-
407
395
  ####--------------------------------------------------------------------------.
408
396
  #### L0B Raw DataFrame Preprocessing
409
397
 
@@ -15,6 +15,7 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """Functions to process DISDRODB L0B files into DISDRODB L0C netCDF files."""
18
+
18
19
  import logging
19
20
 
20
21
  import numpy as np
@@ -50,7 +51,7 @@ def drop_timesteps_with_invalid_sample_interval(ds, measurement_intervals, verbo
50
51
  # Log information for each invalid timestep
51
52
  invalid_timesteps = pd.to_datetime(timesteps[indices_invalid_sample_interval]).strftime("%Y-%m-%d %H:%M:%S")
52
53
  invalid_sample_intervals = sample_interval[indices_invalid_sample_interval]
53
- for tt, ss in zip(invalid_timesteps, invalid_sample_intervals):
54
+ for tt, ss in zip(invalid_timesteps, invalid_sample_intervals, strict=True):
54
55
  msg = f"Unexpected sampling interval ({ss} s) at {tt}. The measurement has been dropped."
55
56
  log_warning(logger=logger, msg=msg, verbose=verbose)
56
57
  # Remove timesteps with invalid sample intervals
@@ -16,6 +16,7 @@
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  # -----------------------------------------------------------------------------.
18
18
  """Reader for ARM Thies LPM sensor."""
19
+
19
20
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
20
21
  from disdrodb.l0.l0b_nc_processing import open_raw_netcdf_file, replace_custom_nan_flags, standardize_raw_dataset
21
22
 
@@ -176,23 +176,23 @@ def reader(
176
176
  "number_particles_no_hydrometeor",
177
177
  "number_particles_no_hydrometeor_internal_data",
178
178
  "number_particles_unknown_classification",
179
- "number_particles_unknown_classification_internal_data",
180
- "number_particles_class_1",
181
- "number_particles_class_1_internal_data",
182
- "number_particles_class_2",
183
- "number_particles_class_2_internal_data",
184
- "number_particles_class_3",
185
- "number_particles_class_3_internal_data",
186
- "number_particles_class_4",
187
- "number_particles_class_4_internal_data",
188
- "number_particles_class_5",
189
- "number_particles_class_5_internal_data",
190
- "number_particles_class_6",
191
- "number_particles_class_6_internal_data",
192
- "number_particles_class_7",
193
- "number_particles_class_7_internal_data",
194
- "number_particles_class_8",
195
- "number_particles_class_8_internal_data",
179
+ "total_gross_volume_unknown_classification",
180
+ "number_particles_hail",
181
+ "total_gross_volume_hail",
182
+ "number_particles_solid_precipitation",
183
+ "total_gross_volume_solid_precipitation",
184
+ "number_particles_large_pellet",
185
+ "total_gross_volume_large_pellet",
186
+ "number_particles_small_pellet",
187
+ "total_gross_volume_small_pellet",
188
+ "number_particles_snowgrain",
189
+ "total_gross_volume_snowgrain",
190
+ "number_particles_rain",
191
+ "total_gross_volume_rain",
192
+ "number_particles_small_rain",
193
+ "total_gross_volume_small_rain",
194
+ "number_particles_drizzle",
195
+ "total_gross_volume_drizzle",
196
196
  "number_particles_class_9",
197
197
  "number_particles_class_9_internal_data",
198
198
  "TO_BE_FURTHER_PROCESSED",
@@ -135,23 +135,23 @@ def reader(
135
135
  "number_particles_no_hydrometeor",
136
136
  "number_particles_no_hydrometeor_internal_data",
137
137
  "number_particles_unknown_classification",
138
- "number_particles_unknown_classification_internal_data",
139
- "number_particles_class_1",
140
- "number_particles_class_1_internal_data",
141
- "number_particles_class_2",
142
- "number_particles_class_2_internal_data",
143
- "number_particles_class_3",
144
- "number_particles_class_3_internal_data",
145
- "number_particles_class_4",
146
- "number_particles_class_4_internal_data",
147
- "number_particles_class_5",
148
- "number_particles_class_5_internal_data",
149
- "number_particles_class_6",
150
- "number_particles_class_6_internal_data",
151
- "number_particles_class_7",
152
- "number_particles_class_7_internal_data",
153
- "number_particles_class_8",
154
- "number_particles_class_8_internal_data",
138
+ "total_gross_volume_unknown_classification",
139
+ "number_particles_hail",
140
+ "total_gross_volume_hail",
141
+ "number_particles_solid_precipitation",
142
+ "total_gross_volume_solid_precipitation",
143
+ "number_particles_large_pellet",
144
+ "total_gross_volume_large_pellet",
145
+ "number_particles_small_pellet",
146
+ "total_gross_volume_small_pellet",
147
+ "number_particles_snowgrain",
148
+ "total_gross_volume_snowgrain",
149
+ "number_particles_rain",
150
+ "total_gross_volume_rain",
151
+ "number_particles_small_rain",
152
+ "total_gross_volume_small_rain",
153
+ "number_particles_drizzle",
154
+ "total_gross_volume_drizzle",
155
155
  "number_particles_class_9",
156
156
  "number_particles_class_9_internal_data",
157
157
  "raw_drop_number",
@@ -135,23 +135,23 @@ def reader(
135
135
  "number_particles_no_hydrometeor",
136
136
  "number_particles_no_hydrometeor_internal_data",
137
137
  "number_particles_unknown_classification",
138
- "number_particles_unknown_classification_internal_data",
139
- "number_particles_class_1",
140
- "number_particles_class_1_internal_data",
141
- "number_particles_class_2",
142
- "number_particles_class_2_internal_data",
143
- "number_particles_class_3",
144
- "number_particles_class_3_internal_data",
145
- "number_particles_class_4",
146
- "number_particles_class_4_internal_data",
147
- "number_particles_class_5",
148
- "number_particles_class_5_internal_data",
149
- "number_particles_class_6",
150
- "number_particles_class_6_internal_data",
151
- "number_particles_class_7",
152
- "number_particles_class_7_internal_data",
153
- "number_particles_class_8",
154
- "number_particles_class_8_internal_data",
138
+ "total_gross_volume_unknown_classification",
139
+ "number_particles_hail",
140
+ "total_gross_volume_hail",
141
+ "number_particles_solid_precipitation",
142
+ "total_gross_volume_solid_precipitation",
143
+ "number_particles_large_pellet",
144
+ "total_gross_volume_large_pellet",
145
+ "number_particles_small_pellet",
146
+ "total_gross_volume_small_pellet",
147
+ "number_particles_snowgrain",
148
+ "total_gross_volume_snowgrain",
149
+ "number_particles_rain",
150
+ "total_gross_volume_rain",
151
+ "number_particles_small_rain",
152
+ "total_gross_volume_small_rain",
153
+ "number_particles_drizzle",
154
+ "total_gross_volume_drizzle",
155
155
  "number_particles_class_9",
156
156
  "number_particles_class_9_internal_data",
157
157
  "raw_drop_number",
@@ -15,6 +15,7 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """DISDRODB reader for DWD stations."""
18
+
18
19
  import glob
19
20
  import os
20
21
  from pathlib import Path
@@ -83,23 +84,23 @@ COLUMNS = [
83
84
  "number_particles_no_hydrometeor",
84
85
  "number_particles_no_hydrometeor_internal_data",
85
86
  "number_particles_unknown_classification",
86
- "number_particles_unknown_classification_internal_data",
87
- "number_particles_class_1",
88
- "number_particles_class_1_internal_data",
89
- "number_particles_class_2",
90
- "number_particles_class_2_internal_data",
91
- "number_particles_class_3",
92
- "number_particles_class_3_internal_data",
93
- "number_particles_class_4",
94
- "number_particles_class_4_internal_data",
95
- "number_particles_class_5",
96
- "number_particles_class_5_internal_data",
97
- "number_particles_class_6",
98
- "number_particles_class_6_internal_data",
99
- "number_particles_class_7",
100
- "number_particles_class_7_internal_data",
101
- "number_particles_class_8",
102
- "number_particles_class_8_internal_data",
87
+ "total_gross_volume_unknown_classification",
88
+ "number_particles_hail",
89
+ "total_gross_volume_hail",
90
+ "number_particles_solid_precipitation",
91
+ "total_gross_volume_solid_precipitation",
92
+ "number_particles_large_pellet",
93
+ "total_gross_volume_large_pellet",
94
+ "number_particles_small_pellet",
95
+ "total_gross_volume_small_pellet",
96
+ "number_particles_snowgrain",
97
+ "total_gross_volume_snowgrain",
98
+ "number_particles_rain",
99
+ "total_gross_volume_rain",
100
+ "number_particles_small_rain",
101
+ "total_gross_volume_small_rain",
102
+ "number_particles_drizzle",
103
+ "total_gross_volume_drizzle",
103
104
  "number_particles_class_9",
104
105
  "number_particles_class_9_internal_data",
105
106
  "raw_drop_number",
@@ -178,7 +179,9 @@ def retrieve_synop_filepaths(df, filepath):
178
179
  ymd = d.strftime("%Y%m%d")
179
180
  fname_pattern = f"synop10min_{station_id}_{ymd}*1.0days.dat"
180
181
  glob_pattern = os.path.join(synop_base_dir, y, m, fname_pattern)
181
- synop_filepaths.append(*glob.glob(glob_pattern))
182
+ files = glob.glob(glob_pattern)
183
+ if len(files) >= 1:
184
+ synop_filepaths.append(*files)
182
185
  return synop_filepaths
183
186
 
184
187
 
@@ -416,23 +419,23 @@ def parse_format_v2(df):
416
419
  "number_particles_no_hydrometeor",
417
420
  "number_particles_no_hydrometeor_internal_data",
418
421
  "number_particles_unknown_classification",
419
- "number_particles_unknown_classification_internal_data",
420
- "number_particles_class_1",
421
- "number_particles_class_1_internal_data",
422
- "number_particles_class_2",
423
- "number_particles_class_2_internal_data",
424
- "number_particles_class_3",
425
- "number_particles_class_3_internal_data",
426
- "number_particles_class_4",
427
- "number_particles_class_4_internal_data",
428
- "number_particles_class_5",
429
- "number_particles_class_5_internal_data",
430
- "number_particles_class_6",
431
- "number_particles_class_6_internal_data",
432
- "number_particles_class_7",
433
- "number_particles_class_7_internal_data",
434
- "number_particles_class_8",
435
- "number_particles_class_8_internal_data",
422
+ "total_gross_volume_unknown_classification",
423
+ "number_particles_hail",
424
+ "total_gross_volume_hail",
425
+ "number_particles_solid_precipitation",
426
+ "total_gross_volume_solid_precipitation",
427
+ "number_particles_large_pellet",
428
+ "total_gross_volume_large_pellet",
429
+ "number_particles_small_pellet",
430
+ "total_gross_volume_small_pellet",
431
+ "number_particles_snowgrain",
432
+ "total_gross_volume_snowgrain",
433
+ "number_particles_rain",
434
+ "total_gross_volume_rain",
435
+ "number_particles_small_rain",
436
+ "total_gross_volume_small_rain",
437
+ "number_particles_drizzle",
438
+ "total_gross_volume_drizzle",
436
439
  "number_particles_class_9",
437
440
  "number_particles_class_9_internal_data",
438
441
  "raw_drop_number",
@@ -536,23 +539,23 @@ def parse_format_v3(df):
536
539
  # "number_particles_no_hydrometeor",
537
540
  # "number_particles_no_hydrometeor_internal_data",
538
541
  # "number_particles_unknown_classification",
539
- # "number_particles_unknown_classification_internal_data",
540
- # "number_particles_class_1",
541
- # "number_particles_class_1_internal_data",
542
- # "number_particles_class_2",
543
- # "number_particles_class_2_internal_data",
544
- # "number_particles_class_3",
545
- # "number_particles_class_3_internal_data",
546
- # "number_particles_class_4",
547
- # "number_particles_class_4_internal_data",
548
- # "number_particles_class_5",
549
- # "number_particles_class_5_internal_data",
550
- # "number_particles_class_6",
551
- # "number_particles_class_6_internal_data",
552
- # "number_particles_class_7",
553
- # "number_particles_class_7_internal_data",
554
- # "number_particles_class_8",
555
- # "number_particles_class_8_internal_data",
542
+ # "total_gross_volume_unknown_classification",
543
+ # "number_particles_hail",
544
+ # "total_gross_volume_hail",
545
+ # "number_particles_solid_precipitation",
546
+ # "total_gross_volume_solid_precipitation",
547
+ # "number_particles_large_pellet",
548
+ # "total_gross_volume_large_pellet",
549
+ # "number_particles_small_pellet",
550
+ # "total_gross_volume_small_pellet",
551
+ # "number_particles_snowgrain",
552
+ # "total_gross_volume_snowgrain",
553
+ # "number_particles_rain",
554
+ # "total_gross_volume_rain",
555
+ # "number_particles_small_rain",
556
+ # "total_gross_volume_small_rain",
557
+ # "number_particles_drizzle",
558
+ # "total_gross_volume_drizzle",
556
559
  # "number_particles_class_9",
557
560
  # "number_particles_class_9_internal_data",
558
561
  "raw_drop_number",
@@ -15,6 +15,7 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """DISDRODB reader for GID LPM sensors not measuring wind."""
18
+
18
19
  import os
19
20
 
20
21
  import numpy as np
@@ -160,23 +161,23 @@ def reader(
160
161
  "number_particles_no_hydrometeor",
161
162
  "number_particles_no_hydrometeor_internal_data",
162
163
  "number_particles_unknown_classification",
163
- "number_particles_unknown_classification_internal_data",
164
- "number_particles_class_1",
165
- "number_particles_class_1_internal_data",
166
- "number_particles_class_2",
167
- "number_particles_class_2_internal_data",
168
- "number_particles_class_3",
169
- "number_particles_class_3_internal_data",
170
- "number_particles_class_4",
171
- "number_particles_class_4_internal_data",
172
- "number_particles_class_5",
173
- "number_particles_class_5_internal_data",
174
- "number_particles_class_6",
175
- "number_particles_class_6_internal_data",
176
- "number_particles_class_7",
177
- "number_particles_class_7_internal_data",
178
- "number_particles_class_8",
179
- "number_particles_class_8_internal_data",
164
+ "total_gross_volume_unknown_classification",
165
+ "number_particles_hail",
166
+ "total_gross_volume_hail",
167
+ "number_particles_solid_precipitation",
168
+ "total_gross_volume_solid_precipitation",
169
+ "number_particles_large_pellet",
170
+ "total_gross_volume_large_pellet",
171
+ "number_particles_small_pellet",
172
+ "total_gross_volume_small_pellet",
173
+ "number_particles_snowgrain",
174
+ "total_gross_volume_snowgrain",
175
+ "number_particles_rain",
176
+ "total_gross_volume_rain",
177
+ "number_particles_small_rain",
178
+ "total_gross_volume_small_rain",
179
+ "number_particles_drizzle",
180
+ "total_gross_volume_drizzle",
180
181
  "number_particles_class_9",
181
182
  "number_particles_class_9_internal_data",
182
183
  "raw_drop_number",