cloudnetpy 1.85.4__py3-none-any.whl → 1.85.5__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.
@@ -104,6 +104,7 @@ def mrr2nc(
104
104
  if date:
105
105
  mrr.screen_by_date(date)
106
106
  mrr.add_time_and_range()
107
+ mrr.fix_range()
107
108
  mrr.add_site_geolocation()
108
109
  mrr.add_zenith_angle()
109
110
  mrr.add_radar_specific_variables()
@@ -161,6 +162,12 @@ class MrrPro(NcRadar):
161
162
  valid_indices.append(ind)
162
163
  self.screen_time_indices(valid_indices)
163
164
 
165
+ def fix_range(self) -> None:
166
+ # It seems like the "range" variable in MRR-PRO raw files is actually
167
+ # defined above mean sea level -> convert to range above ground level
168
+ range_data = self.data["range"].data
169
+ range_data -= range_data[0]
170
+
164
171
 
165
172
  ATTRIBUTES = {
166
173
  "lwc": MetaData(
@@ -19,6 +19,7 @@ class PlotMeta(NamedTuple):
19
19
  moving_average: Whether to plot a moving average in a 1d plot.
20
20
  contour: Whether to plot contours on top of a filled colormap.
21
21
  zero_line: Whether to plot a zero line in a 1d plot.
22
+ mask_zero: Whether to mask zero values in the plot.
22
23
  time_smoothing_duration: The duration of the time smoothing window
23
24
  (in 2d plots) in minutes.
24
25
  """
@@ -30,6 +31,7 @@ class PlotMeta(NamedTuple):
30
31
  moving_average: bool = True
31
32
  contour: bool = False
32
33
  zero_line: bool = False
34
+ mask_zeros: bool = False
33
35
  time_smoothing_duration: int = 0
34
36
 
35
37
 
@@ -150,6 +152,7 @@ ATTRIBUTES = {
150
152
  "rainfall_rate": PlotMeta(
151
153
  cmap="Blues",
152
154
  plot_range=(0, 50 / 3600000),
155
+ mask_zeros=True,
153
156
  )
154
157
  },
155
158
  "mwr": {
@@ -390,6 +393,7 @@ ATTRIBUTES = {
390
393
  "number_concentration": PlotMeta(plot_range=(1e-2, 1e3), log_scale=True),
391
394
  "fall_velocity": PlotMeta(
392
395
  plot_range=(0, 10),
396
+ mask_zeros=True,
393
397
  ),
394
398
  "pressure": PlotMeta(
395
399
  plot_range=(1e4, 1.2e5),
@@ -598,6 +602,7 @@ ATTRIBUTES = {
598
602
  cmap="Blues",
599
603
  plot_range=(1e-5, 1e-2),
600
604
  log_scale=True,
605
+ mask_zeros=True,
601
606
  ),
602
607
  "lwc_error": PlotMeta(
603
608
  cmap="RdYlGn_r",
@@ -608,6 +613,7 @@ ATTRIBUTES = {
608
613
  ),
609
614
  "pia": PlotMeta(
610
615
  plot_range=(0, 3),
616
+ mask_zeros=True,
611
617
  ),
612
618
  "lwp": PlotMeta(
613
619
  zero_line=True,
@@ -362,6 +362,10 @@ class Plot:
362
362
  self._is_log = sub_plot.plot_meta.log_scale
363
363
  self._ax = sub_plot.ax
364
364
 
365
+ def _mask_zeros(self) -> None:
366
+ self._data = ma.masked_where(self._data == 0, self._data)
367
+ self._data_orig = ma.masked_where(self._data_orig == 0, self._data_orig)
368
+
365
369
  def _convert_units(self) -> str:
366
370
  multiply, add = "multiply", "add"
367
371
  units_conversion = {
@@ -491,6 +495,8 @@ class Plot:
491
495
  class Plot2D(Plot):
492
496
  def plot(self, figure_data: FigureData) -> None:
493
497
  self._convert_units()
498
+ if self._plot_meta.mask_zeros:
499
+ self._mask_zeros()
494
500
  if figure_data.file_type == "cpr-simulation":
495
501
  min_x, max_x = 0, EARTHCARE_MAX_X
496
502
  else:
@@ -693,6 +699,8 @@ class Plot1D(Plot):
693
699
  msg = "All data is masked"
694
700
  raise PlottingError(msg)
695
701
  units = self._convert_units()
702
+ if self._plot_meta.mask_zeros:
703
+ self._mask_zeros()
696
704
  self._mark_gaps(figure_data)
697
705
  self._ax.plot(
698
706
  figure_data.time_including_gaps,
@@ -823,6 +831,9 @@ class Plot1D(Plot):
823
831
  max_y = max_data + gap
824
832
  if min_y == 0 and max_y == 0:
825
833
  return fallback
834
+ if min_y == max_y:
835
+ gap = np.abs(min_y) * percent_gap
836
+ return min_y - gap, max_y + gap
826
837
  return min_y, max_y
827
838
 
828
839
  def _get_plot_options(self) -> dict:
cloudnetpy/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 85
3
- PATCH = 4
3
+ PATCH = 5
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.85.4
3
+ Version: 1.85.5
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -9,7 +9,7 @@ cloudnetpy/metadata.py,sha256=CFpXmdEkVPzvLPv2xHIR-aMMQ-TR26KfESYw-98j7sk,7213
9
9
  cloudnetpy/output.py,sha256=0bybnILsgKHWIuw2GYkqTz2iMCJDZLUN25IQ9o_v3Cg,14968
10
10
  cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  cloudnetpy/utils.py,sha256=x3hukn7wuOyF3ctG8EOhvLbSUHOVKLW9ez2LzTjeolU,33110
12
- cloudnetpy/version.py,sha256=LUOGWnVi7vV8k73yGc-QF9Xywl4hMvUVTdIAxQgjskA,72
12
+ cloudnetpy/version.py,sha256=LIie3vB4_JAVH9ThGGPAWNjAwLy9Nrli2ODRwPbsFfY,72
13
13
  cloudnetpy/categorize/__init__.py,sha256=gtvzWr0IDRn2oA6yHBvinEhTGTuub-JkrOv93lBsgrE,61
14
14
  cloudnetpy/categorize/atmos_utils.py,sha256=uWc9TABVYPI0sn4H5Az9Jf6NVRaWyEKIi17f0pAJQxE,10679
15
15
  cloudnetpy/categorize/attenuation.py,sha256=Y_-fzmQTltWTqIZTulJhovC7a6ifpMcaAazDJcnMIOc,990
@@ -47,7 +47,7 @@ cloudnetpy/instruments/hatpro.py,sha256=TGOqwW0TfoPEYk13MFvFzwgJGzm6MVE5AsPavcIo
47
47
  cloudnetpy/instruments/instruments.py,sha256=WZgH7HjzM9Ane1CSnYCSLidbST8hunUeSt2lPntq9As,4999
48
48
  cloudnetpy/instruments/lufft.py,sha256=G6KeJOeltLUlGCHHEk8ns2K7WJ9ImAr25rSB2JltawE,4286
49
49
  cloudnetpy/instruments/mira.py,sha256=jJ17xJmXwqfvZ7hgJaongRrRxoQpivMEQYssgSQFYbA,12638
50
- cloudnetpy/instruments/mrr.py,sha256=z50VYLOBW2o7enU7FHZYNFQRW2goEQpeGe7-iCBRQtg,6020
50
+ cloudnetpy/instruments/mrr.py,sha256=KvhfNIY2ozHE1MRLNYPqtBFThxLGN_YuCpBUGDIR76s,6319
51
51
  cloudnetpy/instruments/nc_lidar.py,sha256=PtZauDdI3bX3bv4gIVvV6N53e2Co-ehBL_tByHM9hj8,1713
52
52
  cloudnetpy/instruments/nc_radar.py,sha256=XFKxPLKivnhHTgjE5HFrxjWZ0oCifhDUAog051vkMiY,7533
53
53
  cloudnetpy/instruments/pollyxt.py,sha256=IFq_RJrhgJ79OVyuo48PwYQK_zZ6VZFB_S5bEirRyzs,10566
@@ -103,8 +103,8 @@ cloudnetpy/model_evaluation/tests/unit/test_plotting.py,sha256=5hkhtqX-JQ8-Yy6DA
103
103
  cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py,sha256=Ra3r4V0qbqkpDuaTYvEIbaasl0nZ5gmTLR4eGC0glBQ,9724
104
104
  cloudnetpy/model_evaluation/tests/unit/test_tools.py,sha256=Ia_VrLdV2NstX5gbx_3AZTOAlrgLAy_xFZ8fHYVX0xI,3817
105
105
  cloudnetpy/plotting/__init__.py,sha256=lg9Smn4BI0dVBgnDLC3JVJ4GmwoSnO-qoSd4ApvwV6Y,107
106
- cloudnetpy/plotting/plot_meta.py,sha256=9d1OgPDysBDUUhncXdj-_EKmGdK7JutNBkzf8YV2lVg,18249
107
- cloudnetpy/plotting/plotting.py,sha256=ZmWddEZVw7xIbmivAH9t4BV_Dxz1du_MvsH6mBMT8MU,41575
106
+ cloudnetpy/plotting/plot_meta.py,sha256=TpUPmBsME3VhB-Atct6EG4ntzlo7Essre83ySp40Ulc,18454
107
+ cloudnetpy/plotting/plotting.py,sha256=v1dD6kmMJ-t88p4rqrnFzS94qUjpI_v9fCAp49fA2V0,42015
108
108
  cloudnetpy/products/__init__.py,sha256=cBJdJBYltz5ZTKDqnRo-0StytAZK8gE3RYxxriFA4ak,295
109
109
  cloudnetpy/products/classification.py,sha256=6WxiGGJXqlAPgJ9hVNTKm3f7iGsqA7e3L3xqVxFFs7w,16894
110
110
  cloudnetpy/products/der.py,sha256=UXdAxmmwChVVWSI4QSGAXphfMnbymGRTtGdKWEvh-J4,13162
@@ -118,10 +118,10 @@ cloudnetpy/products/lwc.py,sha256=xsNiiG6dGKIkWaFk0xWTabc1bZ4ULf6SqcqHs7itAUk,19
118
118
  cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe55y9ob58,16637951
119
119
  cloudnetpy/products/mwr_tools.py,sha256=MMWnp68U7bv157-CPB2VeTQvaR6zl7sexbBT_kJ_pn8,6734
120
120
  cloudnetpy/products/product_tools.py,sha256=eyqIw_0KhlpmmYQE69RpGdRIAOW7JVPlEgkTBp2kdps,11302
121
- cloudnetpy-1.85.4.dist-info/licenses/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
121
+ cloudnetpy-1.85.5.dist-info/licenses/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
122
122
  docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
123
- cloudnetpy-1.85.4.dist-info/METADATA,sha256=pphHS172_hmq2kGCZQKFmcP9VnicMegTxXStqPgzwVA,5836
124
- cloudnetpy-1.85.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
- cloudnetpy-1.85.4.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
126
- cloudnetpy-1.85.4.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
127
- cloudnetpy-1.85.4.dist-info/RECORD,,
123
+ cloudnetpy-1.85.5.dist-info/METADATA,sha256=dR72eUK34l0HmYW2R-Sn-8pqkt53ZslGXuMTwyJGKEc,5836
124
+ cloudnetpy-1.85.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
+ cloudnetpy-1.85.5.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
126
+ cloudnetpy-1.85.5.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
127
+ cloudnetpy-1.85.5.dist-info/RECORD,,