cloudnetpy 1.49.9__tar.gz → 1.50.0__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 (119) hide show
  1. {cloudnetpy-1.49.9/cloudnetpy.egg-info → cloudnetpy-1.50.0}/PKG-INFO +1 -1
  2. cloudnetpy-1.50.0/cloudnetpy/instruments/campbell_scientific.py +110 -0
  3. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/ceilo.py +12 -2
  4. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/instruments.py +8 -0
  5. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/version.py +2 -2
  6. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0/cloudnetpy.egg-info}/PKG-INFO +1 -1
  7. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy.egg-info/SOURCES.txt +1 -0
  8. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/LICENSE +0 -0
  9. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/MANIFEST.in +0 -0
  10. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/README.md +0 -0
  11. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/__init__.py +0 -0
  12. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/__init__.py +0 -0
  13. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/atmos.py +0 -0
  14. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/atmos_utils.py +0 -0
  15. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/categorize.py +0 -0
  16. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/classify.py +0 -0
  17. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/containers.py +0 -0
  18. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/droplet.py +0 -0
  19. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/falling.py +0 -0
  20. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/freezing.py +0 -0
  21. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/insects.py +0 -0
  22. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/lidar.py +0 -0
  23. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/melting.py +0 -0
  24. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/model.py +0 -0
  25. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/mwr.py +0 -0
  26. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/categorize/radar.py +0 -0
  27. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/cloudnetarray.py +0 -0
  28. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/concat_lib.py +0 -0
  29. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/constants.py +0 -0
  30. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/datasource.py +0 -0
  31. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/exceptions.py +0 -0
  32. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/__init__.py +0 -0
  33. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/basta.py +0 -0
  34. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/ceilometer.py +0 -0
  35. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/cl61d.py +0 -0
  36. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  37. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/copernicus.py +0 -0
  38. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  39. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  40. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  41. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  42. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/galileo.py +0 -0
  43. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/hatpro.py +0 -0
  44. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/lufft.py +0 -0
  45. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/mira.py +0 -0
  46. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/nc_lidar.py +0 -0
  47. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/nc_radar.py +0 -0
  48. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/pollyxt.py +0 -0
  49. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/radiometrics.py +0 -0
  50. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/rpg.py +0 -0
  51. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/rpg_reader.py +0 -0
  52. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/vaisala.py +0 -0
  53. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/instruments/weather_station.py +0 -0
  54. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/metadata.py +0 -0
  55. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/__init__.py +0 -0
  56. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  57. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/metadata.py +0 -0
  58. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  59. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  60. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  61. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  62. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  63. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  64. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  65. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  66. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  67. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  68. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  69. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  70. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  71. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  72. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  73. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  74. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  75. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  76. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  77. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  78. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  79. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  80. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  81. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  82. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  83. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  84. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  85. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  86. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  87. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  88. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  89. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  90. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  91. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  92. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  93. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  94. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/model_evaluation/utils.py +0 -0
  95. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/output.py +0 -0
  96. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/plotting/__init__.py +0 -0
  97. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/plotting/plot_meta.py +0 -0
  98. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/plotting/plotting.py +0 -0
  99. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/__init__.py +0 -0
  100. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/classification.py +0 -0
  101. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/der.py +0 -0
  102. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/drizzle.py +0 -0
  103. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/drizzle_error.py +0 -0
  104. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/drizzle_tools.py +0 -0
  105. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/ier.py +0 -0
  106. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/iwc.py +0 -0
  107. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/lwc.py +0 -0
  108. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  109. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/mwr_multi.py +0 -0
  110. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/mwr_single.py +0 -0
  111. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/products/product_tools.py +0 -0
  112. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/py.typed +0 -0
  113. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy/utils.py +0 -0
  114. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  115. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy.egg-info/requires.txt +0 -0
  116. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/cloudnetpy.egg-info/top_level.txt +0 -0
  117. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/docs/source/conf.py +0 -0
  118. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/pyproject.toml +0 -0
  119. {cloudnetpy-1.49.9 → cloudnetpy-1.50.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.49.9
3
+ Version: 1.50.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -0,0 +1,110 @@
1
+ import logging
2
+ import re
3
+ from datetime import datetime
4
+
5
+ import numpy as np
6
+
7
+ from cloudnetpy import utils
8
+ from cloudnetpy.exceptions import ValidTimeStampError
9
+ from cloudnetpy.instruments import instruments
10
+ from cloudnetpy.instruments.ceilometer import Ceilometer
11
+
12
+
13
+ class Cs135(Ceilometer):
14
+ def __init__(
15
+ self, full_path: str, site_meta: dict, expected_date: str | None = None
16
+ ):
17
+ super().__init__()
18
+ self.full_path = full_path
19
+ self.site_meta = site_meta
20
+ self.expected_date = expected_date
21
+ self.data = {}
22
+ self.metadata = {}
23
+ self.instrument = instruments.CS135
24
+
25
+ def read_ceilometer_file(self, calibration_factor: float | None = None) -> None:
26
+ with open(self.full_path, mode="r", encoding="utf-8") as f:
27
+ lines = f.readlines()
28
+ timestamps, profiles, scales, tilt_angles = [], [], [], []
29
+ range_resolution, n_gates = 0, 0
30
+ for i, line in enumerate(lines):
31
+ line_splat = line.strip().split(",")
32
+ if is_timestamp(line_splat[0]):
33
+ timestamp = datetime.strptime(line_splat[0], "%Y-%m-%dT%H:%M:%S.%f")
34
+ try:
35
+ self._check_timestamp(timestamp)
36
+ except ValidTimeStampError:
37
+ continue
38
+ timestamps.append(timestamp)
39
+ _line1 = line_splat[1]
40
+ if len(_line1) != 11:
41
+ raise NotImplementedError("Unknown message number")
42
+ if (msg_no := _line1[-4:-1]) != "002":
43
+ raise NotImplementedError(
44
+ f"Message number {msg_no} not implemented"
45
+ )
46
+ _line3 = lines[i + 2].strip().split(" ")
47
+ scale, range_resolution, n_gates, tilt_angle = [
48
+ int(_line3[ind]) for ind in [0, 1, 2, 5]
49
+ ]
50
+ scales.append(scale)
51
+ tilt_angles.append(tilt_angle)
52
+ _line4 = lines[i + 3].strip()
53
+ profiles.append(_hex2backscatter(_line4, n_gates))
54
+
55
+ if len(timestamps) == 0:
56
+ raise ValidTimeStampError("No valid timestamps found in the file")
57
+ array = self._handle_large_values(np.array(profiles))
58
+ self.data["beta_raw"] = _scale_backscatter(array, scales)
59
+ if calibration_factor is None:
60
+ calibration_factor = 1.0
61
+ self.data["beta_raw"] *= calibration_factor
62
+ self.data["calibration_factor"] = calibration_factor
63
+ self.data["range"] = (
64
+ np.arange(n_gates) * range_resolution + range_resolution / 2
65
+ )
66
+ self.data["time"] = utils.datetime2decimal_hours(timestamps)
67
+ self.data["zenith_angle"] = np.median(tilt_angles)
68
+
69
+ def _check_timestamp(self, timestamp: datetime):
70
+ timestamp_components = str(timestamp.date()).split("-")
71
+ if self.expected_date is not None:
72
+ if timestamp_components != self.expected_date.split("-"):
73
+ raise ValidTimeStampError
74
+ if not self.date:
75
+ self.date = timestamp_components
76
+ assert timestamp_components == self.date
77
+
78
+ @staticmethod
79
+ def _handle_large_values(array: np.ndarray) -> np.ndarray:
80
+ ind = np.where(array > 524287)
81
+ if ind[0].size > 0:
82
+ array[ind] -= 1048576
83
+ return array
84
+
85
+
86
+ def is_timestamp(timestamp: str) -> bool:
87
+ """Tests if the input string is formatted as -yyyy-mm-dd hh:mm:ss"""
88
+ reg_exp = re.compile(r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{6}")
89
+ if reg_exp.match(timestamp) is not None:
90
+ return True
91
+ return False
92
+
93
+
94
+ def _hex2backscatter(data: str, n_gates: int):
95
+ """Converts hex string to backscatter values."""
96
+ n_chars = 5
97
+ return [
98
+ int(data[i : i + n_chars], 16) for i in range(0, n_gates * n_chars, n_chars)
99
+ ]
100
+
101
+
102
+ def _scale_backscatter(data: np.ndarray, scales: list) -> np.ndarray:
103
+ """Scales backscatter values."""
104
+ unit_conversion_factor = 1e-8
105
+ scales_array = np.array(scales)
106
+ ind = np.where(scales_array != 100)
107
+ if ind[0].size > 0:
108
+ logging.info(f"{ind[0].size} profiles have not 100% scaling")
109
+ data[ind, :] *= scales_array[ind] / 100
110
+ return data * unit_conversion_factor
@@ -4,6 +4,7 @@ from itertools import islice
4
4
  import netCDF4
5
5
 
6
6
  from cloudnetpy import output
7
+ from cloudnetpy.instruments.campbell_scientific import Cs135
7
8
  from cloudnetpy.instruments.cl61d import Cl61d
8
9
  from cloudnetpy.instruments.lufft import LufftCeilo
9
10
  from cloudnetpy.instruments.vaisala import ClCeilo, Ct25k
@@ -91,9 +92,16 @@ def ceilo2nc(
91
92
 
92
93
  def _initialize_ceilo(
93
94
  full_path: str, site_meta: dict, date: str | None = None
94
- ) -> ClCeilo | Ct25k | LufftCeilo | Cl61d:
95
+ ) -> ClCeilo | Ct25k | LufftCeilo | Cl61d | Cs135:
95
96
  if "model" in site_meta:
96
- if site_meta["model"] not in ("cl31", "cl51", "cl61d", "ct25k", "chm15k"):
97
+ if site_meta["model"] not in (
98
+ "cl31",
99
+ "cl51",
100
+ "cl61d",
101
+ "ct25k",
102
+ "chm15k",
103
+ "cs135",
104
+ ):
97
105
  raise ValueError(f"Invalid ceilometer model: {site_meta['model']}")
98
106
  if site_meta["model"] in ("cl31", "cl51"):
99
107
  model = "cl31_or_cl51"
@@ -107,6 +115,8 @@ def _initialize_ceilo(
107
115
  return Ct25k(full_path, site_meta, date)
108
116
  if model == "cl61d":
109
117
  return Cl61d(full_path, site_meta, date)
118
+ if model == "cs135":
119
+ return Cs135(full_path, site_meta, date)
110
120
  return LufftCeilo(full_path, site_meta, date)
111
121
 
112
122
 
@@ -35,6 +35,14 @@ CL31 = Instrument(
35
35
  wavelength=910.0,
36
36
  )
37
37
 
38
+ CS135 = Instrument(
39
+ manufacturer="Campbell Scientific",
40
+ domain="lidar",
41
+ category="ceilometer",
42
+ model="CS135",
43
+ wavelength=905.0,
44
+ )
45
+
38
46
  CT25K = Instrument(
39
47
  manufacturer="Vaisala",
40
48
  domain="lidar",
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
- MINOR = 49
3
- PATCH = 9
2
+ MINOR = 50
3
+ PATCH = 0
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.49.9
3
+ Version: 1.50.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -35,6 +35,7 @@ cloudnetpy/categorize/mwr.py
35
35
  cloudnetpy/categorize/radar.py
36
36
  cloudnetpy/instruments/__init__.py
37
37
  cloudnetpy/instruments/basta.py
38
+ cloudnetpy/instruments/campbell_scientific.py
38
39
  cloudnetpy/instruments/ceilo.py
39
40
  cloudnetpy/instruments/ceilometer.py
40
41
  cloudnetpy/instruments/cl61d.py
File without changes
File without changes
File without changes
File without changes
File without changes