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,178 +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_BE_PARSED"]
36
-
37
- ##------------------------------------------------------------------------.
38
- #### - Define reader options
39
- reader_kwargs = {}
40
-
41
- # - Define delimiter
42
- reader_kwargs["delimiter"] = "/\n"
43
-
44
- # Skip first row as columns names
45
- reader_kwargs["header"] = None
46
-
47
- # Skip first 2 rows
48
- reader_kwargs["skiprows"] = 2
49
-
50
- # - Avoid first column to become df index !!!
51
- reader_kwargs["index_col"] = False
52
-
53
- # - Define behaviour when encountering bad lines
54
- reader_kwargs["on_bad_lines"] = "skip"
55
-
56
- # - Define reader engine
57
- # - C engine is faster
58
- # - Python engine is more feature-complete
59
- reader_kwargs["engine"] = "python"
60
-
61
- # - Define on-the-fly decompression of on-disk data
62
- # - Available: gzip, bz2, zip
63
- reader_kwargs["compression"] = "infer"
64
-
65
- # - Strings to recognize as NA/NaN and replace with standard NA flags
66
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
67
- # ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’,
68
- # ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’
69
- reader_kwargs["na_values"] = ["na", "", "error", "NA"]
70
-
71
- ##------------------------------------------------------------------------.
72
- #### - Define dataframe sanitizer
73
-
74
- def df_sanitizer_fun(df):
75
- # Import numpy and pandas
76
- import numpy as np
77
- import pandas as pd
78
-
79
- # Remove rows with invalid length
80
- # - time: 20
81
- # - data: 4638
82
- df = df[df["TO_BE_PARSED"].str.len().isin([20, 4638])]
83
- df = df.reset_index(drop=True)
84
-
85
- # Remove rows with consecutive timesteps
86
- # - Keep last timestep occurrence
87
- idx_timesteps = np.where(df["TO_BE_PARSED"].str.len() == 20)[0]
88
- idx_without_data = np.where(np.diff(idx_timesteps) == 1)[0].flatten().astype(int)
89
- idx_timesteps_without_data = idx_timesteps[idx_without_data]
90
- df = df.drop(labels=idx_timesteps_without_data)
91
-
92
- # If the last row is a timestep, remove it
93
- if df["TO_BE_PARSED"].str.len().iloc[-1] == 20:
94
- df = df[:-1]
95
-
96
- # Check there are data to process
97
- if len(df) == 0 or len(df) == 1:
98
- raise ValueError("No data to process.")
99
-
100
- # Retrieve time
101
- df_time = df[::2]
102
- df_time = df_time.reset_index(drop=True)
103
-
104
- # Retrieve data
105
- df_data = df[1::2]
106
- df_data = df_data.reset_index(drop=True)
107
-
108
- if len(df_time) != len(df_data):
109
- raise ValueError("Likely corrupted data. Not same number of timesteps and data.")
110
-
111
- # Remove starting - from timestep
112
- df_time = df_time["TO_BE_PARSED"].str.replace("-", "", n=1)
113
-
114
- # Create dataframe
115
- df_data["time"] = df_time.to_numpy()
116
-
117
- # Count number of delimiters to identify valid rows
118
- df_data = df_data[df_data["TO_BE_PARSED"].str.count(";") == 1104]
119
-
120
- # Split by ; delimiter
121
- df = df_data["TO_BE_PARSED"].str.split(";", expand=True, n=16)
122
-
123
- # Assign column names
124
- column_names = [
125
- "rainfall_rate_32bit",
126
- "rainfall_accumulated_32bit",
127
- "weather_code_synop_4680",
128
- "weather_code_synop_4677",
129
- "weather_code_metar_4678",
130
- "reflectivity_32bit",
131
- "mor_visibility",
132
- "laser_amplitude",
133
- "number_particles",
134
- "unknown1",
135
- "sensor_battery_voltage",
136
- "sensor_status",
137
- "station_name",
138
- "sensor_temperature",
139
- "rainfall_amount_absolute_32bit",
140
- "error_code",
141
- "RAW_TO_PARSE",
142
- ]
143
-
144
- df.columns = column_names
145
- # Add valid timestep
146
- df["time"] = pd.to_datetime(df_data["time"], format="%Y-%m-%d %H:%M:%S")
147
-
148
- # Add raw array
149
- df["raw_drop_concentration"] = df["RAW_TO_PARSE"].str[:224]
150
- df["raw_drop_average_velocity"] = df["RAW_TO_PARSE"].str[224:448]
151
- df["raw_drop_number"] = df["RAW_TO_PARSE"].str[448:]
152
-
153
- # Drop columns not agreeing with DISDRODB L0 standards
154
- df = df.drop(columns=["station_name", "RAW_TO_PARSE", "unknown1"])
155
-
156
- return df
157
-
158
- ##------------------------------------------------------------------------.
159
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
160
- glob_patterns = "*.txt"
161
-
162
- ####----------------------------------------------------------------------.
163
- #### - Create L0A products
164
- run_l0a(
165
- raw_dir=raw_dir,
166
- processed_dir=processed_dir,
167
- station_name=station_name,
168
- # Custom arguments of the reader for L0A processing
169
- glob_patterns=glob_patterns,
170
- column_names=column_names,
171
- reader_kwargs=reader_kwargs,
172
- df_sanitizer_fun=df_sanitizer_fun,
173
- # Processing options
174
- force=force,
175
- verbose=verbose,
176
- parallel=parallel,
177
- debugging_mode=debugging_mode,
178
- )
@@ -1,247 +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_BE_PARSED"]
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 first 3 rows
45
- reader_kwargs["skiprows"] = 2
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", "NA"] # NP
62
-
63
- ##------------------------------------------------------------------------.
64
- #### - Define facultative dataframe sanitizer function for L0 processing
65
-
66
- def df_sanitizer_fun(df):
67
- # Import numpy and pandas
68
- import numpy as np
69
- import pandas as pd
70
-
71
- # Remove rows with invalid length
72
- # - time: 20
73
- # - data: 2229
74
- df = df[df["TO_BE_PARSED"].str.len().isin([20, 2229])]
75
- df = df.reset_index(drop=True)
76
- # Remove rows with consecutive timesteps
77
- # - Keep last timestep occurrence
78
- idx_timesteps = np.where(df["TO_BE_PARSED"].str.len() == 20)[0]
79
- idx_without_data = np.where(np.diff(idx_timesteps) == 1)[0].flatten().astype(int)
80
- idx_timesteps_without_data = idx_timesteps[idx_without_data]
81
- df = df.drop(labels=idx_timesteps_without_data)
82
-
83
- # If the last row is a timestep, remove it
84
- if df["TO_BE_PARSED"].str.len().iloc[-1] == 20:
85
- df = df[:-1]
86
-
87
- # Check there are data to process
88
- if len(df) == 0 or len(df) == 1:
89
- raise ValueError("No data to process.")
90
-
91
- # Retrieve time
92
- df_time = df[::2]
93
- df_time = df_time.reset_index(drop=True)
94
-
95
- # Retrieve data
96
- df_data = df[1::2]
97
- df_data = df_data.reset_index(drop=True)
98
-
99
- if len(df_time) != len(df_data):
100
- raise ValueError("Likely corrupted data. Not same number of timesteps and data.")
101
-
102
- # Remove starting - from timestep
103
- df_time = df_time["TO_BE_PARSED"].str.replace("-", "", n=1)
104
-
105
- # Format time in datetime64
106
- df_time = pd.to_datetime(df_time, format="%Y-%m-%d %H:%M:%S", errors="coerce")
107
-
108
- # Create dataframe
109
- df_data["time"] = df_time.to_numpy()
110
-
111
- # Drop rows with invalid time
112
- df_data = df_data.dropna(subset="time")
113
-
114
- # Count number of delimiters to identify valid rows
115
- df_data = df_data[df_data["TO_BE_PARSED"].str.count(";") == 524]
116
-
117
- # Split by ; delimiter
118
- df = df_data["TO_BE_PARSED"].str.split(";", expand=True, n=79)
119
-
120
- # Assign column names
121
- column_names = [
122
- "start_identifier",
123
- "device_address",
124
- "sensor_serial_number",
125
- "sensor_date",
126
- "sensor_time",
127
- "weather_code_synop_4677_5min",
128
- "weather_code_synop_4680_5min",
129
- "weather_code_metar_4678_5min",
130
- "precipitation_rate_5min",
131
- "weather_code_synop_4677",
132
- "weather_code_synop_4680",
133
- "weather_code_metar_4678",
134
- "precipitation_rate",
135
- "rainfall_rate",
136
- "snowfall_rate",
137
- "precipitation_accumulated",
138
- "mor_visibility",
139
- "reflectivity",
140
- "quality_index",
141
- "max_hail_diameter",
142
- "laser_status",
143
- "static_signal",
144
- "laser_temperature_analog_status",
145
- "laser_temperature_digital_status",
146
- "laser_current_analog_status",
147
- "laser_current_digital_status",
148
- "sensor_voltage_supply_status",
149
- "current_heating_pane_transmitter_head_status",
150
- "current_heating_pane_receiver_head_status",
151
- "temperature_sensor_status",
152
- "current_heating_voltage_supply_status",
153
- "current_heating_house_status",
154
- "current_heating_heads_status",
155
- "current_heating_carriers_status",
156
- "control_output_laser_power_status",
157
- "reserve_status",
158
- "temperature_interior",
159
- "laser_temperature",
160
- "laser_current_average",
161
- "control_voltage",
162
- "optical_control_voltage_output",
163
- "sensor_voltage_supply",
164
- "current_heating_pane_transmitter_head",
165
- "current_heating_pane_receiver_head",
166
- "temperature_ambient",
167
- "current_heating_voltage_supply",
168
- "current_heating_house",
169
- "current_heating_heads",
170
- "current_heating_carriers",
171
- "number_particles",
172
- "number_particles_internal_data",
173
- "number_particles_min_speed",
174
- "number_particles_min_speed_internal_data",
175
- "number_particles_max_speed",
176
- "number_particles_max_speed_internal_data",
177
- "number_particles_min_diameter",
178
- "number_particles_min_diameter_internal_data",
179
- "number_particles_no_hydrometeor",
180
- "number_particles_no_hydrometeor_internal_data",
181
- "number_particles_unknown_classification",
182
- "number_particles_unknown_classification_internal_data",
183
- "number_particles_class_1",
184
- "number_particles_class_1_internal_data",
185
- "number_particles_class_2",
186
- "number_particles_class_2_internal_data",
187
- "number_particles_class_3",
188
- "number_particles_class_3_internal_data",
189
- "number_particles_class_4",
190
- "number_particles_class_4_internal_data",
191
- "number_particles_class_5",
192
- "number_particles_class_5_internal_data",
193
- "number_particles_class_6",
194
- "number_particles_class_6_internal_data",
195
- "number_particles_class_7",
196
- "number_particles_class_7_internal_data",
197
- "number_particles_class_8",
198
- "number_particles_class_8_internal_data",
199
- "number_particles_class_9",
200
- "number_particles_class_9_internal_data",
201
- "raw_drop_number",
202
- ]
203
- df.columns = column_names
204
-
205
- # Drop row if start_identifier different than 00
206
- df["time"] = df_data["time"]
207
- df = df[df["start_identifier"].astype(str) == "00"]
208
-
209
- # Clean raw_drop_number (ignore last 5 column)
210
- df["raw_drop_number"] = df["raw_drop_number"].str[:1760]
211
-
212
- # Drop rows with invalid raw_drop_number
213
- df = df[df["raw_drop_number"].astype(str).str.len() == 1760]
214
-
215
- # - Drop columns not agreeing with DISDRODB L0 standards
216
- columns_to_drop = [
217
- "start_identifier",
218
- "device_address",
219
- "sensor_serial_number",
220
- "sensor_date",
221
- "sensor_time",
222
- ]
223
- df = df.drop(columns=columns_to_drop)
224
-
225
- return df
226
-
227
- ##------------------------------------------------------------------------.
228
- #### - Define glob pattern to search data files in raw_dir/data/<station_name>
229
- glob_patterns = "*.txt*"
230
-
231
- ####----------------------------------------------------------------------.
232
- #### - Create L0A products
233
- run_l0a(
234
- raw_dir=raw_dir,
235
- processed_dir=processed_dir,
236
- station_name=station_name,
237
- # Custom arguments of the reader for L0A processing
238
- glob_patterns=glob_patterns,
239
- column_names=column_names,
240
- reader_kwargs=reader_kwargs,
241
- df_sanitizer_fun=df_sanitizer_fun,
242
- # Processing options
243
- force=force,
244
- verbose=verbose,
245
- parallel=parallel,
246
- debugging_mode=debugging_mode,
247
- )
@@ -1,204 +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_BE_PARSED"]
36
-
37
- ##------------------------------------------------------------------------.
38
- #### - Define reader options
39
- reader_kwargs = {}
40
- # - Define delimiter
41
- reader_kwargs["delimiter"] = "\\n"
42
- # - Skip first row as columns names
43
- # - Define encoding
44
- reader_kwargs["encoding"] = "latin" # "ISO-8859-1"
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"]
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
- # Count number of delimiters to identify valid rows
69
- df = df[df["TO_BE_PARSED"].str.count(";") == 520]
70
-
71
- # Split by ; delimiter
72
- df = df["TO_BE_PARSED"].str.split(";", expand=True, n=79)
73
-
74
- # Assign column names
75
- column_names = [
76
- "start_identifier",
77
- "device_address",
78
- "sensor_serial_number",
79
- "sensor_date",
80
- "sensor_time",
81
- "weather_code_synop_4677_5min",
82
- "weather_code_synop_4680_5min",
83
- "weather_code_metar_4678_5min",
84
- "precipitation_rate_5min",
85
- "weather_code_synop_4677",
86
- "weather_code_synop_4680",
87
- "weather_code_metar_4678",
88
- "precipitation_rate",
89
- "rainfall_rate",
90
- "snowfall_rate",
91
- "precipitation_accumulated",
92
- "mor_visibility",
93
- "reflectivity",
94
- "quality_index",
95
- "max_hail_diameter",
96
- "laser_status",
97
- "static_signal",
98
- "laser_temperature_analog_status",
99
- "laser_temperature_digital_status",
100
- "laser_current_analog_status",
101
- "laser_current_digital_status",
102
- "sensor_voltage_supply_status",
103
- "current_heating_pane_transmitter_head_status",
104
- "current_heating_pane_receiver_head_status",
105
- "temperature_sensor_status",
106
- "current_heating_voltage_supply_status",
107
- "current_heating_house_status",
108
- "current_heating_heads_status",
109
- "current_heating_carriers_status",
110
- "control_output_laser_power_status",
111
- "reserve_status",
112
- "temperature_interior",
113
- "laser_temperature",
114
- "laser_current_average",
115
- "control_voltage",
116
- "optical_control_voltage_output",
117
- "sensor_voltage_supply",
118
- "current_heating_pane_transmitter_head",
119
- "current_heating_pane_receiver_head",
120
- "temperature_ambient",
121
- "current_heating_voltage_supply",
122
- "current_heating_house",
123
- "current_heating_heads",
124
- "current_heating_carriers",
125
- "number_particles",
126
- "number_particles_internal_data",
127
- "number_particles_min_speed",
128
- "number_particles_min_speed_internal_data",
129
- "number_particles_max_speed",
130
- "number_particles_max_speed_internal_data",
131
- "number_particles_min_diameter",
132
- "number_particles_min_diameter_internal_data",
133
- "number_particles_no_hydrometeor",
134
- "number_particles_no_hydrometeor_internal_data",
135
- "number_particles_unknown_classification",
136
- "number_particles_unknown_classification_internal_data",
137
- "number_particles_class_1",
138
- "number_particles_class_1_internal_data",
139
- "number_particles_class_2",
140
- "number_particles_class_2_internal_data",
141
- "number_particles_class_3",
142
- "number_particles_class_3_internal_data",
143
- "number_particles_class_4",
144
- "number_particles_class_4_internal_data",
145
- "number_particles_class_5",
146
- "number_particles_class_5_internal_data",
147
- "number_particles_class_6",
148
- "number_particles_class_6_internal_data",
149
- "number_particles_class_7",
150
- "number_particles_class_7_internal_data",
151
- "number_particles_class_8",
152
- "number_particles_class_8_internal_data",
153
- "number_particles_class_9",
154
- "number_particles_class_9_internal_data",
155
- "raw_drop_number",
156
- ]
157
- df.columns = column_names
158
-
159
- # Define datetime "time" column
160
- df["time"] = df["sensor_date"] + "-" + df["sensor_time"]
161
- df["time"] = pd.to_datetime(df["time"], format="%d.%m.%y-%H:%M:%S", errors="coerce")
162
-
163
- # Drop row if start_identifier different than 00
164
- df = df[df["start_identifier"].astype(str) == "00"]
165
-
166
- # Clean raw_drop_number (ignore last "AC" character)
167
- df["raw_drop_number"] = df["raw_drop_number"].str[:1760]
168
-
169
- # Drop rows with invalid raw_drop_number
170
- df = df[df["raw_drop_number"].astype(str).str.len() == 1760]
171
-
172
- # - Drop columns not agreeing with DISDRODB L0 standards
173
- columns_to_drop = [
174
- "start_identifier",
175
- "device_address",
176
- "sensor_serial_number",
177
- "sensor_date",
178
- "sensor_time",
179
- ]
180
- df = df.drop(columns=columns_to_drop)
181
-
182
- return df
183
-
184
- ##------------------------------------------------------------------------.
185
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
186
- glob_patterns = "DISL*"
187
-
188
- ####----------------------------------------------------------------------.
189
- #### - Create L0A products
190
- run_l0a(
191
- raw_dir=raw_dir,
192
- processed_dir=processed_dir,
193
- station_name=station_name,
194
- # Custom arguments of the reader for L0A processing
195
- glob_patterns=glob_patterns,
196
- column_names=column_names,
197
- reader_kwargs=reader_kwargs,
198
- df_sanitizer_fun=df_sanitizer_fun,
199
- # Processing options
200
- force=force,
201
- verbose=verbose,
202
- parallel=parallel,
203
- debugging_mode=debugging_mode,
204
- )