|
18 | 18 | import numpy as np
|
19 | 19 | from scipy.ndimage import gaussian_filter, find_objects
|
20 | 20 |
|
21 |
| -from hagelslag.data import ModelOutput |
22 |
| -from hagelslag.processing import STObject |
| 21 | +from hagelslag.data.ModelOutput import ModelOutput |
| 22 | +from hagelslag.processing.STObject import STObject |
23 | 23 | from hagelslag.processing.EnhancedWatershedSegmenter import EnhancedWatershed
|
24 | 24 | from hagelslag.processing.ObjectMatcher import ObjectMatcher, closest_distance
|
| 25 | +from netCDF4 import Dataset |
| 26 | + |
25 | 27 |
|
26 | 28 | # In[2]:
|
27 | 29 |
|
|
49 | 51 | # data_increment (int): quantization interval. Use 1 if you don't want to quantize
|
50 | 52 | # max_thresh (int): values greater than maxThresh are treated as the maximum threshold
|
51 | 53 | # size_threshold_pixels (int): clusters smaller than this threshold are ignored.
|
52 |
| -# delta (int): maximum number of data increments the cluster is allowed to range over. Larger d results in clusters over larger scales. |
| 54 | +# delta (int): maximum number of data increments the cluster is allowed to range over. Larger d results in |
| 55 | +# clusters over larger scales. |
53 | 56 |
|
54 | 57 | # From ahij's config file.
|
55 | 58 | if field == "MAX_UPDRAFT_HELICITY" or field == "UP_HELI_MAX03":
|
|
61 | 64 | levels = params['min_thresh'] * np.arange(1, 8)
|
62 | 65 | levels = np.append(levels, params['min_thresh'] * 15)
|
63 | 66 | model_watershed_params = (
|
64 |
| -params['min_thresh'], params['step'], params['max_thresh'], params["max_size"], params["delta"]) |
| 67 | + params['min_thresh'], params['step'], params['max_thresh'], params["max_size"], params["delta"]) |
65 | 68 |
|
66 | 69 | end_date = start_date + timedelta(hours=0)
|
67 | 70 |
|
68 |
| -from netCDF4 import Dataset |
69 | 71 |
|
70 | 72 | model_grid = ModelOutput(ensemble_name,
|
71 | 73 | member,
|
@@ -149,15 +151,16 @@ def get_forecast_objects(model_grid, ew_params, min_size, gaussian_window):
|
149 | 151 | num_slices = len(obj_slices)
|
150 | 152 | model_objects.append([])
|
151 | 153 | if num_slices > 0:
|
152 |
| - fig, ax = plt.subplots() |
153 |
| - t = plt.contourf(model_grid.lon, model_grid.lat, hour_labels, np.arange(0, num_slices + 1) + 0.5, |
| 154 | + plt.subplots() |
| 155 | + plt.contourf(model_grid.lon, model_grid.lat, hour_labels, np.arange(0, num_slices + 1) + 0.5, |
154 | 156 | extend="max", cmap="Set1", latlon=True, title=str(run_date) + " " + field + " " + str(h))
|
155 |
| - ret = plt.savefig(odir + "enh_watershed_ex/ew{0:02d}.png".format(h)) |
| 157 | + plt.savefig(odir + "enh_watershed_ex/ew{0:02d}.png".format(h)) |
156 | 158 | for s, sl in enumerate(obj_slices):
|
157 | 159 | model_objects[-1].append(STObject(model_grid.data[h][sl],
|
158 | 160 | # np.where(hour_labels[sl] > 0, 1, 0),
|
159 | 161 | # For some objects (especially long, diagonal ones), the rectangular
|
160 |
| - # slice encompasses part of other objects (i.e. non-zero elements of slice). |
| 162 | + # slice encompasses part of other objects |
| 163 | + # (i.e. non-zero elements of slice). |
161 | 164 | # We don't want them in our mask.
|
162 | 165 | np.where(hour_labels[sl] == s + 1, 1, 0),
|
163 | 166 | model_grid.x[sl],
|
@@ -198,7 +201,7 @@ def track_forecast_objects(input_model_objects, model_grid, object_matcher):
|
198 | 201 | elif len(past_time_objs) > 0 and len(model_objects[h]) > 0:
|
199 | 202 | assignments = object_matcher.match_objects(past_time_objs, model_objects[h], h - 1, h)
|
200 | 203 | print("assignments:", assignments)
|
201 |
| - unpaired = range(len(model_objects[h])) |
| 204 | + unpaired = list(range(len(model_objects[h]))) |
202 | 205 | for pair in assignments:
|
203 | 206 | past_time_objs[pair[0]].extend(model_objects[h][pair[1]])
|
204 | 207 | unpaired.remove(pair[1])
|
|
0 commit comments