cloudnetpy 1.66.17__tar.gz → 1.66.19__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 (129) hide show
  1. {cloudnetpy-1.66.17/cloudnetpy.egg-info → cloudnetpy-1.66.19}/PKG-INFO +1 -1
  2. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/instruments.py +10 -3
  3. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/mira.py +13 -2
  4. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/nc_radar.py +17 -33
  5. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/plotting/plotting.py +8 -0
  6. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/version.py +1 -1
  7. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19/cloudnetpy.egg-info}/PKG-INFO +1 -1
  8. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/LICENSE +0 -0
  9. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/MANIFEST.in +0 -0
  10. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/README.md +0 -0
  11. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/__init__.py +0 -0
  12. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/__init__.py +0 -0
  13. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/atmos_utils.py +0 -0
  14. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/attenuation.py +0 -0
  15. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
  16. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
  17. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
  18. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
  19. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
  20. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/categorize.py +0 -0
  21. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/classify.py +0 -0
  22. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/containers.py +0 -0
  23. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/disdrometer.py +0 -0
  24. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/droplet.py +0 -0
  25. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/falling.py +0 -0
  26. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/freezing.py +0 -0
  27. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/insects.py +0 -0
  28. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/itu.py +0 -0
  29. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/lidar.py +0 -0
  30. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/melting.py +0 -0
  31. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/model.py +0 -0
  32. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/mwr.py +0 -0
  33. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/categorize/radar.py +0 -0
  34. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/cli.py +0 -0
  35. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/cloudnetarray.py +0 -0
  36. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/concat_lib.py +0 -0
  37. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/constants.py +0 -0
  38. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/datasource.py +0 -0
  39. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/exceptions.py +0 -0
  40. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/__init__.py +0 -0
  41. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/basta.py +0 -0
  42. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/campbell_scientific.py +0 -0
  43. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/ceilo.py +0 -0
  44. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/ceilometer.py +0 -0
  45. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/cl61d.py +0 -0
  46. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  47. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/copernicus.py +0 -0
  48. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  49. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  50. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  51. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  52. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/galileo.py +0 -0
  53. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/hatpro.py +0 -0
  54. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/lufft.py +0 -0
  55. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/mrr.py +0 -0
  56. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/nc_lidar.py +0 -0
  57. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/pollyxt.py +0 -0
  58. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/radiometrics.py +0 -0
  59. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/rpg.py +0 -0
  60. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/rpg_reader.py +0 -0
  61. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/toa5.py +0 -0
  62. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/vaisala.py +0 -0
  63. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/instruments/weather_station.py +0 -0
  64. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/metadata.py +0 -0
  65. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/__init__.py +0 -0
  66. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  67. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/metadata.py +0 -0
  68. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  69. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  70. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  71. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  72. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  73. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  74. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  75. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  76. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  77. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  78. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  79. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  80. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  81. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  82. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  83. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  84. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  85. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  86. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  87. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  88. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  89. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  90. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  91. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  92. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  93. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  94. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  95. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  96. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  97. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  98. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  99. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  100. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  101. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  102. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  103. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  104. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/model_evaluation/utils.py +0 -0
  105. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/output.py +0 -0
  106. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/plotting/__init__.py +0 -0
  107. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/plotting/plot_meta.py +0 -0
  108. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/__init__.py +0 -0
  109. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/classification.py +0 -0
  110. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/der.py +0 -0
  111. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/drizzle.py +0 -0
  112. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/drizzle_error.py +0 -0
  113. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/drizzle_tools.py +0 -0
  114. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/ier.py +0 -0
  115. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/iwc.py +0 -0
  116. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/lwc.py +0 -0
  117. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  118. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/mwr_tools.py +0 -0
  119. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/products/product_tools.py +0 -0
  120. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/py.typed +0 -0
  121. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy/utils.py +0 -0
  122. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  123. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  124. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy.egg-info/entry_points.txt +0 -0
  125. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy.egg-info/requires.txt +0 -0
  126. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/cloudnetpy.egg-info/top_level.txt +0 -0
  127. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/docs/source/conf.py +0 -0
  128. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/pyproject.toml +0 -0
  129. {cloudnetpy-1.66.17 → cloudnetpy-1.66.19}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.66.17
