@@ -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