cloudnetpy 1.69.8__tar.gz → 1.69.10__tar.gz

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.
Files changed (130) hide show
  1. {cloudnetpy-1.69.8/cloudnetpy.egg-info → cloudnetpy-1.69.10}/PKG-INFO +1 -1
  2. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/exceptions.py +0 -7
  3. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/disdrometer/thies.py +8 -0
  4. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/rain_e_h3.py +0 -1
  5. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/weather_station.py +38 -41
  6. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/version.py +1 -1
  7. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10/cloudnetpy.egg-info}/PKG-INFO +1 -1
  8. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/LICENSE +0 -0
  9. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/MANIFEST.in +0 -0
  10. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/README.md +0 -0
  11. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/__init__.py +0 -0
  12. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/__init__.py +0 -0
  13. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/atmos_utils.py +0 -0
  14. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/attenuation.py +0 -0
  15. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
  16. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
  17. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
  18. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
  19. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
  20. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/categorize.py +0 -0
  21. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/classify.py +0 -0
  22. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/containers.py +0 -0
  23. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/disdrometer.py +0 -0
  24. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/droplet.py +0 -0
  25. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/falling.py +0 -0
  26. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/freezing.py +0 -0
  27. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/insects.py +0 -0
  28. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/itu.py +0 -0
  29. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/lidar.py +0 -0
  30. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/melting.py +0 -0
  31. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/model.py +0 -0
  32. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/mwr.py +0 -0
  33. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/categorize/radar.py +0 -0
  34. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/cli.py +0 -0
  35. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/cloudnetarray.py +0 -0
  36. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/concat_lib.py +0 -0
  37. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/constants.py +0 -0
  38. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/datasource.py +0 -0
  39. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/__init__.py +0 -0
  40. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/basta.py +0 -0
  41. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/campbell_scientific.py +0 -0
  42. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/ceilo.py +0 -0
  43. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/ceilometer.py +0 -0
  44. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/cl61d.py +0 -0
  45. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  46. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/copernicus.py +0 -0
  47. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  48. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  49. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  50. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/galileo.py +0 -0
  51. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/hatpro.py +0 -0
  52. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/instruments.py +0 -0
  53. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/lufft.py +0 -0
  54. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/mira.py +0 -0
  55. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/mrr.py +0 -0
  56. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/nc_lidar.py +0 -0
  57. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/nc_radar.py +0 -0
  58. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/pollyxt.py +0 -0
  59. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/radiometrics.py +0 -0
  60. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/rpg.py +0 -0
  61. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/rpg_reader.py +0 -0
  62. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/toa5.py +0 -0
  63. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/instruments/vaisala.py +0 -0
  64. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/metadata.py +0 -0
  65. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/__init__.py +0 -0
  66. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  67. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/metadata.py +0 -0
  68. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  69. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  70. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  71. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  72. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  73. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  74. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  75. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  76. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  77. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  78. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  79. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  80. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  81. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  82. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  83. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  84. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  85. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  86. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  87. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  88. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  89. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  90. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  91. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  92. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  93. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  94. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  95. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  96. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  97. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  98. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  99. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  100. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  101. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  102. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  103. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  104. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/model_evaluation/utils.py +0 -0
  105. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/output.py +0 -0
  106. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/plotting/__init__.py +0 -0
  107. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/plotting/plot_meta.py +0 -0
  108. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/plotting/plotting.py +0 -0
  109. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/__init__.py +0 -0
  110. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/classification.py +0 -0
  111. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/der.py +0 -0
  112. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/drizzle.py +0 -0
  113. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/drizzle_error.py +0 -0
  114. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/drizzle_tools.py +0 -0
  115. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/ier.py +0 -0
  116. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/iwc.py +0 -0
  117. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/lwc.py +0 -0
  118. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  119. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/mwr_tools.py +0 -0
  120. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/products/product_tools.py +0 -0
  121. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/py.typed +0 -0
  122. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy/utils.py +0 -0
  123. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  124. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  125. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy.egg-info/entry_points.txt +0 -0
  126. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy.egg-info/requires.txt +0 -0
  127. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/cloudnetpy.egg-info/top_level.txt +0 -0
  128. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/docs/source/conf.py +0 -0
  129. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/pyproject.toml +0 -0
  130. {cloudnetpy-1.69.8 → cloudnetpy-1.69.10}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: cloudnetpy
