Skip to main content

Python-based solution for converting ECG data from XML format to the DICOM(Digital Imaging and Communications in Medicine) format

Project description

XML2DCM-ECG

Description

This repository contains a Python-based solution for converting ECG data from XML format to the DICOM (Digital Imaging and Communications in Medicine) format. The goal of this project is to facilitate the process of transforming clinical ECG data stored in XML files into a standardized, widely-used DICOM format, which is essential for healthcare systems, medical imaging devices, and Electronic Health Record (EHR) systems.

The solution handles the extraction and conversion of ECG information, including patient details, acquisition context, and waveform data, from XML files into the DICOM format. The project also integrates essential metadata such as the type of ECG lead (e.g., Lead I, Lead II), device information (e.g., acquisition device, software versions), and patient demographics.

Installation

You can install XML2DCM-ECG directly from PyPI:

pip install XML2DCM-ECG

Alternatively, you can use uv, a faster Python package manager with built-in script runner:

pip install uv

Usage

After installation, you can run the ECG XML-to-DICOM converter using either of the following methods.

1. Using standard CLI command

Run the following command:

   xml2dcm-ecg --debug True --debug_n 5 --project_root /path/to/project --data_root /path/to/data --ecg_xml_dir /path/to/xml_files --output_dir /path/to/save_dicom --filename_pattern "MUSE_(?P<examination_date>\d{8})_(\d{6})_(\d{5})" --out_filename_pattern "ECG_DICOM_{examination_date}_{seq}" 

2. Using uvx for fast execution

With uv installed, you can use uvx for faster execution:

   uvx xml2dcm-ecg --debug True --debug_n 5 --project_root /path/to/project --data_root /path/to/data --ecg_xml_dir /path/to/xml_files --output_dir /path/to/save_dicom --filename_pattern "MUSE_(?P<examination_date>\d{8})_(\d{6})_(\d{5})" --out_filename_pattern "ECG_DICOM_{examination_date}_{seq}"

CLI Options

Argument Type Required Default Description
--debug bool No False Enable debug mode to process a limited number of files
--debug_n int No 5 Number of files to process when debug is enabled
--project_root str Yes Root directory of the project
--data_root str Yes Root path for input data
--ecg_xml_dir str Yes Relative path to the directory containing ECG XML files
--output_dir str No ecg_dcm Directory (under project_root) where converted DICOM files will be saved
--filename_pattern str Yes Regex pattern to extract metadata from filenames
--out_filename_pattern str Yes Format for naming output DICOM files using named groups from the regex

Pattern Requirements

To ensure consistent anonymization and file management, the following pattern requirements must be satisfied.

  1. Filename Pattern (--filename_pattern)

    • Must include a named group that extracts a date value from the XML filename.
      Example: (?P<examination_date>\d{8})
    • The ECG XML files must have filenames that contain this date value, so the pattern can correctly extract it.
  2. Output Filename Pattern (--out_filename_pattern)

    • Must contain:
      • Exactly one date-related key (e.g., {examination_date})
      • A sequence number key (e.g., {seq}) to differentiate multiple files with the same date

This is crucial for maintaining uniqueness among converted DICOM files, especially when multiple ECGs share the same date.

If seq is not included in the --out_filename_pattern, a warning will be printed and _{seq} will be automatically appended to ensure file uniqueness:

Warning: No sequence number in output filename pattern. Sequence numbers will not be used to differentiate files with the same date.
Add "seq" to the output filename pattern to enable sequence differentiation.

If more than one {...date...} key is found in the output filename pattern, the script will raise an error to enforce a single date field:

AssertionError: Expected one date key in the output filename pattern, found 2.

Make sure that:

  • Your --filename_pattern includes the group(s) matching the required keys (e.g., (?P<examination_date>...))
  • Your ECG XML filenames include a date string that matches this pattern
  • Your --out_filename_pattern uses the same group names as placeholders (e.g., {examination_date}, {seq})

Example

  • Input filename: MUSE_20250711_153012_00001.xml
  • Extracted:
    • examination_date = 20250711
  • Output filename: ECG_DICOM_20250711_00001.dcm

Example results

The following are examples of the ECG data converted from XML to DICOM format: ecg_dicom.png

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xml2dcm_ecg-1.1.10.tar.gz (16.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

xml2dcm_ecg-1.1.10-py3-none-any.whl (16.8 kB view details)

Uploaded Python 3

File details

Details for the file xml2dcm_ecg-1.1.10.tar.gz.

File metadata

  • Download URL: xml2dcm_ecg-1.1.10.tar.gz
  • Upload date:
  • Size: 16.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for xml2dcm_ecg-1.1.10.tar.gz
Algorithm Hash digest
SHA256 3149a1fbc3ba1a481453608ce93af5bc59dc959960cc28a0f22a3041f585fb97
MD5 0bf846acdae12d3662f36147e02e6856
BLAKE2b-256 0057e1424849bb56d01fd529e2570f0a096b6cf4930b9ced443830a6b501620f

See more details on using hashes here.

File details

Details for the file xml2dcm_ecg-1.1.10-py3-none-any.whl.

File metadata

  • Download URL: xml2dcm_ecg-1.1.10-py3-none-any.whl
  • Upload date:
  • Size: 16.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.16

File hashes

Hashes for xml2dcm_ecg-1.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 6c320f3eba91cf8094f54c1762c0f960af74a3208ad4182e2296811a00cbc4a0
MD5 038430ffb8baee9eb920127eada83dc8
BLAKE2b-256 cde50c464536b2f2786b16e39bffeff47571142dfa5d5bd9e85099a0b50dcf6e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page