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,80 +0,0 @@
1
- device_address: 'float32' # 'uint8'
2
- weather_code_synop_4677_5min: 'float32' # 'uint8'
3
- weather_code_synop_4680_5min : 'float32' # 'uint8'
4
- weather_code_metar_4678_5min : 'str'
5
- precipitation_rate_5min : 'float32'
6
- weather_code_synop_4677: 'float32' # 'uint8'
7
- weather_code_synop_4680: 'float32' # 'uint8'
8
- weather_code_metar_4678: 'str'
9
- precipitation_rate: 'float32'
10
- rainfall_rate: 'float32'
11
- snowfall_rate: 'float32'
12
- precipitation_accumulated: 'float32'
13
- mor_visibility: 'float32' # 'uint16'
14
- reflectivity: 'float32'
15
- quality_index: 'float32' # 'uint8'
16
- max_hail_diameter: 'float32'
17
- laser_status: 'float32' # 'uint8'
18
- static_signal: 'float32' # 'uint8'
19
- laser_temperature_analog_status: 'float32' # 'uint8'
20
- laser_temperature_digital_status: 'float32' # 'uint8'
21
- laser_current_analog_status: 'float32' # 'uint8'
22
- laser_current_digital_status: 'float32' # 'uint8'
23
- sensor_voltage_supply_status: 'float32' # 'uint8'
24
- current_heating_pane_transmitter_head_status: 'float32' # 'uint8'
25
- current_heating_pane_receiver_head_status: 'float32' # 'uint8'
26
- temperature_sensor_status: 'float32' # 'uint8'
27
- current_heating_voltage_supply_status: 'float32' # 'uint8'
28
- current_heating_house_status: 'float32' # 'uint8'
29
- current_heating_heads_status: 'float32' # 'uint8'
30
- current_heating_carriers_status: 'float32' # 'uint8'
31
- control_output_laser_power_status: 'float32' # 'uint8'
32
- reserve_status: 'float32' # 'uint8'
33
- temperature_interior : 'float32' # 'uint16'
34
- laser_temperature: 'float32' # 'uint16'
35
- laser_current_average: 'float32' # 'uint16'
36
- control_voltage: 'float32'
37
- optical_control_voltage_output: 'float32'
38
- sensor_voltage_supply : 'str'
39
- current_heating_pane_transmitter_head : 'str'
40
- current_heating_pane_receiver_head: 'str'
41
- temperature_ambient: 'float32'
42
- current_heating_voltage_supply: 'str'
43
- current_heating_house: 'str'
44
- current_heating_heads: 'str'
45
- current_heating_carriers: 'str'
46
- number_particles: 'float32' # 'uint16'
47
- number_particles_internal_data: 'float32'
48
- number_particles_min_speed: 'float32' # 'uint16'
49
- number_particles_min_speed_internal_data: 'float32'
50
- number_particles_max_speed: 'float32' # 'uint16'
51
- number_particles_max_speed_internal_data: 'float32'
52
- number_particles_min_diameter: 'float32' # 'uint16'
53
- number_particles_min_diameter_internal_data: 'float32'
54
- number_particles_no_hydrometeor: 'float32' # 'uint16'
55
- number_particles_no_hydrometeor_internal_data: 'float32'
56
- number_particles_unknown_classification: 'float32' # 'uint16'
57
- number_particles_unknown_classification_internal_data: 'float32'
58
- number_particles_class_1: 'float32' # 'uint16'
59
- number_particles_class_1_internal_data: 'float32'
60
- number_particles_class_2: 'float32' # 'uint16'
61
- number_particles_class_2_internal_data: 'float32'
62
- number_particles_class_3: 'float32' # 'uint16'
63
- number_particles_class_3_internal_data: 'float32'
64
- number_particles_class_4: 'float32' # 'uint16'
65
- number_particles_class_4_internal_data: 'float32'
66
- number_particles_class_5: 'float32' # 'uint16'
67
- number_particles_class_5_internal_data: 'float32'
68
- number_particles_class_6: 'float32' # 'uint16'
69
- number_particles_class_6_internal_data: 'float32'
70
- number_particles_class_7: 'float32' # 'uint16'
71
- number_particles_class_7_internal_data: 'float32'
72
- number_particles_class_8: 'float32' # 'uint16'
73
- number_particles_class_8_internal_data: 'float32'
74
- number_particles_class_9: 'float32' # 'uint16'
75
- number_particles_class_9_internal_data: 'float32'
76
- raw_drop_number: 'str'
77
- # '521': air_temperature
78
- # '522': relative_humidity
79
- # '523': wind_speed
80
- # '524': wind_direction
disdrodb/l0/io.py DELETED
@@ -1,257 +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
- """Define DISDRODB Data Input/Output."""
20
- import logging
21
- import os
22
- from typing import Union
23
-
24
- import pandas as pd
25
-
26
- from disdrodb.api.path import define_l0a_station_dir
27
- from disdrodb.utils.directories import list_files
28
- from disdrodb.utils.logger import log_info
29
-
30
- logger = logging.getLogger(__name__)
31
-
32
-
33
- ####--------------------------------------------------------------------------.
34
- #### List Station Files
35
-
36
-
37
- def _check_glob_pattern(pattern: str) -> None:
38
- """Check if the input parameters is a string and if it can be used as pattern.
39
-
40
- Parameters
41
- ----------
42
- pattern : str
43
- String to be checked.
44
-
45
- Raises
46
- ------
47
- TypeError
48
- The input parameter is not a string.
49
- ValueError
50
- The input parameter can not be used as pattern.
51
- """
52
- if not isinstance(pattern, str):
53
- raise TypeError("Expect pattern as a string.")
54
- if pattern[0] == "/":
55
- raise ValueError("glob_pattern should not start with /")
56
-
57
-
58
- def _check_glob_patterns(patterns: Union[str, list]) -> list:
59
- """Check if glob patterns are valids."""
60
- if not isinstance(patterns, (str, list)):
61
- raise ValueError("'glob_patterns' must be a str or list of strings.")
62
- if isinstance(patterns, str):
63
- patterns = [patterns]
64
- _ = [_check_glob_pattern(pattern) for pattern in patterns]
65
- return patterns
66
-
67
-
68
- def _get_file_list(raw_dir: str, station_name, glob_pattern) -> list:
69
- """Get the list of files from a directory based on glob pattern.
70
-
71
- Parameters
72
- ----------
73
- raw_dir : str
74
- Campaign directory of the raw data.
75
- station_name: str
76
- Name of the station.
77
- glob_pattern : str
78
- Pattern to match.
79
-
80
- Returns
81
- -------
82
- list
83
- List of file paths.
84
- """
85
- data_dir = os.path.join(raw_dir, "data", station_name)
86
- filepaths = list_files(data_dir, glob_pattern=glob_pattern, recursive=True)
87
- filepaths = sorted(filepaths)
88
- return filepaths
89
-
90
-
91
- def _get_available_filepaths(raw_dir, station_name, glob_patterns):
92
- # Retrieve filepaths list
93
- filepaths = [_get_file_list(raw_dir, station_name, glob_pattern=pattern) for pattern in glob_patterns]
94
- filepaths = [x for xs in filepaths for x in xs] # flatten list
95
-
96
- # Check there are files
97
- n_files = len(filepaths)
98
- if n_files == 0:
99
- glob_filepath_patterns = [os.path.join(raw_dir, pattern) for pattern in glob_patterns]
100
- raise ValueError(f"No file found at {glob_filepath_patterns}.")
101
- return filepaths
102
-
103
-
104
- def _filter_filepaths(filepaths, debugging_mode):
105
- """Filter out filepaths if debugging_mode=True."""
106
- if debugging_mode:
107
- max_files = min(3, len(filepaths))
108
- filepaths = filepaths[0:max_files]
109
- return filepaths
110
-
111
-
112
- def get_raw_filepaths(raw_dir, station_name, glob_patterns, verbose=False, debugging_mode=False):
113
- """Get the list of files from a directory based on input parameters.
114
-
115
- Currently concatenates all files provided by the glob patterns.
116
- In future, this might be modified to enable DISDRODB processing when raw data
117
- are separated in multiple files.
118
-
119
- Parameters
120
- ----------
121
- raw_dir : str
122
- Directory of the campaign where to search for files.
123
- Format <..>/DISDRODB/Raw/<DATA_SOURCE>/<CAMPAIGN_NAME>
124
- station_name : str
125
- ID of the station
126
- verbose : bool, optional
127
- Whether to verbose the processing.
128
- The default is False.
129
- debugging_mode : bool, optional
130
- If True, it select maximum 3 files for debugging purposes.
131
- The default is False.
132
-
133
- Returns
134
- -------
135
- filepaths : list
136
- List of files file paths.
137
-
138
- """
139
- glob_patterns = _check_glob_patterns(glob_patterns)
140
-
141
- filepaths = _get_available_filepaths(raw_dir=raw_dir, station_name=station_name, glob_patterns=glob_patterns)
142
-
143
- # Filter out filepaths if debugging_mode=True
144
- filepaths = _filter_filepaths(filepaths, debugging_mode)
145
-
146
- # Log number of files to process
147
- n_files = len(filepaths)
148
- data_dir = os.path.join(raw_dir, "data", station_name)
149
- msg = f" - {n_files} files to process in {data_dir}"
150
- log_info(logger=logger, msg=msg, verbose=verbose)
151
-
152
- # Return file list
153
- return filepaths
154
-
155
-
156
- def get_l0a_filepaths(processed_dir, station_name, debugging_mode=False):
157
- """Retrieve L0A files for a give station.
158
-
159
- Parameters
160
- ----------
161
- processed_dir : str
162
- Directory of the campaign where to search for the L0A files.
163
- Format <..>/DISDRODB/Processed/<DATA_SOURCE>/<CAMPAIGN_NAME>
164
- station_name : str
165
- ID of the station
166
- debugging_mode : bool, optional
167
- If True, it select maximum 3 files for debugging purposes.
168
- The default is False.
169
-
170
- Returns
171
- -------
172
- filepaths : list
173
- List of L0A file paths.
174
-
175
- """
176
- station_dir = define_l0a_station_dir(processed_dir, station_name)
177
- filepaths = list_files(station_dir, glob_pattern="*.parquet", recursive=True)
178
-
179
- # Filter out filepaths if debugging_mode=True
180
- filepaths = _filter_filepaths(filepaths, debugging_mode=debugging_mode)
181
-
182
- # If no file available, raise error
183
- if len(filepaths) == 0:
184
- msg = f"No L0A Apache Parquet file is available in {station_dir}. Run L0A processing first."
185
- raise ValueError(msg)
186
-
187
- return filepaths
188
-
189
-
190
- ####--------------------------------------------------------------------------.
191
- #### DISDRODB L0A product reader
192
-
193
-
194
- def _read_l0a(filepath: str, verbose: bool = False, debugging_mode: bool = False) -> pd.DataFrame:
195
- # Log
196
- msg = f" - Reading L0 Apache Parquet file at {filepath} started."
197
- log_info(logger, msg, verbose)
198
- # Open file
199
- df = pd.read_parquet(filepath)
200
- if debugging_mode:
201
- df = df.iloc[0:100]
202
- # Log
203
- msg = f" - Reading L0 Apache Parquet file at {filepath} ended."
204
- log_info(logger, msg, verbose)
205
- return df
206
-
207
-
208
- def read_l0a_dataframe(
209
- filepaths: Union[str, list],
210
- verbose: bool = False,
211
- debugging_mode: bool = False,
212
- ) -> pd.DataFrame:
213
- """Read DISDRODB L0A Apache Parquet file(s).
214
-
215
- Parameters
216
- ----------
217
- filepaths : str or list
218
- Either a list or a single filepath .
219
- verbose : bool
220
- Whether to print detailed processing information into terminal.
221
- The default is False.
222
- debugging_mode : bool
223
- If True, it reduces the amount of data to process.
224
- If filepaths is a list, it reads only the first 3 files
225
- For each file it select only the first 100 rows.
226
- The default is False.
227
-
228
- Returns
229
- -------
230
- pd.DataFrame
231
- L0A Dataframe.
232
-
233
- """
234
-
235
- from disdrodb.l0.l0a_processing import concatenate_dataframe
236
-
237
- # ----------------------------------------
238
- # Check filepaths validity
239
- if not isinstance(filepaths, (list, str)):
240
- raise TypeError("Expecting filepaths to be a string or a list of strings.")
241
-
242
- # ----------------------------------------
243
- # If filepath is a string, convert to list
244
- if isinstance(filepaths, str):
245
- filepaths = [filepaths]
246
- # ---------------------------------------------------
247
- # - If debugging_mode=True, it reads only the first 3 filepaths
248
- if debugging_mode:
249
- filepaths = filepaths[0:3] # select first 3 filepaths
250
-
251
- # - Define the list of dataframe
252
- list_df = [_read_l0a(filepath, verbose=verbose, debugging_mode=debugging_mode) for filepath in filepaths]
253
- # - Concatenate dataframe
254
- df = concatenate_dataframe(list_df, verbose=verbose)
255
- # ---------------------------------------------------
256
- # Return dataframe
257
- return df