3
- Version: 1.69.8
3
+ Version: 1.69.10
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -30,13 +30,6 @@ class PlottingError(CloudnetException):
30
30
  super().__init__(msg)
31
31
 
32
32
 
33
- class WeatherStationDataError(CloudnetException):
34
- """Internal exception class."""
35
-
36
- def __init__(self, msg: str = "Unable to read the file"):
37
- super().__init__(msg)
38
-
39
-
40
33
  class ModelDataError(CloudnetException):
41
34
  """Internal exception class."""
42
35
 
@@ -4,6 +4,7 @@ from os import PathLike
4
4
  from typing import Any
5
5
 
6
6
  import numpy as np
7
+ from numpy import ma
7
8
 
8
9
  from cloudnetpy import output
9
10
  from cloudnetpy.cloudnetarray import CloudnetArray
@@ -107,6 +108,7 @@ def thies2nc(
107
108
  raise DisdrometerDataError(msg) from err
108
109
  disdrometer.sort_timestamps()
109
110
  disdrometer.remove_duplicate_timestamps()
111
+ disdrometer.mask_invalid_values()
110
112
  disdrometer.add_meta()
111
113
  disdrometer.convert_units()
112
114
  attributes = output.add_time_attribute(ATTRIBUTES, disdrometer.date)
@@ -269,6 +271,12 @@ class Thies(Disdrometer):
269
271
  for key in self.raw_data:
270
272
  self.raw_data[key] = self.raw_data[key][valid_mask]
271
273
 
274
+ def mask_invalid_values(self) -> None:
275
+ rainfall_rate = self.data["rainfall_rate"]
276
+ rainfall_rate.data = ma.masked_where(
277
+ rainfall_rate.data > 999, rainfall_rate.data
278
+ )
279
+
272
280
  def _create_velocity_vectors(self) -> None:
273
281
  n_values = [5, 6, 7, 1, 1]
274
282
  spreads = [0.2, 0.4, 0.8, 1, 10]
@@ -31,7 +31,6 @@ def rain_e_h32nc(
31
31
  UUID of the generated file.
32
32
 
33
33
  Raises:
34
- WeatherStationDataError : Unable to read the file.
35
34
  ValidTimeStampError: No valid timestamps found.
36
35
  """
37
36
  rain = RainEH3(site_meta)
@@ -10,7 +10,7 @@ from cloudnetpy import output
10
10
  from cloudnetpy.categorize import atmos_utils
11
11
  from cloudnetpy.cloudnetarray import CloudnetArray
12
12
  from cloudnetpy.constants import HPA_TO_PA, MM_H_TO_M_S, SEC_IN_HOUR
13
- from cloudnetpy.exceptions import ValidTimeStampError, WeatherStationDataError
13
+ from cloudnetpy.exceptions import ValidTimeStampError
14
14
  from cloudnetpy.instruments import instruments
15
15
  from cloudnetpy.instruments.cloudnet_instrument import CSVFile
16
16
  from cloudnetpy.instruments.toa5 import read_toa5
@@ -38,48 +38,44 @@ def ws2nc(
38
38
  UUID of the generated file.
39
39
 
40
40
  Raises:
41
- WeatherStationDataError : Unable to read the file.
42
41
  ValidTimeStampError: No valid timestamps found.
43
42
  """
44
43
  if not isinstance(weather_station_file, list):
45
44
  weather_station_file = [weather_station_file]
46
- try:
47
- ws: WS
48
- if site_meta["name"] == "Palaiseau":
49
- ws = PalaiseauWS(weather_station_file, site_meta)
50
- elif site_meta["name"] == "Bucharest":
51
- ws = BucharestWS(weather_station_file, site_meta)
52
- elif site_meta["name"] == "Granada":
53
- ws = GranadaWS(weather_station_file, site_meta)
54
- elif site_meta["name"] == "Kenttärova":
55
- ws = KenttarovaWS(weather_station_file, site_meta)
56
- elif site_meta["name"] == "Hyytiälä":
57
- ws = HyytialaWS(weather_station_file, site_meta)
58
- elif site_meta["name"] == "Galați":
59
- ws = GalatiWS(weather_station_file, site_meta)
60
- elif site_meta["name"] == "Jülich":
61
- ws = JuelichWS(weather_station_file, site_meta)
62
- elif site_meta["name"] == "Lampedusa":
63
- ws = LampedusaWS(weather_station_file, site_meta)
64
- else:
65
- msg = "Unsupported site"
66
- raise ValueError(msg) # noqa: TRY301
67
- if date is not None:
68
- ws.screen_timestamps(date)
69
- ws.convert_time()
70
- ws.add_date()
71
- ws.add_site_geolocation()
72
- ws.add_data()
73
- ws.convert_temperature_and_humidity()
74
- ws.convert_pressure()
75
- ws.convert_rainfall_rate()
76
- ws.convert_rainfall_amount()
77
- ws.normalize_rainfall_amount()
78
- ws.calculate_rainfall_amount()
79
- attributes = output.add_time_attribute({}, ws.date)
80
- output.update_attributes(ws.data, attributes)
81
- except ValueError as err:
82
- raise WeatherStationDataError from err
45
+ ws: WS
46
+ if site_meta["name"] == "Palaiseau":
47
+ ws = PalaiseauWS(weather_station_file, site_meta)
48
+ elif site_meta["name"] == "Bucharest":
49
+ ws = BucharestWS(weather_station_file, site_meta)
50
+ elif site_meta["name"] == "Granada":
51
+ ws = GranadaWS(weather_station_file, site_meta)
52
+ elif site_meta["name"] == "Kenttärova":
53
+ ws = KenttarovaWS(weather_station_file, site_meta)
54
+ elif site_meta["name"] == "Hyytiälä":
55
+ ws = HyytialaWS(weather_station_file, site_meta)
56
+ elif site_meta["name"] == "Galați":
57
+ ws = GalatiWS(weather_station_file, site_meta)
58
+ elif site_meta["name"] == "Jülich":
59
+ ws = JuelichWS(weather_station_file, site_meta)
60
+ elif site_meta["name"] == "Lampedusa":
61
+ ws = LampedusaWS(weather_station_file, site_meta)
62
+ else:
63
+ msg = "Unsupported site"
64
+ raise ValueError(msg)
65
+ if date is not None:
66
+ ws.screen_timestamps(date)
67
+ ws.convert_time()
68
+ ws.add_date()
69
+ ws.add_site_geolocation()
70
+ ws.add_data()
71
+ ws.convert_temperature_and_humidity()
72
+ ws.convert_pressure()
73
+ ws.convert_rainfall_rate()
74
+ ws.convert_rainfall_amount()
75
+ ws.normalize_rainfall_amount()
76
+ ws.calculate_rainfall_amount()
77
+ attributes = output.add_time_attribute({}, ws.date)
78
+ output.update_attributes(ws.data, attributes)
83
79
  return output.save_level1b(ws, output_file, uuid)
84
80
 
85
81
 
@@ -520,14 +516,15 @@ class LampedusaWS(WS):
520
516
  raw_data: dict = {key: [] for key in fields}
521
517
  for row in reader:
522
518
  for key, value in row.items():
519
+ fixed_value = value.strip("\0")
523
520
  parsed_value: float | datetime.datetime
524
521
  if key == "time":
525
522
  parsed_value = datetime.datetime.strptime(
526
- value, "%y%m%d %H%M%S"
523
+ fixed_value, "%y%m%d %H%M%S"
527
524
  )
528
525
  else:
529
526
  try:
530
- parsed_value = float(value)
527
+ parsed_value = float(fixed_value)
531
528
  except ValueError:
532
529
  parsed_value = math.nan
533
530
  raw_data[key].append(parsed_value)
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
2
  MINOR = 69
3
- PATCH = 8
3
+ PATCH = 10
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.8
3
+ Version: 1.69.10
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
File without changes
File without changes
File without changes
File without changes
File without changes