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
@@ -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 the GENEPI 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",
@@ -55,7 +53,7 @@ def reader(
55
53
  ]
56
54
 
57
55
  ##------------------------------------------------------------------------.
58
- #### - Define reader options
56
+ #### Define reader options
59
57
  reader_kwargs = {}
60
58
  # - Define delimiter
61
59
  reader_kwargs["delimiter"] = ","
@@ -75,42 +73,25 @@ def reader(
75
73
  # - Available: gzip, bz2, zip
76
74
  reader_kwargs["compression"] = "infer"
77
75
  # - Strings to recognize as NA/NaN and replace with standard NA flags
78
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
79
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
80
- # NA’, NULL’, NaN’, n/a’, nan’, null
76
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
77
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
78
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
81
79
  reader_kwargs["na_values"] = ["na", "", "error", "-.-", " NA"]
82
80
 
83
81
  ##------------------------------------------------------------------------.
84
- #### - Define dataframe sanitizer function for L0 processing
85
- def df_sanitizer_fun(df):
86
- # - Import pandas
87
- import pandas as pd
88
-
89
- # - Convert time column to datetime
90
- df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
91
-
92
- # - Drop columns not agreeing with DISDRODB L0 standards
93
- df = df.drop(columns=["id"])
94
- return df
95
-
96
- ##------------------------------------------------------------------------.
97
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
98
- glob_patterns = "*.dat*"
99
-
100
- ####----------------------------------------------------------------------.
101
- #### - Create L0A products
102
- run_l0a(
103
- raw_dir=raw_dir,
104
- processed_dir=processed_dir,
105
- station_name=station_name,
106
- # Custom arguments of the reader for L0A processing
107
- glob_patterns=glob_patterns,
82
+ #### Read the data
83
+ df = read_raw_text_file(
84
+ filepath=filepath,
108
85
  column_names=column_names,
109
86
  reader_kwargs=reader_kwargs,
110
- df_sanitizer_fun=df_sanitizer_fun,
111
- # Processing options
112
- force=force,
113
- verbose=verbose,
114
- parallel=parallel,
115
- debugging_mode=debugging_mode,
87
+ logger=logger,
116
88
  )
89
+
90
+ ##------------------------------------------------------------------------.
91
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
92
+ # Convert time column to datetime
93
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
94
+
95
+ # Drop columns not agreeing with DISDRODB L0 standards
96
+ df = df.drop(columns=["id"])
97
+ return df
@@ -17,23 +17,21 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  # -----------------------------------------------------------------------------.
20
- from disdrodb.l0 import run_l0a
20
+ """Reader for the GRAND ST BERNARD campaign."""
21
+ import pandas as pd
22
+
21
23
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
24
+ from disdrodb.l0.l0a_processing import read_raw_text_file
22
25
 
23
26
 
24
27
  @is_documented_by(reader_generic_docstring)
25
28
  def reader(
26
- raw_dir,
27
- processed_dir,
28
- station_name,
29
- # Processing options
30
- force=False,
31
- verbose=False,
32
- parallel=False,
33
- debugging_mode=False,
29
+ filepath,
30
+ logger=None,
34
31
  ):
32
+ """Reader."""
35
33
  ##------------------------------------------------------------------------.
36
- #### - Define column names
34
+ #### Define column names
37
35
  column_names = [
38
36
  "time",
39
37
  "id",
@@ -57,7 +55,7 @@ def reader(
57
55
  ]
58
56
 
59
57
  ##------------------------------------------------------------------------.
60
- #### - Define reader options
58
+ #### Define reader options
61
59
  reader_kwargs = {}
62
60
  # - Define delimiter
63
61
  reader_kwargs["delimiter"] = ","
@@ -77,42 +75,25 @@ def reader(
77
75
  # - Available: gzip, bz2, zip
78
76
  reader_kwargs["compression"] = "infer"
79
77
  # - Strings to recognize as NA/NaN and replace with standard NA flags
80
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
81
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
82
- # NA’, NULL’, NaN’, n/a’, nan’, null
78
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
79
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
80
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
83
81
  reader_kwargs["na_values"] = ["na", "", "error", "-.-", " NA"]
84
82
 
85
83
  ##------------------------------------------------------------------------.
86
- #### - Define dataframe sanitizer function for L0 processing
87
- def df_sanitizer_fun(df):
88
- # - Import pandas
89
- import pandas as pd
90
-
91
- # - Convert time column to datetime
92
- df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
93
-
94
- # - Drop columns not agreeing with DISDRODB L0 standards
95
- df = df.drop(columns=["id"])
96
- return df
97
-
98
- ##------------------------------------------------------------------------.
99
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
100
- glob_patterns = "*.dat*"
101
-
102
- ####----------------------------------------------------------------------.
103
- #### - Create L0A products
104
- run_l0a(
105
- raw_dir=raw_dir,
106
- processed_dir=processed_dir,
107
- station_name=station_name,
108
- # Custom arguments of the reader for L0A processing
109
- glob_patterns=glob_patterns,
84
+ #### Read the data
85
+ df = read_raw_text_file(
86
+ filepath=filepath,
110
87
  column_names=column_names,
111
88
  reader_kwargs=reader_kwargs,
112
- df_sanitizer_fun=df_sanitizer_fun,
113
- # Processing options
114
- force=force,
115
- verbose=verbose,
116
- parallel=parallel,
117
- debugging_mode=debugging_mode,
89
+ logger=logger,
118
90
  )
91
+
92
+ ##------------------------------------------------------------------------.
93
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
94
+ # Convert time column to datetime
95
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
96
+
97
+ # Drop columns not agreeing with DISDRODB L0 standards
98
+ df = df.drop(columns=["id"])
99
+ return df
@@ -17,23 +17,21 @@
17
17
  # You should have received a copy of the GNU General Public License
18
18
  # along with this program. If not, see <http://www.gnu.org/licenses/>.
19
19
  # -----------------------------------------------------------------------------.
20
- from disdrodb.l0 import run_l0a
20
+ """Reader for the GRAND ST BERNARD campaign."""
21
+ import pandas as pd
22
+
21
23
  from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
24
+ from disdrodb.l0.l0a_processing import read_raw_text_file
22
25
 
23
26
 
24
27
  @is_documented_by(reader_generic_docstring)
25
28
  def reader(
26
- raw_dir,
27
- processed_dir,
28
- station_name,
29
- # Processing options
30
- force=False,
31
- verbose=False,
32
- parallel=False,
33
- debugging_mode=False,
29
+ filepath,
30
+ logger=None,
34
31
  ):
32
+ """Reader."""
35
33
  ##------------------------------------------------------------------------.
36
- #### - Define column names
34
+ #### Define column names
37
35
  column_names = [
38
36
  "time",
39
37
  "id",
@@ -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"] = ","
@@ -79,42 +77,25 @@ def reader(
79
77
  # - Available: gzip, bz2, zip
80
78
  reader_kwargs["compression"] = "infer"
81
79
  # - Strings to recognize as NA/NaN and replace with standard NA flags
82
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
83
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
84
- # NA’, NULL’, NaN’, n/a’, nan’, null
80
+ # - Already included: '#N/A', '#N/A N/A', '#NA', '-1.#IND', '-1.#QNAN',
81
+ # '-NaN', '-nan', '1.#IND', '1.#QNAN', '<NA>', 'N/A',
82
+ # 'NA', 'NULL', 'NaN', 'n/a', 'nan', 'null'
85
83
  reader_kwargs["na_values"] = ["na", "", "error", "-.-", " NA"]
86
84
 
87
85
  ##------------------------------------------------------------------------.
88
- #### - Define dataframe sanitizer function for L0 processing
89
- def df_sanitizer_fun(df):
90
- # - Import pandas
91
- import pandas as pd
92
-
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
- df = df.drop(columns=["id", "data_logger_temperature", "data_logger_voltage"])
98
- return df
99
-
100
- ##------------------------------------------------------------------------.
101
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
102
- glob_patterns = "*.dat*"
103
-
104
- ####----------------------------------------------------------------------.
105
- #### - Create L0A products
106
- run_l0a(
107
- raw_dir=raw_dir,
108
- processed_dir=processed_dir,
109
- station_name=station_name,
110
- # Custom arguments of the reader for L0A processing
111
- glob_patterns=glob_patterns,
86
+ #### Read the data
87
+ df = read_raw_text_file(
88
+ filepath=filepath,
112
89
  column_names=column_names,
113
90
  reader_kwargs=reader_kwargs,
114
- df_sanitizer_fun=df_sanitizer_fun,
115
- # Processing options
116
- force=force,
117
- verbose=verbose,
118
- parallel=parallel,
119
- debugging_mode=debugging_mode,
91
+ logger=logger,
120
92
  )
93
+
94
+ ##------------------------------------------------------------------------.
95
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
96
+ # Convert time column to datetime
97
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
98
+
99
+ # Drop columns not agreeing with DISDRODB L0 standards
100
+ df = df.drop(columns=["id", "data_logger_temperature", "data_logger_voltage"])
101
+ 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 the HPICONET 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"] = ","
@@ -78,49 +76,34 @@ def reader(
78
76
  # - Available: gzip, bz2, zip
79
77
  reader_kwargs["compression"] = "infer"
80
78
  # - Strings to recognize as NA/NaN and replace with standard NA flags
81
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
82
- # ‘-NaN’, ‘-nan’, 1.#IND’, 1.#QNAN’, ‘<NA>’, N/A’,
83
- # NA’, NULL’, NaN’, n/a’, nan’, null
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'
84
82
  reader_kwargs["na_values"] = ["na", "", "error", "-.-"]
85
83
 
86
84
  ##------------------------------------------------------------------------.
87
- #### - Define dataframe sanitizer function for L0 processing
88
- def df_sanitizer_fun(df):
89
- # - Import pandas
90
- import pandas as pd
91
-
92
- # - Convert time column to datetime
93
- df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S")
94
-
95
- # - Drop columns not agreeing with DISDRODB L0 standards
96
- columns_to_drop = [
97
- "id",
98
- "datalogger_temperature",
99
- "datalogger_voltage",
100
- "datalogger_debug",
101
- "datalogger_error",
102
- ]
103
- df = df.drop(columns=columns_to_drop)
104
- return df
105
-
106
- ##------------------------------------------------------------------------.
107
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
108
- glob_patterns = "*.dat*"
109
-
110
- ####----------------------------------------------------------------------.
111
- #### - Create L0A products
112
- run_l0a(
113
- raw_dir=raw_dir,
114
- processed_dir=processed_dir,
115
- station_name=station_name,
116
- # Custom arguments of the reader for L0A processing
117
- glob_patterns=glob_patterns,
85
+ #### Read the data
86
+ df = read_raw_text_file(
87
+ filepath=filepath,
118
88
  column_names=column_names,
119
89
  reader_kwargs=reader_kwargs,
120
- df_sanitizer_fun=df_sanitizer_fun,
121
- # Processing options
122
- force=force,
123
- verbose=verbose,
124
- parallel=parallel,
125
- debugging_mode=debugging_mode,
90
+ logger=logger,
126
91
  )
92
+
93
+ ##------------------------------------------------------------------------.
94
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
95
+ # Convert time column to datetime
96
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S")
97
+
98
+ # Drop columns not agreeing with DISDRODB L0 standards
99
+ columns_to_drop = [
100
+ "id",
101
+ "datalogger_temperature",
102
+ "datalogger_voltage",
103
+ "datalogger_debug",
104
+ "datalogger_error",
105
+ ]
106
+ df = df.drop(columns=columns_to_drop)
107
+
108
+ # Return the dataframe adhering to DISDRODB L0 standards
109
+ 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 the HYMEX SOP2 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"] = ","
@@ -74,49 +72,38 @@ def reader(
74
72
  # - Available: gzip, bz2, zip
75
73
  reader_kwargs["compression"] = "infer"
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
80
  ##------------------------------------------------------------------------.
83
- #### - Define dataframe sanitizer function for L0 processing
84
- def df_sanitizer_fun(df):
85
- # - Import pandas
86
- import pandas as pd
81
+ #### Read the data
82
+ df = read_raw_text_file(
83
+ filepath=filepath,
84
+ column_names=column_names,
85
+ reader_kwargs=reader_kwargs,
86
+ logger=logger,
87
+ )
87
88
 
88
- # - Convert time column to datetime
89
- df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
89
+ ##------------------------------------------------------------------------.
90
+ #### Adapt the dataframe to adhere to DISDRODB L0 standards
91
+ # Convert time column to datetime
92
+ df["time"] = pd.to_datetime(df["time"], format="%Y-%m-%d %H:%M:%S", errors="coerce")
90
93
 
91
- # - Drop columns not agreeing with DISDRODB L0 standards
92
- columns_to_drop = [
93
- "id",
94
- "datalogger_voltage",
95
- "datalogger_temperature",
96
- "datalogger_debug",
97
- "datalogger_error",
98
- ]
99
- df = df.drop(columns=columns_to_drop)
100
- return df
94
+ # Drop rows when "raw_drop_number" is "NA"
95
+ # --> This is used to drop all rows where all values are "NA"
96
+ df = df.dropna(subset="raw_drop_number", axis=0)
101
97
 
102
- ##------------------------------------------------------------------------.
103
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
104
- glob_patterns = "*.dat*"
98
+ # Drop columns not agreeing with DISDRODB L0 standards
99
+ columns_to_drop = [
100
+ "datalogger_debug",
101
+ "datalogger_voltage",
102
+ "id",
103
+ "datalogger_temperature",
104
+ "datalogger_error",
105
+ ]
106
+ df = df.drop(columns=columns_to_drop)
105
107
 
106
- ####----------------------------------------------------------------------.
107
- #### - Create L0A products
108
- run_l0a(
109
- raw_dir=raw_dir,
110
- processed_dir=processed_dir,
111
- station_name=station_name,
112
- # Custom arguments of the reader for L0A processing
113
- glob_patterns=glob_patterns,
114
- column_names=column_names,
115
- reader_kwargs=reader_kwargs,
116
- df_sanitizer_fun=df_sanitizer_fun,
117
- # Processing options
118
- force=force,
119
- verbose=verbose,
120
- parallel=parallel,
121
- debugging_mode=debugging_mode,
122
- )
108
+ # Return the dataframe adhering to DISDRODB L0 standards
109
+ return df
@@ -0,0 +1,111 @@
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 HYMEX SOP3 campaign."""
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 = [
34
+ "time",
35
+ "id",
36
+ "datalogger_temperature",
37
+ "datalogger_voltage",
38
+ "rainfall_rate_32bit",
39
+ "rainfall_accumulated_32bit",
40
+ "weather_code_synop_4680",
41
+ "weather_code_synop_4677",
42
+ "reflectivity_32bit",
43
+ "mor_visibility",
44
+ "laser_amplitude",
45
+ "number_particles",
46
+ "sensor_temperature",
47
+ "sensor_heating_current",
48
+ "sensor_battery_voltage",
49
+ "sensor_status",
50
+ "rainfall_amount_absolute_32bit",
51
+ "datalogger_debug",
52
+ "raw_drop_concentration",
53
+ "raw_drop_average_velocity",
54
+ "raw_drop_number",
55
+ "datalogger_error",
56
+ ]
57
+
58
+ ##------------------------------------------------------------------------.
59
+ #### Define reader options
60
+ reader_kwargs = {}
61
+ # - Define delimiter
62
+ reader_kwargs["delimiter"] = ","
63
+ # - Avoid first column to become df index !!!
64
+ reader_kwargs["index_col"] = False
65
+ # - Define behaviour when encountering bad lines
66
+ reader_kwargs["on_bad_lines"] = "skip"
67
+ # - Avoid UnicodeDecodeError: 'utf-8' codec can't decode byte ...
68
+ reader_kwargs["encoding"] = "latin-1"
69
+ # - Define reader engine
70
+ # - C engine is faster
71
+ # - Python engine is more feature-complete
72
+ reader_kwargs["engine"] = "python"
73
+ # - Define on-the-fly decompression of on-disk data
74
+ # - Available: gzip, bz2, zip
75
+ reader_kwargs["compression"] = "infer"
76
+ # - 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'
80
+ reader_kwargs["na_values"] = ["na", "", "error", "-.-", " NA"]
81
+
82
+ ##------------------------------------------------------------------------.
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
+ )
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 rows when "raw_drop_number" is "NA"
97
+ # --> This is used to drop all rows where all values are "NA"
98
+ df = df.dropna(subset="raw_drop_number", axis=0)
99
+
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)
109
+
110
+ # Return the dataframe adhering to DISDRODB L0 standards
111
+ return df