cloudnetpy 1.62.1__tar.gz → 1.64.0__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 (121) hide show
  1. {cloudnetpy-1.62.1/cloudnetpy.egg-info → cloudnetpy-1.64.0}/PKG-INFO +1 -1
  2. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/categorize.py +3 -1
  3. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/containers.py +18 -3
  4. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/insects.py +1 -14
  5. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/model.py +7 -1
  6. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/version.py +2 -2
  7. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0/cloudnetpy.egg-info}/PKG-INFO +1 -1
  8. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/LICENSE +0 -0
  9. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/MANIFEST.in +0 -0
  10. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/README.md +0 -0
  11. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/__init__.py +0 -0
  12. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/__init__.py +0 -0
  13. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/atmos.py +0 -0
  14. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/atmos_utils.py +0 -0
  15. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/classify.py +0 -0
  16. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/disdrometer.py +0 -0
  17. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/droplet.py +0 -0
  18. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/falling.py +0 -0
  19. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/freezing.py +0 -0
  20. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/lidar.py +0 -0
  21. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/melting.py +0 -0
  22. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/mwr.py +0 -0
  23. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/categorize/radar.py +0 -0
  24. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/cloudnetarray.py +0 -0
  25. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/concat_lib.py +0 -0
  26. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/constants.py +0 -0
  27. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/datasource.py +0 -0
  28. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/exceptions.py +0 -0
  29. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/__init__.py +0 -0
  30. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/basta.py +0 -0
  31. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/campbell_scientific.py +0 -0
  32. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/ceilo.py +0 -0
  33. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/ceilometer.py +0 -0
  34. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/cl61d.py +0 -0
  35. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  36. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/copernicus.py +0 -0
  37. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  38. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  39. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  40. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  41. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/galileo.py +0 -0
  42. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/hatpro.py +0 -0
  43. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/instruments.py +0 -0
  44. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/lufft.py +0 -0
  45. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/mira.py +0 -0
  46. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/mrr.py +0 -0
  47. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/nc_lidar.py +0 -0
  48. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/nc_radar.py +0 -0
  49. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/pollyxt.py +0 -0
  50. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/radiometrics.py +0 -0
  51. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/rpg.py +0 -0
  52. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/rpg_reader.py +0 -0
  53. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/toa5.py +0 -0
  54. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/vaisala.py +0 -0
  55. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/instruments/weather_station.py +0 -0
  56. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/metadata.py +0 -0
  57. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/__init__.py +0 -0
  58. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  59. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/metadata.py +0 -0
  60. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  61. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  62. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  63. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  64. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  65. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  66. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  67. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  68. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  69. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  70. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  71. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  72. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  73. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  74. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  75. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  76. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  77. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  78. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  79. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  80. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  81. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  82. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  83. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  84. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  85. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  86. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  87. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  88. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  89. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  90. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  91. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  92. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  93. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  94. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  95. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  96. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/model_evaluation/utils.py +0 -0
  97. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/output.py +0 -0
  98. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/plotting/__init__.py +0 -0
  99. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/plotting/plot_meta.py +0 -0
  100. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/plotting/plotting.py +0 -0
  101. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/__init__.py +0 -0
  102. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/classification.py +0 -0
  103. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/der.py +0 -0
  104. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/drizzle.py +0 -0
  105. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/drizzle_error.py +0 -0
  106. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/drizzle_tools.py +0 -0
  107. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/ier.py +0 -0
  108. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/iwc.py +0 -0
  109. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/lwc.py +0 -0
  110. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  111. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/mwr_tools.py +0 -0
  112. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/products/product_tools.py +0 -0
  113. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/py.typed +0 -0
  114. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy/utils.py +0 -0
  115. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  116. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  117. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy.egg-info/requires.txt +0 -0
  118. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/cloudnetpy.egg-info/top_level.txt +0 -0
  119. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/docs/source/conf.py +0 -0
  120. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/pyproject.toml +0 -0
  121. {cloudnetpy-1.62.1 → cloudnetpy-1.64.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.62.1
3
+ Version: 1.64.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -18,6 +18,7 @@ def generate_categorize(
18
18
  input_files: dict,
19
19
  output_file: str,
20
20
  uuid: str | None = None,
21
+ options: dict | None = None,
21
22
  ) -> str:
22
23
  """Generates Cloudnet Level 1c categorize file.
23
24
 
@@ -33,6 +34,7 @@ def generate_categorize(
33
34
  RPG level 0 files.
34
35
  output_file: Full path of the output file.
35
36
  uuid: Set specific UUID for the file.
37
+ options: Dictionary containing optional parameters.
36
38
 
37
39
  Returns:
38
40
  UUID of the generated file.
@@ -138,7 +140,7 @@ def generate_categorize(
138
140
  data["disdrometer"] = Disdrometer(input_files["disdrometer"])
139
141
  except DisdrometerDataError as err:
140
142
  logging.warning("Unable to use disdrometer: %s", err)
141
- data["model"] = Model(input_files["model"], data["radar"].altitude)
143
+ data["model"] = Model(input_files["model"], data["radar"].altitude, options)
142
144
  time, height = _define_dense_grid()
143
145
  valid_ind = _interpolate_to_cloudnet_grid()
144
146
  if not valid_ind:
@@ -74,13 +74,28 @@ class ClassData:
74
74
 
75
75
  def _find_rain_from_radar_echo(self) -> np.ndarray:
76
76
  gate_number = 3
77
- threshold = 0
77
+ threshold = {"z": 3, "v": 0, "ldr": -15}
78
78
  z = self.z[:, gate_number]
79
- return np.where((~ma.getmaskarray(z)) & (z > threshold), 1, 0)
79
+ v = self.v[:, gate_number]
80
+ if hasattr(self, "ldr"):
81
+ ldr = self.ldr[:, gate_number]
82
+ elif hasattr(self, "sldr"):
83
+ ldr = self.sldr[:, gate_number]
84
+ else:
85
+ ldr = np.full(self.time.shape, threshold["ldr"] - 1)
86
+
87
+ return np.where(
88
+ (~ma.getmaskarray(z))
89
+ & (z > threshold["z"])
90
+ & (v < threshold["v"])
91
+ & (ldr < threshold["ldr"]),
92
+ 1,
93
+ 0,
94
+ )
80
95
 
81
96
  def _find_rain_from_disdrometer(self) -> ma.MaskedArray:
82
97
  threshold_mm_h = 0.25 # Standard threshold for drizzle -> rain
83
- threshold_particles = 10 # This is arbitrary and should be better tested
98
+ threshold_particles = 30 # This is arbitrary and should be better tested
84
99
  threshold_rate = threshold_mm_h * MM_H_TO_M_S
85
100
  try:
86
101
  rainfall_rate = self.data["disdrometer"].data["rainfall_rate"].data
@@ -148,8 +148,7 @@ def _screen_insects(
148
148
  prob[(above_liquid == 1) & (insect_prob_no_ldr > 0)] = 0
149
149
 
150
150
  def _screen_rainy_profiles() -> None:
151
- rain_smoothed = _smooth_rain(obs.time, obs.is_rain)
152
- prob[rain_smoothed == 1, :] = 0
151
+ prob[obs.is_rain == 1, :] = 0
153
152
 
154
153
  prob = np.copy(insect_prob)
155
154
  _screen_liquid_layers()
@@ -157,15 +156,3 @@ def _screen_insects(
157
156
  _screen_above_liquid()
158
157
  _screen_rainy_profiles()
159
158
  return prob
160
-
161
-
162
- def _smooth_rain(time: np.ndarray, is_rain: np.ndarray) -> np.ndarray:
163
- is_rain_smoothed = np.copy(is_rain)
164
- time_buffer = 5 # minutes
165
- n_profiles = len(is_rain)
166
- n_steps = utils.n_elements(time, time_buffer, "time")
167
- for rain_idx in np.where(is_rain)[0]:
168
- idx_start = max(0, rain_idx - n_steps)
169
- idx_end = min(rain_idx + n_steps, n_profiles)
170
- is_rain_smoothed[idx_start : idx_end + 1] = True
171
- return is_rain_smoothed
@@ -17,6 +17,7 @@ class Model(DataSource):
17
17
  Args:
18
18
  model_file: File name of the NWP model file.
19
19
  alt_site: Altitude of the site above mean sea level (m).
20
+ options: Dictionary containing optional parameters.
20
21
 
21
22
  Attributes:
22
23
  source_type (str): Model type, e.g. 'gdas1' or 'ecwmf'.
@@ -41,8 +42,9 @@ class Model(DataSource):
41
42
  )
42
43
  fields_sparse = (*fields_dense, "q", "uwind", "vwind")
43
44
 
44
- def __init__(self, model_file: str, alt_site: float):
45
+ def __init__(self, model_file: str, alt_site: float, options: dict | None = None):
45
46
  super().__init__(model_file)
47
+ self.options = options
46
48
  self.source_type = _find_model_type(model_file)
47
49
  self.model_heights = self._get_model_heights(alt_site)
48
50
  self.mean_height = _calc_mean_height(self.model_heights)
@@ -113,7 +115,11 @@ class Model(DataSource):
113
115
  def calc_wet_bulb(self) -> None:
114
116
  """Calculates wet-bulb temperature in dense grid."""
115
117
  wet_bulb_temp = atmos_utils.calc_wet_bulb_temperature(self.data_dense)
118
+ offset = (self.options or {}).get("temperature_offset", 0)
119
+ wet_bulb_temp += offset
116
120
  self.append_data(wet_bulb_temp, "Tw", units="K")
121
+ if offset:
122
+ self.data["Tw"].temperature_correction_applied = offset
117
123
 
118
124
  def screen_sparse_fields(self) -> None:
119
125
  """Removes model fields that we don't want to write in the output."""
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
- MINOR = 62
3
- PATCH = 1
2
+ MINOR = 64
3
+ PATCH = 0
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.62.1
3
+ Version: 1.64.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
File without changes
File without changes
File without changes
File without changes
File without changes