Skip to content

Commit 81a3b43

Browse files
committed
Bugfix: concatenating multi-tier TextGrids with different end times.
* If the tiers in one TextGrid had varying end times, the calculated offset differed, leading to misaligned annotations on different tiers.
1 parent e20e3de commit 81a3b43

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

tgt/util.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,22 +96,20 @@ def get_overlapping_intervals(tier1, tier2, regex=r'[^\s]+', overlap_label=None)
9696
return overlaps
9797

9898

99-
def concatenate_tiers(tier1, tier2, use_absolute_time):
99+
def concatenate_tiers(tier1, tier2, offset):
100100
"""Concatenate two tiers and return a new tier.
101101
102-
If ``use_absolute_time`` is ``False``, start and end times of
103-
intervals in tier2 are offset by the end_time of tier1.
104-
If `use_absolute_time` is `True`, start and end times of
105-
intervals are used as is.
102+
Offset is the time added to each interval's boundaries in order to
103+
put them after the intervals of the preceeding tier. If intervals
104+
have absolute timing on each tier (i.e., start times of tier > 0 for
105+
later tiers, an offset of 0 should be used).
106106
107107
Keyword argument:
108-
tier1 -- a Tier object
109-
tier2 -- a Tier object
110-
use_absolute_time -- a boolean
111-
108+
tier1 -- Tier object
109+
tier2 -- Tier object
110+
offset -- float (>= 0)
112111
"""
113112
result = copy.deepcopy(tier1)
114-
offset = 0 if use_absolute_time else tier1.end_time
115113
for annotation in tier2:
116114
if hasattr(tier1, 'intervals') and hasattr(tier2, 'intervals'):
117115
result.add_annotation(Interval(
@@ -155,6 +153,7 @@ def concatenate_textgrids(
155153
raise TextGridToolsException(
156154
'Different numbers of tiers or non-matching tier names.')
157155
ccd_tiers = {}
156+
offset = 0
158157
for textgrid in textgrids:
159158
for tier in textgrid:
160159
if tier.name not in common_tiers and ignore_nonmatching_tiers:
@@ -165,7 +164,8 @@ def concatenate_textgrids(
165164
ccd_tiers[tier.name] = concatenate_tiers(
166165
tier1=ccd_tiers[tier.name],
167166
tier2=tier,
168-
use_absolute_time=use_absolute_time)
167+
offset=0 if use_absolute_time else offset)
168+
offset = max([tier.end_time for tier in ccd_tiers.values()])
169169
result_tg = TextGrid()
170170
result_tg.add_tiers([ccd_tiers[x] for x in common_tiers]) #preserve order
171171
return result_tg

0 commit comments

Comments
 (0)