Skip to content

Commit d1d26ba

Browse files
author
Benjamin Moody
committed
Record.set_default: use multiple signal files if needed.
It may be necessary to use multiple signal files in various cases: - signals are to be written in different formats (e.g. 8-bit signals stored in format 80 while 12-bit signals are stored in format 212) - multi-frequency signals are to be written in compressed format (FLAC supports only one frequency per signal file) - more than 8 signals are to be written in compressed format (FLAC supports a maximum of 8 channels) In each of these cases, if the caller didn't specify signal file names explicitly, generate signal file files by adding a numeric suffix after the record name.
1 parent de1461d commit d1d26ba

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

wfdb/io/_header.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,35 @@ def get_write_fields(self):
361361

362362
return rec_write_fields, sig_write_fields
363363

364+
def _auto_signal_file_names(self):
365+
fmt = self.fmt or [None] * self.n_sig
366+
spf = self.samps_per_frame or [None] * self.n_sig
367+
num_groups = 0
368+
group_number = []
369+
prev_fmt = prev_spf = None
370+
channels_in_group = 0
371+
372+
for ch_fmt, ch_spf in zip(fmt, spf):
373+
if ch_fmt != prev_fmt:
374+
num_groups += 1
375+
channels_in_group = 0
376+
elif ch_fmt in ("508", "516", "524"):
377+
if channels_in_group >= 8 or ch_spf != prev_spf:
378+
num_groups += 1
379+
channels_in_group = 0
380+
group_number.append(num_groups)
381+
prev_fmt = ch_fmt
382+
prev_spf = ch_spf
383+
384+
if num_groups < 2:
385+
return [self.record_name + ".dat"] * self.n_sig
386+
else:
387+
digits = len(str(group_number[-1]))
388+
return [
389+
self.record_name + "_" + str(g).rjust(digits, "0") + ".dat"
390+
for g in group_number
391+
]
392+
364393
def set_default(self, field):
365394
"""
366395
Set the object's attribute to its default value if it is missing
@@ -394,7 +423,7 @@ def set_default(self, field):
394423

395424
# Specific dynamic case
396425
if field == "file_name" and self.file_name is None:
397-
self.file_name = self.n_sig * [self.record_name + ".dat"]
426+
self.file_name = self._auto_signal_file_names()
398427
return
399428

400429
item = getattr(self, field)

0 commit comments

Comments
 (0)