cloudnetpy-qc 1.28.1__tar.gz → 1.29.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_qc-1.28.1/cloudnetpy_qc.egg-info → cloudnetpy_qc-1.29.0}/PKG-INFO +1 -1
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/coverage.py +1 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/quality.py +8 -1
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/variables.py +51 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/version.py +2 -2
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0/cloudnetpy_qc.egg-info}/PKG-INFO +1 -1
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/LICENSE +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/MANIFEST.in +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/README.md +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/__init__.py +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/data/area-type-table.xml +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/data/cf-standard-name-table.xml +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/data/data_quality_config.ini +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/data/standardized-region-list.xml +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/py.typed +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/utils.py +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc.egg-info/SOURCES.txt +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc.egg-info/dependency_links.txt +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc.egg-info/requires.txt +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc.egg-info/top_level.txt +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/pyproject.toml +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/setup.cfg +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/tests/test_qc.py +0 -0
- {cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/tests/test_utils.py +0 -0
|
@@ -16,6 +16,7 @@ RESOLUTIONS = {
|
|
|
16
16
|
Product.WEATHER_STATION: datetime.timedelta(minutes=10),
|
|
17
17
|
Product.RAIN_GAUGE: datetime.timedelta(minutes=1),
|
|
18
18
|
Product.DOPPLER_LIDAR_WIND: datetime.timedelta(hours=1.5),
|
|
19
|
+
Product.CPR_VALIDATION: datetime.timedelta(hours=1.5),
|
|
19
20
|
}
|
|
20
21
|
DEFAULT_RESOLUTION = datetime.timedelta(seconds=30)
|
|
21
22
|
|
|
@@ -224,7 +224,7 @@ class FindVariableOutliers(Test):
|
|
|
224
224
|
self._add_info(msg)
|
|
225
225
|
|
|
226
226
|
def _get_limits(self, key: str) -> tuple[float, float] | None:
|
|
227
|
-
if key == "height" and self.product
|
|
227
|
+
if key == "height" and self.product in (Product.CPR, Product.CPR_VALIDATION):
|
|
228
228
|
return None
|
|
229
229
|
if key == "air_pressure":
|
|
230
230
|
pressure = utils.calc_pressure(np.mean(self.nc["altitude"][:]))
|
|
@@ -294,6 +294,7 @@ class TestZenithAngle(Test):
|
|
|
294
294
|
class TestDataCoverage(Test):
|
|
295
295
|
name = "Data coverage"
|
|
296
296
|
description = "Test that file contains enough data."
|
|
297
|
+
products = Product.all() - {Product.CPR_VALIDATION}
|
|
297
298
|
|
|
298
299
|
def run(self):
|
|
299
300
|
coverage, expected_res, actual_res = data_coverage(self.nc)
|
|
@@ -449,6 +450,10 @@ class TestGlobalAttributes(Test):
|
|
|
449
450
|
)
|
|
450
451
|
or (self._instrument_product(product) and name == "serial_number")
|
|
451
452
|
or (product == Product.MWR_L1C and name in ("source_file_uuids",))
|
|
453
|
+
or (
|
|
454
|
+
product == Product.CPR_VALIDATION
|
|
455
|
+
and name in ("cpr_l1b_baseline", "cpr_l1b_filename")
|
|
456
|
+
)
|
|
452
457
|
)
|
|
453
458
|
|
|
454
459
|
def run(self):
|
|
@@ -660,6 +665,8 @@ class TestRangeAndHeight(Test):
|
|
|
660
665
|
Product.DISDROMETER,
|
|
661
666
|
Product.MWR_L1C,
|
|
662
667
|
Product.MWR,
|
|
668
|
+
Product.CPR,
|
|
669
|
+
Product.CPR_VALIDATION,
|
|
663
670
|
}
|
|
664
671
|
|
|
665
672
|
def run(self):
|
|
@@ -41,6 +41,7 @@ class Product(Enum):
|
|
|
41
41
|
L3_IWC = "l3-iwc"
|
|
42
42
|
L3_LWC = "l3-lwc"
|
|
43
43
|
CPR = "cpr-simulation"
|
|
44
|
+
CPR_VALIDATION = "cpr-validation"
|
|
44
45
|
|
|
45
46
|
@classmethod
|
|
46
47
|
def all(cls) -> set[Product]:
|
|
@@ -77,6 +78,7 @@ LEVELS: dict[Product, Level] = {
|
|
|
77
78
|
Product.L3_IWC: "3",
|
|
78
79
|
Product.L3_LWC: "3",
|
|
79
80
|
Product.CPR: "3",
|
|
81
|
+
Product.CPR_VALIDATION: "3",
|
|
80
82
|
}
|
|
81
83
|
|
|
82
84
|
|
|
@@ -905,6 +907,55 @@ VARIABLES = {
|
|
|
905
907
|
required=[Product.CPR],
|
|
906
908
|
),
|
|
907
909
|
# ----------------------------------------
|
|
910
|
+
# Required in cpr-validation Level 3 file
|
|
911
|
+
# ----------------------------------------
|
|
912
|
+
"time_cpr": Variable(
|
|
913
|
+
long_name="Time UTC",
|
|
914
|
+
units=time_units,
|
|
915
|
+
required=[Product.CPR_VALIDATION],
|
|
916
|
+
dtype=Dtype.DOUBLE,
|
|
917
|
+
),
|
|
918
|
+
"echo_cpr": Variable(
|
|
919
|
+
long_name="Radar reflectivity factor",
|
|
920
|
+
required=[Product.CPR_VALIDATION],
|
|
921
|
+
units="dBZ",
|
|
922
|
+
),
|
|
923
|
+
"v_cpr": Variable(
|
|
924
|
+
long_name="Doppler velocity",
|
|
925
|
+
units="m s-1",
|
|
926
|
+
required=[Product.CPR_VALIDATION],
|
|
927
|
+
),
|
|
928
|
+
"latitude_cpr": Variable(
|
|
929
|
+
long_name="Latitude of CPR ground track",
|
|
930
|
+
units="degree_north",
|
|
931
|
+
required=[Product.CPR_VALIDATION],
|
|
932
|
+
),
|
|
933
|
+
"longitude_cpr": Variable(
|
|
934
|
+
long_name="Longitude of CPR ground track",
|
|
935
|
+
units="degree_east",
|
|
936
|
+
required=[Product.CPR_VALIDATION],
|
|
937
|
+
),
|
|
938
|
+
"distance": Variable(
|
|
939
|
+
long_name="Distance between site and CPR ground track",
|
|
940
|
+
units="km",
|
|
941
|
+
required=[Product.CPR_VALIDATION],
|
|
942
|
+
),
|
|
943
|
+
"latitude_msi": Variable(
|
|
944
|
+
long_name="Latitude of MSI ground track",
|
|
945
|
+
units="degree_north",
|
|
946
|
+
required=[Product.CPR_VALIDATION],
|
|
947
|
+
),
|
|
948
|
+
"longitude_msi": Variable(
|
|
949
|
+
long_name="Longitude of MSI ground track",
|
|
950
|
+
units="degree_east",
|
|
951
|
+
required=[Product.CPR_VALIDATION],
|
|
952
|
+
),
|
|
953
|
+
"cloud_top_height": Variable(
|
|
954
|
+
long_name="Cloud top height",
|
|
955
|
+
units="m",
|
|
956
|
+
required=[Product.CPR_VALIDATION],
|
|
957
|
+
),
|
|
958
|
+
# ----------------------------------------
|
|
908
959
|
# Required in Epsilon (lidar)
|
|
909
960
|
# ----------------------------------------
|
|
910
961
|
"epsilon": Variable(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cloudnetpy_qc-1.28.1 → cloudnetpy_qc-1.29.0}/cloudnetpy_qc/data/standardized-region-list.xml
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
|