disdrodb 0.0.21__py3-none-any.whl → 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) 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 +295 -269
  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 +32 -42
  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 +62 -59
  57. disdrodb/l0/configs/{Thies_LPM → LPM}/l0b_encodings.yml +9 -9
  58. disdrodb/l0/configs/{Thies_LPM → LPM}/raw_data_format.yml +245 -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 +22 -20
  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 +24 -22
  69. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/l0b_encodings.yml +20 -20
  70. disdrodb/l0/configs/{OTT_Parsivel2 → PARSIVEL2}/raw_data_format.yml +98 -98
  71. disdrodb/l0/configs/{RD_80 → RD80}/bins_diameter.yml +40 -40
  72. disdrodb/l0/configs/RD80/l0a_encodings.yml +16 -0
  73. disdrodb/l0/configs/{RD_80 → RD80}/l0b_cf_attrs.yml +3 -3
  74. disdrodb/l0/configs/RD80/l0b_encodings.yml +135 -0
  75. disdrodb/l0/configs/{RD_80 → RD80}/raw_data_format.yml +48 -48
  76. disdrodb/l0/l0_reader.py +216 -340
  77. disdrodb/l0/l0a_processing.py +237 -208
  78. disdrodb/l0/l0b_nc_processing.py +227 -80
  79. disdrodb/l0/l0b_processing.py +93 -173
  80. disdrodb/l0/l0c_processing.py +627 -0
  81. disdrodb/l0/readers/{ARM → LPM/ARM}/ARM_LPM.py +36 -58
  82. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +226 -0
  83. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +185 -0
  84. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +183 -0
  85. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +179 -0
  86. disdrodb/l0/readers/{UK → LPM/UK}/DIVEN.py +14 -35
  87. disdrodb/l0/readers/PARSIVEL/AUSTRALIA/MELBOURNE_2007_PARSIVEL.py +157 -0
  88. disdrodb/l0/readers/PARSIVEL/CHINA/CHONGQING.py +113 -0
  89. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/ARCTIC_2021.py +40 -57
  90. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/COMMON_2011.py +37 -54
  91. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/DAVOS_2009_2011.py +34 -51
  92. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_2009.py +34 -51
  93. disdrodb/l0/readers/{EPFL/PARADISO_2014.py → PARSIVEL/EPFL/EPFL_ROOF_2008.py} +38 -50
  94. disdrodb/l0/readers/PARSIVEL/EPFL/EPFL_ROOF_2010.py +105 -0
  95. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2011.py +34 -51
  96. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/EPFL_ROOF_2012.py +33 -51
  97. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GENEPI_2007.py +25 -44
  98. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007.py +25 -44
  99. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/GRAND_ST_BERNARD_2007_2.py +25 -44
  100. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HPICONET_2010.py +34 -51
  101. disdrodb/l0/readers/{EPFL/EPFL_ROOF_2010.py → PARSIVEL/EPFL/HYMEX_LTE_SOP2.py} +37 -50
  102. disdrodb/l0/readers/PARSIVEL/EPFL/HYMEX_LTE_SOP3.py +111 -0
  103. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/HYMEX_LTE_SOP4.py +36 -54
  104. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2018.py +34 -52
  105. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/LOCARNO_2019.py +38 -56
  106. disdrodb/l0/readers/PARSIVEL/EPFL/PARADISO_2014.py +105 -0
  107. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PARSIVEL_2007.py +27 -45
  108. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/PLATO_2019.py +24 -44
  109. disdrodb/l0/readers/PARSIVEL/EPFL/RACLETS_2019.py +140 -0
  110. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RACLETS_2019_WJF.py +41 -59
  111. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/RIETHOLZBACH_2011.py +34 -51
  112. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2017.py +117 -0
  113. disdrodb/l0/readers/PARSIVEL/EPFL/SAMOYLOV_2019.py +137 -0
  114. disdrodb/l0/readers/{EPFL → PARSIVEL/EPFL}/UNIL_2022.py +42 -55
  115. disdrodb/l0/readers/PARSIVEL/GPM/IFLOODS.py +104 -0
  116. disdrodb/l0/readers/{GPM → PARSIVEL/GPM}/LPVEX.py +29 -48
  117. disdrodb/l0/readers/PARSIVEL/GPM/MC3E.py +184 -0
  118. disdrodb/l0/readers/PARSIVEL/NCAR/CCOPE_2015.py +113 -0
  119. disdrodb/l0/readers/{NCAR/VORTEX_SE_2016_P1.py → PARSIVEL/NCAR/OWLES_MIPS.py} +46 -72
  120. disdrodb/l0/readers/PARSIVEL/NCAR/PECAN_MOBILE.py +125 -0
  121. disdrodb/l0/readers/{NCAR/OWLES_MIPS.py → PARSIVEL/NCAR/PLOWS_MIPS.py} +45 -64
  122. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2009.py +114 -0
  123. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +176 -0
  124. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +183 -0
  125. disdrodb/l0/readers/{ARM/ARM_LD.py → PARSIVEL2/ARM/ARM_PARSIVEL2.py} +27 -50
  126. disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +163 -0
  127. disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +163 -0
  128. disdrodb/l0/readers/{DENMARK → PARSIVEL2/DENMARK}/EROSION_nc.py +14 -35
  129. disdrodb/l0/readers/PARSIVEL2/FRANCE/SIRTA_PARSIVEL2.py +119 -0
  130. disdrodb/l0/readers/PARSIVEL2/GPM/GCPEX.py +104 -0
  131. disdrodb/l0/readers/PARSIVEL2/GPM/NSSTC.py +176 -0
  132. disdrodb/l0/readers/PARSIVEL2/ITALY/GID_PARSIVEL2.py +32 -0
  133. disdrodb/l0/readers/PARSIVEL2/MEXICO/OH_IIUNAM_nc.py +56 -0
  134. disdrodb/l0/readers/PARSIVEL2/NCAR/PECAN_FP3.py +120 -0
  135. disdrodb/l0/readers/{NCAR → PARSIVEL2/NCAR}/PECAN_MIPS.py +45 -64
  136. disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +181 -0
  137. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +160 -0
  138. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +160 -0
  139. disdrodb/l0/readers/{NCAR/PLOWS_MIPS.py → PARSIVEL2/NCAR/VORTEX_SE_2016_P1.py} +49 -66
  140. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_P2.py +118 -0
  141. disdrodb/l0/readers/PARSIVEL2/NCAR/VORTEX_SE_2016_PIPS.py +152 -0
  142. disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT.py +166 -0
  143. disdrodb/l0/readers/{NCAR/RELAMPAGO_RD80.py → RD80/BRAZIL/CHUVA_RD80.py} +36 -60
  144. disdrodb/l0/readers/{BRAZIL → RD80/BRAZIL}/GOAMAZON_RD80.py +36 -55
  145. disdrodb/l0/readers/{NCAR → RD80/NCAR}/CINDY_2011_RD80.py +35 -54
  146. disdrodb/l0/readers/{BRAZIL/CHUVA_RD80.py → RD80/NCAR/RELAMPAGO_RD80.py} +40 -54
  147. disdrodb/l0/readers/template_reader_raw_netcdf_data.py +62 -0
  148. disdrodb/l0/readers/{reader_template.py → template_reader_raw_text_data.py} +20 -44
  149. disdrodb/l0/routines.py +885 -581
  150. disdrodb/l0/standards.py +72 -236
  151. disdrodb/l0/template_tools.py +104 -109
  152. disdrodb/l1/__init__.py +17 -0
  153. disdrodb/l1/beard_model.py +716 -0
  154. disdrodb/l1/encoding_attrs.py +620 -0
  155. disdrodb/l1/fall_velocity.py +260 -0
  156. disdrodb/l1/filters.py +192 -0
  157. disdrodb/l1/processing.py +200 -0
  158. disdrodb/l1/resampling.py +236 -0
  159. disdrodb/l1/routines.py +357 -0
  160. disdrodb/l1_env/__init__.py +17 -0
  161. disdrodb/l1_env/routines.py +38 -0
  162. disdrodb/l2/__init__.py +17 -0
  163. disdrodb/l2/empirical_dsd.py +1735 -0
  164. disdrodb/l2/event.py +388 -0
  165. disdrodb/l2/processing.py +519 -0
  166. disdrodb/l2/processing_options.py +213 -0
  167. disdrodb/l2/routines.py +868 -0
  168. disdrodb/metadata/__init__.py +9 -2
  169. disdrodb/metadata/checks.py +165 -118
  170. disdrodb/metadata/download.py +81 -0
  171. disdrodb/metadata/geolocation.py +146 -0
  172. disdrodb/metadata/info.py +20 -13
  173. disdrodb/metadata/manipulation.py +1 -1
  174. disdrodb/metadata/reader.py +59 -8
  175. disdrodb/metadata/search.py +77 -144
  176. disdrodb/metadata/standards.py +7 -8
  177. disdrodb/metadata/writer.py +8 -14
  178. disdrodb/psd/__init__.py +38 -0
  179. disdrodb/psd/fitting.py +2146 -0
  180. disdrodb/psd/models.py +774 -0
  181. disdrodb/routines.py +1176 -0
  182. disdrodb/scattering/__init__.py +28 -0
  183. disdrodb/scattering/axis_ratio.py +344 -0
  184. disdrodb/scattering/routines.py +456 -0
  185. disdrodb/utils/__init__.py +17 -0
  186. disdrodb/utils/attrs.py +208 -0
  187. disdrodb/utils/cli.py +269 -0
  188. disdrodb/utils/compression.py +60 -42
  189. disdrodb/utils/dask.py +62 -0
  190. disdrodb/utils/decorators.py +110 -0
  191. disdrodb/utils/directories.py +107 -46
  192. disdrodb/utils/encoding.py +127 -0
  193. disdrodb/utils/list.py +29 -0
  194. disdrodb/utils/logger.py +168 -46
  195. disdrodb/utils/time.py +657 -0
  196. disdrodb/utils/warnings.py +30 -0
  197. disdrodb/utils/writer.py +57 -0
  198. disdrodb/utils/xarray.py +138 -47
  199. disdrodb/utils/yaml.py +0 -1
  200. disdrodb/viz/__init__.py +17 -0
  201. disdrodb/viz/plots.py +17 -0
  202. disdrodb-0.1.0.dist-info/METADATA +321 -0
  203. disdrodb-0.1.0.dist-info/RECORD +216 -0
  204. {disdrodb-0.0.21.dist-info → disdrodb-0.1.0.dist-info}/WHEEL +1 -1
  205. disdrodb-0.1.0.dist-info/entry_points.txt +30 -0
  206. disdrodb/data_transfer/scripts/disdrodb_download_archive.py +0 -53
  207. disdrodb/data_transfer/scripts/disdrodb_upload_archive.py +0 -57
  208. disdrodb/l0/configs/OTT_Parsivel/l0a_encodings.yml +0 -32
  209. disdrodb/l0/configs/OTT_Parsivel2/l0a_encodings.yml +0 -39
  210. disdrodb/l0/configs/RD_80/l0a_encodings.yml +0 -16
  211. disdrodb/l0/configs/RD_80/l0b_encodings.yml +0 -135
  212. disdrodb/l0/configs/Thies_LPM/l0a_encodings.yml +0 -80
  213. disdrodb/l0/io.py +0 -257
  214. disdrodb/l0/l0_processing.py +0 -1091
  215. disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_OTT.py +0 -178
  216. disdrodb/l0/readers/AUSTRALIA/MELBOURNE_2007_THIES.py +0 -247
  217. disdrodb/l0/readers/BRAZIL/CHUVA_LPM.py +0 -204
  218. disdrodb/l0/readers/BRAZIL/CHUVA_OTT.py +0 -183
  219. disdrodb/l0/readers/BRAZIL/GOAMAZON_LPM.py +0 -204
  220. disdrodb/l0/readers/BRAZIL/GOAMAZON_OTT.py +0 -183
  221. disdrodb/l0/readers/CHINA/CHONGQING.py +0 -131
  222. disdrodb/l0/readers/EPFL/EPFL_ROOF_2008.py +0 -128
  223. disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP2.py +0 -127
  224. disdrodb/l0/readers/EPFL/HYMEX_LTE_SOP3.py +0 -129
  225. disdrodb/l0/readers/EPFL/RACLETS_2019.py +0 -158
  226. disdrodb/l0/readers/EPFL/SAMOYLOV_2017.py +0 -136
  227. disdrodb/l0/readers/EPFL/SAMOYLOV_2019.py +0 -158
  228. disdrodb/l0/readers/FRANCE/SIRTA_OTT2.py +0 -138
  229. disdrodb/l0/readers/GPM/GCPEX.py +0 -123
  230. disdrodb/l0/readers/GPM/IFLOODS.py +0 -123
  231. disdrodb/l0/readers/GPM/MC3E.py +0 -123
  232. disdrodb/l0/readers/GPM/NSSTC.py +0 -164
  233. disdrodb/l0/readers/ITALY/GID.py +0 -199
  234. disdrodb/l0/readers/MEXICO/OH_IIUNAM_nc.py +0 -92
  235. disdrodb/l0/readers/NCAR/CCOPE_2015.py +0 -133
  236. disdrodb/l0/readers/NCAR/PECAN_FP3.py +0 -137
  237. disdrodb/l0/readers/NCAR/PECAN_MOBILE.py +0 -144
  238. disdrodb/l0/readers/NCAR/RELAMPAGO_OTT.py +0 -195
  239. disdrodb/l0/readers/NCAR/SNOWIE_PJ.py +0 -172
  240. disdrodb/l0/readers/NCAR/SNOWIE_SB.py +0 -179
  241. disdrodb/l0/readers/NCAR/VORTEX2_2009.py +0 -133
  242. disdrodb/l0/readers/NCAR/VORTEX2_2010.py +0 -188
  243. disdrodb/l0/readers/NCAR/VORTEX2_2010_UF.py +0 -191
  244. disdrodb/l0/readers/NCAR/VORTEX_SE_2016_P2.py +0 -135
  245. disdrodb/l0/readers/NCAR/VORTEX_SE_2016_PIPS.py +0 -170
  246. disdrodb/l0/readers/NETHERLANDS/DELFT.py +0 -187
  247. disdrodb/l0/readers/SPAIN/SBEGUERIA.py +0 -179
  248. disdrodb/l0/scripts/disdrodb_run_l0b_concat.py +0 -93
  249. disdrodb/l0/scripts/disdrodb_run_l0b_concat_station.py +0 -85
  250. disdrodb/utils/netcdf.py +0 -452
  251. disdrodb/utils/scripts.py +0 -102
  252. disdrodb-0.0.21.dist-info/AUTHORS.md +0 -18
  253. disdrodb-0.0.21.dist-info/METADATA +0 -186
  254. disdrodb-0.0.21.dist-info/RECORD +0 -168
  255. disdrodb-0.0.21.dist-info/entry_points.txt +0 -15
  256. /disdrodb/l0/configs/{RD_80 → RD80}/bins_velocity.yml +0 -0
  257. /disdrodb/l0/manuals/{Thies_LPM.pdf → LPM.pdf} +0 -0
  258. /disdrodb/l0/manuals/{ODM_470.pdf → ODM470.pdf} +0 -0
  259. /disdrodb/l0/manuals/{OTT_Parsivel.pdf → PARSIVEL.pdf} +0 -0
  260. /disdrodb/l0/manuals/{OTT_Parsivel2.pdf → PARSIVEL2.pdf} +0 -0
  261. /disdrodb/l0/manuals/{PWS_100.pdf → PWS100.pdf} +0 -0
  262. /disdrodb/l0/manuals/{RD_80.pdf → RD80.pdf} +0 -0
  263. {disdrodb-0.0.21.dist-info → disdrodb-0.1.0.dist-info/licenses}/LICENSE +0 -0
  264. {disdrodb-0.0.21.dist-info → disdrodb-0.1.0.dist-info}/top_level.txt +0 -0
@@ -1,131 +0,0 @@
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
- from disdrodb.l0 import run_l0a
21
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
22
-
23
-
24
- @is_documented_by(reader_generic_docstring)
25
- 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,
34
- ):
35
- ##------------------------------------------------------------------------.
36
- #### - Define column names
37
- column_names = ["TO_SPLIT"]
38
-
39
- ##------------------------------------------------------------------------.
40
- #### - Define reader options
41
- reader_kwargs = {}
42
- reader_kwargs["delimiter"] = ","
43
- # - No header
44
- # reader_kwargs["header"] = None
45
- # - Define encoding
46
- reader_kwargs["encoding"] = "latin-1"
47
- # - Avoid first column to become df index
48
- reader_kwargs["index_col"] = False
49
- # - Define behaviour when encountering bad lines
50
- reader_kwargs["on_bad_lines"] = "skip"
51
- # - Define reader engine
52
- # - C engine is faster
53
- # - Python engine is more feature-complete
54
- reader_kwargs["engine"] = "python"
55
- # - Define on-the-fly decompression of on-disk data
56
- # - Available: gzip, bz2, zip
57
- reader_kwargs["compression"] = "infer"
58
- # - Strings to recognize as NA/NaN and replace with standard NA flags
59
- # - Already included: ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’,
60
- # ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’,
61
- # ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’
62
- reader_kwargs["na_values"] = ["na", "", "error", "-.-", "C" * 32]
63
-
64
- ##------------------------------------------------------------------------.
65
- #### - Define dataframe sanitizer function for L0 processing
66
- def df_sanitizer_fun(df):
67
- # - Import pandas
68
- import numpy as np
69
- import pandas as pd
70
-
71
- # - Drop invalid rows
72
- # --> C*32 that is nan
73
- df = df.dropna()
74
-
75
- # - Check if there are valid data
76
- if len(df) == 0:
77
- raise ValueError("No data available")
78
-
79
- # - Retrieve timesteps
80
- df_time = df["TO_SPLIT"].iloc[0::33]
81
- df_time = pd.to_datetime(df_time, format="%Y.%m.%d;%H:%M", errors="coerce")
82
- df_time = df_time.rename("time")
83
- df_time = df_time.reset_index(drop=True)
84
- # - Retrieve data
85
- idx = np.ones(len(df)).astype(bool)
86
- idx[0::33] = False
87
- df_data = df[idx]
88
-
89
- # - Check consistency (no missing rows)
90
- n_expected_data_rows = int(len(df_time) * 32)
91
- if len(df_data) != n_expected_data_rows:
92
- raise ValueError("Not same amount of timesteps and data.")
93
-
94
- # - Replace heterogeneous number of spaces with a single space
95
- df_data["TO_SPLIT"] = df_data["TO_SPLIT"].str.replace(r" +", " ", regex=True).str.strip(" ")
96
-
97
- # - Retrieve arrays
98
- arr = df_data["TO_SPLIT"].str.split(" ", expand=True).to_numpy()
99
- # - Flatten by row and then reshape to n_timesteps x 1024
100
- arr = arr.flatten(order="C").reshape(len(df_time), 1024)
101
- # - Then concat all the 1024 bins
102
- df_arr = pd.DataFrame(arr, dtype="str")
103
- df_raw_drop_number = df_arr.agg(",".join, axis=1)
104
- df_raw_drop_number = df_raw_drop_number.rename("raw_drop_number")
105
-
106
- # - Create dataframe
107
- df = pd.concat([df_time, df_raw_drop_number], axis=1)
108
-
109
- return df
110
-
111
- ##------------------------------------------------------------------------.
112
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
113
- glob_patterns = "*.txt*"
114
-
115
- ####----------------------------------------------------------------------.
116
- #### - Create L0A products
117
- run_l0a(
118
- raw_dir=raw_dir,
119
- processed_dir=processed_dir,
120
- station_name=station_name,
121
- # Custom arguments of the reader for L0A processing
122
- glob_patterns=glob_patterns,
123
- column_names=column_names,
124
- reader_kwargs=reader_kwargs,
125
- df_sanitizer_fun=df_sanitizer_fun,
126
- # Processing options
127
- force=force,
128
- verbose=verbose,
129
- parallel=parallel,
130
- debugging_mode=debugging_mode,
131
- )
@@ -1,128 +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 = [
36
- "time",
37
- "id",
38
- "datalogger_temperature",
39
- "datalogger_voltage",
40
- "rainfall_rate_32bit",
41
- "rainfall_accumulated_32bit",
42
- "weather_code_synop_4680",
43
- "weather_code_synop_4677",
44
- "reflectivity_32bit",
45
- "mor_visibility",
46
- "laser_amplitude",
47
- "number_particles",
48
- "sensor_temperature",
49
- "sensor_heating_current",
50
- "sensor_battery_voltage",
51
- "sensor_status",
52
- "rainfall_amount_absolute_32bit",
53
- "datalogger_debug",
54
- "raw_drop_concentration",
55
- "raw_drop_average_velocity",
56
- "raw_drop_number",
57
- "datalogger_error",
58
- ]
59
-
60
- ##------------------------------------------------------------------------.
61
- #### - Define reader options
62
- reader_kwargs = {}
63
- # - Define delimiter
64
- reader_kwargs["delimiter"] = ","
65
- # Skip first 4 rows (it's a header)
66
- reader_kwargs["skiprows"] = 4
67
- # - Avoid first column to become df index
68
- reader_kwargs["index_col"] = False
69
- # - Define behaviour when encountering bad lines
70
- reader_kwargs["on_bad_lines"] = "skip"
71
- # - Define reader engine
72
- # - C engine is faster
73
- # - Python engine is more feature-complete
74
- reader_kwargs["engine"] = "python"
75
- # - Define on-the-fly decompression of on-disk data
76
- # - Available: gzip, bz2, zip
77
- reader_kwargs["compression"] = "infer"
78
- # - 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’
82
- reader_kwargs["na_values"] = ["na", "", "error"]
83
-
84
- ##------------------------------------------------------------------------.
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_voltage",
97
- "datalogger_temperature",
98
- "datalogger_debug",
99
- "datalogger_error",
100
- ]
101
- df = df.drop(columns=columns_to_drop)
102
-
103
- # - Remove " at the end of raw_drop_number
104
- df["raw_drop_number"] = df["raw_drop_number"].str.rstrip('"')
105
-
106
- return df
107
-
108
- ##------------------------------------------------------------------------.
109
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
110
- glob_patterns = "*.dat*"
111
-
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
- )
@@ -1,127 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- # -----------------------------------------------------------------------------.
18
- """Reader for HYMEX SOP2 campaign."""
19
- from disdrodb.l0 import run_l0a
20
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
21
-
22
-
23
- @is_documented_by(reader_generic_docstring)
24
- def reader(
25
- raw_dir,
26
- processed_dir,
27
- station_name,
28
- # Processing options
29
- force=False,
30
- verbose=False,
31
- parallel=False,
32
- debugging_mode=False,
33
- ):
34
- ##------------------------------------------------------------------------.
35
- #### - Define column names
36
- column_names = [
37
- "time",
38
- "id",
39
- "datalogger_temperature",
40
- "datalogger_voltage",
41
- "rainfall_rate_32bit",
42
- "rainfall_accumulated_32bit",
43
- "weather_code_synop_4680",
44
- "weather_code_synop_4677",
45
- "reflectivity_32bit",
46
- "mor_visibility",
47
- "laser_amplitude",
48
- "number_particles",
49
- "sensor_temperature",
50
- "sensor_heating_current",
51
- "sensor_battery_voltage",
52
- "sensor_status",
53
- "rainfall_amount_absolute_32bit",
54
- "datalogger_debug",
55
- "raw_drop_concentration",
56
- "raw_drop_average_velocity",
57
- "raw_drop_number",
58
- "datalogger_error",
59
- ]
60
-
61
- ##------------------------------------------------------------------------.
62
- #### - Define reader options
63
- reader_kwargs = {}
64
- # - Define delimiter
65
- reader_kwargs["delimiter"] = ","
66
- # - Avoid first column to become df index !!!
67
- reader_kwargs["index_col"] = False
68
- # - Define behaviour when encountering bad lines
69
- reader_kwargs["on_bad_lines"] = "skip"
70
- # - Define reader engine
71
- # - C engine is faster
72
- # - Python engine is more feature-complete
73
- reader_kwargs["engine"] = "python"
74
- # - Define on-the-fly decompression of on-disk data
75
- # - Available: gzip, bz2, zip
76
- reader_kwargs["compression"] = "infer"
77
- # - 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’
81
- reader_kwargs["na_values"] = ["na", "", "error", "-.-", " NA"]
82
-
83
- ##------------------------------------------------------------------------.
84
- #### - Define dataframe sanitizer function for L0 processing
85
- def df_sanitizer_fun(df):
86
- # Import dask or 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 rows when "raw_drop_number" is "NA"
93
- # --> This is used to drop all rows where all values are "NA"
94
- df = df.dropna(subset="raw_drop_number", axis=0)
95
-
96
- # - Drop columns not agreeing with DISDRODB L0 standards
97
- columns_to_drop = [
98
- "datalogger_debug",
99
- "datalogger_voltage",
100
- "id",
101
- "datalogger_temperature",
102
- "datalogger_error",
103
- ]
104
- df = df.drop(columns=columns_to_drop)
105
- return df
106
-
107
- ##------------------------------------------------------------------------.
108
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
109
- glob_patterns = "*.dat*"
110
-
111
- ####----------------------------------------------------------------------.
112
- #### - Create L0A products
113
- run_l0a(
114
- raw_dir=raw_dir,
115
- processed_dir=processed_dir,
116
- station_name=station_name,
117
- # Custom arguments of the reader for L0A processing
118
- glob_patterns=glob_patterns,
119
- column_names=column_names,
120
- reader_kwargs=reader_kwargs,
121
- df_sanitizer_fun=df_sanitizer_fun,
122
- # Processing options
123
- force=force,
124
- verbose=verbose,
125
- parallel=parallel,
126
- debugging_mode=debugging_mode,
127
- )
@@ -1,129 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -----------------------------------------------------------------------------.
3
- # Copyright (c) 2021-2023 DISDRODB developers
4
- #
5
- # This program is free software: you can redistribute it and/or modify
6
- # it under the terms of the GNU General Public License as published by
7
- # the Free Software Foundation, either version 3 of the License, or
8
- # (at your option) any later version.
9
- #
10
- # This program is distributed in the hope that it will be useful,
11
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
- # GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License
16
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
17
- # -----------------------------------------------------------------------------.
18
- """Reader for HYMEX SOP3 campaign."""
19
- from disdrodb.l0 import run_l0a
20
- from disdrodb.l0.l0_reader import is_documented_by, reader_generic_docstring
21
-
22
-
23
- @is_documented_by(reader_generic_docstring)
24
- def reader(
25
- raw_dir,
26
- processed_dir,
27
- station_name,
28
- # Processing options
29
- force=False,
30
- verbose=False,
31
- parallel=False,
32
- debugging_mode=False,
33
- ):
34
- ##------------------------------------------------------------------------.
35
- #### - Define column names
36
- column_names = [
37
- "time",
38
- "id",
39
- "datalogger_temperature",
40
- "datalogger_voltage",
41
- "rainfall_rate_32bit",
42
- "rainfall_accumulated_32bit",
43
- "weather_code_synop_4680",
44
- "weather_code_synop_4677",
45
- "reflectivity_32bit",
46
- "mor_visibility",
47
- "laser_amplitude",
48
- "number_particles",
49
- "sensor_temperature",
50
- "sensor_heating_current",
51
- "sensor_battery_voltage",
52
- "sensor_status",
53
- "rainfall_amount_absolute_32bit",
54
- "datalogger_debug",
55
- "raw_drop_concentration",
56
- "raw_drop_average_velocity",
57
- "raw_drop_number",
58
- "datalogger_error",
59
- ]
60
-
61
- ##------------------------------------------------------------------------.
62
- #### - Define reader options
63
- reader_kwargs = {}
64
- # - Define delimiter
65
- reader_kwargs["delimiter"] = ","
66
- # - Avoid first column to become df index !!!
67
- reader_kwargs["index_col"] = False
68
- # - Define behaviour when encountering bad lines
69
- reader_kwargs["on_bad_lines"] = "skip"
70
- # - Avoid UnicodeDecodeError: 'utf-8' codec can't decode byte ...
71
- reader_kwargs["encoding"] = "latin-1"
72
- # - Define reader engine
73
- # - C engine is faster
74
- # - Python engine is more feature-complete
75
- reader_kwargs["engine"] = "python"
76
- # - Define on-the-fly decompression of on-disk data
77
- # - Available: gzip, bz2, zip
78
- reader_kwargs["compression"] = "infer"
79
- # - 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’
83
- reader_kwargs["na_values"] = ["na", "", "error", "-.-", " NA"]
84
-
85
- ##------------------------------------------------------------------------.
86
- #### - Define dataframe sanitizer function for L0 processing
87
- def df_sanitizer_fun(df):
88
- # Import dask or 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 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)
97
-
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)
107
- return df
108
-
109
- ##------------------------------------------------------------------------.
110
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
111
- glob_patterns = "*.dat*"
112
-
113
- ####----------------------------------------------------------------------.
114
- #### - Create L0A products
115
- run_l0a(
116
- raw_dir=raw_dir,
117
- processed_dir=processed_dir,
118
- station_name=station_name,
119
- # Custom arguments of the reader for L0A processing
120
- glob_patterns=glob_patterns,
121
- column_names=column_names,
122
- reader_kwargs=reader_kwargs,
123
- df_sanitizer_fun=df_sanitizer_fun,
124
- # Processing options
125
- force=force,
126
- verbose=verbose,
127
- parallel=parallel,
128
- debugging_mode=debugging_mode,
129
- )
@@ -1,158 +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_SPLITTED"]
36
-
37
- ##------------------------------------------------------------------------.
38
- #### - Define reader options
39
- reader_kwargs = {}
40
- # - Define delimiter
41
- reader_kwargs["delimiter"] = ";" # Used to not split anything !
42
- # - Define encoding
43
- reader_kwargs["encoding"] = "ISO-8859-1"
44
- # Skip first row as columns names
45
- reader_kwargs["header"] = None
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"] = "gzip"
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"] = [
62
- "na",
63
- "",
64
- "error",
65
- ]
66
-
67
- ##------------------------------------------------------------------------.
68
- #### - Define dataframe sanitizer function for L0 processing
69
- def df_sanitizer_fun(df):
70
- # - Import pandas
71
- import pandas as pd
72
-
73
- # - Drop row that contains errors
74
- df = df[~df["TO_BE_SPLITTED"].str.contains("Error in data reading! 0")]
75
-
76
- # - Check if file empty
77
- if len(df.index) == 0:
78
- raise ValueError("Error in all rows. The file has been skipped.")
79
-
80
- # - Split the column
81
- df = df["TO_BE_SPLITTED"].str.split(",", expand=True, n=1111)
82
-
83
- # - Define auxiliary columns
84
- column_names = [
85
- "id",
86
- "latitude",
87
- "longitude",
88
- "time",
89
- "datalogger_temperature",
90
- "datalogger_voltage",
91
- "rainfall_rate_32bit",
92
- "rainfall_accumulated_32bit",
93
- "weather_code_synop_4680",
94
- "weather_code_synop_4677",
95
- "reflectivity_32bit",
96
- "mor_visibility",
97
- "laser_amplitude",
98
- "number_particles",
99
- "sensor_temperature",
100
- "sensor_heating_current",
101
- "sensor_battery_voltage",
102
- "sensor_status",
103
- "rainfall_amount_absolute_32bit",
104
- "error_code",
105
- ]
106
- df_variables = df.iloc[:, 0:20]
107
- df_variables.columns = column_names
108
-
109
- # - Define raw fields
110
- df_raw_drop_concentration = df.iloc[:, 20:52].agg(",".join, axis=1)
111
- df_raw_drop_average_velocity = df.iloc[:, 53:85].agg(",".join, axis=1)
112
- df_raw_drop_number = df.iloc[:, 86:1110].agg(",".join, axis=1)
113
-
114
- # - Combine together
115
- df = df_variables
116
- df["raw_drop_concentration"] = df_raw_drop_concentration
117
- df["raw_drop_average_velocity"] = df_raw_drop_average_velocity
118
- df["raw_drop_number"] = df_raw_drop_number
119
-
120
- # - Drop invalid rows
121
- df = df.loc[df["id"].astype(str).str.len() < 10]
122
-
123
- # - Drop columns not agreeing with DISDRODB L0 standards
124
- columns_to_drop = [
125
- "datalogger_temperature",
126
- "datalogger_voltage",
127
- "id",
128
- "latitude",
129
- "longitude",
130
- ]
131
- df = df.drop(columns=columns_to_drop)
132
-
133
- # - Convert time column to datetime
134
- df["time"] = pd.to_datetime(df["time"], format="%d-%m-%Y %H:%M:%S", errors="coerce")
135
-
136
- return df
137
-
138
- ##------------------------------------------------------------------------.
139
- #### - Define glob pattern to search data files in <raw_dir>/data/<station_name>
140
- glob_patterns = "*.dat.gz*"
141
-
142
- ####----------------------------------------------------------------------.
143
- #### - Create L0A products
144
- run_l0a(
145
- raw_dir=raw_dir,
146
- processed_dir=processed_dir,
147
- station_name=station_name,
148
- # Custom arguments of the reader for L0A processing
149
- glob_patterns=glob_patterns,
150
- column_names=column_names,
151
- reader_kwargs=reader_kwargs,
152
- df_sanitizer_fun=df_sanitizer_fun,
153
- # Processing options
154
- force=force,
155
- verbose=verbose,
156
- parallel=parallel,
157
- debugging_mode=debugging_mode,
158
- )