disdrodb 0.4.0__py3-none-any.whl → 0.5.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.
Files changed (75) hide show
  1. disdrodb/__init__.py +4 -0
  2. disdrodb/_version.py +2 -2
  3. disdrodb/accessor/methods.py +14 -0
  4. disdrodb/api/checks.py +8 -7
  5. disdrodb/api/io.py +81 -29
  6. disdrodb/api/path.py +17 -14
  7. disdrodb/api/search.py +15 -18
  8. disdrodb/cli/disdrodb_open_products_options.py +38 -0
  9. disdrodb/cli/disdrodb_run.py +2 -2
  10. disdrodb/cli/disdrodb_run_station.py +4 -4
  11. disdrodb/configs.py +1 -1
  12. disdrodb/data_transfer/download_data.py +70 -1
  13. disdrodb/etc/configs/attributes.yaml +62 -8
  14. disdrodb/etc/configs/encodings.yaml +28 -0
  15. disdrodb/etc/products/L2M/MODELS/GAMMA_GS_ND_SSE.yaml +8 -0
  16. disdrodb/etc/products/L2M/MODELS/GAMMA_ML.yaml +1 -1
  17. disdrodb/etc/products/L2M/MODELS/LOGNORMAL_GS_LOG_ND_SSE.yaml +8 -0
  18. disdrodb/etc/products/L2M/MODELS/LOGNORMAL_GS_ND_SSE.yaml +8 -0
  19. disdrodb/etc/products/L2M/MODELS/LOGNORMAL_ML.yaml +1 -1
  20. disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_LOG_ND_SSE.yaml +8 -0
  21. disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_ND_SSE.yaml +8 -0
  22. disdrodb/etc/products/L2M/global.yaml +4 -4
  23. disdrodb/fall_velocity/graupel.py +8 -8
  24. disdrodb/fall_velocity/hail.py +2 -2
  25. disdrodb/fall_velocity/rain.py +33 -5
  26. disdrodb/issue/checks.py +1 -1
  27. disdrodb/l0/l0_reader.py +1 -1
  28. disdrodb/l0/l0a_processing.py +2 -2
  29. disdrodb/l0/l0b_nc_processing.py +5 -5
  30. disdrodb/l0/l0b_processing.py +20 -24
  31. disdrodb/l0/l0c_processing.py +18 -13
  32. disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +4 -0
  33. disdrodb/l0/readers/PARSIVEL2/VIETNAM/IGE_PARSIVEL2.py +239 -0
  34. disdrodb/l0/template_tools.py +13 -13
  35. disdrodb/l1/classification.py +10 -6
  36. disdrodb/l2/empirical_dsd.py +25 -15
  37. disdrodb/l2/processing.py +32 -14
  38. disdrodb/metadata/download.py +1 -1
  39. disdrodb/metadata/geolocation.py +4 -4
  40. disdrodb/metadata/reader.py +3 -3
  41. disdrodb/metadata/search.py +10 -8
  42. disdrodb/psd/__init__.py +4 -0
  43. disdrodb/psd/fitting.py +2660 -592
  44. disdrodb/psd/gof_metrics.py +389 -0
  45. disdrodb/psd/grid_search.py +1066 -0
  46. disdrodb/psd/models.py +1281 -145
  47. disdrodb/routines/l2.py +6 -6
  48. disdrodb/routines/options_validation.py +8 -8
  49. disdrodb/scattering/axis_ratio.py +70 -2
  50. disdrodb/scattering/permittivity.py +13 -10
  51. disdrodb/scattering/routines.py +10 -10
  52. disdrodb/summary/routines.py +23 -20
  53. disdrodb/utils/archiving.py +29 -22
  54. disdrodb/utils/attrs.py +6 -4
  55. disdrodb/utils/dataframe.py +4 -4
  56. disdrodb/utils/encoding.py +3 -1
  57. disdrodb/utils/event.py +9 -9
  58. disdrodb/utils/logger.py +4 -7
  59. disdrodb/utils/manipulations.py +2 -2
  60. disdrodb/utils/subsetting.py +1 -1
  61. disdrodb/utils/time.py +8 -7
  62. disdrodb/viz/plots.py +25 -17
  63. {disdrodb-0.4.0.dist-info → disdrodb-0.5.1.dist-info}/METADATA +44 -33
  64. {disdrodb-0.4.0.dist-info → disdrodb-0.5.1.dist-info}/RECORD +68 -66
  65. {disdrodb-0.4.0.dist-info → disdrodb-0.5.1.dist-info}/WHEEL +1 -1
  66. {disdrodb-0.4.0.dist-info → disdrodb-0.5.1.dist-info}/entry_points.txt +1 -0
  67. disdrodb/etc/products/L2M/MODELS/GAMMA_GS_ND_MAE.yaml +0 -6
  68. disdrodb/etc/products/L2M/MODELS/LOGNORMAL_GS_LOG_ND_MAE.yaml +0 -6
  69. disdrodb/etc/products/L2M/MODELS/LOGNORMAL_GS_ND_MAE.yaml +0 -6
  70. disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_LOG_ND_MAE.yaml +0 -6
  71. disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_ND_MAE.yaml +0 -6
  72. disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_R_MAE.yaml +0 -6
  73. disdrodb/etc/products/L2M/MODELS/NGAMMA_GS_Z_MAE.yaml +0 -6
  74. {disdrodb-0.4.0.dist-info → disdrodb-0.5.1.dist-info}/licenses/LICENSE +0 -0
  75. {disdrodb-0.4.0.dist-info → disdrodb-0.5.1.dist-info}/top_level.txt +0 -0
