Browse Source

feat: [OverlapConsolidator] add optional delta

This adds functionality that permits nearby Features to be considered
overlapping, in addition to Features which actual overlap

@see utils.py::Feature
main
Rob Hallam 2 months ago
parent
commit
0c535e1c9d
1 changed files with 10 additions and 3 deletions
  1. +10
    -3
      pipeline/consolidators.py

+ 10
- 3
pipeline/consolidators.py View File

@@ -35,11 +35,18 @@ class OverlapConsolidator(Consolidator):
An overlap is defined as two features that share a common interval of time,ie:
interval1.end < interval2.start or
interval2.start < interval1.end

An optional delta parameter can be provided to allow for a 'fudge factor' in the comparison,
this is used to allow for small gaps between features to be considered as overlapping.
"""

def __init__(self, features: list=[], delta: float=0.0):
super().__init__(features)
self.delta = delta

def consolidate(self):
"""Consolidate overlapping features"""
# sort features by start time
# sort features by start time ascending
self.features.sort(key=lambda x: x.interval.start)

# merge overlapping features
@@ -47,13 +54,13 @@ class OverlapConsolidator(Consolidator):
consolidated = []
current = self.features[0]
for feature in self.features[1:]:
if current.interval.end < feature.interval.start:
if current.interval.end + self.delta < feature.interval.start - self.delta:
# no overlap
consolidated.append(current)
current = feature
else:
# overlap
current.interval.end = max(current.interval.end, feature.interval.end)
current.interval.move_end(max(current.interval.end, feature.interval.end))
consolidated.append(current)

self.features = consolidated

Loading…
Cancel
Save