Skip to content

v0.0.7 - Signal Characteristics, Flexible Inputs & Sphinx Docs

Choose a tag to compare

@fallahmad fallahmad released this 02 Mar 22:17
· 39 commits to main since this release

What's New

Signal Characteristics Model

New SignalCharacteristics dataclass on every ECGRecord — captures technical signal encoding metadata directly from each format:

  • bits_per_sample, signal_offset, signal_signed
  • data_encoding (e.g. base64_int16le, format_212, int16)
  • compression (e.g. none, huffman)
  • number_channels_allocated / number_channels_valid
  • electrode_placement, acsetting, and signal processing flags

All 12 parsers now populate record.signal from format-specific fields.

Expanded Metadata Extraction

Parsers now extract significantly more metadata from each format:

  • Technician — Sierra XML, GE MUSE, DICOM, GE MAC 2000
  • Referring physician — Sierra XML, EDF, GE MUSE, GE MAC 2000
  • Patient weight — SCP-ECG (Tag 12), BeneHeart R12, GE MAC 2000
  • Patient height — BeneHeart R12, GE MAC 2000
  • Patient race — HL7 aECG, Mortara EL250, GE MAC 2000
  • RR interval & QRS count — Mortara EL250, BeneHeart R12, GE MAC 2000
  • Device serial number — HL7 aECG, GE MAC 2000
  • Notch filter active flag — now properly set across all parsers

Flexible Inputs — Numpy Arrays Everywhere

All processing and plotting functions now accept raw numpy arrays directly alongside Lead objects. Pass the sample rate via fs=:

import numpy as np
from ecgdatakit.processing import diagnostic_filter, detect_r_peaks
from ecgdatakit.plotting import plot_lead

signal = np.random.randn(5000)
filtered = diagnostic_filter(signal, fs=500)
peaks = detect_r_peaks(filtered)
plot_lead(filtered, peaks=peaks)

Plotting Improvements

  • Auto-display: static plots now call plt.show() by default — pass show=False to get the figure for saving
  • Sample index axis: plot_lead(lead, x_axis="samples") for sample indices instead of time
  • Cleaner layout: reduced margins, integer time ticks on x-axis

Documentation Migration

  • Migrated from Hugo to Sphinx with the Furo theme
  • Full autodoc API reference generated from source docstrings
  • Hosted at https://ecgdatakit.ummisco.fr

Bug Fixes

  • BeneHeart R12: fixed assignment to non-existent RecordingInfo.device field
  • SCP-ECG: now reads patient weight from Tag 12 (was silently skipped)
  • MFER: notch filter now correctly extracted from filter tag when 12+ bytes present

Full Changelog: https://github.com/UMMISCO/ECGDataKit/commits/v0.0.0.7