cloudnetpy 1.95.4__tar.gz → 1.95.5__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.95.4/cloudnetpy.egg-info → cloudnetpy-1.95.5}/PKG-INFO +1 -1
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/arm.py +10 -3
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/categorize.py +11 -1
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/radar.py +10 -1
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/kazr.py +46 -12
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/output.py +1 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/version.py +1 -1
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5/cloudnetpy.egg-info}/PKG-INFO +1 -1
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/LICENSE +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/MANIFEST.in +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/README.md +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/atmos_utils.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuation.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/classify.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/containers.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/disdrometer.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/droplet.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/falling.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/freezing.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/insects.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/lidar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/melting.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/model.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/mwr.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/cli.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/cloudnetarray.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/concat_lib.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/constants.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/datasource.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/disdronator/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/disdronator/lpm.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/disdronator/parsivel.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/disdronator/process.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/disdronator/rd80.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/disdronator/utils.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/exceptions.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/arm_ceilo.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/arm_ld.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/arm_utils.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/basta.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/bowtie.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/ceilo.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/ceilometer.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/cl61d.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/copernicus.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/da10.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/dealias.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/disdrometer.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/fd12p.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/galileo.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/hatpro.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/instruments.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/lufft.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/mira.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/mmcr.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/mrr.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/mwr3c.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/mwrlos.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/nc_lidar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/nc_radar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/pollyxt.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/radiometrics.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/rain_e_h3.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/rpg.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/rpg_reader.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/toa5.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/vaisala.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/weather_radar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/instruments/weather_station.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/metadata.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/file_handler.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/metadata.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/utils.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/plotting/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/plotting/plot_meta.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/plotting/plotting.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/__init__.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/classification.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/der.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/drizzle.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/drizzle_error.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/drizzle_tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/epsilon_lidar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/epsilon_radar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/ier.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/iwc.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/iwc_weather_radar.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/lwc.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/mie_lu_tables.nc +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/mwr_tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/products/product_tools.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/py.typed +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/utils.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy.egg-info/SOURCES.txt +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy.egg-info/dependency_links.txt +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy.egg-info/entry_points.txt +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy.egg-info/requires.txt +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy.egg-info/top_level.txt +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/docs/source/conf.py +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/pyproject.toml +0 -0
- {cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/setup.cfg +0 -0
|
@@ -61,15 +61,22 @@ class ArmInstrument(NamedTuple):
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
# In order of preference within each product; the first with files is used.
|
|
64
|
+
# Raw moments are preferred over ARM corrected products for consistency. The
|
|
65
|
+
# b1-level KAZR moments are identical to the a1-level ones except for the
|
|
66
|
+
# reflectivity calibration applied by ARM.
|
|
64
67
|
ARM_INSTRUMENTS: Final = (
|
|
68
|
+
# KAZR2 calibrated moments (2020 onwards, hourly files, months of delay)
|
|
69
|
+
ArmInstrument("radar", "kazr", "kazrcfrgeqc.b1", kazr2nc, multi_file=True),
|
|
70
|
+
# KAZR2 calibrated moments at ENA
|
|
71
|
+
ArmInstrument("radar", "kazr", "kazr2cfrgeqc.b1", kazr2nc, multi_file=True),
|
|
65
72
|
# KAZR2 (approx. 2019 onwards, hourly files)
|
|
66
73
|
ArmInstrument("radar", "kazr", "kazrcfrge.a1", kazr2nc, multi_file=True),
|
|
67
74
|
# KAZR2 at ENA (Dec 2019 onwards, hourly files)
|
|
68
75
|
ArmInstrument("radar", "kazr", "kazr2cfrge.a1", kazr2nc, multi_file=True),
|
|
69
|
-
# KAZR
|
|
70
|
-
ArmInstrument("radar", "kazr", "kazrcorge.c1", kazr2nc, multi_file=True),
|
|
71
|
-
# KAZR moments (approx. 2011-2019, e.g. mobile facilities)
|
|
76
|
+
# KAZR moments (approx. 2011-2019, daily files)
|
|
72
77
|
ArmInstrument("radar", "kazr", "kazrge.a1", kazr2nc, multi_file=True),
|
|
78
|
+
# KAZR corrected moments (approx. 2011-2012), fallback if raw missing
|
|
79
|
+
ArmInstrument("radar", "kazr", "kazrcorge.c1", kazr2nc, multi_file=True),
|
|
73
80
|
# MMCR (before 2011)
|
|
74
81
|
ArmInstrument("radar", "mmcr", "mmcrmom.b1", mmcr2nc, multi_file=False),
|
|
75
82
|
ArmInstrument("lidar", "cl31", "ceil.b1", armceilo2nc, multi_file=False),
|
|
@@ -212,6 +212,10 @@ def generate_categorize(
|
|
|
212
212
|
attributes = output.add_time_attribute(CATEGORIZE_ATTRIBUTES, date)
|
|
213
213
|
attributes = output.add_time_attribute(attributes, date, "model_time")
|
|
214
214
|
attributes = output.add_source_attribute(attributes, data)
|
|
215
|
+
if "Z_offset" in cloudnet_arrays:
|
|
216
|
+
attributes["Z"] = attributes["Z"]._replace(
|
|
217
|
+
ancillary_variables=f"{attributes['Z'].ancillary_variables} Z_offset"
|
|
218
|
+
)
|
|
215
219
|
output.update_attributes(cloudnet_arrays, attributes)
|
|
216
220
|
_save_cat(output_file, data, cloudnet_arrays, uuid)
|
|
217
221
|
return uuid
|
|
@@ -336,7 +340,7 @@ COMMENTS = {
|
|
|
336
340
|
"and possibly liquid water, rain and melting layer (see quality_bits\n"
|
|
337
341
|
"variable). Calibration convention: in the absence of attenuation, a cloud\n"
|
|
338
342
|
"at 273 K containing one million 100-micron droplets per cubic metre will\n"
|
|
339
|
-
"have
|
|
343
|
+
"have a reflectivity of 0 dBZ at all frequencies."
|
|
340
344
|
),
|
|
341
345
|
"bias": (
|
|
342
346
|
"This variable is an estimate of the one-standard-deviation\ncalibration error."
|
|
@@ -439,6 +443,12 @@ CATEGORIZE_ATTRIBUTES = {
|
|
|
439
443
|
"nyquist_velocity": COMMON_ATTRIBUTES["nyquist_velocity"]._replace(
|
|
440
444
|
dimensions=("time", "height")
|
|
441
445
|
),
|
|
446
|
+
"Z_offset": MetaData(
|
|
447
|
+
long_name="Radar reflectivity calibration offset",
|
|
448
|
+
units="dBZ",
|
|
449
|
+
comment="Calibration offset applied to the reflectivity in the radar file.",
|
|
450
|
+
dimensions=None,
|
|
451
|
+
),
|
|
442
452
|
# Lidar variables
|
|
443
453
|
"beta": MetaData(
|
|
444
454
|
long_name="Attenuated backscatter coefficient",
|
|
@@ -341,10 +341,19 @@ class Radar(DataSource):
|
|
|
341
341
|
def _init_data(self) -> None:
|
|
342
342
|
self.append_data(self.getvar("Zh"), "Z", units="dBZ")
|
|
343
343
|
self.append_data(self.getvar("v"), "v_sigma")
|
|
344
|
-
for key in (
|
|
344
|
+
for key in (
|
|
345
|
+
"v",
|
|
346
|
+
"ldr",
|
|
347
|
+
"width",
|
|
348
|
+
"sldr",
|
|
349
|
+
"rainfall_rate",
|
|
350
|
+
"nyquist_velocity",
|
|
351
|
+
):
|
|
345
352
|
if key in self.dataset.variables:
|
|
346
353
|
data = self.dataset.variables[key]
|
|
347
354
|
self.append_data(data, key)
|
|
355
|
+
if "Zh_offset" in self.dataset.variables:
|
|
356
|
+
self.append_data(self.dataset.variables["Zh_offset"], "Z_offset")
|
|
348
357
|
|
|
349
358
|
def _rebin_velocity(
|
|
350
359
|
self,
|
|
@@ -27,7 +27,7 @@ from cloudnetpy.instruments.dealias import (
|
|
|
27
27
|
)
|
|
28
28
|
from cloudnetpy.instruments.instruments import KAZR
|
|
29
29
|
from cloudnetpy.instruments.nc_radar import estimate_snr_limit
|
|
30
|
-
from cloudnetpy.metadata import COMMON_ATTRIBUTES
|
|
30
|
+
from cloudnetpy.metadata import COMMON_ATTRIBUTES, MetaData
|
|
31
31
|
|
|
32
32
|
# KAZR2 CF/Radial format (e.g. sgpkazrcfrgeC1.a1, hourly files)
|
|
33
33
|
KEYMAP_CFR = {
|
|
@@ -67,15 +67,18 @@ def kazr2nc(
|
|
|
67
67
|
) -> UUID:
|
|
68
68
|
"""Converts ARM KAZR cloud radar data into Cloudnet Level 1b netCDF file.
|
|
69
69
|
|
|
70
|
-
Supports the KAZR2 CF/Radial moments (`kazrcfrge.a1
|
|
71
|
-
ARM corrected moments (`kazrcorge.c1`,
|
|
72
|
-
moments (`kazrge.a1`, daily files).
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
70
|
+
Supports the KAZR2 CF/Radial moments (`kazrcfrge.a1` and the calibrated
|
|
71
|
+
`kazrcfrgeqc.b1`, hourly files), the ARM corrected moments (`kazrcorge.c1`,
|
|
72
|
+
daily files) and the original KAZR moments (`kazrge.a1`, daily files). The
|
|
73
|
+
reflectivity calibration offset applied by ARM in the calibrated files is
|
|
74
|
+
kept and recorded in `Zh_offset`. Uncalibrated files are calibrated with
|
|
75
|
+
`Zh_offset` from `site_meta` if given. With the corrected moments, noise is
|
|
76
|
+
screened using the ARM significant detection mask and
|
|
77
|
+
LDR is calculated from the cross- and co-polar reflectivities. LDR is
|
|
78
|
+
screened using the cross-polar SNR and removed completely if the
|
|
79
|
+
cross-polar channel is found unreliable. Stationary clutter layers (zero
|
|
80
|
+
velocity and spectral width) are removed. Velocities of the non-corrected
|
|
81
|
+
formats are dealiased using velocity continuity.
|
|
79
82
|
|
|
80
83
|
Args:
|
|
81
84
|
raw_files: Input file, a sequence of files, or a folder containing the
|
|
@@ -83,9 +86,11 @@ def kazr2nc(
|
|
|
83
86
|
output_file: Output filename.
|
|
84
87
|
site_meta: Dictionary containing information about the site. Required key
|
|
85
88
|
value pair is `name`. Optional are `latitude`, `longitude` and
|
|
86
|
-
`altitude` (taken from the raw file if missing)
|
|
89
|
+
`altitude` (taken from the raw file if missing), `snr_limit`
|
|
87
90
|
(fixed SNR threshold in dB; by default the threshold is estimated
|
|
88
|
-
from the noise in the top range gates)
|
|
91
|
+
from the noise in the top range gates) and `Zh_offset` (reflectivity
|
|
92
|
+
calibration offset in dB, used only if the file is not calibrated
|
|
93
|
+
by ARM).
|
|
89
94
|
uuid: Set specific UUID for the file.
|
|
90
95
|
date: Expected date as YYYY-MM-DD of all profiles in the file.
|
|
91
96
|
|
|
@@ -107,6 +112,7 @@ def kazr2nc(
|
|
|
107
112
|
snr_limit = site_meta.get("snr_limit")
|
|
108
113
|
kazr = Kazr(_get_files(raw_files), site_meta, date)
|
|
109
114
|
kazr.read_files()
|
|
115
|
+
kazr.calibrate_reflectivity()
|
|
110
116
|
kazr.sort_timestamps()
|
|
111
117
|
kazr.remove_duplicate_timestamps()
|
|
112
118
|
kazr.calc_ldr()
|
|
@@ -152,6 +158,7 @@ class Kazr(CloudnetInstrument):
|
|
|
152
158
|
self.dealiased = False
|
|
153
159
|
self.ldr_floor: float | None = None
|
|
154
160
|
self.corrected = False # ARM corrected (dealiased) moments
|
|
161
|
+
self.offset_applied: float | None = None # Calibration offset by ARM
|
|
155
162
|
self._raw: dict[str, list] = {}
|
|
156
163
|
|
|
157
164
|
def read_files(self) -> None:
|
|
@@ -171,6 +178,20 @@ class Kazr(CloudnetInstrument):
|
|
|
171
178
|
self.data[key] = CloudnetArray(ma.concatenate(arrays), key)
|
|
172
179
|
self._screen_date()
|
|
173
180
|
|
|
181
|
+
def calibrate_reflectivity(self) -> None:
|
|
182
|
+
"""Applies `Zh_offset` from site_meta unless already calibrated by ARM."""
|
|
183
|
+
zh_offset = self.site_meta.get("Zh_offset")
|
|
184
|
+
if self.offset_applied is not None:
|
|
185
|
+
if zh_offset is not None:
|
|
186
|
+
logging.info("File calibrated by ARM, ignoring Zh_offset")
|
|
187
|
+
zh_offset = self.offset_applied
|
|
188
|
+
elif zh_offset is None:
|
|
189
|
+
zh_offset = 0.0
|
|
190
|
+
else:
|
|
191
|
+
zh_offset = float(zh_offset)
|
|
192
|
+
self.data["Zh"].data[:] += zh_offset
|
|
193
|
+
self.append_data(np.array(zh_offset, dtype=np.float32), "Zh_offset")
|
|
194
|
+
|
|
174
195
|
def screen_noise(self, snr_limit: float | None = None) -> None:
|
|
175
196
|
"""Masks noise using ARM detection mask if available, otherwise SNR.
|
|
176
197
|
|
|
@@ -339,6 +360,10 @@ class Kazr(CloudnetInstrument):
|
|
|
339
360
|
else:
|
|
340
361
|
msg = "Unknown KAZR file format"
|
|
341
362
|
raise RadarDataError(msg)
|
|
363
|
+
zh_key = next(k for k, v in self.keymap.items() if v == "Zh")
|
|
364
|
+
bias = getattr(nc[zh_key], "applied_bias_correction", None)
|
|
365
|
+
if bias is not None:
|
|
366
|
+
self.offset_applied = round(float(bias), 2)
|
|
342
367
|
self.serial_number = getattr(nc, "serial_number", None) or None
|
|
343
368
|
self.append_data(np.array(nc["range"][:], dtype=float), "range")
|
|
344
369
|
self.append_data(0.0, "zenith_angle")
|
|
@@ -508,6 +533,15 @@ def _get_files(raw_files: str | PathLike | Sequence[str | PathLike]) -> list[Pat
|
|
|
508
533
|
|
|
509
534
|
ATTRIBUTES = {
|
|
510
535
|
"correction_bits": CORRECTION_BITS_ATTRIBUTES,
|
|
536
|
+
"Zh_offset": MetaData(
|
|
537
|
+
long_name="Radar reflectivity calibration offset",
|
|
538
|
+
units="dBZ",
|
|
539
|
+
comment=(
|
|
540
|
+
"Calibration offset applied to the reflectivity, either by ARM "
|
|
541
|
+
"in the calibrated (b1) files or by Cloudnet in the other files."
|
|
542
|
+
),
|
|
543
|
+
dimensions=None,
|
|
544
|
+
),
|
|
511
545
|
"zenith_angle": COMMON_ATTRIBUTES["zenith_angle"]._replace(dimensions=None),
|
|
512
546
|
"nyquist_velocity": COMMON_ATTRIBUTES["nyquist_velocity"]._replace(dimensions=None),
|
|
513
547
|
}
|
|
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.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/gas_attenuation.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/liquid_attenuation.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/categorize/attenuations/melting_attenuation.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/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
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/advance_methods.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/grid_methods.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/model_products.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/products/observation_products.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/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.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py
RENAMED
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py
RENAMED
|
File without changes
|
|
File without changes
|
{cloudnetpy-1.95.4 → cloudnetpy-1.95.5}/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
|
|
File without changes
|