cloudnetpy 1.69.2__py3-none-any.whl → 1.69.4__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.
@@ -3,6 +3,7 @@
3
3
  import logging
4
4
 
5
5
  import netCDF4
6
+ import numpy as np
6
7
  from numpy import ma
7
8
 
8
9
  from cloudnetpy import utils
@@ -61,9 +62,19 @@ class LufftCeilo(NcLidar):
61
62
  msg = "No dataset found"
62
63
  raise RuntimeError(msg)
63
64
  version = self.dataset.software_version
64
- if len(str(version)) > 4:
65
+ # In old files, the version is a single integer.
66
+ if isinstance(version, np.integer):
67
+ return str(version)
68
+ # In newer files, the version is a space-separated list: Operating
69
+ # system, FPGA, firmware, CloudDetectionMode (added in firmware 0.747).
70
+ if isinstance(version, str):
71
+ parts = version.split()
72
+ firmware = parts[2]
73
+ if firmware < "0.702":
74
+ return firmware
65
75
  return None
66
- return version
76
+ msg = f"Cannot determine version: {version}"
77
+ raise RuntimeError(msg)
67
78
 
68
79
  def _get_nn(self) -> float | ma.MaskedArray:
69
80
  nn1 = self._getvar("nn1", "NN1")
@@ -70,8 +70,11 @@ def mira2nc(
70
70
  valid_ind = utils.remove_masked_blocks(mira.data["Zh"][:], limit=n_profiles)
71
71
  mira.screen_time_indices(valid_ind)
72
72
 
73
- # Empirical values, should be checked at some point...
74
- snr_limit = -30 if mira.instrument == MIRA10 else -17
73
+ if "snr_limit" in site_meta:
74
+ snr_limit = site_meta["snr_limit"]
75
+ else:
76
+ # Empirical values, should be checked
77
+ snr_limit = -30 if mira.instrument == MIRA10 else -17
75
78
 
76
79
  # Old MIRA files don't have angle variables.
77
80
  if "elevation" not in mira.data:
@@ -62,6 +62,7 @@ class NcRadar(DataSource, CloudnetInstrument):
62
62
  for cloudnet_array in self.data.values():
63
63
  if cloudnet_array.data.ndim == 2:
64
64
  cloudnet_array.mask_indices(ind)
65
+ self.append_data(float(snr_limit), "snr_limit")
65
66
 
66
67
  def screen_using_top_gates_snr(self, snr_limit: float = 2) -> None:
67
68
  """Masks values where SNR is smaller than mean SNR of top gates."""
cloudnetpy/metadata.py CHANGED
@@ -185,4 +185,9 @@ COMMON_ATTRIBUTES = {
185
185
  standard_name="air_pressure",
186
186
  units="Pa",
187
187
  ),
188
+ "snr_limit": MetaData(
189
+ long_name="SNR limit",
190
+ units="dB",
191
+ comment="SNR threshold used in data screening.",
192
+ ),
188
193
  }
cloudnetpy/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 69
3
- PATCH = 2
3
+ PATCH = 4
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cloudnetpy
3
- Version: 1.69.2
3
+ Version: 1.69.4
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -5,11 +5,11 @@ cloudnetpy/concat_lib.py,sha256=jcLppqAmVHVkykcXBcpwUr8MS_k8v2Xl2xBLmVRE_DI,1262
5
5
  cloudnetpy/constants.py,sha256=jjW1eO5BwmLjtCKXKGXtKF_BoKpvSNrRfpgW43fWT_0,824
6
6
  cloudnetpy/datasource.py,sha256=FcWS77jz56gIzwnbafDLdj-HjAyu0P_VtY7gkeVZThU,7952
7
7
  cloudnetpy/exceptions.py,sha256=ns48useL9RN3mPh7CqIiLA19VI9OmVbyRsKTkwbThF8,1760
8
- cloudnetpy/metadata.py,sha256=gEHwqEMY9gfaqVxx2_CobLg3i5gFXAumXLwnnW4BqtU,5840
8
+ cloudnetpy/metadata.py,sha256=BDEpgwZ58PHznc1gi11gtNNV4kFiMAmlHnF4huTy7nw,5982
9
9
  cloudnetpy/output.py,sha256=lq4YSeMT_d-j4rlQkKm9KIZ8boupTBBBKV1eUawpmCI,15672
10
10
  cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
11
  cloudnetpy/utils.py,sha256=U0iMIKPiKLrLVAfs_u9pPuoWYW1RJHcM8dbLF9a4yIA,29796
