cloudnetpy 1.95.1__tar.gz → 1.95.2__tar.gz

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 (147) hide show
  1. {cloudnetpy-1.95.1/cloudnetpy.egg-info → cloudnetpy-1.95.2}/PKG-INFO +1 -1
  2. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/model.py +2 -0
  3. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/plotting/plotting.py +1 -0
  4. cloudnetpy-1.95.2/cloudnetpy/products/iwc_weather_radar.py +106 -0
  5. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/version.py +1 -1
  6. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2/cloudnetpy.egg-info}/PKG-INFO +1 -1
  7. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy.egg-info/SOURCES.txt +1 -0
  8. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/LICENSE +0 -0
  9. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/MANIFEST.in +0 -0
  10. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/README.md +0 -0
  11. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/__init__.py +0 -0
  12. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/arm.py +0 -0
  13. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/__init__.py +0 -0
  14. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/atmos_utils.py +0 -0
  15. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/attenuation.py +0 -0
  16. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
  17. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
  18. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
  19. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
  20. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
  21. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/categorize.py +0 -0
  22. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/classify.py +0 -0
  23. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/containers.py +0 -0
  24. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/disdrometer.py +0 -0
  25. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/droplet.py +0 -0
  26. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/falling.py +0 -0
  27. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/freezing.py +0 -0
  28. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/insects.py +0 -0
  29. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/lidar.py +0 -0
  30. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/melting.py +0 -0
  31. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/mwr.py +0 -0
  32. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/categorize/radar.py +0 -0
  33. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/cli.py +0 -0
  34. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/cloudnetarray.py +0 -0
  35. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/concat_lib.py +0 -0
  36. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/constants.py +0 -0
  37. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/datasource.py +0 -0
  38. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/disdronator/__init__.py +0 -0
  39. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/disdronator/lpm.py +0 -0
  40. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/disdronator/parsivel.py +0 -0
  41. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/disdronator/process.py +0 -0
  42. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/disdronator/rd80.py +0 -0
  43. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/disdronator/utils.py +0 -0
  44. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/exceptions.py +0 -0
  45. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/__init__.py +0 -0
  46. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/arm_ceilo.py +0 -0
  47. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/arm_ld.py +0 -0
  48. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/arm_utils.py +0 -0
  49. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/basta.py +0 -0
  50. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/bowtie.py +0 -0
  51. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/ceilo.py +0 -0
  52. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/ceilometer.py +0 -0
  53. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/cl61d.py +0 -0
  54. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  55. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/copernicus.py +0 -0
  56. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/da10.py +0 -0
  57. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/dealias.py +0 -0
  58. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/disdrometer.py +0 -0
  59. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/fd12p.py +0 -0
  60. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/galileo.py +0 -0
  61. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/hatpro.py +0 -0
  62. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/instruments.py +0 -0
  63. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/kazr.py +0 -0
  64. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/lufft.py +0 -0
  65. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/mira.py +0 -0
  66. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/mmcr.py +0 -0
  67. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/mrr.py +0 -0
  68. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/mwr3c.py +0 -0
  69. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/mwrlos.py +0 -0
  70. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/nc_lidar.py +0 -0
  71. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/nc_radar.py +0 -0
  72. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/pollyxt.py +0 -0
  73. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/radiometrics.py +0 -0
  74. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/rain_e_h3.py +0 -0
  75. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/rpg.py +0 -0
  76. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/rpg_reader.py +0 -0
  77. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/toa5.py +0 -0
  78. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/vaisala.py +0 -0
  79. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/weather_radar.py +0 -0
  80. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/instruments/weather_station.py +0 -0
  81. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/metadata.py +0 -0
  82. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/__init__.py +0 -0
  83. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  84. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/metadata.py +0 -0
  85. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  86. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  87. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  88. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  89. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  90. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  91. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  92. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  93. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  94. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  95. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  96. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  97. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  98. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  99. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  100. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  101. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  102. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  103. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  104. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  105. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  106. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  107. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  108. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  109. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  110. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  111. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  112. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  113. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  114. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  115. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  116. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  117. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  118. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  119. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  120. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  121. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/model_evaluation/utils.py +0 -0
  122. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/output.py +0 -0
  123. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/plotting/__init__.py +0 -0
  124. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/plotting/plot_meta.py +0 -0
  125. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/__init__.py +0 -0
  126. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/classification.py +0 -0
  127. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/der.py +0 -0
  128. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/drizzle.py +0 -0
  129. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/drizzle_error.py +0 -0
  130. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/drizzle_tools.py +0 -0
  131. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/epsilon_lidar.py +0 -0
  132. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/epsilon_radar.py +0 -0
  133. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/ier.py +0 -0
  134. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/iwc.py +0 -0
  135. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/lwc.py +0 -0
  136. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  137. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/mwr_tools.py +0 -0
  138. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/products/product_tools.py +0 -0
  139. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/py.typed +0 -0
  140. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy/utils.py +0 -0
  141. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  142. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy.egg-info/entry_points.txt +0 -0
  143. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy.egg-info/requires.txt +0 -0
  144. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/cloudnetpy.egg-info/top_level.txt +0 -0
  145. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/docs/source/conf.py +0 -0
  146. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/pyproject.toml +0 -0
  147. {cloudnetpy-1.95.1 → cloudnetpy-1.95.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.95.1
3
+ Version: 1.95.2
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -101,6 +101,8 @@ class Model(DataSource):
101
101
  """
102
102
  half_height = height_grid - np.diff(height_grid, prepend=self.alt_site) / 2
103
103
  for key in self.fields_dense + self.fields_atten:
104
+ if key not in self.data_sparse:
105
+ continue
104
106
  array = self.data_sparse[key][:]
105
107
  valid_profiles = _find_number_of_valid_profiles(array)
106
108
  if valid_profiles < 2:
@@ -1293,6 +1293,7 @@ def _get_max_gap_in_minutes(figure_data: FigureData) -> float:
1293
1293
  "radar": 5,
1294
1294
  "cpr-simulation": 60,
1295
1295
  "weather-radar": 20,
1296
+ "iwc-weather-radar": 20,
1296
1297
  }
1297
1298
  return max_allowed_gap.get(file_type, 10)
1298
1299
 
@@ -0,0 +1,106 @@
1
+ from os import PathLike
2
+ from uuid import UUID
3
+
4
+ import numpy as np
5
+ from numpy import ma
6
+
7
+ from cloudnetpy import output, utils
8
+ from cloudnetpy.categorize.disdrometer import DataSource
9
+ from cloudnetpy.categorize.model import Model
10
+ from cloudnetpy.cloudnetarray import CloudnetArray
11
+ from cloudnetpy.constants import T0
12
+ from cloudnetpy.metadata import COMMON_ATTRIBUTES, MetaData
13
+
14
+
15
+ def generate_iwc_from_weather_radar(
16
+ weather_radar_file: str | PathLike,
17
+ model_file: str | PathLike,
18
+ output_file: str | PathLike,
19
+ uuid: str | UUID | None = None,
20
+ ) -> UUID:
21
+ uuid = utils.get_uuid(uuid)
22
+ radar = WrRadar(weather_radar_file)
23
+ if radar.altitude is None:
24
+ msg = "Altitude is missing"
25
+ raise ValueError(msg)
26
+ if radar.height is None or radar.height_agl is None:
27
+ msg = "Height is missing"
28
+ raise ValueError(msg)
29
+ model = Model(model_file, radar.altitude)
30
+ model.interpolate_to_common_height()
31
+ model.interpolate_to_grid(radar.time, radar.height)
32
+
33
+ height_agl = radar.height_agl
34
+ z = radar.data["Z"][:]
35
+ v = radar.data["v"][:]
36
+ rho_hv = radar.data["rho_hv"][:]
37
+ temp = model.data_dense["temperature"]
38
+
39
+ is_noise = (height_agl < 3000) & (rho_hv < 0.8) & (z < -20)
40
+ is_ice = (z > -30) & (np.abs(v) < 2) & (temp < T0)
41
+ is_rain = (z > 10) & (v < 0) & (temp > T0 - 10)
42
+
43
+ output_data = {
44
+ "time": CloudnetArray(radar.time, "time"),
45
+ "height": CloudnetArray(radar.height, "height"),
46
+ "radar_frequency": CloudnetArray(radar.radar_frequency, "radar_frequency"),
47
+ }
48
+
49
+ z_rain = ma.masked_where(is_noise | ~is_rain, z)
50
+ rainfall_rate = (utils.db2lin(z_rain) / 200) ** 0.625 # Marshall-Palmer
51
+ output_data["rainfall_rate"] = CloudnetArray(
52
+ rainfall_rate * 1e-3 / 3600, "rainfall_rate"
53
+ )
54
+
55
+ z_ice = ma.masked_where(is_noise | is_rain | ~is_ice, z)
56
+ iwc = ma.power(10, 0.060 * z_ice - 0.0197 * temp - 1.70) # Hogan et al. (2006)
57
+ output_data["iwc"] = CloudnetArray(1000 * iwc, "iwc")
58
+
59
+ date = radar.get_date()
60
+ attributes = output.add_time_attribute(WEATHER_RADAR_RET_ATTRIBUTES, date)
61
+ output.update_attributes(output_data, attributes)
62
+
63
+ dimensions = {"time": len(radar.time), "height": len(radar.height)}
64
+ with output.init_file(output_file, dimensions, output_data, uuid) as nc:
65
+ nc.cloudnet_file_type = "iwc-weather-radar"
66
+ vars_from_source = (
67
+ "altitude",
68
+ "latitude",
69
+ "longitude",
70
+ )
71
+ output.copy_variables(radar.dataset, nc, vars_from_source)
72
+ output.copy_global(radar.dataset, nc, ("year", "month", "day", "location"))
73
+ nc.title = f"Ice water content (weather radar) retrieval from {radar.location}"
74
+ nc.source = "\n".join(sorted([radar.source, model.source]))
75
+ nc.source_file_uuids = output.get_source_uuids([radar, model])
76
+ output.merge_history(nc, nc.cloudnet_file_type, radar, (model,))
77
+
78
+ return uuid
79
+
80
+
81
+ class WrRadar(DataSource):
82
+ def __init__(self, full_path: str | PathLike) -> None:
83
+ super().__init__(full_path, radar=True)
84
+ self.radar_frequency = float(self.getvar("radar_frequency"))
85
+ self.location = getattr(self.dataset, "location", "")
86
+ self._init_data()
87
+
88
+ def _init_data(self) -> None:
89
+ self.append_data(self.getvar("Zh"), "Z", units="dBZ")
90
+ self.append_data(self.getvar("v"), "v")
91
+ self.append_data(self.getvar("rho_hv"), "rho_hv")
92
+
93
+
94
+ WEATHER_RADAR_RET_ATTRIBUTES = {
95
+ "height": COMMON_ATTRIBUTES["height"]._replace(dimensions=("height",)),
96
+ "iwc": MetaData(
97
+ long_name="Ice water content",
98
+ units="kg m-3",
99
+ dimensions=("time", "height"),
100
+ ),
101
+ "rainfall_rate": MetaData(
102
+ long_name="Rainfall rate",
103
+ units="m s-1",
104
+ dimensions=("time", "height"),
105
+ ),
106
+ }
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 95
3
- PATCH = 1
3
+ PATCH = 2
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.95.1
3
+ Version: 1.95.2
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -137,6 +137,7 @@ cloudnetpy/products/epsilon_lidar.py
137
137
  cloudnetpy/products/epsilon_radar.py
138
138
  cloudnetpy/products/ier.py
139
139
  cloudnetpy/products/iwc.py
140
+ cloudnetpy/products/iwc_weather_radar.py
140
141
  cloudnetpy/products/lwc.py
141
142
  cloudnetpy/products/mie_lu_tables.nc
142
143
  cloudnetpy/products/mwr_tools.py
File without changes
File without changes
File without changes
File without changes
File without changes