disdrodb 0.0.21__py3-none-any.whl → 0.1.1__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 (279) hide show
  1. disdrodb/__init__.py +132 -15
  2. disdrodb/_config.py +4 -2
  3. disdrodb/_version.py +9 -4
  4. disdrodb/api/checks.py +264 -237
  5. disdrodb/api/configs.py +4 -8
  6. disdrodb/api/create_directories.py +235 -290
  7. disdrodb/api/info.py +217 -26
  8. disdrodb/api/io.py +306 -270
  9. disdrodb/api/path.py +597 -173
  10. disdrodb/api/search.py +486 -0
  11. disdrodb/{metadata/scripts → cli}/disdrodb_check_metadata_archive.py +12 -7
  12. disdrodb/{utils/pandas.py → cli/disdrodb_data_archive_directory.py} +9 -18
  13. disdrodb/cli/disdrodb_download_archive.py +86 -0
  14. disdrodb/cli/disdrodb_download_metadata_archive.py +53 -0
  15. disdrodb/cli/disdrodb_download_station.py +84 -0
  16. disdrodb/{api/scripts → cli}/disdrodb_initialize_station.py +22 -10
  17. disdrodb/cli/disdrodb_metadata_archive_directory.py +32 -0
  18. disdrodb/{data_transfer/scripts/disdrodb_download_station.py → cli/disdrodb_open_data_archive.py} +22 -22
  19. disdrodb/cli/disdrodb_open_logs_directory.py +69 -0
  20. disdrodb/{data_transfer/scripts/disdrodb_upload_station.py → cli/disdrodb_open_metadata_archive.py} +22 -24
  21. disdrodb/cli/disdrodb_open_metadata_directory.py +71 -0
  22. disdrodb/cli/disdrodb_open_product_directory.py +74 -0
  23. disdrodb/cli/disdrodb_open_readers_directory.py +32 -0
  24. disdrodb/{l0/scripts → cli}/disdrodb_run_l0.py +38 -31
  25. disdrodb/{l0/scripts → cli}/disdrodb_run_l0_station.py +32 -30
  26. disdrodb/{l0/scripts → cli}/disdrodb_run_l0a.py +30 -21
  27. disdrodb/{l0/scripts → cli}/disdrodb_run_l0a_station.py +24 -33
  28. disdrodb/{l0/scripts → cli}/disdrodb_run_l0b.py +30 -21
  29. disdrodb/{l0/scripts → cli}/disdrodb_run_l0b_station.py +25 -34
  30. disdrodb/cli/disdrodb_run_l0c.py +130 -0
  31. disdrodb/cli/disdrodb_run_l0c_station.py +129 -0
  32. disdrodb/cli/disdrodb_run_l1.py +122 -0
  33. disdrodb/cli/disdrodb_run_l1_station.py +121 -0
  34. disdrodb/cli/disdrodb_run_l2e.py +122 -0
  35. disdrodb/cli/disdrodb_run_l2e_station.py +122 -0
  36. disdrodb/cli/disdrodb_run_l2m.py +122 -0
  37. disdrodb/cli/disdrodb_run_l2m_station.py +122 -0
  38. disdrodb/cli/disdrodb_upload_archive.py +105 -0
  39. disdrodb/cli/disdrodb_upload_station.py +98 -0
  40. disdrodb/configs.py +90 -25
  41. disdrodb/data_transfer/__init__.py +22 -0
  42. disdrodb/data_transfer/download_data.py +87 -90
  43. disdrodb/data_transfer/upload_data.py +64 -37
  44. disdrodb/data_transfer/zenodo.py +15 -18
  45. disdrodb/docs.py +1 -1
  46. disdrodb/issue/__init__.py +17 -4
  47. disdrodb/issue/checks.py +10 -23
  48. disdrodb/issue/reader.py +9 -12
  49. disdrodb/issue/writer.py +14 -17
  50. disdrodb/l0/__init__.py +17 -26
  51. disdrodb/l0/check_configs.py +35 -23
  52. disdrodb/l0/check_standards.py +46 -51
  53. disdrodb/l0/configs/{Thies_LPM → LPM}/bins_diameter.yml +44 -44
  54. disdrodb/l0/configs/{Thies_LPM → LPM}/bins_velocity.yml +40 -40
  55. disdrodb/l0/configs/LPM/l0a_encodings.yml +80 -0
  56. disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_cf_attrs.yml +84 -65
  57. disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_encodings.yml +50 -9
  58. disdrodb/l0/configs/{Thies_LPM → LPM}/raw_data_format.yml +285 -245
  59. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/bins_diameter.yml +66 -66
  60. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/bins_velocity.yml +64 -64
  61. disdrodb/l0/configs/PARSIVEL/l0a_encodings.yml +32 -0
  62. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/l0b_cf_attrs.yml +23 -21
  63. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/l0b_encodings.yml +17 -17
  64. disdrodb/l0/configs/{OTT_Parsivel → PARSIVEL}/raw_data_format.yml +77 -77
  65. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/bins_diameter.yml +64 -64
  66. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/bins_velocity.yml +64 -64
  67. disdrodb/l0/configs/PARSIVEL2/l0a_encodings.yml +39 -0
  68. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_cf_attrs.yml +28 -26
  69. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_encodings.yml +20 -20
  70. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/raw_data_format.yml +107 -107
  71. disdrodb/l0/configs/PWS100/bins_diameter.yml +173 -0
  72. disdrodb/l0/configs/PWS100/bins_velocity.yml +173 -0
  73. disdrodb/l0/configs/PWS100/l0a_encodings.yml +19 -0
  74. disdrodb/l0/configs/PWS100/l0b_cf_attrs.yml +76 -0
  75. disdrodb/l0/configs/PWS100/l0b_encodings.yml +176 -0
  76. disdrodb/l0/configs/PWS100/raw_data_format.yml +182 -0
  77. disdrodb/l0/configs/{RD_80 → RD80}/bins_diameter.yml +40 -40
  78. disdrodb/l0/configs/RD80/l0a_encodings.yml +16 -0
  79. disdrodb/l0/configs/{RD_80 → RD80}/l0b_cf_attrs.yml +3 -3
  80. disdrodb/l0/configs/RD80/l0b_encodings.yml +135 -0
  81. disdrodb/l0/configs/{RD_80 → RD80}/raw_data_format.yml +46 -50
  82. disdrodb/l0/l0_reader.py +216 -340
  83. disdrodb/l0/l0a_processing.py +237 -208
  84. disdrodb/l0/l0b_nc_processing.py +227 -80
  85. disdrodb/l0/l0b_processing.py +96 -174
  86. disdrodb/l0/l0c_processing.py +627 -0
  87. disdrodb/l0/readers/{ARM → LPM/ARM}/ARM_LPM.py +36 -58
  88. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +236 -0
  89. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +185 -0
  90. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +185 -0
  91. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +195 -0
  92. disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +210 -0
  93. disdrodb/l0/readers/{BRAZIL/GOAMAZON_LPM.py → LPM/KIT/CHWALA.py} +97 -76
  94. disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +197 -0
  95. disdrodb/l0/readers/LPM/SLOVENIA/CRNI_VRH.py +197 -0
  96. disdrodb/l0/readers/{UK → LPM/UK}/DIVEN.py +14 -35
  97. disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +157 -0
  98. disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +113 -0
  99. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/ARCTIC_2021.py +40 -57
  100. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/COMMON_2011.py +37 -54
  101. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/DAVOS_2009_2011.py +34 -51
  102. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_2009.py +34 -51
  103. disdrodb/l0/readers/{EPFL/PARADISO_2014.py → PARSIVEL/EPFL/EPFL_ROOF_2008.py} +38 -50
  104. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +105 -0
  105. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2011.py +34 -51
  106. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2012.py +33 -51
  107. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GENEPI_2007.py +25 -44
  108. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007.py +25 -44
  109. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007_2.py +25 -44
  110. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HPICONET_2010.py +34 -51
  111. disdrodb/l0/readers/{EPFL/EPFL_ROOF_2010.py → PARSIVEL/EPFL/HYMEX_LTE_SOP2.py} +37 -50
  112. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +111 -0
  113. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HYMEX_LTE_SOP4.py +36 -54
  114. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2018.py +34 -52
  115. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2019.py +38 -56
  116. disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +105 -0
  117. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PARSIVEL_2007.py +27 -45
  118. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PLATO_2019.py +24 -44
  119. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +140 -0
  120. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RACLETS_2019_WJF.py +41 -59
  121. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RIETHOLZBACH_2011.py +34 -51
  122. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +117 -0
  123. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +137 -0
  124. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/UNIL_2022.py +42 -55
  125. disdrodb/l0/readers/PARSIVEL/GPM/IFLOODS.py +104 -0
  126. disdrodb/l0/readers/{GPM → PARSIVEL/GPM}/LPVEX.py +29 -48
  127. disdrodb/l0/readers/PARSIVEL/GPM/MC3E.py +184 -0
  128. disdrodb/l0/readers/PARSIVEL/KIT/BURKINA_FASO.py +133 -0
  129. disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +113 -0
  130. disdrodb/l0/readers/{NCAR/VORTEX_SE_2016_P1.py → PARSIVEL/NCAR/OWLES_MIPS.py} +46 -72
  131. disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +125 -0
  132. disdrodb/l0/readers/{NCAR/OWLES_MIPS.py → PARSIVEL/NCAR/PLOWS_MIPS.py} +45 -64
  133. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +114 -0
  134. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +176 -0
  135. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +183 -0
  136. disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL_FGG.py +121 -0
  137. disdrodb/l0/readers/{ARM/ARM_LD.py → PARSIVEL2/ARM/ARM_PARSIVEL2.py} +27 -50
  138. disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +163 -0
  139. disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +163 -0
  140. disdrodb/l0/readers/{DENMARK → PARSIVEL2/DENMARK}/EROSION_nc.py +14 -35
  141. disdrodb/l0/readers/PARSIVEL2/FRANCE/ENPC_PARSIVEL2.py +189 -0
  142. disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +119 -0
  143. disdrodb/l0/readers/PARSIVEL2/GPM/GCPEX.py +104 -0
  144. disdrodb/l0/readers/PARSIVEL2/GPM/NSSTC.py +176 -0
  145. disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +32 -0
  146. disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +56 -0
  147. disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +120 -0
  148. disdrodb/l0/readers/{NCAR → PARSIVEL2/NCAR}/PECAN_MIPS.py +45 -64
  149. disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +181 -0
  150. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +160 -0
  151. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +160 -0
  152. disdrodb/l0/readers/{NCAR/PLOWS_MIPS.py → PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py} +49 -66
  153. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +118 -0
  154. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +152 -0
  155. disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT.py +166 -0
  156. disdrodb/l0/readers/PWS100/FRANCE/ENPC_PWS100.py +150 -0
  157. disdrodb/l0/readers/{NCAR/RELAMPAGO_RD80.py → RD80/BRAZIL/CHUVA_RD80.py} +36 -60
  158. disdrodb/l0/readers/{BRAZIL → RD80/BRAZIL}/GOAMAZON_RD80.py +36 -55
  159. disdrodb/l0/readers/{NCAR → RD80/NCAR}/CINDY_2011_RD80.py +35 -54
  160. disdrodb/l0/readers/{BRAZIL/CHUVA_RD80.py → RD80/NCAR/RELAMPAGO_RD80.py} +40 -54
  161. disdrodb/l0/readers/RD80/NOAA/PSL_RD80.py +274 -0
  162. disdrodb/l0/readers/template_reader_raw_netcdf_data.py +62 -0
  163. disdrodb/l0/readers/{reader_template.py → template_reader_raw_text_data.py} +20 -44
  164. disdrodb/l0/routines.py +885 -581
  165. disdrodb/l0/standards.py +77 -238
  166. disdrodb/l0/template_tools.py +105 -110
  167. disdrodb/l1/__init__.py +17 -0
  168. disdrodb/l1/beard_model.py +716 -0
  169. disdrodb/l1/encoding_attrs.py +635 -0
  170. disdrodb/l1/fall_velocity.py +260 -0
  171. disdrodb/l1/filters.py +192 -0
  172. disdrodb/l1/processing.py +202 -0
  173. disdrodb/l1/resampling.py +236 -0
  174. disdrodb/l1/routines.py +358 -0
  175. disdrodb/l1_env/__init__.py +17 -0
  176. disdrodb/l1_env/routines.py +38 -0
  177. disdrodb/l2/__init__.py +17 -0
  178. disdrodb/l2/empirical_dsd.py +1833 -0
  179. disdrodb/l2/event.py +388 -0
  180. disdrodb/l2/processing.py +528 -0
  181. disdrodb/l2/processing_options.py +213 -0
  182. disdrodb/l2/routines.py +868 -0
  183. disdrodb/metadata/__init__.py +9 -2
  184. disdrodb/metadata/checks.py +180 -124
  185. disdrodb/metadata/download.py +81 -0
  186. disdrodb/metadata/geolocation.py +146 -0
  187. disdrodb/metadata/info.py +20 -13
  188. disdrodb/metadata/manipulation.py +3 -3
  189. disdrodb/metadata/reader.py +59 -8
  190. disdrodb/metadata/search.py +77 -144
  191. disdrodb/metadata/standards.py +83 -80
  192. disdrodb/metadata/writer.py +10 -16
  193. disdrodb/psd/__init__.py +38 -0
  194. disdrodb/psd/fitting.py +2146 -0
  195. disdrodb/psd/models.py +774 -0
  196. disdrodb/routines.py +1412 -0
  197. disdrodb/scattering/__init__.py +28 -0
  198. disdrodb/scattering/axis_ratio.py +344 -0
  199. disdrodb/scattering/routines.py +456 -0
  200. disdrodb/utils/__init__.py +17 -0
  201. disdrodb/utils/attrs.py +208 -0
  202. disdrodb/utils/cli.py +269 -0
  203. disdrodb/utils/compression.py +60 -42
  204. disdrodb/utils/dask.py +62 -0
  205. disdrodb/utils/dataframe.py +342 -0
  206. disdrodb/utils/decorators.py +110 -0
  207. disdrodb/utils/directories.py +107 -46
  208. disdrodb/utils/encoding.py +127 -0
  209. disdrodb/utils/list.py +29 -0
  210. disdrodb/utils/logger.py +168 -46
  211. disdrodb/utils/time.py +657 -0
  212. disdrodb/utils/warnings.py +30 -0
  213. disdrodb/utils/writer.py +57 -0
  214. disdrodb/utils/xarray.py +138 -47
  215. disdrodb/utils/yaml.py +0 -1
  216. disdrodb/viz/__init__.py +17 -0
  217. disdrodb/viz/plots.py +17 -0
  218. disdrodb-0.1.1.dist-info/METADATA +294 -0
  219. disdrodb-0.1.1.dist-info/RECORD +232 -0
  220. {disdrodb-0.0.21.dist-info → disdrodb-0.1.1.dist-info}/WHEEL +1 -1
  221. disdrodb-0.1.1.dist-info/entry_points.txt +30 -0
  222. disdrodb/data_transfer/scripts/disdrodb_download_archive.py +0 -53
  223. disdrodb/data_transfer/scripts/disdrodb_upload_archive.py +0 -57
  224. disdrodb/l0/configs/OTT_Parsivel/l0a_encodings.yml +0 -32
  225. disdrodb/l0/configs/OTT_Parsivel2/l0a_encodings.yml +0 -39
  226. disdrodb/l0/configs/RD_80/l0a_encodings.yml +0 -16
  227. disdrodb/l0/configs/RD_80/l0b_encodings.yml +0 -135
  228. disdrodb/l0/configs/Thies_LPM/l0a_encodings.yml +0 -80
  229. disdrodb/l0/io.py +0 -257
  230. disdrodb/l0/l0_processing.py +0 -1091
  231. disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_OTT.py +0 -178
  232. disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_THIES.py +0 -247
  233. disdrodb/l0/readers/BRAZIL/CHUVA_LPM.py +0 -204
  234. disdrodb/l0/readers/BRAZIL/CHUVA_OTT.py +0 -183
  235. disdrodb/l0/readers/BRAZIL/GOAMAZON_OTT.py +0 -183
  236. disdrodb/l0/readers/CHINA/CHONGQING.py +0 -131
  237. disdrodb/l0/readers/EPFL/EPFL_ROOF_2008.py +0 -128
  238. disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP2.py +0 -127
  239. disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP3.py +0 -129
  240. disdrodb/l0/readers/EPFL/RACLETS_2019.py +0 -158
  241. disdrodb/l0/readers/EPFL/SAMOYLOV_2017.py +0 -136
  242. disdrodb/l0/readers/EPFL/SAMOYLOV_2019.py +0 -158
  243. disdrodb/l0/readers/FRANCE/SIRTA_OTT2.py +0 -138
  244. disdrodb/l0/readers/GPM/GCPEX.py +0 -123
  245. disdrodb/l0/readers/GPM/IFLOODS.py +0 -123
  246. disdrodb/l0/readers/GPM/MC3E.py +0 -123
  247. disdrodb/l0/readers/GPM/NSSTC.py +0 -164
  248. disdrodb/l0/readers/ITALY/GID.py +0 -199
  249. disdrodb/l0/readers/MEXICO/OH_IIUNAM_nc.py +0 -92
  250. disdrodb/l0/readers/NCAR/CCOPE_2015.py +0 -133
  251. disdrodb/l0/readers/NCAR/PECAN_FP3.py +0 -137
  252. disdrodb/l0/readers/NCAR/PECAN_MOBILE.py +0 -144
  253. disdrodb/l0/readers/NCAR/RELAMPAGO_OTT.py +0 -195
  254. disdrodb/l0/readers/NCAR/SNOWIE_PJ.py +0 -172
  255. disdrodb/l0/readers/NCAR/SNOWIE_SB.py +0 -179
  256. disdrodb/l0/readers/NCAR/VORTEX2_2009.py +0 -133
  257. disdrodb/l0/readers/NCAR/VORTEX2_2010.py +0 -188
  258. disdrodb/l0/readers/NCAR/VORTEX2_2010_UF.py +0 -191
  259. disdrodb/l0/readers/NCAR/VORTEX_SE_2016_P2.py +0 -135
  260. disdrodb/l0/readers/NCAR/VORTEX_SE_2016_PIPS.py +0 -170
  261. disdrodb/l0/readers/NETHERLANDS/DELFT.py +0 -187
  262. disdrodb/l0/readers/SPAIN/SBEGUERIA.py +0 -179
  263. disdrodb/l0/scripts/disdrodb_run_l0b_concat.py +0 -93
  264. disdrodb/l0/scripts/disdrodb_run_l0b_concat_station.py +0 -85
  265. disdrodb/utils/netcdf.py +0 -452
  266. disdrodb/utils/scripts.py +0 -102
  267. disdrodb-0.0.21.dist-info/AUTHORS.md +0 -18
  268. disdrodb-0.0.21.dist-info/METADATA +0 -186
  269. disdrodb-0.0.21.dist-info/RECORD +0 -168
  270. disdrodb-0.0.21.dist-info/entry_points.txt +0 -15
  271. /disdrodb/l0/configs/{RD_80 → RD80}/bins_velocity.yml +0 -0
  272. /disdrodb/l0/manuals/{Thies_LPM.pdf → LPM.pdf} +0 -0
  273. /disdrodb/l0/manuals/{ODM_470.pdf → ODM470.pdf} +0 -0
  274. /disdrodb/l0/manuals/{OTT_Parsivel.pdf → PARSIVEL.pdf} +0 -0
  275. /disdrodb/l0/manuals/{OTT_Parsivel2.pdf → PARSIVEL2.pdf} +0 -0
  276. /disdrodb/l0/manuals/{PWS_100.pdf → PWS100.pdf} +0 -0
  277. /disdrodb/l0/manuals/{RD_80.pdf → RD80.pdf} +0 -0
  278. {disdrodb-0.0.21.dist-info → disdrodb-0.1.1.dist-info/licenses}/LICENSE +0 -0
  279. {disdrodb-0.0.21.dist-info → disdrodb-0.1.1.dist-info}/top_level.txt +0 -0
