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
@@ -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
  """Routine to open the DISDRODB Data Archive."""
20
18
 
21
19
  import sys
22
- from typing import Optional
23
20
 
24
21
  import click
25
22
 
@@ -34,16 +31,23 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
34
31
  @click.command()
35
32
  @click_data_archive_dir_option
36
33
  def disdrodb_open_data_archive(
37
- data_archive_dir: Optional[str] = None,
34
+ data_archive_dir: str | None = None,
38
35
  ):
39
- """Open the DISDRODB Data Archive.
40
-
41
- Parameters
42
- ----------
43
- data_archive_dir : str, optional
44
- The base directory of DISDRODB, expected in the format ``<...>/DISDRODB``.
45
- If not specified, the path specified in the DISDRODB active configuration will be used.
46
- """
36
+ """Open the DISDRODB Data Archive directory in the system file explorer.
37
+
38
+ \b
39
+ Archive Directory:
40
+ --data_archive_dir: Custom path to DISDRODB data archive
41
+ If not specified, the path from the active DISDRODB configuration is used
42
+
43
+ \b
44
+ Examples:
45
+ # Open the data archive from active configuration
46
+ disdrodb_open_data_archive
47
+
48
+ # Open a custom data archive directory
49
+ disdrodb_open_data_archive --data_archive_dir /path/to/DISDRODB
50
+ """ # noqa: D301
47
51
  from disdrodb.api.io import open_data_archive
48
52
 
49
53
  data_archive_dir = parse_archive_dir(data_archive_dir)
@@ -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
  """Routine to open the DISDRODB Data Archive logs directory."""
20
18
 
21
19
  import sys
22
- from typing import Optional
23
20
 
24
21
  import click
25
22
 
@@ -38,25 +35,38 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
38
35
  def disdrodb_open_logs_directory(
39
36
  data_source: str,
40
37
  campaign_name: str,
41
- station_name: Optional[str] = None,
42
- data_archive_dir: Optional[str] = None,
38
+ station_name: str | None = None,
39
+ data_archive_dir: str | None = None,
43
40
  ):
44
- """Open the DISDRODB Data Archive logs directory of a station.
41
+ """Open the DISDRODB Data Archive station logs directory in the system file explorer.
42
+
43
+ It allows to easily browse processing logs and error reports.
44
+
45
+ \b
46
+ Station Specification:
47
+ Requires data_source and campaign_name (UPPER CASE required).
48
+ station_name is optional.
49
+
50
+ \b
51
+ Archive Directory:
52
+ --data_archive_dir: Custom path to DISDRODB data archive
53
+ If not specified, the path from the active DISDRODB configuration is used
54
+
55
+ \b
56
+ Examples:
57
+ # Open logs directory for a specific station
58
+ disdrodb_open_logs_directory EPFL HYMEX_LTE_SOP2 10
59
+
60
+ # Open logs directory for an entire campaign
61
+ disdrodb_open_logs_directory NASA IFLOODS
62
+
63
+ # Open with custom data archive directory
64
+ disdrodb_open_logs_directory EPFL HYMEX_LTE_SOP2 10 --data_archive_dir /path/to/DISDRODB
45
65
 
46
- Parameters
47
- ----------
48
- data_source : str
49
- The name of the institution (for campaigns spanning multiple countries) or
50
- the name of the country (for campaigns or sensor networks within a single country).
51
- Must be provided in UPPER CASE.
52
- campaign_name : str
53
- The name of the campaign. Must be provided in UPPER CASE.
54
- station_name : str
55
- The name of the station.
56
- data_archive_dir : str, optional
57
- The base directory of DISDRODB, expected in the format ``<...>/DISDRODB``.
58
- If not specified, the path specified in the DISDRODB active configuration will be used.
59
- """
66
+ \b
67
+ Important Notes:
68
+ - Data source and campaign names must be in UPPER CASE
69
+ """ # noqa: D301
60
70
  from disdrodb.api.io import open_logs_directory
