cloudnetpy 1.85.3__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.
- cloudnetpy/instruments/mrr.py +7 -0
- cloudnetpy/plotting/plot_meta.py +6 -0
- cloudnetpy/plotting/plotting.py +14 -0
- cloudnetpy/version.py +1 -1
- {cloudnetpy-1.85.3.dist-info → cloudnetpy-1.85.5.dist-info}/METADATA +1 -1
- {cloudnetpy-1.85.3.dist-info → cloudnetpy-1.85.5.dist-info}/RECORD +10 -10
- {cloudnetpy-1.85.3.dist-info → cloudnetpy-1.85.5.dist-info}/WHEEL +0 -0
- {cloudnetpy-1.85.3.dist-info → cloudnetpy-1.85.5.dist-info}/entry_points.txt +0 -0
- {cloudnetpy-1.85.3.dist-info → cloudnetpy-1.85.5.dist-info}/licenses/LICENSE +0 -0
- {cloudnetpy-1.85.3.dist-info → cloudnetpy-1.85.5.dist-info}/top_level.txt +0 -0
cloudnetpy/instruments/mrr.py
CHANGED
@@ -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(
|
cloudnetpy/plotting/plot_meta.py
CHANGED
@@ -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,
|
cloudnetpy/plotting/plotting.py
CHANGED
@@ -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:
|
@@ -689,7 +695,12 @@ class Plot2D(Plot):
|
|
689
695
|
|
690
696
|
class Plot1D(Plot):
|
691
697
|
def plot(self, figure_data: FigureData, hacky_freq_ind: int | None = None) -> None:
|
698
|
+
if self._data.mask.all() and figure_data.options.raise_on_empty:
|
699
|
+
msg = "All data is masked"
|
700
|
+
raise PlottingError(msg)
|
692
701
|
units = self._convert_units()
|
702
|
+
if self._plot_meta.mask_zeros:
|
703
|
+
self._mask_zeros()
|
693
704
|
self._mark_gaps(figure_data)
|
694
705
|
self._ax.plot(
|
695
706
|
figure_data.time_including_gaps,
|
@@ -820,6 +831,9 @@ class Plot1D(Plot):
|
|
820
831
|
max_y = max_data + gap
|
821
832
|
if min_y == 0 and max_y == 0:
|
822
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
|
823
837
|
return min_y, max_y
|
824
838
|
|
825
839
|
def _get_plot_options(self) -> dict:
|
cloudnetpy/version.py
CHANGED
@@ -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=
|
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=
|
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=
|
107
|
-
cloudnetpy/plotting/plotting.py,sha256=
|
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.
|
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.
|
124
|
-
cloudnetpy-1.85.
|
125
|
-
cloudnetpy-1.85.
|
126
|
-
cloudnetpy-1.85.
|
127
|
-
cloudnetpy-1.85.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|