disdrodb 0.1.2__py3-none-any.whl → 0.1.4__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 (142) hide show
  1. disdrodb/__init__.py +68 -34
  2. disdrodb/_config.py +5 -4
  3. disdrodb/_version.py +16 -3
  4. disdrodb/accessor/__init__.py +20 -0
  5. disdrodb/accessor/methods.py +125 -0
  6. disdrodb/api/checks.py +177 -24
  7. disdrodb/api/configs.py +3 -3
  8. disdrodb/api/info.py +13 -13
  9. disdrodb/api/io.py +281 -22
  10. disdrodb/api/path.py +184 -195
  11. disdrodb/api/search.py +18 -9
  12. disdrodb/cli/disdrodb_create_summary.py +103 -0
  13. disdrodb/cli/disdrodb_create_summary_station.py +91 -0
  14. disdrodb/cli/disdrodb_run_l0.py +1 -1
  15. disdrodb/cli/disdrodb_run_l0_station.py +1 -1
  16. disdrodb/cli/disdrodb_run_l0a_station.py +1 -1
  17. disdrodb/cli/disdrodb_run_l0b.py +1 -1
  18. disdrodb/cli/disdrodb_run_l0b_station.py +3 -3
  19. disdrodb/cli/disdrodb_run_l0c.py +1 -1
  20. disdrodb/cli/disdrodb_run_l0c_station.py +3 -3
  21. disdrodb/cli/disdrodb_run_l1_station.py +2 -2
  22. disdrodb/cli/disdrodb_run_l2e_station.py +2 -2
  23. disdrodb/cli/disdrodb_run_l2m_station.py +2 -2
  24. disdrodb/configs.py +149 -4
  25. disdrodb/constants.py +61 -0
  26. disdrodb/data_transfer/download_data.py +127 -11
  27. disdrodb/etc/configs/attributes.yaml +339 -0
  28. disdrodb/etc/configs/encodings.yaml +473 -0
  29. disdrodb/etc/products/L1/global.yaml +13 -0
  30. disdrodb/etc/products/L2E/10MIN.yaml +12 -0
  31. disdrodb/etc/products/L2E/1MIN.yaml +1 -0
  32. disdrodb/etc/products/L2E/global.yaml +22 -0
  33. disdrodb/etc/products/L2M/10MIN.yaml +12 -0
  34. disdrodb/etc/products/L2M/GAMMA_ML.yaml +8 -0
  35. disdrodb/etc/products/L2M/NGAMMA_GS_LOG_ND_MAE.yaml +6 -0
  36. disdrodb/etc/products/L2M/NGAMMA_GS_ND_MAE.yaml +6 -0
  37. disdrodb/etc/products/L2M/NGAMMA_GS_Z_MAE.yaml +6 -0
  38. disdrodb/etc/products/L2M/global.yaml +26 -0
  39. disdrodb/issue/writer.py +2 -0
  40. disdrodb/l0/__init__.py +13 -0
  41. disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +4 -4
  42. disdrodb/l0/configs/PARSIVEL/l0b_cf_attrs.yml +1 -1
  43. disdrodb/l0/configs/PARSIVEL/l0b_encodings.yml +3 -3
  44. disdrodb/l0/configs/PARSIVEL/raw_data_format.yml +1 -1
  45. disdrodb/l0/configs/PARSIVEL2/l0b_cf_attrs.yml +5 -5
  46. disdrodb/l0/configs/PARSIVEL2/l0b_encodings.yml +3 -3
  47. disdrodb/l0/configs/PARSIVEL2/raw_data_format.yml +1 -1
  48. disdrodb/l0/configs/PWS100/l0b_cf_attrs.yml +4 -4
  49. disdrodb/l0/configs/PWS100/raw_data_format.yml +1 -1
  50. disdrodb/l0/l0a_processing.py +37 -32
  51. disdrodb/l0/l0b_nc_processing.py +118 -8
  52. disdrodb/l0/l0b_processing.py +30 -65
  53. disdrodb/l0/l0c_processing.py +369 -259
  54. disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +7 -0
  55. disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_LPM_NC.py +66 -0
  56. disdrodb/l0/readers/LPM/SLOVENIA/{CRNI_VRH.py → UL.py} +3 -0
  57. disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +195 -0
  58. disdrodb/l0/readers/PARSIVEL/GPM/PIERS.py +0 -2
  59. disdrodb/l0/readers/PARSIVEL/JAPAN/JMA.py +4 -1
  60. disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +1 -1
  61. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +1 -1
  62. disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +4 -0
  63. disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +168 -0
  64. disdrodb/l0/readers/PARSIVEL2/CANADA/UQAM_NC.py +69 -0
  65. disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +165 -0
  66. disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +69 -0
  67. disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +255 -134
  68. disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +525 -0
  69. disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +1 -1
  70. disdrodb/l0/readers/PARSIVEL2/GPM/GCPEX.py +9 -7
  71. disdrodb/l0/readers/PARSIVEL2/KIT/BURKINA_FASO.py +1 -1
  72. disdrodb/l0/readers/PARSIVEL2/KIT/TEAMX.py +123 -0
  73. disdrodb/l0/readers/PARSIVEL2/{NETHERLANDS/DELFT.py → MPI/BCO_PARSIVEL2.py} +41 -71
  74. disdrodb/l0/readers/PARSIVEL2/MPI/BOWTIE.py +220 -0
  75. disdrodb/l0/readers/PARSIVEL2/NASA/APU.py +120 -0
  76. disdrodb/l0/readers/PARSIVEL2/NASA/LPVEX.py +109 -0
  77. disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +1 -0
  78. disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +1 -1
  79. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +126 -0
  80. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +165 -0
  81. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +1 -1
  82. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +20 -12
  83. disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT_NC.py +5 -0
  84. disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +144 -0
  85. disdrodb/l0/readers/PARSIVEL2/SPAIN/CR1000DL.py +201 -0
  86. disdrodb/l0/readers/PARSIVEL2/SPAIN/LIAISE.py +137 -0
  87. disdrodb/l0/readers/PARSIVEL2/USA/C3WE.py +146 -0
  88. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +105 -99
  89. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +151 -0
  90. disdrodb/l1/__init__.py +5 -0
  91. disdrodb/l1/fall_velocity.py +46 -0
  92. disdrodb/l1/filters.py +34 -20
  93. disdrodb/l1/processing.py +46 -45
  94. disdrodb/l1/resampling.py +77 -66
  95. disdrodb/l1_env/routines.py +18 -3
  96. disdrodb/l2/__init__.py +7 -0
  97. disdrodb/l2/empirical_dsd.py +58 -10
  98. disdrodb/l2/processing.py +268 -117
  99. disdrodb/metadata/checks.py +132 -125
  100. disdrodb/metadata/standards.py +3 -1
  101. disdrodb/psd/fitting.py +631 -345
  102. disdrodb/psd/models.py +9 -6
  103. disdrodb/routines/__init__.py +54 -0
  104. disdrodb/{l0/routines.py → routines/l0.py} +316 -355
  105. disdrodb/{l1/routines.py → routines/l1.py} +76 -116
  106. disdrodb/routines/l2.py +1019 -0
  107. disdrodb/{routines.py → routines/wrappers.py} +98 -10
  108. disdrodb/scattering/__init__.py +16 -4
  109. disdrodb/scattering/axis_ratio.py +61 -37
  110. disdrodb/scattering/permittivity.py +504 -0
  111. disdrodb/scattering/routines.py +746 -184
  112. disdrodb/summary/__init__.py +17 -0
  113. disdrodb/summary/routines.py +4196 -0
  114. disdrodb/utils/archiving.py +434 -0
  115. disdrodb/utils/attrs.py +68 -125
  116. disdrodb/utils/cli.py +5 -5
  117. disdrodb/utils/compression.py +30 -1
  118. disdrodb/utils/dask.py +121 -9
  119. disdrodb/utils/dataframe.py +61 -7
  120. disdrodb/utils/decorators.py +31 -0
  121. disdrodb/utils/directories.py +35 -15
  122. disdrodb/utils/encoding.py +37 -19
  123. disdrodb/{l2 → utils}/event.py +15 -173
  124. disdrodb/utils/logger.py +14 -7
  125. disdrodb/utils/manipulations.py +81 -0
  126. disdrodb/utils/routines.py +166 -0
  127. disdrodb/utils/subsetting.py +214 -0
  128. disdrodb/utils/time.py +35 -177
  129. disdrodb/utils/writer.py +20 -7
  130. disdrodb/utils/xarray.py +5 -4
  131. disdrodb/viz/__init__.py +13 -0
  132. disdrodb/viz/plots.py +398 -0
  133. {disdrodb-0.1.2.dist-info → disdrodb-0.1.4.dist-info}/METADATA +4 -3
  134. {disdrodb-0.1.2.dist-info → disdrodb-0.1.4.dist-info}/RECORD +139 -98
  135. {disdrodb-0.1.2.dist-info → disdrodb-0.1.4.dist-info}/entry_points.txt +2 -0
  136. disdrodb/l1/encoding_attrs.py +0 -642
  137. disdrodb/l2/processing_options.py +0 -213
  138. disdrodb/l2/routines.py +0 -868
  139. /disdrodb/l0/readers/PARSIVEL/SLOVENIA/{UL_FGG.py → UL.py} +0 -0
  140. {disdrodb-0.1.2.dist-info → disdrodb-0.1.4.dist-info}/WHEEL +0 -0
  141. {disdrodb-0.1.2.dist-info → disdrodb-0.1.4.dist-info}/licenses/LICENSE +0 -0
  142. {disdrodb-0.1.2.dist-info → disdrodb-0.1.4.dist-info}/top_level.txt +0 -0
