cloudnetpy 1.96.7__tar.gz → 1.97.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.
- {cloudnetpy-1.96.7/cloudnetpy.egg-info → cloudnetpy-1.97.0}/PKG-INFO +1 -1
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/arm.py +2 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/radar.py +1 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/plotting/plotting.py +12 -13
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/ier.py +1 -1
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/iwc.py +31 -40
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/version.py +2 -2
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0/cloudnetpy.egg-info}/PKG-INFO +1 -1
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/LICENSE +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/MANIFEST.in +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/README.md +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/atmos_utils.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuation.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/categorize.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/classify.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/containers.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/disdrometer.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/droplet.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/falling.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/freezing.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/insects.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/lidar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/melting.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/model.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/mwr.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/cli.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/cloudnetarray.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/concat_lib.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/constants.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/datasource.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/disdronator/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/disdronator/lpm.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/disdronator/parsivel.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/disdronator/process.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/disdronator/rd80.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/disdronator/utils.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/exceptions.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/arm_ceilo.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/arm_ld.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/arm_utils.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/basta.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/bowtie.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/ceilo.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/ceilometer.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/cl61d.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/copernicus.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/da10.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/dealias.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/disdrometer.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/fd12p.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/galileo.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/hatpro.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/instruments.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/kazr.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/lufft.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/mira.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/mmcr.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/mrr.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/mwr3c.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/mwrlos.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/nc_lidar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/nc_radar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/pollyxt.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/radiometrics.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/rain_e_h3.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/rpg.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/rpg_reader.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/toa5.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/vaisala.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/weather_radar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/instruments/weather_station.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/metadata.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/file_handler.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/metadata.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/utils.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/output.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/plotting/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/plotting/plot_meta.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/__init__.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/classification.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/cod.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/der.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/drizzle.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/drizzle_error.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/drizzle_tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/epsilon_lidar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/epsilon_radar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/iwc_weather_radar.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/lwc.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/mie_lu_tables.nc +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/mwr_tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/products/product_tools.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/py.typed +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/utils.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy.egg-info/SOURCES.txt +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy.egg-info/dependency_links.txt +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy.egg-info/entry_points.txt +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy.egg-info/requires.txt +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy.egg-info/top_level.txt +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/docs/source/conf.py +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/pyproject.toml +0 -0
- {cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/setup.cfg +0 -0
|
@@ -725,29 +725,28 @@ class Plot2D(Plot):
|
|
|
725
725
|
if figure_data.is_mwrpy_product():
|
|
726
726
|
self._fill_flagged_data(figure_data)
|
|
727
727
|
|
|
728
|
-
if
|
|
728
|
+
if self.sub_plot.variable.name == "signal_source_status":
|
|
729
729
|
self._indicate_rainy_profiles(figure_data)
|
|
730
730
|
|
|
731
731
|
def _indicate_rainy_profiles(self, figure_data: FigureData) -> None:
|
|
732
732
|
if "rain_detected" not in figure_data.file.variables:
|
|
733
733
|
return
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
if is_rain.mask.all():
|
|
734
|
+
is_rain = figure_data.file.variables["rain_detected"][:] == 1
|
|
735
|
+
if not is_rain.any():
|
|
737
736
|
return
|
|
738
|
-
self._ax.
|
|
737
|
+
self._ax.fill_between(
|
|
739
738
|
figure_data.time,
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
739
|
+
*self._get_y_limits(),
|
|
740
|
+
where=is_rain,
|
|
741
|
+
step="mid",
|
|
742
|
+
facecolor="#1f77b4",
|
|
743
|
+
alpha=0.18,
|
|
744
|
+
linewidth=0,
|
|
746
745
|
label="Rain",
|
|
746
|
+
zorder=_get_zorder("flags"),
|
|
747
747
|
)
|
|
748
748
|
self._ax.legend(
|
|
749
|
-
|
|
750
|
-
numpoints=1,
|
|
749
|
+
loc="upper right",
|
|
751
750
|
frameon=False,
|
|
752
751
|
)
|
|
753
752
|
|
|
@@ -20,7 +20,7 @@ def generate_ier(
|
|
|
20
20
|
) -> UUID:
|
|
21
21
|
"""Generates Cloudnet ice effective radius product.
|
|
22
22
|
|
|
23
|
-
This function calculates ice particle effective radius using the
|
|
23
|
+
This function calculates ice particle effective radius using the Griesche
|
|
24
24
|
et al. 2020 method which uses Hogan et al. 2006 to estimate ice water content
|
|
25
25
|
and alpha from Delanoë et al. 2007. In this method, effective radius
|
|
26
26
|
of ice particles is calculated from attenuated-corrected radar reflectivity
|
|
@@ -3,14 +3,20 @@
|
|
|
3
3
|
from os import PathLike
|
|
4
4
|
from uuid import UUID
|
|
5
5
|
|
|
6
|
+
import numpy as np
|
|
6
7
|
import numpy.typing as npt
|
|
7
8
|
from numpy import ma
|
|
8
9
|
|
|
9
10
|
from cloudnetpy import output, utils
|
|
10
|
-
from cloudnetpy.constants import G_TO_KG
|
|
11
11
|
from cloudnetpy.metadata import MetaData
|
|
12
12
|
from cloudnetpy.products.product_tools import IceClassification, IceSource
|
|
13
13
|
|
|
14
|
+
# Rms error (dB) of the Z-T retrieval at warm (-20...-10 degC) and cold
|
|
15
|
+
# (< -40 degC) temperatures from Hogan et al. (2006).
|
|
16
|
+
RETRIEVAL_UNCERTAINTY = {"Ka": (1.5, 3.0), "W": (1.9, 2.8)}
|
|
17
|
+
T_WARM = -15.0 # degC
|
|
18
|
+
T_COLD = -40.0 # degC
|
|
19
|
+
|
|
14
20
|
|
|
15
21
|
def generate_iwc(
|
|
16
22
|
categorize_file: str | PathLike,
|
|
@@ -50,12 +56,12 @@ def generate_iwc(
|
|
|
50
56
|
iwc_source.append_icy_data(ice_classification)
|
|
51
57
|
iwc_source.append_bias()
|
|
52
58
|
iwc_source.append_sensitivity()
|
|
53
|
-
|
|
59
|
+
iwc_source.append_error(ice_classification)
|
|
54
60
|
iwc_source.append_status(ice_classification)
|
|
55
61
|
date = iwc_source.get_date()
|
|
56
62
|
attributes = output.add_time_attribute(IWC_ATTRIBUTES, date)
|
|
57
63
|
attributes = _add_iwc_comment(attributes, iwc_source)
|
|
58
|
-
attributes = _add_iwc_error_comment(attributes,
|
|
64
|
+
attributes = _add_iwc_error_comment(attributes, iwc_source.wl_band)
|
|
59
65
|
output.update_attributes(iwc_source.data, attributes)
|
|
60
66
|
output.save_product_file(product, iwc_source, output_file, uuid)
|
|
61
67
|
return uuid
|
|
@@ -74,9 +80,7 @@ class IwcSource(IceSource):
|
|
|
74
80
|
bias = self.getvar("Z_bias") * self.coefficients.Z * 10
|
|
75
81
|
self.append_data(bias, f"{self.product}_bias")
|
|
76
82
|
|
|
77
|
-
def append_error(
|
|
78
|
-
self, ice_classification: IceClassification
|
|
79
|
-
) -> tuple[float, float]:
|
|
83
|
+
def append_error(self, ice_classification: IceClassification) -> None:
|
|
80
84
|
"""Estimates error of ice water content."""
|
|
81
85
|
|
|
82
86
|
def _calc_random_error() -> npt.NDArray:
|
|
@@ -84,39 +88,28 @@ class IwcSource(IceSource):
|
|
|
84
88
|
scaled_temperature += self.coefficients.Z
|
|
85
89
|
return self.getvar("Z_error") * scaled_temperature * 10
|
|
86
90
|
|
|
87
|
-
def
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
return
|
|
91
|
+
def _calc_retrieval_uncertainty() -> npt.NDArray:
|
|
92
|
+
# Linear in temperature between the cold and warm values
|
|
93
|
+
warm, cold = RETRIEVAL_UNCERTAINTY[self.wl_band]
|
|
94
|
+
return np.interp(self.temperature, [T_COLD, T_WARM], [cold, warm])
|
|
91
95
|
|
|
92
|
-
|
|
93
|
-
retrieval_uncertainty = 1.7 # dB
|
|
96
|
+
retrieval_uncertainty = _calc_retrieval_uncertainty()
|
|
94
97
|
random_error = _calc_random_error()
|
|
95
|
-
error_uncorrected = _calc_error_in_uncorrected_ice()
|
|
96
98
|
iwc_error = utils.l2norm(retrieval_uncertainty, random_error)
|
|
97
|
-
iwc_error[ice_classification.uncorrected_ice] = utils.l2norm(
|
|
98
|
-
retrieval_uncertainty,
|
|
99
|
-
error_uncorrected,
|
|
100
|
-
)
|
|
101
99
|
iwc_error[~ice_classification.is_ice | ice_classification.uncorrected_ice] = (
|
|
102
100
|
ma.masked
|
|
103
101
|
)
|
|
104
102
|
self.append_data(iwc_error, f"{self.product}_error")
|
|
105
|
-
return lwp_prior, retrieval_uncertainty
|
|
106
103
|
|
|
107
104
|
|
|
108
|
-
def _add_iwc_error_comment(
|
|
109
|
-
|
|
110
|
-
) -> dict:
|
|
105
|
+
def _add_iwc_error_comment(attributes: dict, wl_band: str) -> dict:
|
|
106
|
+
warm, cold = RETRIEVAL_UNCERTAINTY[wl_band]
|
|
111
107
|
attributes["iwc_error"] = attributes["iwc_error"]._replace(
|
|
112
108
|
comment="This variable is an estimate of the one-standard-deviation random\n"
|
|
113
109
|
"error in ice water content due to both the uncertainty of the retrieval\n"
|
|
114
|
-
f"(about {
|
|
115
|
-
"
|
|
116
|
-
"
|
|
117
|
-
"correct for the associated attenuation, the error also includes a\n"
|
|
118
|
-
f"contribution equivalent to approximately {lwp_prior} g m-2 of liquid water\n"
|
|
119
|
-
"path being uncorrected for.",
|
|
110
|
+
f"(about {warm} dB between -20 and -10 degC, rising linearly to {cold} dB\n"
|
|
111
|
+
f"at -40 degC and below), and the random error in radar reflectivity\n"
|
|
112
|
+
"factor from which ice water content was calculated.",
|
|
120
113
|
)
|
|
121
114
|
return attributes
|
|
122
115
|
|
|
@@ -141,17 +134,15 @@ def _add_iwc_comment(attributes: dict, iwc: IwcSource) -> dict:
|
|
|
141
134
|
"supercooled drizzle will erroneously be identified as ice. Missing data\n"
|
|
142
135
|
"indicates either that ice cloud was present but it was only detected by\n"
|
|
143
136
|
"the lidar so its ice water content could not be estimated, or that there\n"
|
|
144
|
-
"was rain below the ice
|
|
145
|
-
"
|
|
146
|
-
"
|
|
147
|
-
"
|
|
148
|
-
"in the iwc_retrieval_status variable. There is some uncertainty
|
|
149
|
-
"procedure which is reflected by an increase in the associated
|
|
150
|
-
"in the iwc_error variable.
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"attenuation. This is indicated by a value of 2 in the iwc_retrieval_status\n"
|
|
154
|
-
"variable, and an increase in the value of the iwc_error variable.",
|
|
137
|
+
"was liquid cloud, rain or melting layer below the ice whose attenuation\n"
|
|
138
|
+
"could not be corrected for. Where microwave radiometer liquid water path\n"
|
|
139
|
+
"and disdrometer rainfall rate were available they were used to correct the\n"
|
|
140
|
+
"radar for liquid, rain and melting layer attenuation; this is indicated by\n"
|
|
141
|
+
"a value of 3 in the iwc_retrieval_status variable. There is some uncertainty\n"
|
|
142
|
+
"in this procedure which is reflected by an increase in the associated\n"
|
|
143
|
+
"values in the iwc_error variable. Where no correction was possible, no\n"
|
|
144
|
+
"retrieval was performed; this is indicated by a value of 2 in the\n"
|
|
145
|
+
"iwc_retrieval_status variable.",
|
|
155
146
|
)
|
|
156
147
|
return attributes
|
|
157
148
|
|
|
@@ -177,8 +168,8 @@ DEFINITIONS = {
|
|
|
177
168
|
{
|
|
178
169
|
0: """No ice present.""",
|
|
179
170
|
1: """Reliable retrieval.""",
|
|
180
|
-
2: """
|
|
181
|
-
|
|
171
|
+
2: """No retrieval due to uncorrected liquid, rain or melting
|
|
172
|
+
layer attenuation.""",
|
|
182
173
|
3: """Retrieval performed with radar corrected for liquid, rain and
|
|
183
174
|
melting attenuation.""",
|
|
184
175
|
4: """Ice detected only by the lidar.""",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/gas_attenuation.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/liquid_attenuation.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/melting_attenuation.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/categorize/attenuations/rain_attenuation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/advance_methods.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/grid_methods.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/model_products.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/observation_products.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/products/product_resampling.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py
RENAMED
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.96.7 → cloudnetpy-1.97.0}/cloudnetpy/model_evaluation/tests/unit/test_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|