61
71
 
62
72
  data_archive_dir = parse_archive_dir(data_archive_dir)
@@ -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
  """Routine to open the DISDRODB Metadata Data Archive."""
20
18
 
21
19
  import sys
22
- from typing import Optional
23
20
 
24
21
  import click
25
22
 
@@ -34,16 +31,32 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
34
31
  @click.command()
35
32
  @click_metadata_archive_dir_option
36
33
  def disdrodb_open_metadata_archive(
37
- metadata_archive_dir: Optional[str] = None,
34
+ metadata_archive_dir: str | None = None,
38
35
  ):
39
- """Open the DISDRODB Metadata Archive.
40
-
41
- Parameters
42
- ----------
43
- metadata_archive_dir : str, optional
44
- The base directory of DISDRODB, expected in the format ``<...>/DISDRODB``.
45
- If not specified, the path specified in the DISDRODB active configuration will be used.
46
- """
36
+ """Open the DISDRODB Metadata Archive directory in the system file explorer.
37
+
38
+ Opens the metadata archive directory using the system's default file manager,
39
+ allowing you to browse station metadata files and YAML configurations.
40
+
41
+ \b
42
+ Archive Directory:
43
+ --metadata_archive_dir: Custom path to DISDRODB metadata archive
44
+ If not specified, the path from the active DISDRODB configuration is used
45
+
46
+ \b
47
+ Examples:
48
+ # Open the metadata archive from active configuration
49
+ disdrodb_open_metadata_archive
50
+
51
+ # Open a custom metadata archive directory
52
+ disdrodb_open_metadata_archive --metadata_archive_dir /path/to/DISDRODB-METADATA/DISDRODB
53
+
54
+ \b
55
+ Important Notes:
56
+ - Opens the directory in your system's default file manager
57
+ - The metadata archive contains station YAML files and issue reports
58
+ - Useful for manual inspection and verification of station metadata
59
+ """ # noqa: D301
47
60
  from disdrodb.api.io import open_metadata_archive
48
61
 
49
62
  metadata_archive_dir = parse_archive_dir(metadata_archive_dir)
@@ -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
  """Routine to open the DISDRODB Data Archive logs directory."""
20
18
 
21
19
  import sys
22
- from typing import Optional
23
20
 
24
21
  import click
25
22
 
@@ -38,27 +35,41 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
38
35
  def disdrodb_open_metadata_directory(
39
36
  data_source: str,
40
37
  campaign_name: str,
41
- station_name: Optional[str] = None,
42
- metadata_archive_dir: Optional[str] = None,
38
+ station_name: str | None = None,
39
+ metadata_archive_dir: str | None = None,
43
40
  ):
44
- """Open the DISDRODB Data Archive logs directory of a station.
41
+ """Open the DISDRODB Metadata Archive directory of a station in the system file explorer.
42
+
43
+ The command allows to easily browse stations metadata YAML files.
44
+
45
+ \b
46
+ Station Specification:
47
+ Requires data_source and campaign_name (UPPER CASE required).
48
+ station_name is optional.
49
+
50
+ \b
51
+ Archive Directory:
52
+ --metadata_archive_dir: Custom path to DISDRODB Metadata Archive
53
+ If not specified, the path from the active DISDRODB configuration is used
54
+
55
+ \b
56
+ Examples:
57
+ # Open metadata directory for a specific station
58
+ disdrodb_open_metadata_directory EPFL HYMEX_LTE_SOP2 10
59
+
60
+ # Open metadata directory for a specific station
61
+ disdrodb_open_metadata_directory NASA IFLOODS
62
+
63
+ # Open with custom metadata archive directory
64
+ disdrodb_open_metadata_directory EPFL HYMEX_LTE_SOP2 --metadata_archive_dir /path/to/DISDRODB-METADATA/DISDRODB
45
65
 
