disdrodb 0.1.3__py3-none-any.whl → 0.1.5__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 (124) hide show
  1. disdrodb/__init__.py +4 -0
  2. disdrodb/_version.py +2 -2
  3. disdrodb/api/checks.py +70 -47
  4. disdrodb/api/configs.py +0 -2
  5. disdrodb/api/create_directories.py +0 -2
  6. disdrodb/api/info.py +3 -3
  7. disdrodb/api/io.py +48 -8
  8. disdrodb/api/path.py +116 -133
  9. disdrodb/api/search.py +12 -3
  10. disdrodb/cli/disdrodb_create_summary.py +113 -0
  11. disdrodb/cli/disdrodb_create_summary_station.py +11 -1
  12. disdrodb/cli/disdrodb_run_l0a_station.py +1 -1
  13. disdrodb/cli/disdrodb_run_l0b_station.py +2 -2
  14. disdrodb/cli/disdrodb_run_l0c_station.py +2 -2
  15. disdrodb/cli/disdrodb_run_l1_station.py +2 -2
  16. disdrodb/cli/disdrodb_run_l2e_station.py +2 -2
  17. disdrodb/cli/disdrodb_run_l2m_station.py +2 -2
  18. disdrodb/constants.py +1 -1
  19. disdrodb/data_transfer/download_data.py +123 -7
  20. disdrodb/etc/products/L1/global.yaml +1 -1
  21. disdrodb/etc/products/L2E/5MIN.yaml +1 -0
  22. disdrodb/etc/products/L2E/global.yaml +1 -1
  23. disdrodb/etc/products/L2M/GAMMA_GS_ND_MAE.yaml +6 -0
  24. disdrodb/etc/products/L2M/GAMMA_ML.yaml +1 -1
  25. disdrodb/etc/products/L2M/LOGNORMAL_GS_LOG_ND_MAE.yaml +6 -0
  26. disdrodb/etc/products/L2M/LOGNORMAL_GS_ND_MAE.yaml +6 -0
  27. disdrodb/etc/products/L2M/LOGNORMAL_ML.yaml +8 -0
  28. disdrodb/etc/products/L2M/global.yaml +11 -3
  29. disdrodb/issue/writer.py +2 -0
  30. disdrodb/l0/check_configs.py +49 -16
  31. disdrodb/l0/configs/LPM/l0a_encodings.yml +2 -2
  32. disdrodb/l0/configs/LPM/l0b_cf_attrs.yml +2 -2
  33. disdrodb/l0/configs/LPM/l0b_encodings.yml +2 -2
  34. disdrodb/l0/configs/LPM/raw_data_format.yml +2 -2
  35. disdrodb/l0/configs/PWS100/l0b_encodings.yml +1 -0
  36. disdrodb/l0/configs/SWS250/bins_diameter.yml +108 -0
  37. disdrodb/l0/configs/SWS250/bins_velocity.yml +83 -0
  38. disdrodb/l0/configs/SWS250/l0a_encodings.yml +18 -0
  39. disdrodb/l0/configs/SWS250/l0b_cf_attrs.yml +72 -0
  40. disdrodb/l0/configs/SWS250/l0b_encodings.yml +155 -0
  41. disdrodb/l0/configs/SWS250/raw_data_format.yml +148 -0
  42. disdrodb/l0/l0a_processing.py +10 -5
  43. disdrodb/l0/l0b_nc_processing.py +10 -6
  44. disdrodb/l0/l0b_processing.py +92 -72
  45. disdrodb/l0/l0c_processing.py +369 -251
  46. disdrodb/l0/readers/LPM/ARM/ARM_LPM.py +8 -1
  47. disdrodb/l0/readers/LPM/AUSTRALIA/MELBOURNE_2007_LPM.py +2 -2
  48. disdrodb/l0/readers/LPM/BELGIUM/ULIEGE.py +256 -0
  49. disdrodb/l0/readers/LPM/BRAZIL/CHUVA_LPM.py +2 -2
  50. disdrodb/l0/readers/LPM/BRAZIL/GOAMAZON_LPM.py +2 -2
  51. disdrodb/l0/readers/LPM/GERMANY/DWD.py +491 -0
  52. disdrodb/l0/readers/LPM/ITALY/GID_LPM.py +2 -2
  53. disdrodb/l0/readers/LPM/ITALY/GID_LPM_W.py +2 -2
  54. disdrodb/l0/readers/LPM/KIT/CHWALA.py +2 -2
  55. disdrodb/l0/readers/LPM/SLOVENIA/ARSO.py +107 -12
  56. disdrodb/l0/readers/LPM/SLOVENIA/UL.py +3 -3
  57. disdrodb/l0/readers/LPM/SWITZERLAND/INNERERIZ_LPM.py +2 -2
  58. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010.py +5 -14
  59. disdrodb/l0/readers/PARSIVEL/NCAR/VORTEX2_2010_UF.py +5 -14
  60. disdrodb/l0/readers/PARSIVEL/SLOVENIA/UL.py +117 -8
  61. disdrodb/l0/readers/PARSIVEL2/ARM/ARM_PARSIVEL2.py +4 -0
  62. disdrodb/l0/readers/PARSIVEL2/BRAZIL/CHUVA_PARSIVEL2.py +10 -14
  63. disdrodb/l0/readers/PARSIVEL2/BRAZIL/GOAMAZON_PARSIVEL2.py +10 -14
  64. disdrodb/l0/readers/PARSIVEL2/CANADA/UQAM_NC.py +69 -0
  65. disdrodb/l0/readers/PARSIVEL2/DENMARK/DTU.py +8 -14
  66. disdrodb/l0/readers/PARSIVEL2/DENMARK/EROSION_raw.py +382 -0
  67. disdrodb/l0/readers/PARSIVEL2/FINLAND/FMI_PARSIVEL2.py +4 -0
  68. disdrodb/l0/readers/PARSIVEL2/FRANCE/OSUG.py +1 -1
  69. disdrodb/l0/readers/PARSIVEL2/GREECE/NOA.py +127 -0
  70. disdrodb/l0/readers/PARSIVEL2/ITALY/HYDROX.py +239 -0
  71. disdrodb/l0/readers/PARSIVEL2/MPI/BCO_PARSIVEL2.py +136 -0
  72. disdrodb/l0/readers/PARSIVEL2/MPI/BOWTIE.py +220 -0
  73. disdrodb/l0/readers/PARSIVEL2/NASA/LPVEX.py +109 -0
  74. disdrodb/l0/readers/PARSIVEL2/NCAR/FARM_PARSIVEL2.py +5 -11
  75. disdrodb/l0/readers/PARSIVEL2/NCAR/PERILS_MIPS.py +4 -17
  76. disdrodb/l0/readers/PARSIVEL2/NCAR/RELAMPAGO_PARSIVEL2.py +5 -14
  77. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_PJ.py +10 -13
  78. disdrodb/l0/readers/PARSIVEL2/NCAR/SNOWIE_SB.py +10 -13
  79. disdrodb/l0/readers/PARSIVEL2/NETHERLANDS/DELFT_NC.py +3 -0
  80. disdrodb/l0/readers/PARSIVEL2/PHILIPPINES/PANGASA.py +232 -0
  81. disdrodb/l0/readers/PARSIVEL2/SPAIN/CENER.py +6 -18
  82. disdrodb/l0/readers/PARSIVEL2/SPAIN/GRANADA.py +120 -0
  83. disdrodb/l0/readers/PARSIVEL2/USA/C3WE.py +7 -25
  84. disdrodb/l0/readers/PWS100/AUSTRIA/HOAL.py +321 -0
  85. disdrodb/l0/readers/SW250/BELGIUM/KMI.py +239 -0
  86. disdrodb/l1/beard_model.py +31 -129
  87. disdrodb/l1/fall_velocity.py +156 -57
  88. disdrodb/l1/filters.py +25 -28
  89. disdrodb/l1/processing.py +12 -14
  90. disdrodb/l1_env/routines.py +46 -17
  91. disdrodb/l2/empirical_dsd.py +6 -0
  92. disdrodb/l2/processing.py +3 -3
  93. disdrodb/metadata/checks.py +132 -125
  94. disdrodb/metadata/geolocation.py +0 -2
  95. disdrodb/psd/fitting.py +180 -210
  96. disdrodb/psd/models.py +1 -1
  97. disdrodb/routines/__init__.py +54 -0
  98. disdrodb/{l0/routines.py → routines/l0.py} +288 -418
  99. disdrodb/{l1/routines.py → routines/l1.py} +60 -92
  100. disdrodb/{l2/routines.py → routines/l2.py} +284 -485
  101. disdrodb/{routines.py → routines/wrappers.py} +100 -7
  102. disdrodb/scattering/axis_ratio.py +95 -85
  103. disdrodb/scattering/permittivity.py +24 -0
  104. disdrodb/scattering/routines.py +56 -36
  105. disdrodb/summary/routines.py +147 -45
  106. disdrodb/utils/archiving.py +434 -0
  107. disdrodb/utils/attrs.py +2 -0
  108. disdrodb/utils/cli.py +5 -5
  109. disdrodb/utils/dask.py +62 -1
  110. disdrodb/utils/decorators.py +31 -0
  111. disdrodb/utils/encoding.py +10 -1
  112. disdrodb/{l2 → utils}/event.py +1 -66
  113. disdrodb/utils/logger.py +1 -1
  114. disdrodb/utils/manipulations.py +22 -12
  115. disdrodb/utils/routines.py +166 -0
  116. disdrodb/utils/time.py +5 -293
  117. disdrodb/utils/xarray.py +3 -0
  118. disdrodb/viz/plots.py +109 -15
  119. {disdrodb-0.1.3.dist-info → disdrodb-0.1.5.dist-info}/METADATA +3 -2
  120. {disdrodb-0.1.3.dist-info → disdrodb-0.1.5.dist-info}/RECORD +124 -96
  121. {disdrodb-0.1.3.dist-info → disdrodb-0.1.5.dist-info}/entry_points.txt +1 -0
  122. {disdrodb-0.1.3.dist-info → disdrodb-0.1.5.dist-info}/WHEEL +0 -0
  123. {disdrodb-0.1.3.dist-info → disdrodb-0.1.5.dist-info}/licenses/LICENSE +0 -0
  124. {disdrodb-0.1.3.dist-info → disdrodb-0.1.5.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,83 @@
1
+ center:
2
+ 0: 0.55
3
+ 1: 0.95
4
+ 2: 1.41
5
+ 3: 1.84
6
+ 4: 2.465
7
+ 5: 3.27
8
+ 6: 4.01
9
+ 7: 4.625
10
+ 8: 5.275
11
+ 9: 6.325
12
+ 10: 7.63
13
+ 11: 9.51
14
+ 12: 11.745
15
+ 13: 14.14
16
+ 14: 17.775
17
+ 15: 22.5
18
+ bounds:
19
+ 0:
20
+ - 0.40
21
+ - 0.70
22
+ 1:
23
+ - 0.70
24
+ - 1.20
25
+ 2:
26
+ - 1.20
27
+ - 1.62
28
+ 3:
29
+ - 1.62
30
+ - 2.06
31
+ 4:
32
+ - 2.06
33
+ - 2.87
34
+ 5:
35
+ - 2.87
36
+ - 3.67
37
+ 6:
38
+ - 3.67
39
+ - 4.35
40
+ 7:
41
+ - 4.35
42
+ - 4.90
43
+ 8:
44
+ - 4.90
45
+ - 5.65
46
+ 9:
47
+ - 5.65
48
+ - 7.00
49
+ 10:
50
+ - 7.00
51
+ - 8.26
52
+ 11:
53
+ - 8.26
54
+ - 10.76
55
+ 12:
56
+ - 10.76
57
+ - 12.73
58
+ 13:
59
+ - 12.73
60
+ - 15.55
61
+ 14:
62
+ - 15.55
63
+ - 20.00
64
+ 15:
65
+ - 20.00
66
+ - 25.00
67
+ width:
68
+ 0: 0.3
69
+ 1: 0.5
70
+ 2: 0.42
71
+ 3: 0.44
72
+ 4: 0.81
73
+ 5: 0.8
74
+ 6: 0.68
75
+ 7: 0.55
76
+ 8: 0.75
77
+ 9: 1.35
78
+ 10: 1.26
79
+ 11: 2.5
80
+ 12: 1.97
81
+ 13: 2.82
82
+ 14: 4.45
83
+ 15: 5.0
@@ -0,0 +1,18 @@
1
+ precipitation_rate: "float32"
2
+ precipitation_accumulated: "float32"
3
+ weather_code_synop_4680: "float32" # 'uint16'
4
+ weather_code_metar_4678: "str"
5
+ past_weather1: "str"
6
+ past_weather2: "str"
7
+ mor_visibility_5min: "float32"
8
+ mor_visibility: "float32" # 'uint16'
9
+ number_particles: "float32" # 'uint32'
10
+ sensor_temperature: "float32" # 'uint16'
11
+ obstruction_status: "str"
12
+ total_extinction_coefficient: "float32"
13
+ transmissometer_extinction_coefficient: "float32"
14
+ back_scatter_extinction_coefficient: "float32"
15
+ ambient_light_sensor_signal: "float32"
16
+ sensor_status: "str" #
17
+ ambient_light_sensor_signal_status: "str"
18
+ raw_drop_number: "str"
@@ -0,0 +1,72 @@
1
+ precipitation_rate:
2
+ description: Rainfall rate
3
+ long_name: Precipitation rate
4
+ units: mm/h
5
+ precipitation_accumulated:
6
+ description: Accumulated rain amount over the measurement interval
7
+ long_name: Precipitation accumulated
8
+ units: mm
9
+ weather_code_synop_4680:
10
+ description: SYNOP weather code according to table 4680 of Parsivel documentation
11
+ long_name: Weather code SYNOP 4680
12
+ units: ""
13
+ weather_code_metar_4678:
14
+ description: METAR/SPECI weather code according to table 4678 of Parsivel documentation
15
+ long_name: Weather code METAR 4678
16
+ units: ""
17
+ past_weather1:
18
+ description: Past weather code 1
19
+ long_name: Past weather 1
20
+ units: ""
21
+ past_weather2:
22
+ description: Past weather code 2
23
+ long_name: Past weather 2
24
+ units: ""
25
+ mor_visibility_5min:
26
+ description: Meteorological Optical Range in precipitation (5 minute average)
27
+ long_name: MOR visibility 5 minute
28
+ units: m
29
+ mor_visibility:
30
+ description: Meteorological Optical Range in precipitation
31
+ long_name: MOR visibility
32
+ units: m
33
+ number_particles:
34
+ description: Number of particles detected and validated
35
+ long_name: Number of detected particles
36
+ units: ""
37
+ sensor_temperature:
38
+ description: Temperature in sensor housing
39
+ long_name: Temperature of the sensor
40
+ units: "degC"
41
+ obstruction_status:
42
+ description: Obstruction status of the sensor
43
+ long_name: Obstruction status
44
+ units: ""
45
+ total_extinction_coefficient:
46
+ description: Total extinction coefficient
47
+ long_name: Total extinction coefficient
48
+ units: "1/km"
49
+ transmissometer_extinction_coefficient:
50
+ description: Transmissometer extinction coefficient
51
+ long_name: Transmissometer extinction coefficient
52
+ units: "1/km"
53
+ back_scatter_extinction_coefficient:
54
+ description: Back scatter extinction coefficient
55
+ long_name: Back scatter extinction coefficient
56
+ units: "1/km"
57
+ ambient_light_sensor_signal:
58
+ description: Ambient light sensor signal
59
+ long_name: Ambient light sensor signal
60
+ units: "cd/m2"
61
+ sensor_status:
62
+ description: Sensor status
63
+ long_name: Sensor status
64
+ units: ""
65
+ ambient_light_sensor_signal_status:
66
+ description: Ambient light sensor signal status
67
+ long_name: Ambient light sensor signal status
68
+ units: ""
69
+ raw_drop_number:
70
+ description: Drop counts per diameter and velocity class
71
+ long_name: Raw drop number
72
+ units: ""
@@ -0,0 +1,155 @@
1
+ precipitation_rate:
2
+ dtype: float32
3
+ zlib: true
4
+ complevel: 3
5
+ shuffle: true
6
+ fletcher32: false
7
+ contiguous: false
8
+ chunksizes: 5000
9
+ precipitation_accumulated:
10
+ dtype: float32
11
+ zlib: true
12
+ complevel: 3
13
+ shuffle: true
14
+ fletcher32: false
15
+ contiguous: false
16
+ chunksizes: 5000
17
+ weather_code_synop_4680:
18
+ dtype: uint8
19
+ zlib: true
20
+ complevel: 3
21
+ shuffle: true
22
+ fletcher32: false
23
+ contiguous: false
24
+ chunksizes: 5000
25
+ _FillValue: 255
26
+ weather_code_metar_4678:
27
+ dtype: str
28
+ zlib: false
29
+ complevel: 3
30
+ shuffle: true
31
+ fletcher32: false
32
+ contiguous: false
33
+ chunksizes: 5000
34
+ past_weather1:
35
+ dtype: str
36
+ zlib: false
37
+ complevel: 3
38
+ shuffle: true
39
+ fletcher32: false
40
+ contiguous: false
41
+ chunksizes: 5000
42
+ past_weather2:
43
+ dtype: str
44
+ zlib: false
45
+ complevel: 3
46
+ shuffle: true
47
+ fletcher32: false
48
+ contiguous: false
49
+ chunksizes: 5000
50
+ mor_visibility_5min:
51
+ dtype: uint16
52
+ zlib: true
53
+ complevel: 3
54
+ shuffle: true
55
+ fletcher32: false
56
+ contiguous: false
57
+ chunksizes: 5000
58
+ _FillValue: 65535
59
+ mor_visibility:
60
+ dtype: uint16
61
+ zlib: true
62
+ complevel: 3
63
+ shuffle: true
64
+ fletcher32: false
65
+ contiguous: false
66
+ chunksizes: 5000
67
+ _FillValue: 65535
68
+ number_particles:
69
+ dtype: uint16
70
+ zlib: true
71
+ complevel: 3
72
+ shuffle: true
73
+ fletcher32: false
74
+ contiguous: false
75
+ chunksizes: 5000
76
+ _FillValue: 65535
77
+ sensor_temperature:
78
+ dtype: uint16
79
+ scale_factor: 0.1
80
+ add_offset: -60.0
81
+ zlib: true
82
+ complevel: 3
83
+ shuffle: true
84
+ fletcher32: false
85
+ contiguous: false
86
+ chunksizes: 5000
87
+ _FillValue: 65535
88
+ obstruction_status:
89
+ dtype: str
90
+ zlib: false
91
+ complevel: 3
92
+ shuffle: true
93
+ fletcher32: false
94
+ contiguous: false
95
+ chunksizes: 5000
96
+ sensor_status:
97
+ dtype: str
98
+ zlib: false
99
+ complevel: 3
100
+ shuffle: true
101
+ fletcher32: false
102
+ contiguous: false
103
+ chunksizes: 5000
104
+ ambient_light_sensor_signal_status:
105
+ dtype: str
106
+ zlib: false
107
+ complevel: 3
108
+ shuffle: true
109
+ fletcher32: false
110
+ contiguous: false
111
+ chunksizes: 5000
112
+ total_extinction_coefficient:
113
+ dtype: float32
114
+ zlib: true
115
+ complevel: 3
116
+ shuffle: true
117
+ fletcher32: false
118
+ contiguous: false
119
+ chunksizes: 5000
120
+ transmissometer_extinction_coefficient:
121
+ dtype: float32
122
+ zlib: true
123
+ complevel: 3
124
+ shuffle: true
125
+ fletcher32: false
126
+ contiguous: false
127
+ chunksizes: 5000
128
+ back_scatter_extinction_coefficient:
129
+ dtype: float32
130
+ zlib: true
131
+ complevel: 3
132
+ shuffle: true
133
+ fletcher32: false
134
+ contiguous: false
135
+ chunksizes: 5000
136
+ ambient_light_sensor_signal:
137
+ dtype: float32
138
+ zlib: true
139
+ complevel: 3
140
+ shuffle: true
141
+ fletcher32: false
142
+ contiguous: false
143
+ chunksizes: 5000
144
+ raw_drop_number:
145
+ dtype: uint16
146
+ zlib: true
147
+ complevel: 3
148
+ shuffle: true
149
+ fletcher32: false
150
+ contiguous: false
151
+ _FillValue: 65535
152
+ chunksizes:
153
+ - 5000
154
+ - 16
155
+ - 21
@@ -0,0 +1,148 @@
1
+ precipitation_rate:
2
+ n_digits: 6
3
+ n_characters: 7
4
+ n_decimals: 3
5
+ n_naturals: 3
6
+ data_range:
7
+ - 0
8
+ - 9999.999
9
+ nan_flags: null
10
+ precipitation_accumulated:
11
+ n_digits: 6
12
+ n_characters: 7
13
+ n_decimals: 2
14
+ n_naturals: 4
15
+ data_range:
16
+ - 0
17
+ - 9999.0
18
+ nan_flags: null
19
+ weather_code_synop_4680:
20
+ n_digits: 2
21
+ n_characters: 2
22
+ n_decimals: 0
23
+ n_naturals: 2
24
+ data_range:
25
+ - 0
26
+ - 89
27
+ nan_flags: null
28
+ weather_code_metar_4678:
29
+ n_digits: null
30
+ n_characters: null
31
+ n_decimals: null
32
+ n_naturals: null
33
+ data_range: null
34
+ nan_flags: null
35
+ past_weather1:
36
+ n_digits: null
37
+ n_characters: null
38
+ n_decimals: null
39
+ n_naturals: null
40
+ data_range: null
41
+ nan_flags: null
42
+ past_weather2:
43
+ n_digits: null
44
+ n_characters: null
45
+ n_decimals: null
46
+ n_naturals: null
47
+ data_range: null
48
+ nan_flags: null
49
+ mor_visibility_5min:
50
+ n_digits: null
51
+ n_characters: null
52
+ n_decimals: null
53
+ n_naturals: null
54
+ data_range: null
55
+ nan_flags: null
56
+ mor_visibility:
57
+ n_digits: null
58
+ n_characters: null
59
+ n_decimals: null
60
+ n_naturals: null
61
+ data_range: null
62
+ nan_flags: null
63
+ number_particles:
64
+ n_digits: 4
65
+ n_characters: 4
66
+ n_decimals: 0
67
+ n_naturals: 4
68
+ data_range:
69
+ - 0
70
+ - 9999
71
+ nan_flags: null
72
+ sensor_temperature:
73
+ n_digits: 4
74
+ n_characters: 6
75
+ n_decimals: 1
76
+ n_naturals: 3
77
+ data_range:
78
+ - -99
79
+ - 100
80
+ nan_flags: null
81
+ obstruction_status:
82
+ n_digits: null
83
+ n_characters: null
84
+ n_decimals: null
85
+ n_naturals: null
86
+ data_range: null
87
+ nan_flags: null
88
+ total_extinction_coefficient:
89
+ n_digits: 5
90
+ n_characters: 6
91
+ n_decimals: 2
92
+ n_naturals: 3
93
+ data_range:
94
+ - 0
95
+ - 999.99
96
+ nan_flags: null
97
+ transmissometer_extinction_coefficient:
98
+ n_digits: 5
99
+ n_characters: 6
100
+ n_decimals: 2
101
+ n_naturals: 3
102
+ data_range:
103
+ - 0
104
+ - 999.99
105
+ nan_flags: null
106
+ back_scatter_extinction_coefficient:
107
+ n_digits: 5
108
+ n_characters: 7
109
+ n_decimals: 2
110
+ n_naturals: 3
111
+ data_range:
112
+ - -999.99
113
+ - 999.99
114
+ nan_flags: null
115
+ ambient_light_sensor_signal:
116
+ n_digits: 5
117
+ n_characters: 5
118
+ n_decimals: 0
119
+ n_naturals: 5
120
+ data_range:
121
+ - 0
122
+ - 99998
123
+ nan_flags: 99999
124
+ sensor_status:
125
+ n_digits: null
126
+ n_characters: null
127
+ n_decimals: null
128
+ n_naturals: null
129
+ data_range: null
130
+ nan_flags: null
131
+ ambient_light_sensor_signal_status:
132
+ n_digits: null
133
+ n_characters: null
134
+ n_decimals: null
135
+ n_naturals: null
136
+ data_range: null
137
+ nan_flags: null
138
+ raw_drop_number:
139
+ n_digits: 0
140
+ n_characters: 4096
141
+ n_decimals: 0
142
+ n_naturals: 0
143
+ data_range: null
144
+ nan_flags: null
145
+ dimension_order:
146
+ - velocity_bin_center
147
+ - diameter_bin_center
148
+ n_values: 336
@@ -269,13 +269,15 @@ def remove_issue_timesteps(df, issue_dict, logger=None, verbose=False):
269
269
  # Retrieve timesteps and time_periods
270
270
  timesteps = issue_dict.get("timesteps", None)
271
271
  time_periods = issue_dict.get("time_periods", None)
272
+ timesteps = [] if timesteps is None else timesteps
273
+ time_periods = [] if time_periods is None else time_periods
272
274
 
273
275
  # Drop rows of specified timesteps
274
- if timesteps:
276
+ if len(timesteps) > 0:
275
277
  df = drop_timesteps(df=df, timesteps=timesteps)
276
278
 
277
279
  # Drop rows within specified time_period
278
- if time_periods:
280
+ if len(time_periods) > 0:
279
281
  df = drop_time_periods(df, time_periods=time_periods)
280
282
 
281
283
  # Report number of dropped rows
@@ -804,9 +806,6 @@ def read_l0a_dataframe(
804
806
  # Define the list of dataframe
805
807
  df = pq.ParquetDataset(filepaths).read().to_pandas()
806
808
 
807
- # Ensure no index
808
- df = df.reset_index(drop=True)
809
-
810
809
  # Reduce rows
811
810
  if debugging_mode:
812
811
  n_rows = min(100, len(df))
@@ -815,6 +814,12 @@ def read_l0a_dataframe(
815
814
  # Ensure time is in nanoseconds
816
815
  df["time"] = df["time"].astype("M8[ns]")
817
816
 
817
+ # Ensure sorted by time
818
+ df = df.sort_values(by="time")
819
+
820
+ # Ensure no index
821
+ df = df.reset_index(drop=True)
822
+
818
823
  # ---------------------------------------------------
819
824
  # Return dataframe
820
825
  return df
@@ -36,7 +36,6 @@ from disdrodb.l0.standards import (
36
36
  from disdrodb.utils.logger import (
37
37
  log_error,
38
38
  # log_warning,
39
- # log_debug,
40
39
  log_info,
41
40
  )
42
41
 
@@ -347,7 +346,7 @@ def drop_timesteps(ds, timesteps: list):
347
346
  # Ensure there's at least one timestep left
348
347
  if ds_filtered.sizes.get("time", 0) == 0:
349
348
  raise ValueError(
350
- "No timesteps left after removing problematic timesteps. " "Maybe you need to adjust the issue YAML file.",
349
+ "No timesteps left after removing problematic timesteps. Maybe you need to adjust the issue YAML file.",
351
350
  )
352
351
  return ds_filtered
353
352
 
@@ -423,16 +422,21 @@ def remove_issue_timesteps(
423
422
  ValueError
424
423
  If after removing specified timesteps/periods no data remains.
425
424
  """
425
+ # Retrieve number of initial rows
426
426
  n_initial = ds.sizes.get("time", 0)
427
- timesteps = issue_dict.get("timesteps", []) or []
428
- time_periods = issue_dict.get("time_periods", []) or []
427
+
428
+ # Retrieve timesteps and time_periods
429
+ timesteps = issue_dict.get("timesteps")
430
+ time_periods = issue_dict.get("time_periods")
431
+ timesteps = [] if timesteps is None else timesteps
432
+ time_periods = [] if time_periods is None else time_periods
429
433
 
430
434
  # Drop individual timesteps
431
- if timesteps:
435
+ if len(timesteps) > 0:
432
436
  ds = drop_timesteps(ds, timesteps)
433
437
 
434
438
  # Drop intervals of time
435
- if time_periods:
439
+ if len(time_periods) > 0:
436
440
  ds = drop_time_periods(ds, time_periods)
437
441
 
438
442
  # Report number dropped