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
@@ -0,0 +1,157 @@
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
+ import numpy as np
19
+ import pandas as pd
20
+
21
+ from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
22
+ from disdrodb.l0.l0a_processing import read_raw_text_file
23
+
24
+
25
+ @is_documented_by(reader_generic_docstring)
26
+ def reader(
27
+ filepath,
28
+ logger=None,
29
+ ):
30
+ """Reader."""
31
+ ##------------------------------------------------------------------------.
32
+ #### Define column names
33
+ column_names = ["TO_BE_PARSED"]
34
+
35
+ ##------------------------------------------------------------------------.
36
+ #### Define reader options
37
+ reader_kwargs = {}
38
+
39
+ # - Define delimiter
40
+ reader_kwargs["delimiter"] = "/\n"
41
+
42
+ # Skip first row as columns names
43
+ reader_kwargs["header"] = None
44
+
45
+ # Skip first 2 rows
46
+ reader_kwargs["skiprows"] = 2
47
+
48
+ # - Avoid first column to become df index !!!
49
+ reader_kwargs["index_col"] = False
50
+
51
+ # - Define behaviour when encountering bad lines
52
+ reader_kwargs["on_bad_lines"] = "skip"
53
+
54
+ # - Define reader engine
55
+ # - C engine is faster
56
+ # - Python engine is more feature-complete
57
+ reader_kwargs["engine"] = "python"
58
+
59
+ # - Define on-the-fly decompression of on-disk data
60
+ # - Available: gzip, bz2, zip
61
+ reader_kwargs["compression"] = "infer"
62
+
63
+ # - Strings to recognize as NA/NaN and replace with standard NA flags
64
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
65
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
66
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
67
+ reader_kwargs["na_values"] = ["na", "", "error", "NA"]
68
+
69
+ ##------------------------------------------------------------------------.
70
+ #### Read the data
71
+ df = read_raw_text_file(
72
+ filepath=filepath,
73
+ column_names=column_names,
74
+ reader_kwargs=reader_kwargs,
75
+ logger=logger,
76
+ )
77
+
78
+ ##------------------------------------------------------------------------.
79
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
80
+ # Remove rows with invalid length
81
+ # - time: 20
82
+ # - data: 4638
83
+ df = df[df["TO_BE_PARSED"].str.len().isin([20, 4638])]
84
+ df = df.reset_index(drop=True)
85
+
86
+ # Remove rows with consecutive timesteps
87
+ # - Keep last timestep occurrence
88
+ idx_timesteps = np.where(df["TO_BE_PARSED"].str.len() == 20)[0]
89
+ idx_without_data = np.where(np.diff(idx_timesteps) == 1)[0].flatten().astype(int)
90
+ idx_timesteps_without_data = idx_timesteps[idx_without_data]
91
+ df = df.drop(labels=idx_timesteps_without_data)
92
+
93
+ # If the last row is a timestep, remove it
94
+ if df["TO_BE_PARSED"].str.len().iloc[-1] == 20:
95
+ df = df[:-1]
96
+
97
+ # Check there are data to process
98
+ if len(df) == 0 or len(df) == 1:
99
+ raise ValueError("No data to process.")
100
+
101
+ # Retrieve time
102
+ df_time = df[::2]
103
+ df_time = df_time.reset_index(drop=True)
104
+
105
+ # Retrieve data
106
+ df_data = df[1::2]
107
+ df_data = df_data.reset_index(drop=True)
108
+
109
+ if len(df_time) != len(df_data):
110
+ raise ValueError("Likely corrupted data. Not same number of timesteps and data.")
111
+
112
+ # Remove starting - from timestep
113
+ df_time = df_time["TO_BE_PARSED"].str.replace("-", "", n=1)
114
+
115
+ # Create dataframe
116
+ df_data["time"] = df_time.to_numpy()
117
+
118
+ # Count number of delimiters to identify valid rows
119
+ df_data = df_data[df_data["TO_BE_PARSED"].str.count(";") == 1104]
120
+
121
+ # Split by ; delimiter
122
+ df = df_data["TO_BE_PARSED"].str.split(";", expand=True, n=16)
123
+
124
+ # Assign column names
125
+ column_names = [
126
+ "rainfall_rate_32bit",
127
+ "rainfall_accumulated_32bit",
128
+ "weather_code_synop_4680",
129
+ "weather_code_synop_4677",
130
+ "weather_code_metar_4678",
131
+ "reflectivity_32bit",
132
+ "mor_visibility",
133
+ "laser_amplitude",
134
+ "number_particles",
135
+ "unknown1",
136
+ "sensor_battery_voltage",
137
+ "sensor_status",
138
+ "station_name",
139
+ "sensor_temperature",
140
+ "rainfall_amount_absolute_32bit",
141
+ "error_code",
142
+ "RAW_TO_PARSE",
143
+ ]
144
+
145
+ df.columns = column_names
146
+ # Add valid timestep
147
+ df["time"] = pd.to_datetime(df_data["time"], format="%Y-%m-%d %H:%M:%S")
148
+
149
+ # Add raw array
150
+ df["raw_drop_concentration"] = df["RAW_TO_PARSE"].str[:224]
151
+ df["raw_drop_average_velocity"] = df["RAW_TO_PARSE"].str[224:448]
152
+ df["raw_drop_number"] = df["RAW_TO_PARSE"].str[448:]
153
+
154
+ # Drop columns not agreeing with DISDRODB L0 standards
155
+ df = df.drop(columns=["station_name", "RAW_TO_PARSE", "unknown1"])
156
+
157
+ return df
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+
3
+ # -----------------------------------------------------------------------------.
4
+ # Copyright (c) 2021-2023 DISDRODB developers
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU General Public License as published by
8
+ # the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # This program is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU General Public License
17
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
18
+ # -----------------------------------------------------------------------------.
19
+ """Reader for CHONGQING campaign."""
20
+ import numpy as np
21
+ import pandas as pd
22
+
23
+ from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
24
+ from disdrodb.l0.l0a_processing import read_raw_text_file
25
+
26
+
27
+ @is_documented_by(reader_generic_docstring)
28
+ def reader(
29
+ filepath,
30
+ logger=None,
31
+ ):
32
+ """Reader."""
33
+ ##------------------------------------------------------------------------.
34
+ #### Define column names
35
+ column_names = ["TO_SPLIT"]
36
+
37
+ ##------------------------------------------------------------------------.
38
+ #### Define reader options
39
+ reader_kwargs = {}
40
+ reader_kwargs["delimiter"] = ","
41
+ # - No header
42
+ # reader_kwargs["header"] = None
43
+ # - Define encoding
44
+ reader_kwargs["encoding"] = "latin-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", "-.-", "C" * 32]
61
+
62
+ ##------------------------------------------------------------------------.
63
+ #### Read the data
64
+ df = read_raw_text_file(
65
+ filepath=filepath,
66
+ column_names=column_names,
67
+ reader_kwargs=reader_kwargs,
68
+ logger=logger,
69
+ )
70
+
71
+ ##------------------------------------------------------------------------.
72
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
73
+ # Drop invalid rows
74
+ # --> C*32 that is nan
75
+ df = df.dropna()
76
+
77
+ # Check if there are valid data
78
+ if len(df) == 0:
79
+ raise ValueError("No data available")
80
+
81
+ # Retrieve timesteps
82
+ df_time = df["TO_SPLIT"].iloc[0::33]
83
+ df_time = pd.to_datetime(df_time, format="%Y.%m.%d;%H:%M", errors="coerce")
84
+ df_time = df_time.rename("time")
85
+ df_time = df_time.reset_index(drop=True)
86
+
87
+ # Retrieve data
88
+ idx = np.ones(len(df)).astype(bool)
89
+ idx[0::33] = False
90
+ df_data = df[idx]
91
+
92
+ # Check consistency (no missing rows)
93
+ n_expected_data_rows = int(len(df_time) * 32)
94
+ if len(df_data) != n_expected_data_rows:
95
+ raise ValueError("Not same amount of timesteps and data.")
96
+
97
+ # Replace heterogeneous number of spaces with a single space
98
+ df_data["TO_SPLIT"] = df_data["TO_SPLIT"].str.replace(r" +", " ", regex=True).str.strip(" ")
99
+
100
+ # Retrieve arrays
101
+ arr = df_data["TO_SPLIT"].str.split(" ", expand=True).to_numpy()
102
+ # Flatten by row and then reshape to n_timesteps x 1024
103
+ arr = arr.flatten(order="C").reshape(len(df_time), 1024)
104
+ # Then concat all the 1024 bins
105
+ df_arr = pd.DataFrame(arr, dtype="str")
106
+ df_raw_drop_number = df_arr.agg(",".join, axis=1)
107
+ df_raw_drop_number = df_raw_drop_number.rename("raw_drop_number")
108
+
109
+ # Create dataframe
110
+ df = pd.concat([df_time, df_raw_drop_number], axis=1)
111
+
112
+ # Return the dataframe adhering to DISDRODB L0 standards
113
+ return df
@@ -15,23 +15,21 @@
15
15
  # You should have received a copy of the GNU General Public License
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  # -----------------------------------------------------------------------------.
18
- from disdrodb.l0 import run_l0a
18
+ """Reader for ARCTIC 2021 campaign."""
19
+ import pandas as pd
20
+
19
21
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
22
+ from disdrodb.l0.l0a_processing import read_raw_text_file
20
23
 
21
24
 
22
25
  @is_documented_by(reader_generic_docstring)
23
26
  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,
27
+ filepath,
28
+ logger=None,
32
29
  ):
30
+ """Reader."""
33
31
  ##------------------------------------------------------------------------.
34
- #### - Define column names
32
+ #### Define column names
35
33
  column_names = [
36
34
  "id",
37
35
  "latitude",
@@ -59,7 +57,7 @@ def reader(
59
57
  ]
60
58
 
61
59
  ##------------------------------------------------------------------------.
62
- #### - Define reader options
60
+ #### Define reader options
63
61
  reader_kwargs = {}
64
62
  # - Define delimiter
65
63
  reader_kwargs["delimiter"] = ";"
@@ -74,57 +72,42 @@ def reader(
74
72
  # - Python engine is more feature-complete
75
73
  reader_kwargs["engine"] = "python"
76
74
  # - Strings to recognize as NA/NaN and replace with standard NA flags
77
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
78
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
79
- # NA’, NULL’, NaN’, n/a’, nan’, null
75
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
76
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
77
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
80
78
  reader_kwargs["na_values"] = ["na", "", "error", "NA"]
81
79
  ##------------------------------------------------------------------------.
82
- #### - Define dataframe sanitizer function for L0 processing
83
- # - Latitude and longitude are kept because the sensor is moving !
84
-
85
- def df_sanitizer_fun(df):
86
- # - Import pandas
87
- import pandas as pd
80
+ #### Read the data
81
+ df = read_raw_text_file(
82
+ filepath=filepath,
83
+ column_names=column_names,
84
+ reader_kwargs=reader_kwargs,
85
+ logger=logger,
86
+ )
88
87
 
89
- # - Drop invalid rows
90
- df = df.loc[df["id"].astype(str).str.len() < 10]
88
+ ##------------------------------------------------------------------------.
89
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
90
+ # NOTE: Latitude and longitude are kept because the sensor is moving !
91
91
 
92
- # - Convert time column to datetime
93
- df["time"] = pd.to_datetime(df["time"], format="%d-%m-%Y %H:%M:%S", errors="coerce")
92
+ # Drop invalid rows
93
+ df = df.loc[df["id"].astype(str).str.len() < 10]
94
94
 
95
- # - Split TO_BE_SPLITTED columns
96
- df_splitted = df["TO_BE_SPLITTED"].str.split(",", expand=True, n=1)
97
- df_splitted.columns = ["datalogger_voltage", "rainfall_rate_32bit"]
98
- df["rainfall_rate_32bit"] = df_splitted["rainfall_rate_32bit"]
95
+ # Convert time column to datetime
96
+ df["time"] = pd.to_datetime(df["time"], format="%d-%m-%Y %H:%M:%S", errors="coerce")
99
97
 
100
- # - Drop columns not agreeing with DISDRODB L0 standards
101
- columns_to_drop = [
102
- "id",
103
- "TO_BE_SPLITTED",
104
- "datalogger_temperature",
105
- "datalogger_error",
106
- ]
107
- df = df.drop(columns=columns_to_drop)
108
- return df
98
+ # Split TO_BE_SPLITTED columns
99
+ df_splitted = df["TO_BE_SPLITTED"].str.split(",", expand=True, n=1)
100
+ df_splitted.columns = ["datalogger_voltage", "rainfall_rate_32bit"]
101
+ df["rainfall_rate_32bit"] = df_splitted["rainfall_rate_32bit"]
109
102
 
110
- ##------------------------------------------------------------------------.
111
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
112
- glob_patterns = "*.log*"
103
+ # Drop columns not agreeing with DISDRODB L0 standards
104
+ columns_to_drop = [
105
+ "id",
106
+ "TO_BE_SPLITTED",
107
+ "datalogger_temperature",
108
+ "datalogger_error",
109
+ ]
110
+ df = df.drop(columns=columns_to_drop)
113
111
 
114
- ####----------------------------------------------------------------------.
115
- #### - Create L0A products
116
- run_l0a(
117
- raw_dir=raw_dir,
118
- processed_dir=processed_dir,
119
- station_name=station_name,
120
- # Custom arguments of the reader for L0A processing
121
- glob_patterns=glob_patterns,
122
- column_names=column_names,
123
- reader_kwargs=reader_kwargs,
124
- df_sanitizer_fun=df_sanitizer_fun,
125
- # Processing options
126
- force=force,
127
- verbose=verbose,
128
- parallel=parallel,
129
- debugging_mode=debugging_mode,
130
- )
112
+ # Return the dataframe adhering to DISDRODB L0 standards
113
+ return df
@@ -15,23 +15,21 @@
15
15
  # You should have received a copy of the GNU General Public License
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  # -----------------------------------------------------------------------------.
18
- from disdrodb.l0 import run_l0a
18
+ """Reader for COMMON 2011 campaign."""
19
+ import pandas as pd
20
+
19
21
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
22
+ from disdrodb.l0.l0a_processing import read_raw_text_file
20
23
 
21
24
 
22
25
  @is_documented_by(reader_generic_docstring)
23
26
  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,
27
+ filepath,
28
+ logger=None,
32
29
  ):
30
+ """Reader."""
33
31
  ##------------------------------------------------------------------------.
34
- #### - Define column names
32
+ #### Define column names
35
33
  column_names = [
36
34
  "time",
37
35
  "id",
@@ -58,7 +56,7 @@ def reader(
58
56
  ]
59
57
 
60
58
  ##------------------------------------------------------------------------.
61
- #### - Define reader options
59
+ #### Define reader options
62
60
  reader_kwargs = {}
63
61
  # - Define delimiter
64
62
  reader_kwargs["delimiter"] = ","
@@ -76,53 +74,38 @@ def reader(
76
74
  # - Available: gzip, bz2, zip
77
75
  reader_kwargs["compression"] = "infer"
78
76
  # - Strings to recognize as NA/NaN and replace with standard NA flags
79
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
80
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
81
- # NA’, NULL’, NaN’, n/a’, nan’, null
77
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
78
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
79
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
82
80
  reader_kwargs["na_values"] = ["na", "", "error", "NA", "-.-"]
83
81
 
84
82
  ##------------------------------------------------------------------------.
85
- #### - Define dataframe sanitizer function for L0 processing
86
- def df_sanitizer_fun(df):
87
- # - Import pandas
88
- import pandas as pd
89
-
90
- # - Drop bad lines based on datalogger_debug column
91
- bad_indexes = df[df["datalogger_debug"].str.startswith("Frame", na=False)].index
92
- df = df.drop(bad_indexes)
83
+ #### Read the data
84
+ df = read_raw_text_file(
85
+ filepath=filepath,
86
+ column_names=column_names,
87
+ reader_kwargs=reader_kwargs,
88
+ logger=logger,
89
+ )
93
90
 
94
- # - Convert time column to datetime
95
- df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
91
+ ##------------------------------------------------------------------------.
92
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
93
+ # Drop bad lines based on datalogger_debug column
94
+ bad_indexes = df[df["datalogger_debug"].str.startswith("Frame", na=False)].index
95
+ df = df.drop(bad_indexes)
96
96
 
97
- # - Drop columns not agreeing with DISDRODB L0 standards
98
- columns_to_drop = [
99
- "datalogger_debug",
100
- "datalogger_voltage",
101
- "id",
102
- "datalogger_temperature",
103
- "datalogger_error",
104
- ]
105
- df = df.drop(columns=columns_to_drop)
106
- return df
97
+ # Convert time column to datetime
98
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
107
99
 
108
- ##------------------------------------------------------------------------.
109
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
110
- glob_patterns = "*.dat*"
100
+ # Drop columns not agreeing with DISDRODB L0 standards
101
+ columns_to_drop = [
102
+ "datalogger_debug",
103
+ "datalogger_voltage",
104
+ "id",
105
+ "datalogger_temperature",
106
+ "datalogger_error",
107
+ ]
108
+ df = df.drop(columns=columns_to_drop)
111
109
 
112
- ####----------------------------------------------------------------------.
113
- #### - Create L0A products
114
- run_l0a(
115
- raw_dir=raw_dir,
116
- processed_dir=processed_dir,
117
- station_name=station_name,
118
- # Custom arguments of the reader for L0A processing
119
- glob_patterns=glob_patterns,
120
- column_names=column_names,
121
- reader_kwargs=reader_kwargs,
122
- df_sanitizer_fun=df_sanitizer_fun,
123
- # Processing options
124
- force=force,
125
- verbose=verbose,
126
- parallel=parallel,
127
- debugging_mode=debugging_mode,
128
- )
110
+ # Return the dataframe adhering to DISDRODB L0 standards
111
+ return df
@@ -15,23 +15,21 @@
15
15
  # You should have received a copy of the GNU General Public License
16
16
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  # -----------------------------------------------------------------------------.
18
- from disdrodb.l0 import run_l0a
18
+ """Reader for DAVOS 2009-2011 campaign."""
19
+ import pandas as pd
20
+
19
21
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
22
+ from disdrodb.l0.l0a_processing import read_raw_text_file
20
23
 
21
24
 
22
25
  @is_documented_by(reader_generic_docstring)
23
26
  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,
27
+ filepath,
28
+ logger=None,
32
29
  ):
30
+ """Reader."""
33
31
  ##------------------------------------------------------------------------.
34
- #### - Define column names
32
+ #### Define column names
35
33
  column_names = [
36
34
  "time",
37
35
  "id",
@@ -58,7 +56,7 @@ def reader(
58
56
  ]
59
57
 
60
58
  ##------------------------------------------------------------------------.
61
- #### - Define reader options
59
+ #### Define reader options
62
60
  reader_kwargs = {}
63
61
  # - Define delimiter
64
62
  reader_kwargs["delimiter"] = ","
@@ -76,49 +74,34 @@ def reader(
76
74
  # - Available: gzip, bz2, zip
77
75
  reader_kwargs["compression"] = "infer"
78
76
  # - Strings to recognize as NA/NaN and replace with standard NA flags
79
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
80
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
81
- # NA’, NULL’, NaN’, n/a’, nan’, null
77
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
78
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
79
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
82
80
  reader_kwargs["na_values"] = ["na", "", "error", "NA"]
83
81
 
84
82
  ##------------------------------------------------------------------------.
85
- #### - Define dataframe sanitizer function for L0 processing
86
- def df_sanitizer_fun(df):
87
- # - Import pandas
88
- import pandas as pd
89
-
90
- # - Convert time column to datetime
91
- df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
92
-
93
- # - Drop columns not agreeing with DISDRODB L0 standards
94
- columns_to_drop = [
95
- "id",
96
- "datalogger_debug",
97
- "datalogger_voltage",
98
- "datalogger_temperature",
99
- "datalogger_error",
100
- ]
101
- df = df.drop(columns=columns_to_drop)
102
- return df
103
-
104
- ##------------------------------------------------------------------------.
105
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
106
- glob_patterns = "*.dat*"
107
-
108
- ####----------------------------------------------------------------------.
109
- #### - Create L0A products
110
- run_l0a(
111
- raw_dir=raw_dir,
112
- processed_dir=processed_dir,
113
- station_name=station_name,
114
- # Custom arguments of the reader for L0A processing
115
- glob_patterns=glob_patterns,
83
+ #### Read the data
84
+ df = read_raw_text_file(
85
+ filepath=filepath,
116
86
  column_names=column_names,
117
87
  reader_kwargs=reader_kwargs,
118
- df_sanitizer_fun=df_sanitizer_fun,
119
- # Processing options
120
- force=force,
121
- verbose=verbose,
122
- parallel=parallel,
123
- debugging_mode=debugging_mode,
88
+ logger=logger,
124
89
  )
90
+
91
+ ##------------------------------------------------------------------------.
92
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
93
+ # Convert time column to datetime
94
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
95
+
96
+ # Drop columns not agreeing with DISDRODB L0 standards
97
+ columns_to_drop = [
98
+ "id",
99
+ "datalogger_debug",
100
+ "datalogger_voltage",
101
+ "datalogger_temperature",
102
+ "datalogger_error",
103
+ ]
104
+ df = df.drop(columns=columns_to_drop)
105
+
106
+ # Return the dataframe adhering to DISDRODB L0 standards
107
+ return df