Skip to main content

Generate pydicom datasets and data elements for use in testing

Project description

dicomgenerator

CI PyPI PyPI - Python Version Code style: black Checked with mypy

Generate pydicom datasets and data elements for use in testing.

  • Free software: MIT license
  • Status: Alpha. Tests run but there are loose ends

Features

  • Extends factory-boy factories to produce pydicom Datasets and DicomElements
  • Generate valid DICOM values for person name, time, date, and UID
  • Create json-based editable templates from any dicom file
  • quick_dataset(): single-line pydicom dataset init

Installation

Install with pip::

pip install dicomgenerator

Usage

Quick dataset

I have found this quite useful in testing:

    from dicomgenerator.generators import quick_dataset
    ds = quick_dataset(PatientName='Jane', StudyDescription='Test')

    # >>> ds.PatientName -> 'Jane'     
    # >>> ds.StudyDescription -> 'Test'

Generating a dataset

Generate a realistic CT dataset

    from dicomgenerator.templates import CTDatasetFactory

    # Generate from template
    >>> CTDatasetFactory().PatientName -> 'van Haarlem^Anouk'  #  generated random name
    >>> CTDatasetFactory().PatientName -> 'Loreal^Casper'      #  generated random name

    # Overwrite arbitrary DICOM elements
    ds.CTDatasetFactory(PatientSex='M', PatientName='Smith^Harry')
    >>> ds.PatientName -> 'Smith^Harry'
    >>> ds.PatientSex  -> 'M'

    # generated UIDs and dates are valid DICOM
    >>> CTDatasetFactory().StudyTime        -> '130624.929'
    >>> CTDatasetFactory().StudyDate        -> '20110508'
    >>> CTDatasetFactory().StudyInstanceUID -> '1.2.826.0.1.3680'

Generating a data element

    # import
    from dicomgenerator.templates import DataElementFactory

    # Creating a DICOM data element by name will give a realistic value and correct VR
    >>> DataElementFactory(tag='PatientName').value -> "van Ooyen^Fiene"
    >>> DataElementFactory(tag='PatientName').VR -> 'PN'

    # You can also give DICOM tags as hex
    >>> DataElementFactory(tag=0x00100010).value -> "Weil^Jack"

    # Dates, times and UIDs all work.
    >>> DataElementFactory(tag="AcquisitionTime").value   -> '184146.928'
    >>> DataElementFactory(tag="PatientBirthDate").value  -> '20120511'
    >>> DataElementFactory(tag="SeriesInstanceUID").value -> '1.2.826.0.1.3680'

In reproducible tests

You can set the random seed in factory-boy like this:

    from factory import random

    def test_one:
        """The random patient name in this test will always be the same"""
        random.reseed_random('any string you want')
        assert element = DataElementFactory(tag='PatientName').value == "van Ooyen^Fiene"

Command Line Interface

You can convert a DICOM file to AnnotatedDataset via the commandline. by default this will write an annotated dataset to the same folder, appending_template.json

$ dicomgen convert to-json /tmp/dicom_file
$ ls
dicom_file  dicom_file_template.json

For options, use

$ dicomgen convert to-json --help

Credits

This package was originally created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

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

dicomgenerator-0.13.0.tar.gz (99.3 kB view details)

Uploaded Source

Built Distribution

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

dicomgenerator-0.13.0-py3-none-any.whl (102.6 kB view details)

Uploaded Python 3

File details

Details for the file dicomgenerator-0.13.0.tar.gz.

File metadata

  • Download URL: dicomgenerator-0.13.0.tar.gz
  • Upload date:
  • Size: 99.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dicomgenerator-0.13.0.tar.gz
Algorithm Hash digest
SHA256 4f5f4156d3ff690877d71d35931870b162cde61f9663b68d0adc540f6482b761
MD5 8230a22229b6f125c7e8e5bfd1035d37
BLAKE2b-256 62631ab988527e75ac4cd8c2765b7d33970214919caeea846f1eccbcad521ef1

See more details on using hashes here.

File details

Details for the file dicomgenerator-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: dicomgenerator-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 102.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.18 {"installer":{"name":"uv","version":"0.11.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dicomgenerator-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5e7fe680592fbd1e3299e7e6791239da032b5e60cdcb6091b740cbf940938e37
MD5 e7357cafd1178c489f15d17334ed640e
BLAKE2b-256 02f68c1a7a68e45b0f0ac04e61c80966f3016278882267ae6106a0b9763d5d18

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