cloudnetpy 1.80.5__tar.gz → 1.80.8__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 (132) hide show
  1. {cloudnetpy-1.80.5/cloudnetpy.egg-info → cloudnetpy-1.80.8}/PKG-INFO +1 -1
  2. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/categorize.py +60 -6
  3. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/model.py +3 -5
  4. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/cloudnetarray.py +1 -1
  5. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/basta.py +3 -0
  6. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/bowtie.py +4 -1
  7. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/ceilo.py +6 -79
  8. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/copernicus.py +11 -3
  9. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/disdrometer/common.py +70 -31
  10. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/fd12p.py +7 -1
  11. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/galileo.py +9 -3
  12. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/mira.py +8 -7
  13. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/mrr.py +14 -2
  14. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/nc_radar.py +2 -1
  15. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/pollyxt.py +5 -1
  16. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/radiometrics.py +10 -0
  17. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/rpg.py +73 -54
  18. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/metadata.py +48 -22
  19. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/metadata.py +46 -19
  20. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/output.py +9 -28
  21. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/plotting/plotting.py +1 -1
  22. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/classification.py +6 -0
  23. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/der.py +6 -0
  24. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/drizzle.py +27 -1
  25. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/ier.py +3 -0
  26. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/iwc.py +5 -0
  27. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/lwc.py +3 -0
  28. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/utils.py +6 -1
  29. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/version.py +1 -1
  30. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8/cloudnetpy.egg-info}/PKG-INFO +1 -1
  31. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/LICENSE +0 -0
  32. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/MANIFEST.in +0 -0
  33. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/README.md +0 -0
  34. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/__init__.py +0 -0
  35. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/__init__.py +0 -0
  36. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/atmos_utils.py +0 -0
  37. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/attenuation.py +0 -0
  38. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/attenuations/__init__.py +0 -0
  39. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/attenuations/gas_attenuation.py +0 -0
  40. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/attenuations/liquid_attenuation.py +0 -0
  41. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/attenuations/melting_attenuation.py +0 -0
  42. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/attenuations/rain_attenuation.py +0 -0
  43. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/classify.py +0 -0
  44. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/containers.py +0 -0
  45. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/disdrometer.py +0 -0
  46. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/droplet.py +0 -0
  47. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/falling.py +0 -0
  48. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/freezing.py +0 -0
  49. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/insects.py +0 -0
  50. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/itu.py +0 -0
  51. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/lidar.py +0 -0
  52. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/melting.py +0 -0
  53. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/mwr.py +0 -0
  54. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/categorize/radar.py +0 -0
  55. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/cli.py +0 -0
  56. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/concat_lib.py +0 -0
  57. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/constants.py +0 -0
  58. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/datasource.py +0 -0
  59. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/exceptions.py +0 -0
  60. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/__init__.py +0 -0
  61. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/ceilometer.py +0 -0
  62. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/cl61d.py +0 -0
  63. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/cloudnet_instrument.py +0 -0
  64. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/disdrometer/__init__.py +0 -0
  65. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/disdrometer/parsivel.py +0 -0
  66. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/disdrometer/thies.py +0 -0
  67. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/hatpro.py +0 -0
  68. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/instruments.py +0 -0
  69. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/lufft.py +0 -0
  70. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/nc_lidar.py +0 -0
  71. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/rain_e_h3.py +0 -0
  72. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/rpg_reader.py +0 -0
  73. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/toa5.py +0 -0
  74. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/vaisala.py +0 -0
  75. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/instruments/weather_station.py +0 -0
  76. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/__init__.py +0 -0
  77. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/file_handler.py +0 -0
  78. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/model_metadata.py +0 -0
  79. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/plotting/__init__.py +0 -0
  80. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/plotting/plot_meta.py +0 -0
  81. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/plotting/plot_tools.py +0 -0
  82. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/plotting/plotting.py +0 -0
  83. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/__init__.py +0 -0
  84. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/advance_methods.py +0 -0
  85. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/grid_methods.py +0 -0
  86. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/model_products.py +0 -0
  87. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/observation_products.py +0 -0
  88. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/product_resampling.py +0 -0
  89. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/products/tools.py +0 -0
  90. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/statistics/__init__.py +0 -0
  91. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/statistics/statistical_methods.py +0 -0
  92. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/__init__.py +0 -0
  93. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/__init__.py +0 -0
  94. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/conftest.py +0 -0
  95. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_cf/__init__.py +0 -0
  96. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_cf/main.py +0 -0
  97. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_cf/tests.py +0 -0
  98. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/__init__.py +0 -0
  99. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/main.py +0 -0
  100. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_iwc/tests.py +0 -0
  101. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/__init__.py +0 -0
  102. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/main.py +0 -0
  103. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/e2e/process_lwc/tests.py +0 -0
  104. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/__init__.py +0 -0
  105. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/conftest.py +0 -0
  106. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_advance_methods.py +0 -0
  107. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_grid_methods.py +0 -0
  108. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_model_products.py +0 -0
  109. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_observation_products.py +0 -0
  110. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_plot_tools.py +0 -0
  111. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_plotting.py +0 -0
  112. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_statistical_methods.py +0 -0
  113. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/tests/unit/test_tools.py +0 -0
  114. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/model_evaluation/utils.py +0 -0
  115. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/plotting/__init__.py +0 -0
  116. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/plotting/plot_meta.py +0 -0
  117. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/__init__.py +0 -0
  118. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/drizzle_error.py +0 -0
  119. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/drizzle_tools.py +0 -0
  120. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/epsilon.py +0 -0
  121. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/mie_lu_tables.nc +0 -0
  122. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/mwr_tools.py +0 -0
  123. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/products/product_tools.py +0 -0
  124. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy/py.typed +0 -0
  125. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy.egg-info/SOURCES.txt +0 -0
  126. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy.egg-info/dependency_links.txt +0 -0
  127. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy.egg-info/entry_points.txt +0 -0
  128. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy.egg-info/requires.txt +0 -0
  129. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/cloudnetpy.egg-info/top_level.txt +0 -0
  130. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/docs/source/conf.py +0 -0
  131. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/pyproject.toml +0 -0
  132. {cloudnetpy-1.80.5 → cloudnetpy-1.80.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloudnetpy
3
- Version: 1.80.5
3
+ Version: 1.80.8
4
4
  Summary: Python package for Cloudnet processing
5
5
  Author: Simo Tukiainen
6
6
  License: MIT License
@@ -17,7 +17,8 @@ from cloudnetpy.categorize.mwr import Mwr
17
17
  from cloudnetpy.categorize.radar import Radar
18
18
  from cloudnetpy.datasource import DataSource
19
19
  from cloudnetpy.exceptions import DisdrometerDataError, ValidTimeStampError
20
- from cloudnetpy.metadata import MetaData
20
+ from cloudnetpy.instruments.rpg import RPG_ATTRIBUTES
21
+ from cloudnetpy.metadata import COMMON_ATTRIBUTES, MetaData
21
22
  from cloudnetpy.products.product_tools import CategoryBits, QualityBits
22
23
 
23
24
 
@@ -385,31 +386,45 @@ DEFINITIONS = {
385
386
  }
386
387
 
387
388
  CATEGORIZE_ATTRIBUTES = {
389
+ "height": COMMON_ATTRIBUTES["height"]._replace(dimensions=("height",)),
388
390
  # Radar variables
389
391
  "Z": MetaData(
390
392
  long_name="Radar reflectivity factor",
391
393
  units="dBZ",
392
394
  comment=COMMENTS["Z"],
393
395
  ancillary_variables="Z_error Z_bias Z_sensitivity",
396
+ dimensions=("time", "height"),
394
397
  ),
395
398
  "Z_error": MetaData(
396
399
  long_name="Error in radar reflectivity factor",
397
400
  units="dB",
398
401
  comment=COMMENTS["Z_error"],
402
+ dimensions=("time", "height"),
399
403
  ),
400
404
  "Z_bias": MetaData(
401
405
  long_name="Bias in radar reflectivity factor",
402
406
  units="dB",
403
407
  comment=COMMENTS["bias"],
408
+ dimensions=None,
404
409
  ),
405
410
  "Z_sensitivity": MetaData(
406
411
  long_name="Minimum detectable radar reflectivity",
407
412
  units="dBZ",
408
413
  comment=COMMENTS["Z_sensitivity"],
414
+ dimensions=("time", "height"),
409
415
  ),
416
+ "v": COMMON_ATTRIBUTES["v"]._replace(dimensions=("time", "height")),
417
+ "width": COMMON_ATTRIBUTES["width"]._replace(dimensions=("time", "height")),
418
+ "ldr": COMMON_ATTRIBUTES["ldr"]._replace(dimensions=("time", "height")),
419
+ "sldr": COMMON_ATTRIBUTES["sldr"]._replace(dimensions=("time", "height")),
410
420
  "v_sigma": MetaData(
411
421
  long_name="Standard deviation of mean Doppler velocity",
412
422
  units="m s-1",
423
+ dimensions=("time", "height"),
424
+ ),
425
+ "zdr": RPG_ATTRIBUTES["zdr"]._replace(dimensions=("time", "height")),
426
+ "nyquist_velocity": COMMON_ATTRIBUTES["nyquist_velocity"]._replace(
427
+ dimensions=("time", "height")
413
428
  ),
414
429
  # Lidar variables
415
430
  "beta": MetaData(
@@ -417,89 +432,128 @@ CATEGORIZE_ATTRIBUTES = {
417
432
  units="sr-1 m-1",
418
433
  comment="SNR-screened attenuated backscatter coefficient.",
419
434
  ancillary_variables="beta_error beta_bias",
435
+ dimensions=("time", "height"),
420
436
  ),
421
437
  "beta_error": MetaData(
422
438
  long_name="Error in attenuated backscatter coefficient",
423
439
  units="dB",
440
+ dimensions=None,
424
441
  ),
425
442
  "beta_bias": MetaData(
426
443
  long_name="Bias in attenuated backscatter coefficient",
427
444
  units="dB",
445
+ dimensions=None,
446
+ ),
447
+ "lidar_wavelength": MetaData(
448
+ long_name="Laser wavelength", units="nm", dimensions=None
428
449
  ),
429
- "lidar_wavelength": MetaData(long_name="Laser wavelength", units="nm"),
430
450
  # MWR variables
431
451
  "lwp_error": MetaData(
432
452
  long_name="Error in liquid water path",
433
453
  units="kg m-2",
454
+ dimensions=("time",),
455
+ ),
456
+ "lwp": COMMON_ATTRIBUTES["lwp"]._replace(
457
+ ancillary_variables="lwp_error", dimensions=("time",)
434
458
  ),
435
- "lwp": MetaData(ancillary_variables="lwp_error"),
436
459
  # Model variables
437
- "Tw": MetaData(long_name="Wet-bulb temperature", units="K", comment=COMMENTS["Tw"]),
438
- "model_time": MetaData(long_name="Model time UTC", calendar="standard"),
460
+ "Tw": MetaData(
461
+ long_name="Wet-bulb temperature",
462
+ units="K",
463
+ comment=COMMENTS["Tw"],
464
+ dimensions=("time", "height"),
465
+ ),
466
+ "model_time": MetaData(
467
+ long_name="Model time UTC",
468
+ calendar="standard",
469
+ dimensions=("model_time",),
470
+ ),
439
471
  "model_height": MetaData(
440
472
  long_name="Height of model variables above mean sea level",
441
473
  units="m",
442
474
  axis="Z",
475
+ dimensions=("model_height",),
476
+ ),
477
+ "temperature": MetaData(
478
+ long_name="Temperature", units="K", dimensions=("model_time", "model_height")
479
+ ),
480
+ "pressure": MetaData(
481
+ long_name="Pressure", units="Pa", dimensions=("model_time", "model_height")
443
482
  ),
444
483
  "vwind": MetaData(
445
484
  long_name="Meridional wind",
446
485
  units="m s-1",
486
+ dimensions=("model_time", "model_height"),
447
487
  ),
448
488
  "uwind": MetaData(
449
489
  long_name="Zonal wind",
450
490
  units="m s-1",
491
+ dimensions=("model_time", "model_height"),
492
+ ),
493
+ "q": MetaData(
494
+ long_name="Specific humidity",
495
+ units="1",
496
+ dimensions=("model_time", "model_height"),
451
497
  ),
452
- "q": MetaData(long_name="Specific humidity", units="1"),
453
498
  # MISC
454
499
  "category_bits": MetaData(
455
500
  long_name="Target categorization bits",
456
501
  comment=COMMENTS["category_bits"],
457
502
  definition=DEFINITIONS["category_bits"],
458
503
  units="1",
504
+ dimensions=("time", "height"),
459
505
  ),
460
506
  "quality_bits": MetaData(
461
507
  long_name="Data quality bits",
462
508
  comment=COMMENTS["quality_bits"],
463
509
  definition=DEFINITIONS["quality_bits"],
464
510
  units="1",
511
+ dimensions=("time", "height"),
465
512
  ),
466
513
  "radar_liquid_atten": MetaData(
467
514
  long_name="Two-way radar attenuation due to liquid water",
468
515
  units="dB",
469
516
  comment=COMMENTS["radar_liquid_atten"],
470
517
  references="ITU-R P.840-9",
518
+ dimensions=("time", "height"),
471
519
  ),
472
520
  "radar_rain_atten": MetaData(
473
521
  long_name="Two-way radar attenuation due to rain",
474
522
  units="dB",
475
523
  references="Crane, R. (1980)",
476
524
  comment=COMMENTS["radar_rain_atten"],
525
+ dimensions=("time", "height"),
477
526
  ),
478
527
  "radar_melting_atten": MetaData(
479
528
  long_name="Two-way radar attenuation due to melting ice",
480
529
  units="dB",
481
530
  references="Li, H., & Moisseev, D. (2019)",
482
531
  comment=COMMENTS["radar_melting_atten"],
532
+ dimensions=("time", "height"),
483
533
  ),
484
534
  "radar_gas_atten": MetaData(
485
535
  long_name="Two-way radar attenuation due to atmospheric gases",
486
536
  units="dB",
487
537
  comment=COMMENTS["radar_gas_atten"],
488
538
  references="ITU-R P.676-13",
539
+ dimensions=("time", "height"),
489
540
  ),
490
541
  "insect_prob": MetaData(
491
542
  long_name="Insect probability",
492
543
  units="1",
493
544
  comment=COMMENTS["insect_prob"],
545
+ dimensions=("time", "height"),
494
546
  ),
495
547
  "liquid_prob": MetaData(
496
548
  long_name="Liquid probability",
497
549
  units="1",
498
550
  comment=COMMENTS["liquid_prob"],
551
+ dimensions=("time", "height"),
499
552
  ),
500
553
  "rain_detected": MetaData(
501
554
  long_name="Rain detected",
502
555
  units="1",
503
556
  comment="1 = rain detected, 0 = no rain detected",
557
+ dimensions=("time",),
504
558
  ),
505
559
  }
@@ -173,8 +173,6 @@ def _find_model_type(file_name: str) -> str:
173
173
 
174
174
 
175
175
  def _find_number_of_valid_profiles(array: np.ndarray) -> int:
176
- n_good = 0
177
- for row in array:
178
- if not hasattr(row, "mask") or np.sum(row.mask.astype(int)) == 0:
179
- n_good += 1
180
- return n_good
176
+ mask = ma.getmaskarray(array)
177
+ all_masked_profiles = np.all(mask, axis=1)
178
+ return np.count_nonzero(~all_masked_profiles)
@@ -97,7 +97,7 @@ class CloudnetArray:
97
97
  """Overwrites existing instance attributes."""
98
98
  for key in attributes._fields: # To iterate namedtuple fields.
99
99
  data = getattr(attributes, key)
100
- if data:
100
+ if key == "dimensions" or data:
101
101
  setattr(self, key, data)
102
102
 
103
103
  def filter_isolated_pixels(self) -> None:
@@ -107,15 +107,18 @@ ATTRIBUTES = {
107
107
  long_name="Radar pitch angle",
108
108
  units="degree",
109
109
  standard_name="platform_roll",
110
+ dimensions=("time",),
110
111
  ),
111
112
  "radar_yaw": MetaData(
112
113
  long_name="Radar yaw angle",
113
114
  units="degree",
114
115
  standard_name="platform_yaw",
116
+ dimensions=("time",),
115
117
  ),
116
118
  "radar_roll": MetaData(
117
119
  long_name="Radar roll angle",
118
120
  units="degree",
119
121
  standard_name="platform_roll",
122
+ dimensions=("time",),
120
123
  ),
121
124
  }
@@ -8,6 +8,7 @@ from cloudnetpy.constants import G_TO_KG, MM_H_TO_M_S
8
8
  from cloudnetpy.exceptions import ValidTimeStampError
9
9
  from cloudnetpy.instruments.instruments import FMCW94
10
10
  from cloudnetpy.instruments.nc_radar import NcRadar
11
+ from cloudnetpy.instruments.rpg import RPG_ATTRIBUTES
11
12
  from cloudnetpy.metadata import MetaData
12
13
  from cloudnetpy.utils import bit_field_definition
13
14
 
@@ -97,7 +98,7 @@ class Bowtie(NcRadar):
97
98
  raise ValidTimeStampError
98
99
 
99
100
 
100
- ATTRIBUTES: dict = {
101
+ ATTRIBUTES = RPG_ATTRIBUTES | {
101
102
  "v": MetaData(
102
103
  long_name="Doppler velocity",
103
104
  units="m s-1",
@@ -107,6 +108,7 @@ ATTRIBUTES: dict = {
107
108
  "motion of the ship. A rolling average over 3 time steps has been\n"
108
109
  "applied to it."
109
110
  ),
111
+ dimensions=("time", "range"),
110
112
  ),
111
113
  "correction_bits": MetaData(
112
114
  long_name="Correction bits",
@@ -116,5 +118,6 @@ ATTRIBUTES: dict = {
116
118
  "This parameter is a bit field that indicates which corrections have\n"
117
119
  "been applied to radar measurements."
118
120
  ),
121
+ dimensions=("time", "range"),
119
122
  ),
120
123
  }
@@ -8,11 +8,11 @@ import numpy as np
8
8
  from ceilopyter import read_ct25k
9
9
  from numpy import ma
10
10
 
11
- from cloudnetpy import output, utils
11
+ from cloudnetpy import output
12
12
  from cloudnetpy.instruments.cl61d import Cl61d
13
13
  from cloudnetpy.instruments.lufft import LufftCeilo
14
14
  from cloudnetpy.instruments.vaisala import ClCeilo, Cs135, Ct25k
15
- from cloudnetpy.metadata import MetaData
15
+ from cloudnetpy.metadata import COMMON_ATTRIBUTES, MetaData
16
16
 
17
17
 
18
18
  def ceilo2nc(
@@ -205,92 +205,19 @@ ATTRIBUTES = {
205
205
  long_name="Lidar volume linear depolarisation ratio",
206
206
  units="1",
207
207
  comment="SNR-screened lidar volume linear depolarisation ratio at 910.55 nm.",
208
+ dimensions=("time", "range"),
208
209
  ),
209
210
  "depolarisation_raw": MetaData(
210
211
  long_name="Lidar volume linear depolarisation ratio",
211
212
  units="1",
212
213
  comment="SNR-screened lidar volume linear depolarisation ratio at 910.55 nm.",
213
- ),
214
- "scale": MetaData(long_name="Scale", units="%", comment="100 (%) is normal."),
215
- "software_level": MetaData(
216
- long_name="Software level ID",
217
- units="1",
218
- ),
219
- "laser_temperature": MetaData(
220
- long_name="Laser temperature",
221
- units="C",
222
- ),
223
- "window_transmission": MetaData(
224
- long_name="Window transmission estimate",
225
- units="%",
226
- ),
227
- "laser_energy": MetaData(
228
- long_name="Laser pulse energy",
229
- units="%",
230
- ),
231
- "background_light": MetaData(
232
- long_name="Background light",
233
- units="mV",
234
- comment="Measured at internal ADC input.",
235
- ),
236
- "backscatter_sum": MetaData(
237
- long_name="Sum of detected and normalized backscatter",
238
- units="sr-1",
239
- comment="Multiplied by scaling factor times 1e4.",
240
- ),
241
- "range_resolution": MetaData(
242
- long_name="Range resolution",
243
- units="m",
244
- ),
245
- "number_of_gates": MetaData(
246
- long_name="Number of range gates in profile",
247
- units="1",
248
- ),
249
- "unit_id": MetaData(
250
- long_name="Ceilometer unit number",
251
- units="1",
252
- ),
253
- "message_number": MetaData(
254
- long_name="Message number",
255
- units="1",
256
- ),
257
- "message_subclass": MetaData(
258
- long_name="Message subclass number",
259
- units="1",
260
- ),
261
- "detection_status": MetaData(
262
- long_name="Detection status",
263
- units="1",
264
- comment="From the internal software of the instrument.",
265
- ),
266
- "warning": MetaData(
267
- long_name="Warning and Alarm flag",
268
- units="1",
269
- definition=utils.status_field_definition(
270
- {
271
- "0": "Self-check OK",
272
- "W": "At least one warning on",
273
- "A": "At least one error active.",
274
- }
275
- ),
276
- ),
277
- "warning_flags": MetaData(
278
- long_name="Warning flags",
279
- units="1",
280
- ),
281
- "receiver_sensitivity": MetaData(
282
- long_name="Receiver sensitivity",
283
- units="%",
284
- comment="Expressed as % of nominal factory setting.",
285
- ),
286
- "window_contamination": MetaData(
287
- long_name="Window contamination",
288
- units="mV",
289
- comment="Measured at internal ADC input.",
214
+ dimensions=("time", "range"),
290
215
  ),
291
216
  "calibration_factor": MetaData(
292
217
  long_name="Attenuated backscatter calibration factor",
293
218
  units="1",
294
219
  comment="Calibration factor applied.",
220
+ dimensions=None,
295
221
  ),
222
+ "zenith_angle": COMMON_ATTRIBUTES["zenith_angle"]._replace(dimensions=None),
296
223
  }
@@ -164,13 +164,21 @@ ATTRIBUTES = {
164
164
  long_name="Radar reflectivity calibration offset",
165
165
  units="dBZ",
166
166
  comment="Calibration offset applied.",
167
+ dimensions=None,
167
168
  ),
168
169
  "range_offset": MetaData(
169
170
  long_name="Radar range offset",
170
171
  units="m",
171
172
  comment="Range offset applied.",
173
+ dimensions=None,
174
+ ),
175
+ "antenna_diameter": MetaData(
176
+ long_name="Antenna diameter", units="m", dimensions=("time",)
177
+ ),
178
+ "beamwidthV": MetaData(
179
+ long_name="Vertical angular beamwidth", units="degree", dimensions=("time",)
180
+ ),
181
+ "beamwidthH": MetaData(
182
+ long_name="Horizontal angular beamwidth", units="degree", dimensions=("time",)
172
183
  ),
173
- "antenna_diameter": MetaData(long_name="Antenna diameter", units="m"),
174
- "beamwidthV": MetaData(long_name="Vertical angular beamwidth", units="degree"),
175
- "beamwidthH": MetaData(long_name="Horizontal angular beamwidth", units="degree"),
176
184
  }