cloudnetpy 1.80.0__tar.gz → 1.80.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 (132) hide show
  1. {cloudnetpy-1.80.0/cloudnetpy.egg-info → cloudnetpy-1.80.2}/PKG-INFO +1 -1
  2. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/categorize.py +5 -4
  3. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/ceilo.py +1 -0
  4. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/ceilometer.py +18 -0
  5. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/radiometrics.py +6 -2
  6. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/version.py +1 -1
  7. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2/cloudnetpy.egg-info}/PKG-INFO +1 -1
  8. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/LICENSE +0 -0
  9. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/MANIFEST.in +0 -0
  10. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/README.md +0 -0
  11. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/__init__.py +0 -0
  12. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/__init__.py +0 -0
  13. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/atmos_utils.py +0 -0
  14. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/attenuation.py +0 -0
  15. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
  16. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
  17. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
  18. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
  19. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
  20. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/classify.py +0 -0
  21. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/containers.py +0 -0
  22. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/disdrometer.py +0 -0
  23. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/droplet.py +0 -0
  24. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/falling.py +0 -0
  25. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/freezing.py +0 -0
  26. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/insects.py +0 -0
  27. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/itu.py +0 -0
  28. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/lidar.py +0 -0
  29. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/melting.py +0 -0
  30. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/model.py +0 -0
  31. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/mwr.py +0 -0
  32. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/categorize/radar.py +0 -0
  33. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/cli.py +0 -0
  34. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/cloudnetarray.py +0 -0
  35. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/concat_lib.py +0 -0
  36. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/constants.py +0 -0
  37. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/datasource.py +0 -0
  38. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/exceptions.py +0 -0
  39. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/__init__.py +0 -0
  40. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/basta.py +0 -0
  41. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/bowtie.py +0 -0
  42. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/cl61d.py +0 -0
  43. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  44. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/copernicus.py +0 -0
  45. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  46. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  47. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  48. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  49. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/fd12p.py +0 -0
  50. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/galileo.py +0 -0
  51. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/hatpro.py +0 -0
  52. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/instruments.py +0 -0
  53. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/lufft.py +0 -0
  54. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/mira.py +0 -0
  55. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/mrr.py +0 -0
  56. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/nc_lidar.py +0 -0
  57. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/nc_radar.py +0 -0
  58. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/pollyxt.py +0 -0
  59. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/rain_e_h3.py +0 -0
  60. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/rpg.py +0 -0
  61. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/rpg_reader.py +0 -0
  62. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/toa5.py +0 -0
  63. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/vaisala.py +0 -0
  64. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/instruments/weather_station.py +0 -0
  65. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/metadata.py +0 -0
  66. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/__init__.py +0 -0
  67. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  68. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/metadata.py +0 -0
  69. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  70. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  71. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  72. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  73. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  74. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  75. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  76. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  77. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  78. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  79. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  80. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  81. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  82. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  83. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  84. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  85. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  86. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  87. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  88. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  89. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  90. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  91. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  92. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  93. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  94. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  95. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  96. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  97. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  98. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  99. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  100. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  101. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  102. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  103. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  104. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  105. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/model_evaluation/utils.py +0 -0
  106. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/output.py +0 -0
  107. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/plotting/__init__.py +0 -0
  108. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/plotting/plot_meta.py +0 -0
  109. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/plotting/plotting.py +0 -0
  110. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/__init__.py +0 -0
  111. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/classification.py +0 -0
  112. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/der.py +0 -0
  113. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/drizzle.py +0 -0
  114. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/drizzle_error.py +0 -0
  115. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/drizzle_tools.py +0 -0
  116. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/epsilon.py +0 -0
  117. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/ier.py +0 -0
  118. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/iwc.py +0 -0
  119. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/lwc.py +0 -0
  120. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  121. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/mwr_tools.py +0 -0
  122. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/products/product_tools.py +0 -0
  123. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/py.typed +0 -0
  124. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy/utils.py +0 -0
  125. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  126. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  127. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy.egg-info/entry_points.txt +0 -0
  128. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy.egg-info/requires.txt +0 -0
  129. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/cloudnetpy.egg-info/top_level.txt +0 -0
  130. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/docs/source/conf.py +0 -0
  131. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/pyproject.toml +0 -0
  132. {cloudnetpy-1.80.0 → cloudnetpy-1.80.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.80.0
3
+ Version: 1.80.2
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -145,10 +145,11 @@ def generate_categorize(
145
145
  return utils.time_grid(), data.radar.height
146
146
 
147
147
  def _close_all() -> None:
148
- for field in fields(data):
149
- obj = getattr(data, field.name)
150
- if isinstance(obj, DataSource):
151
- obj.close()
148
+ if "data" in locals():
149
+ for field in fields(data):
150
+ obj = getattr(data, field.name)
151
+ if isinstance(obj, DataSource):
152
+ obj.close()
152
153
 
153
154
  try:
154
155
  radar = Radar(input_files["radar"])
@@ -121,6 +121,7 @@ def ceilo2nc(
121
121
  ceilo_obj.data["depolarisation"].mask = ceilo_obj.data["beta"].mask
122
122
  ceilo_obj.screen_depol()
123
123
  ceilo_obj.screen_invalid_values()
124
+ ceilo_obj.screen_sunbeam()
124
125
  ceilo_obj.prepare_data()
125
126
  ceilo_obj.data_to_cloudnet_arrays()
126
127
  ceilo_obj.add_site_geolocation()
@@ -137,6 +137,24 @@ class Ceilometer:
137
137
  msg = f"Invalid beta_raw shape: {beta_raw.shape}"
138
138
  raise ValidTimeStampError(msg)
139
139
 
140
+ def screen_sunbeam(self) -> None:
141
+ high_alt_mask = self.data["range"] > 10000
142
+ if not np.any(high_alt_mask):
143
+ return
144
+
145
+ is_data = ~self.data["beta"][:, high_alt_mask].mask
146
+ n_bins = 20
147
+
148
+ n_profiles, n_heights = is_data.shape
149
+ bin_size = n_heights // n_bins
150
+ reshaped = is_data[:, : bin_size * n_bins].reshape(n_profiles, n_bins, bin_size)
151
+
152
+ valid_profiles = np.any(reshaped, axis=2).sum(axis=1) < 15
153
+
154
+ for key, value in self.data.items():
155
+ if key == "time" or (isinstance(value, np.ndarray) and value.ndim == 2):
156
+ self.data[key] = value[valid_profiles]
157
+
140
158
 
141
159
  class NoisyData:
142
160
  def __init__(
@@ -122,12 +122,15 @@ class RadiometricsMP:
122
122
  logging.info("Skipping unknown record type %d", record_type)
123
123
  unknown_record_types.add(record_type)
124
124
  continue
125
+
126
+ row_trimmed = [value for value in row if value != ""]
127
+
125
128
  record = Record(
126
129
  row_number=int(row[0]),
127
130
  timestamp=_parse_datetime(row[1]),
128
131
  block_type=block_type,
129
132
  block_index=block_index,
130
- values=dict(zip(column_names, row[3:], strict=True)),
133
+ values=dict(zip(column_names, row_trimmed[3:], strict=True)),
131
134
  )
132
135
  rows.append(record)
133
136
 
@@ -157,7 +160,7 @@ class RadiometricsMP:
157
160
  # "LV2 Processor" values "Zenith" and "0.00:90.00" should be OK
158
161
  # but "Angle20(N)" and similar should be skipped.
159
162
  proc = record.values["LV2 Processor"]
160
- if proc.startswith("Angle"):
163
+ if proc.startswith(("Angle", "Zenith26")):
161
164
  skip_procs.add(proc)
162
165
  continue
163
166
  if title == "Temperature (K)":
@@ -204,6 +207,7 @@ class RadiometricsMP:
204
207
  times.append(record.timestamp)
205
208
  lwps.append(float(lwp))
206
209
  iwvs.append(float(iwv))
210
+
207
211
  self.data["time"] = np.array(times, dtype="datetime64[s]")
208
212
  self.data["lwp"] = np.array(lwps) # mm => kg m-2
209
213
  self.data["iwv"] = np.array(iwvs) * 10 # cm => kg m-2
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 80
3
- PATCH = 0
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.80.0
3
+ Version: 1.80.2
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