Releases¶
All published releases of ECGDataKit, fetched from GitHub Releases at build time.
v1.0.2¶
Released 2026-07-06 · View on GitHub
Full Changelog: https://github.com/UMMISCO/ECGDataKit/compare/v1.0.0…v1.0.2
v1.0.0 - Stable Release¶
Released 2026-03-19 · View on GitHub
New features¶
Per-lead normalization —
normalize_minmax,normalize_zscore, andnormalize_amplitudenow accept alist[Lead]and return alist[Lead], normalizing each lead independently. Passrecord.leadsdirectly instead of looping manuallyResampling and normalization (min-max, z-score, amplitude) now support batch processing across all leads (independently) of an ECG record
Full Changelog: https://github.com/UMMISCO/ECGDataKit/compare/v0.0.9…v1.0.0
v0.0.9 - ADC resolution pipeline¶
Released 2026-03-07 · View on GitHub
Breaking changes¶
sample_raterenamed tosampling_rateinLeadandSignalCharacteristicsLead.unitssemantics changed — now empty ("") whenis_raw=True(raw ADC counts); set to the physical unit (voltages) only afterto_physical()or when data is already in physical unitsLead.is_rawis now auto-detected — parsers no longer hardcodeis_raw=True; insteadis_raw = not (resolution == 1.0 and offset == 0.0)
New features¶
Automatic ADC-to-physical scaling —
FileParser.parse(auto_scale=True)(default) converts raw ADC samples to mV viato_physical()+convert_units("mV"). Disable withauto_scale=FalseLead.to_physical()— converts raw ADC samples usingphysical = samples × resolution + offsetLead.convert_units(target)— converts between voltage units (uV, mV, V)ECGRecord.to_physical()/ECGRecord.convert_units(target)— batch conversion for all leads and median beatsFileParser.supported_formats()— returns format metadata for all 12 parsersECGRecord.__repr__()andECGRecord.plot()— YAML-style console display and quick plottingMulti-lead numpy array support —
plot_leads,plot_12lead,iplot_leads,iplot_12leadaccept raw numpy arrays withfs=parameterLeadsLiketype alias — for multi-lead inputs (list of Lead, ECGRecord, 2D array, list of arrays)
New Lead fields¶
resolution_unit— unit of the resolution scale factor (e.g."uV","mV"); what samples will be in afterto_physical()adc_resolution— original ADC resolution as stored in the source file (e.g.153.0for 153 nV/count in ISHNE)adc_resolution_unit— unit ofadc_resolutionas defined by the format (e.g."nV"for ISHNE and SCP-ECG)
Improvements¶
Simplified multi-lead plots: full signal by default with configurable
rows/colsgrid layoutplot_12leadandiplot_12leadassign standard 12-lead names to unnamed inputsStatic plots no longer force matplotlib Agg backend
Full Changelog: https://github.com/UMMISCO/ECGDataKit/commits/v0.0.9
v0.0.8 - Visualization¶
Released 2026-03-03 · View on GitHub
Visualization¶
Multi-lead plotting functions (
plot_leads,plot_12lead,plot_quality,iplot_leads,iplot_12lead) now accept raw numpy arrays directly withfs=parameter — pass a 2D array (n_leads × n_samples) or a list of 1D arrays alongside the sample rateNew
LeadsLiketype alias for multi-lead inputs:list[Lead] | ECGRecord | NDArray | list[NDArray]Static plots no longer force the
Aggbackend — plots display inline in Jupyter and GUI environments by default
Full Changelog: https://github.com/UMMISCO/ECGDataKit/commits/v0.0.8
v0.0.7 - Signal Characteristics, Flexible Inputs & Sphinx Docs¶
Released 2026-03-02 · View on GitHub
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_signeddata_encoding(e.g.base64_int16le,format_212,int16)compression(e.g.none,huffman)number_channels_allocated/number_channels_validelectrode_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