@@ -239,7 +239,7 @@ def check_consistent_station_name(metadata_filepath, station_name):
239
239
  return station_name
240
240
 
241
241
 
242
- def download_station_data(metadata_filepath: str, data_archive_dir: str, force: bool = False) -> None:
242
+ def download_station_data(metadata_filepath: str, data_archive_dir: str, force: bool = False, verbose=True) -> None:
243
243
  """Download and unzip the station data .
244
244
 
245
245
  Parameters
@@ -275,17 +275,27 @@ def download_station_data(metadata_filepath: str, data_archive_dir: str, force:
275
275
  raise ValueError(f"Invalid disdrodb_data_url '{disdrodb_data_url}' for station {station_name}")
276
276
 
277
277
  # Download files
278
- # - Option 1: Zip file from Zenodo containing all station raw data
279
- if disdrodb_data_url.startswith("https://zenodo.org/"):
280
- download_zenodo_zip_file(url=disdrodb_data_url, dst_dir=station_dir, force=force)
278
+ # - Option 1: Download ZIP file containing all station raw data
279
+ if disdrodb_data_url.startswith("https://zenodo.org/") or disdrodb_data_url.startswith("https://cloudnet.fmi.fi/"):
280
+ download_zip_file(url=disdrodb_data_url, dst_dir=station_dir, force=force)
281
+
281
282
  # - Option 2: Recursive download from a web server via HTTP or HTTPS.
282
283
  elif disdrodb_data_url.startswith("http"):
283
- download_web_server_data(url=disdrodb_data_url, dst_dir=station_dir, force=force, verbose=True)
284
+ download_web_server_data(url=disdrodb_data_url, dst_dir=station_dir, force=force, verbose=verbose)
285
+ # - Retry to be more sure that all data have been downloaded
286
+ download_web_server_data(url=disdrodb_data_url, dst_dir=station_dir, force=True, verbose=verbose)
287
+
288
+ # - Option 3: Recursive download from a ftp server
289
+ elif disdrodb_data_url.startswith("ftp"):
290
+ download_ftp_server_data(url=disdrodb_data_url, dst_dir=station_dir, force=force, verbose=verbose)
291
+ # - Retry to be more sure that all data have been downloaded
292
+ download_ftp_server_data(url=disdrodb_data_url, dst_dir=station_dir, force=True, verbose=verbose)
293
+
284
294
  else:
285
295
  raise NotImplementedError(f"Open a GitHub Issue to enable the download of data from {disdrodb_data_url}.")
286
296
 
287
297
 
288
- ####-----------------------------------------------------------------------------------------.
298
+ ####--------------------------------------------------------------------.
289
299
  #### Download from Web Server via HTTP or HTTPS
290
300
 
291
301
 
@@ -301,9 +311,17 @@ def download_web_server_data(url: str, dst_dir: str, force=True, verbose=True) -
301
311
  3. Compute cut-dirs so that only the last segment of the path remains locally.
302
312
  4. Build and run the wget command.
303
313
 
304
- Example:
305
- download_with_wget("https://ruisdael.citg.tudelft.nl/parsivel/PAR001_Cabauw/2021/202101/")
306
- # Creates a local folder "202101/" with all files and subfolders.
314
+ Parameters
315
+ ----------
316
+ url : str
317
+ HTTPS URL pointing to webserver folder. Example: "https://ruisdael.citg.tudelft.nl/parsivel/PAR001_Cabauw/"
318
+ dst_dir : str
319
+ Local directory where to download the file (DISDRODB station data directory).
320
+ force : bool, optional
321
+ If ``True``, re-download new/updated files (skip unchanged ones).
322
+ If ``False``, keep existing files untouched.
323
+ verbose : bool, optional
324
+ Print wget output (default is True).
307
325
  """
