cloudnetpy 1.86.6__py3-none-any.whl → 1.86.8__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.

Potentially problematic release.


This version of cloudnetpy might be problematic. Click here for more details.

@@ -10,6 +10,7 @@ from uuid import UUID
10
10
  import numpy as np
11
11
 
12
12
  from cloudnetpy import concat_lib, output, utils
13
+ from cloudnetpy.exceptions import ValidTimeStampError
13
14
  from cloudnetpy.instruments.instruments import COPERNICUS
14
15
  from cloudnetpy.instruments.nc_radar import ChilboltonRadar
15
16
  from cloudnetpy.metadata import COMMON_ATTRIBUTES, MetaData
@@ -77,6 +78,9 @@ def copernicus2nc(
77
78
  valid_filenames = utils.get_files_with_variables(
78
79
  valid_filenames, ["time", "ZED_HC"]
79
80
  )
81
+ if not valid_filenames:
82
+ msg = "No valid files."
83
+ raise ValidTimeStampError(msg)
80
84
  variables = list(keymap.keys())
81
85
  concat_lib.concatenate_files(
82
86
  valid_filenames,
@@ -131,16 +135,29 @@ class Copernicus(ChilboltonRadar):
131
135
  self.instrument = COPERNICUS
132
136
 
133
137
  def calibrate_reflectivity(self) -> None:
134
- zed_hc = self.dataset.variables["ZED_HC"]
138
+ zed_hc = self.dataset["ZED_HC"]
135
139
  offset_applied = getattr(zed_hc, "applied_calibration_offset", 0)
136
140
 
137
- # Estimated by comparing with MIRA-35 2021 data:
141
+ # Estimated by comparing with MIRA-35 data:
138
142
  default_offset = -149.5
139
143
  zh_offset = self.site_meta.get("Zh_offset", default_offset)
140
144
 
141
145
  self.data["Zh"].data[:] = self.data["Zh"].data[:] - offset_applied + zh_offset
142
146
  self.append_data(np.array(zh_offset, dtype=np.float32), "Zh_offset")
143
147
 
148
+ def fix_range_offset(self, site_meta: dict) -> None:
149
+ range_var = self.dataset["range"]
150
+ offset_applied = getattr(range_var, "range_offset", 0)
151
+
152
+ # Estimated by comparing with MIRA-35 data:
153
+ default_offset = -720
154
+ range_offset = site_meta.get("range_offset", default_offset)
155
+
156
+ self.data["range"].data[:] = (
157
+ self.data["range"].data[:] - offset_applied + range_offset
158
+ )
159
+ self.append_data(np.array(range_offset, dtype=float), "range_offset")
160
+
144
161
  def mask_corrupted_values(self) -> None:
145
162
  """Experimental masking of corrupted Copernicus data.
146
163
 
@@ -153,12 +170,6 @@ class Copernicus(ChilboltonRadar):
153
170
  ind = np.where(np.abs(self.data[key][:]) > value)
154
171
  self.data["v"].mask_indices(ind)
155
172
 
156
- def fix_range_offset(self, site_meta: dict) -> None:
157
- """Fixes range offset."""
158
- range_offset = site_meta.get("range_offset", 0)
159
- self.data["range"].data[:] += range_offset
160
- self.append_data(np.array(range_offset, dtype=float), "range_offset")
161
-
162
173
  def screen_negative_ranges(self) -> None:
163
174
  """Screens negative range values."""
164
175
  valid_ind = np.where(self.data["range"][:] >= 0)[0]
@@ -187,9 +198,13 @@ ATTRIBUTES = {
187
198
  "range_offset": MetaData(
188
199
  long_name="Radar range offset",
189
200
  units="m",
190
- comment="Range offset applied.",
201
+ comment=(
202
+ "Range offset applied after removing the original offset "
203
+ "from the raw files."
204
+ ),
191
205
  dimensions=None,
192
206
  ),
207
+ "range": COMMON_ATTRIBUTES["range"]._replace(ancillary_variables="range_offset"),
193
208
  "antenna_diameter": MetaData(
194
209
  long_name="Antenna diameter", units="m", dimensions=("time",)
195
210
  ),
@@ -9,6 +9,7 @@ from uuid import UUID
9
9
  import numpy as np
10
10
 
11
11
  from cloudnetpy import concat_lib, output, utils
12
+ from cloudnetpy.exceptions import ValidTimeStampError
12
13
  from cloudnetpy.instruments.instruments import GALILEO
13
14
  from cloudnetpy.instruments.nc_radar import ChilboltonRadar
14
15
  from cloudnetpy.metadata import MetaData
@@ -76,6 +77,9 @@ def galileo2nc(
76
77
  valid_filenames = utils.get_files_with_variables(
77
78
  valid_filenames, ["time", "ZED_HC"]
78
79
  )
80
+ if not valid_filenames:
81
+ msg = "No valid files."
82
+ raise ValidTimeStampError(msg)
79
83
  variables = list(keymap.keys())
80
84
  concat_lib.concatenate_files(
81
85
  valid_filenames,
@@ -34,6 +34,9 @@ class VaisalaCeilo(Ceilometer):
34
34
  def read_ceilometer_file(self, calibration_factor: float | None = None) -> None:
35
35
  """Read all lines of data from the file."""
36
36
  time, data = self.reader(self.full_path)
37
+ if not data:
38
+ msg = "No valid data found."
39
+ raise ValidTimeStampError(msg)
37
40
  range_res = data[0].range_resolution
38
41
  n_gates = len(data[0].beta)
39
42
  self.data["time"] = np.array(time)
cloudnetpy/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 86
3
- PATCH = 6
3
+ PATCH = 8
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.86.6
3
+ Version: 1.86.8
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -9,7 +9,7 @@ cloudnetpy/metadata.py,sha256=qqLXSUVhIi6H_Z1zlfXeEkc9qBqA1XO-UwsCVxjIcfk,7317
9
9
  cloudnetpy/output.py,sha256=NpuxmtLk2JLTdubCupdL4rFbx30YqgeU6vwAe_v8thc,15133
10
10
  cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  cloudnetpy/utils.py,sha256=9MMYok1A7oJS2XBkIFhaiDWt_MYLo8tLzF3_880masM,34321
12
- cloudnetpy/version.py,sha256=qSr0YKQU7OntyaZjNNTnIr96Qa0HIqUVMRXrNYqNDlM,72
12
+ cloudnetpy/version.py,sha256=tDEAGM4ZOh7PQr-aJssILIBJma1P3GJpN5G5IZwwRF0,72
13
13
  cloudnetpy/categorize/__init__.py,sha256=gtvzWr0IDRn2oA6yHBvinEhTGTuub-JkrOv93lBsgrE,61
14
14
  cloudnetpy/categorize/atmos_utils.py,sha256=uWc9TABVYPI0sn4H5Az9Jf6NVRaWyEKIi17f0pAJQxE,10679
15
15
  cloudnetpy/categorize/attenuation.py,sha256=Y_-fzmQTltWTqIZTulJhovC7a6ifpMcaAazDJcnMIOc,990
@@ -39,10 +39,10 @@ cloudnetpy/instruments/ceilo.py,sha256=scb3n0gLOZ1gPs_WdWw9KS5Ut_mtCvSdWFMKKCvXh
39
39
  cloudnetpy/instruments/ceilometer.py,sha256=c37uteeuGnlE-o-Smu49H2qQJw6qZ0tc3Bzhyr1FoSo,13063
40
40
  cloudnetpy/instruments/cl61d.py,sha256=JsCHqVzFGhZi-5xcnsB507FDpyuw83uSWK3IFO3DhdI,2238
41
41
  cloudnetpy/instruments/cloudnet_instrument.py,sha256=B1UkiB0ytnT3MWYalEegql5QIPaMLg5bJy5xI50JEco,4503
42
- cloudnetpy/instruments/copernicus.py,sha256=qzmuq5NBRmqYMjd_q-TjYAImtoPQOeQ2LDygu9BFQys,7322
42
+ cloudnetpy/instruments/copernicus.py,sha256=Zf24DpqpjXvj-F9G7xHfxpJxf9SoH8roABtRtm7CyUM,7912
43
43
  cloudnetpy/instruments/da10.py,sha256=FcXEu6dfAVvYzMvauiJBSyEkYhGa8hBuwrrdo-3LwHE,1960
44
44
  cloudnetpy/instruments/fd12p.py,sha256=M5yJDsPi0tHWMDUYOsoqciyKdRQ-zHEq2t19KnpZ6Io,6915
45
- cloudnetpy/instruments/galileo.py,sha256=pJ5WaB-Nwzs5zgj8c2oaH7HieYxq4HF0aUilYTSRhYE,5682
45
+ cloudnetpy/instruments/galileo.py,sha256=R5yGO5peqrKdzId500gzZpFR5Khw_1rLO1v7mYZ89Qk,5871
46
46
  cloudnetpy/instruments/hatpro.py,sha256=TGOqwW0TfoPEYk13MFvFzwgJGzm6MVE5AsPavcIoj3I,10248
47
47
  cloudnetpy/instruments/instruments.py,sha256=WZgH7HjzM9Ane1CSnYCSLidbST8hunUeSt2lPntq9As,4999
48
48
  cloudnetpy/instruments/lufft.py,sha256=G6KeJOeltLUlGCHHEk8ns2K7WJ9ImAr25rSB2JltawE,4286
@@ -56,7 +56,7 @@ cloudnetpy/instruments/rain_e_h3.py,sha256=fjv3SgeUNx9GisYqLrBnX9AjnO17VtouyoPh1
56
56
  cloudnetpy/instruments/rpg.py,sha256=LmvViLSevzjR2HmkP6MCHHDzafpTWoCvw7GaaEC37s0,21029
57
57
  cloudnetpy/instruments/rpg_reader.py,sha256=EcsUUyKNiZ-kEEz48zibs-uXH7CMNpedqlrfWOY4Dks,11899
58
58
  cloudnetpy/instruments/toa5.py,sha256=CfmmBMv5iMGaWHIGBK01Rw24cuXC1R1RMNTXkmsm340,1760
59
- cloudnetpy/instruments/vaisala.py,sha256=tu7aljkMKep0uCWz-Sd-GuBXF_Yy421a4nHy0ffpMoc,4725
59
+ cloudnetpy/instruments/vaisala.py,sha256=9YXEYDB75TerslOsSYqYLPybTE1GW6SQrFs3h_A6jbk,4830
60
60
  cloudnetpy/instruments/weather_station.py,sha256=mgjTBaJtevW_c3sv_-9jyFo5HXF-eeegXzbHBttxRyg,28845
61
61
  cloudnetpy/instruments/disdrometer/__init__.py,sha256=lyjwttWvFvuwYxEkusoAvgRcbBmglmOp5HJOpXUqLWo,93
62
62
  cloudnetpy/instruments/disdrometer/common.py,sha256=WCPRCfAlElUzZpllOSjjWrLG2jgkiRIy0rWz_omFoJQ,10815
@@ -118,10 +118,10 @@ cloudnetpy/products/lwc.py,sha256=xsNiiG6dGKIkWaFk0xWTabc1bZ4ULf6SqcqHs7itAUk,19
118
118
  cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe55y9ob58,16637951
119
119
  cloudnetpy/products/mwr_tools.py,sha256=MMWnp68U7bv157-CPB2VeTQvaR6zl7sexbBT_kJ_pn8,6734
120
120
  cloudnetpy/products/product_tools.py,sha256=eyqIw_0KhlpmmYQE69RpGdRIAOW7JVPlEgkTBp2kdps,11302
121
- cloudnetpy-1.86.6.dist-info/licenses/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
121
+ cloudnetpy-1.86.8.dist-info/licenses/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
122
122
  docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
123
- cloudnetpy-1.86.6.dist-info/METADATA,sha256=nLTE2OtYDb-uMnJ9qTA-FgeiE_NtaIijw5MsCV1UePg,5836
124
- cloudnetpy-1.86.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
- cloudnetpy-1.86.6.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
126
- cloudnetpy-1.86.6.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
127
- cloudnetpy-1.86.6.dist-info/RECORD,,
123
+ cloudnetpy-1.86.8.dist-info/METADATA,sha256=6YTHGtNzkkT_UtCfiWsLtjHHIGcCNAi5vE4Ey76gK1E,5836
124
+ cloudnetpy-1.86.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
125
+ cloudnetpy-1.86.8.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
126
+ cloudnetpy-1.86.8.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
127
+ cloudnetpy-1.86.8.dist-info/RECORD,,