12
- cloudnetpy/version.py,sha256=kxk8PWJBfD_V00eDZ4TB8QpJ5of0aDtwt7yHrIjjZeU,72
12
+ cloudnetpy/version.py,sha256=METlhLs8SzLUGjc_roiv9qgEDIG6SJSWiaRK61gSXuI,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
@@ -43,11 +43,11 @@ cloudnetpy/instruments/copernicus.py,sha256=99idcn6-iKOSvSslNjwFRng3gwlTLFjKPiT1
43
43
  cloudnetpy/instruments/galileo.py,sha256=BjWE15_S3tTCOmAM5k--oicI3wghKaO0hv9EUBxtbl8,4830
44
44
  cloudnetpy/instruments/hatpro.py,sha256=DzCWzTJxTc5BSOgoeyM8RjYkSXX6NDi3QXgKRp0uxlI,8759
45
45
  cloudnetpy/instruments/instruments.py,sha256=97hHMjp8fp2IKihr0XJYY3BrOlBArU7gYwYmt3OxqvU,4124
46
- cloudnetpy/instruments/lufft.py,sha256=ugXF6pssHAAz1Y_hqPdpKuluAjxxHSR88xBmQuS6RlI,3705
47
- cloudnetpy/instruments/mira.py,sha256=RQGJHP00Co_23UocsBw70afX-VqtM9pXQcsGgzj_n2s,11206
46
+ cloudnetpy/instruments/lufft.py,sha256=nIoEKuuFGKq2dLqkX7zW-HpAifefG472tZhKfXE1yoA,4212
47
+ cloudnetpy/instruments/mira.py,sha256=sNAwozFOVxFDLgGKeYPeTMxn42wtFUJJW3CveL6W75Y,11307
48
48
  cloudnetpy/instruments/mrr.py,sha256=eeAzCp3CiHGauywjwvMUAFwZ4vBOZMcd3IlF8KsrLQo,5711
49
49
  cloudnetpy/instruments/nc_lidar.py,sha256=5gQG9PApnNPrHmS9_zanl8HEYIQuGRpbnzC3wfTcOyQ,1705
50
- cloudnetpy/instruments/nc_radar.py,sha256=vCk616cHDZPctcn42d2I21YUnlYEqBkK1y2tY1A9dkA,7279
50
+ cloudnetpy/instruments/nc_radar.py,sha256=QAkiLo3Z-OY6udOxS9O3xWseR_pkd7B82J0JUvPBO4E,7335
51
51
  cloudnetpy/instruments/pollyxt.py,sha256=ra7sYQ_cmkC0T9TBYrMN6iiQEZimmWGdW9Ilv61JB-Q,10027
52
52
  cloudnetpy/instruments/radiometrics.py,sha256=ySG4a042XkgjMTG8d20oAPNvFvw9bMwwiqS3zv-JF_w,11825
53
53
  cloudnetpy/instruments/rain_e_h3.py,sha256=IY-ytMjQUV94qMQgIXMJsPXe6oF3yk-d9LIbN19ogv0,5376
@@ -116,9 +116,9 @@ cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe5
116
116
  cloudnetpy/products/mwr_tools.py,sha256=rd7UC67O4fsIE5SaHVZ4qWvUJTj41ZGwgQWPwZzOM14,5377
117
117
  cloudnetpy/products/product_tools.py,sha256=uu4l6reuGbPcW3TgttbaSrqIKbyYGhBVTdnC7opKvmg,11101
118
118
  docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
119
- cloudnetpy-1.69.2.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
120
- cloudnetpy-1.69.2.dist-info/METADATA,sha256=CPzESCxmNHXYoaTXc39qwMDmK8n_edhp7Q7zDeTN1KQ,5793
121
- cloudnetpy-1.69.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
122
- cloudnetpy-1.69.2.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
123
- cloudnetpy-1.69.2.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
124
- cloudnetpy-1.69.2.dist-info/RECORD,,
119
+ cloudnetpy-1.69.4.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
120
+ cloudnetpy-1.69.4.dist-info/METADATA,sha256=6s2y7mJXBPzJ9hBH7s4ta_XLnii6W2BVaYFR0kfRUmA,5793
121
+ cloudnetpy-1.69.4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
122
+ cloudnetpy-1.69.4.dist-info/entry_points.txt,sha256=HhY7LwCFk4qFgDlXx_Fy983ZTd831WlhtdPIzV-Y3dY,51
123
+ cloudnetpy-1.69.4.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
124
+ cloudnetpy-1.69.4.dist-info/RECORD,,