Skip to content

Commit 6824ad7

Browse files
correction correct_close_events, and add figure to python example using it
1 parent b2e5291 commit 6824ad7

File tree

2 files changed

+34
-3
lines changed

2 files changed

+34
-3
lines changed

examples/16_network/pet_relative.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,21 @@
136136
ax.set_title(f"Clean network ({n_clean.infos()})")
137137
_ = n_clean.display_timeline(ax)
138138

139+
140+
# %%
141+
# change splittint-merging events
142+
# ------------------
143+
# change event where seg A split to B, then A merge into B, to A split to B then B merge into A
144+
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(15, 12), dpi=120)
145+
146+
ax1.set_title(f"Clean network ({n_clean.infos()})")
147+
n_clean.display_timeline(ax1)
148+
149+
clean_modified = n_clean.copy()
150+
clean_modified.correct_close_events(100)
151+
ax2.set_title(f"resplitted network ({clean_modified.infos()})")
152+
_ = clean_modified.display_timeline(ax2)
153+
139154
# %%
140155
# For further figure we will use clean path
141156
n = n_clean

src/py_eddy_tracker/observations/network.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,15 @@ def infos(self, label=""):
241241
return f"{len(self)} obs {unique(self.segment).shape[0]} segments"
242242

243243
def correct_close_events(self, nb_days_max=20):
244+
"""
245+
transform event where
246+
segment A split to B, then A merge into B
247+
to
248+
segment A split to B, then B merge to A
249+
these events are filtered with `nb_days_max`, which the event have to take place in less than `nb_days_max`
250+
251+
:param float nb_days_max: maximum time to search for splitting-merging event
252+
"""
244253

245254
_time = self.time
246255
segment = self.segment.copy()
@@ -258,6 +267,9 @@ def correct_close_events(self, nb_days_max=20):
258267

259268
for seg in sorted(segments_connexion.keys()):
260269
seg_slice, i_seg_p, i_seg_n = segments_connexion[seg]
270+
271+
# the segment ID has to be corrected, because we may have changed it since
272+
seg_corrected = segment[seg_slice.stop - 1]
261273
n_seg = segment[i_seg_n]
262274

263275
# if segment has splitting
@@ -266,11 +278,15 @@ def correct_close_events(self, nb_days_max=20):
266278
p2_seg = segment[i2_seg_p]
267279

268280
# if it merge on the first in a certain time
269-
if (p2_seg == seg) and (_time[i_seg_n] - _time[i2_seg_p] < nb_days_max):
270-
271-
segment[i_seg_n : seg2_slice.stop] = seg
281+
if (p2_seg == seg_corrected) and (
282+
_time[i_seg_n] - _time[i2_seg_p] < nb_days_max
283+
):
284+
my_slice = slice(i_seg_n, seg2_slice.stop)
285+
segment[my_slice] = seg_corrected
272286
previous_obs[i_seg_n] = seg_slice.stop - 1
273287

288+
segments_connexion[seg_corrected][0] = my_slice
289+
274290
self.segment[:] = segment
275291
self.next_obs[:] = next_obs
276292
self.previous_obs[:] = previous_obs

0 commit comments

Comments
 (0)