46
- Parameters
47
- ----------
48
- data_source : str
49
- The name of the institution (for campaigns spanning multiple countries) or
50
- the name of the country (for campaigns or sensor networks within a single country).
51
- Must be provided in UPPER CASE.
52
- campaign_name : str
53
- The name of the campaign. Must be provided in UPPER CASE.
54
- station_name : str
55
- The name of the station.
56
- metadata_archive_dir : str, optional
57
- The directory path where the DISDRODB Metadata Archive is located.
58
- The directory path must end with ``<...>/DISDRODB``.
59
- If ``None``, it uses the ``metadata_archive_dir`` path specified
60
- in the DISDRODB active configuration.
61
- """
66
+ \b
67
+ Important Notes:
68
+ - Data source and campaign names must be in UPPER CASE
69
+ - Opens the directory in your system's default file manager
70
+ - Useful for manual inspection and editing of station metadata YAML files
71
+ - If station_name is omitted, opens the campaign-level metadata directory
72
+ """ # noqa: D301
62
73
  from disdrodb.api.io import open_metadata_directory
63
74
 
64
75
  metadata_archive_dir = parse_archive_dir(metadata_archive_dir)
@@ -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
  """Routine to open the DISDRODB Data Archive station product directory."""
20
18
 
21
19
  import sys
22
- from typing import Optional
23
20
 
24
21
  import click
25
22
 
@@ -41,26 +38,45 @@ def disdrodb_open_product_directory(
41
38
  data_source: str,
42
39
  campaign_name: str,
43
40
  station_name: str,
44
- data_archive_dir: Optional[str] = None,
41
+ data_archive_dir: str | None = None,
45
42
  ):
46
- """Open the DISDRODB Data Archive logs directory of a station.
47
-
48
- Parameters
49
- ----------
50
- product : str
51
- DISDRODB product.
52
- data_source : str
53
- The name of the institution (for campaigns spanning multiple countries) or
54
- the name of the country (for campaigns or sensor networks within a single country).
55
- Must be provided in UPPER CASE.
56
- campaign_name : str
57
- The name of the campaign. Must be provided in UPPER CASE.
58
- station_name : str
59
- The name of the station.
60
- data_archive_dir : str, optional
61
- The base directory of DISDRODB, expected in the format ``<...>/DISDRODB``.
62
- If not specified, the path specified in the DISDRODB active configuration will be used.
63
- """
43
+ """Open the DISDRODB Data Archive station product directory in the system file explorer.
44
+
45
+ Opens the data archive directory for a specific product level (RAW, L0A, L0B, etc.)
46
+ of a station using the system's default file manager, allowing you to browse
47
+ the data files.
48
+
49
+ \b
50
+ Station Specification:
51
+ Requires exact specification of product, data_source, campaign_name, and station_name.
52
+ All parameters must be provided and are case-sensitive (UPPER CASE required).
53
+
54
+ \b
55
+ Product Levels:
56
+ Valid products: RAW, L0A, L0B, L0C, L1, L2E, L2M
57
+ Specify the product level you want to browse
58
+
59
+ \b
60
+ Archive Directory:
61
+ --data_archive_dir: Custom path to DISDRODB data archive
62
+ If not specified, the path from the active DISDRODB configuration is used
63
+
64
+ \b
65
+ Examples:
66
+ # Open Raw data directory for a station
67
+ disdrodb_open_product_directory RAW EPFL HYMEX_LTE_SOP2 10
68
+
69
+ # Open L0B product directory
70
+ disdrodb_open_product_directory L0B NASA IFLOODS apu01
71
+
72
+ # Open L2M directory with custom archive path
73
+ disdrodb_open_product_directory L2M EPFL HYMEX_LTE_SOP2 10 --data_archive_dir /path/to/DISDRODB
74
+
75
+ \b
76
+ Important Notes:
77
+ - Product name must be valid: RAW, L0A, L0B, L0C, L1, L2E, or L2M
78
+ - Data source, campaign, and station names must be in UPPER CASE
79
+ """ # noqa: D301
64
80
  from disdrodb.api.io import open_product_directory
65
81
 
66
82
  data_archive_dir = parse_archive_dir(data_archive_dir)
@@ -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
  """Routine to open the disdrodb software readers directory."""
18
+
20
19
  import sys
21
20
 
22
21
  import click
@@ -0,0 +1,189 @@
1
+ # -----------------------------------------------------------------------------.
2
+ # Copyright (c) 2021-2026 DISDRODB developers
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ # -----------------------------------------------------------------------------.
17
+ """Script to launch DISDRODB products generation for the entire DISDRODB Archive."""
18
+
19
+ import sys
20
+
21
+ import click
22
+
23
+ from disdrodb.utils.cli import (
24
+ click_data_archive_dir_option,
25
+ click_l0_archive_options,
26
+ click_metadata_archive_dir_option,
27
+ click_processing_options,
28
+ click_stations_options,
29
+ parse_archive_dir,
30
+ parse_arg_to_list,
31
+ )
32
+
33
+ sys.tracebacklimit = 0 # avoid full traceback error if occur
34
+
35
+
36
+ @click.command()
37
+ @click_stations_options
38
+ @click_l0_archive_options
39
+ @click.option(
40
+ "-l1",
41
+ "--l1_processing",
42
+ type=bool,
43
+ show_default=True,
44
+ default=True,
45
+ help="Run L1 processing",
46
+ )
47
+ @click.option(
48
+ "-l2e",
49
+ "--l2e_processing",
50
+ type=bool,
51
+ show_default=True,
52
+ default=True,
53
+ help="Run L2E processing",
54
+ )
55
+ @click.option(
56
+ "-l2m",
57
+ "--l2m_processing",
58
+ type=bool,
59
+ show_default=True,
60
+ default=True,
61
+ help="Run L2M processing.",
62
+ )
63
+ @click_processing_options
64
+ @click_data_archive_dir_option
65
+ @click_metadata_archive_dir_option
66
+ def disdrodb_run(
67
+ # Stations options
68
+ data_sources: str | None = None,
69
+ campaign_names: str | None = None,
70
+ station_names: str | None = None,
71
+ # L0 archive options
72
+ l0a_processing: bool = True,
73
+ l0b_processing: bool = True,
74
+ l0c_processing: bool = True,
75
+ remove_l0a: bool = False,
76
+ remove_l0b: bool = False,
77
+ # Higher level processing options
78
+ l1_processing: bool = True,
79
+ l2e_processing: bool = True,
80
+ l2m_processing: bool = True,
81
+ # Processing options
82
+ force: bool = False,
83
+ verbose: bool = True,
84
+ parallel: bool = True,
85
+ debugging_mode: bool = False,
86
+ # DISDRODB root directories
87
+ data_archive_dir: str | None = None,
88
+ metadata_archive_dir: str | None = None,
89
+ ):
90
+ """Run the complete processing of DISDRODB stations.
91
+
92
+ This function allows to launch the complete processing of many DISDRODB stations with a single command.
93
+ From the list of all available DISDRODB stations, it runs the processing of the
94
+ stations matching the provided data_sources, campaign_names and station_names.
95
+
96
+ \b
97
+ Processing Levels:
98
+ L0A: Raw data converted to DISDRODB standardized Apache Parquet format
99
+ L0B: L0A data converted to DISDRODB standardized netCDF4 format
100
+ L0C: Apply time QC and consolidate L0B data into (by default daily) netCDF files.
101
+ L1: Temporally resample L0C data to standard intervals (1-60 minutes), apply QC algorithms
102
+ and determine precipitation phase and hydrometeors types.
103
+ L2E: Compute empirical integral DSD variables (e.g., rain rate, liquid water content)
104
+ L2M: Fit parametric DSD models and compute model-based integral DSD variables
105
+
106
+ \b
107
+ Station Selection:
108
+ If no station filters are specified, processes ALL available stations.
109
+ Use data_sources, campaign_names, and station_names to filter stations.
110
+ Filters work together to narrow down the selection (AND logic).
111
+
112
+ \b
113
+ Performance Options:
114
+ --parallel: Uses multiple processes for faster processing (default: True)
115
+ If parallel processing is enabled, each process will use a single thread
116
+ to avoid issues with the HDF/netCDF library.
117
+ The DASK_NUM_WORKERS environment variable controls the number of processes
118
+ to use.A sensible default is automatically set by the software.
119
+ --debugging_mode: Processes only a subset of data for testing
120
+ --force: Overwrites existing output files (default: False)
121
+
122
+ \b
123
+ Examples:
124
+ # Process all stations with full processing chain
125
+ disdrodb_run
126
+
127
+ # Process specific data sources, skip L0A and L2M
128
+ disdrodb_run --data_sources 'USA EPFL' --l0a_processing False --l2m_processing False
129
+
130
+ # Process specific campaigns with debugging mode
131
+ disdrodb_run --campaign_names 'DELFT IMPACTS' --debugging_mode True
132
+
133
+ # Process specific stations with custom number of workers
134
+ DASK_NUM_WORKERS=8 disdrodb_run --data_sources 'NASA' --station_names 'apu01 apu02'
135
+
136
+ # Force overwrite existing files, verbose output
137
+ disdrodb_run --data_sources 'EPFL' --force True --verbose True
138
+
139
+ \b
140
+ Data Management:
141
+ --remove_l0a: Delete L0A files after L0B processing (saves disk space)
142
+ --remove_l0b: Delete L0B files after L0C processing (saves disk space)
143
+ Use with caution - removed files cannot be recovered without reprocessing
144
+
145
+ \b
146
+ Important Notes:
147
+ - Data source names must be UPPER CASE
148
+ - Campaign names must be UPPER CASE
149
+ - To specify multiple values, use space-separated strings in quotes
150
+ - Processing chain: L0A → L0B → L0C → L1 → L2E → L2M
151
+ - You can skip early or late processing levels, but not intermediate ones
152
+ - Processing validates chain consistency and will raise errors for gaps
153
+ - Large datasets may require significant disk space and processing time
154
+ - Use --debugging_mode for initial testing with reduced data volumes
155
+ """ # noqa: D301
156
+ from disdrodb.routines import run
157
+
158
+ # Parse data_sources, campaign_names and station arguments
159
+ data_archive_dir = parse_archive_dir(data_archive_dir)
160
+ metadata_archive_dir = parse_archive_dir(metadata_archive_dir)
161
+ data_sources = parse_arg_to_list(data_sources)
162
+ campaign_names = parse_arg_to_list(campaign_names)
163
+ station_names = parse_arg_to_list(station_names)
164
+
165
+ # Run processing
166
+ run(
167
+ # DISDRODB root directories
168
+ data_archive_dir=data_archive_dir,
169
+ metadata_archive_dir=metadata_archive_dir,
170
+ # Stations options
171
+ data_sources=data_sources,
172
+ campaign_names=campaign_names,
173
+ station_names=station_names,
174
+ # L0 archive options
175
+ l0a_processing=l0a_processing,
176
+ l0b_processing=l0b_processing,
177
+ l0c_processing=l0c_processing,
178
+ remove_l0a=remove_l0a,
179
+ remove_l0b=remove_l0b,
180
+ # Higher level processing options
181
+ l1_processing=l1_processing,
182
+ l2e_processing=l2e_processing,
183
+ l2m_processing=l2m_processing,
184
+ # Processing options
185
+ force=force,
186
+ verbose=verbose,
187
+ debugging_mode=debugging_mode,
188
+ parallel=parallel,
189
+ )