cloudnetpy 1.72.2__tar.gz → 1.73.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 (131) hide show
  1. {cloudnetpy-1.72.2/cloudnetpy.egg-info → cloudnetpy-1.73.0}/PKG-INFO +1 -1
  2. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/__init__.py +1 -0
  3. cloudnetpy-1.73.0/cloudnetpy/instruments/bowtie.py +95 -0
  4. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/cloudnet_instrument.py +4 -3
  5. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/hatpro.py +15 -3
  6. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/rpg.py +0 -8
  7. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/metadata.py +8 -0
  8. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/version.py +2 -2
  9. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0/cloudnetpy.egg-info}/PKG-INFO +1 -1
  10. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy.egg-info/SOURCES.txt +1 -0
  11. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/LICENSE +0 -0
  12. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/MANIFEST.in +0 -0
  13. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/README.md +0 -0
  14. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/__init__.py +0 -0
  15. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/__init__.py +0 -0
  16. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/atmos_utils.py +0 -0
  17. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/attenuation.py +0 -0
  18. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
  19. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
  20. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
  21. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
  22. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
  23. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/categorize.py +0 -0
  24. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/classify.py +0 -0
  25. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/containers.py +0 -0
  26. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/disdrometer.py +0 -0
  27. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/droplet.py +0 -0
  28. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/falling.py +0 -0
  29. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/freezing.py +0 -0
  30. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/insects.py +0 -0
  31. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/itu.py +0 -0
  32. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/lidar.py +0 -0
  33. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/melting.py +0 -0
  34. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/model.py +0 -0
  35. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/mwr.py +0 -0
  36. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/categorize/radar.py +0 -0
  37. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/cli.py +0 -0
  38. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/cloudnetarray.py +0 -0
  39. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/concat_lib.py +0 -0
  40. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/constants.py +0 -0
  41. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/datasource.py +0 -0
  42. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/exceptions.py +0 -0
  43. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/basta.py +0 -0
  44. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/ceilo.py +0 -0
  45. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/ceilometer.py +0 -0
  46. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/cl61d.py +0 -0
  47. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/copernicus.py +0 -0
  48. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  49. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  50. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  51. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  52. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/galileo.py +0 -0
  53. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/instruments.py +0 -0
  54. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/lufft.py +0 -0
  55. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/mira.py +0 -0
  56. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/mrr.py +0 -0
  57. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/nc_lidar.py +0 -0
  58. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/nc_radar.py +0 -0
  59. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/pollyxt.py +0 -0
  60. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/radiometrics.py +0 -0
  61. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/rain_e_h3.py +0 -0
  62. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/rpg_reader.py +0 -0
  63. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/toa5.py +0 -0
  64. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/vaisala.py +0 -0
  65. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/instruments/weather_station.py +0 -0
  66. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/__init__.py +0 -0
  67. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  68. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/metadata.py +0 -0
  69. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  70. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  71. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  72. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  73. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  74. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  75. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  76. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  77. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  78. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  79. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  80. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  81. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  82. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  83. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  84. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  85. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  86. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  87. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  88. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  89. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  90. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  91. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  92. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  93. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  94. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  95. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  96. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  97. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  98. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  99. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  100. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  101. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  102. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  103. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  104. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  105. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/model_evaluation/utils.py +0 -0
  106. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/output.py +0 -0
  107. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/plotting/__init__.py +0 -0
  108. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/plotting/plot_meta.py +0 -0
  109. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/plotting/plotting.py +0 -0
  110. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/__init__.py +0 -0
  111. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/classification.py +0 -0
  112. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/der.py +0 -0
  113. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/drizzle.py +0 -0
  114. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/drizzle_error.py +0 -0
  115. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/drizzle_tools.py +0 -0
  116. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/epsilon.py +0 -0
  117. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/ier.py +0 -0
  118. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/iwc.py +0 -0
  119. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/lwc.py +0 -0
  120. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  121. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/mwr_tools.py +0 -0
  122. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/products/product_tools.py +0 -0
  123. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/py.typed +0 -0
  124. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy/utils.py +0 -0
  125. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  126. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy.egg-info/entry_points.txt +0 -0
  127. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy.egg-info/requires.txt +0 -0
  128. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/cloudnetpy.egg-info/top_level.txt +0 -0
  129. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/docs/source/conf.py +0 -0
  130. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/pyproject.toml +0 -0
  131. {cloudnetpy-1.72.2 → cloudnetpy-1.73.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.72.2
3
+ Version: 1.73.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -1,4 +1,5 @@
1
1
  from .basta import basta2nc
2
+ from .bowtie import bowtie2nc
2
3
  from .ceilo import ceilo2nc
3
4
  from .copernicus import copernicus2nc
4
5
  from .disdrometer import parsivel2nc, thies2nc
@@ -0,0 +1,95 @@
1
+ from os import PathLike
2
+
3
+ from cloudnetpy import output
4
+ from cloudnetpy.constants import G_TO_KG, MM_H_TO_M_S
5
+ from cloudnetpy.exceptions import ValidTimeStampError
6
+ from cloudnetpy.instruments.instruments import FMCW94
7
+ from cloudnetpy.instruments.nc_radar import NcRadar
8
+ from cloudnetpy.metadata import MetaData
9
+
10
+
11
+ def bowtie2nc(
12
+ bowtie_file: str | PathLike,
13
+ output_file: str,
14
+ site_meta: dict,
15
+ uuid: str | None = None,
16
+ date: str | None = None,
17
+ ) -> str:
18
+ """Converts data from 'BOW-TIE' campaign cloud radar on RV-Meteor into
19
+ Cloudnet Level 1b netCDF file.
20
+
21
+ Args:
22
+ bowtie_file: Input filename.
23
+ output_file: Output filename.
24
+ site_meta: Dictionary containing information about the site. Required key
25
+ value pair is `name`. Optional are `latitude`, `longitude`, `altitude`.
26
+ uuid: Set specific UUID for the file.
27
+ date: Expected date as YYYY-MM-DD of all profiles in the file.
28
+
29
+ Returns:
30
+ UUID of the generated file.
31
+
32
+ Raises:
33
+ ValidTimeStampError: No valid timestamps found.
34
+
35
+ """
36
+ keymap = {
37
+ "Zh": "Zh",
38
+ "v": "v",
39
+ "width": "width",
40
+ "ldr": "ldr",
41
+ "kurt": "kurtosis",
42
+ "Skew": "skewness",
43
+ "SNR": "SNR",
44
+ "time": "time",
45
+ "range": "range",
46
+ "lwp": "lwp",
47
+ "SurfRelHum": "relative_humidity",
48
+ "rain": "rainfall_rate",
49
+ "Nyquist_velocity": "nyquist_velocity",
50
+ "range_offsets": "chirp_start_indices",
51
+ }
52
+
53
+ with Bowtie(bowtie_file, site_meta) as bowtie:
54
+ bowtie.init_data(keymap)
55
+ bowtie.add_time_and_range()
56
+ if date is not None:
57
+ bowtie.check_date(date)
58
+ bowtie.add_radar_specific_variables()
59
+ bowtie.add_site_geolocation()
60
+ bowtie.add_height()
61
+ bowtie.convert_units()
62
+ bowtie.test_if_all_masked()
63
+ attributes = output.add_time_attribute(ATTRIBUTES, bowtie.date)
64
+ output.update_attributes(bowtie.data, attributes)
65
+ return output.save_level1b(bowtie, output_file, uuid)
66
+
67
+
68
+ class Bowtie(NcRadar):
69
+ def __init__(self, full_path: str | PathLike, site_meta: dict):
70
+ super().__init__(full_path, site_meta)
71
+ self.instrument = FMCW94
72
+ self.date = self.get_date()
73
+
74
+ def convert_units(self):
75
+ self.data["lwp"].data *= G_TO_KG
76
+ self.data["rainfall_rate"].data *= MM_H_TO_M_S
77
+ self.data["relative_humidity"].data /= 100
78
+
79
+ def check_date(self, date: str):
80
+ if "-".join(self.date) != date:
81
+ raise ValidTimeStampError
82
+
83
+
84
+ ATTRIBUTES: dict = {
85
+ "v": MetaData(
86
+ long_name="Doppler velocity",
87
+ units="m s-1",
88
+ comment=(
89
+ "This parameter is the radial component of the velocity, with positive\n"
90
+ "velocities are away from the radar. It was corrected for the heave\n"
91
+ "motion of the ship. A rolling average over 3 time steps has been\n"
92
+ "applied to it."
93
+ ),
94
+ ),
95
+ }
@@ -7,7 +7,7 @@ from numpy import ma
7
7
  from cloudnetpy import utils
8
8
  from cloudnetpy.cloudnetarray import CloudnetArray
9
9
  from cloudnetpy.exceptions import ValidTimeStampError
10
- from cloudnetpy.instruments.instruments import BASTA, FMCW35, FMCW94, HATPRO, Instrument
10
+ from cloudnetpy.instruments.instruments import BASTA, FMCW35, FMCW94, Instrument
11
11
 
12
12
 
13
13
  class CloudnetInstrument:
@@ -23,12 +23,13 @@ class CloudnetInstrument:
23
23
  for key in ("latitude", "longitude", "altitude"):
24
24
  value = None
25
25
  source = None
26
- # From source data (BASTA, RPG-FMCW, HATPRO).
26
+ # From source data (BASTA, RPG-FMCW).
27
27
  # Should be the accurate GPS coordinates.
28
+ # HATPRO is handled elsewhere.
28
29
  if (
29
30
  value is None
30
31
  and self.instrument is not None
31
- and self.instrument in (BASTA, FMCW94, FMCW35, HATPRO)
32
+ and self.instrument in (BASTA, FMCW94, FMCW35)
32
33
  ):
33
34
  data = None
34
35
  if (
@@ -106,9 +106,21 @@ def hatpro2l1c(
106
106
  if "irt" in hatpro.data:
107
107
  hatpro.data["irt"].dimensions = ("time", "ir_channel")
108
108
 
109
- for key in ("latitude", "longitude", "altitude"):
110
- value = float(ma.mean(hatpro.data[key].data))
111
- hatpro.data[key] = CloudnetArray(value, key)
109
+ lat = hatpro.data["latitude"].data
110
+ lon = hatpro.data["longitude"].data
111
+ valid_latlon = (lat != 0) | (lon != 0)
112
+ if np.any(valid_latlon):
113
+ lat = float(ma.mean(lat[valid_latlon]))
114
+ lon = float(ma.mean(lon[valid_latlon]))
115
+ latlon_source = "GPS"
116
+ else:
117
+ lat = site_meta["latitude"]
118
+ lon = site_meta["longitude"]
119
+ latlon_source = "site coordinates"
120
+ alt = float(site_meta["altitude"])
121
+ hatpro.data["latitude"] = CloudnetArray(lat, "latitude", source=latlon_source)
122
+ hatpro.data["longitude"] = CloudnetArray(lon, "longitude", source=latlon_source)
123
+ hatpro.data["altitude"] = CloudnetArray(alt, "altitude", source="site coordinates")
112
124
 
113
125
  attrs_copy = ATTRIBUTES_1B01.copy()
114
126
  attributes = output.add_time_attribute(attrs_copy, hatpro.date)
@@ -445,10 +445,6 @@ RPG_ATTRIBUTES = {
445
445
  long_name="Number of spectral samples in each chirp sequence",
446
446
  units="1",
447
447
  ),
448
- "chirp_start_indices": MetaData(
449
- long_name="Chirp sequences start indices",
450
- units="1",
451
- ),
452
448
  "number_of_averaged_chirps": MetaData(
453
449
  long_name="Number of averaged chirps in sequence",
454
450
  units="1",
@@ -517,10 +513,6 @@ RPG_ATTRIBUTES = {
517
513
  long_name="PC temperature",
518
514
  units="K",
519
515
  ),
520
- "skewness": MetaData(
521
- long_name="Skewness of spectra",
522
- units="1",
523
- ),
524
516
  "kurtosis": MetaData(
525
517
  long_name="Kurtosis of spectra",
526
518
  units="1",
@@ -93,6 +93,10 @@ COMMON_ATTRIBUTES = {
93
93
  long_name="Kurtosis of spectra",
94
94
  units="1",
95
95
  ),
96
+ "skewness": MetaData(
97
+ long_name="Skewness of spectra",
98
+ units="1",
99
+ ),
96
100
  "nyquist_velocity": MetaData(long_name="Nyquist velocity", units="m s-1"),
97
101
  "radar_frequency": MetaData(long_name="Radar transmit frequency", units="GHz"),
98
102
  "beta": MetaData(
@@ -190,4 +194,8 @@ COMMON_ATTRIBUTES = {
190
194
  units="dB",
191
195
  comment="SNR threshold used in data screening.",
192
196
  ),
197
+ "chirp_start_indices": MetaData(
198
+ long_name="Chirp sequences start indices",
199
+ units="1",
200
+ ),
193
201
  }
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
- MINOR = 72
3
- PATCH = 2
2
+ MINOR = 73
3
+ PATCH = 0
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.72.2
3
+ Version: 1.73.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -44,6 +44,7 @@ cloudnetpy/categorize/attenuations/melting_attenuation.py
44
44
  cloudnetpy/categorize/attenuations/rain_attenuation.py
45
45
  cloudnetpy/instruments/__init__.py
46
46
  cloudnetpy/instruments/basta.py
47
+ cloudnetpy/instruments/bowtie.py
47
48
  cloudnetpy/instruments/ceilo.py
48
49
  cloudnetpy/instruments/ceilometer.py
49
50
  cloudnetpy/instruments/cl61d.py
File without changes
File without changes
File without changes
File without changes
File without changes