308
326
  # 1. Ensure wget exists
309
327
  ensure_wget_available()
@@ -373,7 +391,7 @@ def build_webserver_wget_command(url: str, cut_dirs: int, dst_dir: str, force: b
373
391
  - url
374
392
  """
375
393
  cmd = ["wget"]
376
- if verbose:
394
+ if not verbose:
377
395
  cmd.append("-q")
378
396
  cmd += [
379
397
  "-r",
@@ -393,11 +411,109 @@ def build_webserver_wget_command(url: str, cut_dirs: int, dst_dir: str, force: b
393
411
  return cmd
394
412
 
395
413
 
414
+ ####--------------------------------------------------------------------.
415
+ #### Download from FTP Server
416
+
417
+
418
+ def build_ftp_server_wget_command(
419
+ url: str,
420
+ cut_dirs: int,
421
+ dst_dir: str,
422
+ force: bool,
423
+ verbose: bool,
424
+ ) -> list[str]:
425
+ """Construct the wget command list for FTP recursive download.
426
+
427
+ Parameters
428
+ ----------
429
+ url : str
430
+ FTP URL to download from.
431
+ cut_dirs : int
432
+ Number of leading path components to strip.
433
+ dst_dir : str
434
+ Local destination directory.
435
+ force : bool
436
+ If True, re-download newer files (--timestamping).
437
+ If False, keep existing files untouched (--no-clobber).
438
+ verbose : bool
439
+ If False, suppress wget output (-q).
440
+ """
441
+ cmd = ["wget"] # base command
442
+
443
+ if not verbose:
444
+ cmd.append("-q") # quiet mode --> no output except errors
445
+
446
+ cmd += [
447
+ "-r", # recursive --> traverse into subdirectories
448
+ "-np", # no parent --> don't ascend to higher-level dirs
449
+ "-nH", # no host dirs --> avoid creating ftp.example.com/ locally
450
+ f"--cut-dirs={cut_dirs}", # strip N leading path components
451
+ ]
452
+
453
+ if force:
454
+ cmd.append("--timestamping") # download if remote file is newer
455
+ else:
456
+ cmd.append("--no-clobber") # skip files that already exist
457
+
458
+ cmd += [
459
+ "-P", # specify local destination directory
460
+ dst_dir,
461
+ f"ftp://anonymous:disdrodb@{url}", # target FTP URL
462
+ ]
463
+ return cmd
464
+
465
+
466
+ def download_ftp_server_data(url: str, dst_dir: str, force: bool = False, verbose: bool = True) -> None:
467
+ """Download data from an FTP server with anonymous login.
468
+
469
+ Parameters
470
+ ----------
471
+ url : str
472
+ FTP server URL pointing to a folder. Example: "ftp://ftp.example.com/path/to/data/"
473
+ dst_dir : str
474
+ Local directory where to download the file (DISDRODB station data directory).
475
+ force : bool, optional
476
+ If ``True``, re-download new/updated files (skip unchanged ones).
477
+ If ``False``, keep existing files untouched.
478
+ verbose : bool, optional
479
+ Print wget output (default is True).
480
+ """
481
+ ensure_wget_available()
482
+
483
+ # Ensure trailing slash
484
+ url = ensure_trailing_slash(url)
485
+
486
+ # Compute cut-dirs so files land directly in dst_dir
487
+ cut_dirs = compute_cut_dirs(url)
488
+
489
+ # Make destination directory
490
+ os.makedirs(dst_dir, exist_ok=True)
491
+
492
+ # Build wget command
493
+ cmd = build_ftp_server_wget_command(
494
+ url,
495
+ cut_dirs=cut_dirs,
496
+ dst_dir=dst_dir,
497
+ force=force,
498
+ verbose=verbose,
499
+ )
500
+ # Run wget
501
+ try:
502
+ subprocess.run(cmd, check=True)
503
+ except subprocess.CalledProcessError as e:
504
+ raise subprocess.CalledProcessError(
505
+ returncode=e.returncode,
506
+ cmd=e.cmd,
507
+ output=e.output,
508
+ stderr=e.stderr,
509
+ )
510
+
511
+
396
512
  ####--------------------------------------------------------------------.
397
513
  #### Download from Zenodo
398
514
 
399
515
 
400
- def download_zenodo_zip_file(url, dst_dir, force):
516
+ def download_zip_file(url, dst_dir, force):
401
517
  """Download zip file from zenodo and extract station raw data."""
402
518
  # Download zip file
403
519
  zip_filepath = _download_file_from_url(url, dst_dir=dst_dir, force=force)
@@ -0,0 +1,339 @@
1
+ diameter_bin_center:
2
+ name: diameter_bin_center
3
+ standard_name: diameter_bin_center
4
+ long_name: diameter_bin_center
5
+ units: mm
6
+ description: Bin center drop diameter value
7
+ diameter_bin_width:
8
+ name: diameter_bin_width
9
+ standard_name: diameter_bin_width
10
+ long_name: diameter_bin_width
11
+ units: mm
12
+ description: Drop diameter bin width
13
+ diameter_bin_upper:
14
+ name: diameter_bin_upper
15
+ standard_name: diameter_bin_upper
16
+ long_name: diameter_bin_upper
17
+ units: mm
18
+ description: Bin upper bound drop diameter value
19
+ velocity_bin_lower:
20
+ name: velocity_bin_lower
21
+ standard_name: velocity_bin_lower
22
+ long_name: velocity_bin_lower
23
+ units: m/s
24
+ description: Bin lower bound drop fall velocity value
25
+ velocity_bin_center:
26
+ name: velocity_bin_center
27
+ standard_name: velocity_bin_center
28
+ long_name: velocity_bin_center
29
+ units: m/s
30
+ description: Bin center drop fall velocity value
31
+ velocity_bin_width:
32
+ name: velocity_bin_width
33
+ standard_name: velocity_bin_width
34
+ long_name: velocity_bin_width
35
+ units: m/s
36
+ description: Drop fall velocity bin width
37
+ velocity_bin_upper:
38
+ name: velocity_bin_upper
39
+ standard_name: velocity_bin_upper
40
+ long_name: velocity_bin_upper
41
+ units: m/s
42
+ description: Bin upper bound drop fall velocity value
43
+ latitude:
44
+ name: latitude
45
+ standard_name: latitude
46
+ long_name: Latitude
47
+ units: degrees_north
48
+ longitude:
49
+ name: longitude
50
+ standard_name: longitude
51
+ long_name: Longitude
52
+ units: degrees_east
53
+ altitude:
54
+ name: altitude
55
+ standard_name: altitude
56
+ long_name: Altitude
57
+ units: m
58
+ description: Elevation above sea level
59
+ time:
60
+ name: time
61
+ standard_name: time
62
+ long_name: time
63
+ description: UTC Time
64
+ sample_interval:
65
+ name: Sampling interval
66
+ standard_name: Sampling interval
67
+ long_name: Sampling interval
68
+ description: Sampling interval in seconds.
69
+ unit: s
70
+ drop_number:
71
+ description: Counts of drops per diameter and velocity class
72
+ long_name: Drop counts per diameter and velocity class
73
+ units: ""
74
+ raw_drop_number:
75
+ description: Counts of drops per diameter and velocity class
76
+ long_name: Drop counts per diameter and velocity class
77
+ units: ""
78
+ drop_counts:
79
+ description: Counts of drops per diameter class
80
+ long_name: Drop counts per diameter class
81
+ units: ""
82
+ Dmin:
83
+ description: Minimum drop diameter
84
+ long_name: Minimum drop diameter
85
+ units: mm
86
+ Dmax:
87
+ description: Maximum drop diameter
88
+ long_name: Maximum drop diameter
89
+ units: mm
90
+ fall_velocity:
91
+ description: Estimated drop fall velocity per diameter class
92
+ long_name: Estimated drop fall velocity
93
+ units: m s-1
94
+ drop_average_velocity:
95
+ description: Average measured drop fall velocity per diameter class
96
+ long_name: Measured average drop fall velocity
97
+ units: m s-1
98
+ Nraw:
99
+ description: Total number of measured drops
100
+ long_name: Total number of measured drops
101
+ units: ""
102
+ N:
103
+ description: Total number of selected drops
104
+ long_name: Total number of selected drops
105
+ units: ""
106
+ Nremoved:
107
+ description: Total number of discarded drops
108
+ long_name: Total number of discarded drops
109
+ units: ""
110
+ Nbins:
111
+ description: Number of diameter bins with drops
112
+ long_name: Number of diameter bins with drops
113
+ units: ""
114
+ Nbins_missing:
115
+ description: Number of diameter bins with no drops
116
+ long_name: Number of diameter bins with no drops
117
+ units: ""
118
+ Nbins_missing_fraction:
119
+ description: Fraction of diameter bins with no drops
120
+ long_name: Fraction of diameter bins with no drops
121
+ units: ""
122
+ Nbins_missing_consecutive:
123
+ description: Maximum number of consecutive diameter bins with no drops
124
+ long_name: Maximum number of consecutive diameter bins with no drops
125
+ units: ""
126
+ drop_number_concentration:
127
+ description: Number concentration of drops per diameter class per unit volume
128
+ long_name: Drop number concentration per diameter class
129
+ units: m-3 mm-1
130
+ drop_volume:
131
+ standard_name: ""
132
+ units: mm3
133
+ long_name: Volume of Drops per Diameter Class
134
+ drop_total_volume:
135
+ standard_name: ""
136
+ units: mm3
137
+ long_name: Total Volume of Drops
138
+ drop_relative_volume_ratio:
139
+ standard_name: ""
140
+ units: ""
141
+ long_name: Relative Volume Ratio of Drops
142
+ KEmin:
143
+ standard_name: ""
144
+ units: J
145
+ long_name: Minimum Drop Kinetic Energy
146
+ KEmax:
147
+ standard_name: ""
148
+ units: J
149
+ long_name: Maximum Drop Kinetic Energy
150
+ TKE:
151
+ description: Total Kinetic Energy
152
+ standard_name: ""
153
+ units: J m-2
154
+ long_name: Total Kinetic Energy
155
+ KED:
156
+ description: Kinetic energy per unit rainfall depth
157
+ standard_name: ""
158
+ units: J m-2 mm-1
159
+ long_name: Rainfall Kinetic Energy
160
+ KEF:
161
+ description: Kinetic energy per unit time
162
+ standard_name: ""
163
+ units: J m-2 h-1
164
+ long_name: Kinetic Energy Density Flux
165
+ M1:
166
+ standard_name: ""
167
+ units: m-3 mm
168
+ long_name: First Moment of the Drop Size Distribution
169
+ M2:
170
+ standard_name: ""
171
+ units: m-3 mm2
172
+ long_name: Second Moment of the Drop Size Distribution
173
+ M3:
174
+ standard_name: ""
175
+ units: m-3 mm3
176
+ long_name: Third Moment of the Drop Size Distribution
177
+ M4:
178
+ standard_name: ""
179
+ units: m-3 mm4
180
+ long_name: Fourth Moment of the Drop Size Distribution
181
+ M5:
182
+ standard_name: ""
183
+ units: m-3 mm5
184
+ long_name: Fifth Moment of the Drop Size Distribution
185
+ M6:
186
+ standard_name: ""
187
+ units: m-3 mm6
188
+ long_name: Sixth Moment of the Drop Size Distribution
189
+ Nt:
190
+ standard_name: number_concentration_of_rain_drops_in_air
191
+ units: m-3
192
+ long_name: Total Number Concentration
193
+ R:
194
+ description: Instantaneous rainfall rate derived from N(D)
195
+ standard_name: rainfall_rate
196
+ units: mm h-1
197
+ long_name: Instantaneous Rainfall Rate
198
+ Rm:
199
+ description: Instantaneous rainfall rate derived from the spectrum
200
+ standard_name: rainfall_rate
201
+ units: mm h-1
202
+ long_name: Instantaneous Rainfall Rate
203
+ P:
204
+ standard_name: precipitation_amount
205
+ units: mm
206
+ long_name: Rain Accumulation
207
+ Z:
208
+ standard_name: equivalent_reflectivity_factor
209
+ units: dBZ
210
+ long_name: Equivalent Radar Reflectivity Factor
211
+ W:
212
+ description: Water Mass of the Drop Size Distribution
213
+ standard_name: mass_concentration_of_liquid_water_in_air
214
+ units: g m-3
215
+ long_name: Liquid Water Content
216
+ D10:
217
+ standard_name: ""
218
+ units: mm
219
+ long_name: 10th Percentile Drop Diameter
220
+ D50:
221
+ standard_name: median_volume_diameter
222
+ units: mm
223
+ long_name: Median Volume Drop Diameter
224
+ D90:
225
+ standard_name: ""
226
+ units: mm
227
+ long_name: 90th Percentile Drop Diameter
228
+ Dmode:
229
+ standard_name: ""
230
+ units: mm
231
+ long_name: Mode Diameter of the Drop Size Distribution
232
+ Dm:
233
+ standard_name: Dm
234
+ units: mm
235
+ long_name: Mean Volume Diameter
236
+ sigma_m:
237
+ standard_name: ""
238
+ units: mm
239
+ long_name: Standard Deviation of Mass Spectrum
240
+ Nw:
241
+ standard_name: normalized_intercept_parameter
242
+ units: mm-1 m-3
243
+ long_name: Normalized Intercept Parameter
244
+ DBZH:
245
+ description: Radar reflectivity factor at horizontal polarization
246
+ long_name: Horizontal Reflectivity
247
+ units: dBZ
248
+ DBZV:
249
+ description: Radar reflectivity factor at vertical polarization
250
+ long_name: Vertical Reflectivity
251
+ units: dBZ
252
+ ZDR:
253
+ description: Differential reflectivity
254
+ long_name: Differential Reflectivity
255
+ units: dB
256
+ RHOHV:
257
+ description:
258
+ Correlation coefficient between horizontally and vertically polarized
259
+ reflectivity
260
+ long_name: Copolarized Correlation Coefficient
261
+ units: ""
262
+ LDR:
263
+ description: Linear depolarization ratio
264
+ long_name: Linear Depolarization Ratio
265
+ units: dB
266
+ KDP:
267
+ description: Specific differential phase
268
+ long_name: Specific Differential Phase
269
+ units: deg/km
270
+ DELTAHV:
271
+ description: Backscatter differential phase shift
272
+ long_name: Backscatter Differential Phase Shift
273
+ comment: Also referred as co-polar phase shift difference
274
+ units: deg
275
+ AH:
276
+ description: Specific attenuation at horizontal polarization
277
+ long_name: Specific Attenuation
278
+ units: dB/km
279
+ AV:
280
+ description: Specific attenuation at vertical polarization
281
+ long_name: Specific Attenuation
282
+ units: dB/km
283
+ ADP:
284
+ description: Specific differential attenuation
285
+ long_name: Specific Differential Attenuation
286
+ units: dB/km
287
+ R2:
288
+ name: Squared Pearson correlation coefficient
289
+ standard_name: correlation_coefficient_squared
290
+ long_name: Squared Pearson correlation coefficient
291
+ description: Squared Pearson correlation coefficient squared between observed and modelled N(D) values.
292
+ unit: ""
293
+ valid_range: [0, 1]
294
+ MAE:
295
+ name: Mean Absolute Error
296
+ standard_name: mean_absolute_error
297
+ long_name: Mean Absolute Error
298
+ description: The average of the absolute differences between observed and modelled N(D) values.
299
+ unit: m-3 mm-1
300
+ valid_range: [0, inf]
301
+ MaxAE:
302
+ name: Maximum Absolute Error
303
+ standard_name: maximum_absolute_error
304
+ long_name: Maximum Absolute Error
305
+ description: The largest absolute difference between observed and modelled N(D).
306
+ unit: m-3 mm-1
307
+ valid_range: [0, inf]
308
+ RelMaxAE:
309
+ long_name: Relative Maximum Absolute Error
310
+ standard_name: relative_maximum_absolute_error
311
+ description: The largest absolute error divided by the maximum observed value.
312
+ units: ""
313
+ valid_range: [0, inf]
314
+ PeakDiff:
315
+ long_name: Deviation at Distribution Mode
316
+ standard_name: peak_difference
317
+ description: The difference between the observed and modelled N(D) values at the peak of the distribution.
318
+ units: m-3 mm-1
319
+ RelPeakDiff:
320
+ long_name: Relative Difference at Distribution Mode
321
+ standard_name: relative_peak_difference
322
+ description: The relative N(D) difference at the peak, calculated as the deviation divided by the observed value at the peak.
323
+ units: ""
324
+ DmodeDiff:
325
+ long_name: Difference of Mode Diameters
326
+ standard_name: diameter_mode_difference
327
+ description: The difference between mode diameters of observed and modelled N(D).
328
+ units: mm
329
+ NtDiff:
330
+ long_name: Total Number Concentration Difference
331
+ standard_name: total_number_concentration_difference
332
+ description: The difference in the total number concentration between observed and modelled N(D).
333
+ units: m-3
334
+ KLDiv:
335
+ long_name: Kullback-Leibler Divergence
336
+ standard_name: kullback_leibler_divergence
337
+ description: A distance measure of how the modelled distribution diverges from the observed N(D) one.
338
+ units: ""
339
+ valid_range: [0, inf]