cloudnetpy 1.59.5__py3-none-any.whl → 1.60.1__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.
@@ -124,11 +124,12 @@ def generate_categorize(
124
124
 
125
125
  try:
126
126
  is_disdrometer = "disdrometer" in input_files
127
- data = {
127
+
128
+ data: dict = {
128
129
  "radar": Radar(input_files["radar"]),
129
130
  "lidar": Lidar(input_files["lidar"]),
130
131
  "mwr": Mwr(input_files["mwr"]),
131
- "lv0_files": input_files.get("lv0_files", None),
132
+ "lv0_files": input_files.get("lv0_files"),
132
133
  "disdrometer": Disdrometer(input_files["disdrometer"])
133
134
  if is_disdrometer
134
135
  else None,
@@ -124,7 +124,7 @@ class Radar(DataSource):
124
124
  return
125
125
  n_vertical = self._filter(
126
126
  data,
127
- 1,
127
+ axis=1,
128
128
  min_coverage=0.5,
129
129
  z_limit=10,
130
130
  distance=4,
@@ -132,7 +132,7 @@ class Radar(DataSource):
132
132
  )
133
133
  n_horizontal = self._filter(
134
134
  data,
135
- 0,
135
+ axis=0,
136
136
  min_coverage=0.3,
137
137
  z_limit=-30,
138
138
  distance=3,
@@ -174,6 +174,10 @@ class Radar(DataSource):
174
174
  q3 = np.quantile(n_values, 0.75)
175
175
  except IndexError:
176
176
  continue
177
+
178
+ if q1 == q3:
179
+ continue
180
+
177
181
  threshold = distance * (q3 - q1) + q3
178
182
 
179
183
  indices = np.where(
@@ -69,7 +69,7 @@ def ceilo2nc(
69
69
  """
70
70
  snr_limit = 5
71
71
  ceilo_obj = _initialize_ceilo(full_path, site_meta, date)
72
- calibration_factor = site_meta.get("calibration_factor", None)
72
+ calibration_factor = site_meta.get("calibration_factor")
73
73
  range_corrected = site_meta.get("range_corrected", True)
74
74
  ceilo_obj.read_ceilometer_file(calibration_factor)
75
75
  ceilo_obj.check_beta_raw_shape()
@@ -107,9 +107,12 @@ class Ceilometer:
107
107
  self.date = utils.seconds2date(self.data["time"][0], epoch=epoch)[:3]
108
108
  self.data["time"] = utils.seconds2hours(self.data["time"])
109
109
 
110
- def data_to_cloudnet_arrays(self) -> None:
110
+ def data_to_cloudnet_arrays(self, time_dtype="f4") -> None:
111
111
  for key, array in self.data.items():
112
- self.data[key] = CloudnetArray(array, key)
112
+ if key == "time":
113
+ self.data[key] = CloudnetArray(array, key, data_type=time_dtype)
114
+ else:
115
+ self.data[key] = CloudnetArray(array, key)
113
116
 
114
117
  def screen_depol(self) -> None:
115
118
  key = "depolarisation"
@@ -44,7 +44,7 @@ def hatpro2l1c(
44
44
  Returns:
45
45
  UUID of the generated file.
46
46
  """
47
- coeff_files = site_meta.get("coefficientFiles", None)
47
+ coeff_files = site_meta.get("coefficientFiles")
48
48
 
49
49
  try:
50
50
  hatpro_raw = lev1_to_nc(
@@ -56,7 +56,8 @@ def pollyxt2nc(
56
56
  polly.calc_screened_products(snr_limit)
57
57
  polly.mask_nan_values()
58
58
  polly.prepare_data()
59
- polly.data_to_cloudnet_arrays()
59
+ polly.screen_completely_masked_profiles()
60
+ polly.data_to_cloudnet_arrays(time_dtype="f8")
60
61
  attributes = output.add_time_attribute(ATTRIBUTES, polly.date)
61
62
  output.update_attributes(polly.data, attributes)
62
63
  polly.add_snr_info("beta", snr_limit)
@@ -149,6 +150,12 @@ class PollyXt(Ceilometer):
149
150
  self.data["calibration_factor"] = calibration_factors
150
151
  return epoch
151
152
 
153
+ def screen_completely_masked_profiles(self) -> None:
154
+ valid_ind = ~np.all(np.ma.getmaskarray(self.data["beta_raw"]), axis=1)
155
+ for key, item in self.data.items():
156
+ if isinstance(item, np.ndarray) and item.shape[0] == len(valid_ind):
157
+ self.data[key] = item[valid_ind]
158
+
152
159
  def _get_valid_beta_channel(self, files: list) -> str:
153
160
  polly_channels = ("1064", "532", "355")
154
161
  for channel in polly_channels:
@@ -145,9 +145,9 @@ class Radiometrics:
145
145
  continue
146
146
  times.append(record.timestamp)
147
147
  if lwp is not None:
148
- lwps.append(float(lwp) * 1000) # g / m2
148
+ lwps.append(float(lwp)) # mm => kg m-2
149
149
  if iwv is not None:
150
- iwvs.append(float(iwv) * 100) # g / m2
150
+ iwvs.append(float(iwv) * 10) # cm => kg m-2
151
151
  self.data["time"] = np.array(times, dtype="datetime64[s]")
152
152
  self.data["lwp"] = np.array(lwps, dtype=float)
153
153
  self.data["iwv"] = np.array(iwvs, dtype=float)
cloudnetpy/version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
- MINOR = 59
3
- PATCH = 5
2
+ MINOR = 60
3
+ PATCH = 1
4
4
  __version__ = f"{MAJOR}.{MINOR}.{PATCH}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.59.5
3
+ Version: 1.60.1
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -8,11 +8,11 @@ cloudnetpy/metadata.py,sha256=v_VDo2vbdTxB0zIsfP69IcrwSKiRlLpsGdq6JPI4CoA,5306
8
8
  cloudnetpy/output.py,sha256=WoVTNuxni0DUr163vZ-_mDr1brXhY15XSlGMrq9Aoqw,14700
9
9
  cloudnetpy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  cloudnetpy/utils.py,sha256=0TlHm71YtSrKXBsRKctitnhQrvZPE-ulEVeAQW-oK58,27398
11
- cloudnetpy/version.py,sha256=_ZHaJaLkFans6kJwX5yp5Id9JIeZWVMEa3xlhGnpjgI,72
11
+ cloudnetpy/version.py,sha256=aMrw7kVVNAWBsLdFD6ZiaSwL_rHSdG4s5vxmWXFxavU,72
12
12
  cloudnetpy/categorize/__init__.py,sha256=gP5q3Vis1y9u9OWgA_idlbjfWXYN_S0IBSWdwBhL_uU,69
13
13
  cloudnetpy/categorize/atmos.py,sha256=fWW8ye_8HZASRAiYwURFKWzcGOYIA2RKeVxCq0lVOuM,12389
14
14
  cloudnetpy/categorize/atmos_utils.py,sha256=wndpwJxc2-QnNTkV8tc8I11Vs_WkNz9sVMX1fuGgUC4,3777
15
- cloudnetpy/categorize/categorize.py,sha256=_chLFT0l9ll78y3oaxFwOTBbv2raxxjghCz-_KGdImQ,17476
15
+ cloudnetpy/categorize/categorize.py,sha256=QNSqEtpe1qtFQAKOG1suffPaYEwtOf4KMij9PdW9-Us,17477
16
16
  cloudnetpy/categorize/classify.py,sha256=x7aqPfhw4xuER22sqOb9ES9nijwk1E8b7HF7uaFJD7k,9218
17
17
  cloudnetpy/categorize/containers.py,sha256=j6oSKPeZcq9vFthYaocAw1m6yReRNNPYUQF5UTDq4YM,4232
18
18
  cloudnetpy/categorize/disdrometer.py,sha256=0Z0nvUtoZKDxiUfBZzoYZxUFOVjq-thmYfaCkskeECs,1799
@@ -24,25 +24,25 @@ cloudnetpy/categorize/lidar.py,sha256=LYqXw30sLOYxhKRcO3k5r0uVLGRYmJ5k0KuVOMduY5
24
24
  cloudnetpy/categorize/melting.py,sha256=AOq36yLntDXYbeMw5QhZ7kMLwt0INyUbhzv-rSILLyo,6261
25
25
  cloudnetpy/categorize/model.py,sha256=xWB6XOSz9p0h4b4m6ImMmzcTImOmz54d093WmsLogdQ,5535
26
26
  cloudnetpy/categorize/mwr.py,sha256=-KMoYlch_C79bqgcEiRDCTRCcQf1ZsYxU90GQ8hzMgs,1435
27
- cloudnetpy/categorize/radar.py,sha256=S3561FVK6J4NUjqPi2S6fKnjnOm0oLwbIC54J64AN4Y,13659
27
+ cloudnetpy/categorize/radar.py,sha256=oaptBCymSPTa1HNYOWURnE0h5oklDOVxQvqAEAbqSQw,13721
28
28
  cloudnetpy/instruments/__init__.py,sha256=_jejVwi_viSZehmAOkEqTNI-0-exGgAJ_bHW1IRRwTI,398
29
29
  cloudnetpy/instruments/basta.py,sha256=0zUztUJBXT2nrBTAl3-NLowxu_CYwTU5TgdBq4etj7E,3757
30
30
  cloudnetpy/instruments/campbell_scientific.py,sha256=2WHfBKQjtRSl0AqvtPeX7G8Hdi3Dn0WbvoAppFOMbA8,5270
31
- cloudnetpy/instruments/ceilo.py,sha256=eF9Pp3KbYg3I_6gQcgCeobVkHzbbK9T5uH2tUys7RG8,8882
32
- cloudnetpy/instruments/ceilometer.py,sha256=SVp3Ego8JIjoTFK0FRvc2Xgq7U9a9iM1n-gL0Z90dv0,11928
31
+ cloudnetpy/instruments/ceilo.py,sha256=56zhNSx5cyqV9ToeDUhXzwOUQK32oa9Vng2VsPXLsmM,8876
32
+ cloudnetpy/instruments/ceilometer.py,sha256=-aPEZs_r0Gxeu53PHeWAkZMB2BUdauS47tkL7RFxo6k,12078
33
33
  cloudnetpy/instruments/cl61d.py,sha256=ycJGvUqNU2KHhECbrSehtWRnvg1vKFHhvMeQpjpdCI4,1989
34
34
  cloudnetpy/instruments/cloudnet_instrument.py,sha256=RG5HJxGM6p0F-IGyr85fvOizcMmgx48OeD_XeIsrgSU,3367
35
35
  cloudnetpy/instruments/copernicus.py,sha256=AT0AtMhGSKzPWEqXsfAda6zeaw4g0Jr5dqIyfeu4FP0,6327
36
36
  cloudnetpy/instruments/galileo.py,sha256=FyFYh1JhWed1d6yvpsv3rdBzHUTjkfOPw5HEQz4Wssw,4545
37
- cloudnetpy/instruments/hatpro.py,sha256=tvkLfgC7YRa8aECOeN4_UaxrgX_VTKYTjTbRVo1kxLo,8519
37
+ cloudnetpy/instruments/hatpro.py,sha256=QD7Gn607Q2ASAlSJbY8Fu37TOOHTR1VrAPVfy8ehylg,8513
38
38
  cloudnetpy/instruments/instruments.py,sha256=jG5TYnZ8bdCZXnI303ZsaJBEdSKaIjKMbkGtnq6kQX0,3261
39
39
  cloudnetpy/instruments/lufft.py,sha256=nozeiMRMz7I6q_FwmlxDGhWeJlqTuNh6ru39-M4K3BI,3629
40
40
  cloudnetpy/instruments/mira.py,sha256=TfozpYivQAThZ_rV3gLzZpz2QyJFWOF0RXdzA4521rM,9332
41
41
  cloudnetpy/instruments/mrr.py,sha256=hqknXXjJYfjWtyO50vioC3ohmH1GWU7K78-dNHh0Fss,5824
42
42
  cloudnetpy/instruments/nc_lidar.py,sha256=Q4sJJwiEPthDz0Zb-laISX32jNYzlUBMafxLJiOAN5c,1704
43
43
  cloudnetpy/instruments/nc_radar.py,sha256=cDd20Yz-UeDQp1Gmkk-jGNZ45DangFsCaioeo_kktHQ,6935
44
- cloudnetpy/instruments/pollyxt.py,sha256=lbxJCKgKfgTxPm_NyYIWzSi2BbN828fNzI-Rux3wT48,8560
45
- cloudnetpy/instruments/radiometrics.py,sha256=oqsEW65DPYuSah58SaphtVVmt0rZqJ7DwqbOlMB-qHc,7620
44
+ cloudnetpy/instruments/pollyxt.py,sha256=SccV9htZ5MWrK7JEleOr4hbmeTr-lKktUzAt7H9Xkf8,8932
45
+ cloudnetpy/instruments/radiometrics.py,sha256=2ofeZ6KJ_JOWTd3UA-wSzJpM5cjN7R4jZeBLJCQKEYc,7624
46
46
  cloudnetpy/instruments/rpg.py,sha256=U8nEOlOI74f2lk2w4C4xKZCrW6AkDZpQZYE3yv7SNHE,17130
47
47
  cloudnetpy/instruments/rpg_reader.py,sha256=LAdXL3TmD5QzQbqtPOcemZji_qkXwmw6a6F8NmF6Zg8,11355
48
48
  cloudnetpy/instruments/vaisala.py,sha256=GzESZvboOoXzWmmr9dC-y6oM6ogc-M-zT3KmBTaD0LI,14512
@@ -107,8 +107,8 @@ cloudnetpy/products/mie_lu_tables.nc,sha256=It4fYpqJXlqOgL8jeZ-PxGzP08PMrELIDVe5
107
107
  cloudnetpy/products/mwr_tools.py,sha256=PRm5aCULccUehU-Byk55wYhhEHseMjoAjGBu5TSyHao,4621
108
108
  cloudnetpy/products/product_tools.py,sha256=rhx_Ru9FLlQqCNM-awoiHx18-Aq1eBwL9LiUaQoJs6k,10412
109
109
  docs/source/conf.py,sha256=IKiFWw6xhUd8NrCg0q7l596Ck1d61XWeVjIFHVSG9Og,1490
110
- cloudnetpy-1.59.5.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
111
- cloudnetpy-1.59.5.dist-info/METADATA,sha256=2kp1YrC2F0NLCeOEaCj6Jb1Ev8HhEdgxKIR9y2YZAz0,5784
112
- cloudnetpy-1.59.5.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
113
- cloudnetpy-1.59.5.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
114
- cloudnetpy-1.59.5.dist-info/RECORD,,
110
+ cloudnetpy-1.60.1.dist-info/LICENSE,sha256=wcZF72bdaoG9XugpyE95Juo7lBQOwLuTKBOhhtANZMM,1094
111
+ cloudnetpy-1.60.1.dist-info/METADATA,sha256=LG0ydnxAUKLn5SypWDIjlWlVYF8QTZwbnyVWD_nlDgc,5784
112
+ cloudnetpy-1.60.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
113
+ cloudnetpy-1.60.1.dist-info/top_level.txt,sha256=ibSPWRr6ojS1i11rtBFz2_gkIe68mggj7aeswYfaOo0,16
114
+ cloudnetpy-1.60.1.dist-info/RECORD,,