disdrodb 0.2.1__py3-none-any.whl → 0.4.0__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.
Files changed (313) hide show
  1. disdrodb/__init__.py +3 -1
  2. disdrodb/_config.py +2 -3
  3. disdrodb/_version.py +2 -2
  4. disdrodb/accessor/__init__.py +2 -1
  5. disdrodb/accessor/methods.py +10 -9
  6. disdrodb/api/checks.py +3 -7
  7. disdrodb/api/configs.py +1 -3
  8. disdrodb/api/create_directories.py +4 -6
  9. disdrodb/api/info.py +1 -3
  10. disdrodb/api/io.py +233 -32
  11. disdrodb/api/path.py +3 -7
  12. disdrodb/cli/disdrodb_check_metadata_archive.py +3 -2
  13. disdrodb/cli/disdrodb_check_products_options.py +45 -0
  14. disdrodb/cli/disdrodb_create_summary.py +54 -28
  15. disdrodb/cli/disdrodb_create_summary_station.py +41 -20
  16. disdrodb/cli/disdrodb_data_archive_directory.py +2 -3
  17. disdrodb/cli/disdrodb_download_archive.py +50 -30
  18. disdrodb/cli/disdrodb_download_metadata_archive.py +28 -16
  19. disdrodb/cli/disdrodb_download_station.py +58 -29
  20. disdrodb/cli/disdrodb_initialize_station.py +43 -23
  21. disdrodb/cli/disdrodb_metadata_archive_directory.py +2 -3
  22. disdrodb/cli/disdrodb_open_data_archive.py +17 -13
  23. disdrodb/cli/disdrodb_open_logs_directory.py +31 -21
  24. disdrodb/cli/disdrodb_open_metadata_archive.py +26 -13
  25. disdrodb/cli/disdrodb_open_metadata_directory.py +34 -23
  26. disdrodb/cli/disdrodb_open_product_directory.py +39 -23
  27. disdrodb/cli/disdrodb_open_readers_directory.py +2 -3
  28. disdrodb/cli/disdrodb_run.py +189 -0
  29. disdrodb/cli/disdrodb_run_l0.py +61 -70
  30. disdrodb/cli/disdrodb_run_l0_station.py +50 -55
  31. disdrodb/cli/disdrodb_run_l0a.py +53 -51
  32. disdrodb/cli/disdrodb_run_l0a_station.py +41 -40
  33. disdrodb/cli/disdrodb_run_l0b.py +51 -51
  34. disdrodb/cli/disdrodb_run_l0b_station.py +40 -39
  35. disdrodb/cli/disdrodb_run_l0c.py +56 -53
  36. disdrodb/cli/disdrodb_run_l0c_station.py +44 -41
  37. disdrodb/cli/disdrodb_run_l1.py +55 -51
  38. disdrodb/cli/disdrodb_run_l1_station.py +43 -40
  39. disdrodb/cli/disdrodb_run_l2e.py +56 -51
  40. disdrodb/cli/disdrodb_run_l2e_station.py +44 -40
  41. disdrodb/cli/disdrodb_run_l2m.py +55 -51
  42. disdrodb/cli/disdrodb_run_l2m_station.py +43 -40
  43. disdrodb/cli/disdrodb_run_station.py +184 -0
  44. disdrodb/cli/disdrodb_upload_archive.py +51 -42
  45. disdrodb/cli/disdrodb_upload_station.py +42 -36
  46. disdrodb/configs.py +20 -16
  47. disdrodb/constants.py +5 -2
  48. disdrodb/data_transfer/__init__.py +1 -3
  49. disdrodb/data_transfer/download_data.py +45 -61
  50. disdrodb/data_transfer/upload_data.py +7 -11
  51. disdrodb/data_transfer/zenodo.py +2 -4
  52. disdrodb/docs.py +1 -3
  53. disdrodb/etc/configs/attributes.yaml +52 -2
  54. disdrodb/etc/configs/encodings.yaml +45 -1
  55. disdrodb/etc/products/L0C/ODM470/global.yaml +5 -0
  56. disdrodb/etc/products/L0C/global.yaml +5 -0
  57. disdrodb/etc/products/L1/ODM470/global.yaml +6 -0
  58. disdrodb/etc/products/L1/global.yaml +0 -13
  59. disdrodb/etc/products/L2E/LPM/1MIN.yaml +1 -0
  60. disdrodb/etc/products/L2E/LPM/global.yaml +36 -0
  61. disdrodb/etc/products/L2E/LPM_V0/1MIN.yaml +1 -0
  62. disdrodb/etc/products/L2E/LPM_V0/global.yaml +36 -0
  63. disdrodb/etc/products/L2E/ODM470/1MIN.yaml +1 -0
  64. disdrodb/etc/products/L2E/ODM470/global.yaml +36 -0
  65. disdrodb/etc/products/L2E/PARSIVEL/1MIN.yaml +1 -0
  66. disdrodb/etc/products/L2E/PARSIVEL/global.yaml +36 -0
  67. disdrodb/etc/products/L2E/PARSIVEL2/1MIN.yaml +1 -0
  68. disdrodb/etc/products/L2E/PARSIVEL2/global.yaml +36 -0
  69. disdrodb/etc/products/L2E/PWS100/1MIN.yaml +1 -0
  70. disdrodb/etc/products/L2E/PWS100/global.yaml +36 -0
  71. disdrodb/etc/products/L2E/RD80/1MIN.yaml +19 -0
  72. disdrodb/etc/products/L2E/SWS250/1MIN.yaml +19 -0
  73. disdrodb/etc/products/L2E/global.yaml +16 -2
  74. disdrodb/fall_velocity/__init__.py +47 -0
  75. disdrodb/fall_velocity/graupel.py +484 -0
  76. disdrodb/fall_velocity/hail.py +288 -0
  77. disdrodb/{l1/fall_velocity.py → fall_velocity/rain.py} +265 -44
  78. disdrodb/issue/__init__.py +1 -3
  79. disdrodb/issue/checks.py +2 -3
  80. disdrodb/issue/reader.py +2 -3
  81. disdrodb/issue/writer.py +2 -5
  82. disdrodb/l0/__init__.py +2 -1
  83. disdrodb/l0/check_configs.py +36 -29
  84. disdrodb/l0/check_standards.py +1 -4
  85. disdrodb/l0/configs/LPM/l0a_encodings.yml +17 -17
  86. disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +55 -55
  87. disdrodb/l0/configs/LPM/l0b_encodings.yml +17 -17
  88. disdrodb/l0/configs/LPM/raw_data_format.yml +17 -17
  89. disdrodb/l0/configs/LPM_V0/l0a_encodings.yml +2 -2
  90. disdrodb/l0/configs/LPM_V0/l0b_cf_attrs.yml +2 -2
  91. disdrodb/l0/configs/LPM_V0/l0b_encodings.yml +2 -2
  92. disdrodb/l0/configs/LPM_V0/raw_data_format.yml +2 -2
  93. disdrodb/l0/configs/ODM470/bins_diameter.yml +643 -0
  94. disdrodb/l0/configs/ODM470/bins_velocity.yml +0 -0
  95. disdrodb/l0/configs/ODM470/l0a_encodings.yml +11 -0
  96. disdrodb/l0/configs/ODM470/l0b_cf_attrs.yml +46 -0
  97. disdrodb/l0/configs/ODM470/l0b_encodings.yml +106 -0
  98. disdrodb/l0/configs/ODM470/raw_data_format.yml +111 -0
  99. disdrodb/l0/configs/PARSIVEL/l0b_cf_attrs.yml +1 -1
  100. disdrodb/l0/l0_reader.py +2 -3
  101. disdrodb/l0/l0a_processing.py +6 -8
  102. disdrodb/l0/l0b_nc_processing.py +3 -6
  103. disdrodb/l0/l0b_processing.py +2 -16
  104. disdrodb/l0/l0c_processing.py +29 -12
  105. disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +2 -1
  106. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +18 -18
  107. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +18 -18
  108. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +18 -18
  109. disdrodb/l0/readers/LPM/GERMANY/DWD.py +244 -63
  110. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +65 -23
  111. disdrodb/l0/readers/LPM/ITALY/GID_LPM_AQ.py +277 -0
  112. disdrodb/l0/readers/LPM/ITALY/GID_LPM_PI.py +19 -18
  113. disdrodb/l0/readers/LPM/ITALY/GID_LPM_T.py +23 -19
  114. disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +19 -21
  115. disdrodb/l0/readers/LPM/KIT/CHWALA.py +19 -20
  116. disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_LPM_NC.py +1 -1
  117. disdrodb/l0/readers/LPM/NETHERLANDS/DELFT_RWANDA_LPM_NC.py +18 -18
  118. disdrodb/l0/readers/LPM/NORWAY/HAUKELISETER_LPM.py +19 -20
  119. disdrodb/l0/readers/LPM/NORWAY/NMBU_LPM.py +19 -20
  120. disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +19 -20
  121. disdrodb/l0/readers/LPM/SLOVENIA/UL.py +19 -20
  122. disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +19 -20
  123. disdrodb/l0/readers/LPM/UK/DIVEN.py +1 -1
  124. disdrodb/l0/readers/LPM/UK/WITHWORTH_LPM.py +19 -20
  125. disdrodb/l0/readers/LPM/USA/CHARLESTON.py +19 -20
  126. disdrodb/l0/readers/LPM/USA/DEVEX.py +255 -0
  127. disdrodb/l0/readers/LPM_V0/BELGIUM/ULIEGE.py +3 -5
  128. disdrodb/l0/readers/LPM_V0/ITALY/GID_LPM_V0.py +4 -3
  129. disdrodb/l0/readers/ODM470/OCEAN/OCEANRAIN.py +124 -0
  130. disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +1 -1
  131. disdrodb/l0/readers/PARSIVEL/BASQUECOUNTRY/EUSKALMET_OTT.py +2 -1
  132. disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +2 -3
  133. disdrodb/l0/readers/PARSIVEL/EPFL/ARCTIC_2021.py +2 -1
  134. disdrodb/l0/readers/PARSIVEL/EPFL/COMMON_2011.py +2 -1
  135. disdrodb/l0/readers/PARSIVEL/EPFL/DAVOS_2009_2011.py +2 -1
  136. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_2009.py +2 -1
  137. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2008.py +2 -1
  138. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +2 -1
  139. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2011.py +2 -1
  140. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2012.py +2 -1
  141. disdrodb/l0/readers/PARSIVEL/EPFL/GENEPI_2007.py +2 -1
  142. disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007.py +2 -1
  143. disdrodb/l0/readers/PARSIVEL/EPFL/GRAND_ST_BERNARD_2007_2.py +2 -1
  144. disdrodb/l0/readers/PARSIVEL/EPFL/HPICONET_2010.py +2 -1
  145. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP2.py +2 -1
  146. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +2 -1
  147. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP4.py +2 -1
  148. disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2018.py +1 -1
  149. disdrodb/l0/readers/PARSIVEL/EPFL/LOCARNO_2019.py +1 -1
  150. disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +2 -1
  151. disdrodb/l0/readers/PARSIVEL/EPFL/PARSIVEL_2007.py +2 -1
  152. disdrodb/l0/readers/PARSIVEL/EPFL/PLATO_2019.py +1 -1
  153. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +2 -1
  154. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019_WJF.py +2 -1
  155. disdrodb/l0/readers/PARSIVEL/EPFL/RIETHOLZBACH_2011.py +2 -1
  156. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +2 -1
  157. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +2 -1
  158. disdrodb/l0/readers/PARSIVEL/EPFL/UNIL_2022.py +2 -1
  159. disdrodb/l0/readers/PARSIVEL/JAPAN/JMA.py +1 -1
  160. disdrodb/l0/readers/PARSIVEL/KOREA/ICEPOP_MSC.py +159 -0
  161. disdrodb/l0/readers/PARSIVEL/NASA/LPVEX.py +1 -1
  162. disdrodb/l0/readers/PARSIVEL/NASA/MC3E.py +1 -1
  163. disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +1 -1
  164. disdrodb/l0/readers/PARSIVEL/NCAR/OWLES_MIPS.py +1 -1
  165. disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +1 -1
  166. disdrodb/l0/readers/PARSIVEL/NCAR/PLOWS_MIPS.py +1 -1
  167. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +1 -1
  168. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +1 -3
  169. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +1 -3
  170. disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +2 -1
  171. disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +2 -1
  172. disdrodb/l0/readers/PARSIVEL2/BASQUECOUNTRY/EUSKALMET_OTT2.py +2 -1
  173. disdrodb/l0/readers/PARSIVEL2/BELGIUM/ILVO.py +2 -3
  174. disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +1 -1
  175. disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +1 -1
  176. disdrodb/l0/readers/PARSIVEL2/CANADA/UQAM_NC.py +1 -1
  177. disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +1 -1
  178. disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_nc.py +2 -1
  179. disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +2 -1
  180. disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +1 -1
  181. disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +2 -3
  182. disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +2 -2
  183. disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +1 -3
  184. disdrodb/l0/readers/PARSIVEL2/GREECE/NOA.py +4 -3
  185. disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +1 -3
  186. disdrodb/l0/readers/PARSIVEL2/ITALY/HYDROX.py +6 -3
  187. disdrodb/l0/readers/PARSIVEL2/JAPAN/PRECIP.py +1 -1
  188. disdrodb/l0/readers/PARSIVEL2/KIT/BURKINA_FASO.py +1 -1
  189. disdrodb/l0/readers/PARSIVEL2/KIT/TEAMX.py +1 -1
  190. disdrodb/l0/readers/PARSIVEL2/KOREA/ICEPOP_MSC.py +161 -0
  191. disdrodb/l0/readers/PARSIVEL2/KOREA/ICEPOP_UCLM.py +126 -0
  192. disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +2 -1
  193. disdrodb/l0/readers/PARSIVEL2/MPI/BCO_PARSIVEL2.py +1 -1
  194. disdrodb/l0/readers/PARSIVEL2/MPI/BOWTIE.py +1 -1
  195. disdrodb/l0/readers/PARSIVEL2/NASA/APU.py +3 -1
  196. disdrodb/l0/readers/PARSIVEL2/NASA/NSSTC.py +1 -1
  197. disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +2 -1
  198. disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +1 -1
  199. disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_MIPS.py +1 -1
  200. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +2 -1
  201. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_PIPS.py +2 -1
  202. disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +1 -1
  203. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +1 -1
  204. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +1 -1
  205. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py +2 -3
  206. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +1 -1
  207. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +2 -1
  208. disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT_NC.py +1 -1
  209. disdrodb/l0/readers/PARSIVEL2/NORWAY/UIB.py +10 -2
  210. disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PAGASA.py +2 -3
  211. disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +1 -1
  212. disdrodb/l0/readers/PARSIVEL2/SPAIN/CR1000DL.py +1 -1
  213. disdrodb/l0/readers/PARSIVEL2/SPAIN/GRANADA.py +2 -3
  214. disdrodb/l0/readers/PARSIVEL2/SPAIN/LIAISE.py +1 -1
  215. disdrodb/l0/readers/PARSIVEL2/SWEDEN/SMHI.py +2 -1
  216. disdrodb/l0/readers/PARSIVEL2/USA/CSU.py +1 -1
  217. disdrodb/l0/readers/PARSIVEL2/USA/CW3E.py +2 -1
  218. disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +2 -3
  219. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +2 -3
  220. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100_SIRTA.py +2 -1
  221. disdrodb/l0/readers/RD80/BRAZIL/ATTO_RD80.py +1 -3
  222. disdrodb/l0/readers/RD80/BRAZIL/CHUVA_RD80.py +1 -3
  223. disdrodb/l0/readers/RD80/BRAZIL/GOAMAZON_RD80.py +1 -3
  224. disdrodb/l0/readers/RD80/NCAR/CINDY_2011_RD80.py +1 -3
  225. disdrodb/l0/readers/RD80/NCAR/RELAMPAGO_RD80.py +1 -3
  226. disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +2 -3
  227. disdrodb/l0/readers/SWS250/BELGIUM/KMI.py +2 -3
  228. disdrodb/l0/readers/template_reader_raw_netcdf_data.py +2 -3
  229. disdrodb/l0/readers/template_reader_raw_text_data.py +2 -3
  230. disdrodb/l0/standards.py +4 -5
  231. disdrodb/l0/template_tools.py +7 -11
  232. disdrodb/l1/__init__.py +2 -1
  233. disdrodb/l1/classification.py +914 -0
  234. disdrodb/l1/processing.py +36 -106
  235. disdrodb/l1/resampling.py +13 -3
  236. disdrodb/l1_env/__init__.py +1 -1
  237. disdrodb/l1_env/routines.py +7 -6
  238. disdrodb/l2/__init__.py +2 -1
  239. disdrodb/l2/empirical_dsd.py +58 -31
  240. disdrodb/l2/processing.py +327 -61
  241. disdrodb/metadata/checks.py +10 -13
  242. disdrodb/metadata/download.py +5 -4
  243. disdrodb/metadata/geolocation.py +3 -4
  244. disdrodb/metadata/info.py +3 -5
  245. disdrodb/metadata/manipulation.py +1 -3
  246. disdrodb/metadata/reader.py +1 -3
  247. disdrodb/metadata/search.py +1 -4
  248. disdrodb/metadata/standards.py +1 -3
  249. disdrodb/metadata/writer.py +1 -3
  250. disdrodb/physics/__init__.py +17 -0
  251. disdrodb/physics/atmosphere.py +273 -0
  252. disdrodb/physics/water.py +131 -0
  253. disdrodb/physics/wrappers.py +63 -0
  254. disdrodb/psd/__init__.py +1 -2
  255. disdrodb/psd/fitting.py +23 -9
  256. disdrodb/psd/models.py +2 -1
  257. disdrodb/routines/__init__.py +6 -1
  258. disdrodb/routines/l0.py +39 -25
  259. disdrodb/routines/l1.py +23 -16
  260. disdrodb/routines/l2.py +12 -9
  261. disdrodb/routines/options.py +117 -73
  262. disdrodb/routines/options_validation.py +728 -0
  263. disdrodb/routines/wrappers.py +460 -40
  264. disdrodb/scattering/__init__.py +1 -2
  265. disdrodb/scattering/axis_ratio.py +6 -6
  266. disdrodb/scattering/permittivity.py +9 -8
  267. disdrodb/scattering/routines.py +33 -15
  268. disdrodb/summary/__init__.py +1 -1
  269. disdrodb/summary/routines.py +95 -30
  270. disdrodb/utils/__init__.py +1 -1
  271. disdrodb/utils/archiving.py +18 -10
  272. disdrodb/utils/attrs.py +7 -5
  273. disdrodb/utils/cli.py +8 -10
  274. disdrodb/utils/compression.py +10 -13
  275. disdrodb/utils/coords.py +45 -0
  276. disdrodb/utils/dask.py +7 -5
  277. disdrodb/utils/dataframe.py +5 -6
  278. disdrodb/utils/decorators.py +3 -4
  279. disdrodb/utils/dict.py +1 -1
  280. disdrodb/utils/directories.py +5 -7
  281. disdrodb/utils/encoding.py +4 -5
  282. disdrodb/utils/event.py +1 -1
  283. disdrodb/utils/list.py +1 -3
  284. disdrodb/utils/logger.py +1 -3
  285. disdrodb/utils/manipulations.py +175 -4
  286. disdrodb/utils/pydantic.py +81 -0
  287. disdrodb/utils/routines.py +2 -3
  288. disdrodb/utils/subsetting.py +1 -1
  289. disdrodb/utils/time.py +6 -4
  290. disdrodb/utils/warnings.py +2 -3
  291. disdrodb/utils/writer.py +5 -3
  292. disdrodb/utils/xarray.py +31 -3
  293. disdrodb/utils/yaml.py +1 -3
  294. disdrodb/viz/__init__.py +1 -1
  295. disdrodb/viz/plots.py +193 -18
  296. {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/METADATA +5 -4
  297. disdrodb-0.4.0.dist-info/RECORD +361 -0
  298. {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/entry_points.txt +3 -0
  299. disdrodb/etc/products/L1/1MIN.yaml +0 -13
  300. disdrodb/etc/products/L1/LPM/1MIN.yaml +0 -13
  301. disdrodb/etc/products/L1/LPM_V0/1MIN.yaml +0 -13
  302. disdrodb/etc/products/L1/PARSIVEL/1MIN.yaml +0 -13
  303. disdrodb/etc/products/L1/PARSIVEL2/1MIN.yaml +0 -13
  304. disdrodb/etc/products/L1/PWS100/1MIN.yaml +0 -13
  305. disdrodb/etc/products/L1/RD80/1MIN.yaml +0 -13
  306. disdrodb/etc/products/L1/SWS250/1MIN.yaml +0 -13
  307. disdrodb/etc/products/L2M/10MIN.yaml +0 -12
  308. disdrodb/l1/beard_model.py +0 -662
  309. disdrodb/l1/filters.py +0 -205
  310. disdrodb-0.2.1.dist-info/RECORD +0 -329
  311. {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/WHEEL +0 -0
  312. {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/licenses/LICENSE +0 -0
  313. {disdrodb-0.2.1.dist-info → disdrodb-0.4.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,106 @@
1
+ precipitation_rate:
2
+ dtype: float32
3
+ zlib: true
4
+ complevel: 3
5
+ shuffle: true
6
+ fletcher32: false
7
+ contiguous: false
8
+ chunksizes: 43200
9
+ precip_flag:
10
+ dtype: int8
11
+ zlib: true
12
+ complevel: 3
13
+ shuffle: true
14
+ fletcher32: false
15
+ contiguous: false
16
+ chunksizes: 43200
17
+ _FillValue: 127
18
+ reference_voltage:
19
+ dtype: float32
20
+ zlib: true
21
+ complevel: 3
22
+ shuffle: true
23
+ fletcher32: false
24
+ contiguous: false
25
+ chunksizes: 43200
26
+ weather_code_synop_4677:
27
+ dtype: uint8
28
+ zlib: true
29
+ complevel: 3
30
+ shuffle: true
31
+ fletcher32: false
32
+ contiguous: false
33
+ chunksizes: 5000
34
+ _FillValue: 255
35
+ relative_wind_speed:
36
+ dtype: uint16
37
+ scale_factor: 0.1
38
+ add_offset: -99.9
39
+ zlib: true
40
+ complevel: 3
41
+ shuffle: true
42
+ fletcher32: false
43
+ contiguous: false
44
+ _FillValue: 65535
45
+ chunksizes: 43200
46
+ relative_wind_direction:
47
+ dtype: uint16
48
+ zlib: true
49
+ complevel: 3
50
+ shuffle: true
51
+ fletcher32: false
52
+ contiguous: false
53
+ _FillValue: 65535
54
+ chunksizes: 43200
55
+ raw_drop_number:
56
+ dtype: uint16
57
+ zlib: true
58
+ complevel: 3
59
+ shuffle: true
60
+ fletcher32: false
61
+ contiguous: false
62
+ _FillValue: 65535
63
+ chunksizes:
64
+ - 43200
65
+ - 128
66
+ air_temperature:
67
+ dtype: uint16
68
+ scale_factor: 0.1
69
+ add_offset: -99.9
70
+ zlib: true
71
+ complevel: 3
72
+ shuffle: true
73
+ fletcher32: false
74
+ contiguous: false
75
+ _FillValue: 65535
76
+ chunksizes: 43200
77
+ relative_humidity:
78
+ dtype: uint16
79
+ scale_factor: 0.01
80
+ zlib: true
81
+ complevel: 3
82
+ shuffle: true
83
+ fletcher32: false
84
+ contiguous: false
85
+ _FillValue: 65535
86
+ chunksizes: 43200
87
+ wind_speed:
88
+ dtype: uint16
89
+ scale_factor: 0.1
90
+ add_offset: -99.9
91
+ zlib: true
92
+ complevel: 3
93
+ shuffle: true
94
+ fletcher32: false
95
+ contiguous: false
96
+ _FillValue: 65535
97
+ chunksizes: 43200
98
+ wind_direction:
99
+ dtype: uint16
100
+ zlib: true
101
+ complevel: 3
102
+ shuffle: true
103
+ fletcher32: false
104
+ contiguous: false
105
+ _FillValue: 65535
106
+ chunksizes: 43200
@@ -0,0 +1,111 @@
1
+ precipitation_rate:
2
+ n_digits: 6
3
+ n_characters: 7
4
+ n_decimals: 3
5
+ n_naturals: 3
6
+ data_range:
7
+ - 0.0
8
+ - 999.999
9
+ nan_flags: null
10
+ field_number: "1"
11
+ reference_voltage:
12
+ n_digits: 6
13
+ n_characters: 7
14
+ n_decimals: 3
15
+ n_naturals: 3
16
+ data_range:
17
+ - 0.0
18
+ - 5.5
19
+ nan_flags: null
20
+ field_number: "2"
21
+ relative_wind_speed:
22
+ n_digits: 6
23
+ n_characters: 7
24
+ n_decimals: 3
25
+ n_naturals: 3
26
+ data_range:
27
+ - 0.0
28
+ - 100
29
+ nan_flags: null
30
+ field_number: "3"
31
+ relative_wind_direction:
32
+ n_digits: 6
33
+ n_characters: 7
34
+ n_decimals: 3
35
+ n_naturals: 3
36
+ data_range:
37
+ - 0.0
38
+ - 360
39
+ nan_flags: null
40
+ field_number: "4"
41
+ precip_flag:
42
+ n_digits: 1
43
+ n_characters: 1
44
+ n_decimals: 0
45
+ n_naturals: 0
46
+ data_range:
47
+ - -1
48
+ - 5
49
+ nan_flags: null
50
+ field_number: "5"
51
+ weather_code_synop_4677:
52
+ n_digits: 2
53
+ n_characters: 2
54
+ n_decimals: 0
55
+ n_naturals: 2
56
+ data_range:
57
+ - 0
58
+ - 90
59
+ nan_flags: null
60
+ field_number: "6"
61
+ raw_drop_number:
62
+ n_digits: 1317
63
+ n_characters: 1756
64
+ n_decimals: 1317
65
+ n_naturals: 0
66
+ data_range: null
67
+ nan_flags: null
68
+ dimension_order:
69
+ - diameter_bin_center
70
+ n_values: 128
71
+ field_number: "81"
72
+ air_temperature:
73
+ n_digits: 4
74
+ n_characters: 5
75
+ n_decimals: 1
76
+ n_naturals: 2
77
+ data_range:
78
+ - -40
79
+ - 70
80
+ nan_flags: 99999
81
+ field_number: "521"
82
+ relative_humidity:
83
+ n_digits: 5
84
+ n_characters: 5
85
+ n_decimals: 0
86
+ n_naturals: 5
87
+ data_range:
88
+ - 0
89
+ - 99999
90
+ nan_flags: 99999
91
+ field_number: "522"
92
+ wind_speed:
93
+ n_digits: 3
94
+ n_characters: 4
95
+ n_decimals: 1
96
+ n_naturals: 2
97
+ data_range:
98
+ - 0
99
+ - 60
100
+ nan_flags: null
101
+ field_number: "523"
102
+ wind_direction:
103
+ n_digits: 3
104
+ n_characters: 3
105
+ n_decimals: 0
106
+ n_naturals: 3
107
+ data_range:
108
+ - 0
109
+ - 360
110
+ nan_flags: 999
111
+ field_number: "524"
@@ -121,7 +121,7 @@ reflectivity_16bit:
121
121
  raw_drop_concentration:
122
122
  description: Particle number concentrations per diameter class
123
123
  long_name: Raw drop concentration
124
- units: 1/(m3*mm)
124
+ units: log10 1/(m3*mm)
125
125
  raw_drop_average_velocity:
126
126
  description: Average particle velocities for each diameter class
127
127
  long_name: Raw drop average velocity
disdrodb/l0/l0_reader.py CHANGED
@@ -1,7 +1,5 @@
1
- #!/usr/bin/env python3
2
-
3
1
  # -----------------------------------------------------------------------------.
4
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
5
3
  #
6
4
  # This program is free software: you can redistribute it and/or modify
7
5
  # it under the terms of the GNU General Public License as published by
@@ -17,6 +15,7 @@
17
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
16
  # -----------------------------------------------------------------------------.
19
17
  """Define DISDRODB L0 readers routines."""
18
+
20
19
  import inspect
21
20
  import logging
22
21
  import os
@@ -1,7 +1,5 @@
1
- #!/usr/bin/env python3
2
-
3
1
  # -----------------------------------------------------------------------------.
4
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
5
3
  #
6
4
  # This program is free software: you can redistribute it and/or modify
7
5
  # it under the terms of the GNU General Public License as published by
@@ -20,11 +18,9 @@
20
18
 
21
19
  import logging
22
20
  import os
23
- from typing import Union
24
21
 
25
22
  import numpy as np
26
23
  import pandas as pd
27
- import pyarrow.parquet as pq
28
24
 
29
25
  from disdrodb.l0.check_standards import check_l0a_column_names, check_l0a_standards
30
26
  from disdrodb.l0.l0b_processing import infer_split_str
@@ -771,7 +767,7 @@ def concatenate_dataframe(list_df: list, logger=None, verbose: bool = False) ->
771
767
 
772
768
 
773
769
  def read_l0a_dataframe(
774
- filepaths: Union[str, list],
770
+ filepaths: str | list,
775
771
  debugging_mode: bool = False,
776
772
  ) -> pd.DataFrame:
777
773
  """Read DISDRODB L0A Apache Parquet file(s).
@@ -792,6 +788,8 @@ def read_l0a_dataframe(
792
788
  L0A Dataframe.
793
789
 
794
790
  """
791
+ from disdrodb.api.io import open_parquet_files
792
+
795
793
  # ----------------------------------------
796
794
  # Check filepaths validity
797
795
  if not isinstance(filepaths, (list, str)):
@@ -808,7 +806,7 @@ def read_l0a_dataframe(
808
806
 
809
807
  # ---------------------------------------------------
810
808
  # Define the list of dataframe
811
- df = pq.ParquetDataset(filepaths).read().to_pandas()
809
+ df = open_parquet_files(filepaths, use_threads=False)
812
810
 
813
811
  # Reduce rows
814
812
  if debugging_mode:
@@ -834,7 +832,7 @@ def read_l0a_dataframe(
834
832
 
835
833
 
836
834
  def generate_l0a(
837
- filepaths: Union[list, str],
835
+ filepaths: list | str,
838
836
  reader,
839
837
  sensor_name,
840
838
  issue_dict=None,
@@ -1,7 +1,5 @@
1
- #!/usr/bin/env python3
2
-
3
1
  # -----------------------------------------------------------------------------.
4
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
5
3
  #
6
4
  # This program is free software: you can redistribute it and/or modify
7
5
  # it under the terms of the GNU General Public License as published by
@@ -19,7 +17,6 @@
19
17
  """Functions to process DISDRODB raw netCDF files into DISDRODB L0B netCDF files."""
20
18
 
21
19
  import logging
22
- from typing import Union
23
20
 
24
21
  import numpy as np
25
22
 
@@ -50,7 +47,7 @@ def _check_dict_names_validity(dict_names, sensor_name):
50
47
  keys = np.array(list(dict_names.keys()))
51
48
  values = np.array(list(dict_names.values()))
52
49
  # Get invalid keys
53
- invalid_keys = keys[np.isin(values, valid_names, invert=True)]
50
+ invalid_keys = keys[np.isin(values, valid_names, invert=True)].tolist()
54
51
  if len(invalid_keys) > 0:
55
52
  # Report invalid keys and raise error
56
53
  invalid_dict = {k: dict_names[k] for k in invalid_keys}
@@ -536,7 +533,7 @@ def open_raw_netcdf_file(
536
533
 
537
534
 
538
535
  def generate_l0b_from_nc(
539
- filepaths: Union[list, str],
536
+ filepaths: list | str,
540
537
  reader,
541
538
  sensor_name,
542
539
  metadata,
@@ -1,7 +1,5 @@
1
- #!/usr/bin/env python3
2
-
3
1
  # -----------------------------------------------------------------------------.
4
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
5
3
  #
6
4
  # This program is free software: you can redistribute it and/or modify
7
5
  # it under the terms of the GNU General Public License as published by
@@ -42,6 +40,7 @@ from disdrodb.utils.attrs import (
42
40
  set_coordinate_attributes,
43
41
  set_disdrodb_attrs,
44
42
  )
43
+ from disdrodb.utils.coords import add_dataset_crs_coords
45
44
  from disdrodb.utils.encoding import set_encodings
46
45
  from disdrodb.utils.logger import log_info
47
46
  from disdrodb.utils.time import ensure_sorted_by_time
@@ -393,19 +392,6 @@ def set_variable_attributes(ds: xr.Dataset, sensor_name: str) -> xr.Dataset:
393
392
  return ds
394
393
 
395
394
 
396
- def add_dataset_crs_coords(ds):
397
- """Add the CRS coordinate to the xr.Dataset."""
398
- # TODO: define CF-compliant CRS !
399
- # - CF compliant
400
- # - wkt
401
- # - add grid_mapping name
402
- # -->
403
- # attrs["EPSG"] = 4326
404
- # attrs["proj4_string"] = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
405
- ds = ds.assign_coords({"crs": ["WGS84"]})
406
- return ds
407
-
408
-
409
395
  ####--------------------------------------------------------------------------.
410
396
  #### L0B Raw DataFrame Preprocessing
411
397
 
@@ -1,7 +1,5 @@
1
- #!/usr/bin/env python3
2
-
3
1
  # -----------------------------------------------------------------------------.
4
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
5
3
  #
6
4
  # This program is free software: you can redistribute it and/or modify
7
5
  # it under the terms of the GNU General Public License as published by
@@ -17,6 +15,7 @@
17
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
16
  # -----------------------------------------------------------------------------.
19
17
  """Functions to process DISDRODB L0B files into DISDRODB L0C netCDF files."""
18
+
20
19
  import logging
21
20
 
22
21
  import numpy as np
@@ -52,7 +51,7 @@ def drop_timesteps_with_invalid_sample_interval(ds, measurement_intervals, verbo
52
51
  # Log information for each invalid timestep
53
52
  invalid_timesteps = pd.to_datetime(timesteps[indices_invalid_sample_interval]).strftime("%Y-%m-%d %H:%M:%S")
54
53
  invalid_sample_intervals = sample_interval[indices_invalid_sample_interval]
55
- for tt, ss in zip(invalid_timesteps, invalid_sample_intervals):
54
+ for tt, ss in zip(invalid_timesteps, invalid_sample_intervals, strict=True):
56
55
  msg = f"Unexpected sampling interval ({ss} s) at {tt}. The measurement has been dropped."
57
56
  log_warning(logger=logger, msg=msg, verbose=verbose)
58
57
  # Remove timesteps with invalid sample intervals
@@ -340,6 +339,20 @@ def get_problematic_timestep_indices(timesteps, sample_interval):
340
339
  return idx_previous_missing, idx_next_missing, idx_isolated_missing
341
340
 
342
341
 
342
+ def nearest_expected_times(times, expected_times):
343
+ """Return index of nearest expected time."""
344
+ # both must be sorted ascending
345
+ idx = np.searchsorted(expected_times, times)
346
+ idx = np.clip(idx, 1, len(expected_times) - 1)
347
+
348
+ # Compare distance to the previous vs next expected time
349
+ prev = expected_times[idx - 1]
350
+ next_ = expected_times[idx]
351
+ choose_next = (times - prev) > (next_ - times)
352
+ nearest = np.where(choose_next, next_, prev)
353
+ return nearest
354
+
355
+
343
356
  def regularize_timesteps(ds, sample_interval, robust=False, add_quality_flag=True, logger=None, verbose=True):
344
357
  """Ensure timesteps match with the sample_interval.
345
358
 
@@ -364,13 +377,16 @@ def regularize_timesteps(ds, sample_interval, robust=False, add_quality_flag=Tru
364
377
  times = times.to_numpy(dtype="M8[s]")
365
378
  expected_times = expected_times.to_numpy(dtype="M8[s]")
366
379
 
380
+ # Vectorized mapping of observed times → nearest expected times
381
+ adjusted_times = nearest_expected_times(times, expected_times)
382
+
367
383
  # Map original times to the nearest expected times
368
- # Calculate the difference between original times and expected times
369
- time_deltas = np.abs(times - expected_times[:, None]).astype(int)
384
+ # # Calculate the difference between original times and expected times
385
+ # time_deltas = np.abs(times - expected_times[:, None]).astype(int)
370
386
 
371
- # Find the index of the closest expected time for each original time
372
- nearest_indices = np.argmin(time_deltas, axis=0)
373
- adjusted_times = expected_times[nearest_indices]
387
+ # # Find the index of the closest expected time for each original time
388
+ # nearest_indices = np.argmin(time_deltas, axis=0)
389
+ # adjusted_times = expected_times[nearest_indices]
374
390
 
375
391
  # Check for duplicates in adjusted times
376
392
  unique_times, counts = np.unique(adjusted_times, return_counts=True)
@@ -466,10 +482,10 @@ def regularize_timesteps(ds, sample_interval, robust=False, add_quality_flag=Tru
466
482
  # qc_flag[-1] = 0
467
483
 
468
484
  # Add time quality flag variable
469
- ds["time_qc"] = xr.DataArray(qc_flag, dims="time")
485
+ ds["qc_time"] = xr.DataArray(qc_flag, dims="time")
470
486
 
471
- # Add CF attributes for time_qc
472
- ds["time_qc"].attrs = {
487
+ # Add CF attributes for qc_time
488
+ ds["qc_time"].attrs = {
473
489
  "long_name": "time quality flag",
474
490
  "standard_name": "status_flag",
475
491
  "units": "1",
@@ -587,6 +603,7 @@ def _finalize_l0c_dataset(ds, sample_interval, sensor_name, verbose=True, logger
587
603
  ds = add_sample_interval(ds, sample_interval=sample_interval)
588
604
 
589
605
  # Regularize timesteps (for trailing seconds)
606
+ # --> This remove time encoding
590
607
  ds = regularize_timesteps(
591
608
  ds,
592
609
  sample_interval=sample_interval,
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
3
+ # Copyright (c) 2021-2026 DISDRODB developers
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  # -----------------------------------------------------------------------------.
18
18
  """Reader for ARM Thies LPM sensor."""
19
+
19
20
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
20
21
  from disdrodb.l0.l0b_nc_processing import open_raw_netcdf_file, replace_custom_nan_flags, standardize_raw_dataset
21
22
 
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
3
+ # Copyright (c) 2021-2026 DISDRODB developers
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU General Public License as published by
@@ -176,23 +176,23 @@ def reader(
176
176
  "number_particles_no_hydrometeor",
177
177
  "number_particles_no_hydrometeor_internal_data",
178
178
  "number_particles_unknown_classification",
179
- "number_particles_unknown_classification_internal_data",
180
- "number_particles_class_1",
181
- "number_particles_class_1_internal_data",
182
- "number_particles_class_2",
183
- "number_particles_class_2_internal_data",
184
- "number_particles_class_3",
185
- "number_particles_class_3_internal_data",
186
- "number_particles_class_4",
187
- "number_particles_class_4_internal_data",
188
- "number_particles_class_5",
189
- "number_particles_class_5_internal_data",
190
- "number_particles_class_6",
191
- "number_particles_class_6_internal_data",
192
- "number_particles_class_7",
193
- "number_particles_class_7_internal_data",
194
- "number_particles_class_8",
195
- "number_particles_class_8_internal_data",
179
+ "total_gross_volume_unknown_classification",
180
+ "number_particles_hail",
181
+ "total_gross_volume_hail",
182
+ "number_particles_solid_precipitation",
183
+ "total_gross_volume_solid_precipitation",
184
+ "number_particles_large_pellet",
185
+ "total_gross_volume_large_pellet",
186
+ "number_particles_small_pellet",
187
+ "total_gross_volume_small_pellet",
188
+ "number_particles_snowgrain",
189
+ "total_gross_volume_snowgrain",
190
+ "number_particles_rain",
191
+ "total_gross_volume_rain",
192
+ "number_particles_small_rain",
193
+ "total_gross_volume_small_rain",
194
+ "number_particles_drizzle",
195
+ "total_gross_volume_drizzle",
196
196
  "number_particles_class_9",
197
197
  "number_particles_class_9_internal_data",
198
198
  "TO_BE_FURTHER_PROCESSED",
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
3
+ # Copyright (c) 2021-2026 DISDRODB developers
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU General Public License as published by
@@ -135,23 +135,23 @@ def reader(
135
135
  "number_particles_no_hydrometeor",
136
136
  "number_particles_no_hydrometeor_internal_data",
137
137
  "number_particles_unknown_classification",
138
- "number_particles_unknown_classification_internal_data",
139
- "number_particles_class_1",
140
- "number_particles_class_1_internal_data",
141
- "number_particles_class_2",
142
- "number_particles_class_2_internal_data",
143
- "number_particles_class_3",
144
- "number_particles_class_3_internal_data",
145
- "number_particles_class_4",
146
- "number_particles_class_4_internal_data",
147
- "number_particles_class_5",
148
- "number_particles_class_5_internal_data",
149
- "number_particles_class_6",
150
- "number_particles_class_6_internal_data",
151
- "number_particles_class_7",
152
- "number_particles_class_7_internal_data",
153
- "number_particles_class_8",
154
- "number_particles_class_8_internal_data",
138
+ "total_gross_volume_unknown_classification",
139
+ "number_particles_hail",
140
+ "total_gross_volume_hail",
141
+ "number_particles_solid_precipitation",
142
+ "total_gross_volume_solid_precipitation",
143
+ "number_particles_large_pellet",
144
+ "total_gross_volume_large_pellet",
145
+ "number_particles_small_pellet",
146
+ "total_gross_volume_small_pellet",
147
+ "number_particles_snowgrain",
148
+ "total_gross_volume_snowgrain",
149
+ "number_particles_rain",
150
+ "total_gross_volume_rain",
151
+ "number_particles_small_rain",
152
+ "total_gross_volume_small_rain",
153
+ "number_particles_drizzle",
154
+ "total_gross_volume_drizzle",
155
155
  "number_particles_class_9",
156
156
  "number_particles_class_9_internal_data",
157
157
  "raw_drop_number",
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env python3
2
2
  # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
3
+ # Copyright (c) 2021-2026 DISDRODB developers
4
4
  #
5
5
  # This program is free software: you can redistribute it and/or modify
6
6
  # it under the terms of the GNU General Public License as published by
@@ -135,23 +135,23 @@ def reader(
135
135
  "number_particles_no_hydrometeor",
136
136
  "number_particles_no_hydrometeor_internal_data",
137
137
  "number_particles_unknown_classification",
138
- "number_particles_unknown_classification_internal_data",
139
- "number_particles_class_1",
140
- "number_particles_class_1_internal_data",
141
- "number_particles_class_2",
142
- "number_particles_class_2_internal_data",
143
- "number_particles_class_3",
144
- "number_particles_class_3_internal_data",
145
- "number_particles_class_4",
146
- "number_particles_class_4_internal_data",
147
- "number_particles_class_5",
148
- "number_particles_class_5_internal_data",
149
- "number_particles_class_6",
150
- "number_particles_class_6_internal_data",
151
- "number_particles_class_7",
152
- "number_particles_class_7_internal_data",
153
- "number_particles_class_8",
154
- "number_particles_class_8_internal_data",
138
+ "total_gross_volume_unknown_classification",
139
+ "number_particles_hail",
140
+ "total_gross_volume_hail",
141
+ "number_particles_solid_precipitation",
142
+ "total_gross_volume_solid_precipitation",
143
+ "number_particles_large_pellet",
144
+ "total_gross_volume_large_pellet",
145
+ "number_particles_small_pellet",
146
+ "total_gross_volume_small_pellet",
147
+ "number_particles_snowgrain",
148
+ "total_gross_volume_snowgrain",
149
+ "number_particles_rain",
150
+ "total_gross_volume_rain",
151
+ "number_particles_small_rain",
152
+ "total_gross_volume_small_rain",
153
+ "number_particles_drizzle",
154
+ "total_gross_volume_drizzle",
155
155
  "number_particles_class_9",
156
156
  "number_particles_class_9_internal_data",
157
157
  "raw_drop_number",