3
+ Version: 1.66.19
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -142,11 +142,18 @@ HALO = Instrument(
142
142
  model="StreamLine",
143
143
  )
144
144
 
145
- WINDCUBE = Instrument(
146
- manufacturer="Leosphere",
145
+ WINDCUBE_WLS200S = Instrument(
146
+ manufacturer="Vaisala",
147
+ domain="lidar",
148
+ category="Doppler lidar",
149
+ model="WindCube WLS200S",
150
+ )
151
+
152
+ WINDCUBE_WLS70 = Instrument(
153
+ manufacturer="Vaisala",
147
154
  domain="lidar",
148
155
  category="Doppler lidar",
149
- model="WindCube",
156
+ model="WindCube WLS70",
150
157
  )
151
158
 
152
159
  PARSIVEL2 = Instrument(
@@ -72,6 +72,7 @@ def mira2nc(
72
72
  mira.screen_by_snr()
73
73
  mira.screen_invalid_ldr()
74
74
  mira.mask_invalid_data()
75
+ mira.mask_bad_angles()
75
76
  mira.add_time_and_range()
76
77
  mira.add_site_geolocation()
77
78
  mira.add_radar_specific_variables()
@@ -128,6 +129,18 @@ class Mira(NcRadar):
128
129
  )
129
130
  self.data["ldr"].data[:] = ma.masked
130
131
 
132
+ def mask_bad_angles(self) -> None:
133
+ """Masks clearly bad elevation and azimuth angles."""
134
+ limits = {
135
+ "elevation": (0, 180),
136
+ "azimuth_angle": (-360, 360),
137
+ }
138
+ for key, (lower, upper) in limits.items():
139
+ if (array := self.data[key].data) is not None:
140
+ margin = (upper - lower) * 0.05
141
+ array[array < (lower - margin)] = ma.masked
142
+ array[array > (upper + margin)] = ma.masked
143
+
131
144
 
132
145
  def _parse_input_files(input_files: str | list[str], temp_dir: str) -> tuple:
133
146
  if isinstance(input_files, list) or os.path.isdir(input_files):
@@ -219,7 +232,6 @@ def _get_keymap(filetype: str) -> dict:
219
232
  ("SNRh2l", "SNR"),
220
233
  ("elv", "elevation"),
221
234
  ("azi", "azimuth_angle"),
222
- ("aziv", "azimuth_velocity"),
223
235
  ("nfft", "nfft"),
224
236
  ("nave", "nave"),
225
237
  ("prf", "prf"),
@@ -234,7 +246,6 @@ def _get_keymap(filetype: str) -> dict:
234
246
  "SNRg": "SNR",
235
247
  "elv": "elevation",
236
248
  "azi": "azimuth_angle",
237
- "aziv": "azimuth_velocity",
238
249
  "nfft": "nfft",
239
250
  "nave": "nave",
240
251
  "prf": "prf",
@@ -94,41 +94,26 @@ class NcRadar(DataSource, CloudnetInstrument):
94
94
  """Adds non-varying instrument zenith and azimuth angles and returns valid
95
95
  time indices.
96
96
  """
97
- if "azimuth_velocity" in self.data:
98
- azimuth = self.data["azimuth_velocity"].data
99
- azimuth_reference = azimuth[0] if np.all(azimuth == azimuth[0]) else 0
100
- azimuth_tolerance = 1e-6
101
- else:
102
- azimuth = self.data["azimuth_angle"].data
103
- azimuth_reference = ma.median(azimuth)
104
- azimuth_tolerance = 0.1
105
-
106
97
  elevation = self.data["elevation"].data
98
+ azimuth = self.data["azimuth_angle"].data
107
99
 
108
- # Elevation is sometimes around -1000 indicating missing value
109
- # Assume the instrument is pointing vertically in these cases
110
- elevation[elevation < 0] = 90
111
- zenith = 90 - elevation
100
+ elevation_diff = ma.diff(elevation, prepend=elevation[1])
101
+ azimuth_diff = ma.diff(azimuth, prepend=azimuth[1])
112
102
 
113
- is_valid_zenith = np.abs(zenith) < 10
114
- if not np.any(is_valid_zenith):
115
- msg = "No valid zenith angles"
116
- raise ValidTimeStampError(msg)
103
+ is_stable = np.abs(elevation - 90) < 1
104
+ is_stable &= np.abs(elevation_diff) < 1e-6
105
+ is_stable &= np.abs(azimuth_diff) < 1e-3
117
106
 
118
- valid_zenith = zenith[is_valid_zenith]
119
- is_stable_zenith = np.isclose(zenith, ma.median(valid_zenith), atol=0.1)
120
- is_stable_azimuth = np.isclose(
121
- azimuth,
122
- azimuth_reference,
123
- atol=azimuth_tolerance,
124
- )
125
- is_stable_profile = is_stable_zenith & is_stable_azimuth
107
+ # If scanning unit is broken, data are missing
108
+ # (assume it's vertically pointing)
109
+ missing_info = elevation.mask & azimuth.mask
110
+ is_stable[missing_info] = True
126
111
 
127
- if ma.isMaskedArray(is_stable_profile):
128
- is_stable_profile[is_stable_profile.mask] = False
129
- n_removed = np.count_nonzero(~is_stable_profile)
112
+ if ma.isMaskedArray(is_stable):
113
+ is_stable[is_stable.mask] = False
114
+ n_removed = np.count_nonzero(~is_stable)
130
115
 
131
- if n_removed >= len(zenith) - 1:
116
+ if n_removed >= len(elevation) - 1:
132
117
  msg = "Less than two profiles with valid zenith / azimuth angles"
133
118
  raise ValidTimeStampError(msg)
134
119
 
@@ -137,11 +122,10 @@ class NcRadar(DataSource, CloudnetInstrument):
137
122
  "Filtering %s profiles due to varying zenith / azimuth angle",
138
123
  n_removed,
139
124
  )
125
+ zenith = 90 - elevation
140
126
  self.append_data(zenith, "zenith_angle")
141
- for key in ("elevation", "azimuth_velocity"):
142
- if key in self.data:
143
- del self.data[key]
144
- return list(is_stable_profile)
127
+ del self.data["elevation"]
128
+ return list(is_stable)
145
129
 
146
130
  def add_radar_specific_variables(self) -> None:
147
131
  """Adds radar specific variables."""
@@ -45,6 +45,8 @@ class PlotParameters:
45
45
  plot_meta: Additional metadata for the plot.
46
46
  raise_on_empty: Whether to raise an error if no data is found for a
47
47
  plotted variable.
48
+ minor_ticks: Whether to display minor ticks on the x-axis.
49
+
48
50
  """
49
51
 
50
52
  dpi: float = 120
@@ -58,6 +60,7 @@ class PlotParameters:
58
60
  footer_text: str | None = None
59
61
  plot_meta: PlotMeta | None = None
60
62
  raise_on_empty: bool = False
63
+ minor_ticks: bool = False
61
64
 
62
65
 
63
66
  class Dimensions:
@@ -210,6 +213,9 @@ class SubPlot:
210
213
  ]
211
214
  self.ax.set_xticks(np.arange(0, 25, resolution, dtype=int))
212
215
  self.ax.set_xticklabels(x_tick_labels, fontsize=12)
216
+ if self.options.minor_ticks:
217
+ self.ax.xaxis.set_minor_locator(AutoMinorLocator(4))
218
+ self.ax.tick_params(which="minor", length=2.5)
213
219
  self.ax.set_xlim(0, 24)
214
220
 
215
221
  def set_yax(
@@ -910,6 +916,8 @@ def _get_max_gap_in_minutes(figure_data: FigureData) -> float:
910
916
  "mwr-multi": 35,
911
917
  "weather-station": 12,
912
918
  "doppler-lidar-wind": 75,
919
+ "doppler-lidar": 75,
920
+ "radar": 5,
913
921
  }
914
922
  return max_allowed_gap.get(file_type, 10)
915
923
 
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 66
3
- PATCH = 17
3
+ PATCH = 19
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.66.17
3
+ Version: 1.66.19
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