disdrodb/utils/event.py CHANGED
@@ -44,7 +44,7 @@ def group_timesteps_into_event(
44
44
 
45
45
  Parameters
46
46
  ----------
47
- timesteps: np.ndarray
47
+ timesteps: numpy.ndarray
48
48
  Candidate timesteps to be grouped into events.
49
49
  neighbor_time_interval : str
50
50
  The time interval around a given a timestep defining the neighborhood.
@@ -121,9 +121,9 @@ def remove_isolated_timesteps(timesteps, neighbor_min_size, neighbor_time_interv
121
121
 
122
122
  Parameters
123
123
  ----------
124
- timesteps : array-like of np.datetime64
124
+ timesteps : array-like of numpy.datetime64
125
125
  Sorted or unsorted array of valid timesteps.
126
- neighbor_time_interval : np.timedelta64
126
+ neighbor_time_interval : numpy.timedelta64
127
127
  The time interval around a given a timestep defining the neighborhood.
128
128
  Only timesteps that fall within this time interval before or after a timestep are considered neighbors.
129
129
  neighbor_min_size : int, optional
@@ -136,12 +136,12 @@ def remove_isolated_timesteps(timesteps, neighbor_min_size, neighbor_time_interv
136
136
 
137
137
  Returns
138
138
  -------
139
- np.ndarray
139
+ numpy.ndarray
140
140
  Array of timesteps with isolated entries removed.
141
141
  """
142
142
  # Sort timesteps
143
143
  timesteps = np.array(timesteps)
144
- timesteps.sort()
144
+ timesteps = np.sort(timesteps)
145
145
 
146
146
  # Do nothing if neighbor_min_size is 0
147
147
  if neighbor_min_size == 0:
@@ -182,15 +182,15 @@ def group_timesteps_into_events(timesteps, event_max_time_gap):
182
182
 
183
183
  Parameters
184
184
  ----------
185
- timesteps : array-like of np.datetime64
185
+ timesteps : array-like of numpy.datetime64
186
186
  Sorted array of valid timesteps.
187
- event_max_time_gap : np.timedelta64
187
+ event_max_time_gap : numpy.timedelta64
188
188
  Maximum time interval allowed between consecutive valid timesteps for them
189
189
  to be considered part of the same event.
190
190
 
191
191
  Returns
192
192
  -------
193
- list of np.ndarray
193
+ list of numpy.ndarray
194
194
  A list of events, where each event is an array of timesteps.
195
195
  """
196
196
  # Deal with case with no timesteps
@@ -198,7 +198,7 @@ def group_timesteps_into_events(timesteps, event_max_time_gap):
198
198
  return []
199
199
 
200
200
  # Ensure timesteps are sorted
201
- timesteps.sort()
201
+ timesteps = np.sort(timesteps)
202
202
 
203
203
  # Compute differences between consecutive timesteps
204
204
  diffs = np.diff(timesteps)
disdrodb/utils/logger.py CHANGED
@@ -224,13 +224,10 @@ def create_product_logs(
224
224
  The summary log selects only logged lines with ``root``, ``WARNING``, and ``ERROR`` keywords.
225
225
  The problems log file selects only logged lines with the ``ERROR`` keyword.
226
226
 
227
- The logs directory structure is the follow:
228
- /logs
229
- - /files/<product_name>/<station> (same structure as data ... a log for each processed file)
230
- - /summary
231
- --> SUMMARY.<PRODUCT_ACRONYM>.<CAMPAIGN_NAME>.<STATION_NAME>.log
232
- - /problems
233
- --> PROBLEMS.<PRODUCT_ACRONYM>.<CAMPAIGN_NAME>.<STATION_NAME>.log
227
+ The logs directory structure is the following
228
+ - ``/logs/files/<product_name>/<station>`` (same structure as data directory, with logs for each processed file)
229
+ - ``/logs/summary/SUMMARY.<PRODUCT_ACRONYM>.<CAMPAIGN_NAME>.<STATION_NAME>.log``
230
+ - ``/logs/problems/PROBLEMS.<PRODUCT_ACRONYM>.<CAMPAIGN_NAME>.<STATION_NAME>.log``
234
231
 
235
232
  Parameters
236
233
  ----------
@@ -76,7 +76,7 @@ def define_diameter_array(diameter_min=0, diameter_max=10, diameter_spacing=0.05
76
76
 
77
77
  Returns
78
78
  -------
79
- xr.DataArray
79
+ xarray.DataArray
80
80
  A DataArray containing the center of each diameter bin, with coordinates for
81
81
  the bin width, lower bound, upper bound, and center.
82
82
 
@@ -100,7 +100,7 @@ def define_velocity_array(velocity_min=0, velocity_max=10, velocity_spacing=0.05
100
100
 
101
101
  Returns
102
102
  -------
103
- xr.DataArray
103
+ xarray.DataArray
104
104
  A DataArray containing the center of each velocity bin, with coordinates for
105
105
  the bin width, lower bound, upper bound, and center.
106
106
 
@@ -99,7 +99,7 @@ def _get_dim_isel_on_non_dim_coord_from_sel(xr_obj, coord, sel_indices, method):
99
99
  -------
100
100
  dim : str
101
101
  Dimension related to the 1D non-dimension coordinate.
102
- isel_indices : np.ndarray
102
+ isel_indices : numpy.ndarray
103
103
  Indices for index-based selection.
104
104
  """
105
105
  dim = _get_dim_of_1d_non_dimensional_coord(xr_obj, coord)
disdrodb/utils/time.py CHANGED
@@ -35,16 +35,17 @@ logger = logging.getLogger(__name__)
35
35
 
36
36
 
37
37
  def seconds_to_temporal_resolution(seconds):
38
- """
39
- Convert a duration in seconds to a readable string format (e.g., "1H30", "1D2H").
38
+ """Convert a duration in seconds to a readable string format (e.g., "1H30", "1D2H").
40
39
 
41
40
  Parameters
42
41
  ----------
43
- - seconds (int): The time duration in seconds.
42
+ seconds: int
43
+ The time duration in seconds.
44
44
 
45
45
  Returns
46
46
  -------
47
- - str: The duration as a string in a format like "30S", "1MIN30S", "1H30MIN", or "1D2H".
47
+ str:
48
+ The duration as a string in a format like "30S", "1MIN30S", "1H30MIN", or "1D2H".
48
49
  """
49
50
  timedelta = pd.Timedelta(seconds=seconds)
50
51
  components = timedelta.components
@@ -124,7 +125,7 @@ def temporal_resolution_to_seconds(temporal_resolution):
124
125
 
125
126
  Returns
126
127
  -------
127
- seconds
128
+ int
128
129
  Duration in seconds.
129
130
  """
130
131
  seconds, _ = get_sampling_information(temporal_resolution)
@@ -242,7 +243,7 @@ def regularize_dataset(
242
243
 
243
244
  Parameters
244
245
  ----------
245
- xr_obj : xarray.Dataset or xr.DataArray
246
+ xr_obj : xarray.Dataset or xarray.DataArray
246
247
  xarray object with time dimension.
247
248
  time_dim : str, optional
248
249
  The time dimension in the xarray object. The default value is ``"time"``.
@@ -253,7 +254,7 @@ def regularize_dataset(
253
254
  Method to use for filling missing timesteps.
254
255
  If ``None``, fill with ``fill_value``. The default value is ``None``.
255
256
  For other possible methods, see xarray.Dataset.reindex()`.
256
- fill_value : (float, dict), optional
257
+ fill_value : float or dict, optional
257
258
  Fill value to fill missing timesteps.
258
259
  If not specified, for float variables it uses ``dtypes.NA`` while for
259
260
  for integers variables it uses the maximum allowed integer value or,
disdrodb/viz/plots.py CHANGED
@@ -32,8 +32,9 @@ from disdrodb.utils.time import ensure_sample_interval_in_seconds, regularize_da
32
32
  #### N(D) visualizations
33
33
 
34
34
 
35
- def _single_plot_nd_distribution(drop_number_concentration, diameter, diameter_bin_width):
36
- fig, ax = plt.subplots(1, 1)
35
+ def _single_plot_nd_distribution(drop_number_concentration, diameter, diameter_bin_width, ax=None, yscale="linear"):
36
+ if ax is None:
37
+ fig, ax = plt.subplots(1, 1)
37
38
  ax.bar(
38
39
  diameter,
39
40
  drop_number_concentration,
@@ -42,9 +43,11 @@ def _single_plot_nd_distribution(drop_number_concentration, diameter, diameter_b
42
43
  color="lightgray",
43
44
  label="Data",
44
45
  )
46
+ ax.set_xlim(diameter[0] - diameter_bin_width[0] / 2, None)
45
47
  ax.set_title("Drop number concentration (N(D))")
46
48
  ax.set_xlabel("Drop diameter (mm)")
47
49
  ax.set_ylabel("N(D) [m-3 mm-1]")
50
+ ax.set_yscale(yscale)
48
51
  return ax
49
52
 
50
53
 
@@ -69,7 +72,7 @@ def _get_nd_variable(xr_obj, variable):
69
72
  return xr_obj
70
73
 
71
74
 
72
- def plot_nd(xr_obj, variable="drop_number_concentration", cmap=None, norm=None):
75
+ def plot_nd(xr_obj, variable="drop_number_concentration", cmap=None, norm=None, yscale="linear", ax=None):
73
76
  """Plot drop number concentration N(D) timeseries."""
74
77
  da_nd = _get_nd_variable(xr_obj, variable=variable)
75
78
 
@@ -79,6 +82,8 @@ def plot_nd(xr_obj, variable="drop_number_concentration", cmap=None, norm=None):
79
82
  drop_number_concentration=da_nd.isel(velocity_method=0, missing_dims="ignore"),
80
83
  diameter=xr_obj["diameter_bin_center"],
81
84
  diameter_bin_width=xr_obj["diameter_bin_width"],
85
+ yscale=yscale,
86
+ ax=ax,
82
87
  )
83
88
  return ax
84
89
 
@@ -98,7 +103,7 @@ def plot_nd(xr_obj, variable="drop_number_concentration", cmap=None, norm=None):
98
103
 
99
104
  # Plot N(D)
100
105
  cbar_kwargs = {"label": "N(D) [m-3 mm-1]"}
101
- p = da_nd.plot.pcolormesh(x="time", norm=norm, cmap=cmap, extend="max", cbar_kwargs=cbar_kwargs)
106
+ p = da_nd.plot.pcolormesh(x="time", norm=norm, cmap=cmap, extend="max", cbar_kwargs=cbar_kwargs, ax=ax)
102
107
  p.axes.set_title("Drop number concentration N(D)")
103
108
  p.axes.set_ylabel("Drop diameter (mm)")
104
109
  return p
@@ -304,12 +309,13 @@ def plot_spectrum(
304
309
  Name of the variable to plot if xr_obj is a Dataset.
305
310
  ax : matplotlib.axes.Axes, optional
306
311
  Axes to plot on. If None, uses current axes or creates a new one.
307
- cmap : Colormap, optional
312
+ cmap : matplotlib.colors.Colormap, optional
308
313
  Colormap to use. If None, uses 'Spectral_r' with 'under' set to 'none'.
309
314
  norm : matplotlib.colors.Normalize, optional
310
315
  Normalization for colormap. If None, uses LogNorm with vmin=1.
311
- extend : {'neither', 'both', 'min', 'max'}, optional
316
+ extend : str, optional
312
317
  Whether to draw arrows on the colorbar to indicate out-of-range values.
318
+ Valid options are 'neither', 'min', 'max', 'both'.
313
319
  Default is 'max'.
314
320
  add_colorbar : bool, optional
315
321
  Whether to add a colorbar. Default is True.
@@ -322,10 +328,12 @@ def plot_spectrum(
322
328
 
323
329
  Notes
324
330
  -----
325
- - If the input DataArray has a time dimension, it is summed over time before plotting
326
- unless FacetGrid options (e.g., col, row) are specified in plot_kwargs.
327
- - If FacetGrid options are used, the plot will create a grid of subplots for each time slice.
328
- To create a FacetGrid plot, use:
331
+ If the input DataArray has a time dimension, it is summed over time before plotting
332
+ unless FacetGrid options (e.g., col, row) are specified in plot_kwargs.
333
+
334
+ If FacetGrid options are used, the plot will create a grid of subplots for each time slice.
335
+
336
+ To create a FacetGrid plot, use:
329
337
 
330
338
  ds.isel(time=slice(0, 9)).disdrodb.plot_spectrum(col="time", col_wrap=3)
331
339
 
@@ -465,7 +473,7 @@ def normalize_array(arr, method="max"):
465
473
 
466
474
  Parameters
467
475
  ----------
468
- arr : np.ndarray
476
+ arr : numpy.ndarray
469
477
  Input array.
470
478
  method : str
471
479
  Normalization method. Options:
@@ -477,7 +485,7 @@ def normalize_array(arr, method="max"):
477
485
 
478
486
  Returns
479
487
  -------
480
- np.ndarray
488
+ numpy.ndarray
481
489
  Normalized array.
482
490
  """
483
491
  arr = np.asarray(arr, dtype=float)
@@ -699,12 +707,12 @@ def compute_dense_lines(
699
707
  coord : str
700
708
  The name of the coordinate/dimension of the DataArray to bin over.
701
709
  ``da.coords[coord]`` must be a 1D numeric array (monotonic is recommended).
702
- x_bins : array_like of shape (nx+1,)
703
- Bin edges to bin the coordinate/dimension.
710
+ x_bins : array-like
711
+ Bin edges to bin the coordinate/dimension with shape (nx+1,).
704
712
  Must be monotonically increasing.
705
713
  The number of x-bins will be ``nx = len(x_bins) - 1``.
706
- y_bins : array_like of shape (ny+1,)
707
- Bin edges for the DataArray values.
714
+ y_bins : array-like
715
+ Bin edges for the DataArray values with shape (ny+1,).
708
716
  Must be monotonically increasing.
709
717
  The number of y-bins will be ``ny = len(y_bins) - 1``.
710
718
  normalization : bool, optional
@@ -714,7 +722,7 @@ def compute_dense_lines(
714
722
 
715
723
  Returns
716
724
  -------
717
- xr.DataArray
725
+ xarray.DataArray
718
726
  2D histogram of shape ``(ny, nx)``. Dimensions are ``('y', 'x')``, where:
719
727
 
720
728
  - ``x``: the bin-center coordinate of ``x_bins`` (length ``nx``)
@@ -1,21 +1,32 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: disdrodb
3
- Version: 0.4.0
4
- Summary: disdrodb provides tools to download, standardize, share and analyze global disdrometer data.
3
+ Version: 0.5.1
4
+ Summary: An open-source python software for standardized processing, sharing, and analysis of disdrometer data.
5
5
  Author: Gionata Ghiggi
6
- Project-URL: homepage, https://github.com/ltelab/disdrodb
7
- Project-URL: repository, https://github.com/ltelab/disdrodb
8
- Project-URL: source, https://github.com/ltelab/disdrodb
9
- Project-URL: tracker, https://github.com/ltelab/disdrodb/issues
10
- Project-URL: documentation, https://disdrodb.readthedocs.io
11
- Project-URL: changelog, https://github.com/ltelab/disdrodb/blob/main/CHANGELOG.md
12
- Keywords: python,disdrometer,parsivel,drop size distribution
6
+ License-Expression: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/ltelab/disdrodb
8
+ Project-URL: Documentation, https://disdrodb.readthedocs.io
9
+ Project-URL: Repository, https://github.com/ltelab/disdrodb
10
+ Project-URL: Source, https://github.com/ltelab/disdrodb
11
+ Project-URL: Issues, https://github.com/ltelab/disdrodb/issues
12
+ Project-URL: Changelog, https://github.com/ltelab/disdrodb/blob/main/CHANGELOG.md
13
+ Keywords: python,disdrometer,parsivel,drop size distribution,radar,remote sensing,precipitation,rainfall
13
14
  Classifier: Development Status :: 5 - Production/Stable
14
- Classifier: Intended Audience :: Developers
15
- Classifier: Programming Language :: Python :: 3
15
+ Classifier: Intended Audience :: Science/Research
16
+ Classifier: Intended Audience :: Education
17
+ Classifier: Operating System :: OS Independent
16
18
  Classifier: Operating System :: Unix
17
- Classifier: Operating System :: MacOS :: MacOS X
18
- Classifier: Operating System :: Microsoft :: Windows
19
+ Classifier: Operating System :: Microsoft
20
+ Classifier: Operating System :: MacOS
21
+ Classifier: Programming Language :: Python
22
+ Classifier: Programming Language :: Python :: 3
23
+ Classifier: Programming Language :: Python :: 3 :: Only
24
+ Classifier: Programming Language :: Python :: 3.11
25
+ Classifier: Programming Language :: Python :: 3.12
26
+ Classifier: Programming Language :: Python :: 3.13
27
+ Classifier: Programming Language :: Python :: 3.14
28
+ Classifier: Topic :: Scientific/Engineering
29
+ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
19
30
  Requires-Python: >=3.11
20
31
  Description-Content-Type: text/markdown
21
32
  License-File: LICENSE
@@ -50,28 +61,29 @@ Requires-Dist: twine; extra == "dev"
50
61
  Requires-Dist: loghub; extra == "dev"
51
62
  Dynamic: license-file
52
63
 
53
- # 📦 DISDRODB - A package to standardize, process and analyze global disdrometer data
54
-
55
- | | |
56
- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
57
- | Deployment | [![PyPI](https://badge.fury.io/py/disdrodb.svg?style=flat)](https://pypi.org/project/disdrodb/) [![Conda](https://img.shields.io/conda/vn/conda-forge/disdrodb.svg?logo=conda-forge&logoColor=white&style=flat)](https://anaconda.org/conda-forge/disdrodb) |
58
- | Activity | [![PyPI Downloads](https://img.shields.io/pypi/dm/disdrodb.svg?label=PyPI%20downloads&style=flat)](https://pypi.org/project/disdrodb/) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/disdrodb.svg?label=Conda%20downloads&style=flat)](https://anaconda.org/conda-forge/disdrodb) |
59
- | Python Versions | [![Python Versions](https://img.shields.io/badge/Python-3.11%20%203.12%20%203.13%20%203.14-blue?style=flat)](https://www.python.org/downloads/) |
60
- | Supported Systems | [![Linux](https://img.shields.io/github/actions/workflow/status/ltelab/disdrodb/.github/workflows/tests.yml?label=Linux&style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml) [![macOS](https://img.shields.io/github/actions/workflow/status/ltelab/disdrodb/.github/workflows/tests.yml?label=macOS&style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml) [![Windows](https://img.shields.io/github/actions/workflow/status/ltelab/disdrodb/.github/workflows/tests_windows.yml?label=Windows&style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests_windows.yml) |
61
- | Project Status | [![Project Status](https://www.repostatus.org/badges/latest/active.svg?style=flat)](https://www.repostatus.org/#active) |
62
- | Build Status | [![Tests](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml/badge.svg?style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml) [![Lint](https://github.com/ltelab/disdrodb/actions/workflows/lint.yml/badge.svg?style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/lint.yml) [![Docs](https://readthedocs.org/projects/disdrodb/badge/?version=latest&style=flat)](https://disdrodb.readthedocs.io/en/latest/) |
63
- | Linting | [![Black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat)](https://github.com/psf/black) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=flat)](https://github.com/astral-sh/ruff) [![Codespell](https://img.shields.io/badge/Codespell-enabled-brightgreen?style=flat)](https://github.com/codespell-project/codespell) |
64
- | Code Coverage | [![Coveralls](https://coveralls.io/repos/github/ltelab/disdrodb/badge.svg?branch=main&style=flat)](https://coveralls.io/github/ltelab/disdrodb?branch=main) [![Codecov](https://codecov.io/gh/ltelab/disdrodb/branch/main/graph/badge.svg?style=flat)](https://codecov.io/gh/ltelab/disdrodb) |
65
- | Code Quality | [![Codefactor](https://www.codefactor.io/repository/github/ltelab/disdrodb/badge?style=flat)](https://www.codefactor.io/repository/github/ltelab/disdrodb) [![Codebeat](https://codebeat.co/badges/14ff831b-f064-4bdd-a2e2-72ffdf28a35a?style=flat)](https://codebeat.co/projects/github-com-ltelab-disdrodb-main) [![Codacy](https://app.codacy.com/project/badge/Grade/d823c50a7ad14268bd347b5aba384623?style=flat)](https://app.codacy.com/gh/ltelab/disdrodb/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Codescene](https://codescene.io/projects/36773/status-badges/code-health?style=flat)](https://codescene.io/projects/36773) |
66
- | License | [![License](https://img.shields.io/github/license/ltelab/disdrodb?style=flat)](https://github.com/ltelab/disdrodb/blob/main/LICENSE) |
67
- | Community | [![Slack](https://img.shields.io/badge/Slack-disdrodb-green.svg?logo=slack&style=flat)](https://join.slack.com/t/disdrodbworkspace/shared_invite/zt-25l4mvgo7-cfBdXalzlWGd4Pt7H~FqoA) [![GitHub Discussions](https://img.shields.io/badge/GitHub-Discussions-green?logo=github&style=flat)](https://github.com/ltelab/disdrodb/discussions) |
68
- | Citation | [![DOI](https://zenodo.org/badge/429018433.svg?style=flat)](https://zenodo.org/doi/10.5281/zenodo.7680581) |
64
+ # 📦 disdrodb
65
+
66
+ An open-source python software for standardized processing, sharing, and analysis of disdrometer data
67
+
68
+ | | |
69
+ | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
70
+ | Deployment | [![PyPI](https://badge.fury.io/py/disdrodb.svg?style=flat)](https://pypi.org/project/disdrodb/) [![Conda](https://img.shields.io/conda/vn/conda-forge/disdrodb.svg?logo=conda-forge&logoColor=white&style=flat)](https://anaconda.org/conda-forge/disdrodb) |
71
+ | Activity | [![PyPI Downloads](https://img.shields.io/pypi/dm/disdrodb.svg?label=PyPI%20downloads&style=flat)](https://pypi.org/project/disdrodb/) [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/disdrodb.svg?label=Conda%20downloads&style=flat)](https://anaconda.org/conda-forge/disdrodb) |
72
+ | Python Versions | [![Python Versions](https://img.shields.io/badge/Python-3.11%20%203.12%20%203.13%20%203.14-blue?style=flat)](https://www.python.org/downloads/) |
73
+ | Supported Systems | [![Linux](https://img.shields.io/github/actions/workflow/status/ltelab/disdrodb/.github/workflows/tests.yml?label=Linux&style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml) [![macOS](https://img.shields.io/github/actions/workflow/status/ltelab/disdrodb/.github/workflows/tests.yml?label=macOS&style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml) [![Windows](https://img.shields.io/github/actions/workflow/status/ltelab/disdrodb/.github/workflows/tests_windows.yml?label=Windows&style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests_windows.yml) |
74
+ | Project Status | [![Project Status](https://www.repostatus.org/badges/latest/active.svg?style=flat)](https://www.repostatus.org/#active) |
75
+ | Build Status | [![Tests](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml/badge.svg?style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/tests.yml) [![Lint](https://github.com/ltelab/disdrodb/actions/workflows/lint.yml/badge.svg?style=flat)](https://github.com/ltelab/disdrodb/actions/workflows/lint.yml) [![Docs](https://readthedocs.org/projects/disdrodb/badge/?version=latest&style=flat)](https://disdrodb.readthedocs.io/en/latest/) |
76
+ | Linting | [![Black](https://img.shields.io/badge/code%20style-black-000000.svg?style=flat)](https://github.com/psf/black) [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=flat)](https://github.com/astral-sh/ruff) [![Codespell](https://img.shields.io/badge/Codespell-enabled-brightgreen?style=flat)](https://github.com/codespell-project/codespell) |
77
+ | Code Coverage | [![Coveralls](https://coveralls.io/repos/github/ltelab/disdrodb/badge.svg?branch=main&style=flat)](https://coveralls.io/github/ltelab/disdrodb?branch=main) [![Codecov](https://codecov.io/gh/ltelab/disdrodb/branch/main/graph/badge.svg?style=flat)](https://codecov.io/gh/ltelab/disdrodb) |
78
+ | Code Quality | [![Codefactor](https://www.codefactor.io/repository/github/ltelab/disdrodb/badge?style=flat)](https://www.codefactor.io/repository/github/ltelab/disdrodb) [![Codacy](https://app.codacy.com/project/badge/Grade/d823c50a7ad14268bd347b5aba384623?style=flat)](https://app.codacy.com/gh/ltelab/disdrodb/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![Codescene](https://codescene.io/projects/36773/status-badges/code-health?style=flat)](https://codescene.io/projects/36773) |
79
+ | License | [![License](https://img.shields.io/github/license/ltelab/disdrodb?style=flat)](https://github.com/ltelab/disdrodb/blob/main/LICENSE) |
80
+ | Community | [![Slack](https://img.shields.io/badge/Slack-disdrodb-green.svg?logo=slack&style=flat)](https://join.slack.com/t/disdrodbworkspace/shared_invite/zt-25l4mvgo7-cfBdXalzlWGd4Pt7H~FqoA) [![GitHub Discussions](https://img.shields.io/badge/GitHub-Discussions-green?logo=github&style=flat)](https://github.com/ltelab/disdrodb/discussions) |
81
+ | Citation | [![DOI](https://zenodo.org/badge/429018433.svg?style=flat)](https://zenodo.org/doi/10.5281/zenodo.7680581) |
69
82
 
70
83
  [**Slack**](https://join.slack.com/t/disdrodbworkspace/shared_invite/zt-25l4mvgo7-cfBdXalzlWGd4Pt7H~FqoA) | [**Documentation**](https://disdrodb.readthedocs.io/en/latest/)
71
84
 
72
- DISDRODB is part of an international joint effort to index, collect and homogenize drop size distribution (DSD) data from around the world.
73
-
74
- The DISDRODB project also aims to establish a global standard for sharing disdrometer observations.
85
+ DISDRODB is an international joint effort to index, collect and homogenize drop size distribution (DSD) data from around the world.
86
+ DISDRODB aims to establish a global standard for sharing disdrometer observations.
75
87
  Built on FAIR data principles and Climate & Forecast (CF) conventions, DISDRODB standards facilitate the processing, analysis and visualization of disdrometer data.
76
88
 
77
89
  ## ℹ️ Software Overview
@@ -88,7 +100,6 @@ The software enables you to:
88
100
 
89
101
  - Compute empirical and model-based drop size distribution parameters and derive geophysical and polarimetric radar variables of interest (DISDRODB L2 product)
90
102
 
91
- Currently, the DISDRODB Working Group is finalizing the development of the L1 and L2 scientific products.
92
103
  If you have ideas, algorithms, data, or expertise to share, or you want to contribute to the future DISDRODB products, do not hesitate to get in touch!!!
93
104
 
94
105
  Join the [**DISDRODB Slack Workspace**](https://join.slack.com/t/disdrodbworkspace/shared_invite/zt-25l4mvgo7-cfBdXalzlWGd4Pt7H~FqoA) to meet the DISDRODB Community!