cloudnetpy 1.51.1__tar.gz → 1.52.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.51.1/cloudnetpy.egg-info → cloudnetpy-1.52.0}/PKG-INFO +1 -1
  2. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/hatpro.py +12 -3
  3. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/plotting/plotting.py +10 -26
  4. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/mwr_multi.py +5 -2
  5. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/mwr_single.py +5 -2
  6. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/product_tools.py +13 -1
  7. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/version.py +2 -2
  8. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0/cloudnetpy.egg-info}/PKG-INFO +1 -1
  9. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy.egg-info/requires.txt +1 -1
  10. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/pyproject.toml +1 -1
  11. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/LICENSE +0 -0
  12. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/MANIFEST.in +0 -0
  13. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/README.md +0 -0
  14. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/__init__.py +0 -0
  15. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/__init__.py +0 -0
  16. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/atmos.py +0 -0
  17. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/atmos_utils.py +0 -0
  18. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/categorize.py +0 -0
  19. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/classify.py +0 -0
  20. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/containers.py +0 -0
  21. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/droplet.py +0 -0
  22. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/falling.py +0 -0
  23. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/freezing.py +0 -0
  24. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/insects.py +0 -0
  25. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/lidar.py +0 -0
  26. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/melting.py +0 -0
  27. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/model.py +0 -0
  28. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/mwr.py +0 -0
  29. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/categorize/radar.py +0 -0
  30. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/cloudnetarray.py +0 -0
  31. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/concat_lib.py +0 -0
  32. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/constants.py +0 -0
  33. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/datasource.py +0 -0
  34. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/exceptions.py +0 -0
  35. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/__init__.py +0 -0
  36. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/basta.py +0 -0
  37. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/campbell_scientific.py +0 -0
  38. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/ceilo.py +0 -0
  39. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/ceilometer.py +0 -0
  40. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/cl61d.py +0 -0
  41. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  42. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/copernicus.py +0 -0
  43. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  44. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/disdrometer/common.py +0 -0
  45. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  46. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  47. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/galileo.py +0 -0
  48. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/instruments.py +0 -0
  49. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/lufft.py +0 -0
  50. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/mira.py +0 -0
  51. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/nc_lidar.py +0 -0
  52. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/nc_radar.py +0 -0
  53. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/pollyxt.py +0 -0
  54. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/radiometrics.py +0 -0
  55. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/rpg.py +0 -0
  56. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/rpg_reader.py +0 -0
  57. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/vaisala.py +0 -0
  58. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/instruments/weather_station.py +0 -0
  59. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/metadata.py +0 -0
  60. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/__init__.py +0 -0
  61. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  62. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/metadata.py +0 -0
  63. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  64. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  65. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  66. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  67. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  68. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  69. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  70. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  71. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  72. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  73. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  74. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  75. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  76. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  77. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  78. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  79. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  80. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  81. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  82. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  83. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  84. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  85. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  86. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  87. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  88. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  89. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  90. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  91. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  92. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  93. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  94. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  95. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  96. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  97. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  98. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  99. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/model_evaluation/utils.py +0 -0
  100. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/output.py +0 -0
  101. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/plotting/__init__.py +0 -0
  102. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/plotting/plot_meta.py +0 -0
  103. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/__init__.py +0 -0
  104. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/classification.py +0 -0
  105. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/der.py +0 -0
  106. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/drizzle.py +0 -0
  107. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/drizzle_error.py +0 -0
  108. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/drizzle_tools.py +0 -0
  109. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/ier.py +0 -0
  110. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/iwc.py +0 -0
  111. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/lwc.py +0 -0
  112. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  113. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/py.typed +0 -0
  114. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy/utils.py +0 -0
  115. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  116. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  117. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/cloudnetpy.egg-info/top_level.txt +0 -0
  118. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/docs/source/conf.py +0 -0
  119. {cloudnetpy-1.51.1 → cloudnetpy-1.52.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cloudnetpy
3
- Version: 1.51.1
3
+ Version: 1.52.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -36,7 +36,7 @@ def hatpro2l1c(
36
36
  Args:
37
37
  mwr_dir: Folder containing one day of HATPRO files.
38
38
  output_file: Output file name.
39
- site_meta: Dictionary containing information about the site
39
+ site_meta: Dictionary containing information about the site and instrument
40
40
  uuid: Set specific UUID for the file.
41
41
  date: Expected date in the input files.
42
42
 
@@ -44,7 +44,16 @@ def hatpro2l1c(
44
44
  UUID of the generated file.
45
45
  """
46
46
 
47
- hatpro_raw = mwrpy.lev1_to_nc(site_meta["coeffs_dir"], "1C01", mwr_dir)
47
+ coeff_files = site_meta.get("coefficientFiles", None)
48
+
49
+ hatpro_raw = mwrpy.lev1_to_nc(
50
+ "1C01",
51
+ mwr_dir,
52
+ output_file=output_file,
53
+ coeff_files=coeff_files,
54
+ instrument_config=site_meta,
55
+ )
56
+
48
57
  hatpro = HatproL1c(hatpro_raw, site_meta)
49
58
 
50
59
  timestamps = hatpro.data["time"][:]
@@ -75,7 +84,7 @@ def hatpro2l1c(
75
84
  nc.cloudnet_file_type = "mwr-l1c"
76
85
  nc.title = nc.title.replace("radiometer", "radiometer Level 1c")
77
86
  nc.mwrpy_version = mwrpy_version
78
- nc.mwrpy_coefficients = site_meta["coeffs_dir"]
87
+ nc.mwrpy_coefficients = ", ".join(site_meta["coefficientLinks"])
79
88
 
80
89
  return uuid
81
90
 
@@ -483,8 +483,7 @@ def _plot_disdrometer(ax, data: ndarray, time: ndarray, name: str, unit: str):
483
483
 
484
484
  def _plot_hatpro(ax, data: dict, full_path: str):
485
485
  tb = _pointing_filter(full_path, data["tb"])
486
- time = _pointing_filter(full_path, data["time"])
487
- ax.plot(time, tb, color="royalblue", linestyle="-", linewidth=1)
486
+ ax.plot(data["time"], tb, color="royalblue", linestyle="-", linewidth=1)
488
487
  set_ax(
489
488
  ax,
490
489
  max_y=np.max(tb) + 0.5,
@@ -493,36 +492,21 @@ def _plot_hatpro(ax, data: dict, full_path: str):
493
492
  )
494
493
 
495
494
 
496
- def _elevation_filter(full_path: str, data_field: ndarray, ele_range: tuple) -> ndarray:
497
- """Filters data for specified range of elevation angles."""
498
- with netCDF4.Dataset(full_path) as nc:
499
- if "ele" in nc.variables:
500
- elevation = ptools.read_nc_fields(full_path, "ele")
501
- if data_field.ndim > 1:
502
- data_field = data_field[
503
- (elevation >= ele_range[0]) & (elevation <= ele_range[1]), :
504
- ]
505
- else:
506
- data_field = data_field[
507
- (elevation >= ele_range[0]) & (elevation <= ele_range[1])
508
- ]
509
- return data_field
510
-
511
-
512
495
  def _pointing_filter(
513
- full_path: str, data_field: ndarray, ele_range: tuple = (0, 91), status: int = 0
496
+ full_path: str, data: ndarray, zenith_limit=5, status: int = 0
514
497
  ) -> ndarray:
515
- """Filters data according to pointing flag."""
498
+ """Filters data according to pointing flag and zenith angle."""
516
499
  with netCDF4.Dataset(full_path) as nc:
517
500
  if "pointing_flag" in nc.variables:
518
501
  pointing = ptools.read_nc_fields(full_path, "pointing_flag")
519
- assert isinstance(pointing, ndarray)
520
- pointing_screened = _elevation_filter(full_path, pointing, ele_range)
521
- if data_field.ndim > 1:
522
- data_field = data_field[pointing_screened == status, :]
502
+ zenith_angle = ptools.read_nc_fields(full_path, "zenith_angle")
503
+ if data.ndim > 1:
504
+ data[np.abs(zenith_angle) > zenith_limit, :] = ma.masked
505
+ data[pointing != status, :] = ma.masked
523
506
  else:
524
- data_field = data_field[pointing_screened == status]
525
- return data_field
507
+ data[np.abs(zenith_angle) > zenith_limit] = ma.masked
508
+ data[pointing != status] = ma.masked
509
+ return data
526
510
 
527
511
 
528
512
  def _plot_weather_station(ax, data: ndarray, time: ndarray, name: str):
@@ -1,3 +1,4 @@
1
+ import tempfile
1
2
  from tempfile import NamedTemporaryFile
2
3
 
3
4
  import netCDF4
@@ -12,7 +13,6 @@ def generate_mwr_multi(
12
13
  mwr_l1c_file: str, output_file: str, uuid: str | None = None
13
14
  ) -> str:
14
15
  file_uuid = uuid if uuid is not None else utils.get_uuid()
15
- coeffs = product_tools.get_mwrpy_coeffs(mwr_l1c_file)
16
16
 
17
17
  with (
18
18
  NamedTemporaryFile() as temp_file,
@@ -20,16 +20,19 @@ def generate_mwr_multi(
20
20
  NamedTemporaryFile() as rel_hum_file,
21
21
  NamedTemporaryFile() as t_pot_file,
22
22
  NamedTemporaryFile() as eq_temp_file,
23
+ tempfile.TemporaryDirectory() as temp_dir,
23
24
  ):
25
+ coeffs = product_tools.get_read_mwrpy_coeffs(mwr_l1c_file, temp_dir)
26
+
24
27
  for prod, file in zip(
25
28
  ("2P02", "2P03", "2P04", "2P07", "2P08"),
26
29
  (temp_file, abs_hum_file, rel_hum_file, t_pot_file, eq_temp_file),
27
30
  ):
28
31
  lev2_to_nc(
29
- coeffs,
30
32
  prod,
31
33
  mwr_l1c_file,
32
34
  file.name,
35
+ coeff_files=coeffs,
33
36
  temp_file=temp_file.name if prod not in ("2P02", "2P03") else None,
34
37
  hum_file=abs_hum_file.name if prod not in ("2P02", "2P03") else None,
35
38
  )
@@ -1,3 +1,4 @@
1
+ import tempfile
1
2
  from tempfile import NamedTemporaryFile
2
3
 
3
4
  import netCDF4
@@ -12,19 +13,21 @@ def generate_mwr_single(
12
13
  mwr_l1c_file: str, output_file: str, uuid: str | None = None
13
14
  ) -> str:
14
15
  file_uuid = uuid if uuid is not None else utils.get_uuid()
15
- coeffs = product_tools.get_mwrpy_coeffs(mwr_l1c_file)
16
16
 
17
17
  with (
18
18
  NamedTemporaryFile() as lwp_file,
19
19
  NamedTemporaryFile() as iwv_file,
20
20
  NamedTemporaryFile() as t_prof_file,
21
21
  NamedTemporaryFile() as abs_hum_file,
22
+ tempfile.TemporaryDirectory() as temp_dir,
22
23
  ):
24
+ coeffs = product_tools.get_read_mwrpy_coeffs(mwr_l1c_file, temp_dir)
25
+
23
26
  for prod, file in zip(
24
27
  ("2I01", "2I02", "2P01", "2P03"),
25
28
  (lwp_file, iwv_file, t_prof_file, abs_hum_file),
26
29
  ):
27
- lev2_to_nc(coeffs, prod, mwr_l1c_file, file.name)
30
+ lev2_to_nc(prod, mwr_l1c_file, file.name, coeff_files=coeffs)
28
31
 
29
32
  with (
30
33
  netCDF4.Dataset(output_file, "w", format="NETCDF4_CLASSIC") as nc_output,
@@ -1,8 +1,10 @@
1
1
  """General helper classes and functions for all products."""
2
+ import os
2
3
  from collections import namedtuple
3
4
 
4
5
  import netCDF4
5
6
  import numpy as np
7
+ import requests
6
8
  from numpy import ma
7
9
 
8
10
  from cloudnetpy import constants, utils
@@ -276,4 +278,14 @@ def get_temperature(categorize_file: str) -> np.ndarray:
276
278
 
277
279
  def get_mwrpy_coeffs(nc_file: str) -> str:
278
280
  with netCDF4.Dataset(nc_file) as nc:
279
- return nc.mwrpy_coefficients
281
+ return nc.mwrpy_coefficients.split(", ")
282
+
283
+
284
+ def get_read_mwrpy_coeffs(mwr_l1c_file, folder: str) -> list:
285
+ coeffs = []
286
+ for link in get_mwrpy_coeffs(mwr_l1c_file):
287
+ full_path = os.path.join(folder, link.split("/")[-1])
288
+ with open(full_path, "wb") as f:
289
+ f.write(requests.get(link, timeout=10).content)
290
+ coeffs.append(full_path)
291
+ return coeffs
@@ -1,4 +1,4 @@
1
1
  MAJOR = 1
2
- MINOR = 51
3
- PATCH = 1
2
+ MINOR = 52
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.51.1
3
+ Version: 1.52.0
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -1,6 +1,6 @@
1
1
  cloudnetpy_qc>=1.10.2
2
2
  matplotlib
3
- mwrpy>=0.1.6
3
+ mwrpy>=0.4.1
4
4
  netCDF4
5
5
  requests
6
6
  rpgpy>=0.14.2
@@ -17,7 +17,7 @@ classifiers = [
17
17
  dependencies = [
18
18
  "cloudnetpy_qc>=1.10.2",
19
19
  "matplotlib",
20
- "mwrpy>=0.1.6",
20
+ "mwrpy>=0.4.1",
21
21
  "netCDF4",
22
22
  "requests",
23
23
  "rpgpy>=0.14.2",
File without changes
File without changes
File without changes
File without changes