@@ -1,164 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- # -----------------------------------------------------------------------------.
18
- from disdrodb.l0 import run_l0a
19
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
20
-
21
-
22
- @is_documented_by(reader_generic_docstring)
23
- def reader(
24
- raw_dir,
25
- processed_dir,
26
- station_name,
27
- # Processing options
28
- force=False,
29
- verbose=False,
30
- parallel=False,
31
- debugging_mode=False,
32
- ):
33
- ##------------------------------------------------------------------------.
34
- #### - Define column names
35
- column_names = ["time", "TO_BE_SPLITTED"]
36
-
37
- ##------------------------------------------------------------------------.
38
- #### - Define reader options
39
- reader_kwargs = {}
40
- # - Define delimiter
41
- reader_kwargs["delimiter"] = ";"
42
- # - Skip first row as columns names
43
- reader_kwargs["header"] = None
44
- # - Skip file with encoding errors
45
- reader_kwargs["encoding_errors"] = "ignore"
46
- # - Avoid first column to become df index !!!
47
- reader_kwargs["index_col"] = False
48
- # - Define behaviour when encountering bad lines
49
- reader_kwargs["on_bad_lines"] = "skip"
50
- # - Define reader engine
51
- # - C engine is faster
52
- # - Python engine is more feature-complete
53
- reader_kwargs["engine"] = "python"
54
- # - Define on-the-fly decompression of on-disk data
55
- # - Available: gzip, bz2, zip
56
- reader_kwargs["compression"] = "infer"
57
- # - Strings to recognize as NA/NaN and replace with standard NA flags
58
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
59
- # ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’,
60
- # ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’
61
- reader_kwargs["na_values"] = ["na", "", "error", "-.-"]
62
-
63
- ##------------------------------------------------------------------------.
64
- #### - Define dataframe sanitizer function for L0 processing
65
- # Deal with changing file format after 25 feb 2011 by the documentation
66
- # - https://ghrc.nsstc.nasa.gov/pub/fieldCampaigns/gpmValidation/relatedProjects/nsstc/parsivel/doc/gpm_parsivel_nsstc_dataset.html).
67
-
68
- def df_sanitizer_fun(df):
69
- # - Import pandas
70
- import numpy as np
71
- import pandas as pd
72
-
73
- # - Check 'time' string length to detect corrupted rows
74
- df = df[df["time"].str.len() == 14]
75
-
76
- # - Convert time column to datetime
77
- df["time"] = pd.to_datetime(df["time"], format="%Y%m%d%H%M%S", errors="coerce")
78
-
79
- # Count number of delimiters in the column to be parsed
80
- # --> Some first rows are corrupted, so count the most frequent occurrence
81
- possible_delimiters, counts = np.unique(df["TO_BE_SPLITTED"].str.count(","), return_counts=True)
82
- n_delimiters = possible_delimiters[np.argmax(counts)]
83
-
84
- if n_delimiters == 1027:
85
- # - Select valid rows
86
- df = df.loc[df["TO_BE_SPLITTED"].str.count(",") == 1027]
87
- # - Get time column
88
- df_time = df["time"]
89
- # - Split the 'TO_BE_SPLITTED' column
90
- df = df["TO_BE_SPLITTED"].str.split(",", expand=True, n=3)
91
- # - Assign column names
92
- column_names = [
93
- "station_name",
94
- "sensor_status",
95
- "sensor_temperature",
96
- "raw_drop_number",
97
- ]
98
- df.columns = column_names
99
- # - Add time column
100
- df["time"] = df_time
101
- # - Add missing columns and set NaN value
102
- missing_columns = [
103
- "number_particles",
104
- "rainfall_rate_32bit",
105
- "reflectivity_16bit",
106
- "mor_visibility",
107
- "weather_code_synop_4680",
108
- "weather_code_synop_4677",
109
- ]
110
- for column in missing_columns:
111
- df[column] = "NaN"
112
- elif n_delimiters == 1033:
113
- # - Select valid rows
114
- df = df.loc[df["TO_BE_SPLITTED"].str.count(",") == 1033]
115
- # - Get time column
116
- df_time = df["time"]
117
- # - Split the column be parsed
118
- df = df["TO_BE_SPLITTED"].str.split(",", expand=True, n=9)
119
- # - Assign column names
120
- column_names = [
121
- "station_name",
122
- "sensor_status",
123
- "sensor_temperature",
124
- "number_particles",
125
- "rainfall_rate_32bit",
126
- "reflectivity_16bit",
127
- "mor_visibility",
128
- "weather_code_synop_4680",
129
- "weather_code_synop_4677",
130
- "raw_drop_number",
131
- ]
132
- df.columns = column_names
133
- # - Add time column
134
- df["time"] = df_time
135
- else:
136
- # Wrong number of delimiters ... likely a corrupted file
137
- raise ValueError("Unexpected number of comma delimiters !")
138
-
139
- # - Drop columns not agreeing with DISDRODB L0 standards
140
- df = df.drop(columns=["station_name"])
141
-
142
- return df
143
-
144
- ##------------------------------------------------------------------------.
145
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
146
- glob_patterns = "*.dat"
147
-
148
- ####----------------------------------------------------------------------.
149
- #### - Create L0A products
150
- run_l0a(
151
- raw_dir=raw_dir,
152
- processed_dir=processed_dir,
153
- station_name=station_name,
154
- # Custom arguments of the reader for L0A processing
155
- glob_patterns=glob_patterns,
156
- column_names=column_names,
157
- reader_kwargs=reader_kwargs,
158
- df_sanitizer_fun=df_sanitizer_fun,
159
- # Processing options
160
- force=force,
161
- verbose=verbose,
162
- parallel=parallel,
163
- debugging_mode=debugging_mode,
164
- )
@@ -1,199 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- # -----------------------------------------------------------------------------.
18
- """Reader for the GID LPM network."""
19
- from disdrodb.l0 import run_l0a
20
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
21
-
22
-
23
- @is_documented_by(reader_generic_docstring)
24
- def reader(
25
- raw_dir,
26
- processed_dir,
27
- station_name,
28
- # Processing options
29
- force=False,
30
- verbose=False,
31
- parallel=False,
32
- debugging_mode=False,
33
- ):
34
- ##------------------------------------------------------------------------.
35
- #### - Define column names
36
- column_names = ["TO_BE_SPLITTED"]
37
-
38
- ##------------------------------------------------------------------------.
39
- #### - Define reader options
40
- reader_kwargs = {}
41
- # - Define delimiter
42
- reader_kwargs["delimiter"] = "\n"
43
- # Skip first row as columns names
44
- reader_kwargs["header"] = None
45
- # - Avoid first column to become df index
46
- reader_kwargs["index_col"] = False
47
- # - Define behaviour when encountering bad lines
48
- reader_kwargs["on_bad_lines"] = "skip"
49
- # - Define reader engine
50
- # - C engine is faster
51
- # - Python engine is more feature-complete
52
- reader_kwargs["engine"] = "python"
53
- # - Define on-the-fly decompression of on-disk data
54
- # - Available: gzip, bz2, zip
55
- reader_kwargs["compression"] = "infer"
56
- # - Strings to recognize as NA/NaN and replace with standard NA flags
57
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
58
- # ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’,
59
- # ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’
60
- reader_kwargs["na_values"] = ["na", "", "error", "NA", "-.-"]
61
-
62
- ##------------------------------------------------------------------------.
63
- #### - Define dataframe sanitizer function for L0 processing
64
- def df_sanitizer_fun(df):
65
- # - Import pandas
66
- import pandas as pd
67
-
68
- # - Split columns
69
- df = df["TO_BE_SPLITTED"].str.split(";", n=79, expand=True)
70
-
71
- # - Assign column names
72
- column_names = [
73
- "start_identifier",
74
- "sensor_serial_number",
75
- "software_version",
76
- "sensor_date",
77
- "sensor_time",
78
- "weather_code_synop_4677_5min",
79
- "weather_code_synop_4680_5min",
80
- "weather_code_metar_4678_5min",
81
- "precipitation_rate_5min",
82
- "weather_code_synop_4677",
83
- "weather_code_synop_4680",
84
- "weather_code_metar_4678",
85
- "precipitation_rate",
86
- "rainfall_rate",
87
- "snowfall_rate",
88
- "precipitation_accumulated",
89
- "mor_visibility",
90
- "reflectivity",
91
- "quality_index",
92
- "max_hail_diameter",
93
- "laser_status",
94
- "static_signal",
95
- "laser_temperature_analog_status",
96
- "laser_temperature_digital_status",
97
- "laser_current_analog_status",
98
- "laser_current_digital_status",
99
- "sensor_voltage_supply_status",
100
- "current_heating_pane_transmitter_head_status",
101
- "current_heating_pane_receiver_head_status",
102
- "temperature_sensor_status",
103
- "current_heating_voltage_supply_status",
104
- "current_heating_house_status",
105
- "current_heating_heads_status",
106
- "current_heating_carriers_status",
107
- "control_output_laser_power_status",
108
- "reserve_status",
109
- "temperature_interior",
110
- "laser_temperature",
111
- "laser_current_average",
112
- "control_voltage",
113
- "optical_control_voltage_output",
114
- "sensor_voltage_supply",
115
- "current_heating_pane_transmitter_head",
116
- "current_heating_pane_receiver_head",
117
- "temperature_ambient",
118
- "current_heating_voltage_supply",
119
- "current_heating_house",
120
- "current_heating_heads",
121
- "current_heating_carriers",
122
- "number_particles",
123
- "number_particles_internal_data",
124
- "number_particles_min_speed",
125
- "number_particles_min_speed_internal_data",
126
- "number_particles_max_speed",
127
- "number_particles_max_speed_internal_data",
128
- "number_particles_min_diameter",
129
- "number_particles_min_diameter_internal_data",
130
- "number_particles_no_hydrometeor",
131
- "number_particles_no_hydrometeor_internal_data",
132
- "number_particles_unknown_classification",
133
- "number_particles_unknown_classification_internal_data",
134
- "number_particles_class_1",
135
- "number_particles_class_1_internal_data",
136
- "number_particles_class_2",
137
- "number_particles_class_2_internal_data",
138
- "number_particles_class_3",
139
- "number_particles_class_3_internal_data",
140
- "number_particles_class_4",
141
- "number_particles_class_4_internal_data",
142
- "number_particles_class_5",
143
- "number_particles_class_5_internal_data",
144
- "number_particles_class_6",
145
- "number_particles_class_6_internal_data",
146
- "number_particles_class_7",
147
- "number_particles_class_7_internal_data",
148
- "number_particles_class_8",
149
- "number_particles_class_8_internal_data",
150
- "number_particles_class_9",
151
- "number_particles_class_9_internal_data",
152
- "raw_drop_number",
153
- ]
154
- df.columns = column_names
155
-
156
- # - Remove checksum at end of raw_drop_number
157
- df["raw_drop_number"] = df["raw_drop_number"].str.slice(stop=1760)
158
-
159
- # - Define 'time column
160
- df["time"] = df["sensor_date"].astype(str) + " " + df["sensor_time"].astype(str)
161
-
162
- # - Convert time column to datetime
163
- df["time"] = pd.to_datetime(df["time"], format="%d.%m.%y %H:%M:%S", errors="coerce")
164
-
165
- # - Drop columns not agreeing with DISDRODB L0 standards
166
- columns_to_drop = [
167
- "start_identifier",
168
- "software_version",
169
- "sensor_serial_number",
170
- "sensor_date",
171
- "sensor_time",
172
- ]
173
- df = df.drop(columns=columns_to_drop)
174
-
175
- df = df.drop(columns=["sensor_date", "sensor_time"])
176
-
177
- return df
178
-
179
- ##------------------------------------------------------------------------.
180
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
181
- glob_patterns = "*.txt*"
182
-
183
- ####----------------------------------------------------------------------.
184
- #### - Create L0A products
185
- run_l0a(
186
- raw_dir=raw_dir,
187
- processed_dir=processed_dir,
188
- station_name=station_name,
189
- # Custom arguments of the reader for L0A processing
190
- glob_patterns=glob_patterns,
191
- column_names=column_names,
192
- reader_kwargs=reader_kwargs,
193
- df_sanitizer_fun=df_sanitizer_fun,
194
- # Processing options
195
- force=force,
196
- verbose=verbose,
197
- parallel=parallel,
198
- debugging_mode=debugging_mode,
199
- )
@@ -1,92 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- # -----------------------------------------------------------------------------.
18
- """Reader for MEXICO OH_IIUNAM OTT Parsivel2 Mexico City Network."""
19
- from disdrodb.l0 import run_l0b_from_nc
20
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
21
-
22
-
23
- @is_documented_by(reader_generic_docstring)
24
- def reader(
25
- raw_dir,
26
- processed_dir,
27
- station_name,
28
- # Processing options
29
- force=False,
30
- verbose=False,
31
- parallel=False,
32
- debugging_mode=False,
33
- ):
34
- # Define dictionary mapping dataset variables to select and rename
35
- dict_names = {
36
- ### Dimensions
37
- "diameter": "diameter_bin_center",
38
- "velocity": "velocity_bin_center",
39
- ### Variables
40
- "intensity": "rainfall_rate_32bit",
41
- "rain": "rainfall_accumulated_32bit",
42
- "reflectivity": "reflectivity_32bit",
43
- "visibility": "mor_visibility",
44
- "particles": "number_particles",
45
- # "energy": "rain_kinetic_energy", #KJ, Parsivel log in J/mh
46
- # "velocity_avg": only depend on time
47
- # "diameter_avg": only depend on time
48
- "spectrum": "raw_drop_number",
49
- }
50
-
51
- # Define dataset sanitizer
52
- def ds_sanitizer_fun(ds):
53
- # from disdrodb.l0.l0b_nc_processing import replace_custom_nan_flags
54
-
55
- # # Replace nan flags with np.nan
56
- # # - ARM use the -9999 flags
57
- # nan_flags_variables = [
58
- # "sensor_temperature",
59
- # "laser_amplitude",
60
- # "mor_visibility",
61
- # "number_particles",
62
- # "weather_code_synop_4680",
63
- # "raw_drop_number",
64
- # ]
65
- # dict_nan_flags = {var: [-9999] for var in nan_flags_variables}
66
- # ds = replace_custom_nan_flags(ds, dict_nan_flags=dict_nan_flags)
67
-
68
- # Return dataset
69
- return ds
70
-
71
- # Define glob pattern to search data files in <raw_dir>/data/<station_name>
72
- glob_patterns = "*.nc"
73
-
74
- ####----------------------------------------------------------------------.
75
- #### - Create L0A products
76
- run_l0b_from_nc(
77
- raw_dir=raw_dir,
78
- processed_dir=processed_dir,
79
- station_name=station_name,
80
- # Custom arguments of the reader
81
- glob_patterns=glob_patterns,
82
- dict_names=dict_names,
83
- ds_sanitizer_fun=ds_sanitizer_fun,
84
- # Processing options
85
- force=force,
86
- verbose=verbose,
87
- parallel=parallel,
88
- debugging_mode=debugging_mode,
89
- )
90
-
91
-
92
- # -----------------------------------------------------------------.
@@ -1,133 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- # -----------------------------------------------------------------------------.
18
- from disdrodb.l0 import run_l0a
19
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
20
-
21
-
22
- @is_documented_by(reader_generic_docstring)
23
- def reader(
24
- raw_dir,
25
- processed_dir,
26
- station_name,
27
- # Processing options
28
- force=False,
29
- verbose=False,
30
- parallel=False,
31
- debugging_mode=False,
32
- ):
33
- ##------------------------------------------------------------------------.
34
- #### - Define column names
35
- column_names = ["TO_PARSE"]
36
-
37
- ##------------------------------------------------------------------------.
38
- #### - Define reader options
39
- reader_kwargs = {}
40
- # - Define delimiter
41
- reader_kwargs["delimiter"] = "\\n"
42
-
43
- # Skip first row as columns names
44
- reader_kwargs["header"] = None
45
-
46
- # - Avoid first column to become df index !!!
47
- reader_kwargs["index_col"] = False
48
-
49
- # - Define behaviour when encountering bad lines
50
- reader_kwargs["on_bad_lines"] = "skip"
51
-
52
- # - Define encoding
53
- reader_kwargs["encoding"] = "ISO-8859-1"
54
-
55
- # - Define reader engine
56
- # - C engine is faster
57
- # - Python engine is more feature-complete
58
- reader_kwargs["engine"] = "python"
59
-
60
- # - Define on-the-fly decompression of on-disk data
61
- # - Available: gzip, bz2, zip
62
- reader_kwargs["compression"] = "infer"
63
-
64
- # - Strings to recognize as NA/NaN and replace with standard NA flags
65
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
66
- # ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’,
67
- # ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’
68
- reader_kwargs["na_values"] = ["na", "", "error"]
69
-
70
- ##------------------------------------------------------------------------.
71
- #### - Define dataframe sanitizer function for L0 processing
72
-
73
- def df_sanitizer_fun(df):
74
- # - Import pandas
75
- import pandas as pd
76
-
77
- # - Retrieve file start time (date hour:minute)
78
- start_time = df["TO_PARSE"].iloc[0]
79
- start_time = start_time[0:16]
80
- start_time = pd.to_datetime(start_time, format="%m/%d/%Y %H:%M", errors="coerce")
81
- df = df.iloc[1:] # remove start_time row
82
-
83
- # - Replace heterogeneous number of spaces with ;
84
- df["TO_PARSE"] = df["TO_PARSE"].str.replace(r" +", ";", regex=True)
85
-
86
- # - Split into columns and assign name
87
- df = df["TO_PARSE"].str.split(";", expand=True)
88
- columns = [
89
- "MMSSmmm",
90
- "rainfall_rate_32bit",
91
- "rainfall_accumulated_32bit",
92
- "reflectivity_32bit",
93
- "number_particles",
94
- "sensor_status",
95
- "error_code",
96
- "raw_drop_concentration",
97
- "raw_drop_average_velocity",
98
- "raw_drop_number",
99
- ]
100
- df.columns = columns
101
-
102
- # - Define datetime 'time' column
103
- dt_minute = df["MMSSmmm"].str[0:2].astype(int).astype("<m8[m]")
104
- dt_second = df["MMSSmmm"].str[2:4].astype(int).astype("<m8[s]")
105
- df_time = start_time + dt_minute + dt_second
106
- df["time"] = df_time
107
-
108
- # - Drop columns not agreeing with DISDRODB L0 standards
109
- df = df.drop(columns=["MMSSmmm"])
110
-
111
- return df
112
-
113
- ##------------------------------------------------------------------------.
114
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
115
- glob_patterns = "*.txt"
116
-
117
- ####----------------------------------------------------------------------.
118
- #### - Create L0A products
119
- run_l0a(
120
- raw_dir=raw_dir,
121
- processed_dir=processed_dir,
122
- station_name=station_name,
123
- # Custom arguments of the reader for L0A processing
124
- glob_patterns=glob_patterns,
125
- column_names=column_names,
126
- reader_kwargs=reader_kwargs,
127
- df_sanitizer_fun=df_sanitizer_fun,
128
- # Processing options
129
- force=force,
130
- verbose=verbose,
131
- parallel=parallel,
132
- debugging_mode=debugging_mode,
133
- )