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,45 @@
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 check the validity of the DISDRODB products configuration files."""
18
+
19
+ import sys
20
+
21
+ import click
22
+
23
+ from disdrodb.utils.cli import parse_empty_string_and_none
24
+
25
+ sys.tracebacklimit = 0 # avoid full traceback error if occur
26
+
27
+ # -------------------------------------------------------------------------.
28
+ # Click Command Line Interface decorator
29
+
30
+
31
+ @click.command()
32
+ @click.option(
33
+ "--products_configs_dir",
34
+ type=str,
35
+ show_default=True,
36
+ default=None,
37
+ help="Directory with DISDRODB products configurations files",
38
+ )
39
+ def disdrodb_check_products_options(products_configs_dir):
40
+ """Validate the DISDRODB products configuration files."""
41
+ from disdrodb.routines.options_validation import validate_products_configurations
42
+
43
+ products_configs_dir = parse_empty_string_and_none(products_configs_dir)
44
+
45
+ validate_products_configurations(products_configs_dir)
@@ -1,5 +1,5 @@
1
1
  # -----------------------------------------------------------------------------.
2
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
3
3
  #
4
4
  # This program is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -15,8 +15,8 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """Script to create summary figures and tables for a DISDRODB stationn."""
18
+
18
19
  import sys
19
- from typing import Optional
20
20
 
21
21
  import click
22
22
 
@@ -49,37 +49,63 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
49
49
  )
50
50
  def disdrodb_create_summary(
51
51
  # Stations options
52
- data_sources: Optional[str] = None,
53
- campaign_names: Optional[str] = None,
54
- station_names: Optional[str] = None,
52
+ data_sources: str | None = None,
53
+ campaign_names: str | None = None,
54
+ station_names: str | None = None,
55
55
  # Processing options:
56
56
  parallel=False,
57
57
  temporal_resolution="1MIN",
58
58
  # DISDRODB root directories
59
- data_archive_dir: Optional[str] = None,
60
- metadata_archive_dir: Optional[str] = None,
59
+ data_archive_dir: str | None = None,
60
+ metadata_archive_dir: str | None = None,
61
61
  ):
62
- r"""Create summary figures and tables for a specific set of DISDRODB stations.
63
-
64
- Parameters \n
65
- ---------- \n
66
- data_sources : str
67
- Name of data source(s) to process.
68
- The name(s) must be UPPER CASE.
69
- If campaign_names and station are not specified, process all stations.
70
- To specify multiple data sources, write i.e.: --data_sources 'NASA EPFL NCAR'
71
- campaign_names : str
72
- Name of the campaign(s) for which to create stations summaries.
73
- The name(s) must be UPPER CASE.
74
- To specify multiple campaigns, write i.e.: --campaign_names 'IPEX IMPACTS'
75
- station_names : str
76
- Station names.
77
- To specify multiple stations, write i.e.: --station_names 'station1 station2'
78
- data_archive_dir : str \n
79
- DISDRODB Data Archive directory \n
80
- Format: <...>/DISDRODB \n
81
- If not specified, uses path specified in the DISDRODB active configuration. \n
82
- """
62
+ """Create summary figures and tables for DISDRODB stations.
63
+
64
+ Generates summary visualizations and statistics from DISDRODB L2E data products.
65
+ The DISDRODB L2E files must be available.
66
+
67
+ \b
68
+ Station Selection:
69
+ If no station filters are specified, creates summaries for ALL available stations.
70
+ Use data_sources, campaign_names, and station_names to filter stations.
71
+ Filters work together to narrow down the selection (AND logic).
72
+
73
+ \b
74
+ Processing Options:
75
+ --parallel: Reads files in parallel for faster processing (default: False)
76
+ --temporal_resolution: Temporal resolution of L2E product to use (default: 1MIN)
77
+ Valid temporal resolutions depend on available L2E products.
78
+
79
+ \b
80
+ Archive Directories:
81
+ --data_archive_dir: Custom path to DISDRODB data archive
82
+ --metadata_archive_dir: Custom path to DISDRODB metadata archive
83
+ If not specified, paths from the active DISDRODB configuration are used
84
+
85
+ \b
86
+ Examples:
87
+ # Create summaries for all stations
88
+ disdrodb_create_summary
89
+
90
+ # Create summaries for specific data sources
91
+ disdrodb_create_summary --data_sources 'EPFL NASA'
92
+
93
+ # Create summaries for specific campaigns
94
+ disdrodb_create_summary --campaign_names 'HYMEX_LTE_SOP2 IFLOODS'
95
+
96
+ # Create summaries for specific stations with custom temporal resolution
97
+ disdrodb_create_summary --station_names 'apu01 apu02' --temporal_resolution 5MIN
98
+
99
+ # Create summaries with custom archive directory
100
+ disdrodb_create_summary --data_sources EPFL --data_archive_dir /path/to/DISDRODB
101
+
102
+ \b
103
+ Important Notes:
104
+ - Data source names must be in UPPER CASE
105
+ - Campaign names must be in UPPER CASE
106
+ - To specify multiple values, use space-separated strings in quotes
107
+ - Requires L2E data products to be available for the selected stations
108
+ """ # noqa: D301
83
109
  from disdrodb.routines import create_summary
84
110
  from disdrodb.utils.dask import close_dask_cluster, initialize_dask_cluster
85
111
 
@@ -1,5 +1,5 @@
1
1
  # -----------------------------------------------------------------------------.
2
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
3
3
  #
4
4
  # This program is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -15,8 +15,8 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """Script to create summary figures and tables for a DISDRODB station."""
18
+
18
19
  import sys
19
- from typing import Optional
20
20
 
21
21
  import click
22
22
 
@@ -53,25 +53,46 @@ def disdrodb_create_summary_station(
53
53
  parallel=False,
54
54
  temporal_resolution="1MIN",
55
55
  # DISDRODB root directories
56
- data_archive_dir: Optional[str] = None,
56
+ data_archive_dir: str | None = None,
57
57
  ):
58
- r"""Create summary figures and tables for a specific DISDRODB station.
59
-
60
- Parameters \n
61
- ---------- \n
62
- data_source : str \n
63
- Institution name (when campaign data spans more than 1 country),
64
- or country (when all campaigns (or sensor networks) are inside a given country).\n
65
- Must be UPPER CASE.\n
66
- campaign_name : str \n
67
- Campaign name. Must be UPPER CASE.\n
68
- station_name : str \n
69
- Station name \n
70
- data_archive_dir : str \n
71
- DISDRODB Data Archive directory \n
72
- Format: <...>/DISDRODB \n
73
- If not specified, uses path specified in the DISDRODB active configuration. \n
74
- """
58
+ """Create summary figures and tables for a specific DISDRODB station.
59
+
60
+ Generates summary visualizations and statistics using the DISDRODB L2E product
61
+ of the specified station.
62
+
63
+ \b
64
+ Station Specification:
65
+ Requires exact specification of data_source, campaign_name, and station_name.
66
+ All three parameters must be provided and are case-sensitive (UPPER CASE required).
67
+
68
+ \b
69
+ Processing Options:
70
+ --parallel: Reads files in parallel for faster processing (default: False)
71
+ --temporal_resolution: Temporal resolution of L2E product to use (default: 1MIN)
72
+ Valid temporal resolutions depend on available L2E products
73
+
74
+ \b
75
+ Archive Directory:
76
+ --data_archive_dir: Custom path to DISDRODB data archive
77
+ If not specified, the path from the active DISDRODB configuration is used
78
+
79
+ \b
80
+ Examples:
81
+ # Create summary for a specific station
82
+ disdrodb_create_summary_station EPFL HYMEX_LTE_SOP2 10
83
+
84
+ # Create summary with custom temporal resolution
85
+ disdrodb_create_summary_station EPFL HYMEX_LTE_SOP2 10 --temporal_resolution 5MIN
86
+
87
+ # Create summary with custom archive directory
88
+ disdrodb_create_summary_station NASA IFLOODS apu01 --data_archive_dir /path/to/DISDRODB
89
+
90
+ \b
91
+ Important Notes:
92
+ - Data source, campaign, and station names must be in UPPER CASE
93
+ - All three station identifiers are required (no wildcards)
94
+ - Requires L2E data products to be available for the specified station
95
+ """ # noqa: D301
75
96
  from disdrodb.summary.routines import create_station_summary
76
97
  from disdrodb.utils.dask import close_dask_cluster, initialize_dask_cluster
77
98
 
@@ -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 print the DISDRODB Data Archive directory."""
18
+
20
19
  import sys
21
20
 
22
21
  import click
@@ -1,5 +1,5 @@
1
1
  # -----------------------------------------------------------------------------.
2
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
3
3
  #
4
4
  # This program is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -17,7 +17,6 @@
17
17
  """Wrapper to download stations from the DISDRODB Decentralized Data Archive."""
18
18
 
19
19
  import sys
20
- from typing import Optional
21
20
 
22
21
  import click
23
22
 
@@ -38,36 +37,57 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
38
37
  @click_metadata_archive_dir_option
39
38
  @click_download_options
40
39
  def disdrodb_download_archive(
41
- data_sources: Optional[str] = None,
42
- campaign_names: Optional[str] = None,
43
- station_names: Optional[str] = None,
44
- data_archive_dir: Optional[str] = None,
45
- metadata_archive_dir: Optional[str] = None,
40
+ data_sources: str | None = None,
41
+ campaign_names: str | None = None,
42
+ station_names: str | None = None,
43
+ data_archive_dir: str | None = None,
44
+ metadata_archive_dir: str | None = None,
46
45
  force: bool = False,
47
46
  ):
48
- """Download DISDRODB stations with the ``disdrodb_data_url`` in the metadata.
49
-
50
- Parameters
51
- ----------
52
- data_sources : str or list of str, optional
53
- Data source name (eg : EPFL).
54
- If not provided (``None``), all data sources will be downloaded.
55
- The default value is ``data_source=None``.
56
- campaign_names : str or list of str, optional
57
- Campaign name (eg : EPFL_ROOF_2012).
58
- If not provided (``None``), all campaigns will be downloaded.
59
- The default value is ``campaign_name=None``.
60
- station_names : str or list of str, optional
61
- Station name.
62
- If not provided (``None``), all stations will be downloaded.
63
- The default value is ``station_name=None``.
64
- force : bool, optional
65
- If ``True``, overwrite the already existing raw data file.
66
- The default value is ``False``.
67
- data_archive_dir : str (optional)
68
- DISDRODB Data Archive directory. Format: ``<...>/DISDRODB``.
69
- If ``None`` (the default), the disdrodb config variable ``data_archive_dir`` is used.
70
- """
47
+ """Download raw data for multiple DISDRODB stations from the DISDRODB Decentralized Data Archive.
48
+
49
+ It downloads station raw data files and stores them in the local DISDRODB Data Archive.
50
+ The data are organized by data_source, campaign_name, and station_name.
51
+
52
+ \b
53
+ Station Selection:
54
+ If no station filters are specified, downloads ALL stations.
55
+ Use data_sources, campaign_names, and station_names to filter stations.
56
+ Filters work together to narrow down the selection (AND logic).
57
+ Only stations with a ``disdrodb_data_url`` in their metadata will be downloaded.
58
+
59
+ \b
60
+ Download Behavior:
61
+ For webserver/FTP-hosted data:
62
+ - Incremental downloads: Fetch only new files when they become available
63
+ - Existing files on disk are skipped unless '--force True' is used
64
+
65
+ For repository-hosted data (e.g., Zenodo):
66
+ - Use '--force True' to download new versions when available
67
+ - Without '--force True', download is skipped if data already exists locally
68
+
69
+ \b
70
+ Download Options:
71
+ --force: Removes existing raw data files and forces complete re-download (default: False)
72
+ Warning: All existing station data will be deleted before re-downloading
73
+
74
+ \b
75
+ Archive Directories:
76
+ --data_archive_dir: Custom path to DISDRODB data archive
77
+ --metadata_archive_dir: Custom path to DISDRODB metadata archive
78
+ If not specified, paths from the active DISDRODB configuration are used
79
+
80
+ \b
81
+ Examples:
82
+ # Download all stations with available download URLs
83
+ disdrodb_download_archive
84
+
85
+ # Download all stations from specific data sources
86
+ disdrodb_download_archive --data_sources 'EPFL NASA'
87
+
88
+ # Download specific campaigns and force re-download
89
+ disdrodb_download_archive --campaign_names 'HYMEX_LTE_SOP2 IFLOODS' --force True
90
+ """ # noqa: D301
71
91
  from disdrodb.data_transfer.download_data import download_archive
72
92
 
73
93
  data_archive_dir = parse_archive_dir(data_archive_dir)
@@ -1,5 +1,5 @@
1
1
  # -----------------------------------------------------------------------------.
2
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
3
3
  #
4
4
  # This program is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -15,7 +15,9 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """Routine to download the DISDRODB Metadata Data Archive."""
18
+
18
19
  import sys
20
+ from pathlib import Path
19
21
 
20
22
  import click
21
23
 
@@ -25,7 +27,7 @@ sys.tracebacklimit = 0 # avoid full traceback error if occur
25
27
 
26
28
 
27
29
  @click.command()
28
- @click.argument("directory_path", metavar="<station>")
30
+ @click.argument("directory_path", required=False, metavar="[directory]", type=click.Path())
29
31
  @click.option("-f", "--force", type=bool, show_default=True, default=False, help="Force overwriting")
30
32
  def disdrodb_download_metadata_archive(
31
33
  directory_path,
@@ -33,21 +35,31 @@ def disdrodb_download_metadata_archive(
33
35
  ):
34
36
  """Download the DISDRODB Metadata Archive to the specified directory.
35
37
 
36
- Parameters
37
- ----------
38
- directory_path : str
39
- The directory path where the DISDRODB-METADATA directory will be downloaded.
40
- force : bool, optional
41
- If ``True``, the existing DISDRODB-METADATA directory will be removed
42
- and a new one will be downloaded. The default value is ``False``.
43
-
44
- Returns
45
- -------
46
- metadata_archive_dir
47
- The DISDRODB Metadata Archive directory path.
48
- """
38
+ \b
39
+ Download Options:
40
+ '--force True' removes the existing DISDRODB-METADATA directory and forces re-download.
41
+ The default is --force False. If the DISDRODB-METADATA directory already exists, it raises an error.
42
+
43
+ \b
44
+ Examples:
45
+ # Download metadata archive to current directory
46
+ disdrodb_download_metadata_archive
47
+
48
+ # Download to specific directory
49
+ disdrodb_download_metadata_archive /path/to/directory
50
+
51
+ # Force re-download of existing metadata archive
52
+ disdrodb_download_metadata_archive /path/to/directory --force True
53
+
54
+ \b
55
+ Important Notes:
56
+ - Use --force with caution as it will delete the existing metadata archive
57
+ """ # noqa: D301
49
58
  from disdrodb import download_metadata_archive
50
59
 
51
- directory_path = parse_archive_dir(directory_path)
60
+ # Default to current directory if none provided
61
+ directory_path = Path(directory_path or ".").resolve()
62
+ directory_path = parse_archive_dir(str(directory_path))
52
63
 
64
+ # Download metadata archive
53
65
  download_metadata_archive(directory_path, force=force)
@@ -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 download station data from the DISDRODB Decentralized Data Archive."""
20
18
 
21
19
  import sys
22
- from typing import Optional
23
20
 
24
21
  import click
25
22
 
@@ -43,33 +40,65 @@ def disdrodb_download_station(
43
40
  data_source: str,
44
41
  campaign_name: str,
45
42
  station_name: str,
46
- data_archive_dir: Optional[str] = None,
47
- metadata_archive_dir: Optional[str] = None,
43
+ data_archive_dir: str | None = None,
44
+ metadata_archive_dir: str | None = None,
48
45
  force: bool = False,
49
46
  ):
50
- """
51
- Download data of a single DISDRODB station from the DISDRODB remote repository.
52
-
53
- Parameters
54
- ----------
55
- data_source : str
56
- The name of the institution (for campaigns spanning multiple countries) or
57
- the name of the country (for campaigns or sensor networks within a single country).
58
- Must be provided in UPPER CASE.
59
- campaign_name : str
60
- The name of the campaign. Must be provided in UPPER CASE.
61
- station_name : str
62
- The name of the station.
63
- data_archive_dir : str, optional
64
- The base directory of DISDRODB, expected in the format ``<...>/DISDRODB``.
65
- If not specified, the path specified in the DISDRODB active configuration will be used.
66
- force: bool, optional
67
- If ``True``, overwrite the already existing raw data file.
68
- The default value is ``False``.
69
- data_archive_dir : str (optional)
70
- DISDRODB Data Archive directory. Format: ``<...>/DISDRODB``.
71
- If ``None`` (the default), the disdrodb config variable ``data_archive_dir`` is used.
72
- """
47
+ """Download raw data of a single station from the DISDRODB Decentralized Data Archive.
48
+
49
+ It downloads station raw data files and stores them in the local DISDRODB Data Archive.
50
+ The data are organized by data_source, campaign_name, and station_name.
51
+
52
+ For stations data hosted on FTP/webservers, recursive calls of
53
+ this command allows to fetch and download just the new data when becomes available.
54
+
55
+ For stations data hosted on data repository such as Zenodo in ZIP archives,
56
+ if a new version becomes available, you must set force=True to download the new version.
57
+
58
+ \b
59
+ Station Specification:
60
+ Requires exact specification of data_source, campaign_name, and station_name.
61
+ All three parameters must be provided and are case-sensitive (UPPER CASE required).
62
+
63
+ \b
64
+ Download Behavior:
65
+ For webserver/FTP-hosted data:
66
+ - Incremental downloads: Fetch only new files when they become available
67
+ - Existing files on disk are skipped unless --force is used
68
+
69
+ For repository-hosted data (e.g., Zenodo):
70
+ - Use --force to download new versions when available
71
+ - Without --force, download is skipped if data already exists locally
72
+
73
+ \b
74
+ Download Options:
75
+ --force: Removes existing raw data files and forces complete re-download (default: False)
76
+ WARNING: All existing station data will be deleted before re-downloading.
77
+
78
+ \b
79
+ Archive Directories:
80
+ --data_archive_dir: Custom path to DISDRODB data archive
81
+ --metadata_archive_dir: Custom path to DISDRODB metadata archive
82
+ If not specified, paths from the active DISDRODB configuration are used
83
+
84
+ \b
85
+ Examples:
86
+ # Download data for a single station
87
+ disdrodb_download_station EPFL HYMEX_LTE_SOP2 10
88
+
89
+ # Force re-download of existing data
90
+ disdrodb_download_station EPFL HYMEX_LTE_SOP2 10 --force True
91
+
92
+ # Download with custom archive directory
93
+ disdrodb_download_station NASA IFLOODS apu01 --data_archive_dir /path/to/DISDRODB
94
+
95
+ \b
96
+ Important Notes:
97
+ - Data source, campaign, and station names must be UPPER CASE
98
+ - All three station identifiers are required (no wildcards)
99
+ - Downloaded files are placed in <data_archive_dir>/Raw/<data_source>/<campaign_name>/<station_name>/
100
+ - Use --force with caution as it will remove data on disk before starting to re-download them.
101
+ """ # noqa: D301
73
102
  from disdrodb.data_transfer.download_data import download_station
74
103
 
75
104
  data_archive_dir = parse_archive_dir(data_archive_dir)
@@ -1,5 +1,5 @@
1
1
  # -----------------------------------------------------------------------------.
2
- # Copyright (c) 2021-2023 DISDRODB developers
2
+ # Copyright (c) 2021-2026 DISDRODB developers
3
3
  #
4
4
  # This program is free software: you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
@@ -15,8 +15,8 @@
15
15
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
  # -----------------------------------------------------------------------------.
17
17
  """Script to initialize the DISDRODB station directory structure."""
18
+
18
19
  import sys
19
- from typing import Optional
20
20
 
21
21
  import click
22
22
 
@@ -43,28 +43,48 @@ def disdrodb_initialize_station(
43
43
  campaign_name: str,
44
44
  station_name: str,
45
45
  # DISDRODB root directories
46
- data_archive_dir: Optional[str] = None,
47
- metadata_archive_dir: Optional[str] = None,
46
+ data_archive_dir: str | None = None,
47
+ metadata_archive_dir: str | None = None,
48
48
  ):
49
- r"""Initialize the DISDRODB directory structure for a station.
50
-
51
- It adds the relevant directories and the default issue and metadata YAML files..
52
-
53
- Parameters \n
54
- ---------- \n
55
- data_source : str \n
56
- Institution name (when campaign data spans more than 1 country), or country (when all campaigns (or sensor
57
- networks) are inside a given country).\n
58
- Must be UPPER CASE.\n
59
- campaign_name : str \n
60
- Campaign name. Must be UPPER CASE.\n
61
- station_name : str \n
62
- Station name \n
63
- data_archive_dir : str \n
64
- DISDRODB Data Archive directory \n
65
- Format: <...>/DISDRODB \n
66
- If not specified, uses path specified in the DISDRODB active configuration. \n
67
- """
49
+ """Initialize the DISDRODB directory structure for a new station.
50
+
51
+ Creates the required directory structure and default YAML configuration files
52
+ for a new station in both the DISDRODB Data and Metadata archives.
53
+
54
+ \b
55
+ Station Specification:
56
+ Requires exact specification of data_source, campaign_name, and station_name.
57
+ All three parameters must be provided and are case-sensitive (UPPER CASE required).
58
+
59
+ \b
60
+ Created Structure:
61
+ Data Archive:
62
+ - Data directory for the station where to place the raw data files
63
+
64
+ Metadata Archive:
65
+ - Station metadata YAML file (template)
66
+ - Station issue YAML file (template)
67
+
68
+ \b
69
+ Archive Directories:
70
+ --data_archive_dir: Custom path to DISDRODB data archive
71
+ --metadata_archive_dir: Custom path to DISDRODB metadata archive
72
+ If not specified, paths from the active DISDRODB configuration are used
73
+
74
+ \b
75
+ Examples:
76
+ # Initialize a new station with default configuration
77
+ disdrodb_initialize_station DATA_SOURCE CAMPAIGN_NAME STATION_NAME
78
+
79
+ # Initialize with custom archive directories
80
+ disdrodb_initialize_station DATA_SOURCE CAMPAIGN_NAME STATION_NAME --data_archive_dir /path/to/DISDRODB
81
+
82
+ \b
83
+ Important Notes:
84
+ - Data source, campaign, and station names must be in UPPER CASE
85
+ - All three station identifiers are required (no wildcards)
86
+ - Creates template YAML files that need to be manually filled in
87
+ """ # noqa: D301
68
88
  from disdrodb.api.create_directories import create_initial_station_structure
69
89
 
70
90
  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 print the DISDRODB Data Archive directory."""
18
+
20
19
  import sys
21
20
 
22
21
  import click