cloudnetpy 1.61.17__py3-none-any.whl → 1.62.1__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/categorize/classify.py +20 -0
- cloudnetpy/instruments/ceilo.py +6 -3
- cloudnetpy/instruments/weather_station.py +5 -2
- cloudnetpy/version.py +2 -2
- {cloudnetpy-1.61.17.dist-info → cloudnetpy-1.62.1.dist-info}/METADATA +1 -1
- {cloudnetpy-1.61.17.dist-info → cloudnetpy-1.62.1.dist-info}/RECORD +9 -9
- {cloudnetpy-1.61.17.dist-info → cloudnetpy-1.62.1.dist-info}/LICENSE +0 -0
- {cloudnetpy-1.61.17.dist-info → cloudnetpy-1.62.1.dist-info}/WHEEL +0 -0
- {cloudnetpy-1.61.17.dist-info → cloudnetpy-1.62.1.dist-info}/top_level.txt +0 -0
@@ -10,6 +10,7 @@ import cloudnetpy.categorize.atmos
|
|
10
10
|
from cloudnetpy import utils
|
11
11
|
from cloudnetpy.categorize import droplet, falling, freezing, insects, melting
|
12
12
|
from cloudnetpy.categorize.containers import ClassData, ClassificationResult
|
13
|
+
from cloudnetpy.constants import T0
|
13
14
|
|
14
15
|
|
15
16
|
def classify_measurements(data: dict) -> ClassificationResult:
|
@@ -36,6 +37,14 @@ def classify_measurements(data: dict) -> ClassificationResult:
|
|
36
37
|
implementation compared to the original Cloudnet methodology.
|
37
38
|
Especially methods classifying insects, melting layer and liquid droplets.
|
38
39
|
|
40
|
+
Explanation of bits:
|
41
|
+
- bit 0: Liquid droplets
|
42
|
+
- bit 1: Falling hydrometeors
|
43
|
+
- bit 2: Freezing region
|
44
|
+
- bit 3: Melting layer
|
45
|
+
- bit 4: Aerosols
|
46
|
+
- bit 5: Insects
|
47
|
+
|
39
48
|
"""
|
40
49
|
obs = ClassData(data)
|
41
50
|
bits: list[np.ndarray] = [np.array([])] * 6
|
@@ -73,6 +82,8 @@ def classify_measurements(data: dict) -> ClassificationResult:
|
|
73
82
|
bits = _filter_insects(bits)
|
74
83
|
bits[4] = _find_aerosols(obs, bits[1], bits[0])
|
75
84
|
bits[4][filtered_ice] = False
|
85
|
+
bits = _fix_super_cold_liquid(obs, bits)
|
86
|
+
|
76
87
|
return ClassificationResult(
|
77
88
|
category_bits=_bits_to_integer(bits),
|
78
89
|
is_rain=obs.is_rain,
|
@@ -82,6 +93,15 @@ def classify_measurements(data: dict) -> ClassificationResult:
|
|
82
93
|
)
|
83
94
|
|
84
95
|
|
96
|
+
def _fix_super_cold_liquid(obs: ClassData, bits: list) -> list:
|
97
|
+
"""Supercooled liquid droplets do not exist in atmosphere below around -38 C."""
|
98
|
+
t_limit = T0 - 38
|
99
|
+
super_cold_liquid = np.where((obs.tw < t_limit) & bits[0])
|
100
|
+
bits[0][super_cold_liquid] = False
|
101
|
+
bits[1][super_cold_liquid] = True
|
102
|
+
return bits
|
103
|
+
|
104
|
+
|
85
105
|
def _remove_false_radar_liquid(
|
86
106
|
liquid_from_radar: np.ndarray,
|
87
107
|
liquid_from_lidar: np.ndarray,
|
cloudnetpy/instruments/ceilo.py
CHANGED
@@ -87,12 +87,15 @@ def ceilo2nc(
|
|
87
87
|
if ceilo_obj.instrument is None or ceilo_obj.instrument.model is None:
|
88
88
|
msg = "Failed to read ceilometer model"
|
89
89
|
raise RuntimeError(msg)
|
90
|
-
if
|
91
|
-
|
90
|
+
if any(
|
91
|
+
model in ceilo_obj.instrument.model.lower()
|
92
|
+
for model in ("cl61", "chm15k", "chm15kx", "cl51", "cl31")
|
93
|
+
):
|
92
94
|
mask = ceilo_obj.data["beta_smooth"].mask
|
93
95
|
ceilo_obj.data["beta"] = ma.masked_where(mask, ceilo_obj.data["beta_raw"])
|
94
96
|
ceilo_obj.data["beta"][ceilo_obj.data["beta"] <= 0] = ma.masked
|
95
|
-
|
97
|
+
if "depolarisation" in ceilo_obj.data:
|
98
|
+
ceilo_obj.data["depolarisation"].mask = ceilo_obj.data["beta"].mask
|
96
99
|
ceilo_obj.screen_depol()
|
97
100
|
ceilo_obj.screen_invalid_values()
|
98
101
|
ceilo_obj.prepare_data()
|
@@ -288,9 +288,12 @@ class GranadaWS(WS):
|
|
288
288
|
continue
|
289
289
|
parsed = value
|
290
290
|
if keymap[key] != "time":
|
291
|
-
|
291
|
+
try:
|
292
|
+
parsed = float(value)
|
293
|
+
except ValueError:
|
294
|
+
parsed = math.nan
|
292
295
|
data[keymap[key]].append(parsed)
|
293
|
-
return data
|
296
|
+
return self.format_data(data)
|
294
297
|
|
295
298
|
|
296
299
|
class KenttarovaWS(WS):
|
cloudnetpy/version.py
CHANGED
@@ -8,12 +8,12 @@ cloudnetpy/metadata.py,sha256=v_VDo2vbdTxB0zIsfP69IcrwSKiRlLpsGdq6JPI4CoA,5306
|
|
8
8
|
cloudnetpy/output.py,sha256=YkCaxVkG_Mt2hng_IVnhygHteV4UMKzKALkeFZwFJL8,14822
|
9
9
|
cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
10
10
|
cloudnetpy/utils.py,sha256=JV0Fawnme1HoZgoiidV3eIzsn6vx0AEjBNmI1CcrBsA,28517
|
11
|
-
cloudnetpy/version.py,sha256=
|
11
|
+
cloudnetpy/version.py,sha256=wheZa4Kklouj0BjH963Wn0-elHVUt16TN53szDdSzNc,72
|
12
12
|
cloudnetpy/categorize/__init__.py,sha256=gP5q3Vis1y9u9OWgA_idlbjfWXYN_S0IBSWdwBhL_uU,69
|
13
13
|
cloudnetpy/categorize/atmos.py,sha256=G4DmEJCt1FAPYyt7oXzBH47JTeb5lUOGDakkviOXblE,12390
|
14
14
|
cloudnetpy/categorize/atmos_utils.py,sha256=64uenj2uxj3P3Blaq_pBN1pBjcF-X4LYNt-uTOjvevg,3778
|
15
15
|
cloudnetpy/categorize/categorize.py,sha256=aoIxbBEwUFO-Xx_oofKM68aL0KEJuGi3OaWMKCCuUK8,17827
|
16
|
-
cloudnetpy/categorize/classify.py,sha256=
|
16
|
+
cloudnetpy/categorize/classify.py,sha256=a-0bVCtynGfORnDGTsPuzqkuDeOOR_OMz5ai9NsMuic,9870
|
17
17
|
cloudnetpy/categorize/containers.py,sha256=aL_55tTDYjICS_TnG1u0FwBeXDS0S4mfDMU0kY_DUbs,4312
|
18
18
|
cloudnetpy/categorize/disdrometer.py,sha256=keU3pFvKtk840A0oLwAyNDuqOCswBPJEKf2bV0YWyA8,2004
|
19
19
|
cloudnetpy/categorize/droplet.py,sha256=894VHdL9ScaB8f1oxXwM2la4ShXd-uWywQDINoaoiD8,8687
|
@@ -28,7 +28,7 @@ cloudnetpy/categorize/radar.py,sha256=C4R74E_jmLOJqXLrfhdrAitHRHHA79UYuChz9VLxy5
|
|
28
28
|
cloudnetpy/instruments/__init__.py,sha256=_jejVwi_viSZehmAOkEqTNI-0-exGgAJ_bHW1IRRwTI,398
|
29
29
|
cloudnetpy/instruments/basta.py,sha256=_OTnySd36ktvxk_swWBzbv_H4AVGlkF_Ce3KtPGD1rE,3758
|
30
30
|
cloudnetpy/instruments/campbell_scientific.py,sha256=2WHfBKQjtRSl0AqvtPeX7G8Hdi3Dn0WbvoAppFOMbA8,5270
|
31
|
-
cloudnetpy/instruments/ceilo.py,sha256
|
31
|
+
cloudnetpy/instruments/ceilo.py,sha256=vmKRY-NLB042BLpmJn4sfufEwK5xAI2vOXLRr7K85bU,8981
|
32
32
|
cloudnetpy/instruments/ceilometer.py,sha256=-aPEZs_r0Gxeu53PHeWAkZMB2BUdauS47tkL7RFxo6k,12078
|
33
33
|
cloudnetpy/instruments/cl61d.py,sha256=g6DNBFju3wYhLFl32DKmC8pUup7y-EupXoUU0fuoGGA,1990
|
34
34
|
cloudnetpy/instruments/cloudnet_instrument.py,sha256=RG5HJxGM6p0F-IGyr85fvOizcMmgx48OeD_XeIsrgSU,3367
|
@@ -47,7 +47,7 @@ cloudnetpy/instruments/rpg.py,sha256=siPmiyOGdB_OtlnIiP0PAt_cySnped0clLLGnyzw02o
|
|
47
47
|
cloudnetpy/instruments/rpg_reader.py,sha256=2eYu-tBd0QyreUKqJT726aIMbA29aIxXK-UJCkOXMLM,11356
|
48
48
|
cloudnetpy/instruments/toa5.py,sha256=CfmmBMv5iMGaWHIGBK01Rw24cuXC1R1RMNTXkmsm340,1760
|
49
49
|
cloudnetpy/instruments/vaisala.py,sha256=GGuA_v4S7kR9yApSr1-d0ETzNj4ehEZ7-pD1-AdPYRE,14662
|
50
|
-
cloudnetpy/instruments/weather_station.py,sha256=
|
50
|
+
cloudnetpy/instruments/weather_station.py,sha256=F5G_hbmkS4WgORS5oRVLxvKHuYBuef4MC_cZDu4lu_Y,17499
|
51
51
|
cloudnetpy/instruments/disdrometer/__init__.py,sha256=lyjwttWvFvuwYxEkusoAvgRcbBmglmOp5HJOpXUqLWo,93
|
52
52
|
cloudnetpy/instruments/disdrometer/common.py,sha256=g52iK2aNp3Z88kovUmGVpC54NZomPa9D871gzO0AmQ4,9267
|
53
53
|
cloudnetpy/instruments/disdrometer/parsivel.py,sha256=HJZrEysQkx9MiIVPDV25CYHpXi_SjgZlgO-otoaKK34,25640
|
@@ -108,8 +108,8 @@ cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe5
|
|
108
108
|
cloudnetpy/products/mwr_tools.py,sha256=3esU5cG5GI2WVmOENqrJ0FbMuxLegADv7q8TB0RorGg,4674
|
109
109
|
cloudnetpy/products/product_tools.py,sha256=VNw2diJj30POz68-3qNVkJP7r9AUspT_d1Fp0BbeIx8,10414
|
110
110
|
docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
|
111
|
-
cloudnetpy-1.
|
112
|
-
cloudnetpy-1.
|
113
|
-
cloudnetpy-1.
|
114
|
-
cloudnetpy-1.
|
115
|
-
cloudnetpy-1.
|
111
|
+
cloudnetpy-1.62.1.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
|
112
|
+
cloudnetpy-1.62.1.dist-info/METADATA,sha256=3HgHFWQOFDZ4zxvdTjICRhRbGgW2ODI4hxvPJPm9158,5784
|
113
|
+
cloudnetpy-1.62.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
114
|
+
cloudnetpy-1.62.1.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
|
115
|
+
cloudnetpy-1.62.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|