cloudnetpy 1.65.1__py3-none-any.whl → 1.65.3__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.
@@ -154,6 +154,16 @@ class Thies(Disdrometer):
154
154
  units, process, rows = read_toa5(filename)
155
155
  for row in rows:
156
156
  self._read_line(row["RawString"], row["TIMESTAMP"])
157
+ elif first_line.startswith("Datetime [utc];Device address;"):
158
+ with open(filename) as file:
159
+ first_line = file.readline()
160
+ for line in file:
161
+ timestamp, telegram = line.split(";", maxsplit=1)
162
+ fixed_telegram = telegram.strip().rstrip(";") + ";"
163
+ parsed_timestamp = datetime.datetime.strptime(
164
+ timestamp, "%Y-%m-%d %H:%M:%S"
165
+ )
166
+ self._read_line(fixed_telegram, parsed_timestamp)
157
167
  else:
158
168
  with open(filename) as file:
159
169
  for line in file:
@@ -60,8 +60,10 @@ def hatpro2l1c(
60
60
 
61
61
  hatpro = HatproL1c(hatpro_raw, site_meta)
62
62
 
63
- if not np.any(hatpro.data["tb"][:]):
64
- msg = "No valid brightness temperatures found"
63
+ flags = hatpro.data["quality_flag"][:]
64
+ bad_percentage = ma.sum(flags != 0) / flags.size * 100
65
+ if bad_percentage > 90:
66
+ msg = "More than 90% of brightness temperatures are flagged"
65
67
  raise HatproDataError(msg)
66
68
 
67
69
  timestamps = hatpro.data["time"][:]
@@ -2,6 +2,7 @@ import tempfile
2
2
  from typing import Literal
3
3
 
4
4
  import netCDF4
5
+ import numpy as np
5
6
  from mwrpy.level2.lev2_collocated import generate_lev2_multi as gen_multi
6
7
  from mwrpy.level2.lev2_collocated import generate_lev2_single as gen_single
7
8
  from mwrpy.level2.write_lev2_nc import MissingInputData
@@ -67,6 +68,12 @@ def _generate_product(
67
68
  netCDF4.Dataset(mwr_l1c_file, "r") as nc_input,
68
69
  netCDF4.Dataset(output_file, "r+") as nc_output,
69
70
  ):
71
+ flag_variable = "lwp" if product == "single" else "temperature"
72
+ flag_name = f"{flag_variable}_quality_flag"
73
+ flags = nc_output.variables[flag_name][:]
74
+ if not np.any(flags == 0):
75
+ msg = f"All {flag_variable} data are flagged."
76
+ raise ValidTimeStampError(msg)
70
77
  mwr = Mwr(nc_input, nc_output, uuid)
71
78
  return mwr.harmonize(product)
72
79
 
cloudnetpy/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 65
3
- PATCH = 1
3
+ PATCH = 3
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.65.1
3
+ Version: 1.65.3
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -8,7 +8,7 @@ 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=jw9H3ZZS4YhETjavFqda9t2WtO2jSz4WsOUzbwSTTvk,72
11
+ cloudnetpy/version.py,sha256=CjyHHlEJsidNOYLdZ_v5A7dMKPgacxMaMkdY1AxSrrU,72
12
12
  cloudnetpy/categorize/__init__.py,sha256=gP5q3Vis1y9u9OWgA_idlbjfWXYN_S0IBSWdwBhL_uU,69
13
13
  cloudnetpy/categorize/atmos.py,sha256=vavMC_WQQyGH14eL4vAzKLKDDZt8tBrMYimztYHOjH8,12639
14
14
  cloudnetpy/categorize/atmos_utils.py,sha256=64uenj2uxj3P3Blaq_pBN1pBjcF-X4LYNt-uTOjvevg,3778
@@ -34,7 +34,7 @@ cloudnetpy/instruments/cl61d.py,sha256=g6DNBFju3wYhLFl32DKmC8pUup7y-EupXoUU0fuoG
34
34
  cloudnetpy/instruments/cloudnet_instrument.py,sha256=RG5HJxGM6p0F-IGyr85fvOizcMmgx48OeD_XeIsrgSU,3367
35
35
  cloudnetpy/instruments/copernicus.py,sha256=nmgqGOjVQFngj7BNbpcuCwA-W3yksvBbqn__iq7MyDk,6469
36
36
  cloudnetpy/instruments/galileo.py,sha256=yQBedd7dmDnwuWi1MtXOsg4-RyRx0uRAXumCY4YuH9k,4686
37
- cloudnetpy/instruments/hatpro.py,sha256=9A7H-SEDGp-1zuLFskd8WRp4nU3ZI70Bkq5_GBpIx9I,8646
37
+ cloudnetpy/instruments/hatpro.py,sha256=2lEblvJ9m7QniWH1OH7ycWtywYqY6X3ulE4dNuQp-Z8,8749
38
38
  cloudnetpy/instruments/instruments.py,sha256=jG5TYnZ8bdCZXnI303ZsaJBEdSKaIjKMbkGtnq6kQX0,3261
39
39
  cloudnetpy/instruments/lufft.py,sha256=ugXF6pssHAAz1Y_hqPdpKuluAjxxHSR88xBmQuS6RlI,3705
40
40
  cloudnetpy/instruments/mira.py,sha256=EyzEBTpWfDlgaspZVuIfaP4l73GYSVnSzEzBZc0lZNg,9333
@@ -51,7 +51,7 @@ cloudnetpy/instruments/weather_station.py,sha256=F5G_hbmkS4WgORS5oRVLxvKHuYBuef4
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
54
- cloudnetpy/instruments/disdrometer/thies.py,sha256=8V_1wx-8ncBJKs40e1_kvpOh3wj5UIl8YwvkVHf34MA,10086
54
+ cloudnetpy/instruments/disdrometer/thies.py,sha256=JYFREICrf6nas3bJeEnJUtWzDc_4mEmt3TxhqO--bfQ,10632
55
55
  cloudnetpy/model_evaluation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
56
56
  cloudnetpy/model_evaluation/file_handler.py,sha256=0Pg7V6eo1G6KYeE10B6lR8hIKIJoseO-pBaorcW42rY,6446
57
57
  cloudnetpy/model_evaluation/metadata.py,sha256=PAsnOqcUoV3CJwplgWiVCF9Zt4io8tqj7CIgS4fEL-8,8412
@@ -105,11 +105,11 @@ cloudnetpy/products/ier.py,sha256=ge1f_aYick20Nlznq8zbBl5umWlTP-UwMivy4Y05Sck,78
105
105
  cloudnetpy/products/iwc.py,sha256=Q8dXV3JF3JUQgwkmQFOKakm21Tnf8oCWsH0CSqIEKl4,10209
106
106
  cloudnetpy/products/lwc.py,sha256=wSd3GDqELz4yyWBMiKDR-QhRK8scPheqsBcS1qzxYOI,18997
107
107
  cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe55y9ob58,16637951
108
- cloudnetpy/products/mwr_tools.py,sha256=3esU5cG5GI2WVmOENqrJ0FbMuxLegADv7q8TB0RorGg,4674
108
+ cloudnetpy/products/mwr_tools.py,sha256=tN_sPDS3BdpFJfa5a2mnc3eCMoi7syjVJMaTt962hmo,5004
109
109
  cloudnetpy/products/product_tools.py,sha256=VNw2diJj30POz68-3qNVkJP7r9AUspT_d1Fp0BbeIx8,10414
110
110
  docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
111
- cloudnetpy-1.65.1.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
112
- cloudnetpy-1.65.1.dist-info/METADATA,sha256=qxDqKsWNjOAd93st6zGCAqnoJB49_j1gYKLeq7yemjc,5784
113
- cloudnetpy-1.65.1.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
114
- cloudnetpy-1.65.1.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
115
- cloudnetpy-1.65.1.dist-info/RECORD,,
111
+ cloudnetpy-1.65.3.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
112
+ cloudnetpy-1.65.3.dist-info/METADATA,sha256=FTAu9ootkMIzGcQRQLQoTY4hfpScx1srDx_5ZKbGypM,5784
113
+ cloudnetpy-1.65.3.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
114
+ cloudnetpy-1.65.3.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
115
+ cloudnetpy-1.65.3.dist-info/RECORD,,