disdrodb 0.1.4__py3-none-any.whl → 0.1.5__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 (85) hide show
  1. disdrodb/_version.py +2 -2
  2. disdrodb/api/create_directories.py +0 -2
  3. disdrodb/cli/disdrodb_create_summary.py +10 -0
  4. disdrodb/cli/disdrodb_create_summary_station.py +10 -0
  5. disdrodb/constants.py +1 -1
  6. disdrodb/etc/products/L1/global.yaml +1 -1
  7. disdrodb/etc/products/L2E/5MIN.yaml +1 -0
  8. disdrodb/etc/products/L2E/global.yaml +1 -1
  9. disdrodb/etc/products/L2M/GAMMA_GS_ND_MAE.yaml +6 -0
  10. disdrodb/etc/products/L2M/GAMMA_ML.yaml +1 -1
  11. disdrodb/etc/products/L2M/LOGNORMAL_GS_LOG_ND_MAE.yaml +6 -0
  12. disdrodb/etc/products/L2M/LOGNORMAL_GS_ND_MAE.yaml +6 -0
  13. disdrodb/etc/products/L2M/LOGNORMAL_ML.yaml +8 -0
  14. disdrodb/etc/products/L2M/global.yaml +11 -3
  15. disdrodb/l0/check_configs.py +49 -16
  16. disdrodb/l0/configs/LPM/l0a_encodings.yml +2 -2
  17. disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +2 -2
  18. disdrodb/l0/configs/LPM/l0b_encodings.yml +2 -2
  19. disdrodb/l0/configs/LPM/raw_data_format.yml +2 -2
  20. disdrodb/l0/configs/PWS100/l0b_encodings.yml +1 -0
  21. disdrodb/l0/configs/SWS250/bins_diameter.yml +108 -0
  22. disdrodb/l0/configs/SWS250/bins_velocity.yml +83 -0
  23. disdrodb/l0/configs/SWS250/l0a_encodings.yml +18 -0
  24. disdrodb/l0/configs/SWS250/l0b_cf_attrs.yml +72 -0
  25. disdrodb/l0/configs/SWS250/l0b_encodings.yml +155 -0
  26. disdrodb/l0/configs/SWS250/raw_data_format.yml +148 -0
  27. disdrodb/l0/l0b_processing.py +70 -15
  28. disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +1 -1
  29. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +2 -2
  30. disdrodb/l0/readers/LPM/BELGIUM/ULIEGE.py +256 -0
  31. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +2 -2
  32. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +2 -2
  33. disdrodb/l0/readers/LPM/GERMANY/DWD.py +491 -0
  34. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +2 -2
  35. disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +2 -2
  36. disdrodb/l0/readers/LPM/KIT/CHWALA.py +2 -2
  37. disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +107 -12
  38. disdrodb/l0/readers/LPM/SLOVENIA/UL.py +3 -3
  39. disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +2 -2
  40. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +5 -14
  41. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +5 -14
  42. disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +117 -8
  43. disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +10 -14
  44. disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +10 -14
  45. disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +8 -14
  46. disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +382 -0
  47. disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +4 -0
  48. disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +1 -1
  49. disdrodb/l0/readers/PARSIVEL2/GREECE/NOA.py +127 -0
  50. disdrodb/l0/readers/PARSIVEL2/ITALY/HYDROX.py +239 -0
  51. disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +5 -11
  52. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +4 -17
  53. disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +5 -14
  54. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +10 -13
  55. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +10 -13
  56. disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PANGASA.py +232 -0
  57. disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +6 -18
  58. disdrodb/l0/readers/PARSIVEL2/SPAIN/GRANADA.py +120 -0
  59. disdrodb/l0/readers/PARSIVEL2/USA/C3WE.py +7 -25
  60. disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +321 -0
  61. disdrodb/l0/readers/SW250/BELGIUM/KMI.py +239 -0
  62. disdrodb/l1/beard_model.py +31 -129
  63. disdrodb/l1/fall_velocity.py +136 -83
  64. disdrodb/l1/filters.py +25 -28
  65. disdrodb/l1/processing.py +11 -13
  66. disdrodb/l1_env/routines.py +46 -17
  67. disdrodb/l2/empirical_dsd.py +6 -0
  68. disdrodb/l2/processing.py +2 -2
  69. disdrodb/metadata/geolocation.py +0 -2
  70. disdrodb/psd/fitting.py +16 -13
  71. disdrodb/routines/l2.py +35 -23
  72. disdrodb/routines/wrappers.py +5 -0
  73. disdrodb/scattering/axis_ratio.py +90 -84
  74. disdrodb/scattering/permittivity.py +6 -0
  75. disdrodb/summary/routines.py +38 -12
  76. disdrodb/utils/attrs.py +2 -0
  77. disdrodb/utils/encoding.py +5 -0
  78. disdrodb/utils/time.py +2 -2
  79. disdrodb/viz/plots.py +24 -1
  80. {disdrodb-0.1.4.dist-info → disdrodb-0.1.5.dist-info}/METADATA +2 -1
  81. {disdrodb-0.1.4.dist-info → disdrodb-0.1.5.dist-info}/RECORD +85 -65
  82. {disdrodb-0.1.4.dist-info → disdrodb-0.1.5.dist-info}/WHEEL +0 -0
  83. {disdrodb-0.1.4.dist-info → disdrodb-0.1.5.dist-info}/entry_points.txt +0 -0
  84. {disdrodb-0.1.4.dist-info → disdrodb-0.1.5.dist-info}/licenses/LICENSE +0 -0
  85. {disdrodb-0.1.4.dist-info → disdrodb-0.1.5.dist-info}/top_level.txt +0 -0
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.1.4'
32
- __version_tuple__ = version_tuple = (0, 1, 4)
31
+ __version__ = version = '0.1.5'
32
+ __version_tuple__ = version_tuple = (0, 1, 5)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -85,8 +85,6 @@ def create_l0_directory_structure(
85
85
  ``product = "L0A"`` will call ``run_l0a``.
86
86
  ``product = "L0B"`` will call ``run_l0b_nc``.
87
87
  """
88
- from disdrodb.configs import get_data_archive_dir, get_metadata_archive_dir
89
-
90
88
  # Retrieve the DISDRODB Metadata Archive directory
91
89
  data_archive_dir = get_data_archive_dir(data_archive_dir)
92
90
  metadata_archive_dir = get_metadata_archive_dir(metadata_archive_dir)
@@ -39,6 +39,14 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
39
39
  @click_data_archive_dir_option
40
40
  @click_metadata_archive_dir_option
41
41
  @click.option("-p", "--parallel", type=bool, show_default=True, default=False, help="Read files in parallel")
42
+ @click.option(
43
+ "-t",
44
+ "--temporal_resolution",
45
+ type=str,
46
+ show_default=True,
47
+ default="1MIN",
48
+ help="Temporal resolution of the L2E product to be used for the summary.",
49
+ )
42
50
  def disdrodb_create_summary(
43
51
  # Stations options
44
52
  data_sources: Optional[str] = None,
@@ -46,6 +54,7 @@ def disdrodb_create_summary(
46
54
  station_names: Optional[str] = None,
47
55
  # Processing options:
48
56
  parallel=False,
57
+ temporal_resolution="1MIN",
49
58
  # DISDRODB root directories
50
59
  data_archive_dir: Optional[str] = None,
51
60
  metadata_archive_dir: Optional[str] = None,
@@ -92,6 +101,7 @@ def disdrodb_create_summary(
92
101
  station_names=station_names,
93
102
  # Options
94
103
  parallel=parallel,
104
+ temporal_resolution=temporal_resolution,
95
105
  # DISDRODB root directory
96
106
  data_archive_dir=data_archive_dir,
97
107
  metadata_archive_dir=metadata_archive_dir,
@@ -36,6 +36,14 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
36
36
  @click_station_arguments
37
37
  @click_data_archive_dir_option
38
38
  @click.option("-p", "--parallel", type=bool, show_default=True, default=False, help="Read files in parallel")
39
+ @click.option(
40
+ "-t",
41
+ "--temporal_resolution",
42
+ type=str,
43
+ show_default=True,
44
+ default="1MIN",
45
+ help="Temporal resolution of the L2E product to be used for the summary.",
46
+ )
39
47
  def disdrodb_create_summary_station(
40
48
  # Station arguments
41
49
  data_source: str,
@@ -43,6 +51,7 @@ def disdrodb_create_summary_station(
43
51
  station_name: str,
44
52
  # Processing options:
45
53
  parallel=False,
54
+ temporal_resolution="1MIN",
46
55
  # DISDRODB root directories
47
56
  data_archive_dir: Optional[str] = None,
48
57
  ):
@@ -81,6 +90,7 @@ def disdrodb_create_summary_station(
81
90
  station_name=station_name,
82
91
  # Options
83
92
  parallel=parallel,
93
+ temporal_resolution=temporal_resolution,
84
94
  # DISDRODB root directory
85
95
  data_archive_dir=data_archive_dir,
86
96
  )
disdrodb/constants.py CHANGED
@@ -41,7 +41,7 @@ COORDINATES = [
41
41
  "time",
42
42
  "sample_interval",
43
43
  ]
44
- OPTICAL_SENSORS = ["PARSIVEL", "PARSIVEL2", "LPM", "PWS100"]
44
+ OPTICAL_SENSORS = ["PARSIVEL", "PARSIVEL2", "LPM", "PWS100", "SWS250"]
45
45
  IMPACT_SENSORS = ["RD80"]
46
46
 
47
47
  PRODUCTS = ["RAW", "L0A", "L0B", "L0C", "L1", "L2E", "L2M"]
@@ -1,5 +1,5 @@
1
1
  product_options:
2
- fall_velocity_method: "Beard1976"
2
+ fall_velocity_model: "Beard1976"
3
3
  minimum_diameter: 0
4
4
  maximum_diameter: 10
5
5
  minimum_velocity: 0
@@ -0,0 +1 @@
1
+ radar_enabled: True
@@ -1,4 +1,4 @@
1
- temporal_resolutions: ["1MIN", "5MIN", "10MIN", "ROLL1MIN"]
1
+ temporal_resolutions: [1MIN"] # "5MIN", "10MIN", "ROLL1MIN"]
2
2
  archive_options:
3
3
  strategy: time_block
4
4
  strategy_options:
@@ -0,0 +1,6 @@
1
+ psd_model: "GammaPSD"
2
+ optimization: "GS"
3
+ optimization_kwargs:
4
+ target: "ND"
5
+ transformation: "identity"
6
+ error_order: 1
@@ -1,7 +1,7 @@
1
1
  psd_model: "GammaPSD"
2
2
  optimization: "ML"
3
3
  optimization_kwargs:
4
- init_method: "M346"
4
+ init_method: "None"
5
5
  probability_method: "cdf"
6
6
  likelihood: "multinomial"
7
7
  truncated_likelihood: True
@@ -0,0 +1,6 @@
1
+ psd_model: "LognormalPSD"
2
+ optimization: "GS"
3
+ optimization_kwargs:
4
+ target: "ND"
5
+ transformation: "log"
6
+ error_order: 1
@@ -0,0 +1,6 @@
1
+ psd_model: "LognormalPSD"
2
+ optimization: "GS"
3
+ optimization_kwargs:
4
+ target: "ND"
5
+ transformation: "identity"
6
+ error_order: 1
@@ -0,0 +1,8 @@
1
+ psd_model: "LognormalPSD"
2
+ optimization: "ML"
3
+ optimization_kwargs:
4
+ init_method: "None"
5
+ probability_method: "cdf"
6
+ likelihood: "multinomial"
7
+ truncated_likelihood: True
8
+ optimizer: "Nelder-Mead"
@@ -1,12 +1,20 @@
1
- temporal_resolutions: ["1MIN", "5MIN", "10MIN"]
2
- models: ["GAMMA_ML", "NGAMMA_GS_LOG_ND_MAE"]
1
+ temporal_resolutions: ["1MIN"] #, "5MIN", "10MIN"]
2
+ models:
3
+ [
4
+ "GAMMA_ML",
5
+ "GAMMA_GS_ND_MAE",
6
+ "NGAMMA_GS_LOG_ND_MAE",
7
+ "NGAMMA_GS_ND_MAE",
8
+ "LOGNORMAL_ML",
9
+ "LOGNORMAL_GS_ND_MAE",
10
+ ]
3
11
  archive_options:
4
12
  strategy: time_block
5
13
  strategy_options:
6
14
  freq: month
7
15
  folder_partitioning: ""
8
16
  product_options:
9
- fall_velocity_method: "Beard1976"
17
+ fall_velocity_model: "Beard1976"
10
18
  diameter_min: 0
11
19
  diameter_max: 10
12
20
  diameter_spacing: 0.05
@@ -22,7 +22,7 @@ import os
22
22
  from typing import Optional, Union
23
23
 
24
24
  import numpy as np
25
- from pydantic import BaseModel, ValidationError, field_validator, model_validator
25
+ from pydantic import BaseModel, Field, ValidationError, field_validator, model_validator
26
26
 
27
27
  from disdrodb.api.configs import available_sensor_names, get_sensor_configs_dir, read_config_file
28
28
  from disdrodb.l0.standards import (
@@ -47,7 +47,7 @@ CONFIG_FILES_LIST = [
47
47
  ]
48
48
 
49
49
 
50
- def _check_yaml_files_exists(sensor_name: str) -> None:
50
+ def check_yaml_files_exists(sensor_name: str) -> None:
51
51
  """Check if all L0 config YAML files exist.
52
52
 
53
53
  Parameters
@@ -64,7 +64,7 @@ def _check_yaml_files_exists(sensor_name: str) -> None:
64
64
  raise FileNotFoundError(f"Missing YAML files {missing_keys_text} in {config_dir} for sensor {sensor_name}.")
65
65
 
66
66
 
67
- def _check_variable_consistency(sensor_name: str) -> None:
67
+ def check_variable_consistency(sensor_name: str) -> None:
68
68
  """
69
69
  Check variable consistency across config files.
70
70
 
@@ -126,7 +126,7 @@ def _schema_error(object_to_validate: Union[str, list], schema: BaseModel, messa
126
126
 
127
127
 
128
128
  class L0BEncodingSchema(BaseModel):
129
- """Pydantic model for DISDRODB L0B encodings."""
129
+ """Pydantic model for DISDRODB netCDF encodings."""
130
130
 
131
131
  contiguous: bool
132
132
  dtype: str
@@ -134,7 +134,7 @@ class L0BEncodingSchema(BaseModel):
134
134
  complevel: int
135
135
  shuffle: bool
136
136
  fletcher32: bool
137
- _FillValue: Optional[Union[int, float]]
137
+ FillValue: Optional[Union[int, float]] = Field(default=None, alias="_FillValue")
138
138
  chunksizes: Optional[Union[int, list[int]]]
139
139
 
140
140
  # if contiguous=False, chunksizes specified, otherwise should be not !
@@ -167,6 +167,39 @@ class L0BEncodingSchema(BaseModel):
167
167
  raise ValueError("'fletcher32' must be set to False if 'contiguous' is True")
168
168
  return values
169
169
 
170
+ # if dtype is integer/unsigned integer, _FillValue must be specified and valid
171
+ @model_validator(mode="before")
172
+ def check_integer_fillvalue(cls, values):
173
+ """Check that integer dtypes have valid _FillValue."""
174
+ dtype = values.get("dtype")
175
+ fill_value = values.get("_FillValue", None)
176
+ integer_types = ["int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64"]
177
+ # Check if dtype is an integer type
178
+ if dtype in integer_types:
179
+ # _FillValue must be specified for integer types
180
+ if fill_value is None:
181
+ raise ValueError(f"'_FillValue' must be specified for integer dtype '{dtype}'")
182
+
183
+ # Check that _FillValue is within valid range for the dtype
184
+ dtype_info = np.iinfo(dtype)
185
+ max_value = dtype_info.max
186
+ # min_value = dtype_info.min
187
+
188
+ # if not (min_value <= fill_value <= max_value):
189
+ # raise ValueError(
190
+ # f"'_FillValue' ({fill_value}) is out of range for dtype '{dtype}'. "
191
+ # f"Valid range is [{min_value}, {max_value}]",
192
+ # )
193
+
194
+ # Check that _FillValue corresponds to the maximum allowed value
195
+ if fill_value != max_value:
196
+ raise ValueError(
197
+ f"'_FillValue' ({fill_value}) should be set to the maximum allowed value "
198
+ f"({max_value}) for integer dtype '{dtype}'",
199
+ )
200
+
201
+ return values
202
+
170
203
 
171
204
  def check_l0b_encoding(sensor_name: str) -> None:
172
205
  """Check ``l0b_encodings.yml`` file based on the schema defined in the class ``L0BEncodingSchema``.
@@ -176,7 +209,7 @@ def check_l0b_encoding(sensor_name: str) -> None:
176
209
  sensor_name : str
177
210
  Name of the sensor.
178
211
  """
179
- data = read_config_file(sensor_name, product="L0A", filename="l0b_encodings.yml")
212
+ data = read_config_file(sensor_name, product="L0B", filename="l0b_encodings.yml")
180
213
 
181
214
  # check that the second level of the dictionary match the schema
182
215
  for key, value in data.items():
@@ -234,7 +267,7 @@ class RawDataFormatSchema(BaseModel):
234
267
  return None
235
268
 
236
269
 
237
- def _check_raw_data_format(sensor_name: str) -> None:
270
+ def check_raw_data_format(sensor_name: str) -> None:
238
271
  """Check ``raw_data_format.yml`` file based on the schema defined in the class ``RawDataFormatSchema``.
239
272
 
240
273
  Parameters
@@ -253,7 +286,7 @@ def _check_raw_data_format(sensor_name: str) -> None:
253
286
  )
254
287
 
255
288
 
256
- def _check_cf_attributes(sensor_name: str) -> None:
289
+ def check_cf_attributes(sensor_name: str) -> None:
257
290
  """Check that the ``l0b_cf_attrs.yml`` description, long_name and units values are strings.
258
291
 
259
292
  Parameters
@@ -268,7 +301,7 @@ def _check_cf_attributes(sensor_name: str) -> None:
268
301
  raise ValueError(f"Wrong value for {key} in {var} for sensor {sensor_name}.")
269
302
 
270
303
 
271
- def _check_bin_consistency(sensor_name: str) -> None:
304
+ def check_bin_consistency(sensor_name: str) -> None:
272
305
  """Check bin consistency from config file.
273
306
 
274
307
  Do not check the first and last bin !
@@ -313,7 +346,7 @@ def _check_bin_consistency(sensor_name: str) -> None:
313
346
  )
314
347
 
315
348
 
316
- def _check_raw_array(sensor_name: str) -> None:
349
+ def check_raw_array(sensor_name: str) -> None:
317
350
  """Check raw array consistency from config file.
318
351
 
319
352
  Parameters
@@ -363,14 +396,14 @@ def check_sensor_configs(sensor_name: str) -> None:
363
396
  sensor_name : str
364
397
  Name of the sensor.
365
398
  """
366
- _check_yaml_files_exists(sensor_name)
367
- _check_variable_consistency(sensor_name)
399
+ check_yaml_files_exists(sensor_name)
400
+ check_variable_consistency(sensor_name)
368
401
  check_l0b_encoding(sensor_name=sensor_name)
369
402
  check_l0a_encoding(sensor_name=sensor_name)
370
- _check_raw_data_format(sensor_name=sensor_name)
371
- _check_cf_attributes(sensor_name=sensor_name)
372
- _check_bin_consistency(sensor_name=sensor_name)
373
- _check_raw_array(sensor_name=sensor_name)
403
+ check_raw_data_format(sensor_name=sensor_name)
404
+ check_cf_attributes(sensor_name=sensor_name)
405
+ check_bin_consistency(sensor_name=sensor_name)
406
+ check_raw_array(sensor_name=sensor_name)
374
407
 
375
408
 
376
409
  def check_all_sensors_configs() -> None:
@@ -15,7 +15,7 @@ reflectivity: "float32"
15
15
  quality_index: "float32" # 'uint8'
16
16
  max_hail_diameter: "float32"
17
17
  laser_status: "float32" # 'uint8'
18
- static_signal: "float32" # 'uint8'
18
+ static_signal_status: "float32" # 'uint8'
19
19
  laser_temperature_analog_status: "float32" # 'uint8'
20
20
  laser_temperature_digital_status: "float32" # 'uint8'
21
21
  laser_current_analog_status: "float32" # 'uint8'
@@ -29,7 +29,7 @@ current_heating_house_status: "float32" # 'uint8'
29
29
  current_heating_heads_status: "float32" # 'uint8'
30
30
  current_heating_carriers_status: "float32" # 'uint8'
31
31
  control_output_laser_power_status: "float32" # 'uint8'
32
- reserve_status: "float32" # 'uint8'
32
+ reserved_status: "float32" # 'uint8'
33
33
  temperature_interior: "float32" # 'uint16'
34
34
  laser_temperature: "float32" # 'uint16'
35
35
  laser_current_average: "float32" # 'uint16'
@@ -66,7 +66,7 @@ laser_status:
66
66
  description: Status Laser (OK/on:0, off:1)
67
67
  long_name: Status laser
68
68
  units: ""
69
- static_signal:
69
+ static_signal_status:
70
70
  description: Static signal (OK:0, Error:1)
71
71
  long_name: Static signal
72
72
  units: ""
@@ -122,7 +122,7 @@ control_output_laser_power_status:
122
122
  description: Status Control output laser power (OK:0, warning:1)
123
123
  long_name: Status control output laser
124
124
  units: ""
125
- reserve_status:
125
+ reserved_status:
126
126
  description: Reserve Status (0)
127
127
  long_name: Reserve status
128
128
  units: ""
@@ -184,7 +184,7 @@ laser_status:
184
184
  contiguous: false
185
185
  chunksizes: 5000
186
186
  _FillValue: 255
187
- static_signal:
187
+ static_signal_status:
188
188
  dtype: uint8
189
189
  zlib: true
190
190
  complevel: 3
@@ -310,7 +310,7 @@ control_output_laser_power_status:
310
310
  contiguous: false
311
311
  chunksizes: 5000
312
312
  _FillValue: 255
313
- reserve_status:
313
+ reserved_status:
314
314
  dtype: uint8
315
315
  zlib: true
316
316
  complevel: 3
@@ -213,7 +213,7 @@ laser_status:
213
213
  - 0
214
214
  - 1
215
215
  field_number: "22"
216
- static_signal:
216
+ static_signal_status:
217
217
  n_digits: 1
218
218
  n_characters: 1
219
219
  n_decimals: 1
@@ -389,7 +389,7 @@ control_output_laser_power_status:
389
389
  - 0
390
390
  - 1
391
391
  field_number: "36"
392
- reserve_status:
392
+ reserved_status:
393
393
  n_digits: 1
394
394
  n_characters: 1
395
395
  n_decimals: 1
@@ -68,6 +68,7 @@ relative_humidity:
68
68
  shuffle: true
69
69
  fletcher32: false
70
70
  contiguous: false
71
+ _FillValue: 65535
71
72
  chunksizes: 5000
72
73
  wetbulb_temperature:
73
74
  dtype: uint16
@@ -0,0 +1,108 @@
1
+ center:
2
+ 0: 0.2
3
+ 1: 0.45
4
+ 2: 0.55
5
+ 3: 0.65
6
+ 4: 0.75
7
+ 5: 0.85
8
+ 6: 0.95
9
+ 7: 1.05
10
+ 8: 1.15
11
+ 9: 1.25
12
+ 10: 1.35
13
+ 11: 1.5
14
+ 12: 1.75
15
+ 13: 2.08
16
+ 14: 2.475
17
+ 15: 2.945
18
+ 16: 3.5
19
+ 17: 4.16
20
+ 18: 4.95
21
+ 19: 5.89
22
+ 20: 6.7
23
+ bounds:
24
+ 0:
25
+ - 0.0
26
+ - 0.4
27
+ 1:
28
+ - 0.4
29
+ - 0.5
30
+ 2:
31
+ - 0.5
32
+ - 0.6
33
+ 3:
34
+ - 0.6
35
+ - 0.7
36
+ 4:
37
+ - 0.7
38
+ - 0.8
39
+ 5:
40
+ - 0.8
41
+ - 0.9
42
+ 6:
43
+ - 0.9
44
+ - 1.0
45
+ 7:
46
+ - 1.0
47
+ - 1.1
48
+ 8:
49
+ - 1.1
50
+ - 1.2
51
+ 9:
52
+ - 1.2
53
+ - 1.3
54
+ 10:
55
+ - 1.3
56
+ - 1.4
57
+ 11:
58
+ - 1.4
59
+ - 1.6
60
+ 12:
61
+ - 1.6
62
+ - 1.9
63
+ 13:
64
+ - 1.9
65
+ - 2.26
66
+ 14:
67
+ - 2.26
68
+ - 2.69
69
+ 15:
70
+ - 2.69
71
+ - 3.2
72
+ 16:
73
+ - 3.2
74
+ - 3.8
75
+ 17:
76
+ - 3.8
77
+ - 4.52
78
+ 18:
79
+ - 4.52
80
+ - 5.38
81
+ 19:
82
+ - 5.38
83
+ - 6.4
84
+ 20:
85
+ - 6.4
86
+ - 7.0
87
+ width:
88
+ 0: 0.4
89
+ 1: 0.1
90
+ 2: 0.1
91
+ 3: 0.1
92
+ 4: 0.1
93
+ 5: 0.1
94
+ 6: 0.1
95
+ 7: 0.1
96
+ 8: 0.1
97
+ 9: 0.1
98
+ 10: 0.1
99
+ 11: 0.2
100
+ 12: 0.3
101
+ 13: 0.36
102
+ 14: 0.43
103
+ 15: 0.51
104
+ 16: 0.6
105
+ 17: 0.72
106
+ 18: 0.86
107
+ 19: 1.02
108
+ 20: 0.6
@@ -0,0 +1,83 @@
1
+ center:
2
+ 0: 0.55
3
+ 1: 0.95
4
+ 2: 1.41
5
+ 3: 1.84
6
+ 4: 2.465
7
+ 5: 3.27
8
+ 6: 4.01
9
+ 7: 4.625
10
+ 8: 5.275
11
+ 9: 6.325
12
+ 10: 7.63
13
+ 11: 9.51
14
+ 12: 11.745
15
+ 13: 14.14
16
+ 14: 17.775
17
+ 15: 22.5
18
+ bounds:
19
+ 0:
20
+ - 0.40
21
+ - 0.70
22
+ 1:
23
+ - 0.70
24
+ - 1.20
25
+ 2:
26
+ - 1.20
27
+ - 1.62
28
+ 3:
29
+ - 1.62
30
+ - 2.06
31
+ 4:
32
+ - 2.06
33
+ - 2.87
34
+ 5:
35
+ - 2.87
36
+ - 3.67
37
+ 6:
38
+ - 3.67
39
+ - 4.35
40
+ 7:
41
+ - 4.35
42
+ - 4.90
43
+ 8:
44
+ - 4.90
45
+ - 5.65
46
+ 9:
47
+ - 5.65
48
+ - 7.00
49
+ 10:
50
+ - 7.00
51
+ - 8.26
52
+ 11:
53
+ - 8.26
54
+ - 10.76
55
+ 12:
56
+ - 10.76
57
+ - 12.73
58
+ 13:
59
+ - 12.73
60
+ - 15.55
61
+ 14:
62
+ - 15.55
63
+ - 20.00
64
+ 15:
65
+ - 20.00
66
+ - 25.00
67
+ width:
68
+ 0: 0.3
69
+ 1: 0.5
70
+ 2: 0.42
71
+ 3: 0.44
72
+ 4: 0.81
73
+ 5: 0.8
74
+ 6: 0.68
75
+ 7: 0.55
76
+ 8: 0.75
77
+ 9: 1.35
78
+ 10: 1.26
79
+ 11: 2.5
80
+ 12: 1.97
81
+ 13: 2.82
82
+ 14: 4.45
83
+ 15: 5.0
@@ -0,0 +1,18 @@
1
+ precipitation_rate: "float32"
2
+ precipitation_accumulated: "float32"
3
+ weather_code_synop_4680: "float32" # 'uint16'
4
+ weather_code_metar_4678: "str"
5
+ past_weather1: "str"
6
+ past_weather2: "str"
7
+ mor_visibility_5min: "float32"
8
+ mor_visibility: "float32" # 'uint16'
9
+ number_particles: "float32" # 'uint32'
10
+ sensor_temperature: "float32" # 'uint16'
11
+ obstruction_status: "str"
12
+ total_extinction_coefficient: "float32"
13
+ transmissometer_extinction_coefficient: "float32"
14
+ back_scatter_extinction_coefficient: "float32"
15
+ ambient_light_sensor_signal: "float32"
16
+ sensor_status: "str" #
17
+ ambient_light_sensor_signal_status: "str"
18
+ raw_drop_number: "str"