
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "auto_examples/input_output/plot_write_dicom.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. note::
        :class: sphx-glr-download-link-note

        :ref:`Go to the end <sphx_glr_download_auto_examples_input_output_plot_write_dicom.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_auto_examples_input_output_plot_write_dicom.py:


================
Write DICOM data
================

This example shows how to write a DICOM file from scratch using pydicom. This
example does not produce a DICOM standards compliant file as written, you will
have to change UIDs to valid values and add all required DICOM data elements.

.. GENERATED FROM PYTHON SOURCE LINES 11-78




.. rst-class:: sphx-glr-script-out

 .. code-block:: none

    Setting file meta information...
    Setting dataset values...
    Writing test file /tmp/tmpeitiua8v.dcm
    File saved.
    Writing test file as Big Endian Explicit VR /tmp/tmp_d6aintz.dcm
    Load file /tmp/tmpeitiua8v.dcm ...
    Dataset.file_meta -------------------------------
    (0002, 0002) Media Storage SOP Class UID         UI: CT Image Storage
    (0002, 0003) Media Storage SOP Instance UID      UI: 1.2.3
    (0002, 0012) Implementation Class UID            UI: 1.2.3.4
    -------------------------------------------------
    (0008, 0023) Content Date                        DA: '20251219'
    (0008, 0033) Content Time                        TM: '174421.151367'
    (0010, 0010) Patient's Name                      PN: 'Test^Firstname'
    (0010, 0020) Patient ID                          LO: '123456'
    Remove file /tmp/tmpeitiua8v.dcm ...
    Load file /tmp/tmp_d6aintz.dcm ...
    Dataset.file_meta -------------------------------
    (0002, 0002) Media Storage SOP Class UID         UI: CT Image Storage
    (0002, 0003) Media Storage SOP Instance UID      UI: 1.2.3
    (0002, 0010) Transfer Syntax UID                 UI: Explicit VR Big Endian
    (0002, 0012) Implementation Class UID            UI: 1.2.3.4
    -------------------------------------------------
    (0008, 0023) Content Date                        DA: '20251219'
    (0008, 0033) Content Time                        TM: '174421.151367'
    (0010, 0010) Patient's Name                      PN: 'Test^Firstname'
    (0010, 0020) Patient ID                          LO: '123456'
    Remove file /tmp/tmp_d6aintz.dcm ...






|

.. code-block:: Python


    # authors : Guillaume Lemaitre <g.lemaitre58@gmail.com>
    # license : MIT

    import datetime
    import os
    import tempfile

    import pydicom
    from pydicom.dataset import FileDataset, FileMetaDataset
    from pydicom.uid import UID

    # Create some temporary filenames
    suffix = '.dcm'
    filename_little_endian = tempfile.NamedTemporaryFile(suffix=suffix).name
    filename_big_endian = tempfile.NamedTemporaryFile(suffix=suffix).name

    print("Setting file meta information...")
    # Populate required values for file meta information
    file_meta = FileMetaDataset()
    file_meta.MediaStorageSOPClassUID = UID('1.2.840.10008.5.1.4.1.1.2')
    file_meta.MediaStorageSOPInstanceUID = UID("1.2.3")
    file_meta.ImplementationClassUID = UID("1.2.3.4")

    print("Setting dataset values...")
    # Create the FileDataset instance (initially no data elements, but file_meta
    # supplied)
    ds = FileDataset(filename_little_endian, {},
                     file_meta=file_meta, preamble=b"\0" * 128)

    # Add the data elements -- not trying to set all required here. Check DICOM
    # standard
    ds.PatientName = "Test^Firstname"
    ds.PatientID = "123456"

    # Set the transfer syntax
    ds.is_little_endian = True
    ds.is_implicit_VR = True

    # Set creation date/time
    dt = datetime.datetime.now()
    ds.ContentDate = dt.strftime('%Y%m%d')
    timeStr = dt.strftime('%H%M%S.%f')  # long format with micro seconds
    ds.ContentTime = timeStr

    print("Writing test file", filename_little_endian)
    ds.save_as(filename_little_endian)
    print("File saved.")

    # Write as a different transfer syntax XXX shouldn't need this but pydicom
    # 0.9.5 bug not recognizing transfer syntax
    ds.file_meta.TransferSyntaxUID = pydicom.uid.ExplicitVRBigEndian
    ds.is_little_endian = False
    ds.is_implicit_VR = False

    print("Writing test file as Big Endian Explicit VR", filename_big_endian)
    ds.save_as(filename_big_endian)

    # reopen the data just for checking
    for filename in (filename_little_endian, filename_big_endian):
        print('Load file {} ...'.format(filename))
        ds = pydicom.dcmread(filename)
        print(ds)

        # remove the created file
        print('Remove file {} ...'.format(filename))
        os.remove(filename)


.. rst-class:: sphx-glr-timing

   **Total running time of the script:** (0 minutes 0.004 seconds)


.. _sphx_glr_download_auto_examples_input_output_plot_write_dicom.py:

.. only:: html

  .. container:: sphx-glr-footer sphx-glr-footer-example

    .. container:: sphx-glr-download sphx-glr-download-jupyter

      :download:`Download Jupyter notebook: plot_write_dicom.ipynb <plot_write_dicom.ipynb>`

    .. container:: sphx-glr-download sphx-glr-download-python

      :download:`Download Python source code: plot_write_dicom.py <plot_write_dicom.py>`

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: plot_write_dicom.zip <plot_write_dicom.zip>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
