cloudnetpy 1.80.0__py3-none-any.whl → 1.80.2__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/categorize.py +5 -4
- cloudnetpy/instruments/ceilo.py +1 -0
- cloudnetpy/instruments/ceilometer.py +18 -0
- cloudnetpy/instruments/radiometrics.py +6 -2
- cloudnetpy/version.py +1 -1
- {cloudnetpy-1.80.0.dist-info → cloudnetpy-1.80.2.dist-info}/METADATA +1 -1
- {cloudnetpy-1.80.0.dist-info → cloudnetpy-1.80.2.dist-info}/RECORD +11 -11
- {cloudnetpy-1.80.0.dist-info → cloudnetpy-1.80.2.dist-info}/WHEEL +0 -0
- {cloudnetpy-1.80.0.dist-info → cloudnetpy-1.80.2.dist-info}/entry_points.txt +0 -0
- {cloudnetpy-1.80.0.dist-info → cloudnetpy-1.80.2.dist-info}/licenses/LICENSE +0 -0
- {cloudnetpy-1.80.0.dist-info → cloudnetpy-1.80.2.dist-info}/top_level.txt +0 -0
@@ -145,10 +145,11 @@ def generate_categorize(
|
|
145
145
|
return utils.time_grid(), data.radar.height
|
146
146
|
|
147
147
|
def _close_all() -> None:
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
obj
|
148
|
+
if "data" in locals():
|
149
|
+
for field in fields(data):
|
150
|
+
obj = getattr(data, field.name)
|
151
|
+
if isinstance(obj, DataSource):
|
152
|
+
obj.close()
|
152
153
|
|
153
154
|
try:
|
154
155
|
radar = Radar(input_files["radar"])
|
cloudnetpy/instruments/ceilo.py
CHANGED
@@ -121,6 +121,7 @@ def ceilo2nc(
|
|
121
121
|
ceilo_obj.data["depolarisation"].mask = ceilo_obj.data["beta"].mask
|
122
122
|
ceilo_obj.screen_depol()
|
123
123
|
ceilo_obj.screen_invalid_values()
|
124
|
+
ceilo_obj.screen_sunbeam()
|
124
125
|
ceilo_obj.prepare_data()
|
125
126
|
ceilo_obj.data_to_cloudnet_arrays()
|
126
127
|
ceilo_obj.add_site_geolocation()
|
@@ -137,6 +137,24 @@ class Ceilometer:
|
|
137
137
|
msg = f"Invalid beta_raw shape: {beta_raw.shape}"
|
138
138
|
raise ValidTimeStampError(msg)
|
139
139
|
|
140
|
+
def screen_sunbeam(self) -> None:
|
141
|
+
high_alt_mask = self.data["range"] > 10000
|
142
|
+
if not np.any(high_alt_mask):
|
143
|
+
return
|
144
|
+
|
145
|
+
is_data = ~self.data["beta"][:, high_alt_mask].mask
|
146
|
+
n_bins = 20
|
147
|
+
|
148
|
+
n_profiles, n_heights = is_data.shape
|
149
|
+
bin_size = n_heights // n_bins
|
150
|
+
reshaped = is_data[:, : bin_size * n_bins].reshape(n_profiles, n_bins, bin_size)
|
151
|
+
|
152
|
+
valid_profiles = np.any(reshaped, axis=2).sum(axis=1) < 15
|
153
|
+
|
154
|
+
for key, value in self.data.items():
|
155
|
+
if key == "time" or (isinstance(value, np.ndarray) and value.ndim == 2):
|
156
|
+
self.data[key] = value[valid_profiles]
|
157
|
+
|
140
158
|
|
141
159
|
class NoisyData:
|
142
160
|
def __init__(
|
@@ -122,12 +122,15 @@ class RadiometricsMP:
|
|
122
122
|
logging.info("Skipping unknown record type %d", record_type)
|
123
123
|
unknown_record_types.add(record_type)
|
124
124
|
continue
|
125
|
+
|
126
|
+
row_trimmed = [value for value in row if value != ""]
|
127
|
+
|
125
128
|
record = Record(
|
126
129
|
row_number=int(row[0]),
|
127
130
|
timestamp=_parse_datetime(row[1]),
|
128
131
|
block_type=block_type,
|
129
132
|
block_index=block_index,
|
130
|
-
values=dict(zip(column_names,
|
133
|
+
values=dict(zip(column_names, row_trimmed[3:], strict=True)),
|
131
134
|
)
|
132
135
|
rows.append(record)
|
133
136
|
|
@@ -157,7 +160,7 @@ class RadiometricsMP:
|
|
157
160
|
# "LV2 Processor" values "Zenith" and "0.00:90.00" should be OK
|
158
161
|
# but "Angle20(N)" and similar should be skipped.
|
159
162
|
proc = record.values["LV2 Processor"]
|
160
|
-
if proc.startswith("Angle"):
|
163
|
+
if proc.startswith(("Angle", "Zenith26")):
|
161
164
|
skip_procs.add(proc)
|
162
165
|
continue
|
163
166
|
if title == "Temperature (K)":
|
@@ -204,6 +207,7 @@ class RadiometricsMP:
|
|
204
207
|
times.append(record.timestamp)
|
205
208
|
lwps.append(float(lwp))
|
206
209
|
iwvs.append(float(iwv))
|
210
|
+
|
207
211
|
self.data["time"] = np.array(times, dtype="datetime64[s]")
|
208
212
|
self.data["lwp"] = np.array(lwps) # mm => kg m-2
|
209
213
|
self.data["iwv"] = np.array(iwvs) * 10 # cm => kg m-2
|
cloudnetpy/version.py
CHANGED
@@ -9,11 +9,11 @@ cloudnetpy/metadata.py,sha256=lO7BCbVAzFoH3Nq-VuezYX0f7MnbG1Zp11g5GSiuQwM,6189
|
|
9
9
|
cloudnetpy/output.py,sha256=gupxt4f_-eUrFsWMto8tnknoV-p9QauC9L6CJAqBILU,15988
|
10
10
|
cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
11
11
|
cloudnetpy/utils.py,sha256=WczDeGN408XSgGeaRLXFmlLjgAS67lK1osV0YEuKmwo,32027
|
12
|
-
cloudnetpy/version.py,sha256=
|
12
|
+
cloudnetpy/version.py,sha256=7zXWRL5tx8CR6R5neJyk3PXzFjoph6dombYnU9CqKUI,72
|
13
13
|
cloudnetpy/categorize/__init__.py,sha256=s-SJaysvVpVVo5kidiruWQO6p3gv2TXwY1wEHYO5D6I,44
|
14
14
|
cloudnetpy/categorize/atmos_utils.py,sha256=RcmbKxm2COkE7WEya0mK3yX5rzUbrewRVh3ekm01RtM,10598
|
15
15
|
cloudnetpy/categorize/attenuation.py,sha256=Y_-fzmQTltWTqIZTulJhovC7a6ifpMcaAazDJcnMIOc,990
|
16
|
-
cloudnetpy/categorize/categorize.py,sha256=
|
16
|
+
cloudnetpy/categorize/categorize.py,sha256=E3WAG79UGRLsDK3ZfaRfk7Vedht4OMxSgjHOPVBqrS4,20824
|
17
17
|
cloudnetpy/categorize/classify.py,sha256=qovHgHsMku5kpl3cJxKteNBsG8GAkfI3Zo8QhJwZSFQ,8512
|
18
18
|
cloudnetpy/categorize/containers.py,sha256=9nAmI1OnR_uANyTZS1cD4do6NrC90EqliEMVrFnQY24,5398
|
19
19
|
cloudnetpy/categorize/disdrometer.py,sha256=sRSt2B932lrrkvycKoSaKEIaDVfq9Z7uU-4iHRr-fC0,1893
|
@@ -35,8 +35,8 @@ cloudnetpy/categorize/attenuations/rain_attenuation.py,sha256=qazJzRyXf9vbjJhh4y
|
|
35
35
|
cloudnetpy/instruments/__init__.py,sha256=PEgrrQNoiOuN_ctYilmt4LV2QCLg1likPjJdWtuGlLs,528
|
36
36
|
cloudnetpy/instruments/basta.py,sha256=Lb_EhQTI93S5Bd9osDbCE_tC8gZreRsHz7D2_dFOjmE,3793
|
37
37
|
cloudnetpy/instruments/bowtie.py,sha256=EyE8HAE8rjO7JelJDbQte_rnwE3VoVJVc6TBpSNK3IU,3930
|
38
|
-
cloudnetpy/instruments/ceilo.py,sha256=
|
39
|
-
cloudnetpy/instruments/ceilometer.py,sha256=
|
38
|
+
cloudnetpy/instruments/ceilo.py,sha256=arXI7i8UiTVIk4N1P8Mnpgs_oXN79ReeBjpYuqqwL04,10473
|
39
|
+
cloudnetpy/instruments/ceilometer.py,sha256=8DzOUC7PUZYLfCC9t9LA5YSsF78xs4B4VjBLx6S-wDE,12980
|
40
40
|
cloudnetpy/instruments/cl61d.py,sha256=0QMqXHIy0hn2mksAwTdaKMOaEWjsZmj7QZ8hCbcHwxE,2225
|
41
41
|
cloudnetpy/instruments/cloudnet_instrument.py,sha256=SGPsRYYoGPoRoDY7hHJcKUVX0A23X0Telc00Fu01PnY,4495
|
42
42
|
cloudnetpy/instruments/copernicus.py,sha256=hCphEKyFCc3f1uLRdjL2435kuh64M5q-V1bI68bzGbA,6528
|
@@ -50,7 +50,7 @@ cloudnetpy/instruments/mrr.py,sha256=eeAzCp3CiHGauywjwvMUAFwZ4vBOZMcd3IlF8KsrLQo
|
|
50
50
|
cloudnetpy/instruments/nc_lidar.py,sha256=5gQG9PApnNPrHmS9_zanl8HEYIQuGRpbnzC3wfTcOyQ,1705
|
51
51
|
cloudnetpy/instruments/nc_radar.py,sha256=HlaZeH5939R86ukF8K-P4Kfzb5-CpLB15LU2u94C5eI,7330
|
52
52
|
cloudnetpy/instruments/pollyxt.py,sha256=U3g-ttmcs02LuLwVOydP3GjeNcmDyoYQroB-leIGdHY,10060
|
53
|
-
cloudnetpy/instruments/radiometrics.py,sha256=
|
53
|
+
cloudnetpy/instruments/radiometrics.py,sha256=H-tAyCCT53GjODQuDxIx8NFuZazm8BNPt5gHEuxjRxg,15570
|
54
54
|
cloudnetpy/instruments/rain_e_h3.py,sha256=JEg4Ko7ZdfjAUJwJ1BWdTkm4K7r3s8WKrPb-HidTqpg,5336
|
55
55
|
cloudnetpy/instruments/rpg.py,sha256=m3-xLJ-w2T7Ip7jBveWsGrts4tmNvdc-Lb4HebvHQjQ,17319
|
56
56
|
cloudnetpy/instruments/rpg_reader.py,sha256=ThztFuVrWxhmWVAfZTfQDeUiKK1XMTbtv08IBe8GK98,11364
|
@@ -117,10 +117,10 @@ cloudnetpy/products/lwc.py,sha256=sl6Al2tuH3KkCBrPbWTmuz3jlD5UQJ4D6qBsn1tt2CQ,18
|
|
117
117
|
cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe55y9ob58,16637951
|
118
118
|
cloudnetpy/products/mwr_tools.py,sha256=8HPZpQMTojKZP1JS1S83IE0sxmbDE9bxlaWoqmGnUZE,6199
|
119
119
|
cloudnetpy/products/product_tools.py,sha256=uu4l6reuGbPcW3TgttbaSrqIKbyYGhBVTdnC7opKvmg,11101
|
120
|
-
cloudnetpy-1.80.
|
120
|
+
cloudnetpy-1.80.2.dist-info/licenses/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
|
121
121
|
docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
|
122
|
-
cloudnetpy-1.80.
|
123
|
-
cloudnetpy-1.80.
|
124
|
-
cloudnetpy-1.80.
|
125
|
-
cloudnetpy-1.80.
|
126
|
-
cloudnetpy-1.80.
|
122
|
+
cloudnetpy-1.80.2.dist-info/METADATA,sha256=coxvAU-k7KsWoNiet_mhP3Y5NJ8JcqoWBvoDLXQkwhs,5803
|
123
|
+
cloudnetpy-1.80.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
124
|
+
cloudnetpy-1.80.2.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
|
125
|
+
cloudnetpy-1.80.2.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
|
126
|
+
cloudnetpy-1.80.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|