@@ -241,6 +241,15 @@ def infos(self, label=""):
241
241
return f"{ len (self )} obs { unique (self .segment ).shape [0 ]} segments"
242
242
243
243
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
+ """
244
253
245
254
_time = self .time
246
255
segment = self .segment .copy ()
@@ -258,6 +267,9 @@ def correct_close_events(self, nb_days_max=20):
258
267
259
268
for seg in sorted (segments_connexion .keys ()):
260
269
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 ]
261
273
n_seg = segment [i_seg_n ]
262
274
263
275
# if segment has splitting
@@ -266,11 +278,15 @@ def correct_close_events(self, nb_days_max=20):
266
278
p2_seg = segment [i2_seg_p ]
267
279
268
280
# 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
272
286
previous_obs [i_seg_n ] = seg_slice .stop - 1
273
287
288
+ segments_connexion [seg_corrected ][0 ] = my_slice
289
+
274
290
self .segment [:] = segment
275
291
self .next_obs [:] = next_obs
276
292
self .previous_obs [:] = previous_obs
0 commit comments