diff -Nru pydicom-0.9.8/debian/changelog pydicom-0.9.9/debian/changelog --- pydicom-0.9.8/debian/changelog 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/changelog 2015-09-05 06:12:48.000000000 +0000 @@ -1,3 +1,24 @@ +pydicom (0.9.9-2) unstable; urgency=medium + + * Update maintainer email. + * Bump standards version to 3.9.6; no changes necessary. + * CME-base automatic modernization of debian/control. + * Switch to debhelper 9. + * Build python3 package. + * Build documentation and ship it in a -doc package. + + -- Michael Hanke Sat, 05 Sep 2015 07:38:24 +0200 + +pydicom (0.9.9-1) experimental; urgency=medium + + * Fresh upstream release + - project moved to new website (pydicom.org) and source code hosting + (Git and github.com), so urls and watch file were adjusted accordingly + * debian/rules + - sources are now under source/ + + -- Yaroslav Halchenko Fri, 16 Jan 2015 23:28:46 -0500 + pydicom (0.9.8-1) unstable; urgency=medium * Fresh upstream release diff -Nru pydicom-0.9.8/debian/compat pydicom-0.9.9/debian/compat --- pydicom-0.9.8/debian/compat 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/compat 2015-09-05 05:52:37.000000000 +0000 @@ -1 +1 @@ -7 +9 diff -Nru pydicom-0.9.8/debian/control pydicom-0.9.9/debian/control --- pydicom-0.9.8/debian/control 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/control 2015-09-05 06:12:35.000000000 +0000 @@ -1,21 +1,50 @@ Source: pydicom +Maintainer: NeuroDebian Team +Uploaders: Yaroslav Halchenko , + Michael Hanke Section: python Priority: optional -Maintainer: NeuroDebian Team -Uploaders: Yaroslav Halchenko , Michael Hanke -Build-Depends: debhelper (>= 7.0.50~), python-all (>= 2.6.6-3~), python-setuptools(>= 0.6), python-numpy +Build-Depends: debhelper (>= 9~), + python-all, + python3-all, + python-setuptools, + python3-setuptools, + python-numpy, + python-docutils, + python-sphinx | python3-sphinx +Standards-Version: 3.9.6 +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-exppsy/pydicom.git +Vcs-Git: git://anonscm.debian.org/pkg-exppsy/pydicom.git +Homepage: http://pydicom.org/ X-Python-Version: >= 2.6 -Standards-Version: 3.9.3 -Homepage: http://code.google.com/p/pydicom/ -XS-Vcs-Git: git://git.debian.org/git/pkg-exppsy/pydicom.git -XS-Vcs-Browser: http://git.debian.org/?p=pkg-exppsy/pydicom.git +X-Python3-Version: >= 3.0 Package: python-dicom Architecture: all -Depends: ${python:Depends}, ${misc:Depends} -Recommends: python-numpy, python-imaging +Depends: ${python:Depends}, + ${misc:Depends} +Recommends: python-numpy, + python-imaging Suggests: python-matplotlib -Description: DICOM medical file reading and writing +Description: DICOM medical file reading and writing (Python 2) + pydicom is a pure Python module for parsing DICOM files. DICOM is a + standard (http://medical.nema.org) for communicating medical images + and related information such as reports and radiotherapy objects. + . + pydicom makes it easy to read DICOM files into natural pythonic + structures for easy manipulation. Modified datasets can be written + again to DICOM format files. + . + This package installs the module for Python 2. + +Package: python3-dicom +Architecture: all +Depends: ${python3:Depends}, + ${misc:Depends} +Recommends: python3-numpy, + python3-imaging +Suggests: python3-matplotlib +Description: DICOM medical file reading and writing (Python 3) pydicom is a pure Python module for parsing DICOM files. DICOM is a standard (http://medical.nema.org) for communicating medical images and related information such as reports and radiotherapy objects. @@ -23,3 +52,21 @@ pydicom makes it easy to read DICOM files into natural pythonic structures for easy manipulation. Modified datasets can be written again to DICOM format files. + . + This package installs the module for Python 3. + +Package: python-dicom-doc +Architecture: all +Section: doc +Depends: ${sphinxdoc:Depends}, + ${misc:Depends} +Description: DICOM medical file reading and writing (documentation) + pydicom is a pure Python module for parsing DICOM files. DICOM is a + standard (http://medical.nema.org) for communicating medical images + and related information such as reports and radiotherapy objects. + . + pydicom makes it easy to read DICOM files into natural pythonic + structures for easy manipulation. Modified datasets can be written + again to DICOM format files. + . + This package contains the documentation. diff -Nru pydicom-0.9.8/debian/copyright pydicom-0.9.9/debian/copyright --- pydicom-0.9.8/debian/copyright 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/copyright 2015-09-05 05:37:34.000000000 +0000 @@ -1,12 +1,12 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: pydicom Upstream-Contact: Darcy Mason -Source: http://code.google.com/p/pydicom/source +Source: https://github.com/darcymason/pydicom Disclaimer: dicom/_private_dict.py mentioned below is autogenerated from data maintained by GDCM project, thus license terms below. Files: * -Copyright: 2008-2012, Darcy Mason and pydicom contributors +Copyright: 2008-2015, Darcy Mason and pydicom contributors License: Expat @@ -45,7 +45,7 @@ Files: debian/* -Copyright: 2010-2012, NeuroDebian Team +Copyright: 2010-2015, NeuroDebian Team License: Expat License: Expat diff -Nru pydicom-0.9.8/debian/patches/changeset_d8bd28c7810f97af45f234b1016be31ca2d42382.diff pydicom-0.9.9/debian/patches/changeset_d8bd28c7810f97af45f234b1016be31ca2d42382.diff --- pydicom-0.9.8/debian/patches/changeset_d8bd28c7810f97af45f234b1016be31ca2d42382.diff 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/debian/patches/changeset_d8bd28c7810f97af45f234b1016be31ca2d42382.diff 2015-09-05 05:37:34.000000000 +0000 @@ -0,0 +1,33 @@ +commit d8bd28c7810f97af45f234b1016be31ca2d42382 +Author: Yaroslav Halchenko +Date: Sat Jan 17 00:15:48 2015 -0500 + + BF: do not force unicode names when not supported + +diff --git a/source/dicom/test/test_unicode.py b/source/dicom/test/test_unicode.py +index 2ea2dfa..05d4af3 100644 +--- a/source/dicom/test/test_unicode.py ++++ b/source/dicom/test/test_unicode.py +@@ -2,6 +2,7 @@ + # -*- coding: utf-8 -*- + + import dicom ++import sys + import unittest + + +@@ -9,6 +10,14 @@ class UnicodeFilenames(unittest.TestCase): + def testRead(self): + """Unicode: Can read a file with unicode characters in name................""" + uni_name = u'test°' ++ ++ # verify first that we could encode file name in this environment ++ try: ++ _ = uni_name.encode(sys.getfilesystemencoding()) ++ except UnicodeEncodeError: ++ print("SKIP: Environment doesn't support unicode filenames") ++ return ++ + try: + dicom.read_file(uni_name) + except UnicodeEncodeError: diff -Nru pydicom-0.9.8/debian/patches/distribute.patch pydicom-0.9.9/debian/patches/distribute.patch --- pydicom-0.9.8/debian/patches/distribute.patch 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/patches/distribute.patch 2015-09-05 05:37:34.000000000 +0000 @@ -3,8 +3,8 @@ Bug-Debian: http://bugs.debian.org/733439 Last-Update: 2014-02-05 ---- pydicom-0.9.7.orig/setup.py -+++ pydicom-0.9.7/setup.py +--- pydicom-0.9.7.orig/source/setup.py ++++ pydicom-0.9.7/source/setup.py @@ -1,6 +1,4 @@ #!/usr/bin/env python -from distribute_setup import use_setuptools diff -Nru pydicom-0.9.8/debian/patches/series pydicom-0.9.9/debian/patches/series --- pydicom-0.9.8/debian/patches/series 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/patches/series 2015-09-05 05:37:34.000000000 +0000 @@ -1 +1 @@ -distribute.patch +changeset_d8bd28c7810f97af45f234b1016be31ca2d42382.diff diff -Nru pydicom-0.9.8/debian/python-dicom-doc.docs pydicom-0.9.9/debian/python-dicom-doc.docs --- pydicom-0.9.8/debian/python-dicom-doc.docs 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/debian/python-dicom-doc.docs 2015-09-05 06:06:01.000000000 +0000 @@ -0,0 +1 @@ +build/html diff -Nru pydicom-0.9.8/debian/README.source pydicom-0.9.9/debian/README.source --- pydicom-0.9.8/debian/README.source 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/README.source 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -pydicom for Debian ------------------- - -Sources of this package generated directly from git repository which was -obtained from original mercurial repository hosted at google codes. This is -done to ease cherry picking of bugfixes and provide users (and -debcheckout-ers) with actual sources, not source distribution. - -To convert hg to git repository following project was used: -git://repo.or.cz/fast-export.git - -Command was: -fast-export/hg-fast-export.sh -r ../pydicom-hg - - -- Yaroslav Halchenko , Wed, 14 Jul 2010 22:40:18 -0400 diff -Nru pydicom-0.9.8/debian/rules pydicom-0.9.9/debian/rules --- pydicom-0.9.8/debian/rules 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/rules 2015-09-05 06:04:56.000000000 +0000 @@ -1,14 +1,26 @@ #!/usr/bin/make -f # -*- makefile -*- +export DH_VERBOSE = 1 +export PYBUILD_NAME = dicom + +PYS = $(shell pyversions -r) +export http_proxy=http://127.0.0.1:9/ +export https_proxy=http://127.0.0.1:9/ + %: - dh $@ --buildsystem=python_distutils --with python2 + dh $@ --buildsystem=pybuild --with python2,python3,sphinxdoc --sourcedirectory=source + +override_dh_auto_build: + dh_auto_build + PYTHONPATH=source sphinx-build -N -bhtml docs/ build/html override_dh_clean: dh_clean - rm -rf .pydistutils.cfg + rm -rf .pydistutils.cfg build -override_dh_auto_test: - for PYTHON in `pyversions -r`; do \ - $$PYTHON setup.py test || exit 1; \ - done +#override_dh_auto_test: +# cd source; \ +# for PYTHON in $(PYS); do \ +# $$PYTHON setup.py test || exit 1; \ +# done diff -Nru pydicom-0.9.8/debian/watch pydicom-0.9.9/debian/watch --- pydicom-0.9.8/debian/watch 2014-03-20 23:38:33.000000000 +0000 +++ pydicom-0.9.9/debian/watch 2015-09-05 05:37:34.000000000 +0000 @@ -1,3 +1,3 @@ version=3 -opts="uversionmangle=s/-/./g,uversionmangle=s/rc/~rc/g" \ -http://code.google.com/p/pydicom/downloads/list?can=1 .*/pydicom-(\d[\d.]*)\.tar\.gz +opts="dversionmangle=s/\+ds\d*//,filenamemangle=s/.*\/(.*)/pydicom-$1\.tar\.gz/" \ + http://github.com/darcymason/pydicom/tags .*archive/v(\d[\d\.a-z]+).tar.gz diff -Nru pydicom-0.9.8/dicom/charset.py pydicom-0.9.9/dicom/charset.py --- pydicom-0.9.8/dicom/charset.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/charset.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,134 +0,0 @@ -# charset.py -"""Handle alternate character sets for character strings.""" -# -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# - -import logging -logger = logging.getLogger('pydicom') -from dicom.valuerep import PersonNameUnicode, text_VRs -from dicom import in_py3 - -# Map DICOM Specific Character Set to python equivalent -python_encoding = { - '': 'iso8859', # default character set for DICOM - 'ISO_IR 6': 'iso8859', # alias for latin_1 too - 'ISO_IR 100': 'latin_1', - 'ISO 2022 IR 87': 'iso2022_jp', - 'ISO 2022 IR 13': 'shift_jis', - 'ISO 2022 IR 149': 'euc_kr', # needs cleanup via clean_escseq() - 'ISO_IR 192': 'UTF8', # from Chinese example, 2008 PS3.5 Annex J p1-4 - 'GB18030': 'GB18030', - 'ISO_IR 126': 'iso_ir_126', # Greek - 'ISO_IR 127': 'iso_ir_127', # Arab - 'ISO_IR 138': 'iso_ir_138', # Hebrew - 'ISO_IR 144': 'iso_ir_144', # Russian - } - -default_encoding = "iso8859" - - -def clean_escseq(element, encodings): - """Remove escape sequences that Python does not remove from - Korean encoding ISO 2022 IR 149 due to the G1 code element. - """ - if 'euc_kr' in encodings: - return element.replace( - "\x1b\x24\x29\x43", "").replace("\x1b\x28\x42", "") - else: - return element - -# DICOM PS3.5-2008 6.1.1 (p 18) says: -# default is ISO-IR 6 G0, equiv to common chr set of ISO 8859 (PS3.5 6.1.2.1) -# (0008,0005) value 1 can *replace* the default encoding... -# for VRs of SH, LO, ST, LT, PN and UT (PS3.5 6.1.2.3)... -# with a single-byte character encoding -# if (0008,0005) is multi-valued, then value 1 (or default if blank)... -# is used until code extension escape sequence is hit, -# which can be at start of string, or after CR/LF, FF, or -# in Person Name PN, after ^ or = -# NOTE also that 7.5.3 SEQUENCE INHERITANCE states that if (0008,0005) -# is not present in a sequence item then it is inherited from its parent. - - -def convert_encodings(encodings): - """Converts DICOM encodings into corresponding python encodings""" - - # If a list if passed, we don't want to modify the list in place so copy it - encodings = encodings[:] - - if isinstance(encodings, basestring): - encodings = [encodings] - elif not encodings[0]: - encodings[0] = 'ISO_IR 6' - - try: - encodings = [python_encoding[x] for x in encodings] - except KeyError: # Assume that it is already the python encoding (is there a way to check this?) - pass - - if len(encodings) == 1: - encodings = [encodings[0]] * 3 - elif len(encodings) == 2: - encodings.append(encodings[1]) - - return encodings - - -def decode(data_element, dicom_character_set): - """Apply the DICOM character encoding to the data element - - data_element -- DataElement instance containing a value to convert - dicom_character_set -- the value of Specific Character Set (0008,0005), - which may be a single value, - a multiple value (code extension), or - may also be '' or None. - If blank or None, ISO_IR 6 is used. - - """ - if not dicom_character_set: - dicom_character_set = ['ISO_IR 6'] - - encodings = convert_encodings(dicom_character_set) - - # decode the string value to unicode - # PN is special case as may have 3 components with differenct chr sets - if data_element.VR == "PN": - # logger.warn("%s ... type: %s" %(str(data_element), type(data_element.VR))) - if in_py3: - if data_element.VM == 1: - data_element.value = data_element.value.decode(encodings) - else: - data_element.value = [val.decode(encodings) for val in data_element.value] - else: - if data_element.VM == 1: - data_element.value = PersonNameUnicode(data_element.value, encodings) - else: - data_element.value = [PersonNameUnicode(value, encodings) - for value in data_element.value] - if data_element.VR in text_VRs: - # Remove the first encoding if this is a multi-byte encoding - if len(encodings) > 1: - del encodings[0] - - # You can't re-decode unicode (string literals in py3) - if data_element.VM == 1: - if isinstance(data_element.value, unicode): - return - data_element.value = clean_escseq( - data_element.value.decode( - encodings[0]), encodings) - else: - - output = list() - - for value in data_element.value: - if isinstance(value, unicode): - output.append(value) - else: - output.append(clean_escseq(value.decode(encodings[0]), encodings)) - - data_element.value = output diff -Nru pydicom-0.9.8/dicom/config.py pydicom-0.9.9/dicom/config.py --- pydicom-0.9.8/dicom/config.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/config.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -# config.py -"""Pydicom configuration options.""" -# Copyright (c) 2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -# doc strings following items are picked up by sphinx for documentation - -# Set the type used to hold DS values - -use_DS_decimal = False # default False; was decimal-based in pydicom 0.9.7 - - -def DS_decimal(use_Decimal_boolean=True): - """Set DS class to be derived from Decimal (True) or from float (False) - If this function is never called, the default in pydicom >= 0.9.8 - is for DS to be based on float. - """ - use_DS_decimal = use_Decimal_boolean - import dicom.valuerep - if use_DS_decimal: - dicom.valuerep.DSclass = dicom.valuerep.DSdecimal - else: - dicom.valuerep.DSclass = dicom.valuerep.DSfloat - - -allow_DS_float = False -"""Set allow_float to True to allow DSdecimal instances to be created with floats; -otherwise, they must be explicitly converted to strings, with the user -explicity setting the precision of digits and rounding. Default: False""" - -enforce_valid_values = True -"""Raise errors if any value is not allowed by DICOM standard, e.g. DS strings -that are longer than 16 characters; IS strings outside the allowed range. -""" diff -Nru pydicom-0.9.8/dicom/contrib/dcm_qt_tree.py pydicom-0.9.9/dicom/contrib/dcm_qt_tree.py --- pydicom-0.9.8/dicom/contrib/dcm_qt_tree.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/dcm_qt_tree.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,100 +0,0 @@ -# dcm_qt_tree.py -"""View DICOM files in a tree using Qt and PySide""" -# Copyright (c) 2013 Padraig Looney -# This file is released under the pydicom (http://code.google.com/p/pydicom/) -# license, see the file license.txt available at -# (http://code.google.com/p/pydicom/) - -import dicom -import sys -from PySide import QtGui, QtCore - - -class DicomTree: - - def __init__(self, filename): - self.filename = filename - - def show_tree(self): - ds = self.dicom_to_dataset(self.filename) - dic = self.dataset_to_dic(ds) - model = self.dic_to_model(dic) - self.display(model) - - def array_to_model(self, array): - model = QtGui.QStandardItemModel() - parentItem = model.invisibleRootItem() - for ntuple in array: - tag = ntuple[0] - value = ntuple[1] - if isinstance(value, dict): - self.recurse_dic_to_item(value, parentItem) - else: - item = QtGui.QStandardItem(tag + str(value)) - parent.appendRow(item) - - def dic_to_model(self, dic): - model = QtGui.QStandardItemModel() - parentItem = model.invisibleRootItem() - self.recurse_dic_to_item(dic, parentItem) - return model - - def dataset_to_array(self, dataset): - array = [] - for data_element in dataset: - array.append(self.data_element_to_dic(data_element)) - return array - - def recurse_dic_to_item(self, dic, parent): - for k in sorted(dic): - v = dic[k] - if isinstance(v, dict): - item = QtGui.QStandardItem(k + ':' + str(v)) - parent.appendRow(self.recurse_dic_to_item(v, item)) - else: - item = QtGui.QStandardItem(k + ': ' + str(v)) - parent.appendRow(item) - return parent - - def dicom_to_dataset(self, filename): - dataset = dicom.read_file(filename, force=True) - return dataset - - def data_element_to_dic(self, data_element): - dic = {} - if data_element.VR == "SQ": - items = {} - dic[data_element.name] = items - i = 0 - for dataset_item in data_element: - items['item ' + str(i)] = self.dataset_to_dic(dataset_item) - i += 1 - elif data_element.name != 'Pixel Data': - dic[data_element.name] = data_element.value - return dic - - def dataset_to_dic(self, dataset): - dic = {} - for data_element in dataset: - dic.update(self.data_element_to_dic(data_element)) - return dic - - def display(self, model): - # check if QApplication already exists - app = QtGui.QApplication.instance() - if not app: # create QApplication if it doesnt exist - app = QtGui.QApplication(sys.argv) - tree = QtGui.QTreeView() - tree.setModel(model) - tree.show() - app.exec_() - return tree - - -def main(): - filename = sys.argv[1] - dicomTree = DicomTree(filename) - dicomTree.show_tree() - -if __name__ == "__main__": - main() diff -Nru pydicom-0.9.8/dicom/contrib/dicom_dao.py pydicom-0.9.9/dicom/contrib/dicom_dao.py --- pydicom-0.9.8/dicom/contrib/dicom_dao.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/dicom_dao.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,412 +0,0 @@ -#!/usr/bin/python - -""" dicom_dao - -Data Access Objects for persisting PyDicom DataSet objects. - -Currently we support couchdb through the DicomCouch class. - -Limitations: - - Private tags are discarded - -TODO: - - Unit tests with multiple objects open at a time - - Unit tests with rtstruct objects - - Support for mongodb (mongo has more direct support for binary data) - -Dependencies: - - PyDicom - - python-couchdb - - simplejson - -Tested with: - - PyDicom 0.9.4-1 - - python-couchdb 0.6 - - couchdb 0.10.1 - - simplejson 2.0.9 - -""" -# -# Copyright (c) 2010 Michael Wallace -# This file is released under the pydicom license. -# See the file license.txt included with the pydicom distribution, also -# available at http://pydicom.googlecode.com -# - -import hashlib -import os -import string -import simplejson -import couchdb -import dicom - - -def uid2str(uid): - """ Convert PyDicom uid to a string """ - return repr(uid).strip("'") - -# When reading files a VR of 'US or SS' is left as binary, because we -# don't know how to interpret the values different numbers. We therefore -# treat it as binary and will continue to until either pydicom works it out -# for us, or we figure out a test. -BINARY_VR_VALUES = ['OW', 'OB', 'OW/OB', 'US or SS'] - - -class DicomCouch(dict): - """ A Data Access Object for persisting PyDicom objects into CouchDB - - We follow the same pattern as the python-couchdb library for getting and - setting documents, for example storing dicom.dataset.Dataset object dcm: - db = DicomCouch('http://localhost:5984/', 'dbname') - db[dcm.SeriesInstanceUID] = dcm - - The only constraints on the key are that it must be json-serializable and - unique within the database instance. In theory it should be possible to - use any DICOM UID. Unfortunately I have written this code under the - assumption that SeriesInstanceUID will always be used. This will be fixed. - - Retrieving object with key 'foo': - dcm = db['foo'] - - Deleting object with key 'foo': - dcm = db['foo'] - db.delete(dcm) - - TODO: - - It is possible to have couchdb assign a uid when adding objects. This - should be supported. - """ - - def __init__(self, server, db): - """ Create connection to couchdb server/db """ - super(DicomCouch, self).__init__() - self._meta = {} - server = couchdb.Server(server) - try: - self._db = server[db] - except couchdb.client.ResourceNotFound: - self._db = server.create(db) - - def __getitem__(self, key): - """ Retrieve DICOM object with specified SeriesInstanceUID """ - doc = self._db[key] - dcm = json2pydicom(doc) - - if dcm.SeriesInstanceUID not in self._meta: - self._meta[dcm.SeriesInstanceUID] = {} - self._meta[dcm.SeriesInstanceUID]['hashes'] = {} - - if '_attachments' in doc: - self.__get_attachments(dcm, doc) - _set_meta_info_dcm(dcm) - # Keep a copy of the couch doc for use in DELETE operations - self._meta[dcm.SeriesInstanceUID]['doc'] = doc - return dcm - - def __setitem__(self, key, dcm): - """ Write the supplied DICOM object to the database """ - try: - dcm.PixelData = dcm.pixel_array.tostring() - except AttributeError: - pass # Silently ignore errors due to pixel_array not existing - except NotImplementedError: - pass # Silently ignore attempts to modify compressed pixel data - except TypeError: - pass # Silently ignore errors due to PixelData not existing - - jsn, binary_elements, file_meta_binary_elements = pydicom2json(dcm) - _strip_elements(jsn, binary_elements) - _strip_elements(jsn['file_meta'], file_meta_binary_elements) - if dcm.SeriesInstanceUID in self._meta: - self.__set_meta_info_jsn(jsn, dcm) - - try: # Actually write to the db - self._db[key] = jsn - except TypeError as type_error: - if str(type_error) == 'string indices must be integers, not str': - pass - - if dcm.SeriesInstanceUID not in self._meta: - self._meta[dcm.SeriesInstanceUID] = {} - self._meta[dcm.SeriesInstanceUID]['hashes'] = {} - - self.__put_attachments(dcm, binary_elements, jsn) - # Get a local copy of the document - # We get this from couch because we get the _id, _rev and _attachments - # keys which will ensure we don't overwrite the attachments we just - # uploaded. - # I don't really like the extra HTTP GET and I think we can generate - # what we need without doing it. Don't have time to work out how yet. - self._meta[dcm.SeriesInstanceUID]['doc'] = \ - self._db[dcm.SeriesInstanceUID] - - def __str__(self): - """ Return the string representation of the couchdb client """ - return str(self._db) - - def __repr__(self): - """ Return the canonical string representation of the couchdb client """ - return repr(self._db) - - def __get_attachments(self, dcm, doc): - """ Set binary tags by retrieving attachments from couchdb. - - Values are hashed so they are only updated if they have changed. - - """ - for id in doc['_attachments'].keys(): - tagstack = id.split(':') - value = self._db.get_attachment(doc['_id'], id) - _add_element(dcm, tagstack, value) - self._meta[dcm.SeriesInstanceUID]['hashes'][id] = hashlib.md5(value) - - def __put_attachments(self, dcm, binary_elements, jsn): - """ Upload all new and modified attachments """ - elements_to_update = \ - [(tagstack, item) for tagstack, item in binary_elements \ - if self.__attachment_update_needed(\ - dcm, _tagstack2id(tagstack + [item.tag]), item)] - for tagstack, element in elements_to_update: - id = _tagstack2id(tagstack + [element.tag]) - self._db.put_attachment(jsn, element.value, id) - self._meta[dcm.SeriesInstanceUID]['hashes'][id] = \ - hashlib.md5(element.value) - - def delete(self, dcm): - """ Delete from database and remove meta info from the DAO """ - self._db.delete(self._meta[dcm.SeriesInstanceUID]['doc']) - self._meta.pop(dcm.SeriesInstanceUID) - - def __set_meta_info_jsn(self, jsn, dcm): - """ Set the couch-specific meta data for supplied dict """ - jsn['_rev'] = self._meta[dcm.SeriesInstanceUID]['doc']['_rev'] - if '_attachments' in self._meta[dcm.SeriesInstanceUID]['doc']: - jsn['_attachments'] = \ - self._meta[dcm.SeriesInstanceUID]['doc']['_attachments'] - - def __attachment_update_needed(self, dcm, id, binary_element): - """ Compare hashes for binary element and return true if different """ - try: - hashes = self._meta[dcm.SeriesInstanceUID]['hashes'] - except KeyError: - return True # If no hashes dict then attachments do not exist - - if id not in hashes or hashes[id].digest() != \ - hashlib.md5(binary_element.value).digest(): - return True - else: - return False - - -def _add_element(dcm, tagstack, value): - """ Add element with tag, vr and value to dcm at location tagstack """ - current_node = dcm - for item in tagstack[:-1]: - try: - address = int(item) - except ValueError: - address = dicom.tag.Tag(__str2tag(item)) - current_node = current_node[address] - tag = __str2tag(tagstack[-1]) - vr = dicom.datadict.dictionaryVR(tag) - current_node[tag] = dicom.dataelem.DataElement(tag, vr, value) - - -def _tagstack2id(tagstack): - """ Convert a list of tags to a unique (within document) attachment id """ - return string.join([str(tag) for tag in tagstack], ':') - - -def _strip_elements(jsn, elements): - """ Remove supplied elements from the dict object - - We use this with a list of binary elements so that we don't store - empty tags in couchdb when we are already storing the binary data as - attachments. - - """ - for tagstack, element in elements: - if len(tagstack) == 0: - jsn.pop(element.tag) - else: - current_node = jsn - for tag in tagstack: - current_node = current_node[tag] - current_node.pop(element.tag) - - -def _set_meta_info_dcm(dcm): - """ Set the file metadata DataSet attributes - - This is done by PyDicom when we dicom.read_file(foo) but we need to do it - ourselves when creating a DataSet from scratch, otherwise we cannot use - foo.pixel_array or dicom.write_file(foo). - - This code is lifted from PyDicom. - - """ - TransferSyntax = dcm.file_meta.TransferSyntaxUID - if TransferSyntax == dicom.UID.ExplicitVRLittleEndian: - dcm.is_implicit_vr = False - dcm.is_little_endian = True # This line not in PyDicom - elif TransferSyntax == dicom.UID.ImplicitVRLittleEndian: - dcm.is_implicit_vr = True - dcm.is_little_endian = True - elif TransferSyntax == dicom.UID.ExplicitVRBigEndian: - dcm.is_implicit_vr = False - dcm.is_little_endian = False - elif TransferSyntax == dicom.UID.DeflatedExplicitVRLittleEndian: - dcm.is_implicit_vr = False # Deleted lines above as it relates - dcm.is_little_endian = True # to reading compressed file data. - else: - # Any other syntax should be Explicit VR Little Endian, - # e.g. all Encapsulated (JPEG etc) are ExplVR-LE by - # Standard PS 3.5-2008 A.4 (p63) - dcm.is_implicit_vr = False - dcm.is_little_endian = True - - -def pydicom2json(dcm): - """ Convert the supplied PyDicom object into a json-serializable dict - - Binary elements cannot be represented in json so we return these as - as separate list of the tuple (tagstack, element), where: - - element = dicom.dataelem.DataElement - - tagstack = list of tags/sequence IDs that address the element - - The tagstack variable means we know the absolute address of each binary - element. We then use this as the attachment id in couchdb - when we - retrieve the attachment we can then insert it at the appropriate point in - the tree. - - """ - dcm.remove_private_tags() # No support for now - dcm.decode() # Convert to unicode - binary_elements = [] - tagstack = [] - jsn = dict((key, __jsonify(dcm[key], binary_elements, tagstack)) - for key in dcm.keys()) - file_meta_binary_elements = [] - jsn['file_meta'] = dict((key, __jsonify(dcm.file_meta[key], - file_meta_binary_elements, tagstack)) - for key in dcm.file_meta.keys()) - return jsn, binary_elements, file_meta_binary_elements - - -def __jsonify(element, binary_elements, tagstack): - """ Convert key, value to json-serializable types - - Recursive, so if value is key/value pairs then all children will get - converted - - """ - value = element.value - if element.VR in BINARY_VR_VALUES: - binary_elements.append((tagstack[:], element)) - return '' - elif type(value) == list: - new_list = [__typemap(listvalue) for listvalue in value] - return new_list - elif type(value) == dicom.sequence.Sequence: - tagstack.append(element.tag) - nested_data = [] - for i in range(0, len(value)): - tagstack.append(i) - nested_data.append(dict(\ - (subkey, __jsonify(value[i][subkey], binary_elements, tagstack)) - for subkey in value[i].keys())) - tagstack.pop() - tagstack.pop() - return nested_data - else: - return __typemap(value) - - -def __typemap(value): - """ Map PyDicom types that won't serialise to JSON types """ - if type(value) == dicom.UID.UID: - return uid2str(value) - elif isinstance(value, dicom.tag.BaseTag): - return long(value) - else: - return value - - -def json2pydicom(jsn): - """ Convert the supplied json dict into a PyDicom object """ - dataset = dicom.dataset.Dataset() - # Don't try to convert couch specific tags - dicom_keys = [key for key in jsn.keys() \ - if key not in ['_rev', '_id', '_attachments', 'file_meta']] - for key in dicom_keys: - dataset.add(__dicomify(key, jsn[key])) - file_meta = dicom.dataset.Dataset() - for key in jsn['file_meta']: - file_meta.add(__dicomify(key, jsn['file_meta'][key])) - dataset.file_meta = file_meta - return dataset - - -def __dicomify(key, value): - """ Convert a json key, value to a PyDicom DataElement """ - tag = __str2tag(key) - if tag.element == 0: # 0 tag implies group length (filreader.py pydicom) - vr = 'UL' - else: - vr = dicom.datadict.dictionaryVR(tag) - - if vr == 'OW/OB': # Always write pixel data as bytes - vr = 'OB' # rather than words - - if vr == 'US or SS': # US or SS is up to us as the data is already - if value < 0: # decoded. We therefore choose US, unless we - vr = 'SS' # need a signed value. - else: - vr = 'US' - - if vr == 'SQ': # We have a sequence of datasets, so we recurse - return dicom.dataelem.DataElement(tag, vr, - dicom.sequence.Sequence([ - __make_dataset( - [__dicomify(subkey, listvalue[subkey]) - for subkey in listvalue.keys() - ]) - for listvalue in value - ])) - else: - return dicom.dataelem.DataElement(tag, vr, value) - - -def __make_dataset(data_elements): - """ Create a Dataset from a list of DataElement objects """ - dataset = dicom.dataset.Dataset() - for element in data_elements: - dataset.add(element) - return dataset - - -def __str2tag(key): - """ Convert string representation of a tag into a Tag """ - return dicom.tag.Tag((int(key[1:5], 16), int(key[7:-1], 16))) - - -if __name__ == '__main__': - TESTDB = 'dicom_test' - SERVER = 'http://127.0.0.1:5984' - # Delete test database if it already exists - couch = couchdb.Server(SERVER) - try: - couch.delete(TESTDB) - except couchdb.client.ResourceNotFound: - pass # Don't worry if it didn't exist - - db = DicomCouch(SERVER, TESTDB) - - testfiles_dir = '../testfiles' - testfiles = os.listdir('../testfiles') - testfiles = filter(lambda x: x.endswith('dcm'), testfiles) - testfiles = map(lambda x: os.path.join('../testfiles', x), testfiles) - - for dcmfile in testfiles: - dcm = dicom.read_file(dcmfile) - db[dcm.SeriesInstanceUID] = dcm diff -Nru pydicom-0.9.8/dicom/contrib/imViewer_Simple.py pydicom-0.9.9/dicom/contrib/imViewer_Simple.py --- pydicom-0.9.8/dicom/contrib/imViewer_Simple.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/imViewer_Simple.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,295 +0,0 @@ -#========================================================================== -# imViewer-Simple.py -# -# An example program that opens uncompressed DICOM images and -# converts them via numPy and PIL to be viewed in wxWidgets GUI -# apps. The conversion is currently: -# -# pydicom->NumPy->PIL->wxPython.Image->wxPython.Bitmap -# -# Gruesome but it mostly works. Surely there is at least one -# of these steps that could be eliminated (probably PIL) but -# haven't tried that yet and I may want some of the PIL manipulation -# functions. -# -# This won't handle RLE, embedded JPEG-Lossy, JPEG-lossless, -# JPEG2000, old ACR/NEMA files, or anything wierd. Also doesn't -# handle some RGB images that I tried. -# -# Have added Adit Panchal's LUT code. It helps a lot, but needs -# to be further generalized. Added test for window and/or level -# as 'list' type - crude, but it worked for a bunch of old MR and -# CT slices I have. -# -# Testing: minimal -# Tried only on WinXP sp2 using numpy 1.3.0 -# and PIL 1.1.7b1, Python 2.6.4, and wxPython 2.8.10.1 -# -# Dave Witten: Nov. 11, 2009 -#========================================================================== -import os -import os.path -import sys -import dicom -import wx -have_PIL = True -try: - import PIL.Image -except: - have_PIL = False -have_numpy = True -try: - import numpy as np -except: - have_numpy = False - -#---------------------------------------------------------------- -# Initialize image capabilities. -#---------------------------------------------------------------- -wx.InitAllImageHandlers() - - -def MsgDlg(window, string, caption='OFAImage', style=wx.YES_NO | wx.CANCEL): - """Common MessageDialog.""" - dlg = wx.MessageDialog(window, string, caption, style) - result = dlg.ShowModal() - dlg.Destroy() - return result - - -class ImFrame(wx.Frame): - """Class for main window.""" - - def __init__(self, parent, title): - """Create the pydicom image example's main frame window.""" - - wx.Frame.__init__(self, parent, id=-1, title="", pos=wx.DefaultPosition, - size=wx.Size(w=1024, h=768), - style=wx.DEFAULT_FRAME_STYLE | wx.SUNKEN_BORDER | wx.CLIP_CHILDREN) - - #-------------------------------------------------------- - # Set up the menubar. - #-------------------------------------------------------- - self.mainmenu = wx.MenuBar() - - # Make the 'File' menu. - menu = wx.Menu() - item = menu.Append(wx.ID_ANY, '&Open', 'Open file for editing') - self.Bind(wx.EVT_MENU, self.OnFileOpen, item) - item = menu.Append(wx.ID_ANY, 'E&xit', 'Exit Program') - self.Bind(wx.EVT_MENU, self.OnFileExit, item) - self.mainmenu.Append(menu, '&File') - - # Attach the menu bar to the window. - self.SetMenuBar(self.mainmenu) - - #-------------------------------------------------------- - # Set up the main splitter window. - #-------------------------------------------------------- - self.mainSplitter = wx.SplitterWindow(self, style=wx.NO_3D | wx.SP_3D) - self.mainSplitter.SetMinimumPaneSize(1) - - #------------------------------------------------------------- - # Create the folderTreeView on the left. - #------------------------------------------------------------- - self.dsTreeView = wx.TreeCtrl(self.mainSplitter, style=wx.TR_LINES_AT_ROOT | wx.TR_HAS_BUTTONS) - - #-------------------------------------------------------- - # Create the ImageView on the right pane. - #-------------------------------------------------------- - self.imView = wx.Panel(self.mainSplitter, style=wx.VSCROLL | wx.HSCROLL | wx.CLIP_CHILDREN) - self.imView.Bind(wx.EVT_PAINT, self.OnPaint) - self.imView.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) - self.imView.Bind(wx.EVT_SIZE, self.OnSize) - - #-------------------------------------------------------- - # Install the splitter panes. - #-------------------------------------------------------- - self.mainSplitter.SplitVertically(self.dsTreeView, self.imView) - self.mainSplitter.SetSashPosition(300, True) - - #-------------------------------------------------------- - # Initialize some values - #-------------------------------------------------------- - self.dcmdsRoot = False - self.foldersRoot = False - self.loadCentered = True - self.bitmap = None - self.Show(True) - - def OnFileExit(self, event): - """Exits the program.""" - self.Destroy() - event.Skip() - - def OnSize(self, event): - "Window 'size' event." - self.Refresh() - - def OnEraseBackground(self, event): - "Window 'erase background' event." - pass - - def populateTree(self, ds): - """ Populate the tree in the left window with the [desired] - dataset values""" - if not self.dcmdsRoot: - self.dcmdsRoot = self.dsTreeView.AddRoot(text="DICOM Objects") - else: - self.dsTreeView.DeleteChildren(self.dcmdsRoot) - self.recurse_tree(ds, self.dcmdsRoot) - self.dsTreeView.ExpandAll() - - def recurse_tree(self, ds, parent, hide=False): - """ order the dicom tags """ - for data_element in ds: - if isinstance(data_element.value, unicode): - ip = self.dsTreeView.AppendItem(parent, text=unicode(data_element)) - else: - ip = self.dsTreeView.AppendItem(parent, text=str(data_element)) - - if data_element.VR == "SQ": - for i, ds in enumerate(data_element.value): - sq_item_description = data_element.name.replace(" Sequence", "") - item_text = "%s %d" % (sq_item_description, i + 1) - parentNodeID = self.dsTreeView.AppendItem(ip, text=item_text.rjust(128)) - self.recurse_tree(ds, parentNodeID) - -## --- Most of what is important happens below this line --------------------- - - def OnFileOpen(self, event): - """Opens a selected file.""" - dlg = wx.FileDialog(self, 'Choose a file to add.', '', '', '*.*', wx.OPEN) - if dlg.ShowModal() == wx.ID_OK: - fullPath = dlg.GetPath() - imageFile = dlg.GetFilename() - #checkDICMHeader() - self.show_file(imageFile, fullPath) - - def OnPaint(self, event): - "Window 'paint' event." - dc = wx.PaintDC(self.imView) - dc = wx.BufferedDC(dc) - - # paint a background just so it isn't *so* boring. - dc.SetBackground(wx.Brush("WHITE")) - dc.Clear() - dc.SetBrush(wx.Brush("GREY", wx.CROSSDIAG_HATCH)) - windowsize = self.imView.GetSizeTuple() - dc.DrawRectangle(0, 0, windowsize[0], windowsize[1]) - bmpX0 = 0 - bmpY0 = 0 - if self.bitmap is not None: - if self.loadCentered: - bmpX0 = (windowsize[0] - self.bitmap.Width) / 2 - bmpY0 = (windowsize[1] - self.bitmap.Height) / 2 - dc.DrawBitmap(self.bitmap, bmpX0, bmpY0, False) - - #------------------------------------------------------------ - # ImFrame.ConvertWXToPIL() - # Expropriated from Andrea Gavana's - # ShapedButton.py in the wxPython dist - #------------------------------------------------------------ - def ConvertWXToPIL(self, bmp): - """ Convert wx.Image Into PIL Image. """ - width = bmp.GetWidth() - height = bmp.GetHeight() - im = wx.EmptyImage(width, height) - im.fromarray("RGBA", (width, height), bmp.GetData()) - return img - - #------------------------------------------------------------ - # ImFrame.ConvertPILToWX() - # Expropriated from Andrea Gavana's - # ShapedButton.py in the wxPython dist - #------------------------------------------------------------ - def ConvertPILToWX(self, pil, alpha=True): - """ Convert PIL Image Into wx.Image. """ - if alpha: - image = apply(wx.EmptyImage, pil.size) - image.SetData(pil.convert("RGB").tostring()) - image.SetAlphaData(pil.convert("RGBA").tostring()[3::4]) - else: - image = wx.EmptyImage(pil.size[0], pil.size[1]) - new_image = pil.convert('RGB') - data = new_image.tostring() - image.SetData(data) - return image - - def get_LUT_value(self, data, window, level): - """Apply the RGB Look-Up Table for the given data and window/level value.""" - if not have_numpy: - raise ImportError("Numpy is not available. See http://numpy.scipy.org/ to download and install") - if isinstance(window, list): - window = window[0] - if isinstance(level, list): - level = level[0] - return np.piecewise(data, - [data <= (level - 0.5 - (window - 1) / 2), - data > (level - 0.5 + (window - 1) / 2)], - [0, 255, lambda data: ((data - (level - 0.5)) / (window - 1) + 0.5) * (255 - 0)] - ) - - #----------------------------------------------------------- - # ImFrame.loadPIL_LUT(dataset) - # Display an image using the Python Imaging Library (PIL) - #----------------------------------------------------------- - def loadPIL_LUT(self, dataset): - if not have_PIL: - raise ImportError("Python Imaging Library is not available. See http://www.pythonware.com/products/pil/ to download and install") - if('PixelData' not in dataset): - raise TypeError("Cannot show image -- DICOM dataset does not have pixel data") - if('WindowWidth' not in dataset) or ('WindowCenter' not in dataset): # can only apply LUT if these values exist - bits = dataset.BitsAllocated - samples = dataset.SamplesPerPixel - if bits == 8 and samples == 1: - mode = "L" - elif bits == 8 and samples == 3: - mode = "RGB" - elif bits == 16: # not sure about this -- PIL source says is 'experimental' and no documentation. - mode = "I;16" # Also, should bytes swap depending on endian of file and system?? - else: - raise TypeError("Don't know PIL mode for %d BitsAllocated and %d SamplesPerPixel" % (bits, samples)) - size = (dataset.Columns, dataset.Rows) - im = PIL.Image.frombuffer(mode, size, dataset.PixelData, "raw", mode, 0, 1) # Recommended to specify all details by http://www.pythonware.com/library/pil/handbook/image.htm - else: - image = self.get_LUT_value(dataset.pixel_array, dataset.WindowWidth, dataset.WindowCenter) - im = PIL.Image.fromarray(image).convert('L') # Convert mode to L since LUT has only 256 values: http://www.pythonware.com/library/pil/handbook/image.htm - return im - - def show_file(self, imageFile, fullPath): - """ Load the DICOM file, make sure it contains at least one - image, and set it up for display by OnPaint(). ** be - careful not to pass a unicode string to read_file or it will - give you 'fp object does not have a defer_size attribute, - or some such.""" - ds = dicom.read_file(str(fullPath)) - ds.decode() # change strings to unicode - self.populateTree(ds) - if 'PixelData' in ds: - self.dImage = self.loadPIL_LUT(ds) - if self.dImage is not None: - tmpImage = self.ConvertPILToWX(self.dImage, False) - self.bitmap = wx.BitmapFromImage(tmpImage) - self.Refresh() - -##------ This is just the initialization of the App ------------------------- - - -#======================================================= -# The main App Class. -#======================================================= -class App(wx.App): - """Image Application.""" - - def OnInit(self): - """Create the Image Application.""" - frame = ImFrame(None, 'wxImage Example') - return True - -#--------------------------------------------------------------------- -# If this file is running as main or a standalone test, begin execution here. -#--------------------------------------------------------------------- -if __name__ == '__main__': - app = App(0) - app.MainLoop() diff -Nru pydicom-0.9.8/dicom/contrib/__init__.py pydicom-0.9.9/dicom/contrib/__init__.py --- pydicom-0.9.8/dicom/contrib/__init__.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# __init__.py -# Mark the folder as a python package diff -Nru pydicom-0.9.8/dicom/contrib/pydicom_PIL.py pydicom-0.9.9/dicom/contrib/pydicom_PIL.py --- pydicom-0.9.8/dicom/contrib/pydicom_PIL.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/pydicom_PIL.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -# pydicom_PIL.py -"""View DICOM images using Python image Library (PIL) - -Usage: ->>> import dicom ->>> from dicom.contrib.pydicom_PIL import show_PIL ->>> ds = dicom.read_file("filename") ->>> show_PIL(ds) - -Requires Numpy: http://numpy.scipy.org/ -and Python Imaging Library: http://www.pythonware.com/products/pil/ - -""" -# Copyright (c) 2009 Darcy Mason, Adit Panchal -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -# Based on image.py from pydicom version 0.9.3, -# LUT code added by Adit Panchal -# Tested on Python 2.5.4 (32-bit) on Mac OS X 10.6 -# using numpy 1.3.0 and PIL 1.1.7b1 - -have_PIL = True -try: - import PIL.Image -except: - have_PIL = False - -have_numpy = True -try: - import numpy as np -except: - have_numpy = False - -have_numpy = True -try: - import numpy as np -except: - have_numpy = False - - -def get_LUT_value(data, window, level): - """Apply the RGB Look-Up Table for the given data and window/level value.""" - if not have_numpy: - raise ImportError("Numpy is not available. See http://numpy.scipy.org/ to download and install") - - return np.piecewise(data, - [data <= (level - 0.5 - (window - 1) / 2), - data > (level - 0.5 + (window - 1) / 2)], - [0, 255, lambda data: ((data - (level - 0.5)) / (window - 1) + 0.5) * (255 - 0)]) - - -def get_LUT_value(data, window, level): - """Apply the RGB Look-Up Table for the given data and window/level value.""" - if not have_numpy: - raise ImportError("Numpy is not available. See http://numpy.scipy.org/ to download and install") - - return np.piecewise(data, - [data <= (level - 0.5 - (window - 1) / 2), - data > (level - 0.5 + (window - 1) / 2)], - [0, 255, lambda data: ((data - (level - 0.5)) / (window - 1) + 0.5) * (255 - 0)]) - - -# Display an image using the Python Imaging Library (PIL) -def show_PIL(dataset): - if not have_PIL: - raise ImportError("Python Imaging Library is not available. See http://www.pythonware.com/products/pil/ to download and install") - if ('PixelData' not in dataset): - raise TypeError("Cannot show image -- DICOM dataset does not have pixel data") - if ('WindowWidth' not in dataset) or ('WindowCenter' not in dataset): # can only apply LUT if these values exist - bits = dataset.BitsAllocated - samples = dataset.SamplesPerPixel - if bits == 8 and samples == 1: - mode = "L" - elif bits == 8 and samples == 3: - mode = "RGB" - elif bits == 16: - mode = "I;16" # not sure about this -- PIL source says is 'experimental' and no documentation. Also, should bytes swap depending on endian of file and system?? - else: - raise TypeError("Don't know PIL mode for %d BitsAllocated and %d SamplesPerPixel" % (bits, samples)) - - # PIL size = (width, height) - size = (dataset.Columns, dataset.Rows) - - im = PIL.Image.frombuffer(mode, size, dataset.PixelData, "raw", mode, 0, 1) # Recommended to specify all details by http://www.pythonware.com/library/pil/handbook/image.htm - - else: - image = get_LUT_value(dataset.pixel_array, dataset.WindowWidth, dataset.WindowCenter) - im = PIL.Image.fromarray(image).convert('L') # Convert mode to L since LUT has only 256 values: http://www.pythonware.com/library/pil/handbook/image.htm - - im.show() diff -Nru pydicom-0.9.8/dicom/contrib/pydicom_series.py pydicom-0.9.9/dicom/contrib/pydicom_series.py --- pydicom-0.9.8/dicom/contrib/pydicom_series.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/pydicom_series.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,676 +0,0 @@ -# dicom_series.py -""" -By calling the function read_files with a directory name or list -of files as an argument, a list of DicomSeries instances can be -obtained. A DicomSeries object has some attributes that give -information about the serie (such as shape, sampling, suid) and -has an info attribute, which is a dicom.DataSet instance containing -information about the first dicom file in the serie. The data can -be obtained using the get_pixel_array() method, which produces a -3D numpy array if there a multiple files in the serie. - -This module can deal with gated data, in which case a DicomSeries -instance is created for each 3D volume. - -""" -# -# Copyright (c) 2010 Almar Klein -# This file is released under the pydicom license. -# See the file license.txt included with the pydicom distribution, also -# available at http://pydicom.googlecode.com -# - - -# I (Almar) performed some test to loading a series of data -# in two different ways: loading all data, and deferring loading -# the data. Both ways seem equally fast on my system. I have to -# note that results can differ quite a lot depending on the system, -# but still I think this suggests that deferred reading is in -# general not slower. I think deferred loading of the pixel data -# can be advantageous because maybe not all data of all series -# is needed. Also it simply saves memory, because the data is -# removed from the Dataset instances. -# In the few result below, cold means reading for the first time, -# warm means reading 2nd/3d/etc time. -# - Full loading of data, cold: 9 sec -# - Full loading of data, warm: 3 sec -# - Deferred loading of data, cold: 9 sec -# - Deferred loading of data, warm: 3 sec - - -import os -import sys -import time -import gc -import dicom -from dicom.sequence import Sequence - -# Try importing numpy -try: - import numpy as np - have_numpy = True -except Exception: - np = None - have_numpy = False - - -## Helper functions and classes -class ProgressBar: - """ To print progress to the screen. - """ - def __init__(self, char='-', length=20): - self.char = char - self.length = length - self.progress = 0.0 - self.nbits = 0 - self.what = '' - - def Start(self, what=''): - """ Start(what='') - Start the progress bar, displaying the given text first. - Make sure not to print anything untill after calling - Finish(). Messages can be printed while displaying - progess by using printMessage(). - """ - self.what = what - self.progress = 0.0 - self.nbits = 0 - sys.stdout.write(what + " [") - - def Stop(self, message=""): - """ Stop the progress bar where it is now. - Optionally print a message behind it.""" - delta = int(self.length - self.nbits) - sys.stdout.write(" " * delta + "] " + message + "\n") - - def Finish(self, message=""): - """ Finish the progress bar, setting it to 100% if it - was not already. Optionally print a message behind the bar. - """ - delta = int(self.length - self.nbits) - sys.stdout.write(self.char * delta + "] " + message + "\n") - - def Update(self, newProgress): - """ Update progress. Progress is given as a number - between 0 and 1. - """ - self.progress = newProgress - required = self.length * (newProgress) - delta = int(required - self.nbits) - if delta > 0: - sys.stdout.write(self.char * delta) - self.nbits += delta - - def PrintMessage(self, message): - """ Print a message (for example a warning). - The message is printed behind the progress bar, - and a new bar is started. - """ - self.Stop(message) - self.Start(self.what) - - -def _dummyProgressCallback(progress): - """ A callback to indicate progress that does nothing. """ - pass - -_progressBar = ProgressBar() - - -def _progressCallback(progress): - """ The default callback for displaying progress. """ - if isinstance(progress, basestring): - _progressBar.Start(progress) - _progressBar._t0 = time.time() - elif progress is None: - dt = time.time() - _progressBar._t0 - _progressBar.Finish('%2.2f seconds' % dt) - else: - _progressBar.Update(progress) - - -def _listFiles(files, path): - """List all files in the directory, recursively. """ - - for item in os.listdir(path): - item = os.path.join(path, item) - if os.path.isdir(item): - _listFiles(files, item) - else: - files.append(item) - - -def _splitSerieIfRequired(serie, series): - """ _splitSerieIfRequired(serie, series) - Split the serie in multiple series if this is required. - The choice is based on examing the image position relative to - the previous image. If it differs too much, it is assumed - that there is a new dataset. This can happen for example in - unspitted gated CT data. - """ - - # Sort the original list and get local name - serie._sort() - L = serie._datasets - - # Init previous slice - ds1 = L[0] - - # Check whether we can do this - if not "ImagePositionPatient" in ds1: - return - - # Initialize a list of new lists - L2 = [[ds1]] - - # Init slice distance estimate - distance = 0 - - for index in range(1, len(L)): - - # Get current slice - ds2 = L[index] - - # Get positions - pos1 = float(ds1.ImagePositionPatient[2]) - pos2 = float(ds2.ImagePositionPatient[2]) - - # Get distances - newDist = abs(pos1 - pos2) - #deltaDist = abs(firstPos-pos2) - - # If the distance deviates more than 2x from what we've seen, - # we can agree it's a new dataset. - if distance and newDist > 2.1 * distance: - L2.append([]) - distance = 0 - else: - # Test missing file - if distance and newDist > 1.5 * distance: - print 'Warning: missing file after "%s"' % ds1.filename - distance = newDist - - # Add to last list - L2[-1].append(ds2) - - # Store previous - ds1 = ds2 - - # Split if we should - if len(L2) > 1: - - # At what position are we now? - i = series.index(serie) - - # Create new series - series2insert = [] - for L in L2: - newSerie = DicomSeries(serie.suid, serie._showProgress) - newSerie._datasets = Sequence(L) - series2insert.append(newSerie) - - # Insert series and remove self - for newSerie in reversed(series2insert): - series.insert(i, newSerie) - series.remove(serie) - - -pixelDataTag = dicom.tag.Tag(0x7fe0, 0x0010) - - -def _getPixelDataFromDataset(ds): - """ Get the pixel data from the given dataset. If the data - was deferred, make it deferred again, so that memory is - preserved. Also applies RescaleSlope and RescaleIntercept - if available. """ - - # Get original element - el = dict.__getitem__(ds, pixelDataTag) - - # Get data - data = ds.pixel_array - - # Remove data (mark as deferred) - dict.__setitem__(ds, pixelDataTag, el) - del ds._pixel_array - - # Obtain slope and offset - slope = 1 - offset = 0 - needFloats = False - needApplySlopeOffset = False - if 'RescaleSlope' in ds: - needApplySlopeOffset = True - slope = ds.RescaleSlope - if 'RescaleIntercept' in ds: - needApplySlopeOffset = True - offset = ds.RescaleIntercept - if int(slope) != slope or int(offset) != offset: - needFloats = True - if not needFloats: - slope, offset = int(slope), int(offset) - - # Apply slope and offset - if needApplySlopeOffset: - - # Maybe we need to change the datatype? - if data.dtype in [np.float32, np.float64]: - pass - elif needFloats: - data = data.astype(np.float32) - else: - # Determine required range - minReq, maxReq = data.min(), data.max() - minReq = min([minReq, minReq * slope + offset, maxReq * slope + offset]) - maxReq = max([maxReq, minReq * slope + offset, maxReq * slope + offset]) - - # Determine required datatype from that - dtype = None - if minReq < 0: - # Signed integer type - maxReq = max([-minReq, maxReq]) - if maxReq < 2 ** 7: - dtype = np.int8 - elif maxReq < 2 ** 15: - dtype = np.int16 - elif maxReq < 2 ** 31: - dtype = np.int32 - else: - dtype = np.float32 - else: - # Unsigned integer type - if maxReq < 2 ** 8: - dtype = np.int8 - elif maxReq < 2 ** 16: - dtype = np.int16 - elif maxReq < 2 ** 32: - dtype = np.int32 - else: - dtype = np.float32 - - # Change datatype - if dtype != data.dtype: - data = data.astype(dtype) - - # Apply slope and offset - data *= slope - data += offset - - # Done - return data - - -## The public functions and classes - -def read_files(path, showProgress=False, readPixelData=False): - """ read_files(path, showProgress=False, readPixelData=False) - - Reads dicom files and returns a list of DicomSeries objects, which - contain information about the data, and can be used to load the - image or volume data. - - The parameter "path" can also be a list of files or directories. - - If the callable "showProgress" is given, it is called with a single - argument to indicate the progress. The argument is a string when a - progress is started (indicating what is processed). A float indicates - progress updates. The paremeter is None when the progress is finished. - When "showProgress" is True, a default callback is used that writes - to stdout. By default, no progress is shown. - - if readPixelData is True, the pixel data of all series is read. By - default the loading of pixeldata is deferred until it is requested - using the DicomSeries.get_pixel_array() method. In general, both - methods should be equally fast. - """ - - # Init list of files - files = [] - - # Obtain data from the given path - if isinstance(path, basestring): - # Make dir nice - basedir = os.path.abspath(path) - # Check whether it exists - if not os.path.isdir(basedir): - raise ValueError('The given path is not a valid directory.') - # Find files recursively - _listFiles(files, basedir) - - elif isinstance(path, (tuple, list)): - # Iterate over all elements, which can be files or directories - for p in path: - if os.path.isdir(p): - _listFiles(files, os.path.abspath(p)) - elif os.path.isfile(p): - files.append(p) - else: - print "Warning, the path '%s' is not valid." % p - else: - raise ValueError('The path argument must be a string or list.') - - # Set default progress callback? - if showProgress is True: - showProgress = _progressCallback - if not hasattr(showProgress, '__call__'): - showProgress = _dummyProgressCallback - - # Set defer size - deferSize = 16383 # 128**2-1 - if readPixelData: - deferSize = None - - # Gather file data and put in DicomSeries - series = {} - count = 0 - showProgress('Loading series information:') - for filename in files: - - # Skip DICOMDIR files - if filename.count("DICOMDIR"): - continue - - # Try loading dicom ... - try: - dcm = dicom.read_file(filename, deferSize) - except dicom.filereader.InvalidDicomError: - continue # skip non-dicom file - except Exception as why: - if showProgress is _progressCallback: - _progressBar.PrintMessage(str(why)) - else: - print 'Warning:', why - continue - - # Get SUID and register the file with an existing or new series object - try: - suid = dcm.SeriesInstanceUID - except AttributeError: - continue # some other kind of dicom file - if suid not in series: - series[suid] = DicomSeries(suid, showProgress) - series[suid]._append(dcm) - - # Show progress (note that we always start with a 0.0) - showProgress(float(count) / len(files)) - count += 1 - - # Finish progress - showProgress(None) - - # Make a list and sort, so that the order is deterministic - series = series.values() - series.sort(key=lambda x: x.suid) - - # Split series if necessary - for serie in reversed([serie for serie in series]): - _splitSerieIfRequired(serie, series) - - # Finish all series - showProgress('Analysing series') - series_ = [] - for i in range(len(series)): - try: - series[i]._finish() - series_.append(series[i]) - except Exception: - pass # Skip serie (probably report-like file without pixels) - showProgress(float(i + 1) / len(series)) - showProgress(None) - - return series_ - - -class DicomSeries(object): - """ DicomSeries - This class represents a serie of dicom files that belong together. - If these are multiple files, they represent the slices of a volume - (like for CT or MRI). The actual volume can be obtained using loadData(). - Information about the data can be obtained using the info attribute. - """ - - # To create a DicomSeries object, start by making an instance and - # append files using the "_append" method. When all files are - # added, call "_sort" to sort the files, and then "_finish" to evaluate - # the data, perform some checks, and set the shape and sampling - # attributes of the instance. - - def __init__(self, suid, showProgress): - # Init dataset list and the callback - self._datasets = Sequence() - self._showProgress = showProgress - - # Init props - self._suid = suid - self._info = None - self._shape = None - self._sampling = None - - @property - def suid(self): - """ The Series Instance UID. """ - return self._suid - - @property - def shape(self): - """ The shape of the data (nz, ny, nx). - If None, the serie contains a single dicom file. """ - return self._shape - - @property - def sampling(self): - """ The sampling (voxel distances) of the data (dz, dy, dx). - If None, the serie contains a single dicom file. """ - return self._sampling - - @property - def info(self): - """ A DataSet instance containing the information as present in the - first dicomfile of this serie. """ - return self._info - - @property - def description(self): - """ A description of the dicom series. Used fields are - PatientName, shape of the data, SeriesDescription, - and ImageComments. - """ - - info = self.info - - # If no info available, return simple description - if info is None: - return "DicomSeries containing %i images" % len(self._datasets) - - fields = [] - - # Give patient name - if 'PatientName' in info: - fields.append("" + info.PatientName) - - # Also add dimensions - if self.shape: - tmp = [str(d) for d in self.shape] - fields.append('x'.join(tmp)) - - # Try adding more fields - if 'SeriesDescription' in info: - fields.append("'" + info.SeriesDescription + "'") - if 'ImageComments' in info: - fields.append("'" + info.ImageComments + "'") - - # Combine - return ' '.join(fields) - - def __repr__(self): - adr = hex(id(self)).upper() - return "" % (len(self._datasets), adr) - - def get_pixel_array(self): - """ get_pixel_array() - - Get (load) the data that this DicomSeries represents, and return - it as a numpy array. If this serie contains multiple images, the - resulting array is 3D, otherwise it's 2D. - - If RescaleSlope and RescaleIntercept are present in the dicom info, - the data is rescaled using these parameters. The data type is chosen - depending on the range of the (rescaled) data. - - """ - - # Can we do this? - if not have_numpy: - msg = "The Numpy package is required to use get_pixel_array.\n" - raise ImportError(msg) - - # It's easy if no file or if just a single file - if len(self._datasets) == 0: - raise ValueError('Serie does not contain any files.') - elif len(self._datasets) == 1: - ds = self._datasets[0] - slice = _getPixelDataFromDataset(ds) - return slice - - # Check info - if self.info is None: - raise RuntimeError("Cannot return volume if series not finished.") - - # Set callback to update progress - showProgress = self._showProgress - - # Init data (using what the dicom packaged produces as a reference) - ds = self._datasets[0] - slice = _getPixelDataFromDataset(ds) - #vol = Aarray(self.shape, self.sampling, fill=0, dtype=slice.dtype) - vol = np.zeros(self.shape, dtype=slice.dtype) - vol[0] = slice - - # Fill volume - showProgress('Loading data:') - ll = self.shape[0] - for z in range(1, ll): - ds = self._datasets[z] - vol[z] = _getPixelDataFromDataset(ds) - showProgress(float(z) / ll) - - # Finish - showProgress(None) - - # Done - gc.collect() - return vol - - def _append(self, dcm): - """ _append(dcm) - Append a dicomfile (as a dicom.dataset.FileDataset) to the series. - """ - self._datasets.append(dcm) - - def _sort(self): - """ sort() - Sort the datasets by instance number. - """ - self._datasets.sort(key=lambda k: k.InstanceNumber) - - def _finish(self): - """ _finish() - - Evaluate the series of dicom files. Together they should make up - a volumetric dataset. This means the files should meet certain - conditions. Also some additional information has to be calculated, - such as the distance between the slices. This method sets the - attributes for "shape", "sampling" and "info". - - This method checks: - * that there are no missing files - * that the dimensions of all images match - * that the pixel spacing of all images match - - """ - - # The datasets list should be sorted by instance number - L = self._datasets - if len(L) == 0: - return - elif len(L) < 2: - # Set attributes - ds = self._datasets[0] - self._info = self._datasets[0] - self._shape = [ds.Rows, ds.Columns] - self._sampling = [float(ds.PixelSpacing[0]), float(ds.PixelSpacing[1])] - return - - # Get previous - ds1 = L[0] - - # Init measures to calculate average of - distance_sum = 0.0 - - # Init measures to check (these are in 2D) - dimensions = ds1.Rows, ds1.Columns - sampling = float(ds1.PixelSpacing[0]), float(ds1.PixelSpacing[1]) # row, column - - for index in range(len(L)): - # The first round ds1 and ds2 will be the same, for the - # distance calculation this does not matter - - # Get current - ds2 = L[index] - - # Get positions - pos1 = float(ds1.ImagePositionPatient[2]) - pos2 = float(ds2.ImagePositionPatient[2]) - - # Update distance_sum to calculate distance later - distance_sum += abs(pos1 - pos2) - - # Test measures - dimensions2 = ds2.Rows, ds2.Columns - sampling2 = float(ds2.PixelSpacing[0]), float(ds2.PixelSpacing[1]) - if dimensions != dimensions2: - # We cannot produce a volume if the dimensions match - raise ValueError('Dimensions of slices does not match.') - if sampling != sampling2: - # We can still produce a volume, but we should notify the user - msg = 'Warning: sampling does not match.' - if self._showProgress is _progressCallback: - _progressBar.PrintMessage(msg) - else: - print msg - # Store previous - ds1 = ds2 - - # Create new dataset by making a deep copy of the first - info = dicom.dataset.Dataset() - firstDs = self._datasets[0] - for key in firstDs.keys(): - if key != (0x7fe0, 0x0010): - el = firstDs[key] - info.add_new(el.tag, el.VR, el.value) - - # Finish calculating average distance - # (Note that there are len(L)-1 distances) - distance_mean = distance_sum / (len(L) - 1) - - # Store information that is specific for the serie - self._shape = [len(L), ds2.Rows, ds2.Columns] - self._sampling = [distance_mean, float(ds2.PixelSpacing[0]), - float(ds2.PixelSpacing[1])] - - # Store - self._info = info - - -if __name__ == '__main__': - import sys - - if len(sys.argv) != 2: - print "Expected a single argument: a directory with dicom files in it" - else: - adir = sys.argv[1] - t0 = time.time() - all_series = read_files(adir, None, False) - print "Summary of each series:" - for series in all_series: - print series.description diff -Nru pydicom-0.9.8/dicom/contrib/pydicom_Tkinter.py pydicom-0.9.9/dicom/contrib/pydicom_Tkinter.py --- pydicom-0.9.8/dicom/contrib/pydicom_Tkinter.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/contrib/pydicom_Tkinter.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,212 +0,0 @@ -# pydicom_Tkinter.py -# -# Copyright (c) 2009 Daniel Nanz -# This file is released under the pydicom (http://code.google.com/p/pydicom/) -# license, see the file license.txt available at -# (http://code.google.com/p/pydicom/) -# -# revision history: -# Dec-08-2009: version 0.1 -# -# 0.1: tested with pydicom version 0.9.3, Python version 2.6.2 (32-bit) -# under Windows XP Professional 2002, and Mac OS X 10.5.5, -# using numpy 1.3.0 and a small random selection of MRI and -# CT images. -''' -View DICOM images from pydicom - -requires numpy: http://numpy.scipy.org/ - -Usage: ------- ->>> import dicom # pydicom ->>> import dicom.contrib.pydicom_Tkinter as pydicom_Tkinter # this module - ->>> df = dicom.read_file(filename) ->>> pydicom_Tkinter.show_image(df) -''' - -import Tkinter -import tempfile -import os - -have_numpy = True -try: - import numpy as np -except: - # will not work... - have_numpy = False - - -def get_PGM_bytedata_string(arr): - '''Given a 2D numpy array as input write gray-value image data in the PGM - format into a byte string and return it. - - arr: single-byte unsigned int numpy array - note: Tkinter's PhotoImage object seems to accept only single-byte data - ''' - - if arr.dtype != np.uint8: - raise ValueError - if len(arr.shape) != 2: - raise ValueError - - # array.shape is (#rows, #cols) tuple; PGM input needs this reversed - col_row_string = ' '.join(reversed(map(str, arr.shape))) - - bytedata_string = '\n'.join(('P5', - col_row_string, - str(arr.max()), - arr.tostring())) - return bytedata_string - - -def get_PGM_from_numpy_arr(arr, window_center, window_width, - lut_min=0, lut_max=255): - '''real-valued numpy input -> PGM-image formatted byte string - - arr: real-valued numpy array to display as grayscale image - window_center, window_width: to define max/min values to be mapped to the - lookup-table range. WC/WW scaling is done - according to DICOM-3 specifications. - lut_min, lut_max: min/max values of (PGM-) grayscale table: do not change - ''' - - if np.isreal(arr).sum() != arr.size: - raise ValueError - - # currently only support 8-bit colors - if lut_max != 255: - raise ValueError - - if arr.dtype != np.float64: - arr = arr.astype(np.float64) - - # LUT-specific array scaling - # width >= 1 (DICOM standard) - window_width = max(1, window_width) - - wc, ww = np.float64(window_center), np.float64(window_width) - lut_range = np.float64(lut_max) - lut_min - - minval = wc - 0.5 - (ww - 1.0) / 2.0 - maxval = wc - 0.5 + (ww - 1.0) / 2.0 - - min_mask = (minval >= arr) - to_scale = (arr > minval) & (arr < maxval) - max_mask = (arr >= maxval) - - if min_mask.any(): - arr[min_mask] = lut_min - if to_scale.any(): - arr[to_scale] = ((arr[to_scale] - (wc - 0.5)) / - (ww - 1.0) + 0.5) * lut_range + lut_min - if max_mask.any(): - arr[max_mask] = lut_max - - # round to next integer values and convert to unsigned int - arr = np.rint(arr).astype(np.uint8) - - # return PGM byte-data string - return get_PGM_bytedata_string(arr) - - -def get_tkinter_photoimage_from_pydicom_image(data): - ''' - Wrap data.pixel_array in a Tkinter PhotoImage instance, - after conversion into a PGM grayscale image. - - This will fail if the "numpy" module is not installed in the attempt of - creating the data.pixel_array. - - data: object returned from pydicom.read_file() - side effect: may leave a temporary .pgm file on disk - ''' - - # get numpy array as representation of image data - arr = data.pixel_array.astype(np.float64) - - # pixel_array seems to be the original, non-rescaled array. - # If present, window center and width refer to rescaled array - # -> do rescaling if possible. - if ('RescaleIntercept' in data) and ('RescaleSlope' in data): - intercept = data.RescaleIntercept # single value - slope = data.RescaleSlope - arr = slope * arr + intercept - - # get default window_center and window_width values - wc = (arr.max() + arr.min()) / 2.0 - ww = arr.max() - arr.min() + 1.0 - - # overwrite with specific values from data, if available - if ('WindowCenter' in data) and ('WindowWidth' in data): - wc = data.WindowCenter - ww = data.WindowWidth - try: - wc = wc[0] # can be multiple values - except: - pass - try: - ww = ww[0] - except: - pass - - # scale array to account for center, width and PGM grayscale range, - # and wrap into PGM formatted ((byte-) string - pgm = get_PGM_from_numpy_arr(arr, wc, ww) - - # create a PhotoImage - # for as yet unidentified reasons the following fails for certain - # window center/width values: - # photo_image = Tkinter.PhotoImage(data=pgm, gamma=1.0) - # Error with Python 2.6.2 under Windows XP: - # (self.tk.call(('image', 'create', imgtype, name,) + options) - # _tkinter.TclError: truncated PPM data - # OsX: distorted images - # while all seems perfectly OK for other values of center/width or when - # the PGM is first written to a temporary file and read again - - # write PGM file into temp dir - (os_id, abs_path) = tempfile.mkstemp(suffix='.pgm') - with open(abs_path, 'wb') as fd: - fd.write(pgm) - - photo_image = Tkinter.PhotoImage(file=abs_path, gamma=1.0) - - # close and remove temporary file on disk - # os.close is needed under windows for os.remove not to fail - try: - os.close(os_id) - os.remove(abs_path) - except: - pass # silently leave file on disk in temp-like directory - - return photo_image - - -def show_image(data, block=True, master=None): - ''' - Get minimal Tkinter GUI and display a pydicom data.pixel_array - - data: object returned from pydicom.read_file() - block: if True run Tk mainloop() to show the image - master: use with block==False and an existing Tk widget as parent widget - - side effects: may leave a temporary .pgm file on disk - ''' - frame = Tkinter.Frame(master=master, background='#000') - if 'SeriesDescription' in data and 'InstanceNumber' in data: - title = ', '.join(('Ser: ' + data.SeriesDescription, - 'Img: ' + str(data.InstanceNumber))) - else: - title = 'pydicom image' - frame.master.title(title) - photo_image = get_tkinter_photoimage_from_pydicom_image(data) - label = Tkinter.Label(frame, image=photo_image, background='#000') - # keep a reference to avoid disappearance upon garbage collection - label.photo_reference = photo_image - label.grid() - frame.grid() - - if block: - frame.mainloop() diff -Nru pydicom-0.9.8/dicom/datadict.py pydicom-0.9.9/dicom/datadict.py --- pydicom-0.9.8/dicom/datadict.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/datadict.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,246 +0,0 @@ -# datadict.py -# -*- coding: utf-8 -*- -"""Access dicom dictionary information""" - -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# - -import sys -import logging -logger = logging.getLogger("pydicom") -from dicom.tag import Tag -from dicom._dicom_dict import DicomDictionary # the actual dict of {tag: (VR, VM, name, is_retired, keyword), ...} -from dicom._dicom_dict import RepeatersDictionary # those with tags like "(50xx, 0005)" -from dicom._private_dict import private_dictionaries -import warnings -from dicom import in_py3 - -# Generate mask dict for checking repeating groups etc. -# Map a true bitwise mask to the DICOM mask with "x"'s in it. -masks = {} -for mask_x in RepeatersDictionary: - # mask1 is XOR'd to see that all non-"x" bits are identical (XOR result = 0 if bits same) - # then AND those out with 0 bits at the "x" ("we don't care") location using mask2 - mask1 = long(mask_x.replace("x", "0"), 16) - mask2 = long("".join(["F0"[c == "x"] for c in mask_x]), 16) - masks[mask_x] = (mask1, mask2) - -# For shorter naming of dicom member elements, put an entry here -# (longer naming can also still be used) -# The descriptive name must start with the long version (not replaced if internal) -shortNames = [("BeamLimitingDevice", "BLD"), - ("RTBeamLimitingDevice", "RTBLD"), - ("ControlPoint", "CP"), - ("Referenced", "Refd") - ] - - -def mask_match(tag): - for mask_x, (mask1, mask2) in masks.items(): - if (tag ^ mask1) & mask2 == 0: - return mask_x - return None - - -def get_entry(tag): - """Return the tuple (VR, VM, name, is_retired, keyword) from the DICOM dictionary - - If the entry is not in the main dictionary, check the masked ones, - e.g. repeating groups like 50xx, etc. - """ - tag = Tag(tag) - try: - return DicomDictionary[tag] - except KeyError: - mask_x = mask_match(tag) - if mask_x: - return RepeatersDictionary[mask_x] - else: - raise KeyError("Tag {0} not found in DICOM dictionary".format(tag)) - - -def dictionary_description(tag): - """Return the descriptive text for the given dicom tag.""" - return get_entry(tag)[2] - - -def dictionaryVM(tag): - """Return the dicom value multiplicity for the given dicom tag.""" - return get_entry(tag)[1] - - -def dictionaryVR(tag): - """Return the dicom value representation for the given dicom tag.""" - return get_entry(tag)[0] - - -def dictionary_has_tag(tag): - """Return True if the dicom dictionary has an entry for the given tag.""" - return (tag in DicomDictionary) - - -def dictionary_keyword(tag): - """Return the official DICOM standard (since 2011) keyword for the tag""" - return get_entry(tag)[4] - -# Set up a translation table for "cleaning" DICOM descriptions -# for backwards compatibility pydicom < 0.9.7 (before DICOM keywords) -# Translation is different with unicode - see .translate() at -# http://docs.python.org/library/stdtypes.html#string-methods -chars_to_remove = r""" !@#$%^&*(),;:.?\|{}[]+-="'’/""" -if in_py3: # i.e. unicode strings - translate_table = dict((ord(char), None) for char in chars_to_remove) -else: - import string - translate_table = string.maketrans('', '') - - -def keyword_for_tag(tag): - """Return the DICOM keyword for the given tag. Replaces old CleanName() - method using the 2011 DICOM standard keywords instead. - - Will return GroupLength for group length tags, - and returns empty string ("") if the tag doesn't exist in the dictionary. - """ - try: - return dictionary_keyword(tag) - except KeyError: - return "" - - -def CleanName(tag): - """Return the dictionary descriptive text string but without bad characters. - - Used for e.g. *named tags* of Dataset instances (before DICOM keywords were - part of the standard) - - """ - tag = Tag(tag) - if tag not in DicomDictionary: - if tag.element == 0: # 0=implied group length in DICOM versions < 3 - return "GroupLength" - else: - return "" - s = dictionary_description(tag) # Descriptive name in dictionary - # remove blanks and nasty characters - if in_py3: - s = s.translate(translate_table) - else: - s = s.translate(translate_table, chars_to_remove) - - # Take "Sequence" out of name (pydicom < 0.9.7) - # e..g "BeamSequence"->"Beams"; "ReferencedImageBoxSequence"->"ReferencedImageBoxes" - # 'Other Patient ID' exists as single value AND as sequence so check for it and leave 'Sequence' in - if dictionaryVR(tag) == "SQ" and not s.startswith("OtherPatientIDs"): - if s.endswith("Sequence"): - s = s[:-8] + "s" - if s.endswith("ss"): - s = s[:-1] - if s.endswith("xs"): - s = s[:-1] + "es" - if s.endswith("Studys"): - s = s[:-2] + "ies" - return s - -# Provide for the 'reverse' lookup. Given clean name, what is the tag? -logger.debug("Reversing DICOM dictionary so can look up tag from a name...") -NameDict = dict([(CleanName(tag), tag) for tag in DicomDictionary]) -keyword_dict = dict([(dictionary_keyword(tag), tag) for tag in DicomDictionary]) - - -def short_name(name): - """Return a short *named tag* for the corresponding long version. - - Return a blank string if there is no short version of the name. - - """ - for longname, shortname in shortNames: - if name.startswith(longname): - return name.replace(longname, shortname) - return "" - - -def long_name(name): - """Return a long *named tag* for the corresponding short version. - - Return a blank string if there is no long version of the name. - - """ - - for longname, shortname in shortNames: - if name.startswith(shortname): - return name.replace(shortname, longname) - return "" - - -def tag_for_name(name): - """Return the dicom tag corresponding to name, or None if none exist.""" - if name in keyword_dict: # the usual case - return keyword_dict[name] - # If not an official keyword, check the old style pydicom names - if name in NameDict: - tag = NameDict[name] - msg = ("'%s' as tag name has been deprecated; use official DICOM keyword '%s'" - % (name, dictionary_keyword(tag))) - warnings.warn(msg, DeprecationWarning) - return tag - - # check if is short-form of a valid name - longname = long_name(name) - if longname: - return NameDict.get(longname, None) - return None - - -def all_names_for_tag(tag): - """Return a list of all (long and short) names for the tag""" - longname = keyword_for_tag(tag) - shortname = short_name(longname) - names = [longname] - if shortname: - names.append(shortname) - return names - - -# PRIVATE DICTIONARY handling -# functions in analogy with those of main DICOM dict -def get_private_entry(tag, private_creator): - """Return the tuple (VR, VM, name, is_retired) from a private dictionary""" - tag = Tag(tag) - try: - private_dict = private_dictionaries[private_creator] - except KeyError: - raise KeyError("Private creator {0} not in private dictionary".format(private_creator)) - - # private elements are usually agnostic for "block" (see PS3.5-2008 7.8.1 p44) - # Some elements in _private_dict are explicit; most have "xx" for high-byte of element - # Try exact key first, but then try with "xx" in block position - try: - dict_entry = private_dict[tag] - except KeyError: - # so here put in the "xx" in the block position for key to look up - group_str = "%04x" % tag.group - elem_str = "%04x" % tag.elem - key = "%sxx%s" % (group_str, elem_str[-2:]) - if key not in private_dict: - raise KeyError("Tag {0} not in private dictionary for private creator {1}".format(key, private_creator)) - dict_entry = private_dict[key] - return dict_entry - - -def private_dictionary_description(tag, private_creator): - """Return the descriptive text for the given dicom tag.""" - return get_private_entry(tag, private_creator)[2] - - -def private_dictionaryVM(tag, private_creator): - """Return the dicom value multiplicity for the given dicom tag.""" - return get_private_entry(tag, private_creator)[1] - - -def private_dictionaryVR(tag, private_creator): - """Return the dicom value representation for the given dicom tag.""" - return get_private_entry(tag, private_creator)[0] diff -Nru pydicom-0.9.8/dicom/dataelem.py pydicom-0.9.9/dicom/dataelem.py --- pydicom-0.9.8/dicom/dataelem.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/dataelem.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,342 +0,0 @@ -# dataelem.py -"""Define the DataElement class - elements within a dataset. - -DataElements have a DICOM value representation VR, a value multiplicity VM, -and a value. -""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# -from __future__ import absolute_import -import sys -from dicom import in_py3 - -import logging -logger = logging.getLogger('pydicom') - -from dicom.datadict import dictionary_has_tag, dictionary_description -from dicom.datadict import private_dictionary_description, dictionaryVR -from dicom.tag import Tag - -from dicom.UID import UID -from dicom.valuerep import PersonName, PersonNameUnicode, DSfloat, DSdecimal -import dicom.valuerep # don't import DS directly as can be changed by config -from dicom import in_py3 - -if in_py3: - from dicom.valuerep import PersonName3 as PersonNameUnicode - PersonName = PersonNameUnicode - - -from collections import namedtuple - -# os.stat is only available on Unix and Windows -# Not sure if on other platforms the import fails, or the call to it?? -stat_available = True -try: - from os import stat -except: - stat_available = False -import os.path - -from dicom.filebase import DicomFile -import warnings - - -# Helper functions: -def isMultiValue(value): - """Helper function: return True if 'value' is 'list-like'.""" - if isString(value) or isinstance(value, bytes): - return False - try: - iter(value) - except TypeError: - return False - return True - - -def isString(val): - """Helper function: return True if val is a string.""" - return isinstance(val, basestring) - - -def isStringOrStringList(val): - """Return true if val consists only of strings. val may be a list/tuple.""" - if isMultiValue(val): - for item in val: - if not isString(item): - return False - return True - else: # single value - test for a string - return isString(val) - -_backslash = "\\" # double '\' because it is used as escape chr in Python - - -class DataElement(object): - """Contain and manipulate a Dicom data element, having a tag, VR, VM and value. - - Most user code will not create data elements using this class directly, - but rather through DICOM keywords in Dataset objects. - See the Dataset class for a description of how Datasets, Sequences, - and DataElements work. - - Class Data - ---------- - For string display (via __str__), the following are used: - - descripWidth -- maximum width of description field (default 35). - maxBytesToDisplay -- longer data will display "array of # bytes" (default 16). - showVR -- True (default) to include the dicom VR just before the value. - """ - descripWidth = 35 - maxBytesToDisplay = 16 - showVR = 1 - - def __init__(self, tag, VR, value, file_value_tell=None, - is_undefined_length=False, already_converted=False): - """Create a data element instance. - - Most user code should instead use DICOM keywords - to create data_elements, for which only the value is supplied, - and the VR and tag are determined from the dicom dictionary. - - tag -- dicom (group, element) tag in any form accepted by Tag(). - VR -- dicom value representation (see DICOM standard part 6) - value -- the value of the data element. One of the following: - - a single string value - - a number - - a list or tuple with all strings or all numbers - - a multi-value string with backslash separator - file_value_tell -- used internally by Dataset, to store the write - position for ReplaceDataElementValue method - is_undefined_length -- used internally to store whether the length - field in this data element was 0xFFFFFFFFL, i.e. "undefined length" - - """ - self.tag = Tag(tag) - self.VR = VR # Note!: you must set VR before setting value - if already_converted: - self._value = value - else: - self.value = value # calls property setter which will convert - self.file_tell = file_value_tell - self.is_undefined_length = is_undefined_length - - @property - def value(self): - """The value (possibly multiple values) of this data_element""" - return self._value - - @value.setter - def value(self, val): - """Set method for 'value' property""" - # Check if is a string with multiple values separated by '\' - # If so, turn them into a list of separate strings - if isString(val) and self.VR not in \ - ['UT', 'ST', 'LT', 'FL', 'FD', 'AT', 'OB', 'OW', 'OF', 'SL', 'SQ', 'SS', - 'UL', 'OB/OW', 'OW/OB', 'OB or OW', 'OW or OB', 'UN'] and 'US' not in self.VR: # latter covers 'US or SS' etc - if _backslash in val: - val = val.split(_backslash) - self._value = self._convert_value(val) - - @property - def VM(self): - """The number of values in the data_element's 'value'""" - if isMultiValue(self.value): - return len(self.value) - else: - return 1 - - def _convert_value(self, val): - """Convert Dicom string values if possible to e.g. numbers. Handle the case - of multiple value data_elements""" - if self.VR == 'SQ': # a sequence - leave it alone - from dicom.sequence import Sequence - if isinstance(val, Sequence): - return val - else: - return Sequence(val) - - # if the value is a list, convert each element - try: - val.append - except AttributeError: # not a list - return self._convert(val) - else: - returnvalue = [] - for subval in val: - returnvalue.append(self._convert(subval)) - return returnvalue - - def _convert(self, val): - """Take the value and convert to number, etc if possible""" - if self.VR == 'IS': - return dicom.valuerep.IS(val) - elif self.VR == 'DS': - return dicom.valuerep.DS(val) - elif self.VR == "UI": - return UID(val) - elif in_py3 and self.VR == "PN": - return PersonName(val) - # Later may need this for PersonName as for UI, - # but needs more thought - # elif self.VR == "PN": - # return PersonName(val) - else: # is either a string or a type 2 optionally blank string - return val # this means a "numeric" value could be empty string "" - #except TypeError: - #print "Could not convert value '%s' to VR '%s' in tag %s" \ - # % (repr(val), self.VR, self.tag) - #except ValueError: - #print "Could not convert value '%s' to VR '%s' in tag %s" \ - # % (repr(val), self.VR, self.tag) - - def __str__(self): - """Return str representation of this data_element""" - repVal = self.repval - if self.showVR: - s = "%s %-*s %s: %s" % (str(self.tag), self.descripWidth, - self.description()[:self.descripWidth], self.VR, repVal) - else: - s = "%s %-*s %s" % (str(self.tag), self.descripWidth, - self.description()[:self.descripWidth], repVal) - return s - - @property - def repval(self): - """Return a str representation of the current value for use in __str__""" - if (self.VR in ['OB', 'OW', 'OW/OB', 'OW or OB', 'OB or OW', 'US or SS or OW', 'US or SS'] - and len(self.value) > self.maxBytesToDisplay): - repVal = "Array of %d bytes" % len(self.value) - elif hasattr(self, 'original_string'): # for VR of IS or DS - repVal = repr(self.original_string) - elif isinstance(self.value, (DSfloat, DSdecimal)): - repVal = repr(self.value) - elif isinstance(self.value, UID): - repVal = self.value.name - else: - repVal = repr(self.value) # will tolerate unicode too - return repVal - - def __unicode__(self): - """Return unicode representation of this data_element""" - if isinstance(self.value, unicode): - # start with the string rep then replace the value part with the unicode - strVal = str(self) - uniVal = unicode(strVal.replace(self.repval, "")) + self.value - return uniVal - else: - return unicode(str(self)) - - def __getitem__(self, key): - """Returns the item from my value's Sequence, if it is one.""" - try: - return self.value[key] - except TypeError: - raise TypeError("DataElement value is unscriptable (not a Sequence)") - - @property - def name(self): - return self.description() - - def description(self): - """Return the DICOM dictionary description for this dicom tag.""" - if dictionary_has_tag(self.tag): - name = dictionary_description(self.tag) - elif self.tag.is_private: - name = "Private tag data" # default - if hasattr(self, 'private_creator'): - try: - # If have name from private dictionary, use it, but - # but put in square brackets so is differentiated, - # and clear that cannot access it by name - name = "[" + private_dictionary_description(self.tag, self.private_creator) + "]" - except KeyError: - pass - elif self.tag.elem >> 8 == 0: - name = "Private Creator" - elif self.tag.element == 0: # implied Group Length dicom versions < 3 - name = "Group Length" - else: - name = "" - return name - - def __repr__(self): - """Handle repr(data_element)""" - if self.VR == "SQ": - return repr(self.value) - else: - return str(self) - - -class DeferredDataElement(DataElement): - """Subclass of DataElement where value is not read into memory until needed""" - def __init__(self, tag, VR, fp, file_mtime, data_element_tell, length): - """Store basic info for the data element but value will be read later - - fp -- DicomFile object representing the dicom file being read - file_mtime -- last modification time on file, used to make sure - it has not changed since original read - data_element_tell -- file position at start of data element, - (not the start of the value part, but start of whole element) - """ - self.tag = Tag(tag) - self.VR = VR - self._value = None # flag as unread - - # Check current file object and save info needed for read later - self.fp_is_implicit_VR = fp.is_implicit_VR - self.fp_is_little_endian = fp.is_little_endian - self.filepath = fp.name - self.file_mtime = file_mtime - self.data_element_tell = data_element_tell - self.length = length - - @property - def repval(self): - if self._value is None: - return "Deferred read: length %d" % self.length - else: - return DataElement.repval.fget(self) - - @property - def value(self): - """Get method for 'value' property""" - # Must now read the value if haven't already - if self._value is None: - self.read_value() - return DataElement.value.fget(self) - - @value.setter - def value(self, val): - DataElement.value.fset(self, val) - - -RawDataElement = namedtuple('RawDataElement', - 'tag VR length value value_tell is_implicit_VR is_little_endian') - - -def DataElement_from_raw(raw_data_element, encoding=None): - """Return a DataElement from a RawDataElement""" - from dicom.values import convert_value # XXX buried here to avoid circular import filereader->Dataset->convert_value->filereader (for SQ parsing) - raw = raw_data_element - VR = raw.VR - if VR is None: # Can be if was implicit VR - try: - VR = dictionaryVR(raw.tag) - except KeyError: - if raw.tag.is_private: - VR = 'OB' # just read the bytes, no way to know what they mean - elif raw.tag.element == 0: # group length tag implied in versions < 3.0 - VR = 'UL' - else: - raise KeyError("Unknown DICOM tag {0:s} - can't look up VR".format(str(raw.tag))) - try: - value = convert_value(VR, raw, encoding) - except NotImplementedError as e: - raise NotImplementedError("{0:s} in tag {1!r}".format(str(e), raw.tag)) - return DataElement(raw.tag, VR, value, raw.value_tell, - raw.length == 0xFFFFFFFF, already_converted=True) diff -Nru pydicom-0.9.8/dicom/dataset.py pydicom-0.9.9/dicom/dataset.py --- pydicom-0.9.8/dicom/dataset.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/dataset.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,615 +0,0 @@ -# dataset.py -"""Module for Dataset class - -Overview of Dicom object model: - -Dataset(derived class of Python's dict class) - contains DataElement instances (DataElement is a class with tag, VR, value) - the value can be a Sequence instance - (Sequence is derived from Python's list), - or just a regular value like a number, string, etc., - or a list of regular values, e.g. a 3d coordinate - Sequence's are a list of Datasets (note recursive nature here) - -""" -# -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# -import sys -from sys import byteorder -sys_is_little_endian = (byteorder == 'little') -import logging -logger = logging.getLogger('pydicom') -import inspect # for __dir__ - -from dicom.charset import default_encoding, convert_encodings -from dicom.datadict import DicomDictionary, dictionaryVR -from dicom.datadict import tag_for_name, all_names_for_tag -from dicom.tag import Tag, BaseTag -from dicom.dataelem import DataElement, DataElement_from_raw, RawDataElement -from dicom.UID import NotCompressedPixelTransferSyntaxes -import os.path - -import io - -import dicom # for write_file -import dicom.charset -import warnings - - -have_numpy = True - -try: - import numpy -except: - have_numpy = False - -stat_available = True -try: - from os import stat -except: - stat_available = False - - -class PropertyError(Exception): -# http://docs.python.org/release/3.1.3/tutorial/errors.html#tut-userexceptions - """For AttributeErrors caught in a property, so do not go to __getattr__""" - pass - - -class Dataset(dict): - """A collection (dictionary) of Dicom `DataElement` instances. - - Example of two ways to retrieve or set values: - - 1. dataset[0x10, 0x10].value --> patient's name - 2. dataset.PatientName --> patient's name - - Example (2) uses DICOM "keywords", defined starting in 2011 standard. - PatientName is not actually a member of the object, but unknown member - requests are checked against the DICOM dictionary. If the name matches a - DicomDictionary descriptive string, the corresponding tag is used - to look up or set the `DataElement` instance's value. - - :attribute indent_chars: for string display, the characters used to indent - nested Data Elements (e.g. sequence items). Default is three spaces. - - """ - indent_chars = " " - - def __init__(self, *args, **kwargs): - self._parent_encoding = kwargs.get('parent_encoding', default_encoding) - dict.__init__(self, *args) - - def add(self, data_element): - """Equivalent to dataset[data_element.tag] = data_element.""" - self[data_element.tag] = data_element - - def add_new(self, tag, VR, value): - """Create a new DataElement instance and add it to this Dataset.""" - data_element = DataElement(tag, VR, value) - # use data_element.tag since DataElement verified it - self[data_element.tag] = data_element - - def data_element(self, name): - """Return the full data_element instance for the given descriptive name - - :param name: a DICOM keyword - :returns: a DataElement instance in this dataset with the given name - If the tag for that name is not found, returns None - """ - tag = tag_for_name(name) - if tag: - return self[tag] - return None - - def __contains__(self, name): - """Extend dict.__contains__() to handle DICOM keywords. - - This is called for code like: ``if 'SliceLocation' in dataset``. - - """ - if isinstance(name, (str, unicode)): - tag = tag_for_name(name) - else: - try: - tag = Tag(name) - except: - return False - if tag: - return dict.__contains__(self, tag) - else: - return dict.__contains__(self, name) # will no doubt raise an exception - - def decode(self): - """Apply character set decoding to all data elements. - - See DICOM PS3.5-2008 6.1.1. - """ - # Find specific character set. 'ISO_IR 6' is default - # May be multi-valued, but let dicom.charset handle all logic on that - dicom_character_set = self._character_set - - # Shortcut to the decode function in dicom.charset - decode_data_element = dicom.charset.decode - - # Callback for walk(), to decode the chr strings if necessary - # This simply calls the dicom.charset.decode function - def decode_callback(ds, data_element): - if data_element.VR == 'SQ': - [dset.decode() for dset in data_element.value] - else: - decode_data_element(data_element, dicom_character_set) - - self.walk(decode_callback, recursive=False) - - def __delattr__(self, name): - """Intercept requests to delete an attribute by name, e.g. del ds.name - - If name is a DICOM keyword, then delete the corresponding tag - and data_element. Else, delete an instance (python) attribute - as any other class would do - - """ - # First check if a valid DICOM keyword and if we have that data element - tag = tag_for_name(name) - if tag and tag in self: - del self[tag] - # If not a DICOM name in this dataset, check for regular instance name - # can't do delete directly, that will call __delattr__ again - elif name in self.__dict__: - del self.__dict__[name] - # Not found, raise an error in same style as python does - else: - raise AttributeError(name) - - def __dir__(self): - """Give a list of attributes available in the dataset - - List of attributes is used, for example, in auto-completion in editors - or command-line environments. - """ - # Force zip object into a list in case of python3. Also backwards - # compatible - meths = set(list(zip( - *inspect.getmembers(Dataset, inspect.isroutine)))[0]) - props = set(list(zip( - *inspect.getmembers(Dataset, inspect.isdatadescriptor)))[0]) - dicom_names = set(self.dir()) - alldir = sorted(props | meths | dicom_names) - return alldir - - def dir(self, *filters): - """Return an alphabetical list of data_element keywords in the dataset. - - Intended mainly for use in interactive Python sessions. - :param filters: zero or more string arguments to the function. Used for - case-insensitive match to any part of the DICOM name. - :returns: All data_element names in this dataset matching the filters. - If no filters, return all DICOM keywords in the dataset - """ - allnames = [] - for tag, data_element in self.items(): - allnames.extend(all_names_for_tag(tag)) - # remove blanks - tags without valid names (e.g. private tags) - allnames = [x for x in allnames if x] - # Store found names in a dict, so duplicate names appear only once - matches = {} - for filter_ in filters: - filter_ = filter_.lower() - match = [x for x in allnames if x.lower().find(filter_) != -1] - matches.update(dict([(x, 1) for x in match])) - if filters: - names = sorted(matches.keys()) - return names - else: - return sorted(allnames) - - def get(self, key, default=None): - """Extend dict.get() to handle DICOM keywords""" - if isinstance(key, (str, unicode)): - try: - return getattr(self, key) - except AttributeError: - return default - else: - # is not a string, try to make it into a tag and then hand it - # off to the underlying dict - if not isinstance(key, BaseTag): - try: - key = Tag(key) - except: - raise TypeError("Dataset.get key must be a string or tag") - try: - return_val = self.__getitem__(key) - except KeyError: - return_val = default - return return_val - - def __getattr__(self, name): - """Intercept requests for unknown Dataset python-attribute names. - - If the name matches a Dicom keyword, - return the value for the data_element with the corresponding tag. - - """ - # __getattr__ only called if instance cannot find name in self.__dict__ - # So, if name is not a dicom string, then is an error - tag = tag_for_name(name) - if tag is None: - raise AttributeError("Dataset does not have attribute " - "'{0:s}'.".format(name)) - tag = Tag(tag) - if tag not in self: - raise AttributeError("Dataset does not have attribute " - "'{0:s}'.".format(name)) - else: # do have that dicom data_element - return self[tag].value - - @property - def _character_set(self): - """ - :return: - """ - char_set = self.get('SpecificCharacterSet', None) - - if not char_set: - char_set = self._parent_encoding - else: - char_set = convert_encodings(char_set) - - return char_set - - def __getitem__(self, key): - """Operator for dataset[key] request.""" - tag = Tag(key) - data_elem = dict.__getitem__(self, tag) - - if isinstance(data_elem, DataElement): - return data_elem - elif isinstance(data_elem, tuple): - # If a deferred read, then go get the value now - if data_elem.value is None: - from dicom.filereader import read_deferred_data_element - data_elem = read_deferred_data_element(self.fileobj_type, - self.filename, self.timestamp, data_elem) - - if tag != (0x08, 0x05): - character_set = self._character_set - else: - character_set = default_encoding - # Not converted from raw form read from file yet; do so now - self[tag] = DataElement_from_raw(data_elem, character_set) - return dict.__getitem__(self, tag) - - def group_dataset(self, group): - """Return a Dataset containing only data_elements of a certain group. - - :param group: the group part of a dicom (group, element) tag. - :returns: a dataset instance containing data elements of the group - specified - """ - ds = Dataset() - ds.update(dict([(tag, data_element) for tag, data_element in self.items() - if tag.group == group])) - return ds - - def __iter__(self): - """Method to iterate through the dataset, returning data_elements. - e.g.: - for data_element in dataset: - do_something... - The data_elements are returned in DICOM order, - i.e. in increasing order by tag value. - Sequence items are returned as a single data_element; it is up to the - calling code to recurse into the Sequence items if desired - """ - # Note this is different than the underlying dict class, - # which returns the key of the key:value mapping. - # Here the value is returned (but data_element.tag has the key) - taglist = sorted(self.keys()) - for tag in taglist: - yield self[tag] - - def _pixel_data_numpy(self): - """Return a NumPy array of the pixel data. - - NumPy is a numerical package for python. It is used if available. - - :raises TypeError: if no pixel data in this dataset. - :raises ImportError: if cannot import numpy. - - """ - if not 'PixelData' in self: - raise TypeError("No pixel data found in this dataset.") - - if not have_numpy: - msg = "The Numpy package is required to use pixel_array, and numpy could not be imported.\n" - raise ImportError(msg) - - # determine the type used for the array - need_byteswap = (self.is_little_endian != sys_is_little_endian) - - # Make NumPy format code, e.g. "uint16", "int32" etc - # from two pieces of info: - # self.PixelRepresentation -- 0 for unsigned, 1 for signed; - # self.BitsAllocated -- 8, 16, or 32 - format_str = '%sint%d' % (('u', '')[self.PixelRepresentation], - self.BitsAllocated) - try: - numpy_format = numpy.dtype(format_str) - except TypeError: - raise TypeError("Data type not understood by NumPy: " - "format='%s', PixelRepresentation=%d, BitsAllocated=%d" % ( - numpy_format, self.PixelRepresentation, self.BitsAllocated)) - - # Have correct Numpy format, so create the NumPy array - arr = numpy.fromstring(self.PixelData, numpy_format) - - # XXX byte swap - may later handle this in read_file!!? - if need_byteswap: - arr.byteswap(True) # True means swap in-place, don't make a new copy - # Note the following reshape operations return a new *view* onto arr, but don't copy the data - if 'NumberOfFrames' in self and self.NumberOfFrames > 1: - if self.SamplesPerPixel > 1: - arr = arr.reshape(self.SamplesPerPixel, self.NumberOfFrames, self.Rows, self.Columns) - else: - arr = arr.reshape(self.NumberOfFrames, self.Rows, self.Columns) - else: - if self.SamplesPerPixel > 1: - if self.BitsAllocated == 8: - arr = arr.reshape(self.SamplesPerPixel, self.Rows, self.Columns) - else: - raise NotImplementedError("This code only handles SamplesPerPixel > 1 if Bits Allocated = 8") - else: - arr = arr.reshape(self.Rows, self.Columns) - return arr - - # Use by pixel_array property - def _get_pixel_array(self): - # Check if pixel data is in a form we know how to make into an array - # XXX uses file_meta here, should really only be thus for FileDataset - if self.file_meta.TransferSyntaxUID not in NotCompressedPixelTransferSyntaxes: - raise NotImplementedError("Pixel Data is compressed in a format pydicom does not yet handle. Cannot return array") - - # Check if already have converted to a NumPy array - # Also check if self.PixelData has changed. If so, get new NumPy array - already_have = True - if not hasattr(self, "_pixel_array"): - already_have = False - elif self._pixel_id != id(self.PixelData): - already_have = False - if not already_have: - self._pixel_array = self._pixel_data_numpy() - self._pixel_id = id(self.PixelData) # is this guaranteed to work if memory is re-used?? - return self._pixel_array - - @property - def pixel_array(self): - """Return the pixel data as a NumPy array""" - try: - return self._get_pixel_array() - except AttributeError: - t, e, tb = sys.exc_info() - raise PropertyError("AttributeError in pixel_array property: " + \ - e.args[0]), None, tb - - # Format strings spec'd according to python string formatting options - # See http://docs.python.org/library/stdtypes.html#string-formatting-operations - default_element_format = "%(tag)s %(name)-35.35s %(VR)s: %(repval)s" - default_sequence_element_format = "%(tag)s %(name)-35.35s %(VR)s: %(repval)s" - - def formatted_lines(self, element_format=default_element_format, - sequence_element_format=default_sequence_element_format, - indent_format=None): - """A generator to give back a formatted string representing each line - one at a time. Example: - for line in dataset.formatted_lines("%(name)s=%(repval)s", "SQ:%(name)s=%(repval)s"): - print(line) - See the source code for default values which illustrate some of the names that can be used in the - format strings - indent_format -- not used in current version. Placeholder for future functionality. - """ - for data_element in self.iterall(): - # Get all the attributes possible for this data element (e.g. - # gets descriptive text name too) - # This is the dictionary of names that can be used in the format string - elem_dict = dict([(x, getattr(data_element, x)() - if callable(getattr(data_element, x)) - else getattr(data_element, x)) - for x in dir(data_element) if not x.startswith("_")]) - if data_element.VR == "SQ": - yield sequence_element_format % elem_dict - else: - yield element_format % elem_dict - - def _pretty_str(self, indent=0, topLevelOnly=False): - """Return a string of the data_elements in this dataset, with indented levels. - - This private method is called by the __str__() method - for handling print statements or str(dataset), and the __repr__() method. - It is also used by top(), which is the reason for the topLevelOnly flag. - This function recurses, with increasing indentation levels. - - """ - strings = [] - indentStr = self.indent_chars * indent - nextIndentStr = self.indent_chars * (indent + 1) - for data_element in self: - if data_element.VR == "SQ": # a sequence - strings.append(indentStr + str(data_element.tag) + " %s %i item(s) ---- " % (data_element.description(), len(data_element.value))) - if not topLevelOnly: - for dataset in data_element.value: - strings.append(dataset._pretty_str(indent + 1)) - strings.append(nextIndentStr + "---------") - else: - strings.append(indentStr + repr(data_element)) - return "\n".join(strings) - - def remove_private_tags(self): - """Remove all Dicom private tags in this dataset and those contained within.""" - def RemoveCallback(dataset, data_element): - """Internal method to use as callback to walk() method.""" - if data_element.tag.is_private: - # can't del self[tag] - won't be right dataset on recursion - del dataset[data_element.tag] - self.walk(RemoveCallback) - - def save_as(self, filename, WriteLikeOriginal=True): - """Write the dataset to a file. - - filename -- full path and filename to save the file to - WriteLikeOriginal -- see dicom.filewriter.write_file for info on this parameter. - """ - dicom.write_file(filename, self, WriteLikeOriginal) - - def __setattr__(self, name, value): - """Intercept any attempts to set a value for an instance attribute. - - If name is a dicom descriptive string (cleaned with CleanName), - then set the corresponding tag and data_element. - Else, set an instance (python) attribute as any other class would do. - - """ - tag = tag_for_name(name) - if tag is not None: # successfully mapped name to a tag - if tag not in self: # don't have this tag yet->create the data_element instance - VR = dictionaryVR(tag) - data_element = DataElement(tag, VR, value) - else: # already have this data_element, just changing its value - data_element = self[tag] - data_element.value = value - # Now have data_element - store it in this dict - self[tag] = data_element - else: # name not in dicom dictionary - setting a non-dicom instance attribute - # XXX note if user mis-spells a dicom data_element - no error!!! - self.__dict__[name] = value - - def __setitem__(self, key, value): - """Operator for dataset[key]=value. Check consistency, and deal with private tags""" - if not isinstance(value, (DataElement, RawDataElement)): # ok if is subclass, e.g. DeferredDataElement - raise TypeError("Dataset contents must be DataElement instances.\n" + \ - "To set a data_element value use data_element.value=val") - tag = Tag(value.tag) - if key != tag: - raise ValueError("data_element.tag must match the dictionary key") - - data_element = value - if tag.is_private: - # See PS 3.5-2008 section 7.8.1 (p. 44) for how blocks are reserved - logger.debug("Setting private tag %r" % tag) - private_block = tag.elem >> 8 - private_creator_tag = Tag(tag.group, private_block) - if private_creator_tag in self and tag != private_creator_tag: - if isinstance(data_element, RawDataElement): - data_element = DataElement_from_raw(data_element, self._character_set) - data_element.private_creator = self[private_creator_tag].value - dict.__setitem__(self, tag, data_element) - - def __str__(self): - """Handle str(dataset).""" - return self._pretty_str() - - def top(self): - """Show the DICOM tags, but only the top level; do not recurse into Sequences""" - return self._pretty_str(topLevelOnly=True) - - def trait_names(self): - """Return a list of valid names for auto-completion code - Used in IPython, so that data element names can be found - and offered for autocompletion on the IPython command line - """ - return dir(self) # only valid python >=2.6, else use self.__dir__() - - def update(self, dictionary): - """Extend dict.update() to handle DICOM keywords.""" - for key, value in dictionary.items(): - if isinstance(key, (str, unicode)): - setattr(self, key, value) - else: - self[Tag(key)] = value - - def iterall(self): - """Iterate through the dataset, yielding all data elements. - - Unlike Dataset.__iter__, this *does* recurse into sequences, - and so returns all data elements as if the file were "flattened". - """ - for data_element in self: - yield data_element - if data_element.VR == "SQ": - sequence = data_element.value - for dataset in sequence: - for elem in dataset.iterall(): - yield elem - - def walk(self, callback, recursive=True): - """Call the given function for all dataset data_elements (recurses). - - Visit all data_elements, recurse into sequences and their datasets (if specified), - The callback function is called for each data_element - (including SQ element). - Can be used to perform an operation on certain types of data_elements. - E.g., `remove_private_tags`() finds all private tags and deletes them. - - :param callback: a callable taking two arguments: a dataset, and - a data_element belonging to that dataset. - :param recursive: a boolean indicating whether to recurse into Sequences - - `DataElement`s will come back in DICOM order (by increasing tag number - within their dataset) - - """ - taglist = sorted(self.keys()) - for tag in taglist: - data_element = self[tag] - callback(self, data_element) # self = this Dataset - # 'tag in self' below needed in case callback deleted data_element - if recursive and tag in self and data_element.VR == "SQ": - sequence = data_element.value - for dataset in sequence: - dataset.walk(callback) - - __repr__ = __str__ - - -class FileDataset(Dataset): - def __init__(self, filename_or_obj, dataset, preamble=None, file_meta=None, - is_implicit_VR=True, is_little_endian=True): - """Initialize a dataset read from a DICOM file - - :param filename: full path and filename to the file. Use None if is a BytesIO. - :param dataset: some form of dictionary, usually a Dataset from read_dataset() - :param preamble: the 128-byte DICOM preamble - :param file_meta: the file meta info dataset, as returned by _read_file_meta, - or an empty dataset if no file meta information is in the file - :param is_implicit_VR: True if implicit VR transfer syntax used; False if explicit VR. Default is True. - :param is_little_endian: True if little-endian transfer syntax used; False if big-endian. Default is True. - """ - Dataset.__init__(self, dataset) - self.preamble = preamble - self.file_meta = file_meta - self.is_implicit_VR = is_implicit_VR - self.is_little_endian = is_little_endian - if isinstance(filename_or_obj, basestring): - self.filename = filename_or_obj - self.fileobj_type = open - elif isinstance(filename_or_obj, io.BufferedReader): - self.filename = filename_or_obj.name - # This is the appropriate constructor for io.BufferedReader - self.fileobj_type = open - else: - self.fileobj_type = filename_or_obj.__class__ # use __class__ python <2.7?; http://docs.python.org/reference/datamodel.html - if getattr(filename_or_obj, "name", False): - self.filename = filename_or_obj.name - elif getattr(filename_or_obj, "filename", False): # gzip python <2.7? - self.filename = filename_or_obj.filename - else: - self.filename = None # e.g. came from BytesIO or something file-like - self.timestamp = None - if stat_available and self.filename and os.path.exists(self.filename): - statinfo = stat(self.filename) - self.timestamp = statinfo.st_mtime diff -Nru pydicom-0.9.8/dicom/_dicom_dict.py pydicom-0.9.9/dicom/_dicom_dict.py --- pydicom-0.9.8/dicom/_dicom_dict.py 2013-01-20 00:37:32.000000000 +0000 +++ pydicom-0.9.9/dicom/_dicom_dict.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,3611 +0,0 @@ -# _dicom_dict.py -"""DICOM data dictionary auto-generated by csv2dict2011.py""" -from __future__ import absolute_import - -DicomDictionary = { -0x00020000: ('UL', '1', "File Meta Information Group Length", '', 'FileMetaInformationGroupLength'), -0x00020001: ('OB', '1', "File Meta Information Version", '', 'FileMetaInformationVersion'), -0x00020002: ('UI', '1', "Media Storage SOP Class UID", '', 'MediaStorageSOPClassUID'), -0x00020003: ('UI', '1', "Media Storage SOP Instance UID", '', 'MediaStorageSOPInstanceUID'), -0x00020010: ('UI', '1', "Transfer Syntax UID", '', 'TransferSyntaxUID'), -0x00020012: ('UI', '1', "Implementation Class UID", '', 'ImplementationClassUID'), -0x00020013: ('SH', '1', "Implementation Version Name", '', 'ImplementationVersionName'), -0x00020016: ('AE', '1', "Source Application Entity Title", '', 'SourceApplicationEntityTitle'), -0x00020100: ('UI', '1', "Private Information Creator UID", '', 'PrivateInformationCreatorUID'), -0x00020102: ('OB', '1', "Private Information", '', 'PrivateInformation'), -0x00041130: ('CS', '1', "File-set ID", '', 'FileSetID'), -0x00041141: ('CS', '1-8', "File-set Descriptor File ID", '', 'FileSetDescriptorFileID'), -0x00041142: ('CS', '1', "Specific Character Set of File-set Descriptor File", '', 'SpecificCharacterSetOfFileSetDescriptorFile'), -0x00041200: ('UL', '1', "Offset of the First Directory Record of the Root Directory Entity", '', 'OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity'), -0x00041202: ('UL', '1', "Offset of the Last Directory Record of the Root Directory Entity", '', 'OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity'), -0x00041212: ('US', '1', "File-set Consistency Flag", '', 'FileSetConsistencyFlag'), -0x00041220: ('SQ', '1', "Directory Record Sequence", '', 'DirectoryRecordSequence'), -0x00041400: ('UL', '1', "Offset of the Next Directory Record", '', 'OffsetOfTheNextDirectoryRecord'), -0x00041410: ('US', '1', "Record In-use Flag", '', 'RecordInUseFlag'), -0x00041420: ('UL', '1', "Offset of Referenced Lower-Level Directory Entity", '', 'OffsetOfReferencedLowerLevelDirectoryEntity'), -0x00041430: ('CS', '1', "Directory Record Type", '', 'DirectoryRecordType'), -0x00041432: ('UI', '1', "Private Record UID", '', 'PrivateRecordUID'), -0x00041500: ('CS', '1-8', "Referenced File ID", '', 'ReferencedFileID'), -0x00041504: ('UL', '1', "MRDR Directory Record Offset", 'Retired', 'MRDRDirectoryRecordOffset'), -0x00041510: ('UI', '1', "Referenced SOP Class UID in File", '', 'ReferencedSOPClassUIDInFile'), -0x00041511: ('UI', '1', "Referenced SOP Instance UID in File", '', 'ReferencedSOPInstanceUIDInFile'), -0x00041512: ('UI', '1', "Referenced Transfer Syntax UID in File", '', 'ReferencedTransferSyntaxUIDInFile'), -0x0004151A: ('UI', '1-n', "Referenced Related General SOP Class UID in File", '', 'ReferencedRelatedGeneralSOPClassUIDInFile'), -0x00041600: ('UL', '1', "Number of References", 'Retired', 'NumberOfReferences'), -0x00080001: ('UL', '1', "Length to End", 'Retired', 'LengthToEnd'), -0x00080005: ('CS', '1-n', "Specific Character Set", '', 'SpecificCharacterSet'), -0x00080006: ('SQ', '1', "Language Code Sequence", '', 'LanguageCodeSequence'), -0x00080008: ('CS', '2-n', "Image Type", '', 'ImageType'), -0x00080010: ('SH', '1', "Recognition Code", 'Retired', 'RecognitionCode'), -0x00080012: ('DA', '1', "Instance Creation Date", '', 'InstanceCreationDate'), -0x00080013: ('TM', '1', "Instance Creation Time", '', 'InstanceCreationTime'), -0x00080014: ('UI', '1', "Instance Creator UID", '', 'InstanceCreatorUID'), -0x00080016: ('UI', '1', "SOP Class UID", '', 'SOPClassUID'), -0x00080018: ('UI', '1', "SOP Instance UID", '', 'SOPInstanceUID'), -0x0008001A: ('UI', '1-n', "Related General SOP Class UID", '', 'RelatedGeneralSOPClassUID'), -0x0008001B: ('UI', '1', "Original Specialized SOP Class UID", '', 'OriginalSpecializedSOPClassUID'), -0x00080020: ('DA', '1', "Study Date", '', 'StudyDate'), -0x00080021: ('DA', '1', "Series Date", '', 'SeriesDate'), -0x00080022: ('DA', '1', "Acquisition Date", '', 'AcquisitionDate'), -0x00080023: ('DA', '1', "Content Date", '', 'ContentDate'), -0x00080024: ('DA', '1', "Overlay Date", 'Retired', 'OverlayDate'), -0x00080025: ('DA', '1', "Curve Date", 'Retired', 'CurveDate'), -0x0008002A: ('DT', '1', "Acquisition DateTime", '', 'AcquisitionDateTime'), -0x00080030: ('TM', '1', "Study Time", '', 'StudyTime'), -0x00080031: ('TM', '1', "Series Time", '', 'SeriesTime'), -0x00080032: ('TM', '1', "Acquisition Time", '', 'AcquisitionTime'), -0x00080033: ('TM', '1', "Content Time", '', 'ContentTime'), -0x00080034: ('TM', '1', "Overlay Time", 'Retired', 'OverlayTime'), -0x00080035: ('TM', '1', "Curve Time", 'Retired', 'CurveTime'), -0x00080040: ('US', '1', "Data Set Type", 'Retired', 'DataSetType'), -0x00080041: ('LO', '1', "Data Set Subtype", 'Retired', 'DataSetSubtype'), -0x00080042: ('CS', '1', "Nuclear Medicine Series Type", 'Retired', 'NuclearMedicineSeriesType'), -0x00080050: ('SH', '1', "Accession Number", '', 'AccessionNumber'), -0x00080051: ('SQ', '1', "Issuer of Accession Number Sequence", '', 'IssuerOfAccessionNumberSequence'), -0x00080052: ('CS', '1', "Query/Retrieve Level", '', 'QueryRetrieveLevel'), -0x00080054: ('AE', '1-n', "Retrieve AE Title", '', 'RetrieveAETitle'), -0x00080056: ('CS', '1', "Instance Availability", '', 'InstanceAvailability'), -0x00080058: ('UI', '1-n', "Failed SOP Instance UID List", '', 'FailedSOPInstanceUIDList'), -0x00080060: ('CS', '1', "Modality", '', 'Modality'), -0x00080061: ('CS', '1-n', "Modalities in Study", '', 'ModalitiesInStudy'), -0x00080062: ('UI', '1-n', "SOP Classes in Study", '', 'SOPClassesInStudy'), -0x00080064: ('CS', '1', "Conversion Type", '', 'ConversionType'), -0x00080068: ('CS', '1', "Presentation Intent Type", '', 'PresentationIntentType'), -0x00080070: ('LO', '1', "Manufacturer", '', 'Manufacturer'), -0x00080080: ('LO', '1', "Institution Name", '', 'InstitutionName'), -0x00080081: ('ST', '1', "Institution Address", '', 'InstitutionAddress'), -0x00080082: ('SQ', '1', "Institution Code Sequence", '', 'InstitutionCodeSequence'), -0x00080090: ('PN', '1', "Referring Physician's Name", '', 'ReferringPhysicianName'), -0x00080092: ('ST', '1', "Referring Physician's Address", '', 'ReferringPhysicianAddress'), -0x00080094: ('SH', '1-n', "Referring Physician's Telephone Numbers", '', 'ReferringPhysicianTelephoneNumbers'), -0x00080096: ('SQ', '1', "Referring Physician Identification Sequence", '', 'ReferringPhysicianIdentificationSequence'), -0x00080100: ('SH', '1', "Code Value", '', 'CodeValue'), -0x00080102: ('SH', '1', "Coding Scheme Designator", '', 'CodingSchemeDesignator'), -0x00080103: ('SH', '1', "Coding Scheme Version", '', 'CodingSchemeVersion'), -0x00080104: ('LO', '1', "Code Meaning", '', 'CodeMeaning'), -0x00080105: ('CS', '1', "Mapping Resource", '', 'MappingResource'), -0x00080106: ('DT', '1', "Context Group Version", '', 'ContextGroupVersion'), -0x00080107: ('DT', '1', "Context Group Local Version", '', 'ContextGroupLocalVersion'), -0x0008010B: ('CS', '1', "Context Group Extension Flag", '', 'ContextGroupExtensionFlag'), -0x0008010C: ('UI', '1', "Coding Scheme UID", '', 'CodingSchemeUID'), -0x0008010D: ('UI', '1', "Context Group Extension Creator UID", '', 'ContextGroupExtensionCreatorUID'), -0x0008010F: ('CS', '1', "Context Identifier", '', 'ContextIdentifier'), -0x00080110: ('SQ', '1', "Coding Scheme Identification Sequence", '', 'CodingSchemeIdentificationSequence'), -0x00080112: ('LO', '1', "Coding Scheme Registry", '', 'CodingSchemeRegistry'), -0x00080114: ('ST', '1', "Coding Scheme External ID", '', 'CodingSchemeExternalID'), -0x00080115: ('ST', '1', "Coding Scheme Name", '', 'CodingSchemeName'), -0x00080116: ('ST', '1', "Coding Scheme Responsible Organization", '', 'CodingSchemeResponsibleOrganization'), -0x00080117: ('UI', '1', "Context UID", '', 'ContextUID'), -0x00080201: ('SH', '1', "Timezone Offset From UTC", '', 'TimezoneOffsetFromUTC'), -0x00081000: ('AE', '1', "Network ID", 'Retired', 'NetworkID'), -0x00081010: ('SH', '1', "Station Name", '', 'StationName'), -0x00081030: ('LO', '1', "Study Description", '', 'StudyDescription'), -0x00081032: ('SQ', '1', "Procedure Code Sequence", '', 'ProcedureCodeSequence'), -0x0008103E: ('LO', '1', "Series Description", '', 'SeriesDescription'), -0x0008103F: ('SQ', '1', "Series Description Code Sequence", '', 'SeriesDescriptionCodeSequence'), -0x00081040: ('LO', '1', "Institutional Department Name", '', 'InstitutionalDepartmentName'), -0x00081048: ('PN', '1-n', "Physician(s) of Record", '', 'PhysiciansOfRecord'), -0x00081049: ('SQ', '1', "Physician(s) of Record Identification Sequence", '', 'PhysiciansOfRecordIdentificationSequence'), -0x00081050: ('PN', '1-n', "Performing Physician's Name", '', 'PerformingPhysicianName'), -0x00081052: ('SQ', '1', "Performing Physician Identification Sequence", '', 'PerformingPhysicianIdentificationSequence'), -0x00081060: ('PN', '1-n', "Name of Physician(s) Reading Study", '', 'NameOfPhysiciansReadingStudy'), -0x00081062: ('SQ', '1', "Physician(s) Reading Study Identification Sequence", '', 'PhysiciansReadingStudyIdentificationSequence'), -0x00081070: ('PN', '1-n', "Operators' Name", '', 'OperatorsName'), -0x00081072: ('SQ', '1', "Operator Identification Sequence", '', 'OperatorIdentificationSequence'), -0x00081080: ('LO', '1-n', "Admitting Diagnoses Description", '', 'AdmittingDiagnosesDescription'), -0x00081084: ('SQ', '1', "Admitting Diagnoses Code Sequence", '', 'AdmittingDiagnosesCodeSequence'), -0x00081090: ('LO', '1', "Manufacturer's Model Name", '', 'ManufacturerModelName'), -0x00081100: ('SQ', '1', "Referenced Results Sequence", 'Retired', 'ReferencedResultsSequence'), -0x00081110: ('SQ', '1', "Referenced Study Sequence", '', 'ReferencedStudySequence'), -0x00081111: ('SQ', '1', "Referenced Performed Procedure Step Sequence", '', 'ReferencedPerformedProcedureStepSequence'), -0x00081115: ('SQ', '1', "Referenced Series Sequence", '', 'ReferencedSeriesSequence'), -0x00081120: ('SQ', '1', "Referenced Patient Sequence", '', 'ReferencedPatientSequence'), -0x00081125: ('SQ', '1', "Referenced Visit Sequence", '', 'ReferencedVisitSequence'), -0x00081130: ('SQ', '1', "Referenced Overlay Sequence", 'Retired', 'ReferencedOverlaySequence'), -0x00081134: ('SQ', '1', "Referenced Stereometric Instance Sequence", '', 'ReferencedStereometricInstanceSequence'), -0x0008113A: ('SQ', '1', "Referenced Waveform Sequence", '', 'ReferencedWaveformSequence'), -0x00081140: ('SQ', '1', "Referenced Image Sequence", '', 'ReferencedImageSequence'), -0x00081145: ('SQ', '1', "Referenced Curve Sequence", 'Retired', 'ReferencedCurveSequence'), -0x0008114A: ('SQ', '1', "Referenced Instance Sequence", '', 'ReferencedInstanceSequence'), -0x0008114B: ('SQ', '1', "Referenced Real World Value Mapping Instance Sequence", '', 'ReferencedRealWorldValueMappingInstanceSequence'), -0x00081150: ('UI', '1', "Referenced SOP Class UID", '', 'ReferencedSOPClassUID'), -0x00081155: ('UI', '1', "Referenced SOP Instance UID", '', 'ReferencedSOPInstanceUID'), -0x0008115A: ('UI', '1-n', "SOP Classes Supported", '', 'SOPClassesSupported'), -0x00081160: ('IS', '1-n', "Referenced Frame Number", '', 'ReferencedFrameNumber'), -0x00081161: ('UL', '1-n', "Simple Frame List", '', 'SimpleFrameList'), -0x00081162: ('UL', '3-3n', "Calculated Frame List", '', 'CalculatedFrameList'), -0x00081163: ('FD', '2', "Time Range", '', 'TimeRange'), -0x00081164: ('SQ', '1', "Frame Extraction Sequence", '', 'FrameExtractionSequence'), -0x00081167: ('UI', '1', "Multi-Frame Source SOP Instance UID", '', 'MultiFrameSourceSOPInstanceUID'), -0x00081195: ('UI', '1', "Transaction UID", '', 'TransactionUID'), -0x00081197: ('US', '1', "Failure Reason", '', 'FailureReason'), -0x00081198: ('SQ', '1', "Failed SOP Sequence", '', 'FailedSOPSequence'), -0x00081199: ('SQ', '1', "Referenced SOP Sequence", '', 'ReferencedSOPSequence'), -0x00081200: ('SQ', '1', "Studies Containing Other Referenced Instances Sequence", '', 'StudiesContainingOtherReferencedInstancesSequence'), -0x00081250: ('SQ', '1', "Related Series Sequence", '', 'RelatedSeriesSequence'), -0x00082110: ('CS', '1', "Lossy Image Compression (Retired)", 'Retired', 'LossyImageCompressionRetired'), -0x00082111: ('ST', '1', "Derivation Description", '', 'DerivationDescription'), -0x00082112: ('SQ', '1', "Source Image Sequence", '', 'SourceImageSequence'), -0x00082120: ('SH', '1', "Stage Name", '', 'StageName'), -0x00082122: ('IS', '1', "Stage Number", '', 'StageNumber'), -0x00082124: ('IS', '1', "Number of Stages", '', 'NumberOfStages'), -0x00082127: ('SH', '1', "View Name", '', 'ViewName'), -0x00082128: ('IS', '1', "View Number", '', 'ViewNumber'), -0x00082129: ('IS', '1', "Number of Event Timers", '', 'NumberOfEventTimers'), -0x0008212A: ('IS', '1', "Number of Views in Stage", '', 'NumberOfViewsInStage'), -0x00082130: ('DS', '1-n', "Event Elapsed Time(s)", '', 'EventElapsedTimes'), -0x00082132: ('LO', '1-n', "Event Timer Name(s)", '', 'EventTimerNames'), -0x00082133: ('SQ', '1', "Event Timer Sequence", '', 'EventTimerSequence'), -0x00082134: ('FD', '1', "Event Time Offset", '', 'EventTimeOffset'), -0x00082135: ('SQ', '1', "Event Code Sequence", '', 'EventCodeSequence'), -0x00082142: ('IS', '1', "Start Trim", '', 'StartTrim'), -0x00082143: ('IS', '1', "Stop Trim", '', 'StopTrim'), -0x00082144: ('IS', '1', "Recommended Display Frame Rate", '', 'RecommendedDisplayFrameRate'), -0x00082200: ('CS', '1', "Transducer Position", 'Retired', 'TransducerPosition'), -0x00082204: ('CS', '1', "Transducer Orientation", 'Retired', 'TransducerOrientation'), -0x00082208: ('CS', '1', "Anatomic Structure", 'Retired', 'AnatomicStructure'), -0x00082218: ('SQ', '1', "Anatomic Region Sequence", '', 'AnatomicRegionSequence'), -0x00082220: ('SQ', '1', "Anatomic Region Modifier Sequence", '', 'AnatomicRegionModifierSequence'), -0x00082228: ('SQ', '1', "Primary Anatomic Structure Sequence", '', 'PrimaryAnatomicStructureSequence'), -0x00082229: ('SQ', '1', "Anatomic Structure, Space or Region Sequence", '', 'AnatomicStructureSpaceOrRegionSequence'), -0x00082230: ('SQ', '1', "Primary Anatomic Structure Modifier Sequence", '', 'PrimaryAnatomicStructureModifierSequence'), -0x00082240: ('SQ', '1', "Transducer Position Sequence", 'Retired', 'TransducerPositionSequence'), -0x00082242: ('SQ', '1', "Transducer Position Modifier Sequence", 'Retired', 'TransducerPositionModifierSequence'), -0x00082244: ('SQ', '1', "Transducer Orientation Sequence", 'Retired', 'TransducerOrientationSequence'), -0x00082246: ('SQ', '1', "Transducer Orientation Modifier Sequence", 'Retired', 'TransducerOrientationModifierSequence'), -0x00082251: ('SQ', '1', "Anatomic Structure Space Or Region Code Sequence (Trial)", 'Retired', 'AnatomicStructureSpaceOrRegionCodeSequenceTrial'), -0x00082253: ('SQ', '1', "Anatomic Portal Of Entrance Code Sequence (Trial)", 'Retired', 'AnatomicPortalOfEntranceCodeSequenceTrial'), -0x00082255: ('SQ', '1', "Anatomic Approach Direction Code Sequence (Trial)", 'Retired', 'AnatomicApproachDirectionCodeSequenceTrial'), -0x00082256: ('ST', '1', "Anatomic Perspective Description (Trial)", 'Retired', 'AnatomicPerspectiveDescriptionTrial'), -0x00082257: ('SQ', '1', "Anatomic Perspective Code Sequence (Trial)", 'Retired', 'AnatomicPerspectiveCodeSequenceTrial'), -0x00082258: ('ST', '1', "Anatomic Location Of Examining Instrument Description (Trial)", 'Retired', 'AnatomicLocationOfExaminingInstrumentDescriptionTrial'), -0x00082259: ('SQ', '1', "Anatomic Location Of Examining Instrument Code Sequence (Trial)", 'Retired', 'AnatomicLocationOfExaminingInstrumentCodeSequenceTrial'), -0x0008225A: ('SQ', '1', "Anatomic Structure Space Or Region Modifier Code Sequence (Trial)", 'Retired', - 'AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial'), -0x0008225C: ('SQ', '1', "OnAxis Background Anatomic Structure Code Sequence (Trial)", 'Retired', 'OnAxisBackgroundAnatomicStructureCodeSequenceTrial'), -0x00083001: ('SQ', '1', "Alternate Representation Sequence", '', 'AlternateRepresentationSequence'), -0x00083010: ('UI', '1', "Irradiation Event UID", '', 'IrradiationEventUID'), -0x00084000: ('LT', '1', "Identifying Comments", 'Retired', 'IdentifyingComments'), -0x00089007: ('CS', '4', "Frame Type", '', 'FrameType'), -0x00089092: ('SQ', '1', "Referenced Image Evidence Sequence", '', 'ReferencedImageEvidenceSequence'), -0x00089121: ('SQ', '1', "Referenced Raw Data Sequence", '', 'ReferencedRawDataSequence'), -0x00089123: ('UI', '1', "Creator-Version UID", '', 'CreatorVersionUID'), -0x00089124: ('SQ', '1', "Derivation Image Sequence", '', 'DerivationImageSequence'), -0x00089154: ('SQ', '1', "Source Image Evidence Sequence", '', 'SourceImageEvidenceSequence'), -0x00089205: ('CS', '1', "Pixel Presentation", '', 'PixelPresentation'), -0x00089206: ('CS', '1', "Volumetric Properties", '', 'VolumetricProperties'), -0x00089207: ('CS', '1', "Volume Based Calculation Technique", '', 'VolumeBasedCalculationTechnique'), -0x00089208: ('CS', '1', "Complex Image Component", '', 'ComplexImageComponent'), -0x00089209: ('CS', '1', "Acquisition Contrast", '', 'AcquisitionContrast'), -0x00089215: ('SQ', '1', "Derivation Code Sequence", '', 'DerivationCodeSequence'), -0x00089237: ('SQ', '1', "Referenced Presentation State Sequence", '', 'ReferencedPresentationStateSequence'), -0x00089410: ('SQ', '1', "Referenced Other Plane Sequence", '', 'ReferencedOtherPlaneSequence'), -0x00089458: ('SQ', '1', "Frame Display Sequence", '', 'FrameDisplaySequence'), -0x00089459: ('FL', '1', "Recommended Display Frame Rate in Float", '', 'RecommendedDisplayFrameRateInFloat'), -0x00089460: ('CS', '1', "Skip Frame Range Flag", '', 'SkipFrameRangeFlag'), -0x00100010: ('PN', '1', "Patient's Name", '', 'PatientName'), -0x00100020: ('LO', '1', "Patient ID", '', 'PatientID'), -0x00100021: ('LO', '1', "Issuer of Patient ID", '', 'IssuerOfPatientID'), -0x00100022: ('CS', '1', "Type of Patient ID", '', 'TypeOfPatientID'), -0x00100024: ('SQ', '1', "Issuer of Patient ID Qualifiers Sequence", '', 'IssuerOfPatientIDQualifiersSequence'), -0x00100030: ('DA', '1', "Patient's Birth Date", '', 'PatientBirthDate'), -0x00100032: ('TM', '1', "Patient's Birth Time", '', 'PatientBirthTime'), -0x00100040: ('CS', '1', "Patient's Sex", '', 'PatientSex'), -0x00100050: ('SQ', '1', "Patient's Insurance Plan Code Sequence", '', 'PatientInsurancePlanCodeSequence'), -0x00100101: ('SQ', '1', "Patient's Primary Language Code Sequence", '', 'PatientPrimaryLanguageCodeSequence'), -0x00100102: ('SQ', '1', "Patient's Primary Language Modifier Code Sequence", '', 'PatientPrimaryLanguageModifierCodeSequence'), -0x00101000: ('LO', '1-n', "Other Patient IDs", '', 'OtherPatientIDs'), -0x00101001: ('PN', '1-n', "Other Patient Names", '', 'OtherPatientNames'), -0x00101002: ('SQ', '1', "Other Patient IDs Sequence", '', 'OtherPatientIDsSequence'), -0x00101005: ('PN', '1', "Patient's Birth Name", '', 'PatientBirthName'), -0x00101010: ('AS', '1', "Patient's Age", '', 'PatientAge'), -0x00101020: ('DS', '1', "Patient's Size", '', 'PatientSize'), -0x00101021: ('SQ', '1', "Patient'Size Code Sequence", '', 'PatientSizeCodeSequence'), -0x00101030: ('DS', '1', "Patient's Weight", '', 'PatientWeight'), -0x00101040: ('LO', '1', "Patient's Address", '', 'PatientAddress'), -0x00101050: ('LO', '1-n', "Insurance Plan Identification", 'Retired', 'InsurancePlanIdentification'), -0x00101060: ('PN', '1', "Patient's Mother's Birth Name", '', 'PatientMotherBirthName'), -0x00101080: ('LO', '1', "Military Rank", '', 'MilitaryRank'), -0x00101081: ('LO', '1', "Branch of Service", '', 'BranchOfService'), -0x00101090: ('LO', '1', "Medical Record Locator", '', 'MedicalRecordLocator'), -0x00102000: ('LO', '1-n', "Medical Alerts", '', 'MedicalAlerts'), -0x00102110: ('LO', '1-n', "Allergies", '', 'Allergies'), -0x00102150: ('LO', '1', "Country of Residence", '', 'CountryOfResidence'), -0x00102152: ('LO', '1', "Region of Residence", '', 'RegionOfResidence'), -0x00102154: ('SH', '1-n', "Patient's Telephone Numbers", '', 'PatientTelephoneNumbers'), -0x00102160: ('SH', '1', "Ethnic Group", '', 'EthnicGroup'), -0x00102180: ('SH', '1', "Occupation", '', 'Occupation'), -0x001021A0: ('CS', '1', "Smoking Status", '', 'SmokingStatus'), -0x001021B0: ('LT', '1', "Additional Patient History", '', 'AdditionalPatientHistory'), -0x001021C0: ('US', '1', "Pregnancy Status", '', 'PregnancyStatus'), -0x001021D0: ('DA', '1', "Last Menstrual Date", '', 'LastMenstrualDate'), -0x001021F0: ('LO', '1', "Patient's Religious Preference", '', 'PatientReligiousPreference'), -0x00102201: ('LO', '1', "Patient Species Description", '', 'PatientSpeciesDescription'), -0x00102202: ('SQ', '1', "Patient Species Code Sequence", '', 'PatientSpeciesCodeSequence'), -0x00102203: ('CS', '1', "Patient's Sex Neutered", '', 'PatientSexNeutered'), -0x00102210: ('CS', '1', "Anatomical Orientation Type", '', 'AnatomicalOrientationType'), -0x00102292: ('LO', '1', "Patient Breed Description", '', 'PatientBreedDescription'), -0x00102293: ('SQ', '1', "Patient Breed Code Sequence", '', 'PatientBreedCodeSequence'), -0x00102294: ('SQ', '1', "Breed Registration Sequence", '', 'BreedRegistrationSequence'), -0x00102295: ('LO', '1', "Breed Registration Number", '', 'BreedRegistrationNumber'), -0x00102296: ('SQ', '1', "Breed Registry Code Sequence", '', 'BreedRegistryCodeSequence'), -0x00102297: ('PN', '1', "Responsible Person", '', 'ResponsiblePerson'), -0x00102298: ('CS', '1', "Responsible Person Role", '', 'ResponsiblePersonRole'), -0x00102299: ('LO', '1', "Responsible Organization", '', 'ResponsibleOrganization'), -0x00104000: ('LT', '1', "Patient Comments", '', 'PatientComments'), -0x00109431: ('FL', '1', "Examined Body Thickness", '', 'ExaminedBodyThickness'), -0x00120010: ('LO', '1', "Clinical Trial Sponsor Name", '', 'ClinicalTrialSponsorName'), -0x00120020: ('LO', '1', "Clinical Trial Protocol ID", '', 'ClinicalTrialProtocolID'), -0x00120021: ('LO', '1', "Clinical Trial Protocol Name", '', 'ClinicalTrialProtocolName'), -0x00120030: ('LO', '1', "Clinical Trial Site ID", '', 'ClinicalTrialSiteID'), -0x00120031: ('LO', '1', "Clinical Trial Site Name", '', 'ClinicalTrialSiteName'), -0x00120040: ('LO', '1', "Clinical Trial Subject ID", '', 'ClinicalTrialSubjectID'), -0x00120042: ('LO', '1', "Clinical Trial Subject Reading ID", '', 'ClinicalTrialSubjectReadingID'), -0x00120050: ('LO', '1', "Clinical Trial Time Point ID", '', 'ClinicalTrialTimePointID'), -0x00120051: ('ST', '1', "Clinical Trial Time Point Description", '', 'ClinicalTrialTimePointDescription'), -0x00120060: ('LO', '1', "Clinical Trial Coordinating Center Name", '', 'ClinicalTrialCoordinatingCenterName'), -0x00120062: ('CS', '1', "Patient Identity Removed", '', 'PatientIdentityRemoved'), -0x00120063: ('LO', '1-n', "De-identification Method", '', 'DeidentificationMethod'), -0x00120064: ('SQ', '1', "De-identification Method Code Sequence", '', 'DeidentificationMethodCodeSequence'), -0x00120071: ('LO', '1', "Clinical Trial Series ID", '', 'ClinicalTrialSeriesID'), -0x00120072: ('LO', '1', "Clinical Trial Series Description", '', 'ClinicalTrialSeriesDescription'), -0x00120081: ('LO', '1', "Clinical Trial Protocol Ethics Committee Name", '', 'ClinicalTrialProtocolEthicsCommitteeName'), -0x00120082: ('LO', '1', "Clinical Trial Protocol Ethics Committee Approval Number", '', 'ClinicalTrialProtocolEthicsCommitteeApprovalNumber'), -0x00120083: ('SQ', '1', "Consent for Clinical Trial Use Sequence", '', 'ConsentForClinicalTrialUseSequence'), -0x00120084: ('CS', '1', "Distribution Type", '', 'DistributionType'), -0x00120085: ('CS', '1', "Consent for Distribution Flag", '', 'ConsentForDistributionFlag'), -0x00140023: ('ST', '1-n', "CAD File Format", '', 'CADFileFormat'), -0x00140024: ('ST', '1-n', "Component Reference System", '', 'ComponentReferenceSystem'), -0x00140025: ('ST', '1-n', "Component Manufacturing Procedure", '', 'ComponentManufacturingProcedure'), -0x00140028: ('ST', '1-n', "Component Manufacturer", '', 'ComponentManufacturer'), -0x00140030: ('DS', '1-n', "Material Thickness", '', 'MaterialThickness'), -0x00140032: ('DS', '1-n', "Material Pipe Diameter", '', 'MaterialPipeDiameter'), -0x00140034: ('DS', '1-n', "Material Isolation Diameter", '', 'MaterialIsolationDiameter'), -0x00140042: ('ST', '1-n', "Material Grade", '', 'MaterialGrade'), -0x00140044: ('ST', '1-n', "Material Properties File ID", '', 'MaterialPropertiesFileID'), -0x00140045: ('ST', '1-n', "Material Properties File Format", '', 'MaterialPropertiesFileFormat'), -0x00140046: ('LT', '1', "Material Notes", '', 'MaterialNotes'), -0x00140050: ('CS', '1', "Component Shape", '', 'ComponentShape'), -0x00140052: ('CS', '1', "Curvature Type", '', 'CurvatureType'), -0x00140054: ('DS', '1', "Outer Diameter", '', 'OuterDiameter'), -0x00140056: ('DS', '1', "Inner Diameter", '', 'InnerDiameter'), -0x00141010: ('ST', '1', "Actual Environmental Conditions", '', 'ActualEnvironmentalConditions'), -0x00141020: ('DA', '1', "Expiry Date", '', 'ExpiryDate'), -0x00141040: ('ST', '1', "Environmental Conditions", '', 'EnvironmentalConditions'), -0x00142002: ('SQ', '1', "Evaluator Sequence", '', 'EvaluatorSequence'), -0x00142004: ('IS', '1', "Evaluator Number", '', 'EvaluatorNumber'), -0x00142006: ('PN', '1', "Evaluator Name", '', 'EvaluatorName'), -0x00142008: ('IS', '1', "Evaluation Attempt", '', 'EvaluationAttempt'), -0x00142012: ('SQ', '1', "Indication Sequence", '', 'IndicationSequence'), -0x00142014: ('IS', '1', "Indication Number", '', 'IndicationNumber'), -0x00142016: ('SH', '1', "Indication Label", '', 'IndicationLabel'), -0x00142018: ('ST', '1', "Indication Description", '', 'IndicationDescription'), -0x0014201A: ('CS', '1-n', "Indication Type", '', 'IndicationType'), -0x0014201C: ('CS', '1', "Indication Disposition", '', 'IndicationDisposition'), -0x0014201E: ('SQ', '1', "Indication ROI Sequence", '', 'IndicationROISequence'), -0x00142030: ('SQ', '1', "Indication Physical Property Sequence", '', 'IndicationPhysicalPropertySequence'), -0x00142032: ('SH', '1', "Property Label", '', 'PropertyLabel'), -0x00142202: ('IS', '1', "Coordinate System Number of Axes", '', 'CoordinateSystemNumberOfAxes'), -0x00142204: ('SQ', '1', "Coordinate System Axes Sequence", '', 'CoordinateSystemAxesSequence'), -0x00142206: ('ST', '1', "Coordinate System Axis Description", '', 'CoordinateSystemAxisDescription'), -0x00142208: ('CS', '1', "Coordinate System Data Set Mapping", '', 'CoordinateSystemDataSetMapping'), -0x0014220A: ('IS', '1', "Coordinate System Axis Number", '', 'CoordinateSystemAxisNumber'), -0x0014220C: ('CS', '1', "Coordinate System Axis Type", '', 'CoordinateSystemAxisType'), -0x0014220E: ('CS', '1', "Coordinate System Axis Units", '', 'CoordinateSystemAxisUnits'), -0x00142210: ('OB', '1', "Coordinate System Axis Values", '', 'CoordinateSystemAxisValues'), -0x00142220: ('SQ', '1', "Coordinate System Transform Sequence", '', 'CoordinateSystemTransformSequence'), -0x00142222: ('ST', '1', "Transform Description", '', 'TransformDescription'), -0x00142224: ('IS', '1', "Transform Number of Axes", '', 'TransformNumberOfAxes'), -0x00142226: ('IS', '1-n', "Transform Order of Axes", '', 'TransformOrderOfAxes'), -0x00142228: ('CS', '1', "Transformed Axis Units", '', 'TransformedAxisUnits'), -0x0014222A: ('DS', '1-n', "Coordinate System Transform Rotation and Scale Matrix", '', 'CoordinateSystemTransformRotationAndScaleMatrix'), -0x0014222C: ('DS', '1-n', "Coordinate System Transform Translation Matrix", '', 'CoordinateSystemTransformTranslationMatrix'), -0x00143011: ('DS', '1', "Internal Detector Frame Time", '', 'InternalDetectorFrameTime'), -0x00143012: ('DS', '1', "Number of Frames Integrated", '', 'NumberOfFramesIntegrated'), -0x00143020: ('SQ', '1', "Detector Temperature Sequence", '', 'DetectorTemperatureSequence'), -0x00143022: ('DS', '1', "Sensor Name", '', 'SensorName'), -0x00143024: ('DS', '1', "Horizontal Offset of Sensor", '', 'HorizontalOffsetOfSensor'), -0x00143026: ('DS', '1', "Vertical Offset of Sensor", '', 'VerticalOffsetOfSensor'), -0x00143028: ('DS', '1', "Sensor Temperature", '', 'SensorTemperature'), -0x00143040: ('SQ', '1', "Dark Current Sequence", '', 'DarkCurrentSequence'), -0x00143050: ('OB or OW', '1', "Dark Current Counts", '', 'DarkCurrentCounts'), -0x00143060: ('SQ', '1', "Gain Correction Reference Sequence", '', 'GainCorrectionReferenceSequence'), -0x00143070: ('OB or OW', '1', "Air Counts", '', 'AirCounts'), -0x00143071: ('DS', '1', "KV Used in Gain Calibration", '', 'KVUsedInGainCalibration'), -0x00143072: ('DS', '1', "MA Used in Gain Calibration", '', 'MAUsedInGainCalibration'), -0x00143073: ('DS', '1', "Number of Frames Used for Integration", '', 'NumberOfFramesUsedForIntegration'), -0x00143074: ('LO', '1', "Filter Material Used in Gain Calibration", '', 'FilterMaterialUsedInGainCalibration'), -0x00143075: ('DS', '1', "Filter Thickness Used in Gain Calibration", '', 'FilterThicknessUsedInGainCalibration'), -0x00143076: ('DA', '1', "Date of Gain Calibration", '', 'DateOfGainCalibration'), -0x00143077: ('TM', '1', "Time of Gain Calibration", '', 'TimeOfGainCalibration'), -0x00143080: ('OB', '1', "Bad Pixel Image", '', 'BadPixelImage'), -0x00143099: ('LT', '1', "Calibration Notes", '', 'CalibrationNotes'), -0x00144002: ('SQ', '1', "Pulser Equipment Sequence", '', 'PulserEquipmentSequence'), -0x00144004: ('CS', '1', "Pulser Type", '', 'PulserType'), -0x00144006: ('LT', '1', "Pulser Notes", '', 'PulserNotes'), -0x00144008: ('SQ', '1', "Receiver Equipment Sequence", '', 'ReceiverEquipmentSequence'), -0x0014400A: ('CS', '1', "Amplifier Type", '', 'AmplifierType'), -0x0014400C: ('LT', '1', "Receiver Notes", '', 'ReceiverNotes'), -0x0014400E: ('SQ', '1', "Pre-Amplifier Equipment Sequence", '', 'PreAmplifierEquipmentSequence'), -0x0014400F: ('LT', '1', "Pre-Amplifier Notes", '', 'PreAmplifierNotes'), -0x00144010: ('SQ', '1', "Transmit Transducer Sequence", '', 'TransmitTransducerSequence'), -0x00144011: ('SQ', '1', "Receive Transducer Sequence", '', 'ReceiveTransducerSequence'), -0x00144012: ('US', '1', "Number of Elements", '', 'NumberOfElements'), -0x00144013: ('CS', '1', "Element Shape", '', 'ElementShape'), -0x00144014: ('DS', '1', "Element Dimension A", '', 'ElementDimensionA'), -0x00144015: ('DS', '1', "Element Dimension B", '', 'ElementDimensionB'), -0x00144016: ('DS', '1', "Element Pitch", '', 'ElementPitch'), -0x00144017: ('DS', '1', "Measured Beam Dimension A", '', 'MeasuredBeamDimensionA'), -0x00144018: ('DS', '1', "Measured Beam Dimension B", '', 'MeasuredBeamDimensionB'), -0x00144019: ('DS', '1', "Location of Measured Beam Diameter", '', 'LocationOfMeasuredBeamDiameter'), -0x0014401A: ('DS', '1', "Nominal Frequency", '', 'NominalFrequency'), -0x0014401B: ('DS', '1', "Measured Center Frequency", '', 'MeasuredCenterFrequency'), -0x0014401C: ('DS', '1', "Measured Bandwidth", '', 'MeasuredBandwidth'), -0x00144020: ('SQ', '1', "Pulser Settings Sequence", '', 'PulserSettingsSequence'), -0x00144022: ('DS', '1', "Pulse Width", '', 'PulseWidth'), -0x00144024: ('DS', '1', "Excitation Frequency", '', 'ExcitationFrequency'), -0x00144026: ('CS', '1', "Modulation Type", '', 'ModulationType'), -0x00144028: ('DS', '1', "Damping", '', 'Damping'), -0x00144030: ('SQ', '1', "Receiver Settings Sequence", '', 'ReceiverSettingsSequence'), -0x00144031: ('DS', '1', "Acquired Soundpath Length", '', 'AcquiredSoundpathLength'), -0x00144032: ('CS', '1', "Acquisition Compression Type", '', 'AcquisitionCompressionType'), -0x00144033: ('IS', '1', "Acquisition Sample Size", '', 'AcquisitionSampleSize'), -0x00144034: ('DS', '1', "Rectifier Smoothing", '', 'RectifierSmoothing'), -0x00144035: ('SQ', '1', "DAC Sequence", '', 'DACSequence'), -0x00144036: ('CS', '1', "DAC Type", '', 'DACType'), -0x00144038: ('DS', '1-n', "DAC Gain Points", '', 'DACGainPoints'), -0x0014403A: ('DS', '1-n', "DAC Time Points", '', 'DACTimePoints'), -0x0014403C: ('DS', '1-n', "DAC Amplitude", '', 'DACAmplitude'), -0x00144040: ('SQ', '1', "Pre-Amplifier Settings Sequence", '', 'PreAmplifierSettingsSequence'), -0x00144050: ('SQ', '1', "Transmit Transducer Settings Sequence", '', 'TransmitTransducerSettingsSequence'), -0x00144051: ('SQ', '1', "Receive Transducer Settings Sequence", '', 'ReceiveTransducerSettingsSequence'), -0x00144052: ('DS', '1', "Incident Angle", '', 'IncidentAngle'), -0x00144054: ('ST', '1', "Coupling Technique", '', 'CouplingTechnique'), -0x00144056: ('ST', '1', "Coupling Medium", '', 'CouplingMedium'), -0x00144057: ('DS', '1', "Coupling Velocity", '', 'CouplingVelocity'), -0x00144058: ('DS', '1', "Crystal Center Location X", '', 'CrystalCenterLocationX'), -0x00144059: ('DS', '1', "Crystal Center Location Z", '', 'CrystalCenterLocationZ'), -0x0014405A: ('DS', '1', "Sound Path Length", '', 'SoundPathLength'), -0x0014405C: ('ST', '1', "Delay Law Identifier", '', 'DelayLawIdentifier'), -0x00144060: ('SQ', '1', "Gate Settings Sequence", '', 'GateSettingsSequence'), -0x00144062: ('DS', '1', "Gate Threshold", '', 'GateThreshold'), -0x00144064: ('DS', '1', "Velocity of Sound", '', 'VelocityOfSound'), -0x00144070: ('SQ', '1', "Calibration Settings Sequence", '', 'CalibrationSettingsSequence'), -0x00144072: ('ST', '1', "Calibration Procedure", '', 'CalibrationProcedure'), -0x00144074: ('SH', '1', "Procedure Version", '', 'ProcedureVersion'), -0x00144076: ('DA', '1', "Procedure Creation Date", '', 'ProcedureCreationDate'), -0x00144078: ('DA', '1', "Procedure Expiration Date", '', 'ProcedureExpirationDate'), -0x0014407A: ('DA', '1', "Procedure Last Modified Date", '', 'ProcedureLastModifiedDate'), -0x0014407C: ('TM', '1-n', "Calibration Time", '', 'CalibrationTime'), -0x0014407E: ('DA', '1-n', "Calibration Date", '', 'CalibrationDate'), -0x00145002: ('IS', '1', "LINAC Energy", '', 'LINACEnergy'), -0x00145004: ('IS', '1', "LINAC Output", '', 'LINACOutput'), -0x00180010: ('LO', '1', "Contrast/Bolus Agent", '', 'ContrastBolusAgent'), -0x00180012: ('SQ', '1', "Contrast/Bolus Agent Sequence", '', 'ContrastBolusAgentSequence'), -0x00180014: ('SQ', '1', "Contrast/Bolus Administration Route Sequence", '', 'ContrastBolusAdministrationRouteSequence'), -0x00180015: ('CS', '1', "Body Part Examined", '', 'BodyPartExamined'), -0x00180020: ('CS', '1-n', "Scanning Sequence", '', 'ScanningSequence'), -0x00180021: ('CS', '1-n', "Sequence Variant", '', 'SequenceVariant'), -0x00180022: ('CS', '1-n', "Scan Options", '', 'ScanOptions'), -0x00180023: ('CS', '1', "MR Acquisition Type", '', 'MRAcquisitionType'), -0x00180024: ('SH', '1', "Sequence Name", '', 'SequenceName'), -0x00180025: ('CS', '1', "Angio Flag", '', 'AngioFlag'), -0x00180026: ('SQ', '1', "Intervention Drug Information Sequence", '', 'InterventionDrugInformationSequence'), -0x00180027: ('TM', '1', "Intervention Drug Stop Time", '', 'InterventionDrugStopTime'), -0x00180028: ('DS', '1', "Intervention Drug Dose", '', 'InterventionDrugDose'), -0x00180029: ('SQ', '1', "Intervention Drug Code Sequence", '', 'InterventionDrugCodeSequence'), -0x0018002A: ('SQ', '1', "Additional Drug Sequence", '', 'AdditionalDrugSequence'), -0x00180030: ('LO', '1-n', "Radionuclide", 'Retired', 'Radionuclide'), -0x00180031: ('LO', '1', "Radiopharmaceutical", '', 'Radiopharmaceutical'), -0x00180032: ('DS', '1', "Energy Window Centerline", 'Retired', 'EnergyWindowCenterline'), -0x00180033: ('DS', '1-n', "Energy Window Total Width", 'Retired', 'EnergyWindowTotalWidth'), -0x00180034: ('LO', '1', "Intervention Drug Name", '', 'InterventionDrugName'), -0x00180035: ('TM', '1', "Intervention Drug Start Time", '', 'InterventionDrugStartTime'), -0x00180036: ('SQ', '1', "Intervention Sequence", '', 'InterventionSequence'), -0x00180037: ('CS', '1', "Therapy Type", 'Retired', 'TherapyType'), -0x00180038: ('CS', '1', "Intervention Status", '', 'InterventionStatus'), -0x00180039: ('CS', '1', "Therapy Description", 'Retired', 'TherapyDescription'), -0x0018003A: ('ST', '1', "Intervention Description", '', 'InterventionDescription'), -0x00180040: ('IS', '1', "Cine Rate", '', 'CineRate'), -0x00180042: ('CS', '1', "Initial Cine Run State", '', 'InitialCineRunState'), -0x00180050: ('DS', '1', "Slice Thickness", '', 'SliceThickness'), -0x00180060: ('DS', '1', "KVP", '', 'KVP'), -0x00180070: ('IS', '1', "Counts Accumulated", '', 'CountsAccumulated'), -0x00180071: ('CS', '1', "Acquisition Termination Condition", '', 'AcquisitionTerminationCondition'), -0x00180072: ('DS', '1', "Effective Duration", '', 'EffectiveDuration'), -0x00180073: ('CS', '1', "Acquisition Start Condition", '', 'AcquisitionStartCondition'), -0x00180074: ('IS', '1', "Acquisition Start Condition Data", '', 'AcquisitionStartConditionData'), -0x00180075: ('IS', '1', "Acquisition Termination Condition Data", '', 'AcquisitionTerminationConditionData'), -0x00180080: ('DS', '1', "Repetition Time", '', 'RepetitionTime'), -0x00180081: ('DS', '1', "Echo Time", '', 'EchoTime'), -0x00180082: ('DS', '1', "Inversion Time", '', 'InversionTime'), -0x00180083: ('DS', '1', "Number of Averages", '', 'NumberOfAverages'), -0x00180084: ('DS', '1', "Imaging Frequency", '', 'ImagingFrequency'), -0x00180085: ('SH', '1', "Imaged Nucleus", '', 'ImagedNucleus'), -0x00180086: ('IS', '1-n', "Echo Number(s)", '', 'EchoNumbers'), -0x00180087: ('DS', '1', "Magnetic Field Strength", '', 'MagneticFieldStrength'), -0x00180088: ('DS', '1', "Spacing Between Slices", '', 'SpacingBetweenSlices'), -0x00180089: ('IS', '1', "Number of Phase Encoding Steps", '', 'NumberOfPhaseEncodingSteps'), -0x00180090: ('DS', '1', "Data Collection Diameter", '', 'DataCollectionDiameter'), -0x00180091: ('IS', '1', "Echo Train Length", '', 'EchoTrainLength'), -0x00180093: ('DS', '1', "Percent Sampling", '', 'PercentSampling'), -0x00180094: ('DS', '1', "Percent Phase Field of View", '', 'PercentPhaseFieldOfView'), -0x00180095: ('DS', '1', "Pixel Bandwidth", '', 'PixelBandwidth'), -0x00181000: ('LO', '1', "Device Serial Number", '', 'DeviceSerialNumber'), -0x00181002: ('UI', '1', "Device UID", '', 'DeviceUID'), -0x00181003: ('LO', '1', "Device ID", '', 'DeviceID'), -0x00181004: ('LO', '1', "Plate ID", '', 'PlateID'), -0x00181005: ('LO', '1', "Generator ID", '', 'GeneratorID'), -0x00181006: ('LO', '1', "Grid ID", '', 'GridID'), -0x00181007: ('LO', '1', "Cassette ID", '', 'CassetteID'), -0x00181008: ('LO', '1', "Gantry ID", '', 'GantryID'), -0x00181010: ('LO', '1', "Secondary Capture Device ID", '', 'SecondaryCaptureDeviceID'), -0x00181011: ('LO', '1', "Hardcopy Creation Device ID", 'Retired', 'HardcopyCreationDeviceID'), -0x00181012: ('DA', '1', "Date of Secondary Capture", '', 'DateOfSecondaryCapture'), -0x00181014: ('TM', '1', "Time of Secondary Capture", '', 'TimeOfSecondaryCapture'), -0x00181016: ('LO', '1', "Secondary Capture Device Manufacturer", '', 'SecondaryCaptureDeviceManufacturer'), -0x00181017: ('LO', '1', "Hardcopy Device Manufacturer", 'Retired', 'HardcopyDeviceManufacturer'), -0x00181018: ('LO', '1', "Secondary Capture Device Manufacturer's Model Name", '', 'SecondaryCaptureDeviceManufacturerModelName'), -0x00181019: ('LO', '1-n', "Secondary Capture Device Software Versions", '', 'SecondaryCaptureDeviceSoftwareVersions'), -0x0018101A: ('LO', '1-n', "Hardcopy Device Software Version", 'Retired', 'HardcopyDeviceSoftwareVersion'), -0x0018101B: ('LO', '1', "Hardcopy Device Manufacturer's Model Name", 'Retired', 'HardcopyDeviceManufacturerModelName'), -0x00181020: ('LO', '1-n', "Software Version(s)", '', 'SoftwareVersions'), -0x00181022: ('SH', '1', "Video Image Format Acquired", '', 'VideoImageFormatAcquired'), -0x00181023: ('LO', '1', "Digital Image Format Acquired", '', 'DigitalImageFormatAcquired'), -0x00181030: ('LO', '1', "Protocol Name", '', 'ProtocolName'), -0x00181040: ('LO', '1', "Contrast/Bolus Route", '', 'ContrastBolusRoute'), -0x00181041: ('DS', '1', "Contrast/Bolus Volume", '', 'ContrastBolusVolume'), -0x00181042: ('TM', '1', "Contrast/Bolus Start Time", '', 'ContrastBolusStartTime'), -0x00181043: ('TM', '1', "Contrast/Bolus Stop Time", '', 'ContrastBolusStopTime'), -0x00181044: ('DS', '1', "Contrast/Bolus Total Dose", '', 'ContrastBolusTotalDose'), -0x00181045: ('IS', '1', "Syringe Counts", '', 'SyringeCounts'), -0x00181046: ('DS', '1-n', "Contrast Flow Rate", '', 'ContrastFlowRate'), -0x00181047: ('DS', '1-n', "Contrast Flow Duration", '', 'ContrastFlowDuration'), -0x00181048: ('CS', '1', "Contrast/Bolus Ingredient", '', 'ContrastBolusIngredient'), -0x00181049: ('DS', '1', "Contrast/Bolus Ingredient Concentration", '', 'ContrastBolusIngredientConcentration'), -0x00181050: ('DS', '1', "Spatial Resolution", '', 'SpatialResolution'), -0x00181060: ('DS', '1', "Trigger Time", '', 'TriggerTime'), -0x00181061: ('LO', '1', "Trigger Source or Type", '', 'TriggerSourceOrType'), -0x00181062: ('IS', '1', "Nominal Interval", '', 'NominalInterval'), -0x00181063: ('DS', '1', "Frame Time", '', 'FrameTime'), -0x00181064: ('LO', '1', "Cardiac Framing Type", '', 'CardiacFramingType'), -0x00181065: ('DS', '1-n', "Frame Time Vector", '', 'FrameTimeVector'), -0x00181066: ('DS', '1', "Frame Delay", '', 'FrameDelay'), -0x00181067: ('DS', '1', "Image Trigger Delay", '', 'ImageTriggerDelay'), -0x00181068: ('DS', '1', "Multiplex Group Time Offset", '', 'MultiplexGroupTimeOffset'), -0x00181069: ('DS', '1', "Trigger Time Offset", '', 'TriggerTimeOffset'), -0x0018106A: ('CS', '1', "Synchronization Trigger", '', 'SynchronizationTrigger'), -0x0018106C: ('US', '2', "Synchronization Channel", '', 'SynchronizationChannel'), -0x0018106E: ('UL', '1', "Trigger Sample Position", '', 'TriggerSamplePosition'), -0x00181070: ('LO', '1', "Radiopharmaceutical Route", '', 'RadiopharmaceuticalRoute'), -0x00181071: ('DS', '1', "Radiopharmaceutical Volume", '', 'RadiopharmaceuticalVolume'), -0x00181072: ('TM', '1', "Radiopharmaceutical Start Time", '', 'RadiopharmaceuticalStartTime'), -0x00181073: ('TM', '1', "Radiopharmaceutical Stop Time", '', 'RadiopharmaceuticalStopTime'), -0x00181074: ('DS', '1', "Radionuclide Total Dose", '', 'RadionuclideTotalDose'), -0x00181075: ('DS', '1', "Radionuclide Half Life", '', 'RadionuclideHalfLife'), -0x00181076: ('DS', '1', "Radionuclide Positron Fraction", '', 'RadionuclidePositronFraction'), -0x00181077: ('DS', '1', "Radiopharmaceutical Specific Activity", '', 'RadiopharmaceuticalSpecificActivity'), -0x00181078: ('DT', '1', "Radiopharmaceutical Start DateTime", '', 'RadiopharmaceuticalStartDateTime'), -0x00181079: ('DT', '1', "Radiopharmaceutical Stop DateTime", '', 'RadiopharmaceuticalStopDateTime'), -0x00181080: ('CS', '1', "Beat Rejection Flag", '', 'BeatRejectionFlag'), -0x00181081: ('IS', '1', "Low R-R Value", '', 'LowRRValue'), -0x00181082: ('IS', '1', "High R-R Value", '', 'HighRRValue'), -0x00181083: ('IS', '1', "Intervals Acquired", '', 'IntervalsAcquired'), -0x00181084: ('IS', '1', "Intervals Rejected", '', 'IntervalsRejected'), -0x00181085: ('LO', '1', "PVC Rejection", '', 'PVCRejection'), -0x00181086: ('IS', '1', "Skip Beats", '', 'SkipBeats'), -0x00181088: ('IS', '1', "Heart Rate", '', 'HeartRate'), -0x00181090: ('IS', '1', "Cardiac Number of Images", '', 'CardiacNumberOfImages'), -0x00181094: ('IS', '1', "Trigger Window", '', 'TriggerWindow'), -0x00181100: ('DS', '1', "Reconstruction Diameter", '', 'ReconstructionDiameter'), -0x00181110: ('DS', '1', "Distance Source to Detector", '', 'DistanceSourceToDetector'), -0x00181111: ('DS', '1', "Distance Source to Patient", '', 'DistanceSourceToPatient'), -0x00181114: ('DS', '1', "Estimated Radiographic Magnification Factor", '', 'EstimatedRadiographicMagnificationFactor'), -0x00181120: ('DS', '1', "Gantry/Detector Tilt", '', 'GantryDetectorTilt'), -0x00181121: ('DS', '1', "Gantry/Detector Slew", '', 'GantryDetectorSlew'), -0x00181130: ('DS', '1', "Table Height", '', 'TableHeight'), -0x00181131: ('DS', '1', "Table Traverse", '', 'TableTraverse'), -0x00181134: ('CS', '1', "Table Motion", '', 'TableMotion'), -0x00181135: ('DS', '1-n', "Table Vertical Increment", '', 'TableVerticalIncrement'), -0x00181136: ('DS', '1-n', "Table Lateral Increment", '', 'TableLateralIncrement'), -0x00181137: ('DS', '1-n', "Table Longitudinal Increment", '', 'TableLongitudinalIncrement'), -0x00181138: ('DS', '1', "Table Angle", '', 'TableAngle'), -0x0018113A: ('CS', '1', "Table Type", '', 'TableType'), -0x00181140: ('CS', '1', "Rotation Direction", '', 'RotationDirection'), -0x00181141: ('DS', '1', "Angular Position", 'Retired', 'AngularPosition'), -0x00181142: ('DS', '1-n', "Radial Position", '', 'RadialPosition'), -0x00181143: ('DS', '1', "Scan Arc", '', 'ScanArc'), -0x00181144: ('DS', '1', "Angular Step", '', 'AngularStep'), -0x00181145: ('DS', '1', "Center of Rotation Offset", '', 'CenterOfRotationOffset'), -0x00181146: ('DS', '1-n', "Rotation Offset", 'Retired', 'RotationOffset'), -0x00181147: ('CS', '1', "Field of View Shape", '', 'FieldOfViewShape'), -0x00181149: ('IS', '1-2', "Field of View Dimension(s)", '', 'FieldOfViewDimensions'), -0x00181150: ('IS', '1', "Exposure Time", '', 'ExposureTime'), -0x00181151: ('IS', '1', "X-Ray Tube Current", '', 'XRayTubeCurrent'), -0x00181152: ('IS', '1', "Exposure", '', 'Exposure'), -0x00181153: ('IS', '1', "Exposure in uAs", '', 'ExposureInuAs'), -0x00181154: ('DS', '1', "Average Pulse Width", '', 'AveragePulseWidth'), -0x00181155: ('CS', '1', "Radiation Setting", '', 'RadiationSetting'), -0x00181156: ('CS', '1', "Rectification Type", '', 'RectificationType'), -0x0018115A: ('CS', '1', "Radiation Mode", '', 'RadiationMode'), -0x0018115E: ('DS', '1', "Image and Fluoroscopy Area Dose Product", '', 'ImageAndFluoroscopyAreaDoseProduct'), -0x00181160: ('SH', '1', "Filter Type", '', 'FilterType'), -0x00181161: ('LO', '1-n', "Type of Filters", '', 'TypeOfFilters'), -0x00181162: ('DS', '1', "Intensifier Size", '', 'IntensifierSize'), -0x00181164: ('DS', '2', "Imager Pixel Spacing", '', 'ImagerPixelSpacing'), -0x00181166: ('CS', '1-n', "Grid", '', 'Grid'), -0x00181170: ('IS', '1', "Generator Power", '', 'GeneratorPower'), -0x00181180: ('SH', '1', "Collimator/grid Name", '', 'CollimatorGridName'), -0x00181181: ('CS', '1', "Collimator Type", '', 'CollimatorType'), -0x00181182: ('IS', '1-2', "Focal Distance", '', 'FocalDistance'), -0x00181183: ('DS', '1-2', "X Focus Center", '', 'XFocusCenter'), -0x00181184: ('DS', '1-2', "Y Focus Center", '', 'YFocusCenter'), -0x00181190: ('DS', '1-n', "Focal Spot(s)", '', 'FocalSpots'), -0x00181191: ('CS', '1', "Anode Target Material", '', 'AnodeTargetMaterial'), -0x001811A0: ('DS', '1', "Body Part Thickness", '', 'BodyPartThickness'), -0x001811A2: ('DS', '1', "Compression Force", '', 'CompressionForce'), -0x00181200: ('DA', '1-n', "Date of Last Calibration", '', 'DateOfLastCalibration'), -0x00181201: ('TM', '1-n', "Time of Last Calibration", '', 'TimeOfLastCalibration'), -0x00181210: ('SH', '1-n', "Convolution Kernel", '', 'ConvolutionKernel'), -0x00181240: ('IS', '1-n', "Upper/Lower Pixel Values", 'Retired', 'UpperLowerPixelValues'), -0x00181242: ('IS', '1', "Actual Frame Duration", '', 'ActualFrameDuration'), -0x00181243: ('IS', '1', "Count Rate", '', 'CountRate'), -0x00181244: ('US', '1', "Preferred Playback Sequencing", '', 'PreferredPlaybackSequencing'), -0x00181250: ('SH', '1', "Receive Coil Name", '', 'ReceiveCoilName'), -0x00181251: ('SH', '1', "Transmit Coil Name", '', 'TransmitCoilName'), -0x00181260: ('SH', '1', "Plate Type", '', 'PlateType'), -0x00181261: ('LO', '1', "Phosphor Type", '', 'PhosphorType'), -0x00181300: ('DS', '1', "Scan Velocity", '', 'ScanVelocity'), -0x00181301: ('CS', '1-n', "Whole Body Technique", '', 'WholeBodyTechnique'), -0x00181302: ('IS', '1', "Scan Length", '', 'ScanLength'), -0x00181310: ('US', '4', "Acquisition Matrix", '', 'AcquisitionMatrix'), -0x00181312: ('CS', '1', "In-plane Phase Encoding Direction", '', 'InPlanePhaseEncodingDirection'), -0x00181314: ('DS', '1', "Flip Angle", '', 'FlipAngle'), -0x00181315: ('CS', '1', "Variable Flip Angle Flag", '', 'VariableFlipAngleFlag'), -0x00181316: ('DS', '1', "SAR", '', 'SAR'), -0x00181318: ('DS', '1', "dB/dt", '', 'dBdt'), -0x00181400: ('LO', '1', "Acquisition Device Processing Description", '', 'AcquisitionDeviceProcessingDescription'), -0x00181401: ('LO', '1', "Acquisition Device Processing Code", '', 'AcquisitionDeviceProcessingCode'), -0x00181402: ('CS', '1', "Cassette Orientation", '', 'CassetteOrientation'), -0x00181403: ('CS', '1', "Cassette Size", '', 'CassetteSize'), -0x00181404: ('US', '1', "Exposures on Plate", '', 'ExposuresOnPlate'), -0x00181405: ('IS', '1', "Relative X-Ray Exposure", '', 'RelativeXRayExposure'), -0x00181411: ('DS', '1', "Exposure Index", '', 'ExposureIndex'), -0x00181412: ('DS', '1', "Target Exposure Index", '', 'TargetExposureIndex'), -0x00181413: ('DS', '1', "Deviation Index", '', 'DeviationIndex'), -0x00181450: ('DS', '1', "Column Angulation", '', 'ColumnAngulation'), -0x00181460: ('DS', '1', "Tomo Layer Height", '', 'TomoLayerHeight'), -0x00181470: ('DS', '1', "Tomo Angle", '', 'TomoAngle'), -0x00181480: ('DS', '1', "Tomo Time", '', 'TomoTime'), -0x00181490: ('CS', '1', "Tomo Type", '', 'TomoType'), -0x00181491: ('CS', '1', "Tomo Class", '', 'TomoClass'), -0x00181495: ('IS', '1', "Number of Tomosynthesis Source Images", '', 'NumberOfTomosynthesisSourceImages'), -0x00181500: ('CS', '1', "Positioner Motion", '', 'PositionerMotion'), -0x00181508: ('CS', '1', "Positioner Type", '', 'PositionerType'), -0x00181510: ('DS', '1', "Positioner Primary Angle", '', 'PositionerPrimaryAngle'), -0x00181511: ('DS', '1', "Positioner Secondary Angle", '', 'PositionerSecondaryAngle'), -0x00181520: ('DS', '1-n', "Positioner Primary Angle Increment", '', 'PositionerPrimaryAngleIncrement'), -0x00181521: ('DS', '1-n', "Positioner Secondary Angle Increment", '', 'PositionerSecondaryAngleIncrement'), -0x00181530: ('DS', '1', "Detector Primary Angle", '', 'DetectorPrimaryAngle'), -0x00181531: ('DS', '1', "Detector Secondary Angle", '', 'DetectorSecondaryAngle'), -0x00181600: ('CS', '1-3', "Shutter Shape", '', 'ShutterShape'), -0x00181602: ('IS', '1', "Shutter Left Vertical Edge", '', 'ShutterLeftVerticalEdge'), -0x00181604: ('IS', '1', "Shutter Right Vertical Edge", '', 'ShutterRightVerticalEdge'), -0x00181606: ('IS', '1', "Shutter Upper Horizontal Edge", '', 'ShutterUpperHorizontalEdge'), -0x00181608: ('IS', '1', "Shutter Lower Horizontal Edge", '', 'ShutterLowerHorizontalEdge'), -0x00181610: ('IS', '2', "Center of Circular Shutter", '', 'CenterOfCircularShutter'), -0x00181612: ('IS', '1', "Radius of Circular Shutter", '', 'RadiusOfCircularShutter'), -0x00181620: ('IS', '2-2n', "Vertices of the Polygonal Shutter", '', 'VerticesOfThePolygonalShutter'), -0x00181622: ('US', '1', "Shutter Presentation Value", '', 'ShutterPresentationValue'), -0x00181623: ('US', '1', "Shutter Overlay Group", '', 'ShutterOverlayGroup'), -0x00181624: ('US', '3', "Shutter Presentation Color CIELab Value", '', 'ShutterPresentationColorCIELabValue'), -0x00181700: ('CS', '1-3', "Collimator Shape", '', 'CollimatorShape'), -0x00181702: ('IS', '1', "Collimator Left Vertical Edge", '', 'CollimatorLeftVerticalEdge'), -0x00181704: ('IS', '1', "Collimator Right Vertical Edge", '', 'CollimatorRightVerticalEdge'), -0x00181706: ('IS', '1', "Collimator Upper Horizontal Edge", '', 'CollimatorUpperHorizontalEdge'), -0x00181708: ('IS', '1', "Collimator Lower Horizontal Edge", '', 'CollimatorLowerHorizontalEdge'), -0x00181710: ('IS', '2', "Center of Circular Collimator", '', 'CenterOfCircularCollimator'), -0x00181712: ('IS', '1', "Radius of Circular Collimator", '', 'RadiusOfCircularCollimator'), -0x00181720: ('IS', '2-2n', "Vertices of the Polygonal Collimator", '', 'VerticesOfThePolygonalCollimator'), -0x00181800: ('CS', '1', "Acquisition Time Synchronized", '', 'AcquisitionTimeSynchronized'), -0x00181801: ('SH', '1', "Time Source", '', 'TimeSource'), -0x00181802: ('CS', '1', "Time Distribution Protocol", '', 'TimeDistributionProtocol'), -0x00181803: ('LO', '1', "NTP Source Address", '', 'NTPSourceAddress'), -0x00182001: ('IS', '1-n', "Page Number Vector", '', 'PageNumberVector'), -0x00182002: ('SH', '1-n', "Frame Label Vector", '', 'FrameLabelVector'), -0x00182003: ('DS', '1-n', "Frame Primary Angle Vector", '', 'FramePrimaryAngleVector'), -0x00182004: ('DS', '1-n', "Frame Secondary Angle Vector", '', 'FrameSecondaryAngleVector'), -0x00182005: ('DS', '1-n', "Slice Location Vector", '', 'SliceLocationVector'), -0x00182006: ('SH', '1-n', "Display Window Label Vector", '', 'DisplayWindowLabelVector'), -0x00182010: ('DS', '2', "Nominal Scanned Pixel Spacing", '', 'NominalScannedPixelSpacing'), -0x00182020: ('CS', '1', "Digitizing Device Transport Direction", '', 'DigitizingDeviceTransportDirection'), -0x00182030: ('DS', '1', "Rotation of Scanned Film", '', 'RotationOfScannedFilm'), -0x00183100: ('CS', '1', "IVUS Acquisition", '', 'IVUSAcquisition'), -0x00183101: ('DS', '1', "IVUS Pullback Rate", '', 'IVUSPullbackRate'), -0x00183102: ('DS', '1', "IVUS Gated Rate", '', 'IVUSGatedRate'), -0x00183103: ('IS', '1', "IVUS Pullback Start Frame Number", '', 'IVUSPullbackStartFrameNumber'), -0x00183104: ('IS', '1', "IVUS Pullback Stop Frame Number", '', 'IVUSPullbackStopFrameNumber'), -0x00183105: ('IS', '1-n', "Lesion Number", '', 'LesionNumber'), -0x00184000: ('LT', '1', "Acquisition Comments", 'Retired', 'AcquisitionComments'), -0x00185000: ('SH', '1-n', "Output Power", '', 'OutputPower'), -0x00185010: ('LO', '1-n', "Transducer Data", '', 'TransducerData'), -0x00185012: ('DS', '1', "Focus Depth", '', 'FocusDepth'), -0x00185020: ('LO', '1', "Processing Function", '', 'ProcessingFunction'), -0x00185021: ('LO', '1', "Postprocessing Function", 'Retired', 'PostprocessingFunction'), -0x00185022: ('DS', '1', "Mechanical Index", '', 'MechanicalIndex'), -0x00185024: ('DS', '1', "Bone Thermal Index", '', 'BoneThermalIndex'), -0x00185026: ('DS', '1', "Cranial Thermal Index", '', 'CranialThermalIndex'), -0x00185027: ('DS', '1', "Soft Tissue Thermal Index", '', 'SoftTissueThermalIndex'), -0x00185028: ('DS', '1', "Soft Tissue-focus Thermal Index", '', 'SoftTissueFocusThermalIndex'), -0x00185029: ('DS', '1', "Soft Tissue-surface Thermal Index", '', 'SoftTissueSurfaceThermalIndex'), -0x00185030: ('DS', '1', "Dynamic Range", 'Retired', 'DynamicRange'), -0x00185040: ('DS', '1', "Total Gain", 'Retired', 'TotalGain'), -0x00185050: ('IS', '1', "Depth of Scan Field", '', 'DepthOfScanField'), -0x00185100: ('CS', '1', "Patient Position", '', 'PatientPosition'), -0x00185101: ('CS', '1', "View Position", '', 'ViewPosition'), -0x00185104: ('SQ', '1', "Projection Eponymous Name Code Sequence", '', 'ProjectionEponymousNameCodeSequence'), -0x00185210: ('DS', '6', "Image Transformation Matrix", 'Retired', 'ImageTransformationMatrix'), -0x00185212: ('DS', '3', "Image Translation Vector", 'Retired', 'ImageTranslationVector'), -0x00186000: ('DS', '1', "Sensitivity", '', 'Sensitivity'), -0x00186011: ('SQ', '1', "Sequence of Ultrasound Regions", '', 'SequenceOfUltrasoundRegions'), -0x00186012: ('US', '1', "Region Spatial Format", '', 'RegionSpatialFormat'), -0x00186014: ('US', '1', "Region Data Type", '', 'RegionDataType'), -0x00186016: ('UL', '1', "Region Flags", '', 'RegionFlags'), -0x00186018: ('UL', '1', "Region Location Min X0", '', 'RegionLocationMinX0'), -0x0018601A: ('UL', '1', "Region Location Min Y0", '', 'RegionLocationMinY0'), -0x0018601C: ('UL', '1', "Region Location Max X1", '', 'RegionLocationMaxX1'), -0x0018601E: ('UL', '1', "Region Location Max Y1", '', 'RegionLocationMaxY1'), -0x00186020: ('SL', '1', "Reference Pixel X0", '', 'ReferencePixelX0'), -0x00186022: ('SL', '1', "Reference Pixel Y0", '', 'ReferencePixelY0'), -0x00186024: ('US', '1', "Physical Units X Direction", '', 'PhysicalUnitsXDirection'), -0x00186026: ('US', '1', "Physical Units Y Direction", '', 'PhysicalUnitsYDirection'), -0x00186028: ('FD', '1', "Reference Pixel Physical Value X", '', 'ReferencePixelPhysicalValueX'), -0x0018602A: ('FD', '1', "Reference Pixel Physical Value Y", '', 'ReferencePixelPhysicalValueY'), -0x0018602C: ('FD', '1', "Physical Delta X", '', 'PhysicalDeltaX'), -0x0018602E: ('FD', '1', "Physical Delta Y", '', 'PhysicalDeltaY'), -0x00186030: ('UL', '1', "Transducer Frequency", '', 'TransducerFrequency'), -0x00186031: ('CS', '1', "Transducer Type", '', 'TransducerType'), -0x00186032: ('UL', '1', "Pulse Repetition Frequency", '', 'PulseRepetitionFrequency'), -0x00186034: ('FD', '1', "Doppler Correction Angle", '', 'DopplerCorrectionAngle'), -0x00186036: ('FD', '1', "Steering Angle", '', 'SteeringAngle'), -0x00186038: ('UL', '1', "Doppler Sample Volume X Position (Retired)", 'Retired', 'DopplerSampleVolumeXPositionRetired'), -0x00186039: ('SL', '1', "Doppler Sample Volume X Position", '', 'DopplerSampleVolumeXPosition'), -0x0018603A: ('UL', '1', "Doppler Sample Volume Y Position (Retired)", 'Retired', 'DopplerSampleVolumeYPositionRetired'), -0x0018603B: ('SL', '1', "Doppler Sample Volume Y Position", '', 'DopplerSampleVolumeYPosition'), -0x0018603C: ('UL', '1', "TM-Line Position X0 (Retired)", 'Retired', 'TMLinePositionX0Retired'), -0x0018603D: ('SL', '1', "TM-Line Position X0", '', 'TMLinePositionX0'), -0x0018603E: ('UL', '1', "TM-Line Position Y0 (Retired)", 'Retired', 'TMLinePositionY0Retired'), -0x0018603F: ('SL', '1', "TM-Line Position Y0", '', 'TMLinePositionY0'), -0x00186040: ('UL', '1', "TM-Line Position X1 (Retired)", 'Retired', 'TMLinePositionX1Retired'), -0x00186041: ('SL', '1', "TM-Line Position X1", '', 'TMLinePositionX1'), -0x00186042: ('UL', '1', "TM-Line Position Y1 (Retired)", 'Retired', 'TMLinePositionY1Retired'), -0x00186043: ('SL', '1', "TM-Line Position Y1", '', 'TMLinePositionY1'), -0x00186044: ('US', '1', "Pixel Component Organization", '', 'PixelComponentOrganization'), -0x00186046: ('UL', '1', "Pixel Component Mask", '', 'PixelComponentMask'), -0x00186048: ('UL', '1', "Pixel Component Range Start", '', 'PixelComponentRangeStart'), -0x0018604A: ('UL', '1', "Pixel Component Range Stop", '', 'PixelComponentRangeStop'), -0x0018604C: ('US', '1', "Pixel Component Physical Units", '', 'PixelComponentPhysicalUnits'), -0x0018604E: ('US', '1', "Pixel Component Data Type", '', 'PixelComponentDataType'), -0x00186050: ('UL', '1', "Number of Table Break Points", '', 'NumberOfTableBreakPoints'), -0x00186052: ('UL', '1-n', "Table of X Break Points", '', 'TableOfXBreakPoints'), -0x00186054: ('FD', '1-n', "Table of Y Break Points", '', 'TableOfYBreakPoints'), -0x00186056: ('UL', '1', "Number of Table Entries", '', 'NumberOfTableEntries'), -0x00186058: ('UL', '1-n', "Table of Pixel Values", '', 'TableOfPixelValues'), -0x0018605A: ('FL', '1-n', "Table of Parameter Values", '', 'TableOfParameterValues'), -0x00186060: ('FL', '1-n', "R Wave Time Vector", '', 'RWaveTimeVector'), -0x00187000: ('CS', '1', "Detector Conditions Nominal Flag", '', 'DetectorConditionsNominalFlag'), -0x00187001: ('DS', '1', "Detector Temperature", '', 'DetectorTemperature'), -0x00187004: ('CS', '1', "Detector Type", '', 'DetectorType'), -0x00187005: ('CS', '1', "Detector Configuration", '', 'DetectorConfiguration'), -0x00187006: ('LT', '1', "Detector Description", '', 'DetectorDescription'), -0x00187008: ('LT', '1', "Detector Mode", '', 'DetectorMode'), -0x0018700A: ('SH', '1', "Detector ID", '', 'DetectorID'), -0x0018700C: ('DA', '1', "Date of Last Detector Calibration", '', 'DateOfLastDetectorCalibration'), -0x0018700E: ('TM', '1', "Time of Last Detector Calibration", '', 'TimeOfLastDetectorCalibration'), -0x00187010: ('IS', '1', "Exposures on Detector Since Last Calibration", '', 'ExposuresOnDetectorSinceLastCalibration'), -0x00187011: ('IS', '1', "Exposures on Detector Since Manufactured", '', 'ExposuresOnDetectorSinceManufactured'), -0x00187012: ('DS', '1', "Detector Time Since Last Exposure", '', 'DetectorTimeSinceLastExposure'), -0x00187014: ('DS', '1', "Detector Active Time", '', 'DetectorActiveTime'), -0x00187016: ('DS', '1', "Detector Activation Offset From Exposure", '', 'DetectorActivationOffsetFromExposure'), -0x0018701A: ('DS', '2', "Detector Binning", '', 'DetectorBinning'), -0x00187020: ('DS', '2', "Detector Element Physical Size", '', 'DetectorElementPhysicalSize'), -0x00187022: ('DS', '2', "Detector Element Spacing", '', 'DetectorElementSpacing'), -0x00187024: ('CS', '1', "Detector Active Shape", '', 'DetectorActiveShape'), -0x00187026: ('DS', '1-2', "Detector Active Dimension(s)", '', 'DetectorActiveDimensions'), -0x00187028: ('DS', '2', "Detector Active Origin", '', 'DetectorActiveOrigin'), -0x0018702A: ('LO', '1', "Detector Manufacturer Name", '', 'DetectorManufacturerName'), -0x0018702B: ('LO', '1', "Detector Manufacturer's Model Name", '', 'DetectorManufacturerModelName'), -0x00187030: ('DS', '2', "Field of View Origin", '', 'FieldOfViewOrigin'), -0x00187032: ('DS', '1', "Field of View Rotation", '', 'FieldOfViewRotation'), -0x00187034: ('CS', '1', "Field of View Horizontal Flip", '', 'FieldOfViewHorizontalFlip'), -0x00187036: ('FL', '2', "Pixel Data Area Origin Relative To FOV", '', 'PixelDataAreaOriginRelativeToFOV'), -0x00187038: ('FL', '1', "Pixel Data Area Rotation Angle Relative To FOV", '', 'PixelDataAreaRotationAngleRelativeToFOV'), -0x00187040: ('LT', '1', "Grid Absorbing Material", '', 'GridAbsorbingMaterial'), -0x00187041: ('LT', '1', "Grid Spacing Material", '', 'GridSpacingMaterial'), -0x00187042: ('DS', '1', "Grid Thickness", '', 'GridThickness'), -0x00187044: ('DS', '1', "Grid Pitch", '', 'GridPitch'), -0x00187046: ('IS', '2', "Grid Aspect Ratio", '', 'GridAspectRatio'), -0x00187048: ('DS', '1', "Grid Period", '', 'GridPeriod'), -0x0018704C: ('DS', '1', "Grid Focal Distance", '', 'GridFocalDistance'), -0x00187050: ('CS', '1-n', "Filter Material", '', 'FilterMaterial'), -0x00187052: ('DS', '1-n', "Filter Thickness Minimum", '', 'FilterThicknessMinimum'), -0x00187054: ('DS', '1-n', "Filter Thickness Maximum", '', 'FilterThicknessMaximum'), -0x00187056: ('FL', '1-n', "Filter Beam Path Length Minimum", '', 'FilterBeamPathLengthMinimum'), -0x00187058: ('FL', '1-n', "Filter Beam Path Length Maximum", '', 'FilterBeamPathLengthMaximum'), -0x00187060: ('CS', '1', "Exposure Control Mode", '', 'ExposureControlMode'), -0x00187062: ('LT', '1', "Exposure Control Mode Description", '', 'ExposureControlModeDescription'), -0x00187064: ('CS', '1', "Exposure Status", '', 'ExposureStatus'), -0x00187065: ('DS', '1', "Phototimer Setting", '', 'PhototimerSetting'), -0x00188150: ('DS', '1', "Exposure Time in uS", '', 'ExposureTimeInuS'), -0x00188151: ('DS', '1', "X-Ray Tube Current in uA", '', 'XRayTubeCurrentInuA'), -0x00189004: ('CS', '1', "Content Qualification", '', 'ContentQualification'), -0x00189005: ('SH', '1', "Pulse Sequence Name", '', 'PulseSequenceName'), -0x00189006: ('SQ', '1', "MR Imaging Modifier Sequence", '', 'MRImagingModifierSequence'), -0x00189008: ('CS', '1', "Echo Pulse Sequence", '', 'EchoPulseSequence'), -0x00189009: ('CS', '1', "Inversion Recovery", '', 'InversionRecovery'), -0x00189010: ('CS', '1', "Flow Compensation", '', 'FlowCompensation'), -0x00189011: ('CS', '1', "Multiple Spin Echo", '', 'MultipleSpinEcho'), -0x00189012: ('CS', '1', "Multi-planar Excitation", '', 'MultiPlanarExcitation'), -0x00189014: ('CS', '1', "Phase Contrast", '', 'PhaseContrast'), -0x00189015: ('CS', '1', "Time of Flight Contrast", '', 'TimeOfFlightContrast'), -0x00189016: ('CS', '1', "Spoiling", '', 'Spoiling'), -0x00189017: ('CS', '1', "Steady State Pulse Sequence", '', 'SteadyStatePulseSequence'), -0x00189018: ('CS', '1', "Echo Planar Pulse Sequence", '', 'EchoPlanarPulseSequence'), -0x00189019: ('FD', '1', "Tag Angle First Axis", '', 'TagAngleFirstAxis'), -0x00189020: ('CS', '1', "Magnetization Transfer", '', 'MagnetizationTransfer'), -0x00189021: ('CS', '1', "T2 Preparation", '', 'T2Preparation'), -0x00189022: ('CS', '1', "Blood Signal Nulling", '', 'BloodSignalNulling'), -0x00189024: ('CS', '1', "Saturation Recovery", '', 'SaturationRecovery'), -0x00189025: ('CS', '1', "Spectrally Selected Suppression", '', 'SpectrallySelectedSuppression'), -0x00189026: ('CS', '1', "Spectrally Selected Excitation", '', 'SpectrallySelectedExcitation'), -0x00189027: ('CS', '1', "Spatial Pre-saturation", '', 'SpatialPresaturation'), -0x00189028: ('CS', '1', "Tagging", '', 'Tagging'), -0x00189029: ('CS', '1', "Oversampling Phase", '', 'OversamplingPhase'), -0x00189030: ('FD', '1', "Tag Spacing First Dimension", '', 'TagSpacingFirstDimension'), -0x00189032: ('CS', '1', "Geometry of k-Space Traversal", '', 'GeometryOfKSpaceTraversal'), -0x00189033: ('CS', '1', "Segmented k-Space Traversal", '', 'SegmentedKSpaceTraversal'), -0x00189034: ('CS', '1', "Rectilinear Phase Encode Reordering", '', 'RectilinearPhaseEncodeReordering'), -0x00189035: ('FD', '1', "Tag Thickness", '', 'TagThickness'), -0x00189036: ('CS', '1', "Partial Fourier Direction", '', 'PartialFourierDirection'), -0x00189037: ('CS', '1', "Cardiac Synchronization Technique", '', 'CardiacSynchronizationTechnique'), -0x00189041: ('LO', '1', "Receive Coil Manufacturer Name", '', 'ReceiveCoilManufacturerName'), -0x00189042: ('SQ', '1', "MR Receive Coil Sequence", '', 'MRReceiveCoilSequence'), -0x00189043: ('CS', '1', "Receive Coil Type", '', 'ReceiveCoilType'), -0x00189044: ('CS', '1', "Quadrature Receive Coil", '', 'QuadratureReceiveCoil'), -0x00189045: ('SQ', '1', "Multi-Coil Definition Sequence", '', 'MultiCoilDefinitionSequence'), -0x00189046: ('LO', '1', "Multi-Coil Configuration", '', 'MultiCoilConfiguration'), -0x00189047: ('SH', '1', "Multi-Coil Element Name", '', 'MultiCoilElementName'), -0x00189048: ('CS', '1', "Multi-Coil Element Used", '', 'MultiCoilElementUsed'), -0x00189049: ('SQ', '1', "MR Transmit Coil Sequence", '', 'MRTransmitCoilSequence'), -0x00189050: ('LO', '1', "Transmit Coil Manufacturer Name", '', 'TransmitCoilManufacturerName'), -0x00189051: ('CS', '1', "Transmit Coil Type", '', 'TransmitCoilType'), -0x00189052: ('FD', '1-2', "Spectral Width", '', 'SpectralWidth'), -0x00189053: ('FD', '1-2', "Chemical Shift Reference", '', 'ChemicalShiftReference'), -0x00189054: ('CS', '1', "Volume Localization Technique", '', 'VolumeLocalizationTechnique'), -0x00189058: ('US', '1', "MR Acquisition Frequency Encoding Steps", '', 'MRAcquisitionFrequencyEncodingSteps'), -0x00189059: ('CS', '1', "De-coupling", '', 'Decoupling'), -0x00189060: ('CS', '1-2', "De-coupled Nucleus", '', 'DecoupledNucleus'), -0x00189061: ('FD', '1-2', "De-coupling Frequency", '', 'DecouplingFrequency'), -0x00189062: ('CS', '1', "De-coupling Method", '', 'DecouplingMethod'), -0x00189063: ('FD', '1-2', "De-coupling Chemical Shift Reference", '', 'DecouplingChemicalShiftReference'), -0x00189064: ('CS', '1', "k-space Filtering", '', 'KSpaceFiltering'), -0x00189065: ('CS', '1-2', "Time Domain Filtering", '', 'TimeDomainFiltering'), -0x00189066: ('US', '1-2', "Number of Zero Fills", '', 'NumberOfZeroFills'), -0x00189067: ('CS', '1', "Baseline Correction", '', 'BaselineCorrection'), -0x00189069: ('FD', '1', "Parallel Reduction Factor In-plane", '', 'ParallelReductionFactorInPlane'), -0x00189070: ('FD', '1', "Cardiac R-R Interval Specified", '', 'CardiacRRIntervalSpecified'), -0x00189073: ('FD', '1', "Acquisition Duration", '', 'AcquisitionDuration'), -0x00189074: ('DT', '1', "Frame Acquisition DateTime", '', 'FrameAcquisitionDateTime'), -0x00189075: ('CS', '1', "Diffusion Directionality", '', 'DiffusionDirectionality'), -0x00189076: ('SQ', '1', "Diffusion Gradient Direction Sequence", '', 'DiffusionGradientDirectionSequence'), -0x00189077: ('CS', '1', "Parallel Acquisition", '', 'ParallelAcquisition'), -0x00189078: ('CS', '1', "Parallel Acquisition Technique", '', 'ParallelAcquisitionTechnique'), -0x00189079: ('FD', '1-n', "Inversion Times", '', 'InversionTimes'), -0x00189080: ('ST', '1', "Metabolite Map Description", '', 'MetaboliteMapDescription'), -0x00189081: ('CS', '1', "Partial Fourier", '', 'PartialFourier'), -0x00189082: ('FD', '1', "Effective Echo Time", '', 'EffectiveEchoTime'), -0x00189083: ('SQ', '1', "Metabolite Map Code Sequence", '', 'MetaboliteMapCodeSequence'), -0x00189084: ('SQ', '1', "Chemical Shift Sequence", '', 'ChemicalShiftSequence'), -0x00189085: ('CS', '1', "Cardiac Signal Source", '', 'CardiacSignalSource'), -0x00189087: ('FD', '1', "Diffusion b-value", '', 'DiffusionBValue'), -0x00189089: ('FD', '3', "Diffusion Gradient Orientation", '', 'DiffusionGradientOrientation'), -0x00189090: ('FD', '3', "Velocity Encoding Direction", '', 'VelocityEncodingDirection'), -0x00189091: ('FD', '1', "Velocity Encoding Minimum Value", '', 'VelocityEncodingMinimumValue'), -0x00189092: ('SQ', '1', "Velocity Encoding Acquisition Sequence", '', 'VelocityEncodingAcquisitionSequence'), -0x00189093: ('US', '1', "Number of k-Space Trajectories", '', 'NumberOfKSpaceTrajectories'), -0x00189094: ('CS', '1', "Coverage of k-Space", '', 'CoverageOfKSpace'), -0x00189095: ('UL', '1', "Spectroscopy Acquisition Phase Rows", '', 'SpectroscopyAcquisitionPhaseRows'), -0x00189096: ('FD', '1', "Parallel Reduction Factor In-plane (Retired)", 'Retired', 'ParallelReductionFactorInPlaneRetired'), -0x00189098: ('FD', '1-2', "Transmitter Frequency", '', 'TransmitterFrequency'), -0x00189100: ('CS', '1-2', "Resonant Nucleus", '', 'ResonantNucleus'), -0x00189101: ('CS', '1', "Frequency Correction", '', 'FrequencyCorrection'), -0x00189103: ('SQ', '1', "MR Spectroscopy FOV/Geometry Sequence", '', 'MRSpectroscopyFOVGeometrySequence'), -0x00189104: ('FD', '1', "Slab Thickness", '', 'SlabThickness'), -0x00189105: ('FD', '3', "Slab Orientation", '', 'SlabOrientation'), -0x00189106: ('FD', '3', "Mid Slab Position", '', 'MidSlabPosition'), -0x00189107: ('SQ', '1', "MR Spatial Saturation Sequence", '', 'MRSpatialSaturationSequence'), -0x00189112: ('SQ', '1', "MR Timing and Related Parameters Sequence", '', 'MRTimingAndRelatedParametersSequence'), -0x00189114: ('SQ', '1', "MR Echo Sequence", '', 'MREchoSequence'), -0x00189115: ('SQ', '1', "MR Modifier Sequence", '', 'MRModifierSequence'), -0x00189117: ('SQ', '1', "MR Diffusion Sequence", '', 'MRDiffusionSequence'), -0x00189118: ('SQ', '1', "Cardiac Synchronization", '', 'CardiacSynchronization'), -0x00189119: ('SQ', '1', "MR Averages Sequence", '', 'MRAveragesSequence'), -0x00189125: ('SQ', '1', "MR FOV/Geometry Sequence", '', 'MRFOVGeometrySequence'), -0x00189126: ('SQ', '1', "Volume Localization Sequence", '', 'VolumeLocalizationSequence'), -0x00189127: ('UL', '1', "Spectroscopy Acquisition Data Columns", '', 'SpectroscopyAcquisitionDataColumns'), -0x00189147: ('CS', '1', "Diffusion Anisotropy Type", '', 'DiffusionAnisotropyType'), -0x00189151: ('DT', '1', "Frame Reference DateTime", '', 'FrameReferenceDateTime'), -0x00189152: ('SQ', '1', "MR Metabolite Map Sequence", '', 'MRMetaboliteMapSequence'), -0x00189155: ('FD', '1', "Parallel Reduction Factor out-of-plane", '', 'ParallelReductionFactorOutOfPlane'), -0x00189159: ('UL', '1', "Spectroscopy Acquisition Out-of-plane Phase Steps", '', 'SpectroscopyAcquisitionOutOfPlanePhaseSteps'), -0x00189166: ('CS', '1', "Bulk Motion Status", 'Retired', 'BulkMotionStatus'), -0x00189168: ('FD', '1', "Parallel Reduction Factor Second In-plane", '', 'ParallelReductionFactorSecondInPlane'), -0x00189169: ('CS', '1', "Cardiac Beat Rejection Technique", '', 'CardiacBeatRejectionTechnique'), -0x00189170: ('CS', '1', "Respiratory Motion Compensation Technique", '', 'RespiratoryMotionCompensationTechnique'), -0x00189171: ('CS', '1', "Respiratory Signal Source", '', 'RespiratorySignalSource'), -0x00189172: ('CS', '1', "Bulk Motion Compensation Technique", '', 'BulkMotionCompensationTechnique'), -0x00189173: ('CS', '1', "Bulk Motion Signal Source", '', 'BulkMotionSignalSource'), -0x00189174: ('CS', '1', "Applicable Safety Standard Agency", '', 'ApplicableSafetyStandardAgency'), -0x00189175: ('LO', '1', "Applicable Safety Standard Description", '', 'ApplicableSafetyStandardDescription'), -0x00189176: ('SQ', '1', "Operating Mode Sequence", '', 'OperatingModeSequence'), -0x00189177: ('CS', '1', "Operating Mode Type", '', 'OperatingModeType'), -0x00189178: ('CS', '1', "Operating Mode", '', 'OperatingMode'), -0x00189179: ('CS', '1', "Specific Absorption Rate Definition", '', 'SpecificAbsorptionRateDefinition'), -0x00189180: ('CS', '1', "Gradient Output Type", '', 'GradientOutputType'), -0x00189181: ('FD', '1', "Specific Absorption Rate Value", '', 'SpecificAbsorptionRateValue'), -0x00189182: ('FD', '1', "Gradient Output", '', 'GradientOutput'), -0x00189183: ('CS', '1', "Flow Compensation Direction", '', 'FlowCompensationDirection'), -0x00189184: ('FD', '1', "Tagging Delay", '', 'TaggingDelay'), -0x00189185: ('ST', '1', "Respiratory Motion Compensation Technique Description", '', 'RespiratoryMotionCompensationTechniqueDescription'), -0x00189186: ('SH', '1', "Respiratory Signal Source ID", '', 'RespiratorySignalSourceID'), -0x00189195: ('FD', '1', "Chemical Shift Minimum Integration Limit in Hz", 'Retired', 'ChemicalShiftMinimumIntegrationLimitInHz'), -0x00189196: ('FD', '1', "Chemical Shift Maximum Integration Limit in Hz", 'Retired', 'ChemicalShiftMaximumIntegrationLimitInHz'), -0x00189197: ('SQ', '1', "MR Velocity Encoding Sequence", '', 'MRVelocityEncodingSequence'), -0x00189198: ('CS', '1', "First Order Phase Correction", '', 'FirstOrderPhaseCorrection'), -0x00189199: ('CS', '1', "Water Referenced Phase Correction", '', 'WaterReferencedPhaseCorrection'), -0x00189200: ('CS', '1', "MR Spectroscopy Acquisition Type", '', 'MRSpectroscopyAcquisitionType'), -0x00189214: ('CS', '1', "Respiratory Cycle Position", '', 'RespiratoryCyclePosition'), -0x00189217: ('FD', '1', "Velocity Encoding Maximum Value", '', 'VelocityEncodingMaximumValue'), -0x00189218: ('FD', '1', "Tag Spacing Second Dimension", '', 'TagSpacingSecondDimension'), -0x00189219: ('SS', '1', "Tag Angle Second Axis", '', 'TagAngleSecondAxis'), -0x00189220: ('FD', '1', "Frame Acquisition Duration", '', 'FrameAcquisitionDuration'), -0x00189226: ('SQ', '1', "MR Image Frame Type Sequence", '', 'MRImageFrameTypeSequence'), -0x00189227: ('SQ', '1', "MR Spectroscopy Frame Type Sequence", '', 'MRSpectroscopyFrameTypeSequence'), -0x00189231: ('US', '1', "MR Acquisition Phase Encoding Steps in-plane", '', 'MRAcquisitionPhaseEncodingStepsInPlane'), -0x00189232: ('US', '1', "MR Acquisition Phase Encoding Steps out-of-plane", '', 'MRAcquisitionPhaseEncodingStepsOutOfPlane'), -0x00189234: ('UL', '1', "Spectroscopy Acquisition Phase Columns", '', 'SpectroscopyAcquisitionPhaseColumns'), -0x00189236: ('CS', '1', "Cardiac Cycle Position", '', 'CardiacCyclePosition'), -0x00189239: ('SQ', '1', "Specific Absorption Rate Sequence", '', 'SpecificAbsorptionRateSequence'), -0x00189240: ('US', '1', "RF Echo Train Length", '', 'RFEchoTrainLength'), -0x00189241: ('US', '1', "Gradient Echo Train Length", '', 'GradientEchoTrainLength'), -0x00189250: ('CS', '1', "Arterial Spin Labeling Contrast", '', 'ArterialSpinLabelingContrast'), -0x00189251: ('SQ', '1', "MR Arterial Spin Labeling Sequence", '', 'MRArterialSpinLabeling'), -0x00189252: ('LO', '1', "ASL Technique Description", '', 'ASLTechniqueDescription'), -0x00189253: ('US', '1', "ASL Slab Number", '', 'ASLSlabNumber'), -0x00189254: ('FD', '1', "ASL Slab Thickness", '', 'ASLSlabThickness'), -0x00189255: ('FD', '3', "ASL Slab Orientation", '', 'ASLSlabOrientation'), -0x00189256: ('FD', '3', "ASL Mid Slab Position", '', 'ASLMidSlabPosition'), -0x00189257: ('CS', '1', "ASL Context", '', 'ASLContext'), -0x00189258: ('UL', '1', "ASL Pulse Train Duration", '', 'ASLPulseTrainDuration'), -0x00189259: ('CS', '1', "ASL Crusher Flag", '', 'ASLCrusherFlag'), -0x0018925A: ('FD', '1', "ASL Crusher Flow", '', 'ASLCrusherFlow'), -0x0018925B: ('LO', '1', "ASL Crusher Description", '', 'ASLCrusherDescription'), -0x0018925C: ('CS', '1', "ASL Bolus Cut-off Flag", '', 'ASLBolusCutoffFlag'), -0x0018925D: ('SQ', '1', "ASL Bolus Cut-off Timing Sequence", '', 'ASLBolusCutoffTimingSequence'), -0x0018925E: ('LO', '1', "ASL Bolus Cut-off Technique", '', 'ASLBolusCutoffTechnique'), -0x0018925F: ('UL', '1', "ASL Bolus Cut-off Delay Time", '', 'ASLBolusCutoffDelayTime'), -0x00189260: ('SQ', '1', "ASL Slab Sequence", '', 'ASLSlabSequence'), -0x00189295: ('FD', '1', "Chemical Shift Minimum Integration Limit in ppm", '', 'ChemicalShiftMinimumIntegrationLimitInppm'), -0x00189296: ('FD', '1', "Chemical Shift Maximum Integration Limit in ppm", '', 'ChemicalShiftMaximumIntegrationLimitInppm'), -0x00189301: ('SQ', '1', "CT Acquisition Type Sequence", '', 'CTAcquisitionTypeSequence'), -0x00189302: ('CS', '1', "Acquisition Type", '', 'AcquisitionType'), -0x00189303: ('FD', '1', "Tube Angle", '', 'TubeAngle'), -0x00189304: ('SQ', '1', "CT Acquisition Details Sequence", '', 'CTAcquisitionDetailsSequence'), -0x00189305: ('FD', '1', "Revolution Time", '', 'RevolutionTime'), -0x00189306: ('FD', '1', "Single Collimation Width", '', 'SingleCollimationWidth'), -0x00189307: ('FD', '1', "Total Collimation Width", '', 'TotalCollimationWidth'), -0x00189308: ('SQ', '1', "CT Table Dynamics Sequence", '', 'CTTableDynamicsSequence'), -0x00189309: ('FD', '1', "Table Speed", '', 'TableSpeed'), -0x00189310: ('FD', '1', "Table Feed per Rotation", '', 'TableFeedPerRotation'), -0x00189311: ('FD', '1', "Spiral Pitch Factor", '', 'SpiralPitchFactor'), -0x00189312: ('SQ', '1', "CT Geometry Sequence", '', 'CTGeometrySequence'), -0x00189313: ('FD', '3', "Data Collection Center (Patient)", '', 'DataCollectionCenterPatient'), -0x00189314: ('SQ', '1', "CT Reconstruction Sequence", '', 'CTReconstructionSequence'), -0x00189315: ('CS', '1', "Reconstruction Algorithm", '', 'ReconstructionAlgorithm'), -0x00189316: ('CS', '1', "Convolution Kernel Group", '', 'ConvolutionKernelGroup'), -0x00189317: ('FD', '2', "Reconstruction Field of View", '', 'ReconstructionFieldOfView'), -0x00189318: ('FD', '3', "Reconstruction Target Center (Patient)", '', 'ReconstructionTargetCenterPatient'), -0x00189319: ('FD', '1', "Reconstruction Angle", '', 'ReconstructionAngle'), -0x00189320: ('SH', '1', "Image Filter", '', 'ImageFilter'), -0x00189321: ('SQ', '1', "CT Exposure Sequence", '', 'CTExposureSequence'), -0x00189322: ('FD', '2', "Reconstruction Pixel Spacing", '', 'ReconstructionPixelSpacing'), -0x00189323: ('CS', '1', "Exposure Modulation Type", '', 'ExposureModulationType'), -0x00189324: ('FD', '1', "Estimated Dose Saving", '', 'EstimatedDoseSaving'), -0x00189325: ('SQ', '1', "CT X-Ray Details Sequence", '', 'CTXRayDetailsSequence'), -0x00189326: ('SQ', '1', "CT Position Sequence", '', 'CTPositionSequence'), -0x00189327: ('FD', '1', "Table Position", '', 'TablePosition'), -0x00189328: ('FD', '1', "Exposure Time in ms", '', 'ExposureTimeInms'), -0x00189329: ('SQ', '1', "CT Image Frame Type Sequence", '', 'CTImageFrameTypeSequence'), -0x00189330: ('FD', '1', "X-Ray Tube Current in mA", '', 'XRayTubeCurrentInmA'), -0x00189332: ('FD', '1', "Exposure in mAs", '', 'ExposureInmAs'), -0x00189333: ('CS', '1', "Constant Volume Flag", '', 'ConstantVolumeFlag'), -0x00189334: ('CS', '1', "Fluoroscopy Flag", '', 'FluoroscopyFlag'), -0x00189335: ('FD', '1', "Distance Source to Data Collection Center", '', 'DistanceSourceToDataCollectionCenter'), -0x00189337: ('US', '1', "Contrast/Bolus Agent Number", '', 'ContrastBolusAgentNumber'), -0x00189338: ('SQ', '1', "Contrast/Bolus Ingredient Code Sequence", '', 'ContrastBolusIngredientCodeSequence'), -0x00189340: ('SQ', '1', "Contrast Administration Profile Sequence", '', 'ContrastAdministrationProfileSequence'), -0x00189341: ('SQ', '1', "Contrast/Bolus Usage Sequence", '', 'ContrastBolusUsageSequence'), -0x00189342: ('CS', '1', "Contrast/Bolus Agent Administered", '', 'ContrastBolusAgentAdministered'), -0x00189343: ('CS', '1', "Contrast/Bolus Agent Detected", '', 'ContrastBolusAgentDetected'), -0x00189344: ('CS', '1', "Contrast/Bolus Agent Phase", '', 'ContrastBolusAgentPhase'), -0x00189345: ('FD', '1', "CTDIvol", '', 'CTDIvol'), -0x00189346: ('SQ', '1', "CTDI Phantom Type Code Sequence", '', 'CTDIPhantomTypeCodeSequence'), -0x00189351: ('FL', '1', "Calcium Scoring Mass Factor Patient", '', 'CalciumScoringMassFactorPatient'), -0x00189352: ('FL', '3', "Calcium Scoring Mass Factor Device", '', 'CalciumScoringMassFactorDevice'), -0x00189353: ('FL', '1', "Energy Weighting Factor", '', 'EnergyWeightingFactor'), -0x00189360: ('SQ', '1', "CT Additional X-Ray Source Sequence", '', 'CTAdditionalXRaySourceSequence'), -0x00189401: ('SQ', '1', "Projection Pixel Calibration Sequence", '', 'ProjectionPixelCalibrationSequence'), -0x00189402: ('FL', '1', "Distance Source to Isocenter", '', 'DistanceSourceToIsocenter'), -0x00189403: ('FL', '1', "Distance Object to Table Top", '', 'DistanceObjectToTableTop'), -0x00189404: ('FL', '2', "Object Pixel Spacing in Center of Beam", '', 'ObjectPixelSpacingInCenterOfBeam'), -0x00189405: ('SQ', '1', "Positioner Position Sequence", '', 'PositionerPositionSequence'), -0x00189406: ('SQ', '1', "Table Position Sequence", '', 'TablePositionSequence'), -0x00189407: ('SQ', '1', "Collimator Shape Sequence", '', 'CollimatorShapeSequence'), -0x00189410: ('CS', '1', "Planes in Acquisition", '', 'PlanesInAcquisition'), -0x00189412: ('SQ', '1', "XA/XRF Frame Characteristics Sequence", '', 'XAXRFFrameCharacteristicsSequence'), -0x00189417: ('SQ', '1', "Frame Acquisition Sequence", '', 'FrameAcquisitionSequence'), -0x00189420: ('CS', '1', "X-Ray Receptor Type", '', 'XRayReceptorType'), -0x00189423: ('LO', '1', "Acquisition Protocol Name", '', 'AcquisitionProtocolName'), -0x00189424: ('LT', '1', "Acquisition Protocol Description", '', 'AcquisitionProtocolDescription'), -0x00189425: ('CS', '1', "Contrast/Bolus Ingredient Opaque", '', 'ContrastBolusIngredientOpaque'), -0x00189426: ('FL', '1', "Distance Receptor Plane to Detector Housing", '', 'DistanceReceptorPlaneToDetectorHousing'), -0x00189427: ('CS', '1', "Intensifier Active Shape", '', 'IntensifierActiveShape'), -0x00189428: ('FL', '1-2', "Intensifier Active Dimension(s)", '', 'IntensifierActiveDimensions'), -0x00189429: ('FL', '2', "Physical Detector Size", '', 'PhysicalDetectorSize'), -0x00189430: ('FL', '2', "Position of Isocenter Projection", '', 'PositionOfIsocenterProjection'), -0x00189432: ('SQ', '1', "Field of View Sequence", '', 'FieldOfViewSequence'), -0x00189433: ('LO', '1', "Field of View Description", '', 'FieldOfViewDescription'), -0x00189434: ('SQ', '1', "Exposure Control Sensing Regions Sequence", '', 'ExposureControlSensingRegionsSequence'), -0x00189435: ('CS', '1', "Exposure Control Sensing Region Shape", '', 'ExposureControlSensingRegionShape'), -0x00189436: ('SS', '1', "Exposure Control Sensing Region Left Vertical Edge", '', 'ExposureControlSensingRegionLeftVerticalEdge'), -0x00189437: ('SS', '1', "Exposure Control Sensing Region Right Vertical Edge", '', 'ExposureControlSensingRegionRightVerticalEdge'), -0x00189438: ('SS', '1', "Exposure Control Sensing Region Upper Horizontal Edge", '', 'ExposureControlSensingRegionUpperHorizontalEdge'), -0x00189439: ('SS', '1', "Exposure Control Sensing Region Lower Horizontal Edge", '', 'ExposureControlSensingRegionLowerHorizontalEdge'), -0x00189440: ('SS', '2', "Center of Circular Exposure Control Sensing Region", '', 'CenterOfCircularExposureControlSensingRegion'), -0x00189441: ('US', '1', "Radius of Circular Exposure Control Sensing Region", '', 'RadiusOfCircularExposureControlSensingRegion'), -0x00189442: ('SS', '2-n', "Vertices of the Polygonal Exposure Control Sensing Region", '', 'VerticesOfThePolygonalExposureControlSensingRegion'), -0x00189445: ('OB', '1', "Retired-blank", 'Retired', ''), -0x00189447: ('FL', '1', "Column Angulation (Patient)", '', 'ColumnAngulationPatient'), -0x00189449: ('FL', '1', "Beam Angle", '', 'BeamAngle'), -0x00189451: ('SQ', '1', "Frame Detector Parameters Sequence", '', 'FrameDetectorParametersSequence'), -0x00189452: ('FL', '1', "Calculated Anatomy Thickness", '', 'CalculatedAnatomyThickness'), -0x00189455: ('SQ', '1', "Calibration Sequence", '', 'CalibrationSequence'), -0x00189456: ('SQ', '1', "Object Thickness Sequence", '', 'ObjectThicknessSequence'), -0x00189457: ('CS', '1', "Plane Identification", '', 'PlaneIdentification'), -0x00189461: ('FL', '1-2', "Field of View Dimension(s) in Float", '', 'FieldOfViewDimensionsInFloat'), -0x00189462: ('SQ', '1', "Isocenter Reference System Sequence", '', 'IsocenterReferenceSystemSequence'), -0x00189463: ('FL', '1', "Positioner Isocenter Primary Angle", '', 'PositionerIsocenterPrimaryAngle'), -0x00189464: ('FL', '1', "Positioner Isocenter Secondary Angle", '', 'PositionerIsocenterSecondaryAngle'), -0x00189465: ('FL', '1', "Positioner Isocenter Detector Rotation Angle", '', 'PositionerIsocenterDetectorRotationAngle'), -0x00189466: ('FL', '1', "Table X Position to Isocenter", '', 'TableXPositionToIsocenter'), -0x00189467: ('FL', '1', "Table Y Position to Isocenter", '', 'TableYPositionToIsocenter'), -0x00189468: ('FL', '1', "Table Z Position to Isocenter", '', 'TableZPositionToIsocenter'), -0x00189469: ('FL', '1', "Table Horizontal Rotation Angle", '', 'TableHorizontalRotationAngle'), -0x00189470: ('FL', '1', "Table Head Tilt Angle", '', 'TableHeadTiltAngle'), -0x00189471: ('FL', '1', "Table Cradle Tilt Angle", '', 'TableCradleTiltAngle'), -0x00189472: ('SQ', '1', "Frame Display Shutter Sequence", '', 'FrameDisplayShutterSequence'), -0x00189473: ('FL', '1', "Acquired Image Area Dose Product", '', 'AcquiredImageAreaDoseProduct'), -0x00189474: ('CS', '1', "C-arm Positioner Tabletop Relationship", '', 'CArmPositionerTabletopRelationship'), -0x00189476: ('SQ', '1', "X-Ray Geometry Sequence", '', 'XRayGeometrySequence'), -0x00189477: ('SQ', '1', "Irradiation Event Identification Sequence", '', 'IrradiationEventIdentificationSequence'), -0x00189504: ('SQ', '1', "X-Ray 3D Frame Type Sequence", '', 'XRay3DFrameTypeSequence'), -0x00189506: ('SQ', '1', "Contributing Sources Sequence", '', 'ContributingSourcesSequence'), -0x00189507: ('SQ', '1', "X-Ray 3D Acquisition Sequence", '', 'XRay3DAcquisitionSequence'), -0x00189508: ('FL', '1', "Primary Positioner Scan Arc", '', 'PrimaryPositionerScanArc'), -0x00189509: ('FL', '1', "Secondary Positioner Scan Arc", '', 'SecondaryPositionerScanArc'), -0x00189510: ('FL', '1', "Primary Positioner Scan Start Angle", '', 'PrimaryPositionerScanStartAngle'), -0x00189511: ('FL', '1', "Secondary Positioner Scan Start Angle", '', 'SecondaryPositionerScanStartAngle'), -0x00189514: ('FL', '1', "Primary Positioner Increment", '', 'PrimaryPositionerIncrement'), -0x00189515: ('FL', '1', "Secondary Positioner Increment", '', 'SecondaryPositionerIncrement'), -0x00189516: ('DT', '1', "Start Acquisition DateTime", '', 'StartAcquisitionDateTime'), -0x00189517: ('DT', '1', "End Acquisition DateTime", '', 'EndAcquisitionDateTime'), -0x00189524: ('LO', '1', "Application Name", '', 'ApplicationName'), -0x00189525: ('LO', '1', "Application Version", '', 'ApplicationVersion'), -0x00189526: ('LO', '1', "Application Manufacturer", '', 'ApplicationManufacturer'), -0x00189527: ('CS', '1', "Algorithm Type", '', 'AlgorithmType'), -0x00189528: ('LO', '1', "Algorithm Description", '', 'AlgorithmDescription'), -0x00189530: ('SQ', '1', "X-Ray 3D Reconstruction Sequence", '', 'XRay3DReconstructionSequence'), -0x00189531: ('LO', '1', "Reconstruction Description", '', 'ReconstructionDescription'), -0x00189538: ('SQ', '1', "Per Projection Acquisition Sequence", '', 'PerProjectionAcquisitionSequence'), -0x00189601: ('SQ', '1', "Diffusion b-matrix Sequence", '', 'DiffusionBMatrixSequence'), -0x00189602: ('FD', '1', "Diffusion b-value XX", '', 'DiffusionBValueXX'), -0x00189603: ('FD', '1', "Diffusion b-value XY", '', 'DiffusionBValueXY'), -0x00189604: ('FD', '1', "Diffusion b-value XZ", '', 'DiffusionBValueXZ'), -0x00189605: ('FD', '1', "Diffusion b-value YY", '', 'DiffusionBValueYY'), -0x00189606: ('FD', '1', "Diffusion b-value YZ", '', 'DiffusionBValueYZ'), -0x00189607: ('FD', '1', "Diffusion b-value ZZ", '', 'DiffusionBValueZZ'), -0x00189701: ('DT', '1', "Decay Correction DateTime", '', 'DecayCorrectionDateTime'), -0x00189715: ('FD', '1', "Start Density Threshold", '', 'StartDensityThreshold'), -0x00189716: ('FD', '1', "Start Relative Density Difference Threshold", '', 'StartRelativeDensityDifferenceThreshold'), -0x00189717: ('FD', '1', "Start Cardiac Trigger Count Threshold", '', 'StartCardiacTriggerCountThreshold'), -0x00189718: ('FD', '1', "Start Respiratory Trigger Count Threshold", '', 'StartRespiratoryTriggerCountThreshold'), -0x00189719: ('FD', '1', "Termination Counts Threshold", '', 'TerminationCountsThreshold'), -0x00189720: ('FD', '1', "Termination Density Threshold", '', 'TerminationDensityThreshold'), -0x00189721: ('FD', '1', "Termination Relative Density Threshold", '', 'TerminationRelativeDensityThreshold'), -0x00189722: ('FD', '1', "Termination Time Threshold", '', 'TerminationTimeThreshold'), -0x00189723: ('FD', '1', "Termination Cardiac Trigger Count Threshold", '', 'TerminationCardiacTriggerCountThreshold'), -0x00189724: ('FD', '1', "Termination Respiratory Trigger Count Threshold", '', 'TerminationRespiratoryTriggerCountThreshold'), -0x00189725: ('CS', '1', "Detector Geometry", '', 'DetectorGeometry'), -0x00189726: ('FD', '1', "Transverse Detector Separation", '', 'TransverseDetectorSeparation'), -0x00189727: ('FD', '1', "Axial Detector Dimension", '', 'AxialDetectorDimension'), -0x00189729: ('US', '1', "Radiopharmaceutical Agent Number", '', 'RadiopharmaceuticalAgentNumber'), -0x00189732: ('SQ', '1', "PET Frame Acquisition Sequence", '', 'PETFrameAcquisitionSequence'), -0x00189733: ('SQ', '1', "PET Detector Motion Details Sequence", '', 'PETDetectorMotionDetailsSequence'), -0x00189734: ('SQ', '1', "PET Table Dynamics Sequence", '', 'PETTableDynamicsSequence'), -0x00189735: ('SQ', '1', "PET Position Sequence", '', 'PETPositionSequence'), -0x00189736: ('SQ', '1', "PET Frame Correction Factors Sequence", '', 'PETFrameCorrectionFactorsSequence'), -0x00189737: ('SQ', '1', "Radiopharmaceutical Usage Sequence", '', 'RadiopharmaceuticalUsageSequence'), -0x00189738: ('CS', '1', "Attenuation Correction Source", '', 'AttenuationCorrectionSource'), -0x00189739: ('US', '1', "Number of Iterations", '', 'NumberOfIterations'), -0x00189740: ('US', '1', "Number of Subsets", '', 'NumberOfSubsets'), -0x00189749: ('SQ', '1', "PET Reconstruction Sequence", '', 'PETReconstructionSequence'), -0x00189751: ('SQ', '1', "PET Frame Type Sequence", '', 'PETFrameTypeSequence'), -0x00189755: ('CS', '1', "Time of Flight Information Used", '', 'TimeOfFlightInformationUsed'), -0x00189756: ('CS', '1', "Reconstruction Type", '', 'ReconstructionType'), -0x00189758: ('CS', '1', "Decay Corrected", '', 'DecayCorrected'), -0x00189759: ('CS', '1', "Attenuation Corrected", '', 'AttenuationCorrected'), -0x00189760: ('CS', '1', "Scatter Corrected", '', 'ScatterCorrected'), -0x00189761: ('CS', '1', "Dead Time Corrected", '', 'DeadTimeCorrected'), -0x00189762: ('CS', '1', "Gantry Motion Corrected", '', 'GantryMotionCorrected'), -0x00189763: ('CS', '1', "Patient Motion Corrected", '', 'PatientMotionCorrected'), -0x00189764: ('CS', '1', "Count Loss Normalization Corrected", '', 'CountLossNormalizationCorrected'), -0x00189765: ('CS', '1', "Randoms Corrected", '', 'RandomsCorrected'), -0x00189766: ('CS', '1', "Non-uniform Radial Sampling Corrected", '', 'NonUniformRadialSamplingCorrected'), -0x00189767: ('CS', '1', "Sensitivity Calibrated", '', 'SensitivityCalibrated'), -0x00189768: ('CS', '1', "Detector Normalization Correction", '', 'DetectorNormalizationCorrection'), -0x00189769: ('CS', '1', "Iterative Reconstruction Method", '', 'IterativeReconstructionMethod'), -0x00189770: ('CS', '1', "Attenuation Correction Temporal Relationship", '', 'AttenuationCorrectionTemporalRelationship'), -0x00189771: ('SQ', '1', "Patient Physiological State Sequence", '', 'PatientPhysiologicalStateSequence'), -0x00189772: ('SQ', '1', "Patient Physiological State Code Sequence", '', 'PatientPhysiologicalStateCodeSequence'), -0x00189801: ('FD', '1-n', "Depth(s) of Focus", '', 'DepthsOfFocus'), -0x00189803: ('SQ', '1', "Excluded Intervals Sequence", '', 'ExcludedIntervalsSequence'), -0x00189804: ('DT', '1', "Exclusion Start Datetime", '', 'ExclusionStartDatetime'), -0x00189805: ('FD', '1', "Exclusion Duration", '', 'ExclusionDuration'), -0x00189806: ('SQ', '1', "US Image Description Sequence", '', 'USImageDescriptionSequence'), -0x00189807: ('SQ', '1', "Image Data Type Sequence", '', 'ImageDataTypeSequence'), -0x00189808: ('CS', '1', "Data Type", '', 'DataType'), -0x00189809: ('SQ', '1', "Transducer Scan Pattern Code Sequence", '', 'TransducerScanPatternCodeSequence'), -0x0018980B: ('CS', '1', "Aliased Data Type", '', 'AliasedDataType'), -0x0018980C: ('CS', '1', "Position Measuring Device Used", '', 'PositionMeasuringDeviceUsed'), -0x0018980D: ('SQ', '1', "Transducer Geometry Code Sequence", '', 'TransducerGeometryCodeSequence'), -0x0018980E: ('SQ', '1', "Transducer Beam Steering Code Sequence", '', 'TransducerBeamSteeringCodeSequence'), -0x0018980F: ('SQ', '1', "Transducer Application Code Sequence", '', 'TransducerApplicationCodeSequence'), -0x0018A001: ('SQ', '1', "Contributing Equipment Sequence", '', 'ContributingEquipmentSequence'), -0x0018A002: ('DT', '1', "Contribution Date Time", '', 'ContributionDateTime'), -0x0018A003: ('ST', '1', "Contribution Description", '', 'ContributionDescription'), -0x0020000D: ('UI', '1', "Study Instance UID", '', 'StudyInstanceUID'), -0x0020000E: ('UI', '1', "Series Instance UID", '', 'SeriesInstanceUID'), -0x00200010: ('SH', '1', "Study ID", '', 'StudyID'), -0x00200011: ('IS', '1', "Series Number", '', 'SeriesNumber'), -0x00200012: ('IS', '1', "Acquisition Number", '', 'AcquisitionNumber'), -0x00200013: ('IS', '1', "Instance Number", '', 'InstanceNumber'), -0x00200014: ('IS', '1', "Isotope Number", 'Retired', 'IsotopeNumber'), -0x00200015: ('IS', '1', "Phase Number", 'Retired', 'PhaseNumber'), -0x00200016: ('IS', '1', "Interval Number", 'Retired', 'IntervalNumber'), -0x00200017: ('IS', '1', "Time Slot Number", 'Retired', 'TimeSlotNumber'), -0x00200018: ('IS', '1', "Angle Number", 'Retired', 'AngleNumber'), -0x00200019: ('IS', '1', "Item Number", '', 'ItemNumber'), -0x00200020: ('CS', '2', "Patient Orientation", '', 'PatientOrientation'), -0x00200022: ('IS', '1', "Overlay Number", 'Retired', 'OverlayNumber'), -0x00200024: ('IS', '1', "Curve Number", 'Retired', 'CurveNumber'), -0x00200026: ('IS', '1', "LUT Number", 'Retired', 'LUTNumber'), -0x00200030: ('DS', '3', "Image Position", 'Retired', 'ImagePosition'), -0x00200032: ('DS', '3', "Image Position (Patient)", '', 'ImagePositionPatient'), -0x00200035: ('DS', '6', "Image Orientation", 'Retired', 'ImageOrientation'), -0x00200037: ('DS', '6', "Image Orientation (Patient)", '', 'ImageOrientationPatient'), -0x00200050: ('DS', '1', "Location", 'Retired', 'Location'), -0x00200052: ('UI', '1', "Frame of Reference UID", '', 'FrameOfReferenceUID'), -0x00200060: ('CS', '1', "Laterality", '', 'Laterality'), -0x00200062: ('CS', '1', "Image Laterality", '', 'ImageLaterality'), -0x00200070: ('LO', '1', "Image Geometry Type", 'Retired', 'ImageGeometryType'), -0x00200080: ('CS', '1-n', "Masking Image", 'Retired', 'MaskingImage'), -0x002000AA: ('IS', '1', "Report Number", 'Retired', 'ReportNumber'), -0x00200100: ('IS', '1', "Temporal Position Identifier", '', 'TemporalPositionIdentifier'), -0x00200105: ('IS', '1', "Number of Temporal Positions", '', 'NumberOfTemporalPositions'), -0x00200110: ('DS', '1', "Temporal Resolution", '', 'TemporalResolution'), -0x00200200: ('UI', '1', "Synchronization Frame of Reference UID", '', 'SynchronizationFrameOfReferenceUID'), -0x00200242: ('UI', '1', "SOP Instance UID of Concatenation Source", '', 'SOPInstanceUIDOfConcatenationSource'), -0x00201000: ('IS', '1', "Series in Study", 'Retired', 'SeriesInStudy'), -0x00201001: ('IS', '1', "Acquisitions in Series", 'Retired', 'AcquisitionsInSeries'), -0x00201002: ('IS', '1', "Images in Acquisition", '', 'ImagesInAcquisition'), -0x00201003: ('IS', '1', "Images in Series", 'Retired', 'ImagesInSeries'), -0x00201004: ('IS', '1', "Acquisitions in Study", 'Retired', 'AcquisitionsInStudy'), -0x00201005: ('IS', '1', "Images in Study", 'Retired', 'ImagesInStudy'), -0x00201020: ('LO', '1-n', "Reference", 'Retired', 'Reference'), -0x00201040: ('LO', '1', "Position Reference Indicator", '', 'PositionReferenceIndicator'), -0x00201041: ('DS', '1', "Slice Location", '', 'SliceLocation'), -0x00201070: ('IS', '1-n', "Other Study Numbers", 'Retired', 'OtherStudyNumbers'), -0x00201200: ('IS', '1', "Number of Patient Related Studies", '', 'NumberOfPatientRelatedStudies'), -0x00201202: ('IS', '1', "Number of Patient Related Series", '', 'NumberOfPatientRelatedSeries'), -0x00201204: ('IS', '1', "Number of Patient Related Instances", '', 'NumberOfPatientRelatedInstances'), -0x00201206: ('IS', '1', "Number of Study Related Series", '', 'NumberOfStudyRelatedSeries'), -0x00201208: ('IS', '1', "Number of Study Related Instances", '', 'NumberOfStudyRelatedInstances'), -0x00201209: ('IS', '1', "Number of Series Related Instances", '', 'NumberOfSeriesRelatedInstances'), -0x00203401: ('CS', '1', "Modifying Device ID", 'Retired', 'ModifyingDeviceID'), -0x00203402: ('CS', '1', "Modified Image ID", 'Retired', 'ModifiedImageID'), -0x00203403: ('DA', '1', "Modified Image Date", 'Retired', 'ModifiedImageDate'), -0x00203404: ('LO', '1', "Modifying Device Manufacturer", 'Retired', 'ModifyingDeviceManufacturer'), -0x00203405: ('TM', '1', "Modified Image Time", 'Retired', 'ModifiedImageTime'), -0x00203406: ('LO', '1', "Modified Image Description", 'Retired', 'ModifiedImageDescription'), -0x00204000: ('LT', '1', "Image Comments", '', 'ImageComments'), -0x00205000: ('AT', '1-n', "Original Image Identification", 'Retired', 'OriginalImageIdentification'), -0x00205002: ('LO', '1-n', "Original Image Identification Nomenclature", 'Retired', 'OriginalImageIdentificationNomenclature'), -0x00209056: ('SH', '1', "Stack ID", '', 'StackID'), -0x00209057: ('UL', '1', "In-Stack Position Number", '', 'InStackPositionNumber'), -0x00209071: ('SQ', '1', "Frame Anatomy Sequence", '', 'FrameAnatomySequence'), -0x00209072: ('CS', '1', "Frame Laterality", '', 'FrameLaterality'), -0x00209111: ('SQ', '1', "Frame Content Sequence", '', 'FrameContentSequence'), -0x00209113: ('SQ', '1', "Plane Position Sequence", '', 'PlanePositionSequence'), -0x00209116: ('SQ', '1', "Plane Orientation Sequence", '', 'PlaneOrientationSequence'), -0x00209128: ('UL', '1', "Temporal Position Index", '', 'TemporalPositionIndex'), -0x00209153: ('FD', '1', "Nominal Cardiac Trigger Delay Time", '', 'NominalCardiacTriggerDelayTime'), -0x00209154: ('FL', '1', "Nominal Cardiac Trigger Time Prior To R-Peak", '', 'NominalCardiacTriggerTimePriorToRPeak'), -0x00209155: ('FL', '1', "Actual Cardiac Trigger Time Prior To R-Peak", '', 'ActualCardiacTriggerTimePriorToRPeak'), -0x00209156: ('US', '1', "Frame Acquisition Number", '', 'FrameAcquisitionNumber'), -0x00209157: ('UL', '1-n', "Dimension Index Values", '', 'DimensionIndexValues'), -0x00209158: ('LT', '1', "Frame Comments", '', 'FrameComments'), -0x00209161: ('UI', '1', "Concatenation UID", '', 'ConcatenationUID'), -0x00209162: ('US', '1', "In-concatenation Number", '', 'InConcatenationNumber'), -0x00209163: ('US', '1', "In-concatenation Total Number", '', 'InConcatenationTotalNumber'), -0x00209164: ('UI', '1', "Dimension Organization UID", '', 'DimensionOrganizationUID'), -0x00209165: ('AT', '1', "Dimension Index Pointer", '', 'DimensionIndexPointer'), -0x00209167: ('AT', '1', "Functional Group Pointer", '', 'FunctionalGroupPointer'), -0x00209213: ('LO', '1', "Dimension Index Private Creator", '', 'DimensionIndexPrivateCreator'), -0x00209221: ('SQ', '1', "Dimension Organization Sequence", '', 'DimensionOrganizationSequence'), -0x00209222: ('SQ', '1', "Dimension Index Sequence", '', 'DimensionIndexSequence'), -0x00209228: ('UL', '1', "Concatenation Frame Offset Number", '', 'ConcatenationFrameOffsetNumber'), -0x00209238: ('LO', '1', "Functional Group Private Creator", '', 'FunctionalGroupPrivateCreator'), -0x00209241: ('FL', '1', "Nominal Percentage of Cardiac Phase", '', 'NominalPercentageOfCardiacPhase'), -0x00209245: ('FL', '1', "Nominal Percentage of Respiratory Phase", '', 'NominalPercentageOfRespiratoryPhase'), -0x00209246: ('FL', '1', "Starting Respiratory Amplitude", '', 'StartingRespiratoryAmplitude'), -0x00209247: ('CS', '1', "Starting Respiratory Phase", '', 'StartingRespiratoryPhase'), -0x00209248: ('FL', '1', "Ending Respiratory Amplitude", '', 'EndingRespiratoryAmplitude'), -0x00209249: ('CS', '1', "Ending Respiratory Phase", '', 'EndingRespiratoryPhase'), -0x00209250: ('CS', '1', "Respiratory Trigger Type", '', 'RespiratoryTriggerType'), -0x00209251: ('FD', '1', "R-R Interval Time Nominal", '', 'RRIntervalTimeNominal'), -0x00209252: ('FD', '1', "Actual Cardiac Trigger Delay Time", '', 'ActualCardiacTriggerDelayTime'), -0x00209253: ('SQ', '1', "Respiratory Synchronization Sequence", '', 'RespiratorySynchronizationSequence'), -0x00209254: ('FD', '1', "Respiratory Interval Time", '', 'RespiratoryIntervalTime'), -0x00209255: ('FD', '1', "Nominal Respiratory Trigger Delay Time", '', 'NominalRespiratoryTriggerDelayTime'), -0x00209256: ('FD', '1', "Respiratory Trigger Delay Threshold", '', 'RespiratoryTriggerDelayThreshold'), -0x00209257: ('FD', '1', "Actual Respiratory Trigger Delay Time", '', 'ActualRespiratoryTriggerDelayTime'), -0x00209301: ('FD', '3', "Image Position (Volume)", '', 'ImagePositionVolume'), -0x00209302: ('FD', '6', "Image Orientation (Volume)", '', 'ImageOrientationVolume'), -0x00209307: ('CS', '1', "Ultrasound Acquisition Geometry", '', 'UltrasoundAcquisitionGeometry'), -0x00209308: ('FD', '3', "Apex Position", '', 'ApexPosition'), -0x00209309: ('FD', '16', "Volume to Transducer Mapping Matrix", '', 'VolumeToTransducerMappingMatrix'), -0x0020930A: ('FD', '16', "Volume to Table Mapping Matrix", '', 'VolumeToTableMappingMatrix'), -0x0020930C: ('CS', '1', "Patient Frame of Reference Source", '', 'PatientFrameOfReferenceSource'), -0x0020930D: ('FD', '1', "Temporal Position Time Offset", '', 'TemporalPositionTimeOffset'), -0x0020930E: ('SQ', '1', "Plane Position (Volume) Sequence", '', 'PlanePositionVolumeSequence'), -0x0020930F: ('SQ', '1', "Plane Orientation (Volume) Sequence", '', 'PlaneOrientationVolumeSequence'), -0x00209310: ('SQ', '1', "Temporal Position Sequence", '', 'TemporalPositionSequence'), -0x00209311: ('CS', '1', "Dimension Organization Type", '', 'DimensionOrganizationType'), -0x00209312: ('UI', '1', "Volume Frame of Reference UID", '', 'VolumeFrameOfReferenceUID'), -0x00209313: ('UI', '1', "Table Frame of Reference UID", '', 'TableFrameOfReferenceUID'), -0x00209421: ('LO', '1', "Dimension Description Label", '', 'DimensionDescriptionLabel'), -0x00209450: ('SQ', '1', "Patient Orientation in Frame Sequence", '', 'PatientOrientationInFrameSequence'), -0x00209453: ('LO', '1', "Frame Label", '', 'FrameLabel'), -0x00209518: ('US', '1-n', "Acquisition Index", '', 'AcquisitionIndex'), -0x00209529: ('SQ', '1', "Contributing SOP Instances Reference Sequence", '', 'ContributingSOPInstancesReferenceSequence'), -0x00209536: ('US', '1', "Reconstruction Index", '', 'ReconstructionIndex'), -0x00220001: ('US', '1', "Light Path Filter Pass-Through Wavelength", '', 'LightPathFilterPassThroughWavelength'), -0x00220002: ('US', '2', "Light Path Filter Pass Band", '', 'LightPathFilterPassBand'), -0x00220003: ('US', '1', "Image Path Filter Pass-Through Wavelength", '', 'ImagePathFilterPassThroughWavelength'), -0x00220004: ('US', '2', "Image Path Filter Pass Band", '', 'ImagePathFilterPassBand'), -0x00220005: ('CS', '1', "Patient Eye Movement Commanded", '', 'PatientEyeMovementCommanded'), -0x00220006: ('SQ', '1', "Patient Eye Movement Command Code Sequence", '', 'PatientEyeMovementCommandCodeSequence'), -0x00220007: ('FL', '1', "Spherical Lens Power", '', 'SphericalLensPower'), -0x00220008: ('FL', '1', "Cylinder Lens Power", '', 'CylinderLensPower'), -0x00220009: ('FL', '1', "Cylinder Axis", '', 'CylinderAxis'), -0x0022000A: ('FL', '1', "Emmetropic Magnification", '', 'EmmetropicMagnification'), -0x0022000B: ('FL', '1', "Intra Ocular Pressure", '', 'IntraOcularPressure'), -0x0022000C: ('FL', '1', "Horizontal Field of View", '', 'HorizontalFieldOfView'), -0x0022000D: ('CS', '1', "Pupil Dilated", '', 'PupilDilated'), -0x0022000E: ('FL', '1', "Degree of Dilation", '', 'DegreeOfDilation'), -0x00220010: ('FL', '1', "Stereo Baseline Angle", '', 'StereoBaselineAngle'), -0x00220011: ('FL', '1', "Stereo Baseline Displacement", '', 'StereoBaselineDisplacement'), -0x00220012: ('FL', '1', "Stereo Horizontal Pixel Offset", '', 'StereoHorizontalPixelOffset'), -0x00220013: ('FL', '1', "Stereo Vertical Pixel Offset", '', 'StereoVerticalPixelOffset'), -0x00220014: ('FL', '1', "Stereo Rotation", '', 'StereoRotation'), -0x00220015: ('SQ', '1', "Acquisition Device Type Code Sequence", '', 'AcquisitionDeviceTypeCodeSequence'), -0x00220016: ('SQ', '1', "Illumination Type Code Sequence", '', 'IlluminationTypeCodeSequence'), -0x00220017: ('SQ', '1', "Light Path Filter Type Stack Code Sequence", '', 'LightPathFilterTypeStackCodeSequence'), -0x00220018: ('SQ', '1', "Image Path Filter Type Stack Code Sequence", '', 'ImagePathFilterTypeStackCodeSequence'), -0x00220019: ('SQ', '1', "Lenses Code Sequence", '', 'LensesCodeSequence'), -0x0022001A: ('SQ', '1', "Channel Description Code Sequence", '', 'ChannelDescriptionCodeSequence'), -0x0022001B: ('SQ', '1', "Refractive State Sequence", '', 'RefractiveStateSequence'), -0x0022001C: ('SQ', '1', "Mydriatic Agent Code Sequence", '', 'MydriaticAgentCodeSequence'), -0x0022001D: ('SQ', '1', "Relative Image Position Code Sequence", '', 'RelativeImagePositionCodeSequence'), -0x0022001E: ('FL', '1', "Camera Angle of View", '', 'CameraAngleOfView'), -0x00220020: ('SQ', '1', "Stereo Pairs Sequence", '', 'StereoPairsSequence'), -0x00220021: ('SQ', '1', "Left Image Sequence", '', 'LeftImageSequence'), -0x00220022: ('SQ', '1', "Right Image Sequence", '', 'RightImageSequence'), -0x00220030: ('FL', '1', "Axial Length of the Eye", '', 'AxialLengthOfTheEye'), -0x00220031: ('SQ', '1', "Ophthalmic Frame Location Sequence", '', 'OphthalmicFrameLocationSequence'), -0x00220032: ('FL', '2-2n', "Reference Coordinates", '', 'ReferenceCoordinates'), -0x00220035: ('FL', '1', "Depth Spatial Resolution", '', 'DepthSpatialResolution'), -0x00220036: ('FL', '1', "Maximum Depth Distortion", '', 'MaximumDepthDistortion'), -0x00220037: ('FL', '1', "Along-scan Spatial Resolution", '', 'AlongScanSpatialResolution'), -0x00220038: ('FL', '1', "Maximum Along-scan Distortion", '', 'MaximumAlongScanDistortion'), -0x00220039: ('CS', '1', "Ophthalmic Image Orientation", '', 'OphthalmicImageOrientation'), -0x00220041: ('FL', '1', "Depth of Transverse Image", '', 'DepthOfTransverseImage'), -0x00220042: ('SQ', '1', "Mydriatic Agent Concentration Units Sequence", '', 'MydriaticAgentConcentrationUnitsSequence'), -0x00220048: ('FL', '1', "Across-scan Spatial Resolution", '', 'AcrossScanSpatialResolution'), -0x00220049: ('FL', '1', "Maximum Across-scan Distortion", '', 'MaximumAcrossScanDistortion'), -0x0022004E: ('DS', '1', "Mydriatic Agent Concentration", '', 'MydriaticAgentConcentration'), -0x00220055: ('FL', '1', "Illumination Wave Length", '', 'IlluminationWaveLength'), -0x00220056: ('FL', '1', "Illumination Power", '', 'IlluminationPower'), -0x00220057: ('FL', '1', "Illumination Bandwidth", '', 'IlluminationBandwidth'), -0x00220058: ('SQ', '1', "Mydriatic Agent Sequence", '', 'MydriaticAgentSequence'), -0x00221007: ('SQ', '1', "Ophthalmic Axial Measurements Right Eye Sequence", '', 'OphthalmicAxialMeasurementsRightEyeSequence'), -0x00221008: ('SQ', '1', "Ophthalmic Axial Measurements Left Eye Sequence", '', 'OphthalmicAxialMeasurementsLeftEyeSequence'), -0x00221010: ('CS', '1', "Ophthalmic Axial Length Measurements Type", '', 'OphthalmicAxialLengthMeasurementsType'), -0x00221019: ('FL', '1', "Ophthalmic Axial Length", '', 'OphthalmicAxialLength'), -0x00221024: ('SQ', '1', "Lens Status Code Sequence", '', 'LensStatusCodeSequence'), -0x00221025: ('SQ', '1', "Vitreous Status Code Sequence", '', 'VitreousStatusCodeSequence'), -0x00221028: ('SQ', '1', "IOL Formula Code Sequence", '', 'IOLFormulaCodeSequence'), -0x00221029: ('LO', '1', "IOL Formula Detail", '', 'IOLFormulaDetail'), -0x00221033: ('FL', '1', "Keratometer Index", '', 'KeratometerIndex'), -0x00221035: ('SQ', '1', "Source of Ophthalmic Axial Length Code Sequence", '', 'SourceOfOphthalmicAxialLengthCodeSequence'), -0x00221037: ('FL', '1', "Target Refraction", '', 'TargetRefraction'), -0x00221039: ('CS', '1', "Refractive Procedure Occurred", '', 'RefractiveProcedureOccurred'), -0x00221040: ('SQ', '1', "Refractive Surgery Type Code Sequence", '', 'RefractiveSurgeryTypeCodeSequence'), -0x00221044: ('SQ', '1', "Ophthalmic Ultrasound Axial Measurements Type Code Sequence", '', 'OphthalmicUltrasoundAxialMeasurementsTypeCodeSequence'), -0x00221050: ('SQ', '1', "Ophthalmic Axial Length Measurements Sequence", '', 'OphthalmicAxialLengthMeasurementsSequence'), -0x00221053: ('FL', '1', "IOL Power", '', 'IOLPower'), -0x00221054: ('FL', '1', "Predicted Refractive Error", '', 'PredictedRefractiveError'), -0x00221059: ('FL', '1', "Ophthalmic Axial Length Velocity", '', 'OphthalmicAxialLengthVelocity'), -0x00221065: ('LO', '1', "Lens Status Description", '', 'LensStatusDescription'), -0x00221066: ('LO', '1', "Vitreous Status Description", '', 'VitreousStatusDescription'), -0x00221090: ('SQ', '1', "IOL Power Sequence", '', 'IOLPowerSequence'), -0x00221092: ('SQ', '1', "Lens Constant Sequence", '', 'LensConstantSequence'), -0x00221093: ('LO', '1', "IOL Manufacturer", '', 'IOLManufacturer'), -0x00221094: ('LO', '1', "Lens Constant Description", '', 'LensConstantDescription'), -0x00221096: ('SQ', '1', "Keratometry Measurement Type Code Sequence", '', 'KeratometryMeasurementTypeCodeSequence'), -0x00221100: ('SQ', '1', "Referenced Ophthalmic Axial Measurements Sequence", '', 'ReferencedOphthalmicAxialMeasurementsSequence'), -0x00221101: ('SQ', '1', "Ophthalmic Axial Length Measurements Segment Name Code Sequence", '', 'OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence'), -0x00221103: ('SQ', '1', "Refractive Error Before Refractive Surgery Code Sequence", '', 'RefractiveErrorBeforeRefractiveSurgeryCodeSequence'), -0x00221121: ('FL', '1', "IOL Power For Exact Emmetropia", '', 'IOLPowerForExactEmmetropia'), -0x00221122: ('FL', '1', "IOL Power For Exact Target Refraction", '', 'IOLPowerForExactTargetRefraction'), -0x00221125: ('SQ', '1', "Anterior Chamber Depth Definition Code Sequence", '', 'AnteriorChamberDepthDefinitionCodeSequence'), -0x00221130: ('FL', '1', "Lens Thickness", '', 'LensThickness'), -0x00221131: ('FL', '1', "Anterior Chamber Depth", '', 'AnteriorChamberDepth'), -0x00221132: ('SQ', '1', "Source of Lens Thickness Data Code Sequence", '', 'SourceOfLensThicknessDataCodeSequence'), -0x00221133: ('SQ', '1', "Source of Anterior Chamber Depth Data Code Sequence", '', 'SourceOfAnteriorChamberDepthDataCodeSequence'), -0x00221135: ('SQ', '1', "Source of Refractive Error Data Code Sequence", '', 'SourceOfRefractiveErrorDataCodeSequence'), -0x00221140: ('CS', '1', "Ophthalmic Axial Length Measurement Modified", '', 'OphthalmicAxialLengthMeasurementModified'), -0x00221150: ('SQ', '1', "Ophthalmic Axial Length Data Source Code Sequence", '', 'OphthalmicAxialLengthDataSourceCodeSequence'), -0x00221153: ('SQ', '1', "Ophthalmic Axial Length Acquisition Method Code Sequence", '', 'OphthalmicAxialLengthAcquisitionMethodCodeSequence'), -0x00221155: ('FL', '1', "Signal to Noise Ratio", '', 'SignalToNoiseRatio'), -0x00221159: ('LO', '1', "Ophthalmic Axial Length Data Source Description", '', 'OphthalmicAxialLengthDataSourceDescription'), -0x00221210: ('SQ', '1', "Ophthalmic Axial Length Measurements Total Length Sequence", '', 'OphthalmicAxialLengthMeasurementsTotalLengthSequence'), -0x00221211: ('SQ', '1', "Ophthalmic Axial Length Measurements Segmental Length Sequence", '', 'OphthalmicAxialLengthMeasurementsSegmentalLengthSequence'), -0x00221212: ('SQ', '1', "Ophthalmic Axial Length Measurements Length Summation Sequence", '', 'OphthalmicAxialLengthMeasurementsLengthSummationSequence'), -0x00221220: ('SQ', '1', "Ultrasound Ophthalmic Axial Length Measurements Sequence", '', 'UltrasoundOphthalmicAxialLengthMeasurementsSequence'), -0x00221225: ('SQ', '1', "Optical Ophthalmic Axial Length Measurements Sequence", '', 'OpticalOphthalmicAxialLengthMeasurementsSequence'), -0x00221230: ('SQ', '1', "Ultrasound Selected Ophthalmic Axial Length Sequence", '', 'UltrasoundSelectedOphthalmicAxialLengthSequence'), -0x00221250: ('SQ', '1', "Ophthalmic Axial Length Selection Method Code Sequence", '', 'OphthalmicAxialLengthSelectionMethodCodeSequence'), -0x00221255: ('SQ', '1', "Optical Selected Ophthalmic Axial Length Sequence", '', 'OpticalSelectedOphthalmicAxialLengthSequence'), -0x00221257: ('SQ', '1', "Selected Segmental Ophthalmic Axial Length Sequence", '', 'SelectedSegmentalOphthalmicAxialLengthSequence'), -0x00221260: ('SQ', '1', "Selected Total Ophthalmic Axial Length Sequence", '', 'SelectedTotalOphthalmicAxialLengthSequence'), -0x00221262: ('SQ', '1', "Ophthalmic Axial Length Quality Metric Sequence", '', 'OphthalmicAxialLengthQualityMetricSequence'), -0x00221273: ('LO', '1', "Ophthalmic Axial Length Quality Metric Type Description", '', 'OphthalmicAxialLengthQualityMetricTypeDescription'), -0x00221300: ('SQ', '1', "Intraocular Lens Calculations Right Eye Sequence", '', 'IntraocularLensCalculationsRightEyeSequence'), -0x00221310: ('SQ', '1', "Intraocular Lens Calculations Left Eye Sequence", '', 'IntraocularLensCalculationsLeftEyeSequence'), -0x00221330: ('SQ', '1', "Referenced Ophthalmic Axial Length Measurement QC ImageSequence", '', 'ReferencedOphthalmicAxialLengthMeasurementQCImage'), -0x00240010: ('FL', '1', "Visual Field Horizontal Extent", '', 'VisualFieldHorizontalExtent'), -0x00240011: ('FL', '1', "Visual Field Vertical Extent", '', 'VisualFieldVerticalExtent'), -0x00240012: ('CS', '1', "Visual Field Shape", '', 'VisualFieldShape'), -0x00240016: ('SQ', '1', "Screening Test Mode Code Sequence", '', 'ScreeningTestModeCodeSequence'), -0x00240018: ('FL', '1', "Maximum Stimulus Luminance", '', 'MaximumStimulusLuminance'), -0x00240020: ('FL', '1', "Background Luminance", '', 'BackgroundLuminance'), -0x00240021: ('SQ', '1', "Stimulus Color Code Sequence", '', 'StimulusColorCodeSequence'), -0x00240024: ('SQ', '1', "Background Illumination Color Code Sequence", '', 'BackgroundIlluminationColorCodeSequence'), -0x00240025: ('FL', '1', "Stimulus Area", '', 'StimulusArea'), -0x00240028: ('FL', '1', "Stimulus Presentation Time", '', 'StimulusPresentationTime'), -0x00240032: ('SQ', '1', "Fixation Sequence", '', 'FixationSequence'), -0x00240033: ('SQ', '1', "Fixation Monitoring Code Sequence", '', 'FixationMonitoringCodeSequence'), -0x00240034: ('SQ', '1', "Visual Field Catch Trial Sequence", '', 'VisualFieldCatchTrialSequence'), -0x00240035: ('US', '1', "Fixation Checked Quantity", '', 'FixationCheckedQuantity'), -0x00240036: ('US', '1', "Patient Not Properly Fixated Quantity", '', 'PatientNotProperlyFixatedQuantity'), -0x00240037: ('CS', '1', "Presented Stimuli Data Flag", '', 'PresentedDataFlag'), -0x00240038: ('US', '1', "Number of Visual Stimuli", '', 'NumberOfVisualStimuli'), -0x00240039: ('CS', '1', "Excessive Fixation Losses Data Flag", '', 'ExcessiveFixationLossesDataFlag'), -0x00240040: ('CS', '1', "Excessive Fixation Losses", '', 'ExcessiveFixationLosses'), -0x00240042: ('US', '1', "Stimuli Retesting", '', 'StimuliRetesting'), -0x00240044: ('LT', '1', "Comments on Patient's Performance of Visual Field", '', 'CommentsOnPatientPerformanceOfVisualField'), -0x00240045: ('CS', '1', "False Negatives Estimate Flag", '', 'FalseNegativesEstimateFlag'), -0x00240046: ('FL', '1', "False Negatives Estimate", '', 'FalseNegativesEstimate'), -0x00240048: ('US', '1', "Negative Catch Trials", '', 'NegativeCatchTrials'), -0x00240050: ('US', '1', "False Negatives", '', 'FalseNegatives'), -0x00240051: ('CS', '1', "Excessive False Negatives Data Flag", '', 'ExcessiveFalseNegativesDataFlag'), -0x00240052: ('CS', '1', "Excessive False Negatives", '', 'ExcessiveFalseNegatives'), -0x00240053: ('CS', '1', "False Positives Estimate Flag", '', 'FalsePositivesEstimateFlag'), -0x00240054: ('FL', '1', "False Positives Estimate", '', 'FalsePositivesEstimate'), -0x00240055: ('CS', '1', "Catch Trials Data Flag", '', 'CatchTrialsDataFlag'), -0x00240056: ('US', '1', "Positive Catch Trials", '', 'PositiveCatchTrials'), -0x00240057: ('CS', '1', "Test Point Normals Data Flag", '', 'TestPointNormalsDataFlag'), -0x00240058: ('SQ', '1', "Test Point Normals Sequence", '', 'TestPointNormalsSequence'), -0x00240059: ('CS', '1', "Global Deviation Probability Normals Flag", '', 'GlobalDeviationProbabilityNormalsFlag'), -0x00240060: ('US', '1', "False Positives", '', 'FalsePositives'), -0x00240061: ('CS', '1', "Excessive False Positives Data Flag", '', 'ExcessiveFalsePositivesDataFlag'), -0x00240062: ('CS', '1', "Excessive False Positives", '', 'ExcessiveFalsePositives'), -0x00240063: ('CS', '1', "Visual Field Test Normals Flag", '', 'VisualFieldTestNormalsFlag'), -0x00240064: ('SQ', '1', "Results Normals Sequence", '', 'ResultsNormalsSequence'), -0x00240065: ('SQ', '1', "Age Corrected Sensitivity Deviation Algorithm Sequence", '', 'AgeCorrectedSensitivityDeviationAlgorithmSequence'), -0x00240066: ('FL', '1', "Global Deviation From Normal", '', 'GlobalDeviationFromNormal'), -0x00240067: ('SQ', '1', "Generalized Defect Sensitivity Deviation Algorithm Sequence", '', 'GeneralizedDefectSensitivityDeviationAlgorithmSequence'), -0x00240068: ('FL', '1', "Localized Deviation from Normal", '', 'LocalizedDeviationfromNormal'), -0x00240069: ('LO', '1', "Patient Reliability Indicator", '', 'PatientReliabilityIndicator'), -0x00240070: ('FL', '1', "Visual Field Mean Sensitivity", '', 'VisualFieldMeanSensitivity'), -0x00240071: ('FL', '1', "Global Deviation Probability", '', 'GlobalDeviationProbability'), -0x00240072: ('CS', '1', "Local Deviation Probability Normals Flag", '', 'LocalDeviationProbabilityNormalsFlag'), -0x00240073: ('FL', '1', "Localized Deviation Probability", '', 'LocalizedDeviationProbability'), -0x00240074: ('CS', '1', "Short Term Fluctuation Calculated", '', 'ShortTermFluctuationCalculated'), -0x00240075: ('FL', '1', "Short Term Fluctuation", '', 'ShortTermFluctuation'), -0x00240076: ('CS', '1', "Short Term Fluctuation Probability Calculated", '', 'ShortTermFluctuationProbabilityCalculated'), -0x00240077: ('FL', '1', "Short Term Fluctuation Probability", '', 'ShortTermFluctuationProbability'), -0x00240078: ('CS', '1', "Corrected Localized Deviation From Normal Calculated", '', 'CorrectedLocalizedDeviationFromNormalCalculated'), -0x00240079: ('FL', '1', "Corrected Localized Deviation From Normal", '', 'CorrectedLocalizedDeviationFromNormal'), -0x00240080: ('CS', '1', "Corrected Localized Deviation From Normal Probability Calculated", '', 'CorrectedLocalizedDeviationFromNormalProbabilityCalculated'), -0x00240081: ('FL', '1', "Corrected Localized Deviation From Normal Probability", '', 'CorrectedLocalizedDeviationFromNormalProbability'), -0x00240083: ('SQ', '1', "Global Deviation Sequence", '', 'GlobalDeviation'), -0x00240085: ('SQ', '1', "Localized Deviation Sequence", '', 'LocalizedDeviation'), -0x00240086: ('CS', '1', "Foveal Sensitivity Measured", '', 'FovealSensitivityMeasured'), -0x00240087: ('FL', '1', "Foveal Sensitivity", '', 'FovealSensitivity'), -0x00240088: ('FL', '1', "Visual Field Test Duration", '', 'VisualFieldTestDuration'), -0x00240089: ('SQ', '1', "Visual Field Test Point Sequence", '', 'VisualFieldTestPointSequence'), -0x00240090: ('FL', '1', "Visual Field Test Point X-Coordinate", '', 'VisualFieldTestPointXCoordinate'), -0x00240091: ('FL', '1', "Visual Field Test Point Y-Coordinate", '', 'VisualFieldTestPointYCoordinate'), -0x00240092: ('FL', '1', "Age Corrected Sensitivity Deviation Value", '', 'AgeCorrectedSensitivityDeviationValue'), -0x00240093: ('CS', '1', "Stimulus Results", '', 'StimulusResults'), -0x00240094: ('FL', '1', "Sensitivity Value", '', 'SensitivityValue'), -0x00240095: ('CS', '1', "Retest Stimulus Seen", '', 'RetestStimulusSeen'), -0x00240096: ('FL', '1', "Retest Sensitivity Value", '', 'RetestSensitivityValue'), -0x00240097: ('SQ', '1', "Visual Field Test Point Normals Sequence", '', 'VisualFieldTestPointNormalsSequence'), -0x00240098: ('FL', '1', "Quantified Defect", '', 'QuantifiedDefect'), -0x00240100: ('FL', '1', "Age Corrected Sensitivity Deviation Probability Value", '', 'AgeCorrectedSensitivityDeviationProbabilityValue'), -0x00240102: ('CS', '1', "Generalized Defect Corrected Sensitivity Deviation Flag", '', 'GeneralizedDefectCorrectedSensitivityDeviationFlag'), -0x00240103: ('FL', '1', "Generalized Defect Corrected Sensitivity Deviation Value", '', 'GeneralizedDefectCorrectedSensitivityDeviationValue'), -0x00240104: ('FL', '1', "Generalized Defect Corrected Sensitivity Deviation Probability Value", '', - 'GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue'), -0x00240105: ('FL', '1', "Minimum Sensitivity Value", '', 'MinimumSensitivityValue'), -0x00240106: ('CS', '1', "Blind Spot Localized", '', 'BlindSpotLocalized'), -0x00240107: ('FL', '1', "Blind Spot X-Coordinate", '', 'BlindSpotXCoordinate'), -0x00240108: ('FL', '1', "Blind Spot Y-Coordinate", '', 'BlindSpotYCoordinate'), -0x00240110: ('SQ', '1', "Visual Acuity Measurement Sequence", '', 'VisualAcuityMeasurementSequence'), -0x00240112: ('SQ', '1', "Refractive Parameters Used on Patient Sequence", '', 'RefractiveParametersUsedOnPatientSequence'), -0x00240113: ('CS', '1', "Measurement Laterality", '', 'MeasurementLaterality'), -0x00240114: ('SQ', '1', "Ophthalmic Patient Clinical Information Left Eye Sequence", '', 'OphthalmicPatientClinicalInformationLeftEyeSequence'), -0x00240115: ('SQ', '1', "Ophthalmic Patient Clinical Information Right Eye Sequence", '', 'OphthalmicPatientClinicalInformationRightEyeSequence'), -0x00240117: ('CS', '1', "Foveal Point Normative Data Flag", '', 'FovealPointNormativeDataFlag'), -0x00240118: ('FL', '1', "Foveal Point Probability Value", '', 'FovealPointProbabilityValue'), -0x00240120: ('CS', '1', "Screening Baseline Measured", '', 'ScreeningBaselineMeasured'), -0x00240122: ('SQ', '1', "Screening Baseline Measured Sequence", '', 'ScreeningBaselineMeasuredSequence'), -0x00240124: ('CS', '1', "Screening Baseline Type", '', 'ScreeningBaselineType'), -0x00240126: ('FL', '1', "Screening Baseline Value", '', 'ScreeningBaselineValue'), -0x00240202: ('LO', '1', "Algorithm Source", '', 'AlgorithmSource'), -0x00240306: ('LO', '1', "Data Set Name", '', 'DataSetName'), -0x00240307: ('LO', '1', "Data Set Version", '', 'DataSetVersion'), -0x00240308: ('LO', '1', "Data Set Source", '', 'DataSetSource'), -0x00240309: ('LO', '1', "Data Set Description", '', 'DataSetDescription'), -0x00240317: ('SQ', '1', "Visual Field Test Reliability Global Index Sequence", '', 'VisualFieldTestReliabilityGlobalIndexSequence'), -0x00240320: ('SQ', '1', "Visual Field Global Results Index Sequence", '', 'VisualFieldGlobalResultsIndexSequence'), -0x00240325: ('SQ', '1', "Data Observation Sequence", '', 'DataObservationSequence'), -0x00240338: ('CS', '1', "Index Normals Flag", '', 'IndexNormalsFlag'), -0x00240341: ('FL', '1', "Index Probability", '', 'IndexProbability'), -0x00240344: ('SQ', '1', "Index Probability Sequence", '', 'IndexProbabilitySequence'), -0x00280002: ('US', '1', "Samples per Pixel", '', 'SamplesPerPixel'), -0x00280003: ('US', '1', "Samples per Pixel Used", '', 'SamplesPerPixelUsed'), -0x00280004: ('CS', '1', "Photometric Interpretation", '', 'PhotometricInterpretation'), -0x00280005: ('US', '1', "Image Dimensions", 'Retired', 'ImageDimensions'), -0x00280006: ('US', '1', "Planar Configuration", '', 'PlanarConfiguration'), -0x00280008: ('IS', '1', "Number of Frames", '', 'NumberOfFrames'), -0x00280009: ('AT', '1-n', "Frame Increment Pointer", '', 'FrameIncrementPointer'), -0x0028000A: ('AT', '1-n', "Frame Dimension Pointer", '', 'FrameDimensionPointer'), -0x00280010: ('US', '1', "Rows", '', 'Rows'), -0x00280011: ('US', '1', "Columns", '', 'Columns'), -0x00280012: ('US', '1', "Planes", 'Retired', 'Planes'), -0x00280014: ('US', '1', "Ultrasound Color Data Present", '', 'UltrasoundColorDataPresent'), -0x00280020: ('OB', '1', "Retired-blank", 'Retired', ''), -0x00280030: ('DS', '2', "Pixel Spacing", '', 'PixelSpacing'), -0x00280031: ('DS', '2', "Zoom Factor", '', 'ZoomFactor'), -0x00280032: ('DS', '2', "Zoom Center", '', 'ZoomCenter'), -0x00280034: ('IS', '2', "Pixel Aspect Ratio", '', 'PixelAspectRatio'), -0x00280040: ('CS', '1', "Image Format", 'Retired', 'ImageFormat'), -0x00280050: ('LO', '1-n', "Manipulated Image", 'Retired', 'ManipulatedImage'), -0x00280051: ('CS', '1-n', "Corrected Image", '', 'CorrectedImage'), -0x0028005F: ('LO', '1', "Compression Recognition Code", 'Retired', 'CompressionRecognitionCode'), -0x00280060: ('CS', '1', "Compression Code", 'Retired', 'CompressionCode'), -0x00280061: ('SH', '1', "Compression Originator", 'Retired', 'CompressionOriginator'), -0x00280062: ('LO', '1', "Compression Label", 'Retired', 'CompressionLabel'), -0x00280063: ('SH', '1', "Compression Description", 'Retired', 'CompressionDescription'), -0x00280065: ('CS', '1-n', "Compression Sequence", 'Retired', 'CompressionSequence'), -0x00280066: ('AT', '1-n', "Compression Step Pointers", 'Retired', 'CompressionStepPointers'), -0x00280068: ('US', '1', "Repeat Interval", 'Retired', 'RepeatInterval'), -0x00280069: ('US', '1', "Bits Grouped", 'Retired', 'BitsGrouped'), -0x00280070: ('US', '1-n', "Perimeter Table", 'Retired', 'PerimeterTable'), -0x00280071: ('US or SS', '1', "Perimeter Value", 'Retired', 'PerimeterValue'), -0x00280080: ('US', '1', "Predictor Rows", 'Retired', 'PredictorRows'), -0x00280081: ('US', '1', "Predictor Columns", 'Retired', 'PredictorColumns'), -0x00280082: ('US', '1-n', "Predictor Constants", 'Retired', 'PredictorConstants'), -0x00280090: ('CS', '1', "Blocked Pixels", 'Retired', 'BlockedPixels'), -0x00280091: ('US', '1', "Block Rows", 'Retired', 'BlockRows'), -0x00280092: ('US', '1', "Block Columns", 'Retired', 'BlockColumns'), -0x00280093: ('US', '1', "Row Overlap", 'Retired', 'RowOverlap'), -0x00280094: ('US', '1', "Column Overlap", 'Retired', 'ColumnOverlap'), -0x00280100: ('US', '1', "Bits Allocated", '', 'BitsAllocated'), -0x00280101: ('US', '1', "Bits Stored", '', 'BitsStored'), -0x00280102: ('US', '1', "High Bit", '', 'HighBit'), -0x00280103: ('US', '1', "Pixel Representation", '', 'PixelRepresentation'), -0x00280104: ('US or SS', '1', "Smallest Valid Pixel Value", 'Retired', 'SmallestValidPixelValue'), -0x00280105: ('US or SS', '1', "Largest Valid Pixel Value", 'Retired', 'LargestValidPixelValue'), -0x00280106: ('US or SS', '1', "Smallest Image Pixel Value", '', 'SmallestImagePixelValue'), -0x00280107: ('US or SS', '1', "Largest Image Pixel Value", '', 'LargestImagePixelValue'), -0x00280108: ('US or SS', '1', "Smallest Pixel Value in Series", '', 'SmallestPixelValueInSeries'), -0x00280109: ('US or SS', '1', "Largest Pixel Value in Series", '', 'LargestPixelValueInSeries'), -0x00280110: ('US or SS', '1', "Smallest Image Pixel Value in Plane", 'Retired', 'SmallestImagePixelValueInPlane'), -0x00280111: ('US or SS', '1', "Largest Image Pixel Value in Plane", 'Retired', 'LargestImagePixelValueInPlane'), -0x00280120: ('US or SS', '1', "Pixel Padding Value", '', 'PixelPaddingValue'), -0x00280121: ('US or SS', '1', "Pixel Padding Range Limit", '', 'PixelPaddingRangeLimit'), -0x00280200: ('US', '1', "Image Location", 'Retired', 'ImageLocation'), -0x00280300: ('CS', '1', "Quality Control Image", '', 'QualityControlImage'), -0x00280301: ('CS', '1', "Burned In Annotation", '', 'BurnedInAnnotation'), -0x00280302: ('CS', '1', "Recognizable Visual Features", '', 'RecognizableVisualFeatures'), -0x00280303: ('CS', '1', "Longitudinal Temporal Information Modified", '', 'LongitudinalTemporalInformationModified'), -0x00280400: ('LO', '1', "Transform Label", 'Retired', 'TransformLabel'), -0x00280401: ('LO', '1', "Transform Version Number", 'Retired', 'TransformVersionNumber'), -0x00280402: ('US', '1', "Number of Transform Steps", 'Retired', 'NumberOfTransformSteps'), -0x00280403: ('LO', '1-n', "Sequence of Compressed Data", 'Retired', 'SequenceOfCompressedData'), -0x00280404: ('AT', '1-n', "Details of Coefficients", 'Retired', 'DetailsOfCoefficients'), -0x00280700: ('LO', '1', "DCT Label", 'Retired', 'DCTLabel'), -0x00280701: ('CS', '1-n', "Data Block Description", 'Retired', 'DataBlockDescription'), -0x00280702: ('AT', '1-n', "Data Block", 'Retired', 'DataBlock'), -0x00280710: ('US', '1', "Normalization Factor Format", 'Retired', 'NormalizationFactorFormat'), -0x00280720: ('US', '1', "Zonal Map Number Format", 'Retired', 'ZonalMapNumberFormat'), -0x00280721: ('AT', '1-n', "Zonal Map Location", 'Retired', 'ZonalMapLocation'), -0x00280722: ('US', '1', "Zonal Map Format", 'Retired', 'ZonalMapFormat'), -0x00280730: ('US', '1', "Adaptive Map Format", 'Retired', 'AdaptiveMapFormat'), -0x00280740: ('US', '1', "Code Number Format", 'Retired', 'CodeNumberFormat'), -0x00280A02: ('CS', '1', "Pixel Spacing Calibration Type", '', 'PixelSpacingCalibrationType'), -0x00280A04: ('LO', '1', "Pixel Spacing Calibration Description", '', 'PixelSpacingCalibrationDescription'), -0x00281040: ('CS', '1', "Pixel Intensity Relationship", '', 'PixelIntensityRelationship'), -0x00281041: ('SS', '1', "Pixel Intensity Relationship Sign", '', 'PixelIntensityRelationshipSign'), -0x00281050: ('DS', '1-n', "Window Center", '', 'WindowCenter'), -0x00281051: ('DS', '1-n', "Window Width", '', 'WindowWidth'), -0x00281052: ('DS', '1', "Rescale Intercept", '', 'RescaleIntercept'), -0x00281053: ('DS', '1', "Rescale Slope", '', 'RescaleSlope'), -0x00281054: ('LO', '1', "Rescale Type", '', 'RescaleType'), -0x00281055: ('LO', '1-n', "Window Center & Width Explanation", '', 'WindowCenterWidthExplanation'), -0x00281056: ('CS', '1', "VOI LUT Function", '', 'VOILUTFunction'), -0x00281080: ('CS', '1', "Gray Scale", 'Retired', 'GrayScale'), -0x00281090: ('CS', '1', "Recommended Viewing Mode", '', 'RecommendedViewingMode'), -0x00281100: ('US or SS', '3', "Gray Lookup Table Descriptor", 'Retired', 'GrayLookupTableDescriptor'), -0x00281101: ('US or SS', '3', "Red Palette Color Lookup Table Descriptor", '', 'RedPaletteColorLookupTableDescriptor'), -0x00281102: ('US or SS', '3', "Green Palette Color Lookup Table Descriptor", '', 'GreenPaletteColorLookupTableDescriptor'), -0x00281103: ('US or SS', '3', "Blue Palette Color Lookup Table Descriptor", '', 'BluePaletteColorLookupTableDescriptor'), -0x00281104: ('US', '3', "Alpha Palette Color Lookup Table Descriptor", '', 'AlphaPaletteColorLookupTableDescriptor'), -0x00281111: ('US or SS', '4', "Large Red Palette Color Lookup Table Descriptor", 'Retired', 'LargeRedPaletteColorLookupTableDescriptor'), -0x00281112: ('US or SS', '4', "Large Green Palette Color Lookup Table Descriptor", 'Retired', 'LargeGreenPaletteColorLookupTableDescriptor'), -0x00281113: ('US or SS', '4', "Large Blue Palette Color Lookup Table Descriptor", 'Retired', 'LargeBluePaletteColorLookupTableDescriptor'), -0x00281199: ('UI', '1', "Palette Color Lookup Table UID", '', 'PaletteColorLookupTableUID'), -0x00281200: ('US or SS or OW', '1-n 1', "Gray Lookup Table Data", 'Retired', 'GrayLookupTableData'), -0x00281201: ('OW', '1', "Red Palette Color Lookup Table Data", '', 'RedPaletteColorLookupTableData'), -0x00281202: ('OW', '1', "Green Palette Color Lookup Table Data", '', 'GreenPaletteColorLookupTableData'), -0x00281203: ('OW', '1', "Blue Palette Color Lookup Table Data", '', 'BluePaletteColorLookupTableData'), -0x00281204: ('OW', '1', "Alpha Palette Color Lookup Table Data", '', 'AlphaPaletteColorLookupTableData'), -0x00281211: ('OW', '1', "Large Red Palette Color Lookup Table Data", 'Retired', 'LargeRedPaletteColorLookupTableData'), -0x00281212: ('OW', '1', "Large Green Palette Color Lookup Table Data", 'Retired', 'LargeGreenPaletteColorLookupTableData'), -0x00281213: ('OW', '1', "Large Blue Palette Color Lookup Table Data", 'Retired', 'LargeBluePaletteColorLookupTableData'), -0x00281214: ('UI', '1', "Large Palette Color Lookup Table UID", 'Retired', 'LargePaletteColorLookupTableUID'), -0x00281221: ('OW', '1', "Segmented Red Palette Color Lookup Table Data", '', 'SegmentedRedPaletteColorLookupTableData'), -0x00281222: ('OW', '1', "Segmented Green Palette Color Lookup Table Data", '', 'SegmentedGreenPaletteColorLookupTableData'), -0x00281223: ('OW', '1', "Segmented Blue Palette Color Lookup Table Data", '', 'SegmentedBluePaletteColorLookupTableData'), -0x00281300: ('CS', '1', "Breast Implant Present", '', 'BreastImplantPresent'), -0x00281350: ('CS', '1', "Partial View", '', 'PartialView'), -0x00281351: ('ST', '1', "Partial View Description", '', 'PartialViewDescription'), -0x00281352: ('SQ', '1', "Partial View Code Sequence", '', 'PartialViewCodeSequence'), -0x0028135A: ('CS', '1', "Spatial Locations Preserved", '', 'SpatialLocationsPreserved'), -0x00281401: ('SQ', '1', "Data Frame Assignment Sequence", '', 'DataFrameAssignmentSequence'), -0x00281402: ('CS', '1', "Data Path Assignment", '', 'DataPathAssignment'), -0x00281403: ('US', '1', "Bits Mapped to Color Lookup Table", '', 'BitsMappedToColorLookupTable'), -0x00281404: ('SQ', '1', "Blending LUT 1 Sequence", '', 'BlendingLUT1Sequence'), -0x00281405: ('CS', '1', "Blending LUT 1 Transfer Function", '', 'BlendingLUT1TransferFunction'), -0x00281406: ('FD', '1', "Blending Weight Constant", '', 'BlendingWeightConstant'), -0x00281407: ('US', '3', "Blending Lookup Table Descriptor", '', 'BlendingLookupTableDescriptor'), -0x00281408: ('OW', '1', "Blending Lookup Table Data", '', 'BlendingLookupTableData'), -0x0028140B: ('SQ', '1', "Enhanced Palette Color Lookup Table Sequence", '', 'EnhancedPaletteColorLookupTableSequence'), -0x0028140C: ('SQ', '1', "Blending LUT 2 Sequence", '', 'BlendingLUT2Sequence'), -0x0028140D: ('CS', '1', "Blending LUT 2 Transfer Function", '', 'BlendingLUT2TransferFunction'), -0x0028140E: ('CS', '1', "Data Path ID", '', 'DataPathID'), -0x0028140F: ('CS', '1', "RGB LUT Transfer Function", '', 'RGBLUTTransferFunction'), -0x00281410: ('CS', '1', "Alpha LUT Transfer Function", '', 'AlphaLUTTransferFunction'), -0x00282000: ('OB', '1', "ICC Profile", '', 'ICCProfile'), -0x00282110: ('CS', '1', "Lossy Image Compression", '', 'LossyImageCompression'), -0x00282112: ('DS', '1-n', "Lossy Image Compression Ratio", '', 'LossyImageCompressionRatio'), -0x00282114: ('CS', '1-n', "Lossy Image Compression Method", '', 'LossyImageCompressionMethod'), -0x00283000: ('SQ', '1', "Modality LUT Sequence", '', 'ModalityLUTSequence'), -0x00283002: ('US or SS', '3', "LUT Descriptor", '', 'LUTDescriptor'), -0x00283003: ('LO', '1', "LUT Explanation", '', 'LUTExplanation'), -0x00283004: ('LO', '1', "Modality LUT Type", '', 'ModalityLUTType'), -0x00283006: ('US or OW', '1-n 1', "LUT Data", '', 'LUTData'), -0x00283010: ('SQ', '1', "VOI LUT Sequence", '', 'VOILUTSequence'), -0x00283110: ('SQ', '1', "Softcopy VOI LUT Sequence", '', 'SoftcopyVOILUTSequence'), -0x00284000: ('LT', '1', "Image Presentation Comments", 'Retired', 'ImagePresentationComments'), -0x00285000: ('SQ', '1', "Bi-Plane Acquisition Sequence", 'Retired', 'BiPlaneAcquisitionSequence'), -0x00286010: ('US', '1', "Representative Frame Number", '', 'RepresentativeFrameNumber'), -0x00286020: ('US', '1-n', "Frame Numbers of Interest (FOI)", '', 'FrameNumbersOfInterest'), -0x00286022: ('LO', '1-n', "Frame of Interest Description", '', 'FrameOfInterestDescription'), -0x00286023: ('CS', '1-n', "Frame of Interest Type", '', 'FrameOfInterestType'), -0x00286030: ('US', '1-n', "Mask Pointer(s)", 'Retired', 'MaskPointers'), -0x00286040: ('US', '1-n', "R Wave Pointer", '', 'RWavePointer'), -0x00286100: ('SQ', '1', "Mask Subtraction Sequence", '', 'MaskSubtractionSequence'), -0x00286101: ('CS', '1', "Mask Operation", '', 'MaskOperation'), -0x00286102: ('US', '2-2n', "Applicable Frame Range", '', 'ApplicableFrameRange'), -0x00286110: ('US', '1-n', "Mask Frame Numbers", '', 'MaskFrameNumbers'), -0x00286112: ('US', '1', "Contrast Frame Averaging", '', 'ContrastFrameAveraging'), -0x00286114: ('FL', '2', "Mask Sub-pixel Shift", '', 'MaskSubPixelShift'), -0x00286120: ('SS', '1', "TID Offset", '', 'TIDOffset'), -0x00286190: ('ST', '1', "Mask Operation Explanation", '', 'MaskOperationExplanation'), -0x00287FE0: ('UT', '1', "Pixel Data Provider URL", '', 'PixelDataProviderURL'), -0x00289001: ('UL', '1', "Data Point Rows", '', 'DataPointRows'), -0x00289002: ('UL', '1', "Data Point Columns", '', 'DataPointColumns'), -0x00289003: ('CS', '1', "Signal Domain Columns", '', 'SignalDomainColumns'), -0x00289099: ('US', '1', "Largest Monochrome Pixel Value", 'Retired', 'LargestMonochromePixelValue'), -0x00289108: ('CS', '1', "Data Representation", '', 'DataRepresentation'), -0x00289110: ('SQ', '1', "Pixel Measures Sequence", '', 'PixelMeasuresSequence'), -0x00289132: ('SQ', '1', "Frame VOI LUT Sequence", '', 'FrameVOILUTSequence'), -0x00289145: ('SQ', '1', "Pixel Value Transformation Sequence", '', 'PixelValueTransformationSequence'), -0x00289235: ('CS', '1', "Signal Domain Rows", '', 'SignalDomainRows'), -0x00289411: ('FL', '1', "Display Filter Percentage", '', 'DisplayFilterPercentage'), -0x00289415: ('SQ', '1', "Frame Pixel Shift Sequence", '', 'FramePixelShiftSequence'), -0x00289416: ('US', '1', "Subtraction Item ID", '', 'SubtractionItemID'), -0x00289422: ('SQ', '1', "Pixel Intensity Relationship LUT Sequence", '', 'PixelIntensityRelationshipLUTSequence'), -0x00289443: ('SQ', '1', "Frame Pixel Data Properties Sequence", '', 'FramePixelDataPropertiesSequence'), -0x00289444: ('CS', '1', "Geometrical Properties", '', 'GeometricalProperties'), -0x00289445: ('FL', '1', "Geometric Maximum Distortion", '', 'GeometricMaximumDistortion'), -0x00289446: ('CS', '1-n', "Image Processing Applied", '', 'ImageProcessingApplied'), -0x00289454: ('CS', '1', "Mask Selection Mode", '', 'MaskSelectionMode'), -0x00289474: ('CS', '1', "LUT Function", '', 'LUTFunction'), -0x00289478: ('FL', '1', "Mask Visibility Percentage", '', 'MaskVisibilityPercentage'), -0x00289501: ('SQ', '1', "Pixel Shift Sequence", '', 'PixelShiftSequence'), -0x00289502: ('SQ', '1', "Region Pixel Shift Sequence", '', 'RegionPixelShiftSequence'), -0x00289503: ('SS', '2-2n', "Vertices of the Region", '', 'VerticesOfTheRegion'), -0x00289505: ('SQ', '1', "Multi-frame Presentation Sequence", '', 'MultiFramePresentationSequence'), -0x00289506: ('US', '2-2n', "Pixel Shift Frame Range", '', 'PixelShiftFrameRange'), -0x00289507: ('US', '2-2n', "LUT Frame Range", '', 'LUTFrameRange'), -0x00289520: ('DS', '16', "Image to Equipment Mapping Matrix", '', 'ImageToEquipmentMappingMatrix'), -0x00289537: ('CS', '1', "Equipment Coordinate System Identification", '', 'EquipmentCoordinateSystemIdentification'), -0x0032000A: ('CS', '1', "Study Status ID", 'Retired', 'StudyStatusID'), -0x0032000C: ('CS', '1', "Study Priority ID", 'Retired', 'StudyPriorityID'), -0x00320012: ('LO', '1', "Study ID Issuer", 'Retired', 'StudyIDIssuer'), -0x00320032: ('DA', '1', "Study Verified Date", 'Retired', 'StudyVerifiedDate'), -0x00320033: ('TM', '1', "Study Verified Time", 'Retired', 'StudyVerifiedTime'), -0x00320034: ('DA', '1', "Study Read Date", 'Retired', 'StudyReadDate'), -0x00320035: ('TM', '1', "Study Read Time", 'Retired', 'StudyReadTime'), -0x00321000: ('DA', '1', "Scheduled Study Start Date", 'Retired', 'ScheduledStudyStartDate'), -0x00321001: ('TM', '1', "Scheduled Study Start Time", 'Retired', 'ScheduledStudyStartTime'), -0x00321010: ('DA', '1', "Scheduled Study Stop Date", 'Retired', 'ScheduledStudyStopDate'), -0x00321011: ('TM', '1', "Scheduled Study Stop Time", 'Retired', 'ScheduledStudyStopTime'), -0x00321020: ('LO', '1', "Scheduled Study Location", 'Retired', 'ScheduledStudyLocation'), -0x00321021: ('AE', '1-n', "Scheduled Study Location AE Title", 'Retired', 'ScheduledStudyLocationAETitle'), -0x00321030: ('LO', '1', "Reason for Study", 'Retired', 'ReasonForStudy'), -0x00321031: ('SQ', '1', "Requesting Physician Identification Sequence", '', 'RequestingPhysicianIdentificationSequence'), -0x00321032: ('PN', '1', "Requesting Physician", '', 'RequestingPhysician'), -0x00321033: ('LO', '1', "Requesting Service", '', 'RequestingService'), -0x00321034: ('SQ', '1', "Requesting Service Code Sequence", '', 'RequestingServiceCodeSequence'), -0x00321040: ('DA', '1', "Study Arrival Date", 'Retired', 'StudyArrivalDate'), -0x00321041: ('TM', '1', "Study Arrival Time", 'Retired', 'StudyArrivalTime'), -0x00321050: ('DA', '1', "Study Completion Date", 'Retired', 'StudyCompletionDate'), -0x00321051: ('TM', '1', "Study Completion Time", 'Retired', 'StudyCompletionTime'), -0x00321055: ('CS', '1', "Study Component Status ID", 'Retired', 'StudyComponentStatusID'), -0x00321060: ('LO', '1', "Requested Procedure Description", '', 'RequestedProcedureDescription'), -0x00321064: ('SQ', '1', "Requested Procedure Code Sequence", '', 'RequestedProcedureCodeSequence'), -0x00321070: ('LO', '1', "Requested Contrast Agent", '', 'RequestedContrastAgent'), -0x00324000: ('LT', '1', "Study Comments", 'Retired', 'StudyComments'), -0x00380004: ('SQ', '1', "Referenced Patient Alias Sequence", '', 'ReferencedPatientAliasSequence'), -0x00380008: ('CS', '1', "Visit Status ID", '', 'VisitStatusID'), -0x00380010: ('LO', '1', "Admission ID", '', 'AdmissionID'), -0x00380011: ('LO', '1', "Issuer of Admission ID", 'Retired', 'IssuerOfAdmissionID'), -0x00380014: ('SQ', '1', "Issuer of Admission ID Sequence", '', 'IssuerOfAdmissionIDSequence'), -0x00380016: ('LO', '1', "Route of Admissions", '', 'RouteOfAdmissions'), -0x0038001A: ('DA', '1', "Scheduled Admission Date", 'Retired', 'ScheduledAdmissionDate'), -0x0038001B: ('TM', '1', "Scheduled Admission Time", 'Retired', 'ScheduledAdmissionTime'), -0x0038001C: ('DA', '1', "Scheduled Discharge Date", 'Retired', 'ScheduledDischargeDate'), -0x0038001D: ('TM', '1', "Scheduled Discharge Time", 'Retired', 'ScheduledDischargeTime'), -0x0038001E: ('LO', '1', "Scheduled Patient Institution Residence", 'Retired', 'ScheduledPatientInstitutionResidence'), -0x00380020: ('DA', '1', "Admitting Date", '', 'AdmittingDate'), -0x00380021: ('TM', '1', "Admitting Time", '', 'AdmittingTime'), -0x00380030: ('DA', '1', "Discharge Date", 'Retired', 'DischargeDate'), -0x00380032: ('TM', '1', "Discharge Time", 'Retired', 'DischargeTime'), -0x00380040: ('LO', '1', "Discharge Diagnosis Description", 'Retired', 'DischargeDiagnosisDescription'), -0x00380044: ('SQ', '1', "Discharge Diagnosis Code Sequence", 'Retired', 'DischargeDiagnosisCodeSequence'), -0x00380050: ('LO', '1', "Special Needs", '', 'SpecialNeeds'), -0x00380060: ('LO', '1', "Service Episode ID", '', 'ServiceEpisodeID'), -0x00380061: ('LO', '1', "Issuer of Service Episode ID", 'Retired', 'IssuerOfServiceEpisodeID'), -0x00380062: ('LO', '1', "Service Episode Description", '', 'ServiceEpisodeDescription'), -0x00380064: ('SQ', '1', "Issuer of Service Episode ID Sequence", '', 'IssuerOfServiceEpisodeIDSequence'), -0x00380100: ('SQ', '1', "Pertinent Documents Sequence", '', 'PertinentDocumentsSequence'), -0x00380300: ('LO', '1', "Current Patient Location", '', 'CurrentPatientLocation'), -0x00380400: ('LO', '1', "Patient's Institution Residence", '', 'PatientInstitutionResidence'), -0x00380500: ('LO', '1', "Patient State", '', 'PatientState'), -0x00380502: ('SQ', '1', "Patient Clinical Trial Participation Sequence", '', 'PatientClinicalTrialParticipationSequence'), -0x00384000: ('LT', '1', "Visit Comments", '', 'VisitComments'), -0x003A0004: ('CS', '1', "Waveform Originality", '', 'WaveformOriginality'), -0x003A0005: ('US', '1', "Number of Waveform Channels", '', 'NumberOfWaveformChannels'), -0x003A0010: ('UL', '1', "Number of Waveform Samples", '', 'NumberOfWaveformSamples'), -0x003A001A: ('DS', '1', "Sampling Frequency", '', 'SamplingFrequency'), -0x003A0020: ('SH', '1', "Multiplex Group Label", '', 'MultiplexGroupLabel'), -0x003A0200: ('SQ', '1', "Channel Definition Sequence", '', 'ChannelDefinitionSequence'), -0x003A0202: ('IS', '1', "Waveform Channel Number", '', 'WaveformChannelNumber'), -0x003A0203: ('SH', '1', "Channel Label", '', 'ChannelLabel'), -0x003A0205: ('CS', '1-n', "Channel Status", '', 'ChannelStatus'), -0x003A0208: ('SQ', '1', "Channel Source Sequence", '', 'ChannelSourceSequence'), -0x003A0209: ('SQ', '1', "Channel Source Modifiers Sequence", '', 'ChannelSourceModifiersSequence'), -0x003A020A: ('SQ', '1', "Source Waveform Sequence", '', 'SourceWaveformSequence'), -0x003A020C: ('LO', '1', "Channel Derivation Description", '', 'ChannelDerivationDescription'), -0x003A0210: ('DS', '1', "Channel Sensitivity", '', 'ChannelSensitivity'), -0x003A0211: ('SQ', '1', "Channel Sensitivity Units Sequence", '', 'ChannelSensitivityUnitsSequence'), -0x003A0212: ('DS', '1', "Channel Sensitivity Correction Factor", '', 'ChannelSensitivityCorrectionFactor'), -0x003A0213: ('DS', '1', "Channel Baseline", '', 'ChannelBaseline'), -0x003A0214: ('DS', '1', "Channel Time Skew", '', 'ChannelTimeSkew'), -0x003A0215: ('DS', '1', "Channel Sample Skew", '', 'ChannelSampleSkew'), -0x003A0218: ('DS', '1', "Channel Offset", '', 'ChannelOffset'), -0x003A021A: ('US', '1', "Waveform Bits Stored", '', 'WaveformBitsStored'), -0x003A0220: ('DS', '1', "Filter Low Frequency", '', 'FilterLowFrequency'), -0x003A0221: ('DS', '1', "Filter High Frequency", '', 'FilterHighFrequency'), -0x003A0222: ('DS', '1', "Notch Filter Frequency", '', 'NotchFilterFrequency'), -0x003A0223: ('DS', '1', "Notch Filter Bandwidth", '', 'NotchFilterBandwidth'), -0x003A0230: ('FL', '1', "Waveform Data Display Scale", '', 'WaveformDataDisplayScale'), -0x003A0231: ('US', '3', "Waveform Display Background CIELab Value", '', 'WaveformDisplayBackgroundCIELabValue'), -0x003A0240: ('SQ', '1', "Waveform Presentation Group Sequence", '', 'WaveformPresentationGroupSequence'), -0x003A0241: ('US', '1', "Presentation Group Number", '', 'PresentationGroupNumber'), -0x003A0242: ('SQ', '1', "Channel Display Sequence", '', 'ChannelDisplaySequence'), -0x003A0244: ('US', '3', "Channel Recommended Display CIELab Value", '', 'ChannelRecommendedDisplayCIELabValue'), -0x003A0245: ('FL', '1', "Channel Position", '', 'ChannelPosition'), -0x003A0246: ('CS', '1', "Display Shading Flag", '', 'DisplayShadingFlag'), -0x003A0247: ('FL', '1', "Fractional Channel Display Scale", '', 'FractionalChannelDisplayScale'), -0x003A0248: ('FL', '1', "Absolute Channel Display Scale", '', 'AbsoluteChannelDisplayScale'), -0x003A0300: ('SQ', '1', "Multiplexed Audio Channels Description Code Sequence", '', 'MultiplexedAudioChannelsDescriptionCodeSequence'), -0x003A0301: ('IS', '1', "Channel Identification Code", '', 'ChannelIdentificationCode'), -0x003A0302: ('CS', '1', "Channel Mode", '', 'ChannelMode'), -0x00400001: ('AE', '1-n', "Scheduled Station AE Title", '', 'ScheduledStationAETitle'), -0x00400002: ('DA', '1', "Scheduled Procedure Step Start Date", '', 'ScheduledProcedureStepStartDate'), -0x00400003: ('TM', '1', "Scheduled Procedure Step Start Time", '', 'ScheduledProcedureStepStartTime'), -0x00400004: ('DA', '1', "Scheduled Procedure Step End Date", '', 'ScheduledProcedureStepEndDate'), -0x00400005: ('TM', '1', "Scheduled Procedure Step End Time", '', 'ScheduledProcedureStepEndTime'), -0x00400006: ('PN', '1', "Scheduled Performing Physician's Name", '', 'ScheduledPerformingPhysicianName'), -0x00400007: ('LO', '1', "Scheduled Procedure Step Description", '', 'ScheduledProcedureStepDescription'), -0x00400008: ('SQ', '1', "Scheduled Protocol Code Sequence", '', 'ScheduledProtocolCodeSequence'), -0x00400009: ('SH', '1', "Scheduled Procedure Step ID", '', 'ScheduledProcedureStepID'), -0x0040000A: ('SQ', '1', "Stage Code Sequence", '', 'StageCodeSequence'), -0x0040000B: ('SQ', '1', "Scheduled Performing Physician Identification Sequence", '', 'ScheduledPerformingPhysicianIdentificationSequence'), -0x00400010: ('SH', '1-n', "Scheduled Station Name", '', 'ScheduledStationName'), -0x00400011: ('SH', '1', "Scheduled Procedure Step Location", '', 'ScheduledProcedureStepLocation'), -0x00400012: ('LO', '1', "Pre-Medication", '', 'PreMedication'), -0x00400020: ('CS', '1', "Scheduled Procedure Step Status", '', 'ScheduledProcedureStepStatus'), -0x00400026: ('SQ', '1', "Order Placer Identifier Sequence", '', 'OrderPlacerIdentifierSequence'), -0x00400027: ('SQ', '1', "Order Filler Identifier Sequence", '', 'OrderFillerIdentifierSequence'), -0x00400031: ('UT', '1', "Local Namespace Entity ID", '', 'LocalNamespaceEntityID'), -0x00400032: ('UT', '1', "Universal Entity ID", '', 'UniversalEntityID'), -0x00400033: ('CS', '1', "Universal Entity ID Type", '', 'UniversalEntityIDType'), -0x00400035: ('CS', '1', "Identifier Type Code", '', 'IdentifierTypeCode'), -0x00400036: ('SQ', '1', "Assigning Facility Sequence", '', 'AssigningFacilitySequence'), -0x00400039: ('SQ', '1', "Assigning Jurisdiction Code Sequence", '', 'AssigningJurisdictionCodeSequence'), -0x0040003A: ('SQ', '1', "Assigning Agency or Department Code Sequence", '', 'AssigningAgencyOrDepartmentCodeSequence'), -0x00400100: ('SQ', '1', "Scheduled Procedure Step Sequence", '', 'ScheduledProcedureStepSequence'), -0x00400220: ('SQ', '1', "Referenced Non-Image Composite SOP Instance Sequence", '', 'ReferencedNonImageCompositeSOPInstanceSequence'), -0x00400241: ('AE', '1', "Performed Station AE Title", '', 'PerformedStationAETitle'), -0x00400242: ('SH', '1', "Performed Station Name", '', 'PerformedStationName'), -0x00400243: ('SH', '1', "Performed Location", '', 'PerformedLocation'), -0x00400244: ('DA', '1', "Performed Procedure Step Start Date", '', 'PerformedProcedureStepStartDate'), -0x00400245: ('TM', '1', "Performed Procedure Step Start Time", '', 'PerformedProcedureStepStartTime'), -0x00400250: ('DA', '1', "Performed Procedure Step End Date", '', 'PerformedProcedureStepEndDate'), -0x00400251: ('TM', '1', "Performed Procedure Step End Time", '', 'PerformedProcedureStepEndTime'), -0x00400252: ('CS', '1', "Performed Procedure Step Status", '', 'PerformedProcedureStepStatus'), -0x00400253: ('SH', '1', "Performed Procedure Step ID", '', 'PerformedProcedureStepID'), -0x00400254: ('LO', '1', "Performed Procedure Step Description", '', 'PerformedProcedureStepDescription'), -0x00400255: ('LO', '1', "Performed Procedure Type Description", '', 'PerformedProcedureTypeDescription'), -0x00400260: ('SQ', '1', "Performed Protocol Code Sequence", '', 'PerformedProtocolCodeSequence'), -0x00400261: ('CS', '1', "Performed Protocol Type", '', 'PerformedProtocolType'), -0x00400270: ('SQ', '1', "Scheduled Step Attributes Sequence", '', 'ScheduledStepAttributesSequence'), -0x00400275: ('SQ', '1', "Request Attributes Sequence", '', 'RequestAttributesSequence'), -0x00400280: ('ST', '1', "Comments on the Performed Procedure Step", '', 'CommentsOnThePerformedProcedureStep'), -0x00400281: ('SQ', '1', "Performed Procedure Step Discontinuation Reason Code Sequence", '', 'PerformedProcedureStepDiscontinuationReasonCodeSequence'), -0x00400293: ('SQ', '1', "Quantity Sequence", '', 'QuantitySequence'), -0x00400294: ('DS', '1', "Quantity", '', 'Quantity'), -0x00400295: ('SQ', '1', "Measuring Units Sequence", '', 'MeasuringUnitsSequence'), -0x00400296: ('SQ', '1', "Billing Item Sequence", '', 'BillingItemSequence'), -0x00400300: ('US', '1', "Total Time of Fluoroscopy", '', 'TotalTimeOfFluoroscopy'), -0x00400301: ('US', '1', "Total Number of Exposures", '', 'TotalNumberOfExposures'), -0x00400302: ('US', '1', "Entrance Dose", '', 'EntranceDose'), -0x00400303: ('US', '1-2', "Exposed Area", '', 'ExposedArea'), -0x00400306: ('DS', '1', "Distance Source to Entrance", '', 'DistanceSourceToEntrance'), -0x00400307: ('DS', '1', "Distance Source to Support", 'Retired', 'DistanceSourceToSupport'), -0x0040030E: ('SQ', '1', "Exposure Dose Sequence", '', 'ExposureDoseSequence'), -0x00400310: ('ST', '1', "Comments on Radiation Dose", '', 'CommentsOnRadiationDose'), -0x00400312: ('DS', '1', "X-Ray Output", '', 'XRayOutput'), -0x00400314: ('DS', '1', "Half Value Layer", '', 'HalfValueLayer'), -0x00400316: ('DS', '1', "Organ Dose", '', 'OrganDose'), -0x00400318: ('CS', '1', "Organ Exposed", '', 'OrganExposed'), -0x00400320: ('SQ', '1', "Billing Procedure Step Sequence", '', 'BillingProcedureStepSequence'), -0x00400321: ('SQ', '1', "Film Consumption Sequence", '', 'FilmConsumptionSequence'), -0x00400324: ('SQ', '1', "Billing Supplies and Devices Sequence", '', 'BillingSuppliesAndDevicesSequence'), -0x00400330: ('SQ', '1', "Referenced Procedure Step Sequence", 'Retired', 'ReferencedProcedureStepSequence'), -0x00400340: ('SQ', '1', "Performed Series Sequence", '', 'PerformedSeriesSequence'), -0x00400400: ('LT', '1', "Comments on the Scheduled Procedure Step", '', 'CommentsOnTheScheduledProcedureStep'), -0x00400440: ('SQ', '1', "Protocol Context Sequence", '', 'ProtocolContextSequence'), -0x00400441: ('SQ', '1', "Content Item Modifier Sequence", '', 'ContentItemModifierSequence'), -0x00400500: ('SQ', '1', "Scheduled Specimen Sequence", '', 'ScheduledSpecimenSequence'), -0x0040050A: ('LO', '1', "Specimen Accession Number", 'Retired', 'SpecimenAccessionNumber'), -0x00400512: ('LO', '1', "Container Identifier", '', 'ContainerIdentifier'), -0x00400513: ('SQ', '1', "Issuer of the Container Identifier Sequence", '', 'IssuerOfTheContainerIdentifierSequence'), -0x00400515: ('SQ', '1', "Alternate Container Identifier Sequence", '', 'AlternateContainerIdentifierSequence'), -0x00400518: ('SQ', '1', "Container Type Sequence", '', 'ContainerTypeCodeSequence'), -0x0040051A: ('LO', '1', "Container Description", '', 'ContainerDescription'), -0x00400520: ('SQ', '1', "Container Component Sequence", '', 'ContainerComponentSequence'), -0x00400550: ('SQ', '1', "Specimen Sequence", 'Retired', 'SpecimenSequence'), -0x00400551: ('LO', '1', "Specimen Identifier", '', 'SpecimenIdentifier'), -0x00400552: ('SQ', '1', "Specimen Description Sequence (Trial)", 'Retired', 'SpecimenDescriptionSequenceTrial'), -0x00400553: ('ST', '1', "Specimen Description (Trial)", 'Retired', 'SpecimenDescriptionTrial'), -0x00400554: ('UI', '1', "Specimen UID", '', 'SpecimenUID'), -0x00400555: ('SQ', '1', "Acquisition Context Sequence", '', 'AcquisitionContextSequence'), -0x00400556: ('ST', '1', "Acquisition Context Description", '', 'AcquisitionContextDescription'), -0x0040059A: ('SQ', '1', "Specimen Type Code Sequence", '', 'SpecimenTypeCodeSequence'), -0x00400560: ('SQ', '1', "Specimen Description Sequence", '', 'SpecimenDescriptionSequence'), -0x00400562: ('SQ', '1', "Issuer of the Specimen Identifier Sequence", '', 'IssuerOfTheSpecimenIdentifierSequence'), -0x00400600: ('LO', '1', "Specimen Short Description", '', 'SpecimenShortDescription'), -0x00400602: ('UT', '1', "Specimen Detailed Description", '', 'SpecimenDetailedDescription'), -0x00400610: ('SQ', '1', "Specimen Preparation Sequence", '', 'SpecimenPreparationSequence'), -0x00400612: ('SQ', '1', "Specimen Preparation Step Content Item Sequence", '', 'SpecimenPreparationStepContentItemSequence'), -0x00400620: ('SQ', '1', "Specimen Localization Content Item Sequence", '', 'SpecimenLocalizationContentItemSequence'), -0x004006FA: ('LO', '1', "Slide Identifier", 'Retired', 'SlideIdentifier'), -0x0040071A: ('SQ', '1', "Image Center Point Coordinates Sequence", '', 'ImageCenterPointCoordinatesSequence'), -0x0040072A: ('DS', '1', "X Offset in Slide Coordinate System", '', 'XOffsetInSlideCoordinateSystem'), -0x0040073A: ('DS', '1', "Y Offset in Slide Coordinate System", '', 'YOffsetInSlideCoordinateSystem'), -0x0040074A: ('DS', '1', "Z Offset in Slide Coordinate System", '', 'ZOffsetInSlideCoordinateSystem'), -0x004008D8: ('SQ', '1', "Pixel Spacing Sequence", 'Retired', 'PixelSpacingSequence'), -0x004008DA: ('SQ', '1', "Coordinate System Axis Code Sequence", 'Retired', 'CoordinateSystemAxisCodeSequence'), -0x004008EA: ('SQ', '1', "Measurement Units Code Sequence", '', 'MeasurementUnitsCodeSequence'), -0x004009F8: ('SQ', '1', "Vital Stain Code Sequence (Trial)", 'Retired', 'VitalStainCodeSequenceTrial'), -0x00401001: ('SH', '1', "Requested Procedure ID", '', 'RequestedProcedureID'), -0x00401002: ('LO', '1', "Reason for the Requested Procedure", '', 'ReasonForTheRequestedProcedure'), -0x00401003: ('SH', '1', "Requested Procedure Priority", '', 'RequestedProcedurePriority'), -0x00401004: ('LO', '1', "Patient Transport Arrangements", '', 'PatientTransportArrangements'), -0x00401005: ('LO', '1', "Requested Procedure Location", '', 'RequestedProcedureLocation'), -0x00401006: ('SH', '1', "Placer Order Number / Procedure", 'Retired', 'PlacerOrderNumberProcedure'), -0x00401007: ('SH', '1', "Filler Order Number / Procedure", 'Retired', 'FillerOrderNumberProcedure'), -0x00401008: ('LO', '1', "Confidentiality Code", '', 'ConfidentialityCode'), -0x00401009: ('SH', '1', "Reporting Priority", '', 'ReportingPriority'), -0x0040100A: ('SQ', '1', "Reason for Requested Procedure Code Sequence", '', 'ReasonForRequestedProcedureCodeSequence'), -0x00401010: ('PN', '1-n', "Names of Intended Recipients of Results", '', 'NamesOfIntendedRecipientsOfResults'), -0x00401011: ('SQ', '1', "Intended Recipients of Results Identification Sequence", '', 'IntendedRecipientsOfResultsIdentificationSequence'), -0x00401012: ('SQ', '1', "Reason For Performed Procedure Code Sequence", '', 'ReasonForPerformedProcedureCodeSequence'), -0x00401060: ('LO', '1', "Requested Procedure Description (Trial)", 'Retired', 'RequestedProcedureDescriptionTrial'), -0x00401101: ('SQ', '1', "Person Identification Code Sequence", '', 'PersonIdentificationCodeSequence'), -0x00401102: ('ST', '1', "Person's Address", '', 'PersonAddress'), -0x00401103: ('LO', '1-n', "Person's Telephone Numbers", '', 'PersonTelephoneNumbers'), -0x00401400: ('LT', '1', "Requested Procedure Comments", '', 'RequestedProcedureComments'), -0x00402001: ('LO', '1', "Reason for the Imaging Service Request", 'Retired', 'ReasonForTheImagingServiceRequest'), -0x00402004: ('DA', '1', "Issue Date of Imaging Service Request", '', 'IssueDateOfImagingServiceRequest'), -0x00402005: ('TM', '1', "Issue Time of Imaging Service Request", '', 'IssueTimeOfImagingServiceRequest'), -0x00402006: ('SH', '1', "Placer Order Number / Imaging Service Request (Retired)", 'Retired', 'PlacerOrderNumberImagingServiceRequestRetired'), -0x00402007: ('SH', '1', "Filler Order Number / Imaging Service Request (Retired)", 'Retired', 'FillerOrderNumberImagingServiceRequestRetired'), -0x00402008: ('PN', '1', "Order Entered By", '', 'OrderEnteredBy'), -0x00402009: ('SH', '1', "Order Enterer's Location", '', 'OrderEntererLocation'), -0x00402010: ('SH', '1', "Order Callback Phone Number", '', 'OrderCallbackPhoneNumber'), -0x00402016: ('LO', '1', "Placer Order Number / Imaging Service Request", '', 'PlacerOrderNumberImagingServiceRequest'), -0x00402017: ('LO', '1', "Filler Order Number / Imaging Service Request", '', 'FillerOrderNumberImagingServiceRequest'), -0x00402400: ('LT', '1', "Imaging Service Request Comments", '', 'ImagingServiceRequestComments'), -0x00403001: ('LO', '1', "Confidentiality Constraint on Patient Data Description", '', 'ConfidentialityConstraintOnPatientDataDescription'), -0x00404001: ('CS', '1', "General Purpose Scheduled Procedure Step Status", '', 'GeneralPurposeScheduledProcedureStepStatus'), -0x00404002: ('CS', '1', "General Purpose Performed Procedure Step Status", '', 'GeneralPurposePerformedProcedureStepStatus'), -0x00404003: ('CS', '1', "General Purpose Scheduled Procedure Step Priority", '', 'GeneralPurposeScheduledProcedureStepPriority'), -0x00404004: ('SQ', '1', "Scheduled Processing Applications Code Sequence", '', 'ScheduledProcessingApplicationsCodeSequence'), -0x00404005: ('DT', '1', "Scheduled Procedure Step Start DateTime", '', 'ScheduledProcedureStepStartDateTime'), -0x00404006: ('CS', '1', "Multiple Copies Flag", '', 'MultipleCopiesFlag'), -0x00404007: ('SQ', '1', "Performed Processing Applications Code Sequence", '', 'PerformedProcessingApplicationsCodeSequence'), -0x00404009: ('SQ', '1', "Human Performer Code Sequence", '', 'HumanPerformerCodeSequence'), -0x00404010: ('DT', '1', "Scheduled Procedure Step Modification Date Time", '', 'ScheduledProcedureStepModificationDateTime'), -0x00404011: ('DT', '1', "Expected Completion Date Time", '', 'ExpectedCompletionDateTime'), -0x00404015: ('SQ', '1', "Resulting General Purpose Performed Procedure Steps Sequence", '', 'ResultingGeneralPurposePerformedProcedureStepsSequence'), -0x00404016: ('SQ', '1', "Referenced General Purpose Scheduled Procedure Step Sequence", '', 'ReferencedGeneralPurposeScheduledProcedureStepSequence'), -0x00404018: ('SQ', '1', "Scheduled Workitem Code Sequence", '', 'ScheduledWorkitemCodeSequence'), -0x00404019: ('SQ', '1', "Performed Workitem Code Sequence", '', 'PerformedWorkitemCodeSequence'), -0x00404020: ('CS', '1', "Input Availability Flag", '', 'InputAvailabilityFlag'), -0x00404021: ('SQ', '1', "Input Information Sequence", '', 'InputInformationSequence'), -0x00404022: ('SQ', '1', "Relevant Information Sequence", '', 'RelevantInformationSequence'), -0x00404023: ('UI', '1', "Referenced General Purpose Scheduled Procedure Step Transaction UID", '', - 'ReferencedGeneralPurposeScheduledProcedureStepTransactionUID'), -0x00404025: ('SQ', '1', "Scheduled Station Name Code Sequence", '', 'ScheduledStationNameCodeSequence'), -0x00404026: ('SQ', '1', "Scheduled Station Class Code Sequence", '', 'ScheduledStationClassCodeSequence'), -0x00404027: ('SQ', '1', "Scheduled Station Geographic Location Code Sequence", '', 'ScheduledStationGeographicLocationCodeSequence'), -0x00404028: ('SQ', '1', "Performed Station Name Code Sequence", '', 'PerformedStationNameCodeSequence'), -0x00404029: ('SQ', '1', "Performed Station Class Code Sequence", '', 'PerformedStationClassCodeSequence'), -0x00404030: ('SQ', '1', "Performed Station Geographic Location Code Sequence", '', 'PerformedStationGeographicLocationCodeSequence'), -0x00404031: ('SQ', '1', "Requested Subsequent Workitem Code Sequence", '', 'RequestedSubsequentWorkitemCodeSequence'), -0x00404032: ('SQ', '1', "Non-DICOM Output Code Sequence", '', 'NonDICOMOutputCodeSequence'), -0x00404033: ('SQ', '1', "Output Information Sequence", '', 'OutputInformationSequence'), -0x00404034: ('SQ', '1', "Scheduled Human Performers Sequence", '', 'ScheduledHumanPerformersSequence'), -0x00404035: ('SQ', '1', "Actual Human Performers Sequence", '', 'ActualHumanPerformersSequence'), -0x00404036: ('LO', '1', "Human Performer's Organization", '', 'HumanPerformerOrganization'), -0x00404037: ('PN', '1', "Human Performer's Name", '', 'HumanPerformerName'), -0x00404040: ('CS', '1', "Raw Data Handling", '', 'RawDataHandling'), -0x00404041: ('CS', '1', "Input Readiness State", '', 'InputReadinessState'), -0x00404050: ('DT', '1', "Performed Procedure Step Start DateTime", '', 'PerformedProcedureStepStartDateTime'), -0x00404051: ('DT', '1', "Performed Procedure Step End DateTime", '', 'PerformedProcedureStepEndDateTime'), -0x00404052: ('DT', '1', "Procedure Step Cancellation DateTime", '', 'ProcedureStepCancellationDateTime'), -0x00408302: ('DS', '1', "Entrance Dose in mGy", '', 'EntranceDoseInmGy'), -0x00409094: ('SQ', '1', "Referenced Image Real World Value Mapping Sequence", '', 'ReferencedImageRealWorldValueMappingSequence'), -0x00409096: ('SQ', '1', "Real World Value Mapping Sequence", '', 'RealWorldValueMappingSequence'), -0x00409098: ('SQ', '1', "Pixel Value Mapping Code Sequence", '', 'PixelValueMappingCodeSequence'), -0x00409210: ('SH', '1', "LUT Label", '', 'LUTLabel'), -0x00409211: ('US or SS', '1', "Real World Value Last Value Mapped", '', 'RealWorldValueLastValueMapped'), -0x00409212: ('FD', '1-n', "Real World Value LUT Data", '', 'RealWorldValueLUTData'), -0x00409216: ('US or SS', '1', "Real World Value First Value Mapped", '', 'RealWorldValueFirstValueMapped'), -0x00409224: ('FD', '1', "Real World Value Intercept", '', 'RealWorldValueIntercept'), -0x00409225: ('FD', '1', "Real World Value Slope", '', 'RealWorldValueSlope'), -0x0040A007: ('CS', '1', "Findings Flag (Trial)", 'Retired', 'FindingsFlagTrial'), -0x0040A010: ('CS', '1', "Relationship Type", '', 'RelationshipType'), -0x0040A020: ('SQ', '1', "Findings Sequence (Trial)", 'Retired', 'FindingsSequenceTrial'), -0x0040A021: ('UI', '1', "Findings Group UID (Trial)", 'Retired', 'FindingsGroupUIDTrial'), -0x0040A022: ('UI', '1', "Referenced Findings Group UID (Trial)", 'Retired', 'ReferencedFindingsGroupUIDTrial'), -0x0040A023: ('DA', '1', "Findings Group Recording Date (Trial)", 'Retired', 'FindingsGroupRecordingDateTrial'), -0x0040A024: ('TM', '1', "Findings Group Recording Time (Trial)", 'Retired', 'FindingsGroupRecordingTimeTrial'), -0x0040A026: ('SQ', '1', "Findings Source Category Code Sequence (Trial)", 'Retired', 'FindingsSourceCategoryCodeSequenceTrial'), -0x0040A027: ('LO', '1', "Verifying Organization", '', 'VerifyingOrganization'), -0x0040A028: ('SQ', '1', "Documenting Organization Identifier Code Sequence (Trial)", 'Retired', 'DocumentingOrganizationIdentifierCodeSequenceTrial'), -0x0040A030: ('DT', '1', "Verification Date Time", '', 'VerificationDateTime'), -0x0040A032: ('DT', '1', "Observation Date Time", '', 'ObservationDateTime'), -0x0040A040: ('CS', '1', "Value Type", '', 'ValueType'), -0x0040A043: ('SQ', '1', "Concept Name Code Sequence", '', 'ConceptNameCodeSequence'), -0x0040A047: ('LO', '1', "Measurement Precision Description (Trial)", 'Retired', 'MeasurementPrecisionDescriptionTrial'), -0x0040A050: ('CS', '1', "Continuity Of Content", '', 'ContinuityOfContent'), -0x0040A057: ('CS', '1-n', "Urgency or Priority Alerts (Trial)", 'Retired', 'UrgencyOrPriorityAlertsTrial'), -0x0040A060: ('LO', '1', "Sequencing Indicator (Trial)", 'Retired', 'SequencingIndicatorTrial'), -0x0040A066: ('SQ', '1', "Document Identifier Code Sequence (Trial)", 'Retired', 'DocumentIdentifierCodeSequenceTrial'), -0x0040A067: ('PN', '1', "Document Author (Trial)", 'Retired', 'DocumentAuthorTrial'), -0x0040A068: ('SQ', '1', "Document Author Identifier Code Sequence (Trial)", 'Retired', 'DocumentAuthorIdentifierCodeSequenceTrial'), -0x0040A070: ('SQ', '1', "Identifier Code Sequence (Trial)", 'Retired', 'IdentifierCodeSequenceTrial'), -0x0040A073: ('SQ', '1', "Verifying Observer Sequence", '', 'VerifyingObserverSequence'), -0x0040A074: ('OB', '1', "Object Binary Identifier (Trial)", 'Retired', 'ObjectBinaryIdentifierTrial'), -0x0040A075: ('PN', '1', "Verifying Observer Name", '', 'VerifyingObserverName'), -0x0040A076: ('SQ', '1', "Documenting Observer Identifier Code Sequence (Trial)", 'Retired', 'DocumentingObserverIdentifierCodeSequenceTrial'), -0x0040A078: ('SQ', '1', "Author Observer Sequence", '', 'AuthorObserverSequence'), -0x0040A07A: ('SQ', '1', "Participant Sequence", '', 'ParticipantSequence'), -0x0040A07C: ('SQ', '1', "Custodial Organization Sequence", '', 'CustodialOrganizationSequence'), -0x0040A080: ('CS', '1', "Participation Type", '', 'ParticipationType'), -0x0040A082: ('DT', '1', "Participation DateTime", '', 'ParticipationDateTime'), -0x0040A084: ('CS', '1', "Observer Type", '', 'ObserverType'), -0x0040A085: ('SQ', '1', "Procedure Identifier Code Sequence (Trial)", 'Retired', 'ProcedureIdentifierCodeSequenceTrial'), -0x0040A088: ('SQ', '1', "Verifying Observer Identification Code Sequence", '', 'VerifyingObserverIdentificationCodeSequence'), -0x0040A089: ('OB', '1', "Object Directory Binary Identifier (Trial)", 'Retired', 'ObjectDirectoryBinaryIdentifierTrial'), -0x0040A090: ('SQ', '1', "Equivalent CDA Document Sequence", 'Retired', 'EquivalentCDADocumentSequence'), -0x0040A0B0: ('US', '2-2n', "Referenced Waveform Channels", '', 'ReferencedWaveformChannels'), -0x0040A110: ('DA', '1', "Date of Document or Verbal Transaction (Trial)", 'Retired', 'DateOfDocumentOrVerbalTransactionTrial'), -0x0040A112: ('TM', '1', "Time of Document Creation or Verbal Transaction (Trial)", 'Retired', 'TimeOfDocumentCreationOrVerbalTransactionTrial'), -0x0040A120: ('DT', '1', "DateTime", '', 'DateTime'), -0x0040A121: ('DA', '1', "Date", '', 'Date'), -0x0040A122: ('TM', '1', "Time", '', 'Time'), -0x0040A123: ('PN', '1', "Person Name", '', 'PersonName'), -0x0040A124: ('UI', '1', "UID", '', 'UID'), -0x0040A125: ('CS', '2', "Report Status ID (Trial)", 'Retired', 'ReportStatusIDTrial'), -0x0040A130: ('CS', '1', "Temporal Range Type", '', 'TemporalRangeType'), -0x0040A132: ('UL', '1-n', "Referenced Sample Positions", '', 'ReferencedSamplePositions'), -0x0040A136: ('US', '1-n', "Referenced Frame Numbers", '', 'ReferencedFrameNumbers'), -0x0040A138: ('DS', '1-n', "Referenced Time Offsets", '', 'ReferencedTimeOffsets'), -0x0040A13A: ('DT', '1-n', "Referenced DateTime", '', 'ReferencedDateTime'), -0x0040A160: ('UT', '1', "Text Value", '', 'TextValue'), -0x0040A167: ('SQ', '1', "Observation Category Code Sequence (Trial)", 'Retired', 'ObservationCategoryCodeSequenceTrial'), -0x0040A168: ('SQ', '1', "Concept Code Sequence", '', 'ConceptCodeSequence'), -0x0040A16A: ('ST', '1', "Bibliographic Citation (Trial)", 'Retired', 'BibliographicCitationTrial'), -0x0040A170: ('SQ', '1', "Purpose of Reference Code Sequence", '', 'PurposeOfReferenceCodeSequence'), -0x0040A171: ('UI', '1', "Observation UID (Trial)", 'Retired', 'ObservationUIDTrial'), -0x0040A172: ('UI', '1', "Referenced Observation UID (Trial)", 'Retired', 'ReferencedObservationUIDTrial'), -0x0040A173: ('CS', '1', "Referenced Observation Class (Trial)", 'Retired', 'ReferencedObservationClassTrial'), -0x0040A174: ('CS', '1', "Referenced Object Observation Class (Trial)", 'Retired', 'ReferencedObjectObservationClassTrial'), -0x0040A180: ('US', '1', "Annotation Group Number", '', 'AnnotationGroupNumber'), -0x0040A192: ('DA', '1', "Observation Date (Trial)", 'Retired', 'ObservationDateTrial'), -0x0040A193: ('TM', '1', "Observation Time (Trial)", 'Retired', 'ObservationTimeTrial'), -0x0040A194: ('CS', '1', "Measurement Automation (Trial)", 'Retired', 'MeasurementAutomationTrial'), -0x0040A195: ('SQ', '1', "Modifier Code Sequence", '', 'ModifierCodeSequence'), -0x0040A224: ('ST', '1', "Identification Description (Trial)", 'Retired', 'IdentificationDescriptionTrial'), -0x0040A290: ('CS', '1', "Coordinates Set Geometric Type (Trial)", 'Retired', 'CoordinatesSetGeometricTypeTrial'), -0x0040A296: ('SQ', '1', "Algorithm Code Sequence (Trial)", 'Retired', 'AlgorithmCodeSequenceTrial'), -0x0040A297: ('ST', '1', "Algorithm Description (Trial)", 'Retired', 'AlgorithmDescriptionTrial'), -0x0040A29A: ('SL', '2-2n', "Pixel Coordinates Set (Trial)", 'Retired', 'PixelCoordinatesSetTrial'), -0x0040A300: ('SQ', '1', "Measured Value Sequence", '', 'MeasuredValueSequence'), -0x0040A301: ('SQ', '1', "Numeric Value Qualifier Code Sequence", '', 'NumericValueQualifierCodeSequence'), -0x0040A307: ('PN', '1', "Current Observer (Trial)", 'Retired', 'CurrentObserverTrial'), -0x0040A30A: ('DS', '1-n', "Numeric Value", '', 'NumericValue'), -0x0040A313: ('SQ', '1', "Referenced Accession Sequence (Trial)", 'Retired', 'ReferencedAccessionSequenceTrial'), -0x0040A33A: ('ST', '1', "Report Status Comment (Trial)", 'Retired', 'ReportStatusCommentTrial'), -0x0040A340: ('SQ', '1', "Procedure Context Sequence (Trial)", 'Retired', 'ProcedureContextSequenceTrial'), -0x0040A352: ('PN', '1', "Verbal Source (Trial)", 'Retired', 'VerbalSourceTrial'), -0x0040A353: ('ST', '1', "Address (Trial)", 'Retired', 'AddressTrial'), -0x0040A354: ('LO', '1', "Telephone Number (Trial)", 'Retired', 'TelephoneNumberTrial'), -0x0040A358: ('SQ', '1', "Verbal Source Identifier Code Sequence (Trial)", 'Retired', 'VerbalSourceIdentifierCodeSequenceTrial'), -0x0040A360: ('SQ', '1', "Predecessor Documents Sequence", '', 'PredecessorDocumentsSequence'), -0x0040A370: ('SQ', '1', "Referenced Request Sequence", '', 'ReferencedRequestSequence'), -0x0040A372: ('SQ', '1', "Performed Procedure Code Sequence", '', 'PerformedProcedureCodeSequence'), -0x0040A375: ('SQ', '1', "Current Requested Procedure Evidence Sequence", '', 'CurrentRequestedProcedureEvidenceSequence'), -0x0040A380: ('SQ', '1', "Report Detail Sequence (Trial)", 'Retired', 'ReportDetailSequenceTrial'), -0x0040A385: ('SQ', '1', "Pertinent Other Evidence Sequence", '', 'PertinentOtherEvidenceSequence'), -0x0040A390: ('SQ', '1', "HL7 Structured Document Reference Sequence", '', 'HL7StructuredDocumentReferenceSequence'), -0x0040A402: ('UI', '1', "Observation Subject UID (Trial)", 'Retired', 'ObservationSubjectUIDTrial'), -0x0040A403: ('CS', '1', "Observation Subject Class (Trial)", 'Retired', 'ObservationSubjectClassTrial'), -0x0040A404: ('SQ', '1', "Observation Subject Type Code Sequence (Trial)", 'Retired', 'ObservationSubjectTypeCodeSequenceTrial'), -0x0040A491: ('CS', '1', "Completion Flag", '', 'CompletionFlag'), -0x0040A492: ('LO', '1', "Completion Flag Description", '', 'CompletionFlagDescription'), -0x0040A493: ('CS', '1', "Verification Flag", '', 'VerificationFlag'), -0x0040A494: ('CS', '1', "Archive Requested", '', 'ArchiveRequested'), -0x0040A496: ('CS', '1', "Preliminary Flag", '', 'PreliminaryFlag'), -0x0040A504: ('SQ', '1', "Content Template Sequence", '', 'ContentTemplateSequence'), -0x0040A525: ('SQ', '1', "Identical Documents Sequence", '', 'IdenticalDocumentsSequence'), -0x0040A600: ('CS', '1', "Observation Subject Context Flag (Trial)", 'Retired', 'ObservationSubjectContextFlagTrial'), -0x0040A601: ('CS', '1', "Observer Context Flag (Trial)", 'Retired', 'ObserverContextFlagTrial'), -0x0040A603: ('CS', '1', "Procedure Context Flag (Trial)", 'Retired', 'ProcedureContextFlagTrial'), -0x0040A730: ('SQ', '1', "Content Sequence", '', 'ContentSequence'), -0x0040A731: ('SQ', '1', "Relationship Sequence (Trial)", 'Retired', 'RelationshipSequenceTrial'), -0x0040A732: ('SQ', '1', "Relationship Type Code Sequence (Trial)", 'Retired', 'RelationshipTypeCodeSequenceTrial'), -0x0040A744: ('SQ', '1', "Language Code Sequence (Trial)", 'Retired', 'LanguageCodeSequenceTrial'), -0x0040A992: ('ST', '1', "Uniform Resource Locator (Trial)", 'Retired', 'UniformResourceLocatorTrial'), -0x0040B020: ('SQ', '1', "Waveform Annotation Sequence", '', 'WaveformAnnotationSequence'), -0x0040DB00: ('CS', '1', "Template Identifier", '', 'TemplateIdentifier'), -0x0040DB06: ('DT', '1', "Template Version", 'Retired', 'TemplateVersion'), -0x0040DB07: ('DT', '1', "Template Local Version", 'Retired', 'TemplateLocalVersion'), -0x0040DB0B: ('CS', '1', "Template Extension Flag", 'Retired', 'TemplateExtensionFlag'), -0x0040DB0C: ('UI', '1', "Template Extension Organization UID", 'Retired', 'TemplateExtensionOrganizationUID'), -0x0040DB0D: ('UI', '1', "Template Extension Creator UID", 'Retired', 'TemplateExtensionCreatorUID'), -0x0040DB73: ('UL', '1-n', "Referenced Content Item Identifier", '', 'ReferencedContentItemIdentifier'), -0x0040E001: ('ST', '1', "HL7 Instance Identifier", '', 'HL7InstanceIdentifier'), -0x0040E004: ('DT', '1', "HL7 Document Effective Time", '', 'HL7DocumentEffectiveTime'), -0x0040E006: ('SQ', '1', "HL7 Document Type Code Sequence", '', 'HL7DocumentTypeCodeSequence'), -0x0040E008: ('SQ', '1', "Document Class Code Sequence", '', 'DocumentClassCodeSequence'), -0x0040E010: ('UT', '1', "Retrieve URI", '', 'RetrieveURI'), -0x0040E011: ('UI', '1', "Retrieve Location UID", '', 'RetrieveLocationUID'), -0xE020: ('CS', '1', "Type of Instances", '', 'TypeOfInstances'), -0xE021: ('SQ', '1', "DICOM Retrieval Sequence", '', 'DICOMRetrievalSequence'), -0xE022: ('SQ', '1', "DICOM Media Retrieval Sequence", '', 'DICOMMediaRetrievalSequence'), -0xE023: ('SQ', '1', "WADO Retrieval Sequence", '', 'WADORetrievalSequence'), -0xE024: ('SQ', '1', "XDS Retrieval Sequence", '', 'XDSRetrievalSequence'), -0xE030: ('UI', '1', "Repository Unique ID", '', 'RepositoryUniqueID'), -0xE031: ('UI', '1', "Home Community ID", '', 'HomeCommunityID'), -0x00420010: ('ST', '1', "Document Title", '', 'DocumentTitle'), -0x00420011: ('OB', '1', "Encapsulated Document", '', 'EncapsulatedDocument'), -0x00420012: ('LO', '1', "MIME Type of Encapsulated Document", '', 'MIMETypeOfEncapsulatedDocument'), -0x00420013: ('SQ', '1', "Source Instance Sequence", '', 'SourceInstanceSequence'), -0x00420014: ('LO', '1-n', "List of MIME Types", '', 'ListOfMIMETypes'), -0x00440001: ('ST', '1', "Product Package Identifier", '', 'ProductPackageIdentifier'), -0x00440002: ('CS', '1', "Substance Administration Approval", '', 'SubstanceAdministrationApproval'), -0x00440003: ('LT', '1', "Approval Status Further Description", '', 'ApprovalStatusFurtherDescription'), -0x00440004: ('DT', '1', "Approval Status DateTime", '', 'ApprovalStatusDateTime'), -0x00440007: ('SQ', '1', "Product Type Code Sequence", '', 'ProductTypeCodeSequence'), -0x00440008: ('LO', '1-n', "Product Name", '', 'ProductName'), -0x00440009: ('LT', '1', "Product Description", '', 'ProductDescription'), -0x0044000A: ('LO', '1', "Product Lot Identifier", '', 'ProductLotIdentifier'), -0x0044000B: ('DT', '1', "Product Expiration DateTime", '', 'ProductExpirationDateTime'), -0x00440010: ('DT', '1', "Substance Administration DateTime", '', 'SubstanceAdministrationDateTime'), -0x00440011: ('LO', '1', "Substance Administration Notes", '', 'SubstanceAdministrationNotes'), -0x00440012: ('LO', '1', "Substance Administration Device ID", '', 'SubstanceAdministrationDeviceID'), -0x00440013: ('SQ', '1', "Product Parameter Sequence", '', 'ProductParameterSequence'), -0x00440019: ('SQ', '1', "Substance Administration Parameter Sequence", '', 'SubstanceAdministrationParameterSequence'), -0x00460012: ('LO', '1', "Lens Description", '', 'LensDescription'), -0x00460014: ('SQ', '1', "Right Lens Sequence", '', 'RightLensSequence'), -0x00460015: ('SQ', '1', "Left Lens Sequence", '', 'LeftLensSequence'), -0x00460016: ('SQ', '1', "Unspecified Laterality Lens Sequence", '', 'UnspecifiedLateralityLensSequence'), -0x00460018: ('SQ', '1', "Cylinder Sequence", '', 'CylinderSequence'), -0x00460028: ('SQ', '1', "Prism Sequence", '', 'PrismSequence'), -0x00460030: ('FD', '1', "Horizontal Prism Power", '', 'HorizontalPrismPower'), -0x00460032: ('CS', '1', "Horizontal Prism Base", '', 'HorizontalPrismBase'), -0x00460034: ('FD', '1', "Vertical Prism Power", '', 'VerticalPrismPower'), -0x00460036: ('CS', '1', "Vertical Prism Base", '', 'VerticalPrismBase'), -0x00460038: ('CS', '1', "Lens Segment Type", '', 'LensSegmentType'), -0x00460040: ('FD', '1', "Optical Transmittance", '', 'OpticalTransmittance'), -0x00460042: ('FD', '1', "Channel Width", '', 'ChannelWidth'), -0x00460044: ('FD', '1', "Pupil Size", '', 'PupilSize'), -0x00460046: ('FD', '1', "Corneal Size", '', 'CornealSize'), -0x00460050: ('SQ', '1', "Autorefraction Right Eye Sequence", '', 'AutorefractionRightEyeSequence'), -0x00460052: ('SQ', '1', "Autorefraction Left Eye Sequence", '', 'AutorefractionLeftEyeSequence'), -0x00460060: ('FD', '1', "Distance Pupillary Distance", '', 'DistancePupillaryDistance'), -0x00460062: ('FD', '1', "Near Pupillary Distance", '', 'NearPupillaryDistance'), -0x00460063: ('FD', '1', "Intermediate Pupillary Distance", '', 'IntermediatePupillaryDistance'), -0x00460064: ('FD', '1', "Other Pupillary Distance", '', 'OtherPupillaryDistance'), -0x00460070: ('SQ', '1', "Keratometry Right Eye Sequence", '', 'KeratometryRightEyeSequence'), -0x00460071: ('SQ', '1', "Keratometry Left Eye Sequence", '', 'KeratometryLeftEyeSequence'), -0x00460074: ('SQ', '1', "Steep Keratometric Axis Sequence", '', 'SteepKeratometricAxisSequence'), -0x00460075: ('FD', '1', "Radius of Curvature", '', 'RadiusOfCurvature'), -0x00460076: ('FD', '1', "Keratometric Power", '', 'KeratometricPower'), -0x00460077: ('FD', '1', "Keratometric Axis", '', 'KeratometricAxis'), -0x00460080: ('SQ', '1', "Flat Keratometric Axis Sequence", '', 'FlatKeratometricAxisSequence'), -0x00460092: ('CS', '1', "Background Color", '', 'BackgroundColor'), -0x00460094: ('CS', '1', "Optotype", '', 'Optotype'), -0x00460095: ('CS', '1', "Optotype Presentation", '', 'OptotypePresentation'), -0x00460097: ('SQ', '1', "Subjective Refraction Right Eye Sequence", '', 'SubjectiveRefractionRightEyeSequence'), -0x00460098: ('SQ', '1', "Subjective Refraction Left Eye Sequence", '', 'SubjectiveRefractionLeftEyeSequence'), -0x00460100: ('SQ', '1', "Add Near Sequence", '', 'AddNearSequence'), -0x00460101: ('SQ', '1', "Add Intermediate Sequence", '', 'AddIntermediateSequence'), -0x00460102: ('SQ', '1', "Add Other Sequence", '', 'AddOtherSequence'), -0x00460104: ('FD', '1', "Add Power", '', 'AddPower'), -0x00460106: ('FD', '1', "Viewing Distance", '', 'ViewingDistance'), -0x00460121: ('SQ', '1', "Visual Acuity Type Code Sequence", '', 'VisualAcuityTypeCodeSequence'), -0x00460122: ('SQ', '1', "Visual Acuity Right Eye Sequence", '', 'VisualAcuityRightEyeSequence'), -0x00460123: ('SQ', '1', "Visual Acuity Left Eye Sequence", '', 'VisualAcuityLeftEyeSequence'), -0x00460124: ('SQ', '1', "Visual Acuity Both Eyes Open Sequence", '', 'VisualAcuityBothEyesOpenSequence'), -0x00460125: ('CS', '1', "Viewing Distance Type", '', 'ViewingDistanceType'), -0x00460135: ('SS', '2', "Visual Acuity Modifiers", '', 'VisualAcuityModifiers'), -0x00460137: ('FD', '1', "Decimal Visual Acuity", '', 'DecimalVisualAcuity'), -0x00460139: ('LO', '1', "Optotype Detailed Definition", '', 'OptotypeDetailedDefinition'), -0x00460145: ('SQ', '1', "Referenced Refractive Measurements Sequence", '', 'ReferencedRefractiveMeasurementsSequence'), -0x00460146: ('FD', '1', "Sphere Power", '', 'SpherePower'), -0x00460147: ('FD', '1', "Cylinder Power", '', 'CylinderPower'), -0x00480001: ('FL', '1', "Imaged Volume Width", '', 'ImagedVolumeWidth'), -0x00480002: ('FL', '1', "Imaged Volume Height", '', 'ImagedVolumeHeight'), -0x00480003: ('FL', '1', "Imaged Volume Depth", '', 'ImagedVolumeDepth'), -0x00480006: ('UL', '1', "Total Pixel Matrix Columns", '', 'TotalPixelMatrixColumns'), -0x00480007: ('UL', '1', "Total Pixel Matrix Rows", '', 'TotalPixelMatrixRows'), -0x00480008: ('SQ', '1', "Total Pixel Matrix Origin Sequence", '', 'TotalPixelMatrixOriginSequence'), -0x00480010: ('CS', '1', "Specimen Label in Image", '', 'SpecimenLabelInImage'), -0x00480011: ('CS', '1', "Focus Method", '', 'FocusMethod'), -0x00480012: ('CS', '1', "Extended Depth of Field", '', 'ExtendedDepthOfField'), -0x00480013: ('US', '1', "Number of Focal Planes", '', 'NumberOfFocalPlanes'), -0x00480014: ('FL', '1', "Distance Between Focal Planes", '', 'DistanceBetweenFocalPlanes'), -0x00480015: ('US', '3', "Recommended Absent Pixel CIELab Value", '', 'RecommendedAbsentPixelCIELabValue'), -0x00480100: ('SQ', '1', "Illuminator Type Code Sequence", '', 'IlluminatorTypeCodeSequence'), -0x00480102: ('DS', '6', "Image Orientation (Slide)", '', 'ImageOrientationSlide'), -0x00480105: ('SQ', '1', "Optical Path Sequence", '', 'OpticalPathSequence'), -0x00480106: ('SH', '1', "Optical Path Identifier", '', 'OpticalPathIdentifier'), -0x00480107: ('ST', '1', "Optical Path Description", '', 'OpticalPathDescription'), -0x00480108: ('SQ', '1', "Illumination Color Code Sequence", '', 'IlluminationColorCodeSequence'), -0x00480110: ('SQ', '1', "Specimen Reference Sequence", '', 'SpecimenReferenceSequence'), -0x00480111: ('DS', '1', "Condenser Lens Power", '', 'CondenserLensPower'), -0x00480112: ('DS', '1', "Objective Lens Power", '', 'ObjectiveLensPower'), -0x00480113: ('DS', '1', "Objective Lens Numerical Aperture", '', 'ObjectiveLensNumericalAperture'), -0x00480120: ('SQ', '1', "Palette Color Lookup Table Sequence", '', 'PaletteColorLookupTableSequence'), -0x00480200: ('SQ', '1', "Referenced Image Navigation Sequence", '', 'ReferencedImageNavigationSequence'), -0x00480201: ('US', '2', "Top Left Hand Corner of Localizer Area", '', 'TopLeftHandCornerOfLocalizerArea'), -0x00480202: ('US', '2', "Bottom Right Hand Corner of Localizer Area", '', 'BottomRightHandCornerOfLocalizerArea'), -0x00480207: ('SQ', '1', "Optical Path Identification Sequence", '', 'OpticalPathIdentificationSequence'), -0x0048021A: ('SQ', '1', "Plane Position (Slide) Sequence", '', 'PlanePositionSlideSequence'), -0x0048021E: ('SL', '1', "Row Position In Total Image Pixel Matrix", '', 'RowPositionInTotalImagePixelMatrix'), -0x0048021F: ('SL', '1', "Column Position In Total Image Pixel Matrix", '', 'ColumnPositionInTotalImagePixelMatrix'), -0x00480301: ('CS', '1', "Pixel Origin Interpretation", '', 'PixelOriginInterpretation'), -0x00500004: ('CS', '1', "Calibration Image", '', 'CalibrationImage'), -0x00500010: ('SQ', '1', "Device Sequence", '', 'DeviceSequence'), -0x00500012: ('SQ', '1', "Container Component Type Code Sequence", '', 'ContainerComponentTypeCodeSequence'), -0x00500013: ('FD', '1', "Container Component Thickness", '', 'ContainerComponentThickness'), -0x00500014: ('DS', '1', "Device Length", '', 'DeviceLength'), -0x00500015: ('FD', '1', "Container Component Width", '', 'ContainerComponentWidth'), -0x00500016: ('DS', '1', "Device Diameter", '', 'DeviceDiameter'), -0x00500017: ('CS', '1', "Device Diameter Units", '', 'DeviceDiameterUnits'), -0x00500018: ('DS', '1', "Device Volume", '', 'DeviceVolume'), -0x00500019: ('DS', '1', "Inter-Marker Distance", '', 'InterMarkerDistance'), -0x0050001A: ('CS', '1', "Container Component Material", '', 'ContainerComponentMaterial'), -0x0050001B: ('LO', '1', "Container Component ID", '', 'ContainerComponentID'), -0x0050001C: ('FD', '1', "Container Component Length", '', 'ContainerComponentLength'), -0x0050001D: ('FD', '1', "Container Component Diameter", '', 'ContainerComponentDiameter'), -0x0050001E: ('LO', '1', "Container Component Description", '', 'ContainerComponentDescription'), -0x00500020: ('LO', '1', "Device Description", '', 'DeviceDescription'), -0x00520001: ('FL', '1', "Contrast/Bolus Ingredient Percent by Volume", '', 'ContrastBolusIngredientPercentByVolume'), -0x00520002: ('FD', '1', "OCT Focal Distance", '', 'OCTFocalDistance'), -0x00520003: ('FD', '1', "Beam Spot Size", '', 'BeamSpotSize'), -0x00520004: ('FD', '1', "Effective Refractive Index", '', 'EffectiveRefractiveIndex'), -0x00520006: ('CS', '1', "OCT Acquisition Domain", '', 'OCTAcquisitionDomain'), -0x00520007: ('FD', '1', "OCT Optical Center Wavelength", '', 'OCTOpticalCenterWavelength'), -0x00520008: ('FD', '1', "Axial Resolution", '', 'AxialResolution'), -0x00520009: ('FD', '1', "Ranging Depth", '', 'RangingDepth'), -0x00520011: ('FD', '1', "A-line Rate", '', 'ALineRate'), -0x00520012: ('US', '1', "A-lines Per Frame", '', 'ALinesPerFrame'), -0x00520013: ('FD', '1', "Catheter Rotational Rate", '', 'CatheterRotationalRate'), -0x00520014: ('FD', '1', "A-line Pixel Spacing", '', 'ALinePixelSpacing'), -0x00520016: ('SQ', '1', "Mode of Percutaneous Access Sequence", '', 'ModeOfPercutaneousAccessSequence'), -0x00520025: ('SQ', '1', "Intravascular OCT Frame Type Sequence", '', 'IntravascularOCTFrameTypeSequence'), -0x00520026: ('CS', '1', "OCT Z Offset Applied", '', 'OCTZOffsetApplied'), -0x00520027: ('SQ', '1', "Intravascular Frame Content Sequence", '', 'IntravascularFrameContentSequence'), -0x00520028: ('FD', '1', "Intravascular Longitudinal Distance", '', 'IntravascularLongitudinalDistance'), -0x00520029: ('SQ', '1', "Intravascular OCT Frame Content Sequence", '', 'IntravascularOCTFrameContentSequence'), -0x00520030: ('SS', '1', "OCT Z Offset Correction", '', 'OCTZOffsetCorrection'), -0x00520031: ('CS', '1', "Catheter Direction of Rotation", '', 'CatheterDirectionOfRotation'), -0x00520033: ('FD', '1', "Seam Line Location", '', 'SeamLineLocation'), -0x00520034: ('FD', '1', "First A-line Location", '', 'FirstALineLocation'), -0x00520036: ('US', '1', "Seam Line Index", '', 'SeamLineIndex'), -0x00520038: ('US', '1', "Number of Padded A-lines", '', 'NumberOfPaddedAlines'), -0x00520039: ('CS', '1', "Interpolation Type", '', 'InterpolationType'), -0x0052003A: ('CS', '1', "Refractive Index Applied", '', 'RefractiveIndexApplied'), -0x00540010: ('US', '1-n', "Energy Window Vector", '', 'EnergyWindowVector'), -0x00540011: ('US', '1', "Number of Energy Windows", '', 'NumberOfEnergyWindows'), -0x00540012: ('SQ', '1', "Energy Window Information Sequence", '', 'EnergyWindowInformationSequence'), -0x00540013: ('SQ', '1', "Energy Window Range Sequence", '', 'EnergyWindowRangeSequence'), -0x00540014: ('DS', '1', "Energy Window Lower Limit", '', 'EnergyWindowLowerLimit'), -0x00540015: ('DS', '1', "Energy Window Upper Limit", '', 'EnergyWindowUpperLimit'), -0x00540016: ('SQ', '1', "Radiopharmaceutical Information Sequence", '', 'RadiopharmaceuticalInformationSequence'), -0x00540017: ('IS', '1', "Residual Syringe Counts", '', 'ResidualSyringeCounts'), -0x00540018: ('SH', '1', "Energy Window Name", '', 'EnergyWindowName'), -0x00540020: ('US', '1-n', "Detector Vector", '', 'DetectorVector'), -0x00540021: ('US', '1', "Number of Detectors", '', 'NumberOfDetectors'), -0x00540022: ('SQ', '1', "Detector Information Sequence", '', 'DetectorInformationSequence'), -0x00540030: ('US', '1-n', "Phase Vector", '', 'PhaseVector'), -0x00540031: ('US', '1', "Number of Phases", '', 'NumberOfPhases'), -0x00540032: ('SQ', '1', "Phase Information Sequence", '', 'PhaseInformationSequence'), -0x00540033: ('US', '1', "Number of Frames in Phase", '', 'NumberOfFramesInPhase'), -0x00540036: ('IS', '1', "Phase Delay", '', 'PhaseDelay'), -0x00540038: ('IS', '1', "Pause Between Frames", '', 'PauseBetweenFrames'), -0x00540039: ('CS', '1', "Phase Description", '', 'PhaseDescription'), -0x00540050: ('US', '1-n', "Rotation Vector", '', 'RotationVector'), -0x00540051: ('US', '1', "Number of Rotations", '', 'NumberOfRotations'), -0x00540052: ('SQ', '1', "Rotation Information Sequence", '', 'RotationInformationSequence'), -0x00540053: ('US', '1', "Number of Frames in Rotation", '', 'NumberOfFramesInRotation'), -0x00540060: ('US', '1-n', "R-R Interval Vector", '', 'RRIntervalVector'), -0x00540061: ('US', '1', "Number of R-R Intervals", '', 'NumberOfRRIntervals'), -0x00540062: ('SQ', '1', "Gated Information Sequence", '', 'GatedInformationSequence'), -0x00540063: ('SQ', '1', "Data Information Sequence", '', 'DataInformationSequence'), -0x00540070: ('US', '1-n', "Time Slot Vector", '', 'TimeSlotVector'), -0x00540071: ('US', '1', "Number of Time Slots", '', 'NumberOfTimeSlots'), -0x00540072: ('SQ', '1', "Time Slot Information Sequence", '', 'TimeSlotInformationSequence'), -0x00540073: ('DS', '1', "Time Slot Time", '', 'TimeSlotTime'), -0x00540080: ('US', '1-n', "Slice Vector", '', 'SliceVector'), -0x00540081: ('US', '1', "Number of Slices", '', 'NumberOfSlices'), -0x00540090: ('US', '1-n', "Angular View Vector", '', 'AngularViewVector'), -0x00540100: ('US', '1-n', "Time Slice Vector", '', 'TimeSliceVector'), -0x00540101: ('US', '1', "Number of Time Slices", '', 'NumberOfTimeSlices'), -0x00540200: ('DS', '1', "Start Angle", '', 'StartAngle'), -0x00540202: ('CS', '1', "Type of Detector Motion", '', 'TypeOfDetectorMotion'), -0x00540210: ('IS', '1-n', "Trigger Vector", '', 'TriggerVector'), -0x00540211: ('US', '1', "Number of Triggers in Phase", '', 'NumberOfTriggersInPhase'), -0x00540220: ('SQ', '1', "View Code Sequence", '', 'ViewCodeSequence'), -0x00540222: ('SQ', '1', "View Modifier Code Sequence", '', 'ViewModifierCodeSequence'), -0x00540300: ('SQ', '1', "Radionuclide Code Sequence", '', 'RadionuclideCodeSequence'), -0x00540302: ('SQ', '1', "Administration Route Code Sequence", '', 'AdministrationRouteCodeSequence'), -0x00540304: ('SQ', '1', "Radiopharmaceutical Code Sequence", '', 'RadiopharmaceuticalCodeSequence'), -0x00540306: ('SQ', '1', "Calibration Data Sequence", '', 'CalibrationDataSequence'), -0x00540308: ('US', '1', "Energy Window Number", '', 'EnergyWindowNumber'), -0x00540400: ('SH', '1', "Image ID", '', 'ImageID'), -0x00540410: ('SQ', '1', "Patient Orientation Code Sequence", '', 'PatientOrientationCodeSequence'), -0x00540412: ('SQ', '1', "Patient Orientation Modifier Code Sequence", '', 'PatientOrientationModifierCodeSequence'), -0x00540414: ('SQ', '1', "Patient Gantry Relationship Code Sequence", '', 'PatientGantryRelationshipCodeSequence'), -0x00540500: ('CS', '1', "Slice Progression Direction", '', 'SliceProgressionDirection'), -0x00541000: ('CS', '2', "Series Type", '', 'SeriesType'), -0x00541001: ('CS', '1', "Units", '', 'Units'), -0x00541002: ('CS', '1', "Counts Source", '', 'CountsSource'), -0x00541004: ('CS', '1', "Reprojection Method", '', 'ReprojectionMethod'), -0x00541006: ('CS', '1', "SUV Type", '', 'SUVType'), -0x00541100: ('CS', '1', "Randoms Correction Method", '', 'RandomsCorrectionMethod'), -0x00541101: ('LO', '1', "Attenuation Correction Method", '', 'AttenuationCorrectionMethod'), -0x00541102: ('CS', '1', "Decay Correction", '', 'DecayCorrection'), -0x00541103: ('LO', '1', "Reconstruction Method", '', 'ReconstructionMethod'), -0x00541104: ('LO', '1', "Detector Lines of Response Used", '', 'DetectorLinesOfResponseUsed'), -0x00541105: ('LO', '1', "Scatter Correction Method", '', 'ScatterCorrectionMethod'), -0x00541200: ('DS', '1', "Axial Acceptance", '', 'AxialAcceptance'), -0x00541201: ('IS', '2', "Axial Mash", '', 'AxialMash'), -0x00541202: ('IS', '1', "Transverse Mash", '', 'TransverseMash'), -0x00541203: ('DS', '2', "Detector Element Size", '', 'DetectorElementSize'), -0x00541210: ('DS', '1', "Coincidence Window Width", '', 'CoincidenceWindowWidth'), -0x00541220: ('CS', '1-n', "Secondary Counts Type", '', 'SecondaryCountsType'), -0x00541300: ('DS', '1', "Frame Reference Time", '', 'FrameReferenceTime'), -0x00541310: ('IS', '1', "Primary (Prompts) Counts Accumulated", '', 'PrimaryPromptsCountsAccumulated'), -0x00541311: ('IS', '1-n', "Secondary Counts Accumulated", '', 'SecondaryCountsAccumulated'), -0x00541320: ('DS', '1', "Slice Sensitivity Factor", '', 'SliceSensitivityFactor'), -0x00541321: ('DS', '1', "Decay Factor", '', 'DecayFactor'), -0x00541322: ('DS', '1', "Dose Calibration Factor", '', 'DoseCalibrationFactor'), -0x00541323: ('DS', '1', "Scatter Fraction Factor", '', 'ScatterFractionFactor'), -0x00541324: ('DS', '1', "Dead Time Factor", '', 'DeadTimeFactor'), -0x00541330: ('US', '1', "Image Index", '', 'ImageIndex'), -0x00541400: ('CS', '1-n', "Counts Included", 'Retired', 'CountsIncluded'), -0x00541401: ('CS', '1', "Dead Time Correction Flag", 'Retired', 'DeadTimeCorrectionFlag'), -0x00603000: ('SQ', '1', "Histogram Sequence", '', 'HistogramSequence'), -0x00603002: ('US', '1', "Histogram Number of Bins", '', 'HistogramNumberOfBins'), -0x00603004: ('US or SS', '1', "Histogram First Bin Value", '', 'HistogramFirstBinValue'), -0x00603006: ('US or SS', '1', "Histogram Last Bin Value", '', 'HistogramLastBinValue'), -0x00603008: ('US', '1', "Histogram Bin Width", '', 'HistogramBinWidth'), -0x00603010: ('LO', '1', "Histogram Explanation", '', 'HistogramExplanation'), -0x00603020: ('UL', '1-n', "Histogram Data", '', 'HistogramData'), -0x00620001: ('CS', '1', "Segmentation Type", '', 'SegmentationType'), -0x00620002: ('SQ', '1', "Segment Sequence", '', 'SegmentSequence'), -0x00620003: ('SQ', '1', "Segmented Property Category Code Sequence", '', 'SegmentedPropertyCategoryCodeSequence'), -0x00620004: ('US', '1', "Segment Number", '', 'SegmentNumber'), -0x00620005: ('LO', '1', "Segment Label", '', 'SegmentLabel'), -0x00620006: ('ST', '1', "Segment Description", '', 'SegmentDescription'), -0x00620008: ('CS', '1', "Segment Algorithm Type", '', 'SegmentAlgorithmType'), -0x00620009: ('LO', '1', "Segment Algorithm Name", '', 'SegmentAlgorithmName'), -0x0062000A: ('SQ', '1', "Segment Identification Sequence", '', 'SegmentIdentificationSequence'), -0x0062000B: ('US', '1-n', "Referenced Segment Number", '', 'ReferencedSegmentNumber'), -0x0062000C: ('US', '1', "Recommended Display Grayscale Value", '', 'RecommendedDisplayGrayscaleValue'), -0x0062000D: ('US', '3', "Recommended Display CIELab Value", '', 'RecommendedDisplayCIELabValue'), -0x0062000E: ('US', '1', "Maximum Fractional Value", '', 'MaximumFractionalValue'), -0x0062000F: ('SQ', '1', "Segmented Property Type Code Sequence", '', 'SegmentedPropertyTypeCodeSequence'), -0x00620010: ('CS', '1', "Segmentation Fractional Type", '', 'SegmentationFractionalType'), -0x00640002: ('SQ', '1', "Deformable Registration Sequence", '', 'DeformableRegistrationSequence'), -0x00640003: ('UI', '1', "Source Frame of Reference UID", '', 'SourceFrameOfReferenceUID'), -0x00640005: ('SQ', '1', "Deformable Registration Grid Sequence", '', 'DeformableRegistrationGridSequence'), -0x00640007: ('UL', '3', "Grid Dimensions", '', 'GridDimensions'), -0x00640008: ('FD', '3', "Grid Resolution", '', 'GridResolution'), -0x00640009: ('OF', '1', "Vector Grid Data", '', 'VectorGridData'), -0x0064000F: ('SQ', '1', "Pre Deformation Matrix Registration Sequence", '', 'PreDeformationMatrixRegistrationSequence'), -0x00640010: ('SQ', '1', "Post Deformation Matrix Registration Sequence", '', 'PostDeformationMatrixRegistrationSequence'), -0x00660001: ('UL', '1', "Number of Surfaces", '', 'NumberOfSurfaces'), -0x00660002: ('SQ', '1', "Surface Sequence", '', 'SurfaceSequence'), -0x00660003: ('UL', '1', "Surface Number", '', 'SurfaceNumber'), -0x00660004: ('LT', '1', "Surface Comments", '', 'SurfaceComments'), -0x00660009: ('CS', '1', "Surface Processing", '', 'SurfaceProcessing'), -0x0066000A: ('FL', '1', "Surface Processing Ratio", '', 'SurfaceProcessingRatio'), -0x0066000B: ('LO', '1', "Surface Processing Description", '', 'SurfaceProcessingDescription'), -0x0066000C: ('FL', '1', "Recommended Presentation Opacity", '', 'RecommendedPresentationOpacity'), -0x0066000D: ('CS', '1', "Recommended Presentation Type", '', 'RecommendedPresentationType'), -0x0066000E: ('CS', '1', "Finite Volume", '', 'FiniteVolume'), -0x00660010: ('CS', '1', "Manifold", '', 'Manifold'), -0x00660011: ('SQ', '1', "Surface Points Sequence", '', 'SurfacePointsSequence'), -0x00660012: ('SQ', '1', "Surface Points Normals Sequence", '', 'SurfacePointsNormalsSequence'), -0x00660013: ('SQ', '1', "Surface Mesh Primitives Sequence", '', 'SurfaceMeshPrimitivesSequence'), -0x00660015: ('UL', '1', "Number of Surface Points", '', 'NumberOfSurfacePoints'), -0x00660016: ('OF', '1', "Point Coordinates Data", '', 'PointCoordinatesData'), -0x00660017: ('FL', '3', "Point Position Accuracy", '', 'PointPositionAccuracy'), -0x00660018: ('FL', '1', "Mean Point Distance", '', 'MeanPointDistance'), -0x00660019: ('FL', '1', "Maximum Point Distance", '', 'MaximumPointDistance'), -0x0066001A: ('FL', '6', "Points Bounding Box Coordinates", '', 'PointsBoundingBoxCoordinates'), -0x0066001B: ('FL', '3', "Axis of Rotation", '', 'AxisOfRotation'), -0x0066001C: ('FL', '3', "Center of Rotation", '', 'CenterOfRotation'), -0x0066001E: ('UL', '1', "Number of Vectors", '', 'NumberOfVectors'), -0x0066001F: ('US', '1', "Vector Dimensionality", '', 'VectorDimensionality'), -0x00660020: ('FL', '1-n', "Vector Accuracy", '', 'VectorAccuracy'), -0x00660021: ('OF', '1', "Vector Coordinate Data", '', 'VectorCoordinateData'), -0x00660023: ('OW', '1', "Triangle Point Index List", '', 'TrianglePointIndexList'), -0x00660024: ('OW', '1', "Edge Point Index List", '', 'EdgePointIndexList'), -0x00660025: ('OW', '1', "Vertex Point Index List", '', 'VertexPointIndexList'), -0x00660026: ('SQ', '1', "Triangle Strip Sequence", '', 'TriangleStripSequence'), -0x00660027: ('SQ', '1', "Triangle Fan Sequence", '', 'TriangleFanSequence'), -0x00660028: ('SQ', '1', "Line Sequence", '', 'LineSequence'), -0x00660029: ('OW', '1', "Primitive Point Index List", '', 'PrimitivePointIndexList'), -0x0066002A: ('UL', '1', "Surface Count", '', 'SurfaceCount'), -0x0066002B: ('SQ', '1', "Referenced Surface Sequence", '', 'ReferencedSurfaceSequence'), -0x0066002C: ('UL', '1', "Referenced Surface Number", '', 'ReferencedSurfaceNumber'), -0x0066002D: ('SQ', '1', "Segment Surface Generation Algorithm Identification Sequence", '', 'SegmentSurfaceGenerationAlgorithmIdentificationSequence'), -0x0066002E: ('SQ', '1', "Segment Surface Source Instance Sequence", '', 'SegmentSurfaceSourceInstanceSequence'), -0x0066002F: ('SQ', '1', "Algorithm Family Code Sequence", '', 'AlgorithmFamilyCodeSequence'), -0x00660030: ('SQ', '1', "Algorithm Name Code Sequence", '', 'AlgorithmNameCodeSequence'), -0x00660031: ('LO', '1', "Algorithm Version", '', 'AlgorithmVersion'), -0x00660032: ('LT', '1', "Algorithm Parameters", '', 'AlgorithmParameters'), -0x00660034: ('SQ', '1', "Facet Sequence", '', 'FacetSequence'), -0x00660035: ('SQ', '1', "Surface Processing Algorithm Identification Sequence", '', 'SurfaceProcessingAlgorithmIdentificationSequence'), -0x00660036: ('LO', '1', "Algorithm Name", '', 'AlgorithmName'), -0x00686210: ('LO', '1', "Implant Size", '', 'ImplantSize'), -0x00686221: ('LO', '1', "Implant Template Version", '', 'ImplantTemplateVersion'), -0x00686222: ('SQ', '1', "Replaced Implant Template Sequence", '', 'ReplacedImplantTemplateSequence'), -0x00686223: ('CS', '1', "Implant Type", '', 'ImplantType'), -0x00686224: ('SQ', '1', "Derivation Implant Template Sequence", '', 'DerivationImplantTemplateSequence'), -0x00686225: ('SQ', '1', "Original Implant Template Sequence", '', 'OriginalImplantTemplateSequence'), -0x00686226: ('DT', '1', "Effective DateTime", '', 'EffectiveDateTime'), -0x00686230: ('SQ', '1', "Implant Target Anatomy Sequence", '', 'ImplantTargetAnatomySequence'), -0x00686260: ('SQ', '1', "Information From Manufacturer Sequence", '', 'InformationFromManufacturerSequence'), -0x00686265: ('SQ', '1', "Notification From Manufacturer Sequence", '', 'NotificationFromManufacturerSequence'), -0x00686270: ('DT', '1', "Information Issue DateTime", '', 'InformationIssueDateTime'), -0x00686280: ('ST', '1', "Information Summary", '', 'InformationSummary'), -0x006862A0: ('SQ', '1', "Implant Regulatory Disapproval Code Sequence", '', 'ImplantRegulatoryDisapprovalCodeSequence'), -0x006862A5: ('FD', '1', "Overall Template Spatial Tolerance", '', 'OverallTemplateSpatialTolerance'), -0x006862C0: ('SQ', '1', "HPGL Document Sequence", '', 'HPGLDocumentSequence'), -0x006862D0: ('US', '1', "HPGL Document ID", '', 'HPGLDocumentID'), -0x006862D5: ('LO', '1', "HPGL Document Label", '', 'HPGLDocumentLabel'), -0x006862E0: ('SQ', '1', "View Orientation Code Sequence", '', 'ViewOrientationCodeSequence'), -0x006862F0: ('FD', '9', "View Orientation Modifier", '', 'ViewOrientationModifier'), -0x006862F2: ('FD', '1', "HPGL Document Scaling", '', 'HPGLDocumentScaling'), -0x00686300: ('OB', '1', "HPGL Document", '', 'HPGLDocument'), -0x00686310: ('US', '1', "HPGL Contour Pen Number", '', 'HPGLContourPenNumber'), -0x00686320: ('SQ', '1', "HPGL Pen Sequence", '', 'HPGLPenSequence'), -0x00686330: ('US', '1', "HPGL Pen Number", '', 'HPGLPenNumber'), -0x00686340: ('LO', '1', "HPGL Pen Label", '', 'HPGLPenLabel'), -0x00686345: ('ST', '1', "HPGL Pen Description", '', 'HPGLPenDescription'), -0x00686346: ('FD', '2', "Recommended Rotation Point", '', 'RecommendedRotationPoint'), -0x00686347: ('FD', '4', "Bounding Rectangle", '', 'BoundingRectangle'), -0x00686350: ('US', '1-n', "Implant Template 3D Model Surface Number", '', 'ImplantTemplate3DModelSurfaceNumber'), -0x00686360: ('SQ', '1', "Surface Model Description Sequence", '', 'SurfaceModelDescriptionSequence'), -0x00686380: ('LO', '1', "Surface Model Label", '', 'SurfaceModelLabel'), -0x00686390: ('FD', '1', "Surface Model Scaling Factor", '', 'SurfaceModelScalingFactor'), -0x006863A0: ('SQ', '1', "Materials Code Sequence", '', 'MaterialsCodeSequence'), -0x006863A4: ('SQ', '1', "Coating Materials Code Sequence", '', 'CoatingMaterialsCodeSequence'), -0x006863A8: ('SQ', '1', "Implant Type Code Sequence", '', 'ImplantTypeCodeSequence'), -0x006863AC: ('SQ', '1', "Fixation Method Code Sequence", '', 'FixationMethodCodeSequence'), -0x006863B0: ('SQ', '1', "Mating Feature Sets Sequence", '', 'MatingFeatureSetsSequence'), -0x006863C0: ('US', '1', "Mating Feature Set ID", '', 'MatingFeatureSetID'), -0x006863D0: ('LO', '1', "Mating Feature Set Label", '', 'MatingFeatureSetLabel'), -0x006863E0: ('SQ', '1', "Mating Feature Sequence", '', 'MatingFeatureSequence'), -0x006863F0: ('US', '1', "Mating Feature ID", '', 'MatingFeatureID'), -0x00686400: ('SQ', '1', "Mating Feature Degree of Freedom Sequence", '', 'MatingFeatureDegreeOfFreedomSequence'), -0x00686410: ('US', '1', "Degree of Freedom ID", '', 'DegreeOfFreedomID'), -0x00686420: ('CS', '1', "Degree of Freedom Type", '', 'DegreeOfFreedomType'), -0x00686430: ('SQ', '1', "2D Mating Feature Coordinates Sequence", '', 'TwoDMatingFeatureCoordinatesSequence'), -0x00686440: ('US', '1', "Referenced HPGL Document ID", '', 'ReferencedHPGLDocumentID'), -0x00686450: ('FD', '2', "2D Mating Point", '', 'TwoDMatingPoint'), -0x00686460: ('FD', '4', "2D Mating Axes", '', 'TwoDMatingAxes'), -0x00686470: ('SQ', '1', "2D Degree of Freedom Sequence", '', 'TwoDDegreeOfFreedomSequence'), -0x00686490: ('FD', '3', "3D Degree of Freedom Axis", '', 'ThreeDDegreeOfFreedomAxis'), -0x006864A0: ('FD', '2', "Range of Freedom", '', 'RangeOfFreedom'), -0x006864C0: ('FD', '3', "3D Mating Point", '', 'ThreeDMatingPoint'), -0x006864D0: ('FD', '9', "3D Mating Axes", '', 'ThreeDMatingAxes'), -0x006864F0: ('FD', '3', "2D Degree of Freedom Axis", '', 'TwoDDegreeOfFreedomAxis'), -0x00686500: ('SQ', '1', "Planning Landmark Point Sequence", '', 'PlanningLandmarkPointSequence'), -0x00686510: ('SQ', '1', "Planning Landmark Line Sequence", '', 'PlanningLandmarkLineSequence'), -0x00686520: ('SQ', '1', "Planning Landmark Plane Sequence", '', 'PlanningLandmarkPlaneSequence'), -0x00686530: ('US', '1', "Planning Landmark ID", '', 'PlanningLandmarkID'), -0x00686540: ('LO', '1', "Planning Landmark Description", '', 'PlanningLandmarkDescription'), -0x00686545: ('SQ', '1', "Planning Landmark Identification Code Sequence", '', 'PlanningLandmarkIdentificationCodeSequence'), -0x00686550: ('SQ', '1', "2D Point Coordinates Sequence", '', 'TwoDPointCoordinatesSequence'), -0x00686560: ('FD', '2', "2D Point Coordinates", '', 'TwoDPointCoordinates'), -0x00686590: ('FD', '3', "3D Point Coordinates", '', 'ThreeDPointCoordinates'), -0x006865A0: ('SQ', '1', "2D Line Coordinates Sequence", '', 'TwoDLineCoordinatesSequence'), -0x006865B0: ('FD', '4', "2D Line Coordinates", '', 'TwoDLineCoordinates'), -0x006865D0: ('FD', '6', "3D Line Coordinates", '', 'ThreeDLineCoordinates'), -0x006865E0: ('SQ', '1', "2D Plane Coordinates Sequence", '', 'TwoDPlaneCoordinatesSequence'), -0x006865F0: ('FD', '4', "2D Plane Intersection", '', 'TwoDPlaneIntersection'), -0x00686610: ('FD', '3', "3D Plane Origin", '', 'ThreeDPlaneOrigin'), -0x00686620: ('FD', '3', "3D Plane Normal", '', 'ThreeDPlaneNormal'), -0x00700001: ('SQ', '1', "Graphic Annotation Sequence", '', 'GraphicAnnotationSequence'), -0x00700002: ('CS', '1', "Graphic Layer", '', 'GraphicLayer'), -0x00700003: ('CS', '1', "Bounding Box Annotation Units", '', 'BoundingBoxAnnotationUnits'), -0x00700004: ('CS', '1', "Anchor Point Annotation Units", '', 'AnchorPointAnnotationUnits'), -0x00700005: ('CS', '1', "Graphic Annotation Units", '', 'GraphicAnnotationUnits'), -0x00700006: ('ST', '1', "Unformatted Text Value", '', 'UnformattedTextValue'), -0x00700008: ('SQ', '1', "Text Object Sequence", '', 'TextObjectSequence'), -0x00700009: ('SQ', '1', "Graphic Object Sequence", '', 'GraphicObjectSequence'), -0x00700010: ('FL', '2', "Bounding Box Top Left Hand Corner", '', 'BoundingBoxTopLeftHandCorner'), -0x00700011: ('FL', '2', "Bounding Box Bottom Right Hand Corner", '', 'BoundingBoxBottomRightHandCorner'), -0x00700012: ('CS', '1', "Bounding Box Text Horizontal Justification", '', 'BoundingBoxTextHorizontalJustification'), -0x00700014: ('FL', '2', "Anchor Point", '', 'AnchorPoint'), -0x00700015: ('CS', '1', "Anchor Point Visibility", '', 'AnchorPointVisibility'), -0x00700020: ('US', '1', "Graphic Dimensions", '', 'GraphicDimensions'), -0x00700021: ('US', '1', "Number of Graphic Points", '', 'NumberOfGraphicPoints'), -0x00700022: ('FL', '2-n', "Graphic Data", '', 'GraphicData'), -0x00700023: ('CS', '1', "Graphic Type", '', 'GraphicType'), -0x00700024: ('CS', '1', "Graphic Filled", '', 'GraphicFilled'), -0x00700040: ('IS', '1', "Image Rotation (Retired)", 'Retired', 'ImageRotationRetired'), -0x00700041: ('CS', '1', "Image Horizontal Flip", '', 'ImageHorizontalFlip'), -0x00700042: ('US', '1', "Image Rotation", '', 'ImageRotation'), -0x00700050: ('US', '2', "Displayed Area Top Left Hand Corner (Trial)", 'Retired', 'DisplayedAreaTopLeftHandCornerTrial'), -0x00700051: ('US', '2', "Displayed Area Bottom Right Hand Corner (Trial)", 'Retired', 'DisplayedAreaBottomRightHandCornerTrial'), -0x00700052: ('SL', '2', "Displayed Area Top Left Hand Corner", '', 'DisplayedAreaTopLeftHandCorner'), -0x00700053: ('SL', '2', "Displayed Area Bottom Right Hand Corner", '', 'DisplayedAreaBottomRightHandCorner'), -0x0070005A: ('SQ', '1', "Displayed Area Selection Sequence", '', 'DisplayedAreaSelectionSequence'), -0x00700060: ('SQ', '1', "Graphic Layer Sequence", '', 'GraphicLayerSequence'), -0x00700062: ('IS', '1', "Graphic Layer Order", '', 'GraphicLayerOrder'), -0x00700066: ('US', '1', "Graphic Layer Recommended Display Grayscale Value", '', 'GraphicLayerRecommendedDisplayGrayscaleValue'), -0x00700067: ('US', '3', "Graphic Layer Recommended Display RGB Value", 'Retired', 'GraphicLayerRecommendedDisplayRGBValue'), -0x00700068: ('LO', '1', "Graphic Layer Description", '', 'GraphicLayerDescription'), -0x00700080: ('CS', '1', "Content Label", '', 'ContentLabel'), -0x00700081: ('LO', '1', "Content Description", '', 'ContentDescription'), -0x00700082: ('DA', '1', "Presentation Creation Date", '', 'PresentationCreationDate'), -0x00700083: ('TM', '1', "Presentation Creation Time", '', 'PresentationCreationTime'), -0x00700084: ('PN', '1', "Content Creator's Name", '', 'ContentCreatorName'), -0x00700086: ('SQ', '1', "Content Creator's Identification Code Sequence", '', 'ContentCreatorIdentificationCodeSequence'), -0x00700087: ('SQ', '1', "Alternate Content Description Sequence", '', 'AlternateContentDescriptionSequence'), -0x00700100: ('CS', '1', "Presentation Size Mode", '', 'PresentationSizeMode'), -0x00700101: ('DS', '2', "Presentation Pixel Spacing", '', 'PresentationPixelSpacing'), -0x00700102: ('IS', '2', "Presentation Pixel Aspect Ratio", '', 'PresentationPixelAspectRatio'), -0x00700103: ('FL', '1', "Presentation Pixel Magnification Ratio", '', 'PresentationPixelMagnificationRatio'), -0x00700207: ('LO', '1', "Graphic Group Label", '', 'GraphicGroupLabel'), -0x00700208: ('ST', '1', "Graphic Group Description", '', 'GraphicGroupDescription'), -0x00700209: ('SQ', '1', "Compound Graphic Sequence", '', 'CompoundGraphicSequence'), -0x00700226: ('UL', '1', "Compound Graphic Instance ID", '', 'CompoundGraphicInstanceID'), -0x00700227: ('LO', '1', "Font Name", '', 'FontName'), -0x00700228: ('CS', '1', "Font Name Type", '', 'FontNameType'), -0x00700229: ('LO', '1', "CSS Font Name", '', 'CSSFontName'), -0x00700230: ('FD', '1', "Rotation Angle", '', 'RotationAngle'), -0x00700231: ('SQ', '1', "Text Style Sequence", '', 'TextStyleSequence'), -0x00700232: ('SQ', '1', "Line Style Sequence", '', 'LineStyleSequence'), -0x00700233: ('SQ', '1', "Fill Style Sequence", '', 'FillStyleSequence'), -0x00700234: ('SQ', '1', "Graphic Group Sequence", '', 'GraphicGroupSequence'), -0x00700241: ('US', '3', "Text Color CIELab Value", '', 'TextColorCIELabValue'), -0x00700242: ('CS', '1', "Horizontal Alignment", '', 'HorizontalAlignment'), -0x00700243: ('CS', '1', "Vertical Alignment", '', 'VerticalAlignment'), -0x00700244: ('CS', '1', "Shadow Style", '', 'ShadowStyle'), -0x00700245: ('FL', '1', "Shadow Offset X", '', 'ShadowOffsetX'), -0x00700246: ('FL', '1', "Shadow Offset Y", '', 'ShadowOffsetY'), -0x00700247: ('US', '3', "Shadow Color CIELab Value", '', 'ShadowColorCIELabValue'), -0x00700248: ('CS', '1', "Underlined", '', 'Underlined'), -0x00700249: ('CS', '1', "Bold", '', 'Bold'), -0x00700250: ('CS', '1', "Italic", '', 'Italic'), -0x00700251: ('US', '3', "Pattern On Color CIELab Value", '', 'PatternOnColorCIELabValue'), -0x00700252: ('US', '3', "Pattern Off Color CIELab Value", '', 'PatternOffColorCIELabValue'), -0x00700253: ('FL', '1', "Line Thickness", '', 'LineThickness'), -0x00700254: ('CS', '1', "Line Dashing Style", '', 'LineDashingStyle'), -0x00700255: ('UL', '1', "Line Pattern", '', 'LinePattern'), -0x00700256: ('OB', '1', "Fill Pattern", '', 'FillPattern'), -0x00700257: ('CS', '1', "Fill Mode", '', 'FillMode'), -0x00700258: ('FL', '1', "Shadow Opacity", '', 'ShadowOpacity'), -0x00700261: ('FL', '1', "Gap Length", '', 'GapLength'), -0x00700262: ('FL', '1', "Diameter of Visibility", '', 'DiameterOfVisibility'), -0x00700273: ('FL', '2', "Rotation Point", '', 'RotationPoint'), -0x00700274: ('CS', '1', "Tick Alignment", '', 'TickAlignment'), -0x00700278: ('CS', '1', "Show Tick Label", '', 'ShowTickLabel'), -0x00700279: ('CS', '1', "Tick Label Alignment", '', 'TickLabelAlignment'), -0x00700282: ('CS', '1', "Compound Graphic Units", '', 'CompoundGraphicUnits'), -0x00700284: ('FL', '1', "Pattern On Opacity", '', 'PatternOnOpacity'), -0x00700285: ('FL', '1', "Pattern Off Opacity", '', 'PatternOffOpacity'), -0x00700287: ('SQ', '1', "Major Ticks Sequence", '', 'MajorTicksSequence'), -0x00700288: ('FL', '1', "Tick Position", '', 'TickPosition'), -0x00700289: ('SH', '1', "Tick Label", '', 'TickLabel'), -0x00700294: ('CS', '1', "Compound Graphic Type", '', 'CompoundGraphicType'), -0x00700295: ('UL', '1', "Graphic Group ID", '', 'GraphicGroupID'), -0x00700306: ('CS', '1', "Shape Type", '', 'ShapeType'), -0x00700308: ('SQ', '1', "Registration Sequence", '', 'RegistrationSequence'), -0x00700309: ('SQ', '1', "Matrix Registration Sequence", '', 'MatrixRegistrationSequence'), -0x0070030A: ('SQ', '1', "Matrix Sequence", '', 'MatrixSequence'), -0x0070030C: ('CS', '1', "Frame of Reference Transformation Matrix Type", '', 'FrameOfReferenceTransformationMatrixType'), -0x0070030D: ('SQ', '1', "Registration Type Code Sequence", '', 'RegistrationTypeCodeSequence'), -0x0070030F: ('ST', '1', "Fiducial Description", '', 'FiducialDescription'), -0x00700310: ('SH', '1', "Fiducial Identifier", '', 'FiducialIdentifier'), -0x00700311: ('SQ', '1', "Fiducial Identifier Code Sequence", '', 'FiducialIdentifierCodeSequence'), -0x00700312: ('FD', '1', "Contour Uncertainty Radius", '', 'ContourUncertaintyRadius'), -0x00700314: ('SQ', '1', "Used Fiducials Sequence", '', 'UsedFiducialsSequence'), -0x00700318: ('SQ', '1', "Graphic Coordinates Data Sequence", '', 'GraphicCoordinatesDataSequence'), -0x0070031A: ('UI', '1', "Fiducial UID", '', 'FiducialUID'), -0x0070031C: ('SQ', '1', "Fiducial Set Sequence", '', 'FiducialSetSequence'), -0x0070031E: ('SQ', '1', "Fiducial Sequence", '', 'FiducialSequence'), -0x00700401: ('US', '3', "Graphic Layer Recommended Display CIELab Value", '', 'GraphicLayerRecommendedDisplayCIELabValue'), -0x00700402: ('SQ', '1', "Blending Sequence", '', 'BlendingSequence'), -0x00700403: ('FL', '1', "Relative Opacity", '', 'RelativeOpacity'), -0x00700404: ('SQ', '1', "Referenced Spatial Registration Sequence", '', 'ReferencedSpatialRegistrationSequence'), -0x00700405: ('CS', '1', "Blending Position", '', 'BlendingPosition'), -0x00720002: ('SH', '1', "Hanging Protocol Name", '', 'HangingProtocolName'), -0x00720004: ('LO', '1', "Hanging Protocol Description", '', 'HangingProtocolDescription'), -0x00720006: ('CS', '1', "Hanging Protocol Level", '', 'HangingProtocolLevel'), -0x00720008: ('LO', '1', "Hanging Protocol Creator", '', 'HangingProtocolCreator'), -0x0072000A: ('DT', '1', "Hanging Protocol Creation DateTime", '', 'HangingProtocolCreationDateTime'), -0x0072000C: ('SQ', '1', "Hanging Protocol Definition Sequence", '', 'HangingProtocolDefinitionSequence'), -0x0072000E: ('SQ', '1', "Hanging Protocol User Identification Code Sequence", '', 'HangingProtocolUserIdentificationCodeSequence'), -0x00720010: ('LO', '1', "Hanging Protocol User Group Name", '', 'HangingProtocolUserGroupName'), -0x00720012: ('SQ', '1', "Source Hanging Protocol Sequence", '', 'SourceHangingProtocolSequence'), -0x00720014: ('US', '1', "Number of Priors Referenced", '', 'NumberOfPriorsReferenced'), -0x00720020: ('SQ', '1', "Image Sets Sequence", '', 'ImageSetsSequence'), -0x00720022: ('SQ', '1', "Image Set Selector Sequence", '', 'ImageSetSelectorSequence'), -0x00720024: ('CS', '1', "Image Set Selector Usage Flag", '', 'ImageSetSelectorUsageFlag'), -0x00720026: ('AT', '1', "Selector Attribute", '', 'SelectorAttribute'), -0x00720028: ('US', '1', "Selector Value Number", '', 'SelectorValueNumber'), -0x00720030: ('SQ', '1', "Time Based Image Sets Sequence", '', 'TimeBasedImageSetsSequence'), -0x00720032: ('US', '1', "Image Set Number", '', 'ImageSetNumber'), -0x00720034: ('CS', '1', "Image Set Selector Category", '', 'ImageSetSelectorCategory'), -0x00720038: ('US', '2', "Relative Time", '', 'RelativeTime'), -0x0072003A: ('CS', '1', "Relative Time Units", '', 'RelativeTimeUnits'), -0x0072003C: ('SS', '2', "Abstract Prior Value", '', 'AbstractPriorValue'), -0x0072003E: ('SQ', '1', "Abstract Prior Code Sequence", '', 'AbstractPriorCodeSequence'), -0x00720040: ('LO', '1', "Image Set Label", '', 'ImageSetLabel'), -0x00720050: ('CS', '1', "Selector Attribute VR", '', 'SelectorAttributeVR'), -0x00720052: ('AT', '1-n', "Selector Sequence Pointer", '', 'SelectorSequencePointer'), -0x00720054: ('LO', '1-n', "Selector Sequence Pointer Private Creator", '', 'SelectorSequencePointerPrivateCreator'), -0x00720056: ('LO', '1', "Selector Attribute Private Creator", '', 'SelectorAttributePrivateCreator'), -0x00720060: ('AT', '1-n', "Selector AT Value", '', 'SelectorATValue'), -0x00720062: ('CS', '1-n', "Selector CS Value", '', 'SelectorCSValue'), -0x00720064: ('IS', '1-n', "Selector IS Value", '', 'SelectorISValue'), -0x00720066: ('LO', '1-n', "Selector LO Value", '', 'SelectorLOValue'), -0x00720068: ('LT', '1', "Selector LT Value", '', 'SelectorLTValue'), -0x0072006A: ('PN', '1-n', "Selector PN Value", '', 'SelectorPNValue'), -0x0072006C: ('SH', '1-n', "Selector SH Value", '', 'SelectorSHValue'), -0x0072006E: ('ST', '1', "Selector ST Value", '', 'SelectorSTValue'), -0x00720070: ('UT', '1', "Selector UT Value", '', 'SelectorUTValue'), -0x00720072: ('DS', '1-n', "Selector DS Value", '', 'SelectorDSValue'), -0x00720074: ('FD', '1-n', "Selector FD Value", '', 'SelectorFDValue'), -0x00720076: ('FL', '1-n', "Selector FL Value", '', 'SelectorFLValue'), -0x00720078: ('UL', '1-n', "Selector UL Value", '', 'SelectorULValue'), -0x0072007A: ('US', '1-n', "Selector US Value", '', 'SelectorUSValue'), -0x0072007C: ('SL', '1-n', "Selector SL Value", '', 'SelectorSLValue'), -0x0072007E: ('SS', '1-n', "Selector SS Value", '', 'SelectorSSValue'), -0x00720080: ('SQ', '1', "Selector Code Sequence Value", '', 'SelectorCodeSequenceValue'), -0x00720100: ('US', '1', "Number of Screens", '', 'NumberOfScreens'), -0x00720102: ('SQ', '1', "Nominal Screen Definition Sequence", '', 'NominalScreenDefinitionSequence'), -0x00720104: ('US', '1', "Number of Vertical Pixels", '', 'NumberOfVerticalPixels'), -0x00720106: ('US', '1', "Number of Horizontal Pixels", '', 'NumberOfHorizontalPixels'), -0x00720108: ('FD', '4', "Display Environment Spatial Position", '', 'DisplayEnvironmentSpatialPosition'), -0x0072010A: ('US', '1', "Screen Minimum Grayscale Bit Depth", '', 'ScreenMinimumGrayscaleBitDepth'), -0x0072010C: ('US', '1', "Screen Minimum Color Bit Depth", '', 'ScreenMinimumColorBitDepth'), -0x0072010E: ('US', '1', "Application Maximum Repaint Time", '', 'ApplicationMaximumRepaintTime'), -0x00720200: ('SQ', '1', "Display Sets Sequence", '', 'DisplaySetsSequence'), -0x00720202: ('US', '1', "Display Set Number", '', 'DisplaySetNumber'), -0x00720203: ('LO', '1', "Display Set Label", '', 'DisplaySetLabel'), -0x00720204: ('US', '1', "Display Set Presentation Group", '', 'DisplaySetPresentationGroup'), -0x00720206: ('LO', '1', "Display Set Presentation Group Description", '', 'DisplaySetPresentationGroupDescription'), -0x00720208: ('CS', '1', "Partial Data Display Handling", '', 'PartialDataDisplayHandling'), -0x00720210: ('SQ', '1', "Synchronized Scrolling Sequence", '', 'SynchronizedScrollingSequence'), -0x00720212: ('US', '2-n', "Display Set Scrolling Group", '', 'DisplaySetScrollingGroup'), -0x00720214: ('SQ', '1', "Navigation Indicator Sequence", '', 'NavigationIndicatorSequence'), -0x00720216: ('US', '1', "Navigation Display Set", '', 'NavigationDisplaySet'), -0x00720218: ('US', '1-n', "Reference Display Sets", '', 'ReferenceDisplaySets'), -0x00720300: ('SQ', '1', "Image Boxes Sequence", '', 'ImageBoxesSequence'), -0x00720302: ('US', '1', "Image Box Number", '', 'ImageBoxNumber'), -0x00720304: ('CS', '1', "Image Box Layout Type", '', 'ImageBoxLayoutType'), -0x00720306: ('US', '1', "Image Box Tile Horizontal Dimension", '', 'ImageBoxTileHorizontalDimension'), -0x00720308: ('US', '1', "Image Box Tile Vertical Dimension", '', 'ImageBoxTileVerticalDimension'), -0x00720310: ('CS', '1', "Image Box Scroll Direction", '', 'ImageBoxScrollDirection'), -0x00720312: ('CS', '1', "Image Box Small Scroll Type", '', 'ImageBoxSmallScrollType'), -0x00720314: ('US', '1', "Image Box Small Scroll Amount", '', 'ImageBoxSmallScrollAmount'), -0x00720316: ('CS', '1', "Image Box Large Scroll Type", '', 'ImageBoxLargeScrollType'), -0x00720318: ('US', '1', "Image Box Large Scroll Amount", '', 'ImageBoxLargeScrollAmount'), -0x00720320: ('US', '1', "Image Box Overlap Priority", '', 'ImageBoxOverlapPriority'), -0x00720330: ('FD', '1', "Cine Relative to Real-Time", '', 'CineRelativeToRealTime'), -0x00720400: ('SQ', '1', "Filter Operations Sequence", '', 'FilterOperationsSequence'), -0x00720402: ('CS', '1', "Filter-by Category", '', 'FilterByCategory'), -0x00720404: ('CS', '1', "Filter-by Attribute Presence", '', 'FilterByAttributePresence'), -0x00720406: ('CS', '1', "Filter-by Operator", '', 'FilterByOperator'), -0x00720420: ('US', '3', "Structured Display Background CIELab Value", '', 'StructuredDisplayBackgroundCIELabValue'), -0x00720421: ('US', '3', "Empty Image Box CIELab Value", '', 'EmptyImageBoxCIELabValue'), -0x00720422: ('SQ', '1', "Structured Display Image Box Sequence", '', 'StructuredDisplayImageBoxSequence'), -0x00720424: ('SQ', '1', "Structured Display Text Box Sequence", '', 'StructuredDisplayTextBoxSequence'), -0x00720427: ('SQ', '1', "Referenced First Frame Sequence", '', 'ReferencedFirstFrameSequence'), -0x00720430: ('SQ', '1', "Image Box Synchronization Sequence", '', 'ImageBoxSynchronizationSequence'), -0x00720432: ('US', '2-n', "Synchronized Image Box List", '', 'SynchronizedImageBoxList'), -0x00720434: ('CS', '1', "Type of Synchronization", '', 'TypeOfSynchronization'), -0x00720500: ('CS', '1', "Blending Operation Type", '', 'BlendingOperationType'), -0x00720510: ('CS', '1', "Reformatting Operation Type", '', 'ReformattingOperationType'), -0x00720512: ('FD', '1', "Reformatting Thickness", '', 'ReformattingThickness'), -0x00720514: ('FD', '1', "Reformatting Interval", '', 'ReformattingInterval'), -0x00720516: ('CS', '1', "Reformatting Operation Initial View Direction", '', 'ReformattingOperationInitialViewDirection'), -0x00720520: ('CS', '1-n', "3D Rendering Type", '', 'ThreeDRenderingType'), -0x00720600: ('SQ', '1', "Sorting Operations Sequence", '', 'SortingOperationsSequence'), -0x00720602: ('CS', '1', "Sort-by Category", '', 'SortByCategory'), -0x00720604: ('CS', '1', "Sorting Direction", '', 'SortingDirection'), -0x00720700: ('CS', '2', "Display Set Patient Orientation", '', 'DisplaySetPatientOrientation'), -0x00720702: ('CS', '1', "VOI Type", '', 'VOIType'), -0x00720704: ('CS', '1', "Pseudo-Color Type", '', 'PseudoColorType'), -0x00720705: ('SQ', '1', "Pseudo-Color Palette Instance Reference Sequence", '', 'PseudoColorPaletteInstanceReferenceSequence'), -0x00720706: ('CS', '1', "Show Grayscale Inverted", '', 'ShowGrayscaleInverted'), -0x00720710: ('CS', '1', "Show Image True Size Flag", '', 'ShowImageTrueSizeFlag'), -0x00720712: ('CS', '1', "Show Graphic Annotation Flag", '', 'ShowGraphicAnnotationFlag'), -0x00720714: ('CS', '1', "Show Patient Demographics Flag", '', 'ShowPatientDemographicsFlag'), -0x00720716: ('CS', '1', "Show Acquisition Techniques Flag", '', 'ShowAcquisitionTechniquesFlag'), -0x00720717: ('CS', '1', "Display Set Horizontal Justification", '', 'DisplaySetHorizontalJustification'), -0x00720718: ('CS', '1', "Display Set Vertical Justification", '', 'DisplaySetVerticalJustification'), -0x00740120: ('FD', '1', "Continuation Start Meterset", '', 'ContinuationStartMeterset'), -0x00740121: ('FD', '1', "Continuation End Meterset", '', 'ContinuationEndMeterset'), -0x00741000: ('CS', '1', "Procedure Step State", '', 'ProcedureStepState'), -0x00741002: ('SQ', '1', "Procedure Step Progress Information Sequence", '', 'ProcedureStepProgressInformationSequence'), -0x00741004: ('DS', '1', "Procedure Step Progress", '', 'ProcedureStepProgress'), -0x00741006: ('ST', '1', "Procedure Step Progress Description", '', 'ProcedureStepProgressDescription'), -0x00741008: ('SQ', '1', "Procedure Step Communications URI Sequence", '', 'ProcedureStepCommunicationsURISequence'), -0x0074100a: ('ST', '1', "Contact URI", '', 'ContactURI'), -0x0074100c: ('LO', '1', "Contact Display Name", '', 'ContactDisplayName'), -0x0074100e: ('SQ', '1', "Procedure Step Discontinuation Reason Code Sequence", '', 'ProcedureStepDiscontinuationReasonCodeSequence'), -0x00741020: ('SQ', '1', "Beam Task Sequence", '', 'BeamTaskSequence'), -0x00741022: ('CS', '1', "Beam Task Type", '', 'BeamTaskType'), -0x00741024: ('IS', '1', "Beam Order Index (Trial)", 'Retired', 'BeamOrderIndexTrial'), -0x00741026: ('FD', '1', "Table Top Vertical Adjusted Position", '', 'TableTopVerticalAdjustedPosition'), -0x00741027: ('FD', '1', "Table Top Longitudinal Adjusted Position", '', 'TableTopLongitudinalAdjustedPosition'), -0x00741028: ('FD', '1', "Table Top Lateral Adjusted Position", '', 'TableTopLateralAdjustedPosition'), -0x0074102A: ('FD', '1', "Patient Support Adjusted Angle", '', 'PatientSupportAdjustedAngle'), -0x0074102B: ('FD', '1', "Table Top Eccentric Adjusted Angle", '', 'TableTopEccentricAdjustedAngle'), -0x0074102C: ('FD', '1', "Table Top Pitch Adjusted Angle", '', 'TableTopPitchAdjustedAngle'), -0x0074102D: ('FD', '1', "Table Top Roll Adjusted Angle", '', 'TableTopRollAdjustedAngle'), -0x00741030: ('SQ', '1', "Delivery Verification Image Sequence", '', 'DeliveryVerificationImageSequence'), -0x00741032: ('CS', '1', "Verification Image Timing", '', 'VerificationImageTiming'), -0x00741034: ('CS', '1', "Double Exposure Flag", '', 'DoubleExposureFlag'), -0x00741036: ('CS', '1', "Double Exposure Ordering", '', 'DoubleExposureOrdering'), -0x00741038: ('DS', '1', "Double Exposure Meterset (Trial)", 'Retired', 'DoubleExposureMetersetTrial'), -0x0074103A: ('DS', '4', "Double Exposure Field Delta (Trial)", 'Retired', 'DoubleExposureFieldDeltaTrial'), -0x00741040: ('SQ', '1', "Related Reference RT Image Sequence", '', 'RelatedReferenceRTImageSequence'), -0x00741042: ('SQ', '1', "General Machine Verification Sequence", '', 'GeneralMachineVerificationSequence'), -0x00741044: ('SQ', '1', "Conventional Machine Verification Sequence", '', 'ConventionalMachineVerificationSequence'), -0x00741046: ('SQ', '1', "Ion Machine Verification Sequence", '', 'IonMachineVerificationSequence'), -0x00741048: ('SQ', '1', "Failed Attributes Sequence", '', 'FailedAttributesSequence'), -0x0074104A: ('SQ', '1', "Overridden Attributes Sequence", '', 'OverriddenAttributesSequence'), -0x0074104C: ('SQ', '1', "Conventional Control Point Verification Sequence", '', 'ConventionalControlPointVerificationSequence'), -0x0074104E: ('SQ', '1', "Ion Control Point Verification Sequence", '', 'IonControlPointVerificationSequence'), -0x00741050: ('SQ', '1', "Attribute Occurrence Sequence", '', 'AttributeOccurrenceSequence'), -0x00741052: ('AT', '1', "Attribute Occurrence Pointer", '', 'AttributeOccurrencePointer'), -0x00741054: ('UL', '1', "Attribute Item Selector", '', 'AttributeItemSelector'), -0x00741056: ('LO', '1', "Attribute Occurrence Private Creator", '', 'AttributeOccurrencePrivateCreator'), -0x00741057: ('IS', '1-n', "Selector Sequence Pointer Items", '', 'SelectorSequencePointerItems'), -0x00741200: ('CS', '1', "Scheduled Procedure Step Priority", '', 'ScheduledProcedureStepPriority'), -0x00741202: ('LO', '1', "Worklist Label", '', 'WorklistLabel'), -0x00741204: ('LO', '1', "Procedure Step Label", '', 'ProcedureStepLabel'), -0x00741210: ('SQ', '1', "Scheduled Processing Parameters Sequence", '', 'ScheduledProcessingParametersSequence'), -0x00741212: ('SQ', '1', "Performed Processing Parameters Sequence", '', 'PerformedProcessingParametersSequence'), -0x00741216: ('SQ', '1', "Unified Procedure Step Performed Procedure Sequence", '', 'UnifiedProcedureStepPerformedProcedureSequence'), -0x00741220: ('SQ', '1', "Related Procedure Step Sequence", 'Retired', 'RelatedProcedureStepSequence'), -0x00741222: ('LO', '1', "Procedure Step Relationship Type", 'Retired', 'ProcedureStepRelationshipType'), -0x00741224: ('SQ', '1', "Replaced Procedure Step Sequence", '', 'ReplacedProcedureStepSequence'), -0x00741230: ('LO', '1', "Deletion Lock", '', 'DeletionLock'), -0x00741234: ('AE', '1', "Receiving AE", '', 'ReceivingAE'), -0x00741236: ('AE', '1', "Requesting AE", '', 'RequestingAE'), -0x00741238: ('LT', '1', "Reason for Cancellation", '', 'ReasonForCancellation'), -0x00741242: ('CS', '1', "SCP Status", '', 'SCPStatus'), -0x00741244: ('CS', '1', "Subscription List Status", '', 'SubscriptionListStatus'), -0x00741246: ('CS', '1', "Unified Procedure Step List Status", '', 'UnifiedProcedureStepListStatus'), -0x00741324: ('UL', '1', "Beam Order Index", '', 'BeamOrderIndex'), -0x00741338: ('FD', '1', "Double Exposure Meterset", '', 'DoubleExposureMeterset'), -0x0074133A: ('FD', '4', "Double Exposure Field Delta", '', 'DoubleExposureFieldDelta'), -0x00760001: ('LO', '1', "Implant Assembly Template Name", '', 'ImplantAssemblyTemplateName'), -0x00760003: ('LO', '1', "Implant Assembly Template Issuer", '', 'ImplantAssemblyTemplateIssuer'), -0x00760006: ('LO', '1', "Implant Assembly Template Version", '', 'ImplantAssemblyTemplateVersion'), -0x00760008: ('SQ', '1', "Replaced Implant Assembly Template Sequence", '', 'ReplacedImplantAssemblyTemplateSequence'), -0x0076000A: ('CS', '1', "Implant Assembly Template Type", '', 'ImplantAssemblyTemplateType'), -0x0076000C: ('SQ', '1', "Original Implant Assembly Template Sequence", '', 'OriginalImplantAssemblyTemplateSequence'), -0x0076000E: ('SQ', '1', "Derivation Implant Assembly Template Sequence", '', 'DerivationImplantAssemblyTemplateSequence'), -0x00760010: ('SQ', '1', "Implant Assembly Template Target Anatomy Sequence", '', 'ImplantAssemblyTemplateTargetAnatomySequence'), -0x00760020: ('SQ', '1', "Procedure Type Code Sequence", '', 'ProcedureTypeCodeSequence'), -0x00760030: ('LO', '1', "Surgical Technique", '', 'SurgicalTechnique'), -0x00760032: ('SQ', '1', "Component Types Sequence", '', 'ComponentTypesSequence'), -0x00760034: ('CS', '1', "Component Type Code Sequence", '', 'ComponentTypeCodeSequence'), -0x00760036: ('CS', '1', "Exclusive Component Type", '', 'ExclusiveComponentType'), -0x00760038: ('CS', '1', "Mandatory Component Type", '', 'MandatoryComponentType'), -0x00760040: ('SQ', '1', "Component Sequence", '', 'ComponentSequence'), -0x00760055: ('US', '1', "Component ID", '', 'ComponentID'), -0x00760060: ('SQ', '1', "Component Assembly Sequence", '', 'ComponentAssemblySequence'), -0x00760070: ('US', '1', "Component 1 Referenced ID", '', 'Component1ReferencedID'), -0x00760080: ('US', '1', "Component 1 Referenced Mating Feature Set ID", '', 'Component1ReferencedMatingFeatureSetID'), -0x00760090: ('US', '1', "Component 1 Referenced Mating Feature ID", '', 'Component1ReferencedMatingFeatureID'), -0x007600A0: ('US', '1', "Component 2 Referenced ID", '', 'Component2ReferencedID'), -0x007600B0: ('US', '1', "Component 2 Referenced Mating Feature Set ID", '', 'Component2ReferencedMatingFeatureSetID'), -0x007600C0: ('US', '1', "Component 2 Referenced Mating Feature ID", '', 'Component2ReferencedMatingFeatureID'), -0x00780001: ('LO', '1', "Implant Template Group Name", '', 'ImplantTemplateGroupName'), -0x00780010: ('ST', '1', "Implant Template Group Description", '', 'ImplantTemplateGroupDescription'), -0x00780020: ('LO', '1', "Implant Template Group Issuer", '', 'ImplantTemplateGroupIssuer'), -0x00780024: ('LO', '1', "Implant Template Group Version", '', 'ImplantTemplateGroupVersion'), -0x00780026: ('SQ', '1', "Replaced Implant Template Group Sequence", '', 'ReplacedImplantTemplateGroupSequence'), -0x00780028: ('SQ', '1', "Implant Template Group Target Anatomy Sequence", '', 'ImplantTemplateGroupTargetAnatomySequence'), -0x0078002A: ('SQ', '1', "Implant Template Group Members Sequence", '', 'ImplantTemplateGroupMembersSequence'), -0x0078002E: ('US', '1', "Implant Template Group Member ID", '', 'ImplantTemplateGroupMemberID'), -0x00780050: ('FD', '3', "3D Implant Template Group Member Matching Point", '', 'ThreeDImplantTemplateGroupMemberMatchingPoint'), -0x00780060: ('FD', '9', "3D Implant Template Group Member Matching Axes", '', 'ThreeDImplantTemplateGroupMemberMatchingAxes'), -0x00780070: ('SQ', '1', "Implant Template Group Member Matching 2D Coordinates Sequence", '', 'ImplantTemplateGroupMemberMatching2DCoordinatesSequence'), -0x00780090: ('FD', '2', "2D Implant Template Group Member Matching Point", '', 'TwoDImplantTemplateGroupMemberMatchingPoint'), -0x007800A0: ('FD', '4', "2D Implant Template Group Member Matching Axes", '', 'TwoDImplantTemplateGroupMemberMatchingAxes'), -0x007800B0: ('SQ', '1', "Implant Template Group Variation Dimension Sequence", '', 'ImplantTemplateGroupVariationDimensionSequence'), -0x007800B2: ('LO', '1', "Implant Template Group Variation Dimension Name", '', 'ImplantTemplateGroupVariationDimensionName'), -0x007800B4: ('SQ', '1', "Implant Template Group Variation Dimension Rank Sequence", '', 'ImplantTemplateGroupVariationDimensionRankSequence'), -0x007800B6: ('US', '1', "Referenced Implant Template Group Member ID", '', 'ReferencedImplantTemplateGroupMemberID'), -0x007800B8: ('US', '1', "Implant Template Group Variation Dimension Rank", '', 'ImplantTemplateGroupVariationDimensionRank'), -0x00880130: ('SH', '1', "Storage Media File-set ID", '', 'StorageMediaFileSetID'), -0x00880140: ('UI', '1', "Storage Media File-set UID", '', 'StorageMediaFileSetUID'), -0x00880200: ('SQ', '1', "Icon Image Sequence", '', 'IconImageSequence'), -0x00880904: ('LO', '1', "Topic Title", 'Retired', 'TopicTitle'), -0x00880906: ('ST', '1', "Topic Subject", 'Retired', 'TopicSubject'), -0x00880910: ('LO', '1', "Topic Author", 'Retired', 'TopicAuthor'), -0x00880912: ('LO', '1-32', "Topic Keywords", 'Retired', 'TopicKeywords'), -0x01000410: ('CS', '1', "SOP Instance Status", '', 'SOPInstanceStatus'), -0x01000420: ('DT', '1', "SOP Authorization DateTime", '', 'SOPAuthorizationDateTime'), -0x01000424: ('LT', '1', "SOP Authorization Comment", '', 'SOPAuthorizationComment'), -0x01000426: ('LO', '1', "Authorization Equipment Certification Number", '', 'AuthorizationEquipmentCertificationNumber'), -0x04000005: ('US', '1', "MAC ID Number", '', 'MACIDNumber'), -0x04000010: ('UI', '1', "MAC Calculation Transfer Syntax UID", '', 'MACCalculationTransferSyntaxUID'), -0x04000015: ('CS', '1', "MAC Algorithm", '', 'MACAlgorithm'), -0x04000020: ('AT', '1-n', "Data Elements Signed", '', 'DataElementsSigned'), -0x04000100: ('UI', '1', "Digital Signature UID", '', 'DigitalSignatureUID'), -0x04000105: ('DT', '1', "Digital Signature DateTime", '', 'DigitalSignatureDateTime'), -0x04000110: ('CS', '1', "Certificate Type", '', 'CertificateType'), -0x04000115: ('OB', '1', "Certificate of Signer", '', 'CertificateOfSigner'), -0x04000120: ('OB', '1', "Signature", '', 'Signature'), -0x04000305: ('CS', '1', "Certified Timestamp Type", '', 'CertifiedTimestampType'), -0x04000310: ('OB', '1', "Certified Timestamp", '', 'CertifiedTimestamp'), -0x04000401: ('SQ', '1', "Digital Signature Purpose Code Sequence", '', 'DigitalSignaturePurposeCodeSequence'), -0x04000402: ('SQ', '1', "Referenced Digital Signature Sequence", '', 'ReferencedDigitalSignatureSequence'), -0x04000403: ('SQ', '1', "Referenced SOP Instance MAC Sequence", '', 'ReferencedSOPInstanceMACSequence'), -0x04000404: ('OB', '1', "MAC", '', 'MAC'), -0x04000500: ('SQ', '1', "Encrypted Attributes Sequence", '', 'EncryptedAttributesSequence'), -0x04000510: ('UI', '1', "Encrypted Content Transfer Syntax UID", '', 'EncryptedContentTransferSyntaxUID'), -0x04000520: ('OB', '1', "Encrypted Content", '', 'EncryptedContent'), -0x04000550: ('SQ', '1', "Modified Attributes Sequence", '', 'ModifiedAttributesSequence'), -0x04000561: ('SQ', '1', "Original Attributes Sequence", '', 'OriginalAttributesSequence'), -0x04000562: ('DT', '1', "Attribute Modification DateTime", '', 'AttributeModificationDateTime'), -0x04000563: ('LO', '1', "Modifying System", '', 'ModifyingSystem'), -0x04000564: ('LO', '1', "Source of Previous Values", '', 'SourceOfPreviousValues'), -0x04000565: ('CS', '1', "Reason for the Attribute Modification", '', 'ReasonForTheAttributeModification'), -0x20000010: ('IS', '1', "Number of Copies", '', 'NumberOfCopies'), -0x2000001E: ('SQ', '1', "Printer Configuration Sequence", '', 'PrinterConfigurationSequence'), -0x20000020: ('CS', '1', "Print Priority", '', 'PrintPriority'), -0x20000030: ('CS', '1', "Medium Type", '', 'MediumType'), -0x20000040: ('CS', '1', "Film Destination", '', 'FilmDestination'), -0x20000050: ('LO', '1', "Film Session Label", '', 'FilmSessionLabel'), -0x20000060: ('IS', '1', "Memory Allocation", '', 'MemoryAllocation'), -0x20000061: ('IS', '1', "Maximum Memory Allocation", '', 'MaximumMemoryAllocation'), -0x20000062: ('CS', '1', "Color Image Printing Flag", 'Retired', 'ColorImagePrintingFlag'), -0x20000063: ('CS', '1', "Collation Flag", 'Retired', 'CollationFlag'), -0x20000065: ('CS', '1', "Annotation Flag", 'Retired', 'AnnotationFlag'), -0x20000067: ('CS', '1', "Image Overlay Flag", 'Retired', 'ImageOverlayFlag'), -0x20000069: ('CS', '1', "Presentation LUT Flag", 'Retired', 'PresentationLUTFlag'), -0x2000006A: ('CS', '1', "Image Box Presentation LUT Flag", 'Retired', 'ImageBoxPresentationLUTFlag'), -0x200000A0: ('US', '1', "Memory Bit Depth", '', 'MemoryBitDepth'), -0x200000A1: ('US', '1', "Printing Bit Depth", '', 'PrintingBitDepth'), -0x200000A2: ('SQ', '1', "Media Installed Sequence", '', 'MediaInstalledSequence'), -0x200000A4: ('SQ', '1', "Other Media Available Sequence", '', 'OtherMediaAvailableSequence'), -0x200000A8: ('SQ', '1', "Supported Image Display Formats Sequence", '', 'SupportedImageDisplayFormatsSequence'), -0x20000500: ('SQ', '1', "Referenced Film Box Sequence", '', 'ReferencedFilmBoxSequence'), -0x20000510: ('SQ', '1', "Referenced Stored Print Sequence", 'Retired', 'ReferencedStoredPrintSequence'), -0x20100010: ('ST', '1', "Image Display Format", '', 'ImageDisplayFormat'), -0x20100030: ('CS', '1', "Annotation Display Format ID", '', 'AnnotationDisplayFormatID'), -0x20100040: ('CS', '1', "Film Orientation", '', 'FilmOrientation'), -0x20100050: ('CS', '1', "Film Size ID", '', 'FilmSizeID'), -0x20100052: ('CS', '1', "Printer Resolution ID", '', 'PrinterResolutionID'), -0x20100054: ('CS', '1', "Default Printer Resolution ID", '', 'DefaultPrinterResolutionID'), -0x20100060: ('CS', '1', "Magnification Type", '', 'MagnificationType'), -0x20100080: ('CS', '1', "Smoothing Type", '', 'SmoothingType'), -0x201000A6: ('CS', '1', "Default Magnification Type", '', 'DefaultMagnificationType'), -0x201000A7: ('CS', '1-n', "Other Magnification Types Available", '', 'OtherMagnificationTypesAvailable'), -0x201000A8: ('CS', '1', "Default Smoothing Type", '', 'DefaultSmoothingType'), -0x201000A9: ('CS', '1-n', "Other Smoothing Types Available", '', 'OtherSmoothingTypesAvailable'), -0x20100100: ('CS', '1', "Border Density", '', 'BorderDensity'), -0x20100110: ('CS', '1', "Empty Image Density", '', 'EmptyImageDensity'), -0x20100120: ('US', '1', "Min Density", '', 'MinDensity'), -0x20100130: ('US', '1', "Max Density", '', 'MaxDensity'), -0x20100140: ('CS', '1', "Trim", '', 'Trim'), -0x20100150: ('ST', '1', "Configuration Information", '', 'ConfigurationInformation'), -0x20100152: ('LT', '1', "Configuration Information Description", '', 'ConfigurationInformationDescription'), -0x20100154: ('IS', '1', "Maximum Collated Films", '', 'MaximumCollatedFilms'), -0x2010015E: ('US', '1', "Illumination", '', 'Illumination'), -0x20100160: ('US', '1', "Reflected Ambient Light", '', 'ReflectedAmbientLight'), -0x20100376: ('DS', '2', "Printer Pixel Spacing", '', 'PrinterPixelSpacing'), -0x20100500: ('SQ', '1', "Referenced Film Session Sequence", '', 'ReferencedFilmSessionSequence'), -0x20100510: ('SQ', '1', "Referenced Image Box Sequence", '', 'ReferencedImageBoxSequence'), -0x20100520: ('SQ', '1', "Referenced Basic Annotation Box Sequence", '', 'ReferencedBasicAnnotationBoxSequence'), -0x20200010: ('US', '1', "Image Box Position", '', 'ImageBoxPosition'), -0x20200020: ('CS', '1', "Polarity", '', 'Polarity'), -0x20200030: ('DS', '1', "Requested Image Size", '', 'RequestedImageSize'), -0x20200040: ('CS', '1', "Requested Decimate/Crop Behavior", '', 'RequestedDecimateCropBehavior'), -0x20200050: ('CS', '1', "Requested Resolution ID", '', 'RequestedResolutionID'), -0x202000A0: ('CS', '1', "Requested Image Size Flag", '', 'RequestedImageSizeFlag'), -0x202000A2: ('CS', '1', "Decimate/Crop Result", '', 'DecimateCropResult'), -0x20200110: ('SQ', '1', "Basic Grayscale Image Sequence", '', 'BasicGrayscaleImageSequence'), -0x20200111: ('SQ', '1', "Basic Color Image Sequence", '', 'BasicColorImageSequence'), -0x20200130: ('SQ', '1', "Referenced Image Overlay Box Sequence", 'Retired', 'ReferencedImageOverlayBoxSequence'), -0x20200140: ('SQ', '1', "Referenced VOI LUT Box Sequence", 'Retired', 'ReferencedVOILUTBoxSequence'), -0x20300010: ('US', '1', "Annotation Position", '', 'AnnotationPosition'), -0x20300020: ('LO', '1', "Text String", '', 'TextString'), -0x20400010: ('SQ', '1', "Referenced Overlay Plane Sequence", 'Retired', 'ReferencedOverlayPlaneSequence'), -0x20400011: ('US', '1-99', "Referenced Overlay Plane Groups", 'Retired', 'ReferencedOverlayPlaneGroups'), -0x20400020: ('SQ', '1', "Overlay Pixel Data Sequence", 'Retired', 'OverlayPixelDataSequence'), -0x20400060: ('CS', '1', "Overlay Magnification Type", 'Retired', 'OverlayMagnificationType'), -0x20400070: ('CS', '1', "Overlay Smoothing Type", 'Retired', 'OverlaySmoothingType'), -0x20400072: ('CS', '1', "Overlay or Image Magnification", 'Retired', 'OverlayOrImageMagnification'), -0x20400074: ('US', '1', "Magnify to Number of Columns", 'Retired', 'MagnifyToNumberOfColumns'), -0x20400080: ('CS', '1', "Overlay Foreground Density", 'Retired', 'OverlayForegroundDensity'), -0x20400082: ('CS', '1', "Overlay Background Density", 'Retired', 'OverlayBackgroundDensity'), -0x20400090: ('CS', '1', "Overlay Mode", 'Retired', 'OverlayMode'), -0x20400100: ('CS', '1', "Threshold Density", 'Retired', 'ThresholdDensity'), -0x20400500: ('SQ', '1', "Referenced Image Box Sequence (Retired)", 'Retired', 'ReferencedImageBoxSequenceRetired'), -0x20500010: ('SQ', '1', "Presentation LUT Sequence", '', 'PresentationLUTSequence'), -0x20500020: ('CS', '1', "Presentation LUT Shape", '', 'PresentationLUTShape'), -0x20500500: ('SQ', '1', "Referenced Presentation LUT Sequence", '', 'ReferencedPresentationLUTSequence'), -0x21000010: ('SH', '1', "Print Job ID", 'Retired', 'PrintJobID'), -0x21000020: ('CS', '1', "Execution Status", '', 'ExecutionStatus'), -0x21000030: ('CS', '1', "Execution Status Info", '', 'ExecutionStatusInfo'), -0x21000040: ('DA', '1', "Creation Date", '', 'CreationDate'), -0x21000050: ('TM', '1', "Creation Time", '', 'CreationTime'), -0x21000070: ('AE', '1', "Originator", '', 'Originator'), -0x21000140: ('AE', '1', "Destination AE", 'Retired', 'DestinationAE'), -0x21000160: ('SH', '1', "Owner ID", '', 'OwnerID'), -0x21000170: ('IS', '1', "Number of Films", '', 'NumberOfFilms'), -0x21000500: ('SQ', '1', "Referenced Print Job Sequence (Pull Stored Print)", 'Retired', 'ReferencedPrintJobSequencePullStoredPrint'), -0x21100010: ('CS', '1', "Printer Status", '', 'PrinterStatus'), -0x21100020: ('CS', '1', "Printer Status Info", '', 'PrinterStatusInfo'), -0x21100030: ('LO', '1', "Printer Name", '', 'PrinterName'), -0x21100099: ('SH', '1', "Print Queue ID", 'Retired', 'PrintQueueID'), -0x21200010: ('CS', '1', "Queue Status", 'Retired', 'QueueStatus'), -0x21200050: ('SQ', '1', "Print Job Description Sequence", 'Retired', 'PrintJobDescriptionSequence'), -0x21200070: ('SQ', '1', "Referenced Print Job Sequence", 'Retired', 'ReferencedPrintJobSequence'), -0x21300010: ('SQ', '1', "Print Management Capabilities Sequence", 'Retired', 'PrintManagementCapabilitiesSequence'), -0x21300015: ('SQ', '1', "Printer Characteristics Sequence", 'Retired', 'PrinterCharacteristicsSequence'), -0x21300030: ('SQ', '1', "Film Box Content Sequence", 'Retired', 'FilmBoxContentSequence'), -0x21300040: ('SQ', '1', "Image Box Content Sequence", 'Retired', 'ImageBoxContentSequence'), -0x21300050: ('SQ', '1', "Annotation Content Sequence", 'Retired', 'AnnotationContentSequence'), -0x21300060: ('SQ', '1', "Image Overlay Box Content Sequence", 'Retired', 'ImageOverlayBoxContentSequence'), -0x21300080: ('SQ', '1', "Presentation LUT Content Sequence", 'Retired', 'PresentationLUTContentSequence'), -0x213000A0: ('SQ', '1', "Proposed Study Sequence", 'Retired', 'ProposedStudySequence'), -0x213000C0: ('SQ', '1', "Original Image Sequence", 'Retired', 'OriginalImageSequence'), -0x22000001: ('CS', '1', "Label Using Information Extracted From Instances", '', 'LabelUsingInformationExtractedFromInstances'), -0x22000002: ('UT', '1', "Label Text", '', 'LabelText'), -0x22000003: ('CS', '1', "Label Style Selection", '', 'LabelStyleSelection'), -0x22000004: ('LT', '1', "Media Disposition", '', 'MediaDisposition'), -0x22000005: ('LT', '1', "Barcode Value", '', 'BarcodeValue'), -0x22000006: ('CS', '1', "Barcode Symbology", '', 'BarcodeSymbology'), -0x22000007: ('CS', '1', "Allow Media Splitting", '', 'AllowMediaSplitting'), -0x22000008: ('CS', '1', "Include Non-DICOM Objects", '', 'IncludeNonDICOMObjects'), -0x22000009: ('CS', '1', "Include Display Application", '', 'IncludeDisplayApplication'), -0x2200000A: ('CS', '1', "Preserve Composite Instances After Media Creation", '', 'PreserveCompositeInstancesAfterMediaCreation'), -0x2200000B: ('US', '1', "Total Number of Pieces of Media Created", '', 'TotalNumberOfPiecesOfMediaCreated'), -0x2200000C: ('LO', '1', "Requested Media Application Profile", '', 'RequestedMediaApplicationProfile'), -0x2200000D: ('SQ', '1', "Referenced Storage Media Sequence", '', 'ReferencedStorageMediaSequence'), -0x2200000E: ('AT', '1-n', "Failure Attributes", '', 'FailureAttributes'), -0x2200000F: ('CS', '1', "Allow Lossy Compression", '', 'AllowLossyCompression'), -0x22000020: ('CS', '1', "Request Priority", '', 'RequestPriority'), -0x30020002: ('SH', '1', "RT Image Label", '', 'RTImageLabel'), -0x30020003: ('LO', '1', "RT Image Name", '', 'RTImageName'), -0x30020004: ('ST', '1', "RT Image Description", '', 'RTImageDescription'), -0x3002000A: ('CS', '1', "Reported Values Origin", '', 'ReportedValuesOrigin'), -0x3002000C: ('CS', '1', "RT Image Plane", '', 'RTImagePlane'), -0x3002000D: ('DS', '3', "X-Ray Image Receptor Translation", '', 'XRayImageReceptorTranslation'), -0x3002000E: ('DS', '1', "X-Ray Image Receptor Angle", '', 'XRayImageReceptorAngle'), -0x30020010: ('DS', '6', "RT Image Orientation", '', 'RTImageOrientation'), -0x30020011: ('DS', '2', "Image Plane Pixel Spacing", '', 'ImagePlanePixelSpacing'), -0x30020012: ('DS', '2', "RT Image Position", '', 'RTImagePosition'), -0x30020020: ('SH', '1', "Radiation Machine Name", '', 'RadiationMachineName'), -0x30020022: ('DS', '1', "Radiation Machine SAD", '', 'RadiationMachineSAD'), -0x30020024: ('DS', '1', "Radiation Machine SSD", '', 'RadiationMachineSSD'), -0x30020026: ('DS', '1', "RT Image SID", '', 'RTImageSID'), -0x30020028: ('DS', '1', "Source to Reference Object Distance", '', 'SourceToReferenceObjectDistance'), -0x30020029: ('IS', '1', "Fraction Number", '', 'FractionNumber'), -0x30020030: ('SQ', '1', "Exposure Sequence", '', 'ExposureSequence'), -0x30020032: ('DS', '1', "Meterset Exposure", '', 'MetersetExposure'), -0x30020034: ('DS', '4', "Diaphragm Position", '', 'DiaphragmPosition'), -0x30020040: ('SQ', '1', "Fluence Map Sequence", '', 'FluenceMapSequence'), -0x30020041: ('CS', '1', "Fluence Data Source", '', 'FluenceDataSource'), -0x30020042: ('DS', '1', "Fluence Data Scale", '', 'FluenceDataScale'), -0x30020050: ('SQ', '1', "Primary Fluence Mode Sequence", '', 'PrimaryFluenceModeSequence'), -0x30020051: ('CS', '1', "Fluence Mode", '', 'FluenceMode'), -0x30020052: ('SH', '1', "Fluence Mode ID", '', 'FluenceModeID'), -0x30040001: ('CS', '1', "DVH Type", '', 'DVHType'), -0x30040002: ('CS', '1', "Dose Units", '', 'DoseUnits'), -0x30040004: ('CS', '1', "Dose Type", '', 'DoseType'), -0x30040006: ('LO', '1', "Dose Comment", '', 'DoseComment'), -0x30040008: ('DS', '3', "Normalization Point", '', 'NormalizationPoint'), -0x3004000A: ('CS', '1', "Dose Summation Type", '', 'DoseSummationType'), -0x3004000C: ('DS', '2-n', "Grid Frame Offset Vector", '', 'GridFrameOffsetVector'), -0x3004000E: ('DS', '1', "Dose Grid Scaling", '', 'DoseGridScaling'), -0x30040010: ('SQ', '1', "RT Dose ROI Sequence", '', 'RTDoseROISequence'), -0x30040012: ('DS', '1', "Dose Value", '', 'DoseValue'), -0x30040014: ('CS', '1-3', "Tissue Heterogeneity Correction", '', 'TissueHeterogeneityCorrection'), -0x30040040: ('DS', '3', "DVH Normalization Point", '', 'DVHNormalizationPoint'), -0x30040042: ('DS', '1', "DVH Normalization Dose Value", '', 'DVHNormalizationDoseValue'), -0x30040050: ('SQ', '1', "DVH Sequence", '', 'DVHSequence'), -0x30040052: ('DS', '1', "DVH Dose Scaling", '', 'DVHDoseScaling'), -0x30040054: ('CS', '1', "DVH Volume Units", '', 'DVHVolumeUnits'), -0x30040056: ('IS', '1', "DVH Number of Bins", '', 'DVHNumberOfBins'), -0x30040058: ('DS', '2-2n', "DVH Data", '', 'DVHData'), -0x30040060: ('SQ', '1', "DVH Referenced ROI Sequence", '', 'DVHReferencedROISequence'), -0x30040062: ('CS', '1', "DVH ROI Contribution Type", '', 'DVHROIContributionType'), -0x30040070: ('DS', '1', "DVH Minimum Dose", '', 'DVHMinimumDose'), -0x30040072: ('DS', '1', "DVH Maximum Dose", '', 'DVHMaximumDose'), -0x30040074: ('DS', '1', "DVH Mean Dose", '', 'DVHMeanDose'), -0x30060002: ('SH', '1', "Structure Set Label", '', 'StructureSetLabel'), -0x30060004: ('LO', '1', "Structure Set Name", '', 'StructureSetName'), -0x30060006: ('ST', '1', "Structure Set Description", '', 'StructureSetDescription'), -0x30060008: ('DA', '1', "Structure Set Date", '', 'StructureSetDate'), -0x30060009: ('TM', '1', "Structure Set Time", '', 'StructureSetTime'), -0x30060010: ('SQ', '1', "Referenced Frame of Reference Sequence", '', 'ReferencedFrameOfReferenceSequence'), -0x30060012: ('SQ', '1', "RT Referenced Study Sequence", '', 'RTReferencedStudySequence'), -0x30060014: ('SQ', '1', "RT Referenced Series Sequence", '', 'RTReferencedSeriesSequence'), -0x30060016: ('SQ', '1', "Contour Image Sequence", '', 'ContourImageSequence'), -0x30060020: ('SQ', '1', "Structure Set ROI Sequence", '', 'StructureSetROISequence'), -0x30060022: ('IS', '1', "ROI Number", '', 'ROINumber'), -0x30060024: ('UI', '1', "Referenced Frame of Reference UID", '', 'ReferencedFrameOfReferenceUID'), -0x30060026: ('LO', '1', "ROI Name", '', 'ROIName'), -0x30060028: ('ST', '1', "ROI Description", '', 'ROIDescription'), -0x3006002A: ('IS', '3', "ROI Display Color", '', 'ROIDisplayColor'), -0x3006002C: ('DS', '1', "ROI Volume", '', 'ROIVolume'), -0x30060030: ('SQ', '1', "RT Related ROI Sequence", '', 'RTRelatedROISequence'), -0x30060033: ('CS', '1', "RT ROI Relationship", '', 'RTROIRelationship'), -0x30060036: ('CS', '1', "ROI Generation Algorithm", '', 'ROIGenerationAlgorithm'), -0x30060038: ('LO', '1', "ROI Generation Description", '', 'ROIGenerationDescription'), -0x30060039: ('SQ', '1', "ROI Contour Sequence", '', 'ROIContourSequence'), -0x30060040: ('SQ', '1', "Contour Sequence", '', 'ContourSequence'), -0x30060042: ('CS', '1', "Contour Geometric Type", '', 'ContourGeometricType'), -0x30060044: ('DS', '1', "Contour Slab Thickness", '', 'ContourSlabThickness'), -0x30060045: ('DS', '3', "Contour Offset Vector", '', 'ContourOffsetVector'), -0x30060046: ('IS', '1', "Number of Contour Points", '', 'NumberOfContourPoints'), -0x30060048: ('IS', '1', "Contour Number", '', 'ContourNumber'), -0x30060049: ('IS', '1-n', "Attached Contours", '', 'AttachedContours'), -0x30060050: ('DS', '3-3n', "Contour Data", '', 'ContourData'), -0x30060080: ('SQ', '1', "RT ROI Observations Sequence", '', 'RTROIObservationsSequence'), -0x30060082: ('IS', '1', "Observation Number", '', 'ObservationNumber'), -0x30060084: ('IS', '1', "Referenced ROI Number", '', 'ReferencedROINumber'), -0x30060085: ('SH', '1', "ROI Observation Label", '', 'ROIObservationLabel'), -0x30060086: ('SQ', '1', "RT ROI Identification Code Sequence", '', 'RTROIIdentificationCodeSequence'), -0x30060088: ('ST', '1', "ROI Observation Description", '', 'ROIObservationDescription'), -0x300600A0: ('SQ', '1', "Related RT ROI Observations Sequence", '', 'RelatedRTROIObservationsSequence'), -0x300600A4: ('CS', '1', "RT ROI Interpreted Type", '', 'RTROIInterpretedType'), -0x300600A6: ('PN', '1', "ROI Interpreter", '', 'ROIInterpreter'), -0x300600B0: ('SQ', '1', "ROI Physical Properties Sequence", '', 'ROIPhysicalPropertiesSequence'), -0x300600B2: ('CS', '1', "ROI Physical Property", '', 'ROIPhysicalProperty'), -0x300600B4: ('DS', '1', "ROI Physical Property Value", '', 'ROIPhysicalPropertyValue'), -0x300600B6: ('SQ', '1', "ROI Elemental Composition Sequence", '', 'ROIElementalCompositionSequence'), -0x300600B7: ('US', '1', "ROI Elemental Composition Atomic Number", '', 'ROIElementalCompositionAtomicNumber'), -0x300600B8: ('FL', '1', "ROI Elemental Composition Atomic Mass Fraction", '', 'ROIElementalCompositionAtomicMassFraction'), -0x300600C0: ('SQ', '1', "Frame of Reference Relationship Sequence", '', 'FrameOfReferenceRelationshipSequence'), -0x300600C2: ('UI', '1', "Related Frame of Reference UID", '', 'RelatedFrameOfReferenceUID'), -0x300600C4: ('CS', '1', "Frame of Reference Transformation Type", '', 'FrameOfReferenceTransformationType'), -0x300600C6: ('DS', '16', "Frame of Reference Transformation Matrix", '', 'FrameOfReferenceTransformationMatrix'), -0x300600C8: ('LO', '1', "Frame of Reference Transformation Comment", '', 'FrameOfReferenceTransformationComment'), -0x30080010: ('SQ', '1', "Measured Dose Reference Sequence", '', 'MeasuredDoseReferenceSequence'), -0x30080012: ('ST', '1', "Measured Dose Description", '', 'MeasuredDoseDescription'), -0x30080014: ('CS', '1', "Measured Dose Type", '', 'MeasuredDoseType'), -0x30080016: ('DS', '1', "Measured Dose Value", '', 'MeasuredDoseValue'), -0x30080020: ('SQ', '1', "Treatment Session Beam Sequence", '', 'TreatmentSessionBeamSequence'), -0x30080021: ('SQ', '1', "Treatment Session Ion Beam Sequence", '', 'TreatmentSessionIonBeamSequence'), -0x30080022: ('IS', '1', "Current Fraction Number", '', 'CurrentFractionNumber'), -0x30080024: ('DA', '1', "Treatment Control Point Date", '', 'TreatmentControlPointDate'), -0x30080025: ('TM', '1', "Treatment Control Point Time", '', 'TreatmentControlPointTime'), -0x3008002A: ('CS', '1', "Treatment Termination Status", '', 'TreatmentTerminationStatus'), -0x3008002B: ('SH', '1', "Treatment Termination Code", '', 'TreatmentTerminationCode'), -0x3008002C: ('CS', '1', "Treatment Verification Status", '', 'TreatmentVerificationStatus'), -0x30080030: ('SQ', '1', "Referenced Treatment Record Sequence", '', 'ReferencedTreatmentRecordSequence'), -0x30080032: ('DS', '1', "Specified Primary Meterset", '', 'SpecifiedPrimaryMeterset'), -0x30080033: ('DS', '1', "Specified Secondary Meterset", '', 'SpecifiedSecondaryMeterset'), -0x30080036: ('DS', '1', "Delivered Primary Meterset", '', 'DeliveredPrimaryMeterset'), -0x30080037: ('DS', '1', "Delivered Secondary Meterset", '', 'DeliveredSecondaryMeterset'), -0x3008003A: ('DS', '1', "Specified Treatment Time", '', 'SpecifiedTreatmentTime'), -0x3008003B: ('DS', '1', "Delivered Treatment Time", '', 'DeliveredTreatmentTime'), -0x30080040: ('SQ', '1', "Control Point Delivery Sequence", '', 'ControlPointDeliverySequence'), -0x30080041: ('SQ', '1', "Ion Control Point Delivery Sequence", '', 'IonControlPointDeliverySequence'), -0x30080042: ('DS', '1', "Specified Meterset", '', 'SpecifiedMeterset'), -0x30080044: ('DS', '1', "Delivered Meterset", '', 'DeliveredMeterset'), -0x30080045: ('FL', '1', "Meterset Rate Set", '', 'MetersetRateSet'), -0x30080046: ('FL', '1', "Meterset Rate Delivered", '', 'MetersetRateDelivered'), -0x30080047: ('FL', '1-n', "Scan Spot Metersets Delivered", '', 'ScanSpotMetersetsDelivered'), -0x30080048: ('DS', '1', "Dose Rate Delivered", '', 'DoseRateDelivered'), -0x30080050: ('SQ', '1', "Treatment Summary Calculated Dose Reference Sequence", '', 'TreatmentSummaryCalculatedDoseReferenceSequence'), -0x30080052: ('DS', '1', "Cumulative Dose to Dose Reference", '', 'CumulativeDoseToDoseReference'), -0x30080054: ('DA', '1', "First Treatment Date", '', 'FirstTreatmentDate'), -0x30080056: ('DA', '1', "Most Recent Treatment Date", '', 'MostRecentTreatmentDate'), -0x3008005A: ('IS', '1', "Number of Fractions Delivered", '', 'NumberOfFractionsDelivered'), -0x30080060: ('SQ', '1', "Override Sequence", '', 'OverrideSequence'), -0x30080061: ('AT', '1', "Parameter Sequence Pointer", '', 'ParameterSequencePointer'), -0x30080062: ('AT', '1', "Override Parameter Pointer", '', 'OverrideParameterPointer'), -0x30080063: ('IS', '1', "Parameter Item Index", '', 'ParameterItemIndex'), -0x30080064: ('IS', '1', "Measured Dose Reference Number", '', 'MeasuredDoseReferenceNumber'), -0x30080065: ('AT', '1', "Parameter Pointer", '', 'ParameterPointer'), -0x30080066: ('ST', '1', "Override Reason", '', 'OverrideReason'), -0x30080068: ('SQ', '1', "Corrected Parameter Sequence", '', 'CorrectedParameterSequence'), -0x3008006A: ('FL', '1', "Correction Value", '', 'CorrectionValue'), -0x30080070: ('SQ', '1', "Calculated Dose Reference Sequence", '', 'CalculatedDoseReferenceSequence'), -0x30080072: ('IS', '1', "Calculated Dose Reference Number", '', 'CalculatedDoseReferenceNumber'), -0x30080074: ('ST', '1', "Calculated Dose Reference Description", '', 'CalculatedDoseReferenceDescription'), -0x30080076: ('DS', '1', "Calculated Dose Reference Dose Value", '', 'CalculatedDoseReferenceDoseValue'), -0x30080078: ('DS', '1', "Start Meterset", '', 'StartMeterset'), -0x3008007A: ('DS', '1', "End Meterset", '', 'EndMeterset'), -0x30080080: ('SQ', '1', "Referenced Measured Dose Reference Sequence", '', 'ReferencedMeasuredDoseReferenceSequence'), -0x30080082: ('IS', '1', "Referenced Measured Dose Reference Number", '', 'ReferencedMeasuredDoseReferenceNumber'), -0x30080090: ('SQ', '1', "Referenced Calculated Dose Reference Sequence", '', 'ReferencedCalculatedDoseReferenceSequence'), -0x30080092: ('IS', '1', "Referenced Calculated Dose Reference Number", '', 'ReferencedCalculatedDoseReferenceNumber'), -0x300800A0: ('SQ', '1', "Beam Limiting Device Leaf Pairs Sequence", '', 'BeamLimitingDeviceLeafPairsSequence'), -0x300800B0: ('SQ', '1', "Recorded Wedge Sequence", '', 'RecordedWedgeSequence'), -0x300800C0: ('SQ', '1', "Recorded Compensator Sequence", '', 'RecordedCompensatorSequence'), -0x300800D0: ('SQ', '1', "Recorded Block Sequence", '', 'RecordedBlockSequence'), -0x300800E0: ('SQ', '1', "Treatment Summary Measured Dose Reference Sequence", '', 'TreatmentSummaryMeasuredDoseReferenceSequence'), -0x300800F0: ('SQ', '1', "Recorded Snout Sequence", '', 'RecordedSnoutSequence'), -0x300800F2: ('SQ', '1', "Recorded Range Shifter Sequence", '', 'RecordedRangeShifterSequence'), -0x300800F4: ('SQ', '1', "Recorded Lateral Spreading Device Sequence", '', 'RecordedLateralSpreadingDeviceSequence'), -0x300800F6: ('SQ', '1', "Recorded Range Modulator Sequence", '', 'RecordedRangeModulatorSequence'), -0x30080100: ('SQ', '1', "Recorded Source Sequence", '', 'RecordedSourceSequence'), -0x30080105: ('LO', '1', "Source Serial Number", '', 'SourceSerialNumber'), -0x30080110: ('SQ', '1', "Treatment Session Application Setup Sequence", '', 'TreatmentSessionApplicationSetupSequence'), -0x30080116: ('CS', '1', "Application Setup Check", '', 'ApplicationSetupCheck'), -0x30080120: ('SQ', '1', "Recorded Brachy Accessory Device Sequence", '', 'RecordedBrachyAccessoryDeviceSequence'), -0x30080122: ('IS', '1', "Referenced Brachy Accessory Device Number", '', 'ReferencedBrachyAccessoryDeviceNumber'), -0x30080130: ('SQ', '1', "Recorded Channel Sequence", '', 'RecordedChannelSequence'), -0x30080132: ('DS', '1', "Specified Channel Total Time", '', 'SpecifiedChannelTotalTime'), -0x30080134: ('DS', '1', "Delivered Channel Total Time", '', 'DeliveredChannelTotalTime'), -0x30080136: ('IS', '1', "Specified Number of Pulses", '', 'SpecifiedNumberOfPulses'), -0x30080138: ('IS', '1', "Delivered Number of Pulses", '', 'DeliveredNumberOfPulses'), -0x3008013A: ('DS', '1', "Specified Pulse Repetition Interval", '', 'SpecifiedPulseRepetitionInterval'), -0x3008013C: ('DS', '1', "Delivered Pulse Repetition Interval", '', 'DeliveredPulseRepetitionInterval'), -0x30080140: ('SQ', '1', "Recorded Source Applicator Sequence", '', 'RecordedSourceApplicatorSequence'), -0x30080142: ('IS', '1', "Referenced Source Applicator Number", '', 'ReferencedSourceApplicatorNumber'), -0x30080150: ('SQ', '1', "Recorded Channel Shield Sequence", '', 'RecordedChannelShieldSequence'), -0x30080152: ('IS', '1', "Referenced Channel Shield Number", '', 'ReferencedChannelShieldNumber'), -0x30080160: ('SQ', '1', "Brachy Control Point Delivered Sequence", '', 'BrachyControlPointDeliveredSequence'), -0x30080162: ('DA', '1', "Safe Position Exit Date", '', 'SafePositionExitDate'), -0x30080164: ('TM', '1', "Safe Position Exit Time", '', 'SafePositionExitTime'), -0x30080166: ('DA', '1', "Safe Position Return Date", '', 'SafePositionReturnDate'), -0x30080168: ('TM', '1', "Safe Position Return Time", '', 'SafePositionReturnTime'), -0x30080200: ('CS', '1', "Current Treatment Status", '', 'CurrentTreatmentStatus'), -0x30080202: ('ST', '1', "Treatment Status Comment", '', 'TreatmentStatusComment'), -0x30080220: ('SQ', '1', "Fraction Group Summary Sequence", '', 'FractionGroupSummarySequence'), -0x30080223: ('IS', '1', "Referenced Fraction Number", '', 'ReferencedFractionNumber'), -0x30080224: ('CS', '1', "Fraction Group Type", '', 'FractionGroupType'), -0x30080230: ('CS', '1', "Beam Stopper Position", '', 'BeamStopperPosition'), -0x30080240: ('SQ', '1', "Fraction Status Summary Sequence", '', 'FractionStatusSummarySequence'), -0x30080250: ('DA', '1', "Treatment Date", '', 'TreatmentDate'), -0x30080251: ('TM', '1', "Treatment Time", '', 'TreatmentTime'), -0x300A0002: ('SH', '1', "RT Plan Label", '', 'RTPlanLabel'), -0x300A0003: ('LO', '1', "RT Plan Name", '', 'RTPlanName'), -0x300A0004: ('ST', '1', "RT Plan Description", '', 'RTPlanDescription'), -0x300A0006: ('DA', '1', "RT Plan Date", '', 'RTPlanDate'), -0x300A0007: ('TM', '1', "RT Plan Time", '', 'RTPlanTime'), -0x300A0009: ('LO', '1-n', "Treatment Protocols", '', 'TreatmentProtocols'), -0x300A000A: ('CS', '1', "Plan Intent", '', 'PlanIntent'), -0x300A000B: ('LO', '1-n', "Treatment Sites", '', 'TreatmentSites'), -0x300A000C: ('CS', '1', "RT Plan Geometry", '', 'RTPlanGeometry'), -0x300A000E: ('ST', '1', "Prescription Description", '', 'PrescriptionDescription'), -0x300A0010: ('SQ', '1', "Dose Reference Sequence", '', 'DoseReferenceSequence'), -0x300A0012: ('IS', '1', "Dose Reference Number", '', 'DoseReferenceNumber'), -0x300A0013: ('UI', '1', "Dose Reference UID", '', 'DoseReferenceUID'), -0x300A0014: ('CS', '1', "Dose Reference Structure Type", '', 'DoseReferenceStructureType'), -0x300A0015: ('CS', '1', "Nominal Beam Energy Unit", '', 'NominalBeamEnergyUnit'), -0x300A0016: ('LO', '1', "Dose Reference Description", '', 'DoseReferenceDescription'), -0x300A0018: ('DS', '3', "Dose Reference Point Coordinates", '', 'DoseReferencePointCoordinates'), -0x300A001A: ('DS', '1', "Nominal Prior Dose", '', 'NominalPriorDose'), -0x300A0020: ('CS', '1', "Dose Reference Type", '', 'DoseReferenceType'), -0x300A0021: ('DS', '1', "Constraint Weight", '', 'ConstraintWeight'), -0x300A0022: ('DS', '1', "Delivery Warning Dose", '', 'DeliveryWarningDose'), -0x300A0023: ('DS', '1', "Delivery Maximum Dose", '', 'DeliveryMaximumDose'), -0x300A0025: ('DS', '1', "Target Minimum Dose", '', 'TargetMinimumDose'), -0x300A0026: ('DS', '1', "Target Prescription Dose", '', 'TargetPrescriptionDose'), -0x300A0027: ('DS', '1', "Target Maximum Dose", '', 'TargetMaximumDose'), -0x300A0028: ('DS', '1', "Target Underdose Volume Fraction", '', 'TargetUnderdoseVolumeFraction'), -0x300A002A: ('DS', '1', "Organ at Risk Full-volume Dose", '', 'OrganAtRiskFullVolumeDose'), -0x300A002B: ('DS', '1', "Organ at Risk Limit Dose", '', 'OrganAtRiskLimitDose'), -0x300A002C: ('DS', '1', "Organ at Risk Maximum Dose", '', 'OrganAtRiskMaximumDose'), -0x300A002D: ('DS', '1', "Organ at Risk Overdose Volume Fraction", '', 'OrganAtRiskOverdoseVolumeFraction'), -0x300A0040: ('SQ', '1', "Tolerance Table Sequence", '', 'ToleranceTableSequence'), -0x300A0042: ('IS', '1', "Tolerance Table Number", '', 'ToleranceTableNumber'), -0x300A0043: ('SH', '1', "Tolerance Table Label", '', 'ToleranceTableLabel'), -0x300A0044: ('DS', '1', "Gantry Angle Tolerance", '', 'GantryAngleTolerance'), -0x300A0046: ('DS', '1', "Beam Limiting Device Angle Tolerance", '', 'BeamLimitingDeviceAngleTolerance'), -0x300A0048: ('SQ', '1', "Beam Limiting Device Tolerance Sequence", '', 'BeamLimitingDeviceToleranceSequence'), -0x300A004A: ('DS', '1', "Beam Limiting Device Position Tolerance", '', 'BeamLimitingDevicePositionTolerance'), -0x300A004B: ('FL', '1', "Snout Position Tolerance", '', 'SnoutPositionTolerance'), -0x300A004C: ('DS', '1', "Patient Support Angle Tolerance", '', 'PatientSupportAngleTolerance'), -0x300A004E: ('DS', '1', "Table Top Eccentric Angle Tolerance", '', 'TableTopEccentricAngleTolerance'), -0x300A004F: ('FL', '1', "Table Top Pitch Angle Tolerance", '', 'TableTopPitchAngleTolerance'), -0x300A0050: ('FL', '1', "Table Top Roll Angle Tolerance", '', 'TableTopRollAngleTolerance'), -0x300A0051: ('DS', '1', "Table Top Vertical Position Tolerance", '', 'TableTopVerticalPositionTolerance'), -0x300A0052: ('DS', '1', "Table Top Longitudinal Position Tolerance", '', 'TableTopLongitudinalPositionTolerance'), -0x300A0053: ('DS', '1', "Table Top Lateral Position Tolerance", '', 'TableTopLateralPositionTolerance'), -0x300A0055: ('CS', '1', "RT Plan Relationship", '', 'RTPlanRelationship'), -0x300A0070: ('SQ', '1', "Fraction Group Sequence", '', 'FractionGroupSequence'), -0x300A0071: ('IS', '1', "Fraction Group Number", '', 'FractionGroupNumber'), -0x300A0072: ('LO', '1', "Fraction Group Description", '', 'FractionGroupDescription'), -0x300A0078: ('IS', '1', "Number of Fractions Planned", '', 'NumberOfFractionsPlanned'), -0x300A0079: ('IS', '1', "Number of Fraction Pattern Digits Per Day", '', 'NumberOfFractionPatternDigitsPerDay'), -0x300A007A: ('IS', '1', "Repeat Fraction Cycle Length", '', 'RepeatFractionCycleLength'), -0x300A007B: ('LT', '1', "Fraction Pattern", '', 'FractionPattern'), -0x300A0080: ('IS', '1', "Number of Beams", '', 'NumberOfBeams'), -0x300A0082: ('DS', '3', "Beam Dose Specification Point", '', 'BeamDoseSpecificationPoint'), -0x300A0084: ('DS', '1', "Beam Dose", '', 'BeamDose'), -0x300A0086: ('DS', '1', "Beam Meterset", '', 'BeamMeterset'), -0x300A0088: ('FL', '1', "Beam Dose Point Depth", '', 'BeamDosePointDepth'), -0x300A0089: ('FL', '1', "Beam Dose Point Equivalent Depth", '', 'BeamDosePointEquivalentDepth'), -0x300A008A: ('FL', '1', "Beam Dose Point SSD", '', 'BeamDosePointSSD'), -0x300A00A0: ('IS', '1', "Number of Brachy Application Setups", '', 'NumberOfBrachyApplicationSetups'), -0x300A00A2: ('DS', '3', "Brachy Application Setup Dose Specification Point", '', 'BrachyApplicationSetupDoseSpecificationPoint'), -0x300A00A4: ('DS', '1', "Brachy Application Setup Dose", '', 'BrachyApplicationSetupDose'), -0x300A00B0: ('SQ', '1', "Beam Sequence", '', 'BeamSequence'), -0x300A00B2: ('SH', '1', "Treatment Machine Name", '', 'TreatmentMachineName'), -0x300A00B3: ('CS', '1', "Primary Dosimeter Unit", '', 'PrimaryDosimeterUnit'), -0x300A00B4: ('DS', '1', "Source-Axis Distance", '', 'SourceAxisDistance'), -0x300A00B6: ('SQ', '1', "Beam Limiting Device Sequence", '', 'BeamLimitingDeviceSequence'), -0x300A00B8: ('CS', '1', "RT Beam Limiting Device Type", '', 'RTBeamLimitingDeviceType'), -0x300A00BA: ('DS', '1', "Source to Beam Limiting Device Distance", '', 'SourceToBeamLimitingDeviceDistance'), -0x300A00BB: ('FL', '1', "Isocenter to Beam Limiting Device Distance", '', 'IsocenterToBeamLimitingDeviceDistance'), -0x300A00BC: ('IS', '1', "Number of Leaf/Jaw Pairs", '', 'NumberOfLeafJawPairs'), -0x300A00BE: ('DS', '3-n', "Leaf Position Boundaries", '', 'LeafPositionBoundaries'), -0x300A00C0: ('IS', '1', "Beam Number", '', 'BeamNumber'), -0x300A00C2: ('LO', '1', "Beam Name", '', 'BeamName'), -0x300A00C3: ('ST', '1', "Beam Description", '', 'BeamDescription'), -0x300A00C4: ('CS', '1', "Beam Type", '', 'BeamType'), -0x300A00C6: ('CS', '1', "Radiation Type", '', 'RadiationType'), -0x300A00C7: ('CS', '1', "High-Dose Technique Type", '', 'HighDoseTechniqueType'), -0x300A00C8: ('IS', '1', "Reference Image Number", '', 'ReferenceImageNumber'), -0x300A00CA: ('SQ', '1', "Planned Verification Image Sequence", '', 'PlannedVerificationImageSequence'), -0x300A00CC: ('LO', '1-n', "Imaging Device-Specific Acquisition Parameters", '', 'ImagingDeviceSpecificAcquisitionParameters'), -0x300A00CE: ('CS', '1', "Treatment Delivery Type", '', 'TreatmentDeliveryType'), -0x300A00D0: ('IS', '1', "Number of Wedges", '', 'NumberOfWedges'), -0x300A00D1: ('SQ', '1', "Wedge Sequence", '', 'WedgeSequence'), -0x300A00D2: ('IS', '1', "Wedge Number", '', 'WedgeNumber'), -0x300A00D3: ('CS', '1', "Wedge Type", '', 'WedgeType'), -0x300A00D4: ('SH', '1', "Wedge ID", '', 'WedgeID'), -0x300A00D5: ('IS', '1', "Wedge Angle", '', 'WedgeAngle'), -0x300A00D6: ('DS', '1', "Wedge Factor", '', 'WedgeFactor'), -0x300A00D7: ('FL', '1', "Total Wedge Tray Water-Equivalent Thickness", '', 'TotalWedgeTrayWaterEquivalentThickness'), -0x300A00D8: ('DS', '1', "Wedge Orientation", '', 'WedgeOrientation'), -0x300A00D9: ('FL', '1', "Isocenter to Wedge Tray Distance", '', 'IsocenterToWedgeTrayDistance'), -0x300A00DA: ('DS', '1', "Source to Wedge Tray Distance", '', 'SourceToWedgeTrayDistance'), -0x300A00DB: ('FL', '1', "Wedge Thin Edge Position", '', 'WedgeThinEdgePosition'), -0x300A00DC: ('SH', '1', "Bolus ID", '', 'BolusID'), -0x300A00DD: ('ST', '1', "Bolus Description", '', 'BolusDescription'), -0x300A00E0: ('IS', '1', "Number of Compensators", '', 'NumberOfCompensators'), -0x300A00E1: ('SH', '1', "Material ID", '', 'MaterialID'), -0x300A00E2: ('DS', '1', "Total Compensator Tray Factor", '', 'TotalCompensatorTrayFactor'), -0x300A00E3: ('SQ', '1', "Compensator Sequence", '', 'CompensatorSequence'), -0x300A00E4: ('IS', '1', "Compensator Number", '', 'CompensatorNumber'), -0x300A00E5: ('SH', '1', "Compensator ID", '', 'CompensatorID'), -0x300A00E6: ('DS', '1', "Source to Compensator Tray Distance", '', 'SourceToCompensatorTrayDistance'), -0x300A00E7: ('IS', '1', "Compensator Rows", '', 'CompensatorRows'), -0x300A00E8: ('IS', '1', "Compensator Columns", '', 'CompensatorColumns'), -0x300A00E9: ('DS', '2', "Compensator Pixel Spacing", '', 'CompensatorPixelSpacing'), -0x300A00EA: ('DS', '2', "Compensator Position", '', 'CompensatorPosition'), -0x300A00EB: ('DS', '1-n', "Compensator Transmission Data", '', 'CompensatorTransmissionData'), -0x300A00EC: ('DS', '1-n', "Compensator Thickness Data", '', 'CompensatorThicknessData'), -0x300A00ED: ('IS', '1', "Number of Boli", '', 'NumberOfBoli'), -0x300A00EE: ('CS', '1', "Compensator Type", '', 'CompensatorType'), -0x300A00F0: ('IS', '1', "Number of Blocks", '', 'NumberOfBlocks'), -0x300A00F2: ('DS', '1', "Total Block Tray Factor", '', 'TotalBlockTrayFactor'), -0x300A00F3: ('FL', '1', "Total Block Tray Water-Equivalent Thickness", '', 'TotalBlockTrayWaterEquivalentThickness'), -0x300A00F4: ('SQ', '1', "Block Sequence", '', 'BlockSequence'), -0x300A00F5: ('SH', '1', "Block Tray ID", '', 'BlockTrayID'), -0x300A00F6: ('DS', '1', "Source to Block Tray Distance", '', 'SourceToBlockTrayDistance'), -0x300A00F7: ('FL', '1', "Isocenter to Block Tray Distance", '', 'IsocenterToBlockTrayDistance'), -0x300A00F8: ('CS', '1', "Block Type", '', 'BlockType'), -0x300A00F9: ('LO', '1', "Accessory Code", '', 'AccessoryCode'), -0x300A00FA: ('CS', '1', "Block Divergence", '', 'BlockDivergence'), -0x300A00FB: ('CS', '1', "Block Mounting Position", '', 'BlockMountingPosition'), -0x300A00FC: ('IS', '1', "Block Number", '', 'BlockNumber'), -0x300A00FE: ('LO', '1', "Block Name", '', 'BlockName'), -0x300A0100: ('DS', '1', "Block Thickness", '', 'BlockThickness'), -0x300A0102: ('DS', '1', "Block Transmission", '', 'BlockTransmission'), -0x300A0104: ('IS', '1', "Block Number of Points", '', 'BlockNumberOfPoints'), -0x300A0106: ('DS', '2-2n', "Block Data", '', 'BlockData'), -0x300A0107: ('SQ', '1', "Applicator Sequence", '', 'ApplicatorSequence'), -0x300A0108: ('SH', '1', "Applicator ID", '', 'ApplicatorID'), -0x300A0109: ('CS', '1', "Applicator Type", '', 'ApplicatorType'), -0x300A010A: ('LO', '1', "Applicator Description", '', 'ApplicatorDescription'), -0x300A010C: ('DS', '1', "Cumulative Dose Reference Coefficient", '', 'CumulativeDoseReferenceCoefficient'), -0x300A010E: ('DS', '1', "Final Cumulative Meterset Weight", '', 'FinalCumulativeMetersetWeight'), -0x300A0110: ('IS', '1', "Number of Control Points", '', 'NumberOfControlPoints'), -0x300A0111: ('SQ', '1', "Control Point Sequence", '', 'ControlPointSequence'), -0x300A0112: ('IS', '1', "Control Point Index", '', 'ControlPointIndex'), -0x300A0114: ('DS', '1', "Nominal Beam Energy", '', 'NominalBeamEnergy'), -0x300A0115: ('DS', '1', "Dose Rate Set", '', 'DoseRateSet'), -0x300A0116: ('SQ', '1', "Wedge Position Sequence", '', 'WedgePositionSequence'), -0x300A0118: ('CS', '1', "Wedge Position", '', 'WedgePosition'), -0x300A011A: ('SQ', '1', "Beam Limiting Device Position Sequence", '', 'BeamLimitingDevicePositionSequence'), -0x300A011C: ('DS', '2-2n', "Leaf/Jaw Positions", '', 'LeafJawPositions'), -0x300A011E: ('DS', '1', "Gantry Angle", '', 'GantryAngle'), -0x300A011F: ('CS', '1', "Gantry Rotation Direction", '', 'GantryRotationDirection'), -0x300A0120: ('DS', '1', "Beam Limiting Device Angle", '', 'BeamLimitingDeviceAngle'), -0x300A0121: ('CS', '1', "Beam Limiting Device Rotation Direction", '', 'BeamLimitingDeviceRotationDirection'), -0x300A0122: ('DS', '1', "Patient Support Angle", '', 'PatientSupportAngle'), -0x300A0123: ('CS', '1', "Patient Support Rotation Direction", '', 'PatientSupportRotationDirection'), -0x300A0124: ('DS', '1', "Table Top Eccentric Axis Distance", '', 'TableTopEccentricAxisDistance'), -0x300A0125: ('DS', '1', "Table Top Eccentric Angle", '', 'TableTopEccentricAngle'), -0x300A0126: ('CS', '1', "Table Top Eccentric Rotation Direction", '', 'TableTopEccentricRotationDirection'), -0x300A0128: ('DS', '1', "Table Top Vertical Position", '', 'TableTopVerticalPosition'), -0x300A0129: ('DS', '1', "Table Top Longitudinal Position", '', 'TableTopLongitudinalPosition'), -0x300A012A: ('DS', '1', "Table Top Lateral Position", '', 'TableTopLateralPosition'), -0x300A012C: ('DS', '3', "Isocenter Position", '', 'IsocenterPosition'), -0x300A012E: ('DS', '3', "Surface Entry Point", '', 'SurfaceEntryPoint'), -0x300A0130: ('DS', '1', "Source to Surface Distance", '', 'SourceToSurfaceDistance'), -0x300A0134: ('DS', '1', "Cumulative Meterset Weight", '', 'CumulativeMetersetWeight'), -0x300A0140: ('FL', '1', "Table Top Pitch Angle", '', 'TableTopPitchAngle'), -0x300A0142: ('CS', '1', "Table Top Pitch Rotation Direction", '', 'TableTopPitchRotationDirection'), -0x300A0144: ('FL', '1', "Table Top Roll Angle", '', 'TableTopRollAngle'), -0x300A0146: ('CS', '1', "Table Top Roll Rotation Direction", '', 'TableTopRollRotationDirection'), -0x300A0148: ('FL', '1', "Head Fixation Angle", '', 'HeadFixationAngle'), -0x300A014A: ('FL', '1', "Gantry Pitch Angle", '', 'GantryPitchAngle'), -0x300A014C: ('CS', '1', "Gantry Pitch Rotation Direction", '', 'GantryPitchRotationDirection'), -0x300A014E: ('FL', '1', "Gantry Pitch Angle Tolerance", '', 'GantryPitchAngleTolerance'), -0x300A0180: ('SQ', '1', "Patient Setup Sequence", '', 'PatientSetupSequence'), -0x300A0182: ('IS', '1', "Patient Setup Number", '', 'PatientSetupNumber'), -0x300A0183: ('LO', '1', "Patient Setup Label", '', 'PatientSetupLabel'), -0x300A0184: ('LO', '1', "Patient Additional Position", '', 'PatientAdditionalPosition'), -0x300A0190: ('SQ', '1', "Fixation Device Sequence", '', 'FixationDeviceSequence'), -0x300A0192: ('CS', '1', "Fixation Device Type", '', 'FixationDeviceType'), -0x300A0194: ('SH', '1', "Fixation Device Label", '', 'FixationDeviceLabel'), -0x300A0196: ('ST', '1', "Fixation Device Description", '', 'FixationDeviceDescription'), -0x300A0198: ('SH', '1', "Fixation Device Position", '', 'FixationDevicePosition'), -0x300A0199: ('FL', '1', "Fixation Device Pitch Angle", '', 'FixationDevicePitchAngle'), -0x300A019A: ('FL', '1', "Fixation Device Roll Angle", '', 'FixationDeviceRollAngle'), -0x300A01A0: ('SQ', '1', "Shielding Device Sequence", '', 'ShieldingDeviceSequence'), -0x300A01A2: ('CS', '1', "Shielding Device Type", '', 'ShieldingDeviceType'), -0x300A01A4: ('SH', '1', "Shielding Device Label", '', 'ShieldingDeviceLabel'), -0x300A01A6: ('ST', '1', "Shielding Device Description", '', 'ShieldingDeviceDescription'), -0x300A01A8: ('SH', '1', "Shielding Device Position", '', 'ShieldingDevicePosition'), -0x300A01B0: ('CS', '1', "Setup Technique", '', 'SetupTechnique'), -0x300A01B2: ('ST', '1', "Setup Technique Description", '', 'SetupTechniqueDescription'), -0x300A01B4: ('SQ', '1', "Setup Device Sequence", '', 'SetupDeviceSequence'), -0x300A01B6: ('CS', '1', "Setup Device Type", '', 'SetupDeviceType'), -0x300A01B8: ('SH', '1', "Setup Device Label", '', 'SetupDeviceLabel'), -0x300A01BA: ('ST', '1', "Setup Device Description", '', 'SetupDeviceDescription'), -0x300A01BC: ('DS', '1', "Setup Device Parameter", '', 'SetupDeviceParameter'), -0x300A01D0: ('ST', '1', "Setup Reference Description", '', 'SetupReferenceDescription'), -0x300A01D2: ('DS', '1', "Table Top Vertical Setup Displacement", '', 'TableTopVerticalSetupDisplacement'), -0x300A01D4: ('DS', '1', "Table Top Longitudinal Setup Displacement", '', 'TableTopLongitudinalSetupDisplacement'), -0x300A01D6: ('DS', '1', "Table Top Lateral Setup Displacement", '', 'TableTopLateralSetupDisplacement'), -0x300A0200: ('CS', '1', "Brachy Treatment Technique", '', 'BrachyTreatmentTechnique'), -0x300A0202: ('CS', '1', "Brachy Treatment Type", '', 'BrachyTreatmentType'), -0x300A0206: ('SQ', '1', "Treatment Machine Sequence", '', 'TreatmentMachineSequence'), -0x300A0210: ('SQ', '1', "Source Sequence", '', 'SourceSequence'), -0x300A0212: ('IS', '1', "Source Number", '', 'SourceNumber'), -0x300A0214: ('CS', '1', "Source Type", '', 'SourceType'), -0x300A0216: ('LO', '1', "Source Manufacturer", '', 'SourceManufacturer'), -0x300A0218: ('DS', '1', "Active Source Diameter", '', 'ActiveSourceDiameter'), -0x300A021A: ('DS', '1', "Active Source Length", '', 'ActiveSourceLength'), -0x300A0222: ('DS', '1', "Source Encapsulation Nominal Thickness", '', 'SourceEncapsulationNominalThickness'), -0x300A0224: ('DS', '1', "Source Encapsulation Nominal Transmission", '', 'SourceEncapsulationNominalTransmission'), -0x300A0226: ('LO', '1', "Source Isotope Name", '', 'SourceIsotopeName'), -0x300A0228: ('DS', '1', "Source Isotope Half Life", '', 'SourceIsotopeHalfLife'), -0x300A0229: ('CS', '1', "Source Strength Units", '', 'SourceStrengthUnits'), -0x300A022A: ('DS', '1', "Reference Air Kerma Rate", '', 'ReferenceAirKermaRate'), -0x300A022B: ('DS', '1', "Source Strength", '', 'SourceStrength'), -0x300A022C: ('DA', '1', "Source Strength Reference Date", '', 'SourceStrengthReferenceDate'), -0x300A022E: ('TM', '1', "Source Strength Reference Time", '', 'SourceStrengthReferenceTime'), -0x300A0230: ('SQ', '1', "Application Setup Sequence", '', 'ApplicationSetupSequence'), -0x300A0232: ('CS', '1', "Application Setup Type", '', 'ApplicationSetupType'), -0x300A0234: ('IS', '1', "Application Setup Number", '', 'ApplicationSetupNumber'), -0x300A0236: ('LO', '1', "Application Setup Name", '', 'ApplicationSetupName'), -0x300A0238: ('LO', '1', "Application Setup Manufacturer", '', 'ApplicationSetupManufacturer'), -0x300A0240: ('IS', '1', "Template Number", '', 'TemplateNumber'), -0x300A0242: ('SH', '1', "Template Type", '', 'TemplateType'), -0x300A0244: ('LO', '1', "Template Name", '', 'TemplateName'), -0x300A0250: ('DS', '1', "Total Reference Air Kerma", '', 'TotalReferenceAirKerma'), -0x300A0260: ('SQ', '1', "Brachy Accessory Device Sequence", '', 'BrachyAccessoryDeviceSequence'), -0x300A0262: ('IS', '1', "Brachy Accessory Device Number", '', 'BrachyAccessoryDeviceNumber'), -0x300A0263: ('SH', '1', "Brachy Accessory Device ID", '', 'BrachyAccessoryDeviceID'), -0x300A0264: ('CS', '1', "Brachy Accessory Device Type", '', 'BrachyAccessoryDeviceType'), -0x300A0266: ('LO', '1', "Brachy Accessory Device Name", '', 'BrachyAccessoryDeviceName'), -0x300A026A: ('DS', '1', "Brachy Accessory Device Nominal Thickness", '', 'BrachyAccessoryDeviceNominalThickness'), -0x300A026C: ('DS', '1', "Brachy Accessory Device Nominal Transmission", '', 'BrachyAccessoryDeviceNominalTransmission'), -0x300A0280: ('SQ', '1', "Channel Sequence", '', 'ChannelSequence'), -0x300A0282: ('IS', '1', "Channel Number", '', 'ChannelNumber'), -0x300A0284: ('DS', '1', "Channel Length", '', 'ChannelLength'), -0x300A0286: ('DS', '1', "Channel Total Time", '', 'ChannelTotalTime'), -0x300A0288: ('CS', '1', "Source Movement Type", '', 'SourceMovementType'), -0x300A028A: ('IS', '1', "Number of Pulses", '', 'NumberOfPulses'), -0x300A028C: ('DS', '1', "Pulse Repetition Interval", '', 'PulseRepetitionInterval'), -0x300A0290: ('IS', '1', "Source Applicator Number", '', 'SourceApplicatorNumber'), -0x300A0291: ('SH', '1', "Source Applicator ID", '', 'SourceApplicatorID'), -0x300A0292: ('CS', '1', "Source Applicator Type", '', 'SourceApplicatorType'), -0x300A0294: ('LO', '1', "Source Applicator Name", '', 'SourceApplicatorName'), -0x300A0296: ('DS', '1', "Source Applicator Length", '', 'SourceApplicatorLength'), -0x300A0298: ('LO', '1', "Source Applicator Manufacturer", '', 'SourceApplicatorManufacturer'), -0x300A029C: ('DS', '1', "Source Applicator Wall Nominal Thickness", '', 'SourceApplicatorWallNominalThickness'), -0x300A029E: ('DS', '1', "Source Applicator Wall Nominal Transmission", '', 'SourceApplicatorWallNominalTransmission'), -0x300A02A0: ('DS', '1', "Source Applicator Step Size", '', 'SourceApplicatorStepSize'), -0x300A02A2: ('IS', '1', "Transfer Tube Number", '', 'TransferTubeNumber'), -0x300A02A4: ('DS', '1', "Transfer Tube Length", '', 'TransferTubeLength'), -0x300A02B0: ('SQ', '1', "Channel Shield Sequence", '', 'ChannelShieldSequence'), -0x300A02B2: ('IS', '1', "Channel Shield Number", '', 'ChannelShieldNumber'), -0x300A02B3: ('SH', '1', "Channel Shield ID", '', 'ChannelShieldID'), -0x300A02B4: ('LO', '1', "Channel Shield Name", '', 'ChannelShieldName'), -0x300A02B8: ('DS', '1', "Channel Shield Nominal Thickness", '', 'ChannelShieldNominalThickness'), -0x300A02BA: ('DS', '1', "Channel Shield Nominal Transmission", '', 'ChannelShieldNominalTransmission'), -0x300A02C8: ('DS', '1', "Final Cumulative Time Weight", '', 'FinalCumulativeTimeWeight'), -0x300A02D0: ('SQ', '1', "Brachy Control Point Sequence", '', 'BrachyControlPointSequence'), -0x300A02D2: ('DS', '1', "Control Point Relative Position", '', 'ControlPointRelativePosition'), -0x300A02D4: ('DS', '3', "Control Point 3D Position", '', 'ControlPoint3DPosition'), -0x300A02D6: ('DS', '1', "Cumulative Time Weight", '', 'CumulativeTimeWeight'), -0x300A02E0: ('CS', '1', "Compensator Divergence", '', 'CompensatorDivergence'), -0x300A02E1: ('CS', '1', "Compensator Mounting Position", '', 'CompensatorMountingPosition'), -0x300A02E2: ('DS', '1-n', "Source to Compensator Distance", '', 'SourceToCompensatorDistance'), -0x300A02E3: ('FL', '1', "Total Compensator Tray Water-Equivalent Thickness", '', 'TotalCompensatorTrayWaterEquivalentThickness'), -0x300A02E4: ('FL', '1', "Isocenter to Compensator Tray Distance", '', 'IsocenterToCompensatorTrayDistance'), -0x300A02E5: ('FL', '1', "Compensator Column Offset", '', 'CompensatorColumnOffset'), -0x300A02E6: ('FL', '1-n', "Isocenter to Compensator Distances", '', 'IsocenterToCompensatorDistances'), -0x300A02E7: ('FL', '1', "Compensator Relative Stopping Power Ratio", '', 'CompensatorRelativeStoppingPowerRatio'), -0x300A02E8: ('FL', '1', "Compensator Milling Tool Diameter", '', 'CompensatorMillingToolDiameter'), -0x300A02EA: ('SQ', '1', "Ion Range Compensator Sequence", '', 'IonRangeCompensatorSequence'), -0x300A02EB: ('LT', '1', "Compensator Description", '', 'CompensatorDescription'), -0x300A0302: ('IS', '1', "Radiation Mass Number", '', 'RadiationMassNumber'), -0x300A0304: ('IS', '1', "Radiation Atomic Number", '', 'RadiationAtomicNumber'), -0x300A0306: ('SS', '1', "Radiation Charge State", '', 'RadiationChargeState'), -0x300A0308: ('CS', '1', "Scan Mode", '', 'ScanMode'), -0x300A030A: ('FL', '2', "Virtual Source-Axis Distances", '', 'VirtualSourceAxisDistances'), -0x300A030C: ('SQ', '1', "Snout Sequence", '', 'SnoutSequence'), -0x300A030D: ('FL', '1', "Snout Position", '', 'SnoutPosition'), -0x300A030F: ('SH', '1', "Snout ID", '', 'SnoutID'), -0x300A0312: ('IS', '1', "Number of Range Shifters", '', 'NumberOfRangeShifters'), -0x300A0314: ('SQ', '1', "Range Shifter Sequence", '', 'RangeShifterSequence'), -0x300A0316: ('IS', '1', "Range Shifter Number", '', 'RangeShifterNumber'), -0x300A0318: ('SH', '1', "Range Shifter ID", '', 'RangeShifterID'), -0x300A0320: ('CS', '1', "Range Shifter Type", '', 'RangeShifterType'), -0x300A0322: ('LO', '1', "Range Shifter Description", '', 'RangeShifterDescription'), -0x300A0330: ('IS', '1', "Number of Lateral Spreading Devices", '', 'NumberOfLateralSpreadingDevices'), -0x300A0332: ('SQ', '1', "Lateral Spreading Device Sequence", '', 'LateralSpreadingDeviceSequence'), -0x300A0334: ('IS', '1', "Lateral Spreading Device Number", '', 'LateralSpreadingDeviceNumber'), -0x300A0336: ('SH', '1', "Lateral Spreading Device ID", '', 'LateralSpreadingDeviceID'), -0x300A0338: ('CS', '1', "Lateral Spreading Device Type", '', 'LateralSpreadingDeviceType'), -0x300A033A: ('LO', '1', "Lateral Spreading Device Description", '', 'LateralSpreadingDeviceDescription'), -0x300A033C: ('FL', '1', "Lateral Spreading Device Water Equivalent Thickness", '', 'LateralSpreadingDeviceWaterEquivalentThickness'), -0x300A0340: ('IS', '1', "Number of Range Modulators", '', 'NumberOfRangeModulators'), -0x300A0342: ('SQ', '1', "Range Modulator Sequence", '', 'RangeModulatorSequence'), -0x300A0344: ('IS', '1', "Range Modulator Number", '', 'RangeModulatorNumber'), -0x300A0346: ('SH', '1', "Range Modulator ID", '', 'RangeModulatorID'), -0x300A0348: ('CS', '1', "Range Modulator Type", '', 'RangeModulatorType'), -0x300A034A: ('LO', '1', "Range Modulator Description", '', 'RangeModulatorDescription'), -0x300A034C: ('SH', '1', "Beam Current Modulation ID", '', 'BeamCurrentModulationID'), -0x300A0350: ('CS', '1', "Patient Support Type", '', 'PatientSupportType'), -0x300A0352: ('SH', '1', "Patient Support ID", '', 'PatientSupportID'), -0x300A0354: ('LO', '1', "Patient Support Accessory Code", '', 'PatientSupportAccessoryCode'), -0x300A0356: ('FL', '1', "Fixation Light Azimuthal Angle", '', 'FixationLightAzimuthalAngle'), -0x300A0358: ('FL', '1', "Fixation Light Polar Angle", '', 'FixationLightPolarAngle'), -0x300A035A: ('FL', '1', "Meterset Rate", '', 'MetersetRate'), -0x300A0360: ('SQ', '1', "Range Shifter Settings Sequence", '', 'RangeShifterSettingsSequence'), -0x300A0362: ('LO', '1', "Range Shifter Setting", '', 'RangeShifterSetting'), -0x300A0364: ('FL', '1', "Isocenter to Range Shifter Distance", '', 'IsocenterToRangeShifterDistance'), -0x300A0366: ('FL', '1', "Range Shifter Water Equivalent Thickness", '', 'RangeShifterWaterEquivalentThickness'), -0x300A0370: ('SQ', '1', "Lateral Spreading Device Settings Sequence", '', 'LateralSpreadingDeviceSettingsSequence'), -0x300A0372: ('LO', '1', "Lateral Spreading Device Setting", '', 'LateralSpreadingDeviceSetting'), -0x300A0374: ('FL', '1', "Isocenter to Lateral Spreading Device Distance", '', 'IsocenterToLateralSpreadingDeviceDistance'), -0x300A0380: ('SQ', '1', "Range Modulator Settings Sequence", '', 'RangeModulatorSettingsSequence'), -0x300A0382: ('FL', '1', "Range Modulator Gating Start Value", '', 'RangeModulatorGatingStartValue'), -0x300A0384: ('FL', '1', "Range Modulator Gating Stop Value", '', 'RangeModulatorGatingStopValue'), -0x300A0386: ('FL', '1', "Range Modulator Gating Start Water Equivalent Thickness", '', 'RangeModulatorGatingStartWaterEquivalentThickness'), -0x300A0388: ('FL', '1', "Range Modulator Gating Stop Water Equivalent Thickness", '', 'RangeModulatorGatingStopWaterEquivalentThickness'), -0x300A038A: ('FL', '1', "Isocenter to Range Modulator Distance", '', 'IsocenterToRangeModulatorDistance'), -0x300A0390: ('SH', '1', "Scan Spot Tune ID", '', 'ScanSpotTuneID'), -0x300A0392: ('IS', '1', "Number of Scan Spot Positions", '', 'NumberOfScanSpotPositions'), -0x300A0394: ('FL', '1-n', "Scan Spot Position Map", '', 'ScanSpotPositionMap'), -0x300A0396: ('FL', '1-n', "Scan Spot Meterset Weights", '', 'ScanSpotMetersetWeights'), -0x300A0398: ('FL', '2', "Scanning Spot Size", '', 'ScanningSpotSize'), -0x300A039A: ('IS', '1', "Number of Paintings", '', 'NumberOfPaintings'), -0x300A03A0: ('SQ', '1', "Ion Tolerance Table Sequence", '', 'IonToleranceTableSequence'), -0x300A03A2: ('SQ', '1', "Ion Beam Sequence", '', 'IonBeamSequence'), -0x300A03A4: ('SQ', '1', "Ion Beam Limiting Device Sequence", '', 'IonBeamLimitingDeviceSequence'), -0x300A03A6: ('SQ', '1', "Ion Block Sequence", '', 'IonBlockSequence'), -0x300A03A8: ('SQ', '1', "Ion Control Point Sequence", '', 'IonControlPointSequence'), -0x300A03AA: ('SQ', '1', "Ion Wedge Sequence", '', 'IonWedgeSequence'), -0x300A03AC: ('SQ', '1', "Ion Wedge Position Sequence", '', 'IonWedgePositionSequence'), -0x300A0401: ('SQ', '1', "Referenced Setup Image Sequence", '', 'ReferencedSetupImageSequence'), -0x300A0402: ('ST', '1', "Setup Image Comment", '', 'SetupImageComment'), -0x300A0410: ('SQ', '1', "Motion Synchronization Sequence", '', 'MotionSynchronizationSequence'), -0x300A0412: ('FL', '3', "Control Point Orientation", '', 'ControlPointOrientation'), -0x300A0420: ('SQ', '1', "General Accessory Sequence", '', 'GeneralAccessorySequence'), -0x300A0421: ('SH', '1', "General Accessory ID", '', 'GeneralAccessoryID'), -0x300A0422: ('ST', '1', "General Accessory Description", '', 'GeneralAccessoryDescription'), -0x300A0423: ('CS', '1', "General Accessory Type", '', 'GeneralAccessoryType'), -0x300A0424: ('IS', '1', "General Accessory Number", '', 'GeneralAccessoryNumber'), -0x300A0431: ('SQ', '1', "Applicator Geometry Sequence", '', 'ApplicatorGeometrySequence'), -0x300A0432: ('CS', '1', "Applicator Aperture Shape", '', 'ApplicatorApertureShape'), -0x300A0433: ('FL', '1', "Applicator Opening", '', 'ApplicatorOpening'), -0x300A0434: ('FL', '1', "Applicator Opening X", '', 'ApplicatorOpeningX'), -0x300A0435: ('FL', '1', "Applicator Opening Y", '', 'ApplicatorOpeningY'), -0x300A0436: ('FL', '1', "Source to Applicator Mounting Position Distance", '', 'SourceToApplicatorMountingPositionDistance'), -0x300C0002: ('SQ', '1', "Referenced RT Plan Sequence", '', 'ReferencedRTPlanSequence'), -0x300C0004: ('SQ', '1', "Referenced Beam Sequence", '', 'ReferencedBeamSequence'), -0x300C0006: ('IS', '1', "Referenced Beam Number", '', 'ReferencedBeamNumber'), -0x300C0007: ('IS', '1', "Referenced Reference Image Number", '', 'ReferencedReferenceImageNumber'), -0x300C0008: ('DS', '1', "Start Cumulative Meterset Weight", '', 'StartCumulativeMetersetWeight'), -0x300C0009: ('DS', '1', "End Cumulative Meterset Weight", '', 'EndCumulativeMetersetWeight'), -0x300C000A: ('SQ', '1', "Referenced Brachy Application Setup Sequence", '', 'ReferencedBrachyApplicationSetupSequence'), -0x300C000C: ('IS', '1', "Referenced Brachy Application Setup Number", '', 'ReferencedBrachyApplicationSetupNumber'), -0x300C000E: ('IS', '1', "Referenced Source Number", '', 'ReferencedSourceNumber'), -0x300C0020: ('SQ', '1', "Referenced Fraction Group Sequence", '', 'ReferencedFractionGroupSequence'), -0x300C0022: ('IS', '1', "Referenced Fraction Group Number", '', 'ReferencedFractionGroupNumber'), -0x300C0040: ('SQ', '1', "Referenced Verification Image Sequence", '', 'ReferencedVerificationImageSequence'), -0x300C0042: ('SQ', '1', "Referenced Reference Image Sequence", '', 'ReferencedReferenceImageSequence'), -0x300C0050: ('SQ', '1', "Referenced Dose Reference Sequence", '', 'ReferencedDoseReferenceSequence'), -0x300C0051: ('IS', '1', "Referenced Dose Reference Number", '', 'ReferencedDoseReferenceNumber'), -0x300C0055: ('SQ', '1', "Brachy Referenced Dose Reference Sequence", '', 'BrachyReferencedDoseReferenceSequence'), -0x300C0060: ('SQ', '1', "Referenced Structure Set Sequence", '', 'ReferencedStructureSetSequence'), -0x300C006A: ('IS', '1', "Referenced Patient Setup Number", '', 'ReferencedPatientSetupNumber'), -0x300C0080: ('SQ', '1', "Referenced Dose Sequence", '', 'ReferencedDoseSequence'), -0x300C00A0: ('IS', '1', "Referenced Tolerance Table Number", '', 'ReferencedToleranceTableNumber'), -0x300C00B0: ('SQ', '1', "Referenced Bolus Sequence", '', 'ReferencedBolusSequence'), -0x300C00C0: ('IS', '1', "Referenced Wedge Number", '', 'ReferencedWedgeNumber'), -0x300C00D0: ('IS', '1', "Referenced Compensator Number", '', 'ReferencedCompensatorNumber'), -0x300C00E0: ('IS', '1', "Referenced Block Number", '', 'ReferencedBlockNumber'), -0x300C00F0: ('IS', '1', "Referenced Control Point Index", '', 'ReferencedControlPointIndex'), -0x300C00F2: ('SQ', '1', "Referenced Control Point Sequence", '', 'ReferencedControlPointSequence'), -0x300C00F4: ('IS', '1', "Referenced Start Control Point Index", '', 'ReferencedStartControlPointIndex'), -0x300C00F6: ('IS', '1', "Referenced Stop Control Point Index", '', 'ReferencedStopControlPointIndex'), -0x300C0100: ('IS', '1', "Referenced Range Shifter Number", '', 'ReferencedRangeShifterNumber'), -0x300C0102: ('IS', '1', "Referenced Lateral Spreading Device Number", '', 'ReferencedLateralSpreadingDeviceNumber'), -0x300C0104: ('IS', '1', "Referenced Range Modulator Number", '', 'ReferencedRangeModulatorNumber'), -0x300E0002: ('CS', '1', "Approval Status", '', 'ApprovalStatus'), -0x300E0004: ('DA', '1', "Review Date", '', 'ReviewDate'), -0x300E0005: ('TM', '1', "Review Time", '', 'ReviewTime'), -0x300E0008: ('PN', '1', "Reviewer Name", '', 'ReviewerName'), -0x40000010: ('LT', '1', "Arbitrary", 'Retired', 'Arbitrary'), -0x40004000: ('LT', '1', "Text Comments", 'Retired', 'TextComments'), -0x40080040: ('SH', '1', "Results ID", 'Retired', 'ResultsID'), -0x40080042: ('LO', '1', "Results ID Issuer", 'Retired', 'ResultsIDIssuer'), -0x40080050: ('SQ', '1', "Referenced Interpretation Sequence", 'Retired', 'ReferencedInterpretationSequence'), -0x400800FF: ('CS', '1', "Report Production Status (Trial)", 'Retired', 'ReportProductionStatusTrial'), -0x40080100: ('DA', '1', "Interpretation Recorded Date", 'Retired', 'InterpretationRecordedDate'), -0x40080101: ('TM', '1', "Interpretation Recorded Time", 'Retired', 'InterpretationRecordedTime'), -0x40080102: ('PN', '1', "Interpretation Recorder", 'Retired', 'InterpretationRecorder'), -0x40080103: ('LO', '1', "Reference to Recorded Sound", 'Retired', 'ReferenceToRecordedSound'), -0x40080108: ('DA', '1', "Interpretation Transcription Date", 'Retired', 'InterpretationTranscriptionDate'), -0x40080109: ('TM', '1', "Interpretation Transcription Time", 'Retired', 'InterpretationTranscriptionTime'), -0x4008010A: ('PN', '1', "Interpretation Transcriber", 'Retired', 'InterpretationTranscriber'), -0x4008010B: ('ST', '1', "Interpretation Text", 'Retired', 'InterpretationText'), -0x4008010C: ('PN', '1', "Interpretation Author", 'Retired', 'InterpretationAuthor'), -0x40080111: ('SQ', '1', "Interpretation Approver Sequence", 'Retired', 'InterpretationApproverSequence'), -0x40080112: ('DA', '1', "Interpretation Approval Date", 'Retired', 'InterpretationApprovalDate'), -0x40080113: ('TM', '1', "Interpretation Approval Time", 'Retired', 'InterpretationApprovalTime'), -0x40080114: ('PN', '1', "Physician Approving Interpretation", 'Retired', 'PhysicianApprovingInterpretation'), -0x40080115: ('LT', '1', "Interpretation Diagnosis Description", 'Retired', 'InterpretationDiagnosisDescription'), -0x40080117: ('SQ', '1', "Interpretation Diagnosis Code Sequence", 'Retired', 'InterpretationDiagnosisCodeSequence'), -0x40080118: ('SQ', '1', "Results Distribution List Sequence", 'Retired', 'ResultsDistributionListSequence'), -0x40080119: ('PN', '1', "Distribution Name", 'Retired', 'DistributionName'), -0x4008011A: ('LO', '1', "Distribution Address", 'Retired', 'DistributionAddress'), -0x40080200: ('SH', '1', "Interpretation ID", 'Retired', 'InterpretationID'), -0x40080202: ('LO', '1', "Interpretation ID Issuer", 'Retired', 'InterpretationIDIssuer'), -0x40080210: ('CS', '1', "Interpretation Type ID", 'Retired', 'InterpretationTypeID'), -0x40080212: ('CS', '1', "Interpretation Status ID", 'Retired', 'InterpretationStatusID'), -0x40080300: ('ST', '1', "Impressions", 'Retired', 'Impressions'), -0x40084000: ('ST', '1', "Results Comments", 'Retired', 'ResultsComments'), -0x40100001: ('CS', '1', "Low Energy Detectors", '', 'LowEnergyDetectors'), -0x40100002: ('CS', '1', "High Energy Detectors", '', 'HighEnergyDetectors'), -0x40100004: ('SQ', '1', "Detector Geometry Sequence", '', 'DetectorGeometrySequence'), -0x40101001: ('SQ', '1', "Threat ROI Voxel Sequence", '', 'ThreatROIVoxelSequence'), -0x40101004: ('FL', '3', "Threat ROI Base", '', 'ThreatROIBase'), -0x40101005: ('FL', '3', "Threat ROI Extents", '', 'ThreatROIExtents'), -0x40101006: ('OB', '1', "Threat ROI Bitmap", '', 'ThreatROIBitmap'), -0x40101007: ('SH', '1', "Route Segment ID", '', 'RouteSegmentID'), -0x40101008: ('CS', '1', "Gantry Type", '', 'GantryType'), -0x40101009: ('CS', '1', "OOI Owner Type", '', 'OOIOwnerType'), -0x4010100A: ('SQ', '1', "Route Segment Sequence", '', 'RouteSegmentSequence'), -0x40101010: ('US', '1', "Potential Threat Object ID", '', 'PotentialThreatObjectID'), -0x40101011: ('SQ', '1', "Threat Sequence", '', 'ThreatSequence'), -0x40101012: ('CS', '1', "Threat Category", '', 'ThreatCategory'), -0x40101013: ('LT', '1', "Threat Category Description", '', 'ThreatCategoryDescription'), -0x40101014: ('CS', '1', "ATD Ability Assessment", '', 'ATDAbilityAssessment'), -0x40101015: ('CS', '1', "ATD Assessment Flag", '', 'ATDAssessmentFlag'), -0x40101016: ('FL', '1', "ATD Assessment Probability", '', 'ATDAssessmentProbability'), -0x40101017: ('FL', '1', "Mass", '', 'Mass'), -0x40101018: ('FL', '1', "Density", '', 'Density'), -0x40101019: ('FL', '1', "Z Effective", '', 'ZEffective'), -0x4010101A: ('SH', '1', "Boarding Pass ID", '', 'BoardingPassID'), -0x4010101B: ('FL', '3', "Center of Mass", '', 'CenterOfMass'), -0x4010101C: ('FL', '3', "Center of PTO", '', 'CenterOfPTO'), -0x4010101D: ('FL', '6-n', "Bounding Polygon", '', 'BoundingPolygon'), -0x4010101E: ('SH', '1', "Route Segment Start Location ID", '', 'RouteSegmentStartLocationID'), -0x4010101F: ('SH', '1', "Route Segment End Location ID", '', 'RouteSegmentEndLocationID'), -0x40101020: ('CS', '1', "Route Segment Location ID Type", '', 'RouteSegmentLocationIDType'), -0x40101021: ('CS', '1-n', "Abort Reason", '', 'AbortReason'), -0x40101023: ('FL', '1', "Volume of PTO", '', 'VolumeOfPTO'), -0x40101024: ('CS', '1', "Abort Flag", '', 'AbortFlag'), -0x40101025: ('DT', '1', "Route Segment Start Time", '', 'RouteSegmentStartTime'), -0x40101026: ('DT', '1', "Route Segment End Time", '', 'RouteSegmentEndTime'), -0x40101027: ('CS', '1', "TDR Type", '', 'TDRType'), -0x40101028: ('CS', '1', "International Route Segment", '', 'InternationalRouteSegment'), -0x40101029: ('LO', '1-n', "Threat Detection Algorithm and Version", '', 'ThreatDetectionAlgorithmandVersion'), -0x4010102A: ('SH', '1', "Assigned Location", '', 'AssignedLocation'), -0x4010102B: ('DT', '1', "Alarm Decision Time", '', 'AlarmDecisionTime'), -0x40101031: ('CS', '1', "Alarm Decision", '', 'AlarmDecision'), -0x40101033: ('US', '1', "Number of Total Objects", '', 'NumberOfTotalObjects'), -0x40101034: ('US', '1', "Number of Alarm Objects", '', 'NumberOfAlarmObjects'), -0x40101037: ('SQ', '1', "PTO Representation Sequence", '', 'PTORepresentationSequence'), -0x40101038: ('SQ', '1', "ATD Assessment Sequence", '', 'ATDAssessmentSequence'), -0x40101039: ('CS', '1', "TIP Type", '', 'TIPType'), -0x4010103A: ('CS', '1', "DICOS Version", '', 'DICOSVersion'), -0x40101041: ('DT', '1', "OOI Owner Creation Time", '', 'OOIOwnerCreationTime'), -0x40101042: ('CS', '1', "OOI Type", '', 'OOIType'), -0x40101043: ('FL', '3', "OOI Size", '', 'OOISize'), -0x40101044: ('CS', '1', "Acquisition Status", '', 'AcquisitionStatus'), -0x40101045: ('SQ', '1', "Basis Materials Code Sequence", '', 'BasisMaterialsCodeSequence'), -0x40101046: ('CS', '1', "Phantom Type", '', 'PhantomType'), -0x40101047: ('SQ', '1', "OOI Owner Sequence", '', 'OOIOwnerSequence'), -0x40101048: ('CS', '1', "Scan Type", '', 'ScanType'), -0x40101051: ('LO', '1', "Itinerary ID", '', 'ItineraryID'), -0x40101052: ('SH', '1', "Itinerary ID Type", '', 'ItineraryIDType'), -0x40101053: ('LO', '1', "Itinerary ID Assigning Authority", '', 'ItineraryIDAssigningAuthority'), -0x40101054: ('SH', '1', "Route ID", '', 'RouteID'), -0x40101055: ('SH', '1', "Route ID Assigning Authority", '', 'RouteIDAssigningAuthority'), -0x40101056: ('CS', '1', "Inbound Arrival Type", '', 'InboundArrivalType'), -0x40101058: ('SH', '1', "Carrier ID", '', 'CarrierID'), -0x40101059: ('CS', '1', "Carrier ID Assigning Authority", '', 'CarrierIDAssigningAuthority'), -0x40101060: ('FL', '3', "Source Orientation", '', 'SourceOrientation'), -0x40101061: ('FL', '3', "Source Position", '', 'SourcePosition'), -0x40101062: ('FL', '1', "Belt Height", '', 'BeltHeight'), -0x40101064: ('SQ', '1', "Algorithm Routing Code Sequence", '', 'AlgorithmRoutingCodeSequence'), -0x40101067: ('CS', '1', "Transport Classification", '', 'TransportClassification'), -0x40101068: ('LT', '1', "OOI Type Descriptor", '', 'OOITypeDescriptor'), -0x40101069: ('FL', '1', "Total Processing Time", '', 'TotalProcessingTime'), -0x4010106C: ('OB', '1', "Detector Calibration Data", '', 'DetectorCalibrationData'), -0x4FFE0001: ('SQ', '1', "MAC Parameters Sequence", '', 'MACParametersSequence'), -0x52009229: ('SQ', '1', "Shared Functional Groups Sequence", '', 'SharedFunctionalGroupsSequence'), -0x52009230: ('SQ', '1', "Per-frame Functional Groups Sequence", '', 'PerFrameFunctionalGroupsSequence'), -0x54000100: ('SQ', '1', "Waveform Sequence", '', 'WaveformSequence'), -0x54000110: ('OB or OW', '1', "Channel Minimum Value", '', 'ChannelMinimumValue'), -0x54000112: ('OB or OW', '1', "Channel Maximum Value", '', 'ChannelMaximumValue'), -0x54001004: ('US', '1', "Waveform Bits Allocated", '', 'WaveformBitsAllocated'), -0x54001006: ('CS', '1', "Waveform Sample Interpretation", '', 'WaveformSampleInterpretation'), -0x5400100A: ('OB or OW', '1', "Waveform Padding Value", '', 'WaveformPaddingValue'), -0x54001010: ('OB or OW', '1', "Waveform Data", '', 'WaveformData'), -0x56000010: ('OF', '1', "First Order Phase Correction Angle", '', 'FirstOrderPhaseCorrectionAngle'), -0x56000020: ('OF', '1', "Spectroscopy Data", '', 'SpectroscopyData'), -0x7FE00010: ('OW or OB', '1', "Pixel Data", '', 'PixelData'), -0x7FE00020: ('OW', '1', "Coefficients SDVN", 'Retired', 'CoefficientsSDVN'), -0x7FE00030: ('OW', '1', "Coefficients SDHN", 'Retired', 'CoefficientsSDHN'), -0x7FE00040: ('OW', '1', "Coefficients SDDN", 'Retired', 'CoefficientsSDDN'), -0xFFFAFFFA: ('SQ', '1', "Digital Signatures Sequence", '', 'DigitalSignaturesSequence'), -0xFFFCFFFC: ('OB', '1', "Data Set Trailing Padding", '', 'DataSetTrailingPadding'), -0xFFFEE000: ('NONE', '1', "Item", '', 'Item'), -0xFFFEE00D: ('NONE', '1', "Item Delimitation Item", '', 'ItemDelimitationItem'), -0xFFFEE0DD: ('NONE', '1', "Sequence Delimitation Item", '', 'SequenceDelimitationItem')} - -RepeatersDictionary = { -'002031xx': ('CS', '1-n', "Source Image IDs", 'Retired', 'SourceImageIDs'), -'002804x0': ('US', '1', "Rows For Nth Order Coefficients", 'Retired', 'RowsForNthOrderCoefficients'), -'002804x1': ('US', '1', "Columns For Nth Order Coefficients", 'Retired', 'ColumnsForNthOrderCoefficients'), -'002804x2': ('LO', '1-n', "Coefficient Coding", 'Retired', 'CoefficientCoding'), -'002804x3': ('AT', '1-n', "Coefficient Coding Pointers", 'Retired', 'CoefficientCodingPointers'), -'002808x0': ('CS', '1-n', "Code Label", 'Retired', 'CodeLabel'), -'002808x2': ('US', '1', "Number of Tables", 'Retired', 'NumberOfTables'), -'002808x3': ('AT', '1-n', "Code Table Location", 'Retired', 'CodeTableLocation'), -'002808x4': ('US', '1', "Bits For Code Word", 'Retired', 'BitsForCodeWord'), -'002808x8': ('AT', '1-n', "Image Data Location", 'Retired', 'ImageDataLocation'), -'1000xxx0': ('US', '3', "Escape Triplet", 'Retired', 'EscapeTriplet'), -'1000xxx1': ('US', '3', "Run Length Triplet", 'Retired', 'RunLengthTriplet'), -'1000xxx2': ('US', '1', "Huffman Table Size", 'Retired', 'HuffmanTableSize'), -'1000xxx3': ('US', '3', "Huffman Table Triplet", 'Retired', 'HuffmanTableTriplet'), -'1000xxx4': ('US', '1', "Shift Table Size", 'Retired', 'ShiftTableSize'), -'1000xxx5': ('US', '3', "Shift Table Triplet", 'Retired', 'ShiftTableTriplet'), -'1010xxxx': ('US', '1-n', "Zonal Map", 'Retired', 'ZonalMap'), -'50xx0005': ('US', '1', "Curve Dimensions", 'Retired', 'CurveDimensions'), -'50xx0010': ('US', '1', "Number of Points", 'Retired', 'NumberOfPoints'), -'50xx0020': ('CS', '1', "Type of Data", 'Retired', 'TypeOfData'), -'50xx0022': ('LO', '1', "Curve Description", 'Retired', 'CurveDescription'), -'50xx0030': ('SH', '1-n', "Axis Units", 'Retired', 'AxisUnits'), -'50xx0040': ('SH', '1-n', "Axis Labels", 'Retired', 'AxisLabels'), -'50xx0103': ('US', '1', "Data Value Representation", 'Retired', 'DataValueRepresentation'), -'50xx0104': ('US', '1-n', "Minimum Coordinate Value", 'Retired', 'MinimumCoordinateValue'), -'50xx0105': ('US', '1-n', "Maximum Coordinate Value", 'Retired', 'MaximumCoordinateValue'), -'50xx0106': ('SH', '1-n', "Curve Range", 'Retired', 'CurveRange'), -'50xx0110': ('US', '1-n', "Curve Data Descriptor", 'Retired', 'CurveDataDescriptor'), -'50xx0112': ('US', '1-n', "Coordinate Start Value", 'Retired', 'CoordinateStartValue'), -'50xx0114': ('US', '1-n', "Coordinate Step Value", 'Retired', 'CoordinateStepValue'), -'50xx1001': ('CS', '1', "Curve Activation Layer", 'Retired', 'CurveActivationLayer'), -'50xx2000': ('US', '1', "Audio Type", 'Retired', 'AudioType'), -'50xx2002': ('US', '1', "Audio Sample Format", 'Retired', 'AudioSampleFormat'), -'50xx2004': ('US', '1', "Number of Channels", 'Retired', 'NumberOfChannels'), -'50xx2006': ('UL', '1', "Number of Samples", 'Retired', 'NumberOfSamples'), -'50xx2008': ('UL', '1', "Sample Rate", 'Retired', 'SampleRate'), -'50xx200A': ('UL', '1', "Total Time", 'Retired', 'TotalTime'), -'50xx200C': ('OW or OB', '1', "Audio Sample Data", 'Retired', 'AudioSampleData'), -'50xx200E': ('LT', '1', "Audio Comments", 'Retired', 'AudioComments'), -'50xx2500': ('LO', '1', "Curve Label", 'Retired', 'CurveLabel'), -'50xx2600': ('SQ', '1', "Curve Referenced Overlay Sequence", 'Retired', 'CurveReferencedOverlaySequence'), -'50xx2610': ('US', '1', "Curve Referenced Overlay Group", 'Retired', 'CurveReferencedOverlayGroup'), -'50xx3000': ('OW or OB', '1', "Curve Data", 'Retired', 'CurveData'), -'60xx0010': ('US', '1', "Overlay Rows", '', 'OverlayRows'), -'60xx0011': ('US', '1', "Overlay Columns", '', 'OverlayColumns'), -'60xx0012': ('US', '1', "Overlay Planes", 'Retired', 'OverlayPlanes'), -'60xx0015': ('IS', '1', "Number of Frames in Overlay", '', 'NumberOfFramesInOverlay'), -'60xx0022': ('LO', '1', "Overlay Description", '', 'OverlayDescription'), -'60xx0040': ('CS', '1', "Overlay Type", '', 'OverlayType'), -'60xx0045': ('LO', '1', "Overlay Subtype", '', 'OverlaySubtype'), -'60xx0050': ('SS', '2', "Overlay Origin", '', 'OverlayOrigin'), -'60xx0051': ('US', '1', "Image Frame Origin", '', 'ImageFrameOrigin'), -'60xx0052': ('US', '1', "Overlay Plane Origin", 'Retired', 'OverlayPlaneOrigin'), -'60xx0060': ('CS', '1', "Overlay Compression Code", 'Retired', 'OverlayCompressionCode'), -'60xx0061': ('SH', '1', "Overlay Compression Originator", 'Retired', 'OverlayCompressionOriginator'), -'60xx0062': ('SH', '1', "Overlay Compression Label", 'Retired', 'OverlayCompressionLabel'), -'60xx0063': ('CS', '1', "Overlay Compression Description", 'Retired', 'OverlayCompressionDescription'), -'60xx0066': ('AT', '1-n', "Overlay Compression Step Pointers", 'Retired', 'OverlayCompressionStepPointers'), -'60xx0068': ('US', '1', "Overlay Repeat Interval", 'Retired', 'OverlayRepeatInterval'), -'60xx0069': ('US', '1', "Overlay Bits Grouped", 'Retired', 'OverlayBitsGrouped'), -'60xx0100': ('US', '1', "Overlay Bits Allocated", '', 'OverlayBitsAllocated'), -'60xx0102': ('US', '1', "Overlay Bit Position", '', 'OverlayBitPosition'), -'60xx0110': ('CS', '1', "Overlay Format", 'Retired', 'OverlayFormat'), -'60xx0200': ('US', '1', "Overlay Location", 'Retired', 'OverlayLocation'), -'60xx0800': ('CS', '1-n', "Overlay Code Label", 'Retired', 'OverlayCodeLabel'), -'60xx0802': ('US', '1', "Overlay Number of Tables", 'Retired', 'OverlayNumberOfTables'), -'60xx0803': ('AT', '1-n', "Overlay Code Table Location", 'Retired', 'OverlayCodeTableLocation'), -'60xx0804': ('US', '1', "Overlay Bits For Code Word", 'Retired', 'OverlayBitsForCodeWord'), -'60xx1001': ('CS', '1', "Overlay Activation Layer", '', 'OverlayActivationLayer'), -'60xx1100': ('US', '1', "Overlay Descriptor - Gray", 'Retired', 'OverlayDescriptorGray'), -'60xx1101': ('US', '1', "Overlay Descriptor - Red", 'Retired', 'OverlayDescriptorRed'), -'60xx1102': ('US', '1', "Overlay Descriptor - Green", 'Retired', 'OverlayDescriptorGreen'), -'60xx1103': ('US', '1', "Overlay Descriptor - Blue", 'Retired', 'OverlayDescriptorBlue'), -'60xx1200': ('US', '1-n', "Overlays - Gray", 'Retired', 'OverlaysGray'), -'60xx1201': ('US', '1-n', "Overlays - Red", 'Retired', 'OverlaysRed'), -'60xx1202': ('US', '1-n', "Overlays - Green", 'Retired', 'OverlaysGreen'), -'60xx1203': ('US', '1-n', "Overlays - Blue", 'Retired', 'OverlaysBlue'), -'60xx1301': ('IS', '1', "ROI Area", '', 'ROIArea'), -'60xx1302': ('DS', '1', "ROI Mean", '', 'ROIMean'), -'60xx1303': ('DS', '1', "ROI Standard Deviation", '', 'ROIStandardDeviation'), -'60xx1500': ('LO', '1', "Overlay Label", '', 'OverlayLabel'), -'60xx3000': ('OB or OW', '1', "Overlay Data", '', 'OverlayData'), -'60xx4000': ('LT', '1', "Overlay Comments", 'Retired', 'OverlayComments'), -'7Fxx0010': ('OW or OB', '1', "Variable Pixel Data", 'Retired', 'VariablePixelData'), -'7Fxx0011': ('US', '1', "Variable Next Data Group", 'Retired', 'VariableNextDataGroup'), -'7Fxx0020': ('OW', '1', "Variable Coefficients SDVN", 'Retired', 'VariableCoefficientsSDVN'), -'7Fxx0030': ('OW', '1', "Variable Coefficients SDHN", 'Retired', 'VariableCoefficientsSDHN'), -'7Fxx0040': ('OW', '1', "Variable Coefficients SDDN", 'Retired', 'VariableCoefficientsSDDN')} diff -Nru pydicom-0.9.8/dicom/doc/index.html pydicom-0.9.9/dicom/doc/index.html --- pydicom-0.9.8/dicom/doc/index.html 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/doc/index.html 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ - - -Pydicom - Pure Python package for DICOM files - - -

Pydicom - Pure Python package for DICOM files

-

-Documentation for pydicom is available at the -pydicom googlecode website -

- - \ No newline at end of file diff -Nru pydicom-0.9.8/dicom/encaps.py pydicom-0.9.9/dicom/encaps.py --- pydicom-0.9.8/dicom/encaps.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/encaps.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,72 +0,0 @@ -# encaps.py -"""Routines for working with encapsulated (compressed) data - -""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -# Encapsulated Pixel Data -- 3.5-2008 A.4 -# Encapsulated Pixel data is in a number of Items (start with Item tag (0xFFFE,E000) and ending ultimately with SQ delimiter and Item Length field of 0 (no value), -# just like SQ of undefined length, but here Item must have explicit length. - -# PixelData length is Undefined Length if encapsulated -# First item is an Offset Table. It can have 0 length and no value, or it can have a table of US pointers to first byte of the Item tag starting each *Frame*, -# where 0 of pointer is at first Item tag following the Offset table -# If a single frame, it may be 0 length/no value, or it may have a single pointer (0). -import logging -logger = logging.getLogger('pydicom') - -from dicom.filebase import DicomBytesIO -from dicom.tag import ItemTag, SequenceDelimiterTag - - -def defragment_data(data): - """Read encapsulated data and return one continuous string - - data -- string of encapsulated data, typically dataset.PixelData - Return all fragments concatenated together as a byte string - - If PixelData has multiple frames, then should separate out before calling this routine. - """ - - # Convert data into a memory-mapped file - fp = DicomBytesIO(data) - fp.is_little_endian = True # DICOM standard requires this - BasicOffsetTable = read_item(fp) - seq = [] - while True: - item = read_item(fp) - if not item: # None is returned if get to Sequence Delimiter - break - seq.append(item) - - # XXX should - return "".join(seq) - - -# read_item modeled after filereader.ReadSequenceItem -def read_item(fp): - """Read and return a single Item in the fragmented data stream""" - try: - tag = fp.read_tag() - except EOFError: # already read delimiter before passing data here, so should just run out - return None - if tag == SequenceDelimiterTag: # No more items, time for sequence to stop reading - length = fp.read_UL() - logger.debug("%04x: Sequence Delimiter, length 0x%x", fp.tell() - 8, length) - if length != 0: - logger.warning("Expected 0x00000000 after delimiter, found 0x%x, at data position 0x%x", length, fp.tell() - 4) - return None - if tag != ItemTag: - logger.warning("Expected Item with tag %s at data position 0x%x", ItemTag, fp.tell() - 4) - length = fp.read_UL() - else: - length = fp.read_UL() - logger.debug("%04x: Item, length 0x%x", fp.tell() - 8, length) - - if length == 0xFFFFFFFFL: - raise ValueError("Encapsulated data fragment had Undefined Length at data position 0x%x" % fp.tell() - 4) - item_data = fp.read(length) - return item_data diff -Nru pydicom-0.9.8/dicom/examples/anonymize.py pydicom-0.9.9/dicom/examples/anonymize.py --- pydicom-0.9.8/dicom/examples/anonymize.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/anonymize.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -# anonymize.py -"""Read a dicom file (or directory of files), partially "anonymize" it (them), -by replacing Person names, patient id, optionally remove curves -and private tags, and write result to a new file (directory) -This is an example only; use only as a starting point. -""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# Use at your own risk!! -# Many more items need to be addressed for proper de-identifying DICOM data. -# In particular, note that pixel data could have confidential data "burned in" -# Annex E of PS3.15-2011 DICOM standard document details what must be done to -# fully de-identify DICOM data - -from __future__ import print_function - -usage = """ -Usage: -python anonymize.py dicomfile.dcm outputfile.dcm -OR -python anonymize.py originals_directory anonymized_directory - -Note: Use at your own risk. Does not fully de-identify the DICOM data as per -the DICOM standard, e.g in Annex E of PS3.15-2011. -""" - -import os -import os.path -import dicom - - -def anonymize(filename, output_filename, new_person_name="anonymous", - new_patient_id="id", remove_curves=True, remove_private_tags=True): - """Replace data element values to partly anonymize a DICOM file. - Note: completely anonymizing a DICOM file is very complicated; there - are many things this example code does not address. USE AT YOUR OWN RISK. - """ - - # Define call-back functions for the dataset.walk() function - def PN_callback(ds, data_element): - """Called from the dataset "walk" recursive function for all data elements.""" - if data_element.VR == "PN": - data_element.value = new_person_name - - def curves_callback(ds, data_element): - """Called from the dataset "walk" recursive function for all data elements.""" - if data_element.tag.group & 0xFF00 == 0x5000: - del ds[data_element.tag] - - # Load the current dicom file to 'anonymize' - dataset = dicom.read_file(filename) - - # Remove patient name and any other person names - dataset.walk(PN_callback) - - # Change ID - dataset.PatientID = new_patient_id - - # Remove data elements (should only do so if DICOM type 3 optional) - # Use general loop so easy to add more later - # Could also have done: del ds.OtherPatientIDs, etc. - for name in ['OtherPatientIDs', 'OtherPatientIDsSequence']: - if name in dataset: - delattr(dataset, name) - - # Same as above but for blanking data elements that are type 2. - for name in ['PatientBirthDate']: - if name in dataset: - dataset.data_element(name).value = '' - - # Remove private tags if function argument says to do so. Same for curves - if remove_private_tags: - dataset.remove_private_tags() - if remove_curves: - dataset.walk(curves_callback) - - # write the 'anonymized' DICOM out under the new filename - dataset.save_as(output_filename) - -# Can run as a script: -if __name__ == "__main__": - import sys - if len(sys.argv) != 3: - print(usage) - sys.exit() - arg1, arg2 = sys.argv[1:] - - if os.path.isdir(arg1): - in_dir = arg1 - out_dir = arg2 - if os.path.exists(out_dir): - if not os.path.isdir(out_dir): - raise IOError("Input is directory; output name exists but is not a directory") - else: # out_dir does not exist; create it. - os.makedirs(out_dir) - - filenames = os.listdir(in_dir) - for filename in filenames: - if not os.path.isdir(os.path.join(in_dir, filename)): - print(filename + "...", end='') - anonymize(os.path.join(in_dir, filename), os.path.join(out_dir, filename)) - print("done\r") - else: # first arg not a directory, assume two files given - in_filename = arg1 - out_filename = arg2 - anonymize(in_filename, out_filename) - print() diff -Nru pydicom-0.9.8/dicom/examples/DicomDiff.py pydicom-0.9.9/dicom/examples/DicomDiff.py --- pydicom-0.9.8/dicom/examples/DicomDiff.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/DicomDiff.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -# DicomDiff.py -"""Show the difference between two dicom files. -""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from __future__ import print_function - -usage = """ -Usage: -python DicomDiff.py file1 file2 - -Results printed in python difflib form - indicated by start of each line: -' ' blank means lines the same -'-' means in file1 but "removed" in file2 -'+' means not in file1, but "added" in file2 -('?' lines from difflib removed - no use here) -""" - -import sys -import dicom -import difflib - -# only used as a script -if len(sys.argv) != 3: - print(usage) - sys.exit() - -datasets = dicom.read_file(sys.argv[1]), \ - dicom.read_file(sys.argv[2]) - -# diflib compare functions require a list of lines, each terminated with newline character -# massage the string representation of each dicom dataset into this form: -rep = [] -for dataset in datasets: - lines = str(dataset).split("\n") - lines = [line + "\n" for line in lines] # add the newline to end - rep.append(lines) - - -diff = difflib.Differ() -for line in diff.compare(rep[0], rep[1]): - if line[0] != "?": - print(line) diff -Nru pydicom-0.9.8/dicom/examples/DicomInfo.py pydicom-0.9.9/dicom/examples/DicomInfo.py --- pydicom-0.9.8/dicom/examples/DicomInfo.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/DicomInfo.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,63 +0,0 @@ -# DicomInfo.py -""" -Read a DICOM file and print some or all of its values. - -Usage: python DicomInfo.py imagefile [-v] - --v (optional): Verbose mode, prints all DICOM data elements - -Without the -v option, a few of the most common dicom file -data elements are printed: some info about the patient and about -the image. - -""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from __future__ import print_function - -import sys -import dicom - -# check command line arguments make sense -if not 1 < len(sys.argv) < 4: - print(__doc__) - sys.exit() - -# read the file -filename = sys.argv[1] -dataset = dicom.read_file(filename) - -# Verbose mode: -if len(sys.argv) == 3: - if sys.argv[2] == "-v": # user asked for all info - print(dataset) - else: # unknown command argument - print(__doc__) - sys.exit() - -# Normal mode: -print() -print("Filename.........:", filename) -print("Storage type.....:", dataset.SOPClassUID) -print() - -pat_name = dataset.PatientName -display_name = pat_name.family_name + ", " + pat_name.given_name -print("Patient's name...:", display_name) -print("Patient id.......:", dataset.PatientID) -print("Modality.........:", dataset.Modality) -print("Study Date.......:", dataset.StudyDate) - -if 'PixelData' in dataset: - rows = int(dataset.Rows) - cols = int(dataset.Columns) - print("Image size.......: {rows:d} x {cols:d}, {size:d} bytes".format( - rows=rows, cols=cols, size=len(dataset.PixelData))) - if 'PixelSpacing' in dataset: - print("Pixel spacing....:", dataset.PixelSpacing) - -# use .get() if not sure the item exists, and want a default value if missing -print("Slice location...:", dataset.get('SliceLocation', "(missing)")) diff -Nru pydicom-0.9.8/dicom/examples/dicomtree.py pydicom-0.9.9/dicom/examples/dicomtree.py --- pydicom-0.9.8/dicom/examples/dicomtree.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/dicomtree.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -# dicomtree.py -"""Show a dicom file using a hierarchical tree in a graphical window""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -usage = "Usage: python dicomtree.py dicom_filename" -from dicom.valuerep import PersonNameUnicode - -import Tix - - -def RunTree(w, filename): - top = Tix.Frame(w, relief=Tix.RAISED, bd=1) - tree = Tix.Tree(top, options="hlist.columns 2") - tree.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.LEFT) - # print(tree.hlist.keys()) # use to see the available configure() options - tree.hlist.configure(bg='white', font='Courier 10', indent=30) - tree.hlist.configure(selectbackground='light yellow', gap=150) - - box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) - # box.add('ok', text='Ok', underline=0, command=w.destroy, width=6) - box.add('exit', text='Exit', underline=0, command=w.destroy, width=6) - box.pack(side=Tix.BOTTOM, fill=Tix.X) - top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) - - show_file(filename, tree) - - -def show_file(filename, tree): - tree.hlist.add("root", text=filename) - ds = dicom.read_file(sys.argv[1]) - ds.decode() # change strings to unicode - recurse_tree(tree, ds, "root", False) - tree.autosetmode() - - -def recurse_tree(tree, dataset, parent, hide=False): - # order the dicom tags - for data_element in dataset: - node_id = parent + "." + hex(id(data_element)) - if isinstance(data_element.value, unicode): - tree.hlist.add(node_id, text=unicode(data_element)) - else: - tree.hlist.add(node_id, text=str(data_element)) - if hide: - tree.hlist.hide_entry(node_id) - if data_element.VR == "SQ": # a sequence - for i, dataset in enumerate(data_element.value): - item_id = node_id + "." + str(i + 1) - sq_item_description = data_element.name.replace(" Sequence", "") # XXX not i18n - item_text = "{0:s} {1:d}".format(sq_item_description, i + 1) - tree.hlist.add(item_id, text=item_text) - tree.hlist.hide_entry(item_id) - recurse_tree(tree, dataset, item_id, hide=True) - -if __name__ == '__main__': - import sys - import dicom - if len(sys.argv) != 2: - print("Please supply a dicom file name:\n") - print(usage) - sys.exit(-1) - root = Tix.Tk() - root.geometry("{0:d}x{1:d}+{2:d}+{3:d}".format(800, 600, 0, 0)) - - RunTree(root, sys.argv[1]) - root.mainloop() diff -Nru pydicom-0.9.8/dicom/examples/__init__.py pydicom-0.9.9/dicom/examples/__init__.py --- pydicom-0.9.8/dicom/examples/__init__.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# __init__.py -# Mark the folder as a python package diff -Nru pydicom-0.9.8/dicom/examples/ListBeams.py pydicom-0.9.9/dicom/examples/ListBeams.py --- pydicom-0.9.8/dicom/examples/ListBeams.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/ListBeams.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -# ListBeams.py -"""Given an RTPLAN DICOM file, list basic info for the beams in it -""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from __future__ import print_function -import dicom - -usage = """python ListBeams.py rtplan.dcm""" - - -def ListBeams(plan_dataset): - """Return a string summarizing the RTPLAN beam information in the dataset""" - lines = ["{name:^13s} {num:^8s} {gantry:^8s} {ssd:^11s}".format( - name="Beam name", num="Number", gantry="Gantry", ssd="SSD (cm)")] - for beam in plan_dataset.BeamSequence: - cp0 = beam.ControlPointSequence[0] - SSD = float(cp0.SourcetoSurfaceDistance / 10) - lines.append("{b.BeamName:^13s} {b.BeamNumber:8d} " - "{gantry:8.1f} {ssd:8.1f}".format(b=beam, - gantry=cp0.GantryAngle, ssd=SSD)) - return "\n".join(lines) - -if __name__ == "__main__": - import sys - if len(sys.argv) != 2: - print(usage) - sys.exit(-1) - - rtplan = dicom.read_file(sys.argv[1]) - print(ListBeams(rtplan)) diff -Nru pydicom-0.9.8/dicom/examples/myprint.py pydicom-0.9.9/dicom/examples/myprint.py --- pydicom-0.9.8/dicom/examples/myprint.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/myprint.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -# myprint.py -"""Example of printing a dataset in your own format""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from __future__ import print_function - - -def myprint(dataset, indent=0): - """Go through all items in the dataset and print them with custom format - - Modelled after Dataset._pretty_str() - """ - dont_print = ['Pixel Data', 'File Meta Information Version'] - - indent_string = " " * indent - next_indent_string = " " * (indent + 1) - - for data_element in dataset: - if data_element.VR == "SQ": # a sequence - print(indent_string, data_element.name) - for sequence_item in data_element.value: - myprint(sequence_item, indent + 1) - print(next_indent_string + "---------") - else: - if data_element.name in dont_print: - print("""""") - else: - repr_value = repr(data_element.value) - if len(repr_value) > 50: - repr_value = repr_value[:50] + "..." - print("{0:s} {1:s} = {2:s}".format(indent_string, - data_element.name, repr_value)) - -if __name__ == "__main__": - import dicom - import sys - usage = """Usage: myprint filename""" - if len(sys.argv) != 2: - print(usage) - sys.exit() - - ds = dicom.read_file(sys.argv[1]) - myprint(ds) diff -Nru pydicom-0.9.8/dicom/examples/show_charset_name.py pydicom-0.9.9/dicom/examples/show_charset_name.py --- pydicom-0.9.8/dicom/examples/show_charset_name.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/show_charset_name.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,33 +0,0 @@ -# show_charset_name.py -"""Very simple app to display unicode person names""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import Tkinter -from dicom.valuerep import PersonName, PersonNameUnicode - -default_encoding = 'iso8859' - -root = Tkinter.Tk() -# root.geometry("%dx%d%+d%+d" % (800, 600, 0, 0)) - -person_names = [ - PersonNameUnicode( - """Yamada^Tarou=\033$B;3ED\033(B^\033$BB@O:\033(B=\033$B$d$^$@\033(B^\033$B$?$m$&\033(B""", - [default_encoding, 'iso2022_jp']), # DICOM standard 2008-PS3.5 H.3 p 98 - PersonNameUnicode( - """Wang^XiaoDong=\xcd\xf5\x5e\xd0\xa1\xb6\xab=""", - [default_encoding, 'GB18030']), # DICOM standard 2008-PS3.5 J.3 p 105 - PersonNameUnicode( - """Wang^XiaoDong=\xe7\x8e\x8b\x5e\xe5\xb0\x8f\xe6\x9d\xb1=""", - [default_encoding, 'UTF-8']), # DICOM standard 2008-PS3.5 J.1 p 104 - PersonNameUnicode( - """Hong^Gildong=\033$)C\373\363^\033$)C\321\316\324\327=\033$)C\310\253^\033$)C\261\346\265\277""", - [default_encoding, 'euc_kr']), # DICOM standard 2008-PS3.5 I.2 p 101 - ] -for person_name in person_names: - label = Tkinter.Label(text=person_name) - label.pack() -root.mainloop() diff -Nru pydicom-0.9.8/dicom/examples/write_new.py pydicom-0.9.9/dicom/examples/write_new.py --- pydicom-0.9.8/dicom/examples/write_new.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/examples/write_new.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,69 +0,0 @@ -# write_new.py -"""Simple example of writing 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 -""" -# Copyright (c) 2010-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from __future__ import print_function - -import sys -import os.path -import dicom -from dicom.dataset import Dataset, FileDataset -import dicom.UID - -if __name__ == "__main__": - print("---------------------------- ") - print("write_new.py example program") - print("----------------------------") - print("Demonstration of writing a DICOM file using pydicom") - print("NOTE: this is only a demo. Writing a DICOM standards compliant file") - print("would require official UIDs, and checking the DICOM standard to ensure") - print("that all required data elements were present.") - print() - - if sys.platform.lower().startswith("win"): - filename = r"c:\temp\test.dcm" - filename2 = r"c:\temp\test-explBig.dcm" - else: - homedir = os.path.expanduser("~") - filename = os.path.join(homedir, "test.dcm") - filename2 = os.path.join(homedir, "test-explBig.dcm") - - print("Setting file meta information...") - # Populate required values for file meta information - file_meta = Dataset() - file_meta.MediaStorageSOPClassUID = '1.2.840.10008.5.1.4.1.1.2' # CT Image Storage - file_meta.MediaStorageSOPInstanceUID = "1.2.3" # !! Need valid UID here for real work - file_meta.ImplementationClassUID = "1.2.3.4" # !!! Need valid UIDs here - - print("Setting dataset values...") - - # Create the FileDataset instance (initially no data elements, but file_meta supplied) - ds = FileDataset(filename, {}, file_meta=file_meta, preamble="\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 - - print("Writing test file", filename) - ds.save_as(filename) - print("File saved.") - - # Write as a different transfer syntax - ds.file_meta.TransferSyntaxUID = dicom.UID.ExplicitVRBigEndian # XXX shouldn't need this but pydicom 0.9.5 bug not recognizing transfer syntax - ds.is_little_endian = False - ds.is_implicit_VR = False - - print("Writing test file as Big Endian Explicit VR", filename2) - ds.save_as(filename2) diff -Nru pydicom-0.9.8/dicom/filebase.py pydicom-0.9.9/dicom/filebase.py --- pydicom-0.9.8/dicom/filebase.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/filebase.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,158 +0,0 @@ -# filebase.py -"""Hold DicomFile class, which does basic I/O for a dicom file.""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -from __future__ import absolute_import - -from dicom.tag import Tag -from struct import unpack, pack - -from io import BytesIO -import logging -logger = logging.getLogger('pydicom') - - -class DicomIO(object): - """File object which holds transfer syntax info and anything else we need.""" - - max_read_attempts = 3 # number of times to read if don't get requested bytes - defer_size = None # default - - def __init__(self, *args, **kwargs): - self._implicit_VR = True # start with this by default - - def __del__(self): - self.close() - - def read_le_tag(self): - """Read and return two unsigned shorts (little endian) from the file.""" - bytes_read = self.read(4) - if len(bytes_read) < 4: - raise EOFError # needed for reading "next" tag when at end of file - return unpack(bytes_read, b"HH") - - def write_tag(self, tag): - """Write a dicom tag (two unsigned shorts) to the file.""" - tag = Tag(tag) # make sure is an instance of class, not just a tuple or int - self.write_US(tag.group) - self.write_US(tag.element) - - def read_leUS(self): - """Return an unsigned short from the file with little endian byte order""" - return unpack(b"H", self.read(2))[0] - - def read_leUL(self): - """Return an unsigned long read with little endian byte order""" - return unpack(b"H", val)) - - def write_beUL(self, val): - """Write an unsigned long with big endian byte order""" - self.write(pack(b">L", val)) - - write_US = write_leUS # XXX should we default to this? - write_UL = write_leUL # XXX " - - def read_beUL(self): - """Return an unsigned long read with big endian byte order""" - return unpack(b">L", self.read(4))[0] - - # Set up properties is_little_endian and is_implicit_VR - # Big/Little Endian changes functions to read unsigned short or long, e.g. length fields etc - @property - def is_little_endian(self): - return self._little_endian - - @is_little_endian.setter - def is_little_endian(self, value): - self._little_endian = value - if value: # Little Endian - self.read_US = self.read_leUS - self.read_UL = self.read_leUL - self.write_US = self.write_leUS - self.write_UL = self.write_leUL - self.read_tag = self.read_le_tag - else: # Big Endian - self.read_US = self.read_beUS - self.read_UL = self.read_beUL - self.write_US = self.write_beUS - self.write_UL = self.write_beUL - self.read_tag = self.read_be_tag - - @property - def is_implicit_VR(self): - return self._implicit_VR - - @is_implicit_VR.setter - def is_implicit_VR(self, value): - self._implicit_VR = value - - -class DicomFileLike(DicomIO): - - def __init__(self, file_like_obj): - self.parent = file_like_obj - self.parent_read = file_like_obj.read - self.write = getattr(file_like_obj, "write", self.no_write) - self.seek = file_like_obj.seek - self.tell = file_like_obj.tell - self.close = file_like_obj.close - self.name = getattr(file_like_obj, 'name', '') - - def no_write(self, bytes_read): - """Used for file-like objects where no write is available""" - raise IOError("This DicomFileLike object has no write() method") - - -def DicomFile(*args, **kwargs): - return DicomFileLike(open(*args, **kwargs)) - - -def DicomBytesIO(*args, **kwargs): - return DicomFileLike(BytesIO(*args, **kwargs)) diff -Nru pydicom-0.9.8/dicom/filereader.py pydicom-0.9.9/dicom/filereader.py --- pydicom-0.9.8/dicom/filereader.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/filereader.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,685 +0,0 @@ -# filereader.py -"""Read a dicom media file""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -from __future__ import absolute_import -# Need zlib and io.BytesIO for deflate-compressed file -import os.path -import warnings -import zlib -from io import BytesIO -import logging -from dicom.tag import TupleTag -from dicom.dataelem import RawDataElement -from dicom.util.hexutil import bytes2hex -from dicom.valuerep import extra_length_VRs -from dicom.charset import default_encoding, convert_encodings -from dicom import in_py3 - -logger = logging.getLogger('pydicom') - -stat_available = True -try: - from os import stat -except: - stat_available = False - -from os import SEEK_CUR - -import dicom.UID # for Implicit/Explicit/Little/Big Endian transfer syntax UIDs -from dicom.filebase import DicomFile, DicomFileLike -from dicom.filebase import DicomIO, DicomBytesIO -from dicom.dataset import Dataset, FileDataset -from dicom.datadict import dictionaryVR -from dicom.dataelem import DataElement, DeferredDataElement -from dicom.tag import Tag, ItemTag, ItemDelimiterTag, SequenceDelimiterTag -from dicom.sequence import Sequence -from dicom.misc import size_in_bytes -from dicom.fileutil import absorb_delimiter_item, read_undefined_length_value -from dicom.fileutil import length_of_undefined_length -from struct import Struct, unpack -from sys import byteorder -sys_is_little_endian = (byteorder == 'little') - - -class InvalidDicomError(Exception): - """Exception that is raised when the the file does not seem - to be a valid dicom file. This is the case when the four - characters "DICM" are not present at position 128 in the file. - (According to the dicom specification, each dicom file should - have this.) - - To force reading the file (because maybe it is a dicom file without - a header), use read_file(..., force=True). - """ - def __init__(self, *args): - if not args: - args = ('The specified file is not a valid DICOM file.',) - Exception.__init__(self, *args) - - -class DicomIter(object): - """Iterator over DICOM data elements created from a file-like object - """ - def __init__(self, fp, stop_when=None, force=False): - """Read the preamble and meta info, prepare iterator for remainder - - fp -- an open DicomFileLike object, at start of file - - Adds flags to fp: Big/Little-endian and Implicit/Explicit VR - """ - self.fp = fp - self.stop_when = stop_when - self.preamble = preamble = read_preamble(fp, force) - self.has_header = has_header = (preamble is not None) - self.file_meta_info = Dataset() - if has_header: - self.file_meta_info = file_meta_info = _read_file_meta_info(fp) - transfer_syntax = file_meta_info.TransferSyntaxUID - if transfer_syntax == dicom.UID.ExplicitVRLittleEndian: - self._is_implicit_VR = False - self._is_little_endian = True - elif transfer_syntax == dicom.UID.ImplicitVRLittleEndian: - self._is_implicit_VR = True - self._is_little_endian = True - elif transfer_syntax == dicom.UID.ExplicitVRBigEndian: - self._is_implicit_VR = False - self._is_little_endian = False - elif transfer_syntax == dicom.UID.DeflatedExplicitVRLittleEndian: - # See PS3.6-2008 A.5 (p 71) -- when written, the entire dataset - # following the file metadata was prepared the normal way, - # then "deflate" compression applied. - # All that is needed here is to decompress and then - # use as normal in a file-like object - zipped = fp.read() - # -MAX_WBITS part is from comp.lang.python answer: - # groups.google.com/group/comp.lang.python/msg/e95b3b38a71e6799 - unzipped = zlib.decompress(zipped, -zlib.MAX_WBITS) - fp = BytesIO(unzipped) # a file-like object - self.fp = fp # point to new object - self._is_implicit_VR = False - self._is_little_endian = True - else: - # Any other syntax should be Explicit VR Little Endian, - # e.g. all Encapsulated (JPEG etc) are ExplVR-LE - # by Standard PS 3.5-2008 A.4 (p63) - self._is_implicit_VR = False - self._is_little_endian = True - else: # no header -- make assumptions - fp.TransferSyntaxUID = dicom.UID.ImplicitVRLittleEndian - self._is_little_endian = True - self._is_implicit_VR = True - - impl_expl = ("Explicit", "Implicit")[self._is_implicit_VR] - big_little = ("Big", "Little")[self._is_little_endian] - logger.debug("Using {0:s} VR, {1:s} Endian transfer syntax".format( - impl_expl, big_little)) - - def __iter__(self): - tags = sorted(self.file_meta_info.keys()) - for tag in tags: - yield self.file_meta_info[tag] - - for data_element in data_element_generator(self.fp, - self._is_implicit_VR, self._is_little_endian, - stop_when=self.stop_when): - yield data_element - - -def data_element_generator(fp, is_implicit_VR, is_little_endian, - stop_when=None, defer_size=None, encoding=default_encoding): - """Create a generator to efficiently return the raw data elements - Returns (VR, length, raw_bytes, value_tell, is_little_endian), - where: - VR -- None if implicit VR, otherwise the VR read from the file - length -- the length as in the DICOM data element (could be - DICOM "undefined length" 0xffffffffL), - value_bytes -- the raw bytes from the DICOM file - (not parsed into python types) - is_little_endian -- True if transfer syntax is little endian; else False - """ - # Summary of DICOM standard PS3.5-2008 chapter 7: - # If Implicit VR, data element is: - # tag, 4-byte length, value. - # The 4-byte length can be FFFFFFFF (undefined length)* - # If Explicit VR: - # if OB, OW, OF, SQ, UN, or UT: - # tag, VR, 2-bytes reserved (both zero), 4-byte length, value - # For all but UT, the length can be FFFFFFFF (undefined length)* - # else: (any other VR) - # tag, VR, (2 byte length), value - # * for undefined length, a Sequence Delimitation Item marks the end - # of the Value Field. - # Note, except for the special_VRs, both impl and expl VR use 8 bytes; - # the special VRs follow the 8 bytes with a 4-byte length - - # With a generator, state is stored, so we can break down - # into the individual cases, and not have to check them again for each - # data element - - if is_little_endian: - endian_chr = "<" - else: - endian_chr = ">" - if is_implicit_VR: - element_struct = Struct(endian_chr + "HHL") - else: # Explicit VR - # tag, VR, 2-byte length (or 0 if special VRs) - element_struct = Struct(endian_chr + "HH2sH") - extra_length_struct = Struct(endian_chr + "L") # for special VRs - extra_length_unpack = extra_length_struct.unpack # for lookup speed - - # Make local variables so have faster lookup - fp_read = fp.read - fp_tell = fp.tell - logger_debug = logger.debug - debugging = dicom.debugging - element_struct_unpack = element_struct.unpack - - while True: - # Read tag, VR, length, get ready to read value - bytes_read = fp_read(8) - if len(bytes_read) < 8: - raise StopIteration # at end of file - if debugging: - debug_msg = "{0:08x}: {1}".format(fp.tell() - 8, - bytes2hex(bytes_read)) - - if is_implicit_VR: - # must reset VR each time; could have set last iteration (e.g. SQ) - VR = None - group, elem, length = element_struct_unpack(bytes_read) - else: # explicit VR - group, elem, VR, length = element_struct_unpack(bytes_read) - if in_py3: - VR = VR.decode(default_encoding) - if VR in extra_length_VRs: - bytes_read = fp_read(4) - length = extra_length_unpack(bytes_read)[0] - if debugging: - debug_msg += " " + bytes2hex(bytes_read) - if debugging: - debug_msg = "%-47s (%04x, %04x)" % (debug_msg, group, elem) - if not is_implicit_VR: - debug_msg += " %s " % VR - if length != 0xFFFFFFFFL: - debug_msg += "Length: %d" % length - else: - debug_msg += "Length: Undefined length (FFFFFFFF)" - logger_debug(debug_msg) - - # Positioned to read the value, but may not want to -- check stop_when - value_tell = fp_tell() - tag = TupleTag((group, elem)) - if stop_when is not None: - # XXX VR may be None here!! Should stop_when just take tag? - if stop_when(tag, VR, length): - if debugging: - logger_debug("Reading ended by stop_when callback. " - "Rewinding to start of data element.") - rewind_length = 8 - if not is_implicit_VR and VR in extra_length_VRs: - rewind_length += 4 - fp.seek(value_tell - rewind_length) - raise StopIteration - - # Reading the value - # First case (most common): reading a value with a defined length - if length != 0xFFFFFFFFL: - if defer_size is not None and length > defer_size: - # Flag as deferred by setting value to None, and skip bytes - value = None - logger_debug("Defer size exceeded." - "Skipping forward to next data element.") - fp.seek(fp_tell() + length) - else: - value = fp_read(length) - if debugging: - dotdot = " " - if length > 12: - dotdot = "..." - logger_debug("%08x: %-34s %s %r %s" % (value_tell, - bytes2hex(value[:12]), dotdot, value[:12], dotdot)) - - # If the tag is (0008,0005) Specific Character Set, then store it - if tag == (0x08, 0x05): - from dicom.values import convert_string - encoding = convert_string(value, is_little_endian, encoding=default_encoding) - # Store the encoding value in the generator for use with future elements (SQs) - encoding = convert_encodings(encoding) - - yield RawDataElement(tag, VR, length, value, value_tell, - is_implicit_VR, is_little_endian) - - # Second case: undefined length - must seek to delimiter, - # unless is SQ type, in which case is easier to parse it, because - # undefined length SQs and items of undefined lengths can be nested - # and it would be error-prone to read to the correct outer delimiter - else: - # Try to look up type to see if is a SQ - # if private tag, won't be able to look it up in dictionary, - # in which case just ignore it and read the bytes unless it is - # identified as a Sequence - if VR is None: - try: - VR = dictionaryVR(tag) - except KeyError: - # Look ahead to see if it consists of items and is thus a SQ - next_tag = TupleTag(unpack(endian_chr + "HH", fp_read(4))) - # Rewind the file - fp.seek(fp_tell() - 4) - if next_tag == ItemTag: - VR = 'SQ' - - if VR == 'SQ': - if debugging: - msg = "{0:08x}: Reading/parsing undefined length sequence" - logger_debug(msg.format(fp_tell())) - seq = read_sequence(fp, is_implicit_VR, - is_little_endian, length, encoding) - yield DataElement(tag, VR, seq, value_tell, - is_undefined_length=True) - else: - delimiter = SequenceDelimiterTag - if debugging: - logger_debug("Reading undefined length data element") - value = read_undefined_length_value(fp, is_little_endian, - delimiter, defer_size) - - # If the tag is (0008,0005) Specific Character Set, then store it - if tag == (0x08, 0x05): - from dicom.values import convert_string - encoding = convert_string(value, is_little_endian, encoding=default_encoding) - # Store the encoding value in the generator for use with future elements (SQs) - encoding = convert_encodings(encoding) - - yield RawDataElement(tag, VR, length, value, value_tell, - is_implicit_VR, is_little_endian) - - -def read_dataset(fp, is_implicit_VR, is_little_endian, bytelength=None, - stop_when=None, defer_size=None, parent_encoding=default_encoding): - """Return a Dataset instance containing the next dataset in the file. - :param fp: an opened file object - :param is_implicit_VR: True if file transfer syntax is implicit VR - :param is_little_endian: True if file has little endian transfer syntax - :param bytelength: None to read until end of file or ItemDeliterTag, else - a fixed number of bytes to read - :param stop_when: optional call_back function which can terminate reading. - See help for data_element_generator for details - :param defer_size: optional size to avoid loading large elements in memory. - See help for data_element_generator for details - :param parent_encoding: optional encoding to use as a default in case - a Specific Character Set (0008,0005) isn't specified - :returns: a Dataset instance - """ - raw_data_elements = dict() - fpStart = fp.tell() - de_gen = data_element_generator(fp, is_implicit_VR, is_little_endian, - stop_when, defer_size, parent_encoding) - try: - while (bytelength is None) or (fp.tell() - fpStart < bytelength): - raw_data_element = next(de_gen) - # Read data elements. Stop on some errors, but return what was read - tag = raw_data_element.tag - # Check for ItemDelimiterTag --dataset is an item in a sequence - if tag == (0xFFFE, 0xE00D): - break - raw_data_elements[tag] = raw_data_element - except StopIteration: - pass - except EOFError as details: - # XXX is this error visible enough to user code with just logging? - logger.error(str(details) + " in file " + - getattr(fp, "name", "")) - except NotImplementedError as details: - logger.error(details) - - return Dataset(raw_data_elements) - - -def read_sequence(fp, is_implicit_VR, is_little_endian, bytelength, encoding, offset=0): - """Read and return a Sequence -- i.e. a list of Datasets""" - seq = [] # use builtin list to start for speed, convert to Sequence at end - is_undefined_length = False - if bytelength != 0: # SQ of length 0 possible (PS 3.5-2008 7.5.1a (p.40) - if bytelength == 0xffffffffL: - is_undefined_length = True - bytelength = None - fp_tell = fp.tell # for speed in loop - fpStart = fp_tell() - while (not bytelength) or (fp_tell() - fpStart < bytelength): - file_tell = fp.tell() - dataset = read_sequence_item(fp, is_implicit_VR, is_little_endian, encoding) - if dataset is None: # None is returned if hit Sequence Delimiter - break - dataset.file_tell = file_tell + offset - seq.append(dataset) - seq = Sequence(seq) - seq.is_undefined_length = is_undefined_length - return seq - - -def read_sequence_item(fp, is_implicit_VR, is_little_endian, encoding): - """Read and return a single sequence item, i.e. a Dataset""" - if is_little_endian: - tag_length_format = "HH" - bytes_to_find = pack(bytes_format, delimiter_tag.group, delimiter_tag.elem) - - found = False - EOF = False - value_chunks = [] - byte_count = 0 # for defer_size checks - while not found: - chunk_start = fp.tell() - bytes_read = fp.read(read_size) - if len(bytes_read) < read_size: - # try again - if still don't get required amount, this is last block - new_bytes = fp.read(read_size - len(bytes_read)) - bytes_read += new_bytes - if len(bytes_read) < read_size: - EOF = True # but will still check whatever we did get - index = bytes_read.find(bytes_to_find) - if index != -1: - found = True - new_bytes = bytes_read[:index] - byte_count += len(new_bytes) - if defer_size is None or byte_count < defer_size: - value_chunks.append(bytes_read[:index]) - fp.seek(chunk_start + index + 4) # rewind to end of delimiter - length = fp.read(4) - if length != b"\0\0\0\0": - msg = "Expected 4 zero bytes after undefined length delimiter at pos {0:04x}" - logger.error(msg.format(fp.tell() - 4)) - elif EOF: - fp.seek(data_start) - raise EOFError("End of file reached before delimiter {0!r} found".format(delimiter_tag)) - else: - fp.seek(fp.tell() - search_rewind) # rewind a bit in case delimiter crossed read_size boundary - # accumulate the bytes read (not including the rewind) - new_bytes = bytes_read[:-search_rewind] - byte_count += len(new_bytes) - if defer_size is None or byte_count < defer_size: - value_chunks.append(new_bytes) - # if get here then have found the byte string - if defer_size is not None and defer_size >= defer_size: - return None - else: - return b"".join(value_chunks) - - -def find_delimiter(fp, delimiter, is_little_endian, read_size=128, rewind=True): - """Return file position where 4-byte delimiter is located. - - Return None if reach end of file without finding the delimiter. - On return, file position will be where it was before this function, - unless rewind argument is False. - - """ - struct_format = ".is_undefined_length_sequence_item -- for datasets that belong to a - sequence, write the undefined length delimiters if that is - what the original had - Set WriteLikeOriginal = False to produce a "nicer" DICOM file for other readers, - where all lengths are explicit. - """ - - # Decide whether to write DICOM preamble. Should always do so unless trying to mimic the original file read in - preamble = getattr(dataset, "preamble", None) - if not preamble and not WriteLikeOriginal: - preamble = b"\0" * 128 - file_meta = dataset.file_meta - if file_meta is None: - file_meta = Dataset() - if 'TransferSyntaxUID' not in file_meta: - if dataset.is_little_endian and dataset.is_implicit_VR: - file_meta.add_new((2, 0x10), 'UI', ImplicitVRLittleEndian) - elif dataset.is_little_endian and not dataset.is_implicit_VR: - file_meta.add_new((2, 0x10), 'UI', ExplicitVRLittleEndian) - elif not dataset.is_little_endian and not dataset.is_implicit_VR: - file_meta.add_new((2, 0x10), 'UI', ExplicitVRBigEndian) - else: - raise NotImplementedError("pydicom has not been verified for Big Endian with Implicit VR") - - fp = DicomFile(filename, 'wb') - try: - if preamble: - fp.write(preamble) # blank 128 byte preamble - _write_file_meta_info(fp, file_meta) - - # Set file VR, endian. MUST BE AFTER writing META INFO (which changes to Explict LittleEndian) - fp.is_implicit_VR = dataset.is_implicit_VR - fp.is_little_endian = dataset.is_little_endian - - write_dataset(fp, dataset) - finally: - fp.close() - -# Map each VR to a function which can write it -# for write_numbers, the Writer maps to a tuple (function, struct_format) -# (struct_format is python's struct module format) -writers = {'UL': (write_numbers, 'L'), 'SL': (write_numbers, 'l'), - 'US': (write_numbers, 'H'), 'SS': (write_numbers, 'h'), - 'FL': (write_numbers, 'f'), 'FD': (write_numbers, 'd'), - 'OF': (write_numbers, 'f'), - 'OB': write_OBvalue, 'UI': write_UI, - 'SH': write_string, 'DA': write_string, 'TM': write_string, - 'CS': write_string, 'PN': write_PN, 'LO': write_string, - 'IS': write_number_string, 'DS': write_number_string, 'AE': write_string, - 'AS': write_string, - 'LT': write_string, - 'SQ': write_sequence, - 'UN': write_UN, - 'AT': write_ATvalue, - 'ST': write_string, - 'OW': write_OWvalue, - 'US or SS': write_OWvalue, - 'OW/OB': write_OBvalue, - 'OB/OW': write_OBvalue, - 'OB or OW': write_OBvalue, - 'OW or OB': write_OBvalue, - 'DT': write_string, - 'UT': write_string, - } # note OW/OB depends on other items, which we don't know at write time diff -Nru pydicom-0.9.8/dicom/__init__.py pydicom-0.9.9/dicom/__init__.py --- pydicom-0.9.8/dicom/__init__.py 2013-01-20 00:37:32.000000000 +0000 +++ pydicom-0.9.9/dicom/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -# __init__.py for Dicom package -"""pydicom package -- easily handle DICOM files. See Quick Start below. - -Copyright (c) 2008-2012 Darcy Mason -This file is part of pydicom, released under a modified MIT license. - See the file license.txt included with this distribution, also - available at http://pydicom.googlecode.com - ------------ -Quick Start ------------ -1. A simple program to read a dicom file, modify a value, and write to a new file:: - import dicom - dataset = dicom.read_file("file1.dcm") - dataset.PatientName = 'anonymous' - dataset.save_as("file2.dcm") - -2. See the files in the examples directory that came with this package for more -examples, including some interactive sessions. - -3. Learn the methods of the Dataset class; that is the one you will -work with most directly. - -4. Questions/comments etc can be directed to the pydicom google group at -http://groups.google.com/group/pydicom -""" - -import sys -if sys.version_info < (2, 6, 0): - raise ImportError("pydicom > 0.9.7 requires python 2.6 or later") -in_py3 = sys.version_info[0] > 2 - -# Set up logging system for the whole package. -# In each module, set logger=logging.getLogger('pydicom') and the same instance -# will be used by all -# At command line, turn on debugging for all pydicom functions with: -# import dicom -# dicom.debug() -# Turn off debugging with -# dicom.debug(False) -import logging - - -def debug(debug_on=True): - """Turn debugging of DICOM file reading and writing on or off. - When debugging is on, file location and details about the elements read at - that location are logged to the 'pydicom' logger using python's logging module. - - :param debug_on: True (default) to turn on debugging, False to turn off. - """ - global logger, debugging - if debug_on: - logger.setLevel(logging.DEBUG) - debugging = True - else: - logger.setLevel(logging.WARNING) - debugging = False - -logger = logging.getLogger('pydicom') -handler = logging.StreamHandler() -# formatter = logging.Formatter("%(asctime)s %(levelname)s: %(message)s", "%Y-%m-%d %H:%M") #'%(asctime)s %(levelname)s %(message)s' -formatter = logging.Formatter("%(message)s") -handler.setFormatter(formatter) -logger.addHandler(handler) -debug(False) # force level=WARNING, in case logging default is set differently (issue 102) - -# For convenience, import the read_file and write_file functions (most used) -# into the "dicom" namespace. -from dicom.filereader import read_file -from dicom.filewriter import write_file - -__version__ = "0.9.8" -__version_info__ = (0, 9, 8) diff -Nru pydicom-0.9.8/dicom/misc.py pydicom-0.9.9/dicom/misc.py --- pydicom-0.9.8/dicom/misc.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/misc.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,22 +0,0 @@ -# misc.py -"""Miscellaneous helper functions""" -# Copyright (c) 2009 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -_size_factors = dict(KB=1024, MB=1024 * 1024, GB=1024 * 1024 * 1024) - - -def size_in_bytes(expr): - """Return the number of bytes for a defer_size argument to read_file() - """ - try: - return int(expr) - except ValueError: - unit = expr[-2:].upper() - if unit in _size_factors.keys(): - val = float(expr[:-2]) * _size_factors[unit] - return val - else: - raise ValueError("Unable to parse length with unit '{0:s}'".format(unit)) diff -Nru pydicom-0.9.8/dicom/multival.py pydicom-0.9.9/dicom/multival.py --- pydicom-0.9.8/dicom/multival.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/multival.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -# multival.py -"""Code for multi-value data elements values, or any list of items that -must all be the same type. -""" -# Copyright (c) 2009-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT-style license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# - - -class MultiValue(list): - """Class to hold any multi-valued DICOM value, or any list of items - that are all of the same type. - - This class enforces that any items added to the list are of the correct type, - by calling the constructor on any items that are added. Therefore, the - constructor must behave nicely if passed an object that is already its type. - The constructor should raise TypeError if the item cannot be converted. - - Note, however, that DS and IS types can be a blank string '' rather - than an instance of their classes. - """ - - def __init__(self, type_constructor, iterable): - """Initialize the list of values - - :param type_constructor: a constructor for the required type for all list - items. Could be the class, or a factory function. - For DICOM mult-value data elements, this will be the - class or type corresponding to the VR. - :param iterable: an iterable (e.g. list, tuple) of items to initialize - the MultiValue list - """ - from dicom.valuerep import DSfloat, DSdecimal, IS - self.type_constructor = type_constructor - if isinstance(type_constructor, (DSfloat, IS, DSdecimal)): - converted_list = [type_constructor(x) if x != '' - else x for x in iterable] - else: - converted_list = [type_constructor(x) for x in iterable] - super(MultiValue, self).__init__(converted_list) - - def append(self, val): - super(MultiValue, self).append(self.type_constructor(val)) - - def extend(self, list_of_vals): - super(MultiValue, self).extend((self.type_constructor(x) for x in list_of_vals)) - - def insert(self, position, val): - super(MultiValue, self).insert(position, self.type_constructor(val)) - - def __setitem__(self, i, val): - """Set an item of the list, making sure it is of the right VR type""" - if isinstance(i, slice): - val = [self.type_constructor(x) for x in val] - else: - val = self.type_constructor(val) - super(MultiValue, self).__setitem__(i, val) - - def __str__(self): - lines = [str(x) for x in self] - return "['" + "', '".join(lines) + "']" - __repr__ = __str__ diff -Nru pydicom-0.9.8/dicom/_private_dict.py pydicom-0.9.9/dicom/_private_dict.py --- pydicom-0.9.8/dicom/_private_dict.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/_private_dict.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,13806 +0,0 @@ -# _private_dict.py -# This file is autogenerated by "make_private_dict_alt.py", -# from private elements list maintained by the GDCM project -# (http://gdcm.svn.sf.net/viewvc/gdcm/trunk/Source/DataDictionary/privatedicts.xml). -# Downloaded on 2010-01-22. -# See the license.txt file for license information on pydicom, and GDCM. - -# This is a dictionary of DICOM dictionaries. -# The outer dictionary key is the Private Creator name ("owner"), -# the inner dictionary is a map of DICOM tag to -# (VR, type, name, is_retired) - -private_dictionaries = \ -{'1.2.840.113663.1': {'0029xx00': ('US', '1', 'Unknown', ''), - '0029xx01': ('US', '1', 'Unknown', '')}, - '1.2.840.113681': {'0019xx10': ('ST', '1', 'CR Image Params Common', ''), - '0019xx11': ('ST', '1', 'CR Image IP Params Single', ''), - '0019xx12': ('ST', '1', 'CR Image IP Params Left', ''), - '0019xx13': ('ST', '1', 'CR Image IP Params Right', '')}, - '1.2.840.113708.794.1.1.2.0': {'0087xx10': ('CS', '1', 'Media Type', ''), - '0087xx20': ('CS', '1', 'Media Location', ''), - '0087xx30': ('ST', - '1', - 'Storage File ID', - ''), - '0087xx40': ('DS', - '1', - 'Study or Image Size in MB', - ''), - '0087xx50': ('IS', - '1', - 'Estimated Retrieve Time', - '')}, - '2.16.840.1.114059.1.1.6.1.50.1': {'0029xx20': ('LT', - '1', - 'Description', - ''), - '0029xx21': ('ST', - '1', - 'Orientation', - ''), - '0029xx22': ('ST', - '1', - 'Parameter 1', - ''), - '0029xx23': ('ST', - '1', - 'Parameter 2', - ''), - '0029xx24': ('LO', '1', 'Teeth', ''), - '0029xx25': ('LO', '1', 'Jaw', ''), - '0029xx26': ('LO', '1', 'Quadrant', ''), - '0029xx27': ('LO', '1', 'CRC', '')}, - 'A.L.I. Technologies, Inc.': {'3711xx01': ('LO', '1', 'Filename', ''), - '3711xx02': ('OB', - '1', - 'Data Blob of a Visit', - ''), - '3711xx03': ('US', '1', 'Revision Number', ''), - '3711xx04': ('UL', '1', 'Unix Timestamp', ''), - '3711xx05': ('IS', '1', 'Bag ID', ''), - '3711xx0c': ('UI', - '1', - 'Original Study UID', - ''), - '3711xx0d': ('US', - '1', - 'Overlay Grayscale Value', - ''), - '3711xx0e': ('CS', - '1', - 'Anonymization Status', - '')}, - 'ACUSON': {'0009xx00': ('IS', '1', 'Unknown', ''), - '0009xx01': ('IS', '1', 'Unknown', ''), - '0009xx02': ('UN', '1', 'Unknown', ''), - '0009xx03': ('UN', '1', 'Unknown', ''), - '0009xx04': ('UN', '1', 'Unknown', ''), - '0009xx05': ('UN', '1', 'Unknown', ''), - '0009xx06': ('UN', '1', 'Unknown', ''), - '0009xx07': ('UN', '1', 'Unknown', ''), - '0009xx08': ('LT', '1', 'Unknown', ''), - '0009xx09': ('LT', '1', 'Unknown', ''), - '0009xx0a': ('IS', '1', 'Unknown', ''), - '0009xx0b': ('IS', '1', 'Unknown', ''), - '0009xx0c': ('IS', '1', 'Unknown', ''), - '0009xx0d': ('IS', '1', 'Unknown', ''), - '0009xx0e': ('IS', '1', 'Unknown', ''), - '0009xx0f': ('UN', '1', 'Unknown', ''), - '0009xx10': ('IS', '1', 'Unknown', ''), - '0009xx11': ('UN', '1', 'Unknown', ''), - '0009xx12': ('IS', '1', 'Unknown', ''), - '0009xx13': ('IS', '1', 'Unknown', ''), - '0009xx14': ('LT', '1', 'Unknown', ''), - '0009xx15': ('UN', '1', 'Unknown', '')}, - 'ACUSON: 1.2.840.11386.1.0': {'7fdfxx00': ('IS', - '1', - 'Lossy Compression Ratio', - ''), - '7fdfxx01': ('US', '1', 'Image Format', ''), - '7fdfxx02': ('US', - '1', - 'Acuson Region Type', - ''), - '7fdfxx0b': ('UL', - '1', - 'Acuson Image Apex X', - ''), - '7fdfxx0c': ('UL', - '1', - 'Acuson Image Apex Y', - ''), - '7fdfxx0d': ('IS', '1', 'B-Color-On Flag', '')}, - 'ACUSON:1.2.840.113680.1.0:0921': {'0009xx20': ('UN', '1', 'View Name', ''), - '0009xx2a': ('UN', '1', 'View List', '')}, - 'ACUSON:1.2.840.113680.1.0:7f10': {'7fdfxx00': ('UN', - '1', - 'Lossy Compression Ratio', - ''), - '7fdfxx01': ('UN', - '1', - 'Image Format', - ''), - '7fdfxx02': ('UN', - '1', - 'Acuson Region Type', - ''), - '7fdfxx0b': ('UN', - '1', - 'Acuson Image Apex X', - ''), - '7fdfxx0c': ('UN', - '1', - 'Acuson Image Apex Y', - ''), - '7fdfxx0d': ('UN', - '1', - 'B-Color-On Flag', - ''), - '7fdfxx0e': ('UN', - '1', - 'Acuson Mechanical Apex X', - ''), - '7fdfxx0f': ('UN', - '1', - 'Acuson Mechanical Apex Y', - ''), - '7fdfxx10': ('UN', - '1', - 'Acquisition Type:', - ''), - '7fdfxx18': ('UN', - '1', - 'Transformation Matrix Sequence', - ''), - '7fdfxx20': ('UN', '1', 'Left angle', ''), - '7fdfxx22': ('UN', - '1', - 'Right angle', - ''), - '7fdfxx24': ('UN', - '1', - 'Color Map Family', - ''), - '7fdfxx25': ('UN', - '1', - 'Full Colormap.', - ''), - '7fdfxx26': ('UN', - '1', - 'Color Invert', - ''), - '7fdfxx27': ('UN', - '1', - 'Color Baseline', - ''), - '7fdfxx28': ('UN', - '1', - 'CD Color Mix Points X1', - ''), - '7fdfxx29': ('UN', - '1', - 'CD Color Mix Points Y1', - ''), - '7fdfxx2a': ('UN', - '1', - 'CD Color Mix Points X2', - ''), - '7fdfxx2b': ('UN', - '1', - 'CD Color Mix Points Y2', - ''), - '7fdfxx2c': ('UN', - '1', - 'Color Accent', - ''), - '7fdfxx30': ('UN', - '1', - 'Persistence SQ', - ''), - '7fdfxx31': ('UN', - '1', - 'Persistence Mode', - ''), - '7fdfxx32': ('UN', - '1', - 'Persistence Coefficient Mode', - ''), - '7fdfxx33': ('UN', - '1', - 'Alpha coefficient', - ''), - '7fdfxx34': ('UN', - '1', - 'Gamma coefficient', - ''), - '7fdfxx35': ('UN', - '1', - 'Persistence Time Flag', - ''), - '7fdfxx36': ('UN', - '1', - 'Persistence adaptive flag', - ''), - '7fdfxx37': ('UN', - '1', - 'Persistence Frame Rate', - ''), - '7fdfxx38': ('UN', - '1', - 'Persistence ID', - ''), - '7fdfxx40': ('UN', - '1', - 'Observation Date Time SQ', - ''), - '7fdfxx50': ('UN', - '1', - 'Capture Type Name', - ''), - '7fdfxx52': ('UN', - '1', - 'Capture Type Number', - ''), - '7fdfxx54': ('UN', - '1', - 'Number of Capture Types', - ''), - '7fdfxx60': ('UN', - '1', - 'CD Steering Angle', - ''), - '7fdfxx61': ('UN', '1', 'CD PRI', ''), - '7fdfxx62': ('UN', - '1', - 'CD Dynamic Range', - ''), - '7fdfxx63': ('UN', - '1', - 'CD Velocity Scale Min', - ''), - '7fdfxx64': ('UN', - '1', - 'CD Velocity Scale Max', - ''), - '7fdfxx65': ('UN', - '1', - 'CD Color Mode', - ''), - '7fdfxx66': ('UN', - '1', - 'CD Frequency', - ''), - '7fdfxx67': ('UN', '1', 'CD Balance', ''), - '7fdfxx68': ('UN', '1', 'CD Delta', ''), - '7fdfxx69': ('UN', - '1', - 'CD Pan Box Min X0', - ''), - '7fdfxx6a': ('UN', - '1', - 'CD Pan Box Min Y0', - ''), - '7fdfxx6b': ('UN', - '1', - 'CD Pan Box Min X1', - ''), - '7fdfxx6c': ('UN', - '1', - 'CD Pan Box Min Y1', - ''), - '7fdfxx6d': ('UN', - '1', - 'CPS Map Type', - ''), - '7fdfxx6e': ('UN', - '1', - 'CPS Map Data', - ''), - '7fdfxx6f': ('UN', - '1', - 'CPS Balance Setting', - ''), - '7fdfxx70': ('UN', - '1', - '3DCard Step Angle', - ''), - '7fdfxx71': ('UN', - '1', - '3DCard Xdcr Angle', - ''), - '7fdfxx72': ('UN', - '1', - 'B-mode Frequency', - ''), - '7fdfxx73': ('UN', - '1', - 'B-mode Dynamic Range', - ''), - '7fdfxx74': ('UN', - '1', - 'B-mode Frame Rate', - ''), - '7fdfxx75': ('UN', - '1', - 'B-mode Space Time', - ''), - '7fdfxx76': ('UN', - '1', - 'B-mode Persistence', - ''), - '7fdfxx77': ('UN', - '1', - 'B-mode Display Depth Start', - ''), - '7fdfxx78': ('UN', - '1', - 'B-mode Display Depth End', - ''), - '7fdfxx79': ('UN', - '1', - 'B-mode Res Mode', - ''), - '7fdfxx7a': ('UN', - '1', - 'B-mode Preset Application', - ''), - '7fdfxx7b': ('UN', - '1', - 'Image Spec Name', - ''), - '7fdfxx7c': ('UN', - '1', - 'B Preset Image Look', - ''), - '7fdfxx7d': ('UN', - '1', - 'B-mode Post Processing', - ''), - '7fdfxx7e': ('UN', '1', 'B Edge', ''), - '7fdfxx7f': ('UN', '1', 'B Delta', ''), - '7fdfxx80': ('UN', - '1', - 'B-mode 1D Post Processing Curve', - ''), - '7fdfxx81': ('UN', - '1', - 'B-mode Delta (ECRI) Map Diagonal', - ''), - '7fdfxx82': ('UN', - '1', - 'Bytes Per Timestamp', - ''), - '7fdfxx83': ('UN', - '1', - 'Microseconds in unit timestamp', - ''), - '7fdfxx84': ('UN', - '1', - 'Start Stopwatch Timestamp', - ''), - '7fdfxx85': ('UN', - '1', - 'Acoustic Frame Timestamp', - ''), - '7fdfxx86': ('UN', - '1', - 'R-Wave Timestamp', - ''), - '7fdfxx87': ('UN', - '1', - 'Last Destruction Timestamp', - ''), - '7fdfxx88': ('UN', - '1', - 'Pixels Per Second', - ''), - '7fdfxx89': ('UN', - '1', - 'ECG Reference Timestamp', - ''), - '7fdfxx8a': ('UN', - '1', - 'ECG Sampling Interval (milliseconds)', - ''), - '7fdfxx8b': ('UN', - '1', - 'ECG Sample Count', - ''), - '7fdfxx8c': ('UN', - '1', - 'ECG Sample Size', - ''), - '7fdfxx8d': ('UN', - '1', - 'ECG Data Value', - ''), - '7fdfxx8e': ('UN', - '1', - 'Contrast/Active Image Indicator', - ''), - '7fdfxx8f': ('UN', - '1', - 'Live Dual Mode Indicator', - ''), - '7fdfxx90': ('UN', - '1', - '3DCard Clipset ID', - ''), - '7fdfxx91': ('UN', - '1', - '3DCard HRWave Min', - ''), - '7fdfxx92': ('UN', - '1', - '3DCard HRWave Max', - ''), - '7fdfxx93': ('UN', - '1', - 'Perspective Capture Type', - ''), - '7fdfxxf1': ('UN', - '1', - 'Trigger Mask.', - ''), - '7fdfxxf2': ('UN', - '1', - 'Study Directory', - ''), - '7fdfxxf3': ('UN', - '1', - 'Last Modify Date', - ''), - '7fdfxxf4': ('UN', - '1', - 'Last Modify Time', - ''), - '7fdfxxf5': ('UN', - '1', - 'Teaching Study', - ''), - '7fdfxxf6': ('UN', - '1', - 'Series Base UID', - '')}, - 'ACUSON:1.2.840.113680.1.0:7ffe': {'7fdfxx00': ('UN', - '1', - 'Data Padding', - '')}, - 'ADAC_IMG': {'0019xx02': ('IS', '1', 'Ver200 ADAC Pegasys File Size', ''), - '0019xx10': ('LO', '2', 'ADAC Header Signature', ''), - '0019xx11': ('US', '1', 'Number of ADAC Headers', ''), - '0019xx12': ('IS', '1-n', 'ADAC Header/Image Sizes', ''), - '0019xx20': ('OB', '1', 'ADAC Pegasys Headers', ''), - '0019xx21': ('US', '1', 'Ver200 Number of ADAC Headers', ''), - '0019xx41': ('IS', '1-n', 'Ver200 ADAC Header/Image Size', ''), - '0019xx61': ('OB', '1', 'Ver200 ADAC Pegasys Headers', ''), - '7043xx00': ('SH', '1', 'Cardiac Stress State', ''), - '7043xx10': ('LO', '1', 'Philips NM Private Group', '')}, - 'AEGIS_DICOM_2.00': {'0003xx00': ('US', '1-n', 'Unknown', ''), - '0005xx00': ('US', '1-n', 'Unknown', ''), - '0009xx00': ('US', '1-n', 'Unknown', ''), - '0019xx00': ('US', '1-n', 'Unknown', ''), - '0029xx00': ('US', '1-n', 'Unknown', ''), - '1369xx00': ('US', '1-n', 'Unknown', '')}, - 'AGFA': {'0009xx10': ('LO', '1', 'Unknown', ''), - '0009xx11': ('LO', '1', 'Unknown', ''), - '0009xx13': ('LO', '1', 'Unknown', ''), - '0009xx14': ('LO', '1', 'Unknown', ''), - '0009xx15': ('LO', '1', 'Unknown', ''), - '0019xx10': ('SH', '1', 'Private Identification Code', ''), - '0019xx11': ('LO', '3', 'Identification Data (Note 2)', ''), - '0019xx13': ('LO', '1', 'Sensitometry Name', ''), - '0019xx14': ('ST', '3', 'Window/Level List (Note 3)', ''), - '0019xx15': ('LO', '1', 'Dose Monitoring List', ''), - '0019xx16': ('LO', '3', 'Other Info (Note 5)', ''), - '0019xx1a': ('LO', '1', 'Clipped Exposure Deviation', ''), - '0019xx1b': ('LO', '1', 'Logarithmic PLT Full Scale', ''), - '0019xx60': ('US', '1', 'Total number of series', ''), - '0019xx61': ('SH', '1', 'Session Number', ''), - '0019xx62': ('SH', '1', 'ID Station name', ''), - '0019xx65': ('US', - '1', - 'Number of images in study to be transmitted (only sent with autoverify: on)', - ''), - '0019xx70': ('US', '1', 'Total number of images', ''), - '0019xx80': ('ST', '1', 'Geometrical Transformations', ''), - '0019xx81': ('ST', '1', 'Roam Origin', ''), - '0019xx82': ('US', '1', 'Zoom factor', ''), - '0019xx93': ('CS', '1', 'Status', '')}, - 'AGFA PACS Archive Mirroring 1.0': {'0031xx00': ('CS', '1', 'Unknown', ''), - '0031xx01': ('UL', '1', 'Unknown', '')}, - 'AGFA-AG_HPState': {'0071xx18': ('SQ', '1', 'Unknown', ''), - '0071xx19': ('SQ', '1', 'Unknown', ''), - '0071xx1a': ('SQ', '1', 'Unknown', ''), - '0071xx1c': ('SQ', '1', 'Unknown', ''), - '0071xx1e': ('SQ', '1', 'Unknown', ''), - '0071xx20': ('FL', '1-n', 'Unknown', ''), - '0071xx21': ('FD', '1-n', 'Unknown', ''), - '0071xx22': ('FD', '1-n', 'Unknown', ''), - '0071xx23': ('FD', '1-n', 'Unknown', ''), - '0071xx24': ('FD', '1', 'Unknown', ''), - '0073xx23': ('SH', '1', 'Unknown', ''), - '0073xx24': ('SQ', '1', 'Unknown', ''), - '0073xx28': ('SQ', '1', 'Unknown', ''), - '0073xx80': ('FL', '1', 'Unknown', ''), - '0075xx10': ('LO', '1', 'Unknown', ''), - '0087xx01': ('LO', '1', 'Unknown', ''), - '0087xx02': ('LO', '1', 'Unknown', '')}, - 'AGFA_ADC_Compact': {'0019xx05': ('ST', - '1', - 'Data stream from cassette', - ''), - '0019xx10': ('LO', - '1', - 'Private Identification Code', - ''), - '0019xx30': ('ST', '1', 'Set of destination types', ''), - '0019xx40': ('ST', '1', 'Set of destination Ids', ''), - '0019xx50': ('ST', '1', 'Set of processing codes', ''), - '0019xx60': ('US', - '1', - 'Number of series in study', - ''), - '0019xx61': ('US', '1', 'Session Number', ''), - '0019xx62': ('SH', '1', 'ID station name', ''), - '0019xx70': ('US', - '1', - 'Number of images in series', - ''), - '0019xx71': ('US', '1', 'Break condition', ''), - '0019xx72': ('US', '1', 'Wait (or Hold) flag', ''), - '0019xx73': ('US', '1', 'ScanRes flag', ''), - '0019xx74': ('SH', '1', 'Operation code', ''), - '0019xx95': ('CS', '1', 'Image quality', '')}, - 'ALOKA:1.2.392.200039.103.2': {'0009xx00': ('SH', '1', 'Unknown', ''), - '0009xx04': ('US', '1-n', 'Unknown', ''), - '0009xx06': ('US', '1-n', 'Unknown', ''), - '0009xx0a': ('SH', '1', 'Unknown', ''), - '0009xx20': ('CS', '1', 'Unknown', ''), - '0009xx22': ('CS', '1', 'Unknown', ''), - '0009xx24': ('CS', '1', 'Unknown', ''), - '0009xx26': ('IS', '1', 'Unknown', ''), - '0009xx28': ('IS', '1', 'Unknown', ''), - '0009xx2a': ('DS', '1', 'Unknown', ''), - '0009xx30': ('FD', '1', 'Unknown', ''), - '0009xx32': ('DS', '1', 'Unknown', ''), - '0009xx34': ('CS', '1', 'Unknown', ''), - '0019xx08': ('FD', '1', 'Unknown', ''), - '0019xx0c': ('CS', '1', 'Unknown', ''), - '0019xx0e': ('DS', '1', 'Unknown', ''), - '0019xx18': ('SL', '1', 'Unknown', ''), - '0019xx1a': ('SL', '1', 'Unknown', ''), - '0019xx40': ('SS', '1', 'Unknown', ''), - '0019xx46': ('US', '1', 'Unknown', ''), - '0019xx50': ('SL', '1', 'Unknown', ''), - '0019xx52': ('DS', '1', 'Unknown', ''), - '0019xx54': ('DS', '1', 'Unknown', ''), - '0019xx56': ('FD', '1', 'Unknown', '')}, - 'AMI Annotations_01': {'3101xx10': ('SQ', - '1', - 'AMI Annotation Sequence (RET)', - '')}, - 'AMI Annotations_02': {'3101xx20': ('SQ', - '1', - 'AMI Annotation Sequence (RET)', - '')}, - 'AMI ImageContextExt_01': {'3107xxa0': ('CS', - '1', - 'AMI Window Function (RET)', - ''), - '3107xxb0': ('DS', - '1', - 'AMI Window Slope (RET)', - '')}, - 'AMI ImageContext_01': {'3109xx10': ('CS', - '1', - 'AMI Window Invert (RET)', - ''), - '3109xx20': ('IS', - '1', - 'AMI Window Center (RET)', - ''), - '3109xx30': ('IS', - '1', - 'AMI Window Widith (RET)', - ''), - '3109xx40': ('CS', - '1', - 'AMI Pixel Aspect Ratio Swap (RET)', - ''), - '3109xx50': ('CS', - '1', - 'AMI Enable Averaging (RET)', - ''), - '3109xx60': ('CS', '1', 'AMI Quality (RET)', ''), - '3109xx70': ('CS', - '1', - 'AMI Viewport Annotation Level (RET)', - ''), - '3109xx80': ('CS', - '1', - 'AMI Show Image Annotation (RET)', - ''), - '3109xx90': ('CS', - '1', - 'AMI Show Image Overlay (RET)', - '')}, - 'AMI ImageTransform_01': {'3107xx10': ('DS', - '1', - 'AMI Transformation Matrix (RET)', - ''), - '3107xx20': ('DS', - '1', - 'AMI Center Offset (RET)', - ''), - '3107xx30': ('DS', - '1', - 'AMI Magnification (RET)', - ''), - '3107xx40': ('CS', - '1', - 'AMI Magnification Type (RET)', - ''), - '3107xx50': ('DS', - '1', - 'AMI Displayed Area (RET)', - ''), - '3107xx60': ('DS', - '1', - 'AMI Calibration Factor (RET)', - '')}, - 'AMI Sequence AnnotElements_01': {'3105xx10': ('DS', - '1', - 'AMI Annotation Element Position', - ''), - '3105xx20': ('LT', - '1', - 'AMI Annotation Element Text', - '')}, - 'AMI Sequence Annotations_01': {'3103xx10': ('CS', - '1', - 'AMI Annotation Sequence (RET)', - ''), - '3103xx20': ('UI', - '1', - 'AMI Annotation UID (RET)', - ''), - '3103xx30': ('US', - '1', - 'AMI Annotation Color (RET)', - ''), - '3103xx40': ('FD', '1', 'FontSize', ''), - '3103xx50': ('CS', - '1', - 'AMI Annotation Line Style (RET)', - ''), - '3103xx60': ('SQ', - '1', - 'AMI Annotation Elements (RET)', - ''), - '3103xx70': ('SH', - '1', - 'AMI Annotation Label (RET)', - ''), - '3103xx80': ('PN', - '1', - 'AMI Annotation Creator (RET)', - ''), - '3103xx90': ('PN', - '1', - 'AMI Annotation Modifiers (RET)', - ''), - '3103xxa0': ('DA', - '1', - 'AMI Annotation Creation Date (RET)', - ''), - '3103xxb0': ('TM', - '1', - 'AMI Annotation Creation Time (RET)', - ''), - '3103xxc0': ('DA', - '1', - 'AMI Annotation Modification Dates (RET)', - ''), - '3103xxd0': ('TM', - '1', - 'AMI Annotation Mofification Times (RET)', - ''), - '3103xxe0': ('US', - '1', - 'AMI Annotation Frame Number (RET)', - '')}, - 'AMI Sequence Annotations_02': {'3103xx10': ('CS', - '1', - 'AMI Annotation Sequence (RET)', - ''), - '3103xx20': ('UI', - '1', - 'AMI Annotation UID (RET)', - ''), - '3103xx30': ('US', - '1', - 'AMI Annotation Color (RET)', - ''), - '3103xx50': ('CS', - '1', - 'AMI Annotation Line Style (RET)', - ''), - '3103xx60': ('SQ', - '1', - 'AMI Annotation Elements (RET)', - ''), - '3103xx70': ('SH', - '1', - 'AMI Annotation Label (RET)', - ''), - '3103xx80': ('PN', - '1', - 'AMI Annotation Creator (RET)', - ''), - '3103xx90': ('PN', - '1', - 'AMI Annotation Modifiers (RET)', - ''), - '3103xxa0': ('DA', - '1', - 'AMI Annotation Creation Date (RET)', - ''), - '3103xxb0': ('TM', - '1', - 'AMI Annotation Creation Time (RET)', - ''), - '3103xxc0': ('DA', - '1', - 'AMI Annotation Modification Dates (RET)', - ''), - '3103xxd0': ('TM', - '1', - 'AMI Annotation Modification Times (RET)', - ''), - '3103xxe0': ('US', - '1', - 'AMI Annotation Frame Number (RET)', - '')}, - 'AMI StudyExtensions_01': {'3111xx01': ('UL', - '1', - 'AMI Last Released Annot Label (RET)', - '')}, - 'AMICAS0': {'0023xx01': ('UI', '1', '', ''), - '0023xx08': ('US', '1', '', ''), - '0023xx10': ('US', '1', '', ''), - '0023xx16': ('SL', '1', '', '')}, - 'APEX_PRIVATE': {'0027xx10': ('LO', '1', 'Private Creator', ''), - '0027xx11': ('DS', '1', 'Bed Position', '')}, - 'ATL HDI V1.0': {'0009xx00': ('UN', '1', 'Private', ''), - '0009xx10': ('UN', '1', 'Private', ''), - '0009xx20': ('UN', '1', 'Private', ''), - '0009xx30': ('UN', '1', 'Private', ''), - '0009xx40': ('UN', '1', 'Private', ''), - '0009xx50': ('UN', '1', 'Private', ''), - '0009xx60': ('UN', '1', 'Private', ''), - '0009xx70': ('UN', '1', 'Private', ''), - '0009xx80': ('UN', '1', 'Private', ''), - '0009xx90': ('UN', '1', 'Private', ''), - '0009xx91': ('UN', '1', 'Private', ''), - '0029xx30': ('UN', '1', 'Loop Mode', ''), - '0029xx31': ('UN', '1', 'Trigger mode', ''), - '0029xx32': ('UN', '1', 'Number of Loops', ''), - '0029xx33': ('UN', '1', 'Loop Indexes', ''), - '0029xx34': ('UN', '1', 'Loop Heart Rates', ''), - '0029xx35': ('UN', '1', 'Medications', '')}, - 'ATL PRIVATE TAGS': {'0029xx30': ('UL', '1', 'Loop Mode', ''), - '0029xx31': ('UL', '1', 'Trigger mode', ''), - '0029xx32': ('UL', '1', 'Number of Loops', ''), - '0029xx33': ('DS', '1-n', 'Loop Indexes', ''), - '0029xx34': ('DS', '1-n', 'Loop Heart Rates', ''), - '0029xx35': ('LO', '1', 'Medications', '')}, - 'Acuson X500': {'0009xx20': ('UN', '1', '(a)View Name', ''), - '0009xx2a': ('UN', '1', 'View List', ''), - '0011xx10': ('UN', '1', 'Siemens Medical', ''), - '0011xx11': ('UN', '1', 'DIMAQ Software', ''), - '0011xx20': ('UN', '1', 'Private Data', ''), - '0011xx21': ('UN', '1', 'Private Data', ''), - '0013xx10': ('UN', '1', 'Siemens Medical', ''), - '0013xx11': ('UN', '1', 'DIMAQ Software', ''), - '0013xx20': ('UN', '1', 'Private Data', ''), - '0015xx10': ('UN', '1', 'Siemens Medical', ''), - '0015xx11': ('UN', '1', 'DIMAQ Software', ''), - '0015xx20': ('UN', '1', 'Private Data', ''), - '0017xx10': ('UN', '1', 'Siemens Medical', ''), - '0017xx11': ('UN', '1', 'DIMAQ Software', ''), - '0017xx20': ('UN', '1', 'Private Data', ''), - '0019xx20': ('UN', '1', 'Import Structured', '')}, - 'Agfa ADC NX': {'0019xx09': ('SQ', '1', 'Unknown', ''), - '0019xxf5': ('CS', '1', 'Cassette Orientation', ''), - '0019xxf6': ('DS', '1', 'Plate Sensitivity', ''), - '0019xxf7': ('DS', '1', 'Plate Erasability', ''), - '0019xxf8': ('IS', '1', 'Unknown', ''), - '0019xxfe': ('CS', '1', 'Unknown', '')}, - 'AgilityRuntime': {'0029xx11': ('CS', '1', 'Unknown', ''), - '0029xx12': ('US', '1', 'Unknown', ''), - '0029xx13': ('US', '1', 'Unknown', ''), - '0029xx14': ('US', '1', 'Unknown', ''), - '0029xx1f': ('US', '1', 'Unknown', '')}, - 'Applicare/Centricity Radiology Web/Version 1.0': {'4109xx01': ('SH', - '1', - 'Mammography Laterality', - ''), - '4109xx02': ('SH', - '1', - 'Mammography View Name', - ''), - '4109xx03': ('SH', - '1', - 'Mammography View Modifier', - '')}, - 'Applicare/Centricity Radiology Web/Version 2.0': {'4111xx01': ('CS', - '1', - 'Secondary Spine Label', - ''), - '4111xx02': ('IS', - '1', - 'Additional tags for Presentation State', - '')}, - 'Applicare/Print/Version 5.1': {'4101xx01': ('UL', '1', '=3). -# NOTE: This must be not be stored as a tuple internally, as some code logic -# (e.g. in write_AT of filewriter) checks if a value is a multi-value element -# So, represent as a single number and separate to (group, element) when necessary. - - -def Tag(arg, arg2=None): - """General function for creating a Tag in any of the standard forms: - e.g. Tag(0x00100010), Tag(0x10,0x10), Tag((0x10, 0x10)) - """ - if arg2 is not None: - arg = (arg, arg2) # act as if was passed a single tuple - if isinstance(arg, (tuple, list)): - if len(arg) != 2: - raise ValueError("Tag must be an int or a 2-tuple") - if isinstance(arg[0], (str, unicode)): # py2to3: unicode not needed in py3 - if not isinstance(arg[1], (str, unicode)): # py3: ditto - raise ValueError("Both arguments must be hex strings if one is") - arg = (int(arg[0], 16), int(arg[1], 16)) - if arg[0] > 0xFFFF or arg[1] > 0xFFFF: - raise OverflowError("Groups and elements of tags must each be <=2 byte integers") - long_value = (arg[0] << 16) | arg[1] - elif isinstance(arg, (str, unicode)): # py2to3: unicode not needed in pure py3 - raise ValueError("Tags cannot be instantiated from a single string") - else: # given a single number to use as a tag, as if (group, elem) already joined to a long - long_value = arg - if long_value > 0xFFFFFFFFL: - raise OverflowError("Tags are limited to 32-bit length; tag {0!r}".format(arg)) - return BaseTag(long_value) - -# py2to3: for some reason, the BaseTag class derived directly from long below -# was not converted by 2to3, but conversion does work with this next line -BaseTag_base_class = long # converted to "int" by 2to3 - - -class BaseTag(BaseTag_base_class): - """Class for storing the dicom (group, element) tag""" - # Override comparisons so can convert "other" to Tag as necessary - # See Ordering Comparisons at http://docs.python.org/dev/3.0/whatsnew/3.0.html - - def __lt__(self, other): - # Check if comparing with another Tag object; if not, create a temp one - if not isinstance(other, BaseTag): - try: - other = Tag(other) - except: - raise TypeError("Cannot compare Tag with non-Tag item") - return long(self) < long(other) - - def __eq__(self, other): - # Check if comparing with another Tag object; if not, create a temp one - if not isinstance(other, BaseTag): - try: - other = Tag(other) - except: - raise TypeError("Cannot compare Tag with non-Tag item") - return long(self) == long(other) - - def __ne__(self, other): - # Check if comparing with another Tag object; if not, create a temp one - if not isinstance(other, BaseTag): - try: - other = Tag(other) - except: - raise TypeError("Cannot compare Tag with non-Tag item") - return long(self) != long(other) - - # For python 3, any override of __cmp__ or __eq__ immutable requires - # explicit redirect of hash function to the parent class - # See http://docs.python.org/dev/3.0/reference/datamodel.html#object.__hash__ - __hash__ = long.__hash__ - - def __str__(self): - """String of tag value as (gggg, eeee)""" - return "({0:04x}, {1:04x})".format(self.group, self.element) - - __repr__ = __str__ - - @property - def group(self): - return self >> 16 - - @property - def element(self): - """Return the element part of the (group,element) tag""" - return self & 0xffff - elem = element # alternate syntax - - @property - def is_private(self): - """Return a boolean to indicate whether the tag is a private tag (odd group number)""" - return self.group % 2 == 1 - - -def TupleTag(group_elem): - """Fast factory for BaseTag object with known safe (group, element) tuple""" - long_value = group_elem[0] << 16 | group_elem[1] - return BaseTag(long_value) - -# Define some special tags: -# See PS 3.5-2008 section 7.5 (p.40) -ItemTag = TupleTag((0xFFFE, 0xE000)) # start of Sequence Item -ItemDelimiterTag = TupleTag((0xFFFE, 0xE00D)) # end of Sequence Item -SequenceDelimiterTag = TupleTag((0xFFFE, 0xE0DD)) # end of Sequence of undefined length diff -Nru pydicom-0.9.8/dicom/test/all.bat pydicom-0.9.9/dicom/test/all.bat --- pydicom-0.9.8/dicom/test/all.bat 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/all.bat 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -echo OFF -echo all.bat -echo run pydicom test suite on all supported python versions -echo ------- python 2.6 ------------ -c:\python26\python run_tests.py -echo ------- python 2.7 ------------ -c:\python27\python run_tests.py - -REM Check location for each version -- to make sure are not running old pydicom versions -echo - -echo ----------------- -echo Check locations, make sure not pointing to old pydicom code: -echo Python 2.6 -c:\python26\python -c "import dicom; print dicom.__file__" -echo Python 2.7 -c:\python27\python -c "import dicom; print dicom.__file__" \ No newline at end of file diff -Nru pydicom-0.9.8/dicom/test/__init__.py pydicom-0.9.9/dicom/test/__init__.py --- pydicom-0.9.8/dicom/test/__init__.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -# __init__.py diff -Nru pydicom-0.9.8/dicom/test/performance/__init__.py pydicom-0.9.9/dicom/test/performance/__init__.py --- pydicom-0.9.8/dicom/test/performance/__init__.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/performance/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -# __init__.py -# Mark the folder as a python package diff -Nru pydicom-0.9.8/dicom/test/performance/raw_convert_test.py pydicom-0.9.9/dicom/test/performance/raw_convert_test.py --- pydicom-0.9.8/dicom/test/performance/raw_convert_test.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/performance/raw_convert_test.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -# raw_convert_test.py -"""Try reading a large RTSTRUCT file, profiling how much time it takes""" -# Copyright (c) 2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -# import sys -# sys.modules["decimal"] = __import__("cdecimal") - -import os.path -import os -import sys - -# EDIT THIS SECTION -------------------------- -# to point to local temp directory - -tempfile = "/tmp/pydicom_stats" -read_filename = r"/Users/darcy/hg/pydicom/source/dicom/testfiles/RStest.dcm" -write_filename = "/tmp/write_test.dcm" - -import dicom -from io import BytesIO - -import cProfile -import pstats -import sys - - -def test_full_read(filename): - dataset = dicom.read_file(filename) - return dataset - - -def walkval(dataset, dataelem): - val = dataelem.value - - -def test_convert_from_raw(dataset): - # s = str(dataset) - dataset.walk(walkval) - - -def test_write_file(dataset, write_filename): - dataset.save_as(write_filename) - - -if __name__ == "__main__": - runs = ['ds=test_full_read(read_filename)', - 'test_convert_from_raw(ds)', - 'test_write_file(ds, write_filename)', - ] - for testrun in runs: - cProfile.run(testrun, tempfile) - p = pstats.Stats(tempfile) - print("---------------") - print(testrun) - print("---------------") - p.strip_dirs().sort_stats('time').print_stats(12) - - # Clear disk cache for next run? -# import sys -# if not on_windows: -# prompt= "Run purge command (linux/Mac OS X) to clear disk cache?(N):" -# answer = raw_input(prompt) -# if answer.lower() == "y": -# print "Running 'purge'. Please wait..." -# os.system("purge") diff -Nru pydicom-0.9.8/dicom/test/performance/time_test.py pydicom-0.9.9/dicom/test/performance/time_test.py --- pydicom-0.9.8/dicom/test/performance/time_test.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/performance/time_test.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,127 +0,0 @@ -# time_test.py -"""Try reading large sets of files, profiling how much time it takes""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import os.path -import os -import sys -on_windows = sys.platform.startswith("win") - -# EDIT THIS SECTION -------------------------- -# to point to local temp directory, and to a set of >400 DICOM files of same size to work on -# I used images freely available from http://pcir.org -if on_windows: - tempfile = "c:/temp/pydicom_stats" - location_base = r"z:/testdicom/" -else: - tempfile = "/tmp/pydicom_stats" - location_base = r"/Users/darcy/testdicom/" - # location_base = r"/Volumes/Disk 1/testdicom/" # Network disk location -locations = ["77654033_19950903/77654033/19950903/CT2/", - "98890234_20010101/98890234/20010101/CT5/", - "98890234_20010101/98890234/20010101/CT6/", - "98890234_20010101/98890234/20010101/CT7/", - - ] -locations = [os.path.join(location_base, location) for location in locations] -# ------------------------------------------------------- -import glob -import dicom -from dicom.filereader import read_partial, _at_pixel_data -from io import BytesIO - -from time import time -import cProfile -import pstats -import sys -import random - -rp = read_partial -filenames = [] -for location in locations: - loc_list = glob.glob(os.path.join(location, "*")) - filenames.extend((x for x in loc_list if not x.startswith("."))) - -assert len(filenames) >= 400, "Need at least 400 files" # unless change slices below - - -print() -random.shuffle(filenames) # to make sure no bias for any particular file - - -print("Sampling from %d files. Each test gets 100 distinct files" % len(filenames)) -print("Test order is randomized too...") - -# Give each test it's own set of files, to avoid reading something in cache from previous test -filenames1 = filenames[:100] # keep the time to a reasonable amount (~2-25 sec) -filenames2 = filenames[100:200] -filenames3 = filenames[200:300] -filenames4 = filenames[300:400] - - -def test_full_read(): - rf = dicom.read_file - datasets = [rf(fn) for fn in filenames1] - return datasets - - -def test_partial(): - rp = read_partial - ds = [rp(open(fn, 'rb'), stop_when=_at_pixel_data) for fn in filenames2] - - -def test_mem_read_full(): - rf = dicom.read_file - str_io = BytesIO - memory_files = (str_io(open(fn, 'rb').read()) for fn in filenames3) - ds = [rf(memory_file) for memory_file in memory_files] - - -def test_mem_read_small(): - rf = dicom.read_file - str_io = BytesIO # avoid global lookup, make local instead - memory_files = (str_io(open(fn, 'rb').read(4000)) for fn in filenames4) - ds = [rf(memory_file) for memory_file in memory_files] - - -def test_python_read_files(): - all_files = [open(fn, 'rb').read() for fn in filenames4] - - -if __name__ == "__main__": - runs = ['datasets=test_full_read()', - # 'test_partial()', - # 'test_mem_read_full()', - # 'test_mem_read_small()', - 'test_python_read_files()', - ] - random.shuffle(runs) - for testrun in runs: - cProfile.run(testrun, tempfile) - p = pstats.Stats(tempfile) - print("---------------") - print(testrun) - print("---------------") - p.strip_dirs().sort_stats('time').print_stats(5) - print("Confirming file read worked -- check for data elements near end") - try: - image_sizes = [len(ds.PixelData) for ds in datasets] - except Exception as e: - print("Failed to access dataset data for all files\nError:" + str(e)) - else: - print("Reads checked ok.") - - # Clear disk cache for next run? - import sys - if not on_windows: - prompt = "Run purge command (linux/Mac OS X) to clear disk cache?...(N):" - if sys.version_info[0] > 2: - answer = input(prompt) - else: - answer = raw_input(prompt) - if answer.lower() == "y": - print("Running 'purge'. Please wait...") - os.system("purge") diff -Nru pydicom-0.9.8/dicom/test/run_tests.py pydicom-0.9.9/dicom/test/run_tests.py --- pydicom-0.9.8/dicom/test/run_tests.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/run_tests.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,56 +0,0 @@ -# run_tests.py -"""Call all the unit test files in the test directory starting with 'test'""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import os -import os.path -import sys -import unittest - -# Get the directory test_dir where the test scripts are -from pkg_resources import Requirement, resource_filename -test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/test") - - -class MyTestLoader(object): - def loadTestsFromNames(self, *args): - # Simplest to change to directory where test_xxx.py files are - save_dir = os.getcwd() - if test_dir: - os.chdir(test_dir) - filenames = os.listdir(".") - module_names = [f[:-3] for f in filenames - if f.startswith("test") and f.endswith(".py")] - - # Load all the tests - suite = unittest.TestSuite() - for module_name in module_names: - module_dotted_name = "dicom.test." + module_name - test = unittest.defaultTestLoader.loadTestsFromName( - module_dotted_name) - suite.addTest(test) - os.chdir(save_dir) - return suite - -if __name__ == "__main__": - # Get the tests -- in format used by Distribute library - # to run under 'python setup.py test' - suite = MyTestLoader().loadTestsFromNames() - - # Run the tests - verbosity = 1 - args = sys.argv - if len(args) > 1 and (args[1] == "-v" or args[1] == "--verbose"): - verbosity = 2 - runner = unittest.TextTestRunner(verbosity=verbosity) - - # Switch directories to test DICOM files, used by many of the tests - save_dir = os.getcwd() - testfiles_dir = resource_filename(Requirement.parse("pydicom"), - "dicom/testfiles") - os.chdir(testfiles_dir) - runner.run(suite) - os.chdir(save_dir) diff -Nru pydicom-0.9.8/dicom/test/shell_all pydicom-0.9.9/dicom/test/shell_all --- pydicom-0.9.8/dicom/test/shell_all 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/shell_all 1970-01-01 00:00:00.000000000 +0000 @@ -1,17 +0,0 @@ -#!/bin/bash -# all.sh -echo shell_all -echo run pydicom test suite on all supported python versions -echo ------- python 2.6 ------------ -python2.6 run_tests.py -echo ------- python 2.7 ------------ -python2.7 run_tests.py - -# Check location for each version -- to make sure are not running old pydicom versions -echo - -echo ----------------- -echo Check locations, make sure not pointing to old pydicom code: -echo Python 2.6 -python2.6 -c "import dicom;print dicom.__file__" -echo Python 2.7 -python2.7 -c "import dicom;print dicom.__file__" diff -Nru pydicom-0.9.8/dicom/test/test_charset.py pydicom-0.9.9/dicom/test/test_charset.py --- pydicom-0.9.8/dicom/test/test_charset.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_charset.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -# -*- coding: latin_1 -*- -# test_charset.py -"""unittest cases for dicom.charset module""" -# Copyright (c) 2008 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -import dicom -import os.path - -from pkg_resources import Requirement, resource_filename -testcharset_dir = resource_filename(Requirement.parse("pydicom"), - "dicom/testcharsetfiles") - -latin1_file = os.path.join(testcharset_dir, "chrFren.dcm") -jp_file = os.path.join(testcharset_dir, "chrH31.dcm") -multiPN_file = os.path.join(testcharset_dir, "chrFrenMulti.dcm") -sq_encoding_file = os.path.join(testcharset_dir, "chrSQEncoding.dcm") - -test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/testfiles") -normal_file = os.path.join(test_dir, "CT_small.dcm") - - -class charsetTests(unittest.TestCase): - def testLatin1(self): - """charset: can read and decode latin_1 file........................""" - ds = dicom.read_file(latin1_file) - ds.decode() - # Make sure don't get unicode encode error on converting to string - expected = u'Buc^J\xe9r\xf4me' - got = ds.PatientName - self.assertEqual(expected, got, - "Expected %r, got %r" % (expected, got)) - - def testNestedCharacterSets(self): - """charset: can read and decode SQ with different encodings.........""" - ds = dicom.read_file(sq_encoding_file) - ds.decode() - # These datasets inside of the SQ cannot be decoded with default_encoding - # OR UTF-8 (the parent dataset's encoding). Instead, we make sure that it - # is decoded using the (0008,0005) tag of the dataset - expected = u'\uff94\uff8f\uff80\uff9e^\uff80\uff9b\uff73=\u5c71\u7530^\u592a\u90ce=\u3084\u307e\u3060^\u305f\u308d\u3046' - got = ds[0x32, 0x1064][0].PatientName - self.assertEqual(expected, got, - "Expected %r, got %r" % (expected, got)) - - def testStandardFile(self): - """charset: can read and decode standard file without special char..""" - ds = dicom.read_file(normal_file) - ds.decode() - - def testMultiPN(self): - """charset: can decode file with multi-valued data elements.........""" - ds = dicom.read_file(multiPN_file) - ds.decode() - - -if __name__ == "__main__": - # This is called if run alone, but not if loaded through run_tests.py - # If not run from the directory where the sample images are, - # then need to switch there - import sys - import os - import os.path - dir_name = os.path.dirname(sys.argv[0]) - save_dir = os.getcwd() - if dir_name: - os.chdir(dir_name) - os.chdir("../testfiles") - unittest.main() - os.chdir(save_dir) diff -Nru pydicom-0.9.8/dicom/test/test_dataelem.py pydicom-0.9.9/dicom/test/test_dataelem.py --- pydicom-0.9.8/dicom/test/test_dataelem.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_dataelem.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -# test_dataelem.py -"""unittest cases for dicom.dataelem module""" -# Copyright (c) 2008 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -# Many tests of DataElement class are implied in test_dataset also - -import unittest -from dicom.dataelem import DataElement -from dicom.dataelem import RawDataElement, DataElement_from_raw -from dicom.tag import Tag -from dicom.dataset import Dataset -from dicom.UID import UID - - -class DataElementTests(unittest.TestCase): - def setUp(self): - self.data_elementSH = DataElement((1, 2), "SH", "hello") - self.data_elementIS = DataElement((1, 2), "IS", "42") - self.data_elementDS = DataElement((1, 2), "DS", "42.00001") - self.data_elementMulti = DataElement((1, 2), "DS", - ['42.1', '42.2', '42.3']) - - def testVM1(self): - """DataElement: return correct value multiplicity for VM > 1........""" - VM = self.data_elementMulti.VM - self.assertEqual(VM, 3, - "Wrong Value Multiplicity, expected 3, got %i" % VM) - - def testVM2(self): - """DataElement: return correct value multiplicity for VM = 1........""" - VM = self.data_elementIS.VM - self.assertEqual(VM, 1, - "Wrong Value Multiplicity, expected 1, got %i" % VM) - - def testBackslash(self): - """DataElement: String with '\\' sets multi-valued data_element.""" - data_element = DataElement((1, 2), "DS", r"42.1\42.2\42.3") - self.assertEqual(data_element.VM, 3, "Did not get a mult-valued value") - - def testUID(self): - """DataElement: setting or changing UID results in UID type.........""" - ds = Dataset() - ds.TransferSyntaxUID = "1.2.3" - self.assertTrue(isinstance(ds.TransferSyntaxUID, UID), - "Assignment to UID did not create UID class") - ds.TransferSyntaxUID += ".4.5.6" - self.assertTrue(isinstance(ds.TransferSyntaxUID, UID), - "+= to UID did not keep as UID class") - - -class RawDataElementTests(unittest.TestCase): - def setUp(self): - # raw data element -> tag VR length value - # value_tell is_implicit_VR is_little_endian' - # Unknown (not in DICOM dict), non-private, non-group 0 for this test - self.raw1 = RawDataElement(Tag(0x88880002), None, 4, 0x1111, - 0, True, True) - - def testKeyError(self): - """RawDataElement: conversion of unknown tag throws KeyError........""" - self.assertRaises(KeyError, DataElement_from_raw, self.raw1) - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_dataset.py pydicom-0.9.9/dicom/test/test_dataset.py --- pydicom-0.9.8/dicom/test/test_dataset.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_dataset.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,268 +0,0 @@ -# test_dataset.py -"""unittest cases for dicom.dataset module""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom.dataset import Dataset, have_numpy, PropertyError -from dicom.dataelem import DataElement, RawDataElement -from dicom.tag import Tag -from dicom.sequence import Sequence - - -class DatasetTests(unittest.TestCase): - def failUnlessRaises(self, excClass, callableObj, *args, **kwargs): - """Redefine unittest Exception test to return the exception object""" - # from http://stackoverflow.com/questions/88325/ - # how-do-i-unit-test-an-init-method-of-a-python-class-with-assertraises - try: - callableObj(*args, **kwargs) - except excClass as excObj: - return excObj # Actually return the exception object - else: - if hasattr(excClass, '__name__'): - excName = excClass.__name__ - else: - excName = str(excClass) - raise self.failureException("{0:s} not raised".format(excName)) - - def failUnlessExceptionArgs(self, start_args, excClass, callableObj): - """Check the expected args were returned from an exception - start_args -- a string with the start of the expected message - """ - # based on same link as failUnlessRaises override above - excObj = self.failUnlessRaises(excClass, callableObj) - msg = "\nExpected Exception message:\n" + start_args - msg += "\nGot:\n" + excObj.args[0] - self.assertTrue(excObj.args[0].startswith(start_args), msg) - - def testAttributeErrorInProperty(self): - """Dataset: AttributeError in property raises actual error message..""" - # This comes from bug fix for issue 42 - # First, fake enough to try the pixel_array property - ds = Dataset() - ds.file_meta = Dataset() - ds.PixelData = 'xyzlmnop' - - def callable_pixel_array(): - ds.pixel_array - - attribute_error_msg = "AttributeError in pixel_array property: " + \ - "Dataset does not have attribute 'TransferSyntaxUID'" - self.failUnlessExceptionArgs(attribute_error_msg, - PropertyError, callable_pixel_array) - - def dummy_dataset(self): - # This dataset is used by many of the tests - ds = Dataset() - ds.add_new((0x300a, 0x00b2), "SH", "unit001") # TreatmentMachineName - return ds - - def testSetNewDataElementByName(self): - """Dataset: set new data_element by name............................""" - ds = Dataset() - ds.TreatmentMachineName = "unit #1" - data_element = ds[0x300a, 0x00b2] - self.assertEqual(data_element.value, "unit #1", - "Unable to set data_element by name") - self.assertEqual(data_element.VR, "SH", - "data_element not the expected VR") - - def testSetExistingDataElementByName(self): - """Dataset: set existing data_element by name.......................""" - ds = self.dummy_dataset() - ds.TreatmentMachineName = "unit999" # change existing value - self.assertEqual(ds[0x300a, 0x00b2].value, "unit999") - - def testSetNonDicom(self): - """Dataset: can set class instance property (non-dicom).............""" - ds = Dataset() - ds.SomeVariableName = 42 - has_it = hasattr(ds, 'SomeVariableName') - self.assertTrue(has_it, "Variable did not get created") - if has_it: - self.assertEqual(ds.SomeVariableName, 42, "There, but wrong value") - - def testMembership(self): - """Dataset: can test if item present by 'if in dataset'......""" - ds = self.dummy_dataset() - self.assertTrue('TreatmentMachineName' in ds, "membership test failed") - self.assertTrue(not 'Dummyname' in ds, "non-member tested as member") - - def testContains(self): - """Dataset: can test if item present by 'if in dataset'.......""" - ds = self.dummy_dataset() - self.assertTrue((0x300a, 0xb2) in ds, "membership test failed") - self.assertTrue([0x300a, 0xb2] in ds, - "membership test failed when list used") - self.assertTrue(0x300a00b2 in ds, "membership test failed") - self.assertTrue(not (0x10, 0x5f) in ds, "non-member tested as member") - - def testGetExists1(self): - """Dataset: dataset.get() returns an existing item by name..........""" - ds = self.dummy_dataset() - unit = ds.get('TreatmentMachineName', None) - self.assertEqual(unit, 'unit001', - "dataset.get() did not return existing member by name") - - def testGetExists2(self): - """Dataset: dataset.get() returns an existing item by long tag......""" - ds = self.dummy_dataset() - unit = ds.get(0x300A00B2, None).value - self.assertEqual(unit, 'unit001', - "dataset.get() did not return existing member by long tag") - - def testGetExists3(self): - """Dataset: dataset.get() returns an existing item by tuple tag.....""" - ds = self.dummy_dataset() - unit = ds.get((0x300A, 0x00B2), None).value - self.assertEqual(unit, 'unit001', - "dataset.get() did not return existing member by tuple tag") - - def testGetExists4(self): - """Dataset: dataset.get() returns an existing item by Tag...........""" - ds = self.dummy_dataset() - unit = ds.get(Tag(0x300A00B2), None).value - self.assertEqual(unit, 'unit001', - "dataset.get() did not return existing member by tuple tag") - - def testGetDefault1(self): - """Dataset: dataset.get() returns default for non-existing name ....""" - ds = self.dummy_dataset() - not_there = ds.get('NotAMember', "not-there") - msg = ("dataset.get() did not return default value " - "for non-member by name") - - self.assertEqual(not_there, "not-there", msg) - - def testGetDefault2(self): - """Dataset: dataset.get() returns default for non-existing tuple tag""" - ds = self.dummy_dataset() - not_there = ds.get((0x9999, 0x9999), "not-there") - msg = ("dataset.get() did not return default value" - " for non-member by tuple tag") - self.assertEqual(not_there, "not-there", msg) - - def testGetDefault3(self): - """Dataset: dataset.get() returns default for non-existing long tag.""" - ds = self.dummy_dataset() - not_there = ds.get(0x99999999, "not-there") - msg = ("dataset.get() did not return default value" - " for non-member by long tag") - self.assertEqual(not_there, "not-there", msg) - - def testGetDefault4(self): - """Dataset: dataset.get() returns default for non-existing Tag......""" - ds = self.dummy_dataset() - not_there = ds.get(Tag(0x99999999), "not-there") - msg = ("dataset.get() did not return default value" - " for non-member by Tag") - self.assertEqual(not_there, "not-there", msg) - - def testGetFromRaw(self): - """Dataset: get(tag) returns same object as ds[tag] for raw element.""" - # This came from issue 88, where get(tag#) returned a RawDataElement, - # while get(name) converted to a true DataElement - test_tag = 0x100010 - test_elem = RawDataElement(Tag(test_tag), 'PN', 4, b'test', - 0, True, True) - ds = Dataset({Tag(test_tag): test_elem}) - by_get = ds.get(test_tag) - by_item = ds[test_tag] - - msg = ("Dataset.get() returned different objects for ds.get(tag) " - "and ds[tag]:\nBy get():%r\nBy ds[tag]:%r\n") - self.assertEqual(by_get, by_item, msg % (by_get, by_item)) - - def test__setitem__(self): - """Dataset: if set an item, it must be a DataElement instance.......""" - def callSet(): - # common error - set data_element instead of data_element.value - ds[0x300a, 0xb2] = "unit1" - - ds = Dataset() - self.assertRaises(TypeError, callSet) - - def test_matching_tags(self): - """Dataset: key and data_element.tag mismatch raises ValueError.....""" - def set_wrong_tag(): - ds[0x10, 0x10] = data_element - ds = Dataset() - data_element = DataElement((0x300a, 0x00b2), "SH", "unit001") - self.assertRaises(ValueError, set_wrong_tag) - - def test_NamedMemberUpdated(self): - """Dataset: if set data_element by tag, name also reflects change...""" - ds = self.dummy_dataset() - ds[0x300a, 0xb2].value = "moon_unit" - self.assertEqual(ds.TreatmentMachineName, 'moon_unit', - "Member not updated") - - def testUpdate(self): - """Dataset: update() method works with tag or name..................""" - ds = self.dummy_dataset() - pat_data_element = DataElement((0x10, 0x12), 'PN', 'Johnny') - ds.update({'PatientName': 'John', (0x10, 0x12): pat_data_element}) - self.assertEqual(ds[0x10, 0x10].value, 'John', - "named data_element not set") - self.assertEqual(ds[0x10, 0x12].value, 'Johnny', "set by tag failed") - - def testDir(self): - """Dataset: dir() returns sorted list of named data_elements........""" - ds = self.dummy_dataset() - ds.PatientName = "name" - ds.PatientID = "id" - ds.NonDicomVariable = "junk" - ds.add_new((0x18, 0x1151), "IS", 150) # X-ray Tube Current - ds.add_new((0x1111, 0x123), "DS", "42.0") # private - no name in dir() - expected = ['PatientID', 'PatientName', 'TreatmentMachineName', - 'XRayTubeCurrent'] - self.assertEqual(ds.dir(), expected, - "dir() returned %s, expected %s" % (str(ds.dir()), str(expected))) - - def testDeleteDicomAttr(self): - """Dataset: delete DICOM attribute by name..........................""" - def testAttribute(): - ds.TreatmentMachineName - - ds = self.dummy_dataset() - del ds.TreatmentMachineName - self.assertRaises(AttributeError, testAttribute) - - def testDeleteOtherAttr(self): - """Dataset: delete non-DICOM attribute by name......................""" - ds = self.dummy_dataset() - ds.meaningoflife = 42 - del ds.meaningoflife - - def testDeleteDicomAttrWeDontHave(self): - """Dataset: try delete of missing DICOM attribute...................""" - def try_delete(): - del ds.PatientName - ds = self.dummy_dataset() - self.assertRaises(AttributeError, try_delete) - - -class DatasetElementsTests(unittest.TestCase): - """Test valid assignments of data elements""" - def setUp(self): - self.ds = Dataset() - self.sub_ds1 = Dataset() - self.sub_ds2 = Dataset() - - def testSequenceAssignment(self): - """Assignment to SQ works only if valid Sequence assigned......""" - def try_non_Sequence(): - self.ds.ConceptCodeSequence = [1, 2, 3] - msg = "Assigning non-sequence to SQ data element did not raise error" - self.assertRaises(TypeError, try_non_Sequence) - # check also that assigning proper sequence *does* work - self.ds.ConceptCodeSequence = [self.sub_ds1, self.sub_ds2] - self.assertTrue(isinstance(self.ds.ConceptCodeSequence, Sequence), - "Sequence assignment did not result in Sequence type") - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_dictionary.py pydicom-0.9.9/dicom/test/test_dictionary.py --- pydicom-0.9.8/dicom/test/test_dictionary.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_dictionary.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,46 +0,0 @@ -# test_dictionary.py -"""Test suite for dicom_dictionary.py""" -# Copyright (c) 2008 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom.tag import Tag -from dicom.datadict import DicomDictionary, CleanName, all_names_for_tag, dictionary_description - - -class DictTests(unittest.TestCase): - def testCleanName(self): - """dicom_dictionary: CleanName returns correct strings.............""" - self.assertTrue(CleanName(0x00100010) == "PatientsName") - self.assertTrue(CleanName(Tag((0x0010, 0x0010))) == "PatientsName") - - def testTagNotFound(self): - """dicom_dictionary: CleanName returns blank string for unknown tag""" - self.assertTrue(CleanName(0x99991111) == "") - - def testNameFinding(self): - """dicom_dictionary: get long and short names for a data_element name""" - names = all_names_for_tag(Tag(0x300a00b2)) # Treatment Machine Name - expected = ['TreatmentMachineName'] - self.assertEqual(names, expected, "Expected %s, got %s" % (expected, names)) - names = all_names_for_tag(Tag(0x300A0120)) - expected = ['BeamLimitingDeviceAngle', 'BLDAngle'] - self.assertEqual(names, expected, "Expected %s, got %s" % (expected, names)) - - def testRepeaters(self): - """dicom_dictionary: Tags with "x" return correct dict info........""" - self.assertEqual(dictionary_description(0x280400), 'Transform Label') - self.assertEqual(dictionary_description(0x280410), 'Rows For Nth Order Coefficients') - - -class PrivateDictTests(unittest.TestCase): - def testPrivate1(self): - """private dict: """ - self.assertTrue(CleanName(0x00100010) == "PatientsName") - self.assertTrue(CleanName(Tag((0x0010, 0x0010))) == "PatientsName") - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_filereader.py pydicom-0.9.9/dicom/test/test_filereader.py --- pydicom-0.9.8/dicom/test/test_filereader.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_filereader.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,442 +0,0 @@ -# test_filereader.py -"""unittest tests for dicom.filereader module""" -# Copyright (c) 2010-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import sys -import os -import os.path -import unittest -from io import BytesIO - -import shutil -# os.stat is only available on Unix and Windows XXX Mac? -# Not sure if on other platforms the import fails, or the call to it?? -stat_available = True -try: - from os import stat -except: - stat_available = False - -have_numpy = True -try: - import numpy -except: - have_numpy = False -from dicom.filereader import read_file, data_element_generator, InvalidDicomError -from dicom.values import convert_value -from dicom.tag import Tag, TupleTag -from dicom.sequence import Sequence -import dicom.valuerep -import gzip - -from dicom.test.warncheck import assertWarns - -from pkg_resources import Requirement, resource_filename -test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/testfiles") - -rtplan_name = os.path.join(test_dir, "rtplan.dcm") -rtdose_name = os.path.join(test_dir, "rtdose.dcm") -ct_name = os.path.join(test_dir, "CT_small.dcm") -mr_name = os.path.join(test_dir, "MR_small.dcm") -jpeg2000_name = os.path.join(test_dir, "JPEG2000.dcm") -jpeg_lossy_name = os.path.join(test_dir, "JPEG-lossy.dcm") -jpeg_lossless_name = os.path.join(test_dir, "JPEG-LL.dcm") -deflate_name = os.path.join(test_dir, "image_dfl.dcm") -rtstruct_name = os.path.join(test_dir, "rtstruct.dcm") -priv_SQ_name = os.path.join(test_dir, "priv_SQ.dcm") -nested_priv_SQ_name = os.path.join(test_dir, "nested_priv_SQ.dcm") -no_meta_group_length = os.path.join(test_dir, "no_meta_group_length.dcm") -gzip_name = os.path.join(test_dir, "zipMR.gz") - -dir_name = os.path.dirname(sys.argv[0]) -save_dir = os.getcwd() - - -def isClose(a, b, epsilon=0.000001): - """Compare within some tolerance, to avoid machine roundoff differences""" - try: - a.append # see if is a list - except: # (is not) - return abs(a - b) < epsilon - else: - if len(a) != len(b): - return False - for ai, bi in zip(a, b): - if abs(ai - bi) > epsilon: - return False - return True - - -class ReaderTests(unittest.TestCase): - def testRTPlan(self): - """Returns correct values for sample data elements in test RT Plan file""" - plan = read_file(rtplan_name) - beam = plan.BeamSequence[0] - cp0, cp1 = beam.ControlPointSequence # if not two controlpoints, then this would raise exception - - self.assertEqual(beam.TreatmentMachineName, "unit001", "Incorrect unit name") - self.assertEqual(beam.TreatmentMachineName, beam[0x300a, 0x00b2].value, - "beam TreatmentMachineName does not match the value accessed by tag number") - - got = cp1.ReferencedDoseReferenceSequence[0].CumulativeDoseReferenceCoefficient - DS = dicom.valuerep.DS - expected = DS('0.9990268') - self.assertTrue(got == expected, - "Cum Dose Ref Coeff not the expected value (CP1, Ref'd Dose Ref") - got = cp0.BeamLimitingDevicePositionSequence[0].LeafJawPositions - self.assertTrue(got[0] == DS('-100') and got[1] == DS('100.0'), - "X jaws not as expected (control point 0)") - - def testRTDose(self): - """Returns correct values for sample data elements in test RT Dose file""" - dose = read_file(rtdose_name) - self.assertEqual(dose.FrameIncrementPointer, Tag((0x3004, 0x000c)), - "Frame Increment Pointer not the expected value") - self.assertEqual(dose.FrameIncrementPointer, dose[0x28, 9].value, - "FrameIncrementPointer does not match the value accessed by tag number") - - # try a value that is nested the deepest (so deep I break it into two steps!) - fract = dose.ReferencedRTPlanSequence[0].ReferencedFractionGroupSequence[0] - beamnum = fract.ReferencedBeamSequence[0].ReferencedBeamNumber - self.assertEqual(beamnum, 1, "Beam number not the expected value") - - def testCT(self): - """Returns correct values for sample data elements in test CT file....""" - ct = read_file(ct_name) - self.assertEqual(ct.file_meta.ImplementationClassUID, '1.3.6.1.4.1.5962.2', - "ImplementationClassUID not the expected value") - self.assertEqual(ct.file_meta.ImplementationClassUID, - ct.file_meta[0x2, 0x12].value, - "ImplementationClassUID does not match the value accessed by tag number") - # (0020, 0032) Image Position (Patient) [-158.13580300000001, -179.035797, -75.699996999999996] - got = ct.ImagePositionPatient - DS = dicom.valuerep.DS - expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] - self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected." - "got {0}, expected {1}".format(got, expected)) - - self.assertEqual(ct.Rows, 128, "Rows not 128") - self.assertEqual(ct.Columns, 128, "Columns not 128") - self.assertEqual(ct.BitsStored, 16, "Bits Stored not 16") - self.assertEqual(len(ct.PixelData), 128 * 128 * 2, "Pixel data not expected length") - - # Also test private elements name can be resolved: - expected = "[Duration of X-ray on]" - got = ct[(0x0043, 0x104e)].name - msg = "Mismatch in private tag name, expected '%s', got '%s'" - self.assertEqual(expected, got, msg % (expected, got)) - - # Check that can read pixels - get last one in array - if have_numpy: - expected = 909 - got = ct.pixel_array[-1][-1] - msg = "Did not get correct value for last pixel: expected %d, got %r" % (expected, got) - self.assertEqual(expected, got, msg) - else: - print "**Numpy not available -- pixel array test skipped**" - - def testNoForce(self): - """Raises exception if missing DICOM header and force==False...........""" - self.assertRaises(InvalidDicomError, read_file, rtstruct_name) - - def testRTstruct(self): - """Returns correct values for sample elements in test RTSTRUCT file....""" - # RTSTRUCT test file has complex nested sequences -- see rtstruct.dump file - # Also has no DICOM header ... so tests 'force' argument of read_file - - rtss = read_file(rtstruct_name, force=True) - expected = '1.2.840.10008.1.2' # implVR little endian - got = rtss.file_meta.TransferSyntaxUID - msg = "Expected transfer syntax %r, got %r" % (expected, got) - self.assertEqual(expected, got, msg) - frame_of_ref = rtss.ReferencedFrameOfReferenceSequence[0] - study = frame_of_ref.RTReferencedStudySequence[0] - uid = study.RTReferencedSeriesSequence[0].SeriesInstanceUID - expected = "1.2.826.0.1.3680043.8.498.2010020400001.2.1.1" - msg = "Expected Reference Series UID '%s', got '%s'" % (expected, uid) - self.assertEqual(expected, uid, msg) - - got = rtss.ROIContourSequence[0].ContourSequence[2].ContourNumber - expected = 3 - msg = "Expected Contour Number %d, got %r" % (expected, got) - self.assertEqual(expected, got, msg) - - obs_seq0 = rtss.RTROIObservationsSequence[0] - got = obs_seq0.ROIPhysicalPropertiesSequence[0].ROIPhysicalProperty - expected = 'REL_ELEC_DENSITY' - msg = "Expected Physical Property '%s', got %r" % (expected, got) - self.assertEqual(expected, got, msg) - - def testDir(self): - """Returns correct dir attributes for both Dataset and DICOM names (python >= 2.6)..""" - # Only python >= 2.6 calls __dir__ for dir() call - rtss = read_file(rtstruct_name, force=True) - # sample some expected 'dir' values - got_dir = dir(rtss) - expect_in_dir = ['pixel_array', 'add_new', 'ROIContourSequence', - 'StructureSetDate', '__sizeof__'] - expect_not_in_dir = ['RemovePrivateTags', 'AddNew', 'GroupDataset'] # remove in v1.0 - for name in expect_in_dir: - self.assertTrue(name in got_dir, "Expected name '%s' in dir()" % name) - for name in expect_not_in_dir: - self.assertTrue(name not in got_dir, "Unexpected name '%s' in dir()" % name) - # Now check for some items in dir() of a nested item - roi0 = rtss.ROIContourSequence[0] - got_dir = dir(roi0) - expect_in_dir = ['pixel_array', 'add_new', 'ReferencedROINumber', - 'ROIDisplayColor', '__sizeof__'] - for name in expect_in_dir: - self.assertTrue(name in got_dir, "Expected name '%s' in dir()" % name) - - def testMR(self): - """Returns correct values for sample data elements in test MR file.....""" - mr = read_file(mr_name) - # (0010, 0010) Patient's Name 'CompressedSamples^MR1' - mr.decode() - self.assertEqual(mr.PatientName, 'CompressedSamples^MR1', "Wrong patient name") - self.assertEqual(mr.PatientName, mr[0x10, 0x10].value, - "Name does not match value found when accessed by tag number") - got = mr.PixelSpacing - DS = dicom.valuerep.DS - expected = [DS('0.3125'), DS('0.3125')] - self.assertTrue(got == expected, "Wrong pixel spacing") - - def testDeflate(self): - """Returns correct values for sample data elements in test compressed (zlib deflate) file""" - # Everything after group 2 is compressed. If we can read anything else, the decompression must have been ok. - ds = read_file(deflate_name) - got = ds.ConversionType - expected = "WSD" - self.assertEqual(got, expected, "Attempted to read deflated file data element Conversion Type, expected '%s', got '%s'" % (expected, got)) - - def testNoPixelsRead(self): - """Returns all data elements before pixels using stop_before_pixels=False""" - # Just check the tags, and a couple of values - ctpartial = read_file(ct_name, stop_before_pixels=True) - ctpartial_tags = sorted(ctpartial.keys()) - ctfull = read_file(ct_name) - ctfull_tags = sorted(ctfull.keys()) - msg = "Tag list of partial CT read (except pixel tag and padding) did not match full read" - msg += "\nExpected: %r\nGot %r" % (ctfull_tags[:-2], ctpartial_tags) - missing = [Tag(0x7fe0, 0x10), Tag(0xfffc, 0xfffc)] - self.assertEqual(ctfull_tags, ctpartial_tags + missing, msg) - - def testPrivateSQ(self): - """Can read private undefined length SQ without error....................""" - # From issues 91, 97, 98. Bug introduced by fast reading, due to VR=None - # in raw data elements, then an undefined length private item VR is looked up, - # and there is no such tag, generating an exception - - # Simply read the file, in 0.9.5 this generated an exception - priv_SQ = read_file(priv_SQ_name) - - def testNestedPrivateSQ(self): - """Can successfully read a private SQ which contains additional SQ's.....""" - # From issue 113. When a private SQ of undefined length is used, the - # sequence is read in and the length of the SQ is determined upon - # identification of the SQ termination sequence. When using nested - # Sequences, the first termination sequence encountered actually - # belongs to the nested Sequence not the parent, therefore the - # remainder of the file is not read in properly - ds = read_file(nested_priv_SQ_name) - - # Make sure that the entire dataset was read in - pixel_data_tag = TupleTag((0x7fe0, 0x10)) - self.assertTrue(pixel_data_tag in ds, - "Entire dataset was not parsed properly. PixelData is not present") - - # Check that the DataElement is indeed a Sequence - tag = TupleTag((0x01, 0x01)) - seq0 = ds[tag] - self.assertEqual(seq0.VR, 'SQ', - "First level sequence not parsed properly") - - # Now verify the presence of the nested private SQ - seq1 = seq0[0][tag] - self.assertEqual(seq1.VR, 'SQ', - "Second level sequence not parsed properly") - - # Now make sure the values that are parsed are correct - got = seq1[0][tag].value - expected = b'Double Nested SQ' - self.assertEqual(got, expected, - "Expected a value of %s, got %s'" % (expected, got)) - - got = seq0[0][0x01, 0x02].value - expected = b'Nested SQ' - self.assertEqual(got, expected, - "Expected a value of %s, got %s'" % (expected, got)) - - def testNoMetaGroupLength(self): - """Read file with no group length in file meta...........................""" - # Issue 108 -- iView example file with no group length (0002,0002) - # Originally crashed, now check no exception, but also check one item - # in file_meta, and second one in followinsg dataset - ds = read_file(no_meta_group_length) - got = ds.InstanceCreationDate - expected = "20111130" - self.assertEqual(got, expected, "Sample data element after file meta with no group length failed, expected '%s', got '%s'" % (expected, got)) - - -class JPEG2000Tests(unittest.TestCase): - def setUp(self): - self.jpeg = read_file(jpeg2000_name) - - def testJPEG2000(self): - """JPEG2000: Returns correct values for sample data elements............""" - expected = [Tag(0x0054, 0x0010), Tag(0x0054, 0x0020)] # XX also tests multiple-valued AT data element - got = self.jpeg.FrameIncrementPointer - self.assertEqual(got, expected, "JPEG2000 file, Frame Increment Pointer: expected %s, got %s" % (expected, got)) - - got = self.jpeg.DerivationCodeSequence[0].CodeMeaning - expected = 'Lossy Compression' - self.assertEqual(got, expected, "JPEG200 file, Code Meaning got %s, expected %s" % (got, expected)) - - def testJPEG2000PixelArray(self): - """JPEG2000: Fails gracefully when uncompressed data is asked for.......""" - self.assertRaises(NotImplementedError, self.jpeg._get_pixel_array) - - -class JPEGlossyTests(unittest.TestCase): - - def setUp(self): - self.jpeg = read_file(jpeg_lossy_name) - - def testJPEGlossy(self): - """JPEG-lossy: Returns correct values for sample data elements..........""" - got = self.jpeg.DerivationCodeSequence[0].CodeMeaning - expected = 'Lossy Compression' - self.assertEqual(got, expected, "JPEG-lossy file, Code Meaning got %s, expected %s" % (got, expected)) - - def testJPEGlossyPixelArray(self): - """JPEG-lossy: Fails gracefully when uncompressed data is asked for.....""" - self.assertRaises(NotImplementedError, self.jpeg._get_pixel_array) - - -class JPEGlosslessTests(unittest.TestCase): - def setUp(self): - self.jpeg = read_file(jpeg_lossless_name) - - def testJPEGlossless(self): - """JPEGlossless: Returns correct values for sample data elements........""" - got = self.jpeg.SourceImageSequence[0].PurposeOfReferenceCodeSequence[0].CodeMeaning - expected = 'Uncompressed predecessor' - self.assertEqual(got, expected, "JPEG-lossless file, Code Meaning got %s, expected %s" % (got, expected)) - - def testJPEGlosslessPixelArray(self): - """JPEGlossless: Fails gracefully when uncompressed data is asked for...""" - self.assertRaises(NotImplementedError, self.jpeg._get_pixel_array) - - # create an in-memory fragment - - -class DeferredReadTests(unittest.TestCase): - """Test that deferred data element reading (for large size) - works as expected - """ - # Copy one of test files and use temporarily, then later remove. - def setUp(self): - self.testfile_name = ct_name + ".tmp" - shutil.copyfile(ct_name, self.testfile_name) - - def testTimeCheck(self): - """Deferred read warns if file has been modified...........""" - if stat_available: - ds = read_file(self.testfile_name, defer_size=2000) - from time import sleep - sleep(1) - open(self.testfile_name, "r+").write('\0') # "touch" the file - warning_start = "Deferred read warning -- file modification time " - - def read_value(): - data_elem = ds.PixelData - - assertWarns(self, warning_start, read_value) - - def testFileExists(self): - """Deferred read raises error if file no longer exists.....""" - ds = read_file(self.testfile_name, defer_size=2000) - os.remove(self.testfile_name) - - def read_value(): - data_elem = ds.PixelData - - self.assertRaises(IOError, read_value) - - def testValuesIdentical(self): - """Deferred values exactly matches normal read...............""" - ds_norm = read_file(self.testfile_name) - ds_defer = read_file(self.testfile_name, defer_size=2000) - for data_elem in ds_norm: - tag = data_elem.tag - self.assertEqual(data_elem.value, ds_defer[tag].value, "Mismatched value for tag %r" % tag) - - def testZippedDeferred(self): - """Deferred values from a gzipped file works..............""" - # Arose from issue 103 "Error for defer_size read of gzip file object" - fobj = gzip.open(gzip_name) - ds = read_file(fobj, defer_size=1) - fobj.close() - # before the fix, this threw an error as file reading was not in right place, - # it was re-opened as a normal file, not zip file - num = ds.InstanceNumber - - def tearDown(self): - if os.path.exists(self.testfile_name): - os.remove(self.testfile_name) - - -class FileLikeTests(unittest.TestCase): - """Test that can read DICOM files with file-like object rather than filename""" - def testReadFileGivenFileObject(self): - """filereader: can read using already opened file............""" - f = open(ct_name, 'rb') - ct = read_file(f) - # Tests here simply repeat testCT -- perhaps should collapse the code together? - got = ct.ImagePositionPatient - DS = dicom.valuerep.DS - expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] - self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected") - self.assertEqual(ct.file_meta.ImplementationClassUID, '1.3.6.1.4.1.5962.2', - "ImplementationClassUID not the expected value") - self.assertEqual(ct.file_meta.ImplementationClassUID, - ct.file_meta[0x2, 0x12].value, - "ImplementationClassUID does not match the value accessed by tag number") - # (0020, 0032) Image Position (Patient) [-158.13580300000001, -179.035797, -75.699996999999996] - got = ct.ImagePositionPatient - expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] - self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected") - self.assertEqual(ct.Rows, 128, "Rows not 128") - self.assertEqual(ct.Columns, 128, "Columns not 128") - self.assertEqual(ct.BitsStored, 16, "Bits Stored not 16") - self.assertEqual(len(ct.PixelData), 128 * 128 * 2, "Pixel data not expected length") - # Should also be able to close the file ourselves without exception raised: - f.close() - - def testReadFileGivenFileLikeObject(self): - """filereader: can read using a file-like (BytesIO) file....""" - file_like = BytesIO(open(ct_name, 'rb').read()) - ct = read_file(file_like) - # Tests here simply repeat some of testCT test - got = ct.ImagePositionPatient - DS = dicom.valuerep.DS - expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] - self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected") - self.assertEqual(len(ct.PixelData), 128 * 128 * 2, "Pixel data not expected length") - # Should also be able to close the file ourselves without exception raised: - file_like.close() - - -if __name__ == "__main__": - # This is called if run alone, but not if loaded through run_tests.py - # If not run from the directory where the sample images are, then need to switch there - dir_name = os.path.dirname(sys.argv[0]) - save_dir = os.getcwd() - if dir_name: - os.chdir(dir_name) - os.chdir("../testfiles") - unittest.main() - os.chdir(save_dir) diff -Nru pydicom-0.9.8/dicom/test/test_filewriter.py pydicom-0.9.9/dicom/test/test_filewriter.py --- pydicom-0.9.8/dicom/test/test_filewriter.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_filewriter.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,213 +0,0 @@ -# test_filewriter.py -"""unittest cases for dicom.filewriter module""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import sys -import os.path -import os -import unittest -from dicom.filereader import read_file -from dicom.filewriter import write_data_element -from dicom.tag import Tag -from dicom.dataset import Dataset, FileDataset -from dicom.sequence import Sequence -from dicom.util.hexutil import hex2bytes, bytes2hex - -# from io import BytesIO -from dicom.filebase import DicomBytesIO -from dicom.dataelem import DataElement -from dicom.util.hexutil import hex2bytes, bytes2hex - -from pkg_resources import Requirement, resource_filename -test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/testfiles") -testcharset_dir = resource_filename(Requirement.parse("pydicom"), - "dicom/testcharsetfiles") - -rtplan_name = os.path.join(test_dir, "rtplan.dcm") -rtdose_name = os.path.join(test_dir, "rtdose.dcm") -ct_name = os.path.join(test_dir, "CT_small.dcm") -mr_name = os.path.join(test_dir, "MR_small.dcm") -jpeg_name = os.path.join(test_dir, "JPEG2000.dcm") - -unicode_name = os.path.join(testcharset_dir, "chrH31.dcm") -multiPN_name = os.path.join(testcharset_dir, "chrFrenMulti.dcm") - -# Set up rtplan_out, rtdose_out etc. Filenames as above, with '2' appended -for inname in ['rtplan', 'rtdose', 'ct', 'mr', 'jpeg', 'unicode', 'multiPN']: - exec(inname + "_out = " + inname + "_name + '2'") - - -def files_identical(a, b): - """Return a tuple (file a == file b, index of first difference)""" - a_bytes = open(a, "rb").read() - b_bytes = open(b, "rb").read() - return bytes_identical(a_bytes, b_bytes) - - -def bytes_identical(a_bytes, b_bytes): - """Return a tuple (bytes a == bytes b, index of first difference)""" - if a_bytes == b_bytes: - return True, 0 # True, dummy argument - else: - pos = 0 - while a_bytes[pos] == b_bytes[pos]: - pos += 1 - return False, pos # False if not identical, position of 1st diff - - -class WriteFileTests(unittest.TestCase): - def compare(self, in_filename, out_filename, decode=False): - """Read file1, write file2, then compare. - Return value as for files_identical. - """ - dataset = read_file(in_filename) - if decode: - dataset.decode() - - dataset.save_as(out_filename) - same, pos = files_identical(in_filename, out_filename) - self.assertTrue(same, - "Files are not identical - first difference at 0x%x" % pos) - if os.path.exists(out_filename): - os.remove(out_filename) # get rid of the file - - def testRTPlan(self): - """Input file, write back and verify them identical (RT Plan file)""" - self.compare(rtplan_name, rtplan_out) - - def testRTDose(self): - """Input file, write back and verify them identical (RT Dose file)""" - self.compare(rtdose_name, rtdose_out) - - def testCT(self): - """Input file, write back and verify them identical (CT file).....""" - self.compare(ct_name, ct_out) - - def testMR(self): - """Input file, write back and verify them identical (MR file).....""" - self.compare(mr_name, mr_out) - - def testUnicode(self): - """Ensure decoded string DataElements are written to file properly""" - self.compare(unicode_name, unicode_out, decode=True) - - def testMultiPN(self): - """Ensure multiple Person Names are written to the file correctly.""" - self.compare(multiPN_name, multiPN_out, decode=True) - - def testJPEG2000(self): - """Input file, write back and verify them identical (JPEG2K file).""" - self.compare(jpeg_name, jpeg_out) - - def testListItemWriteBack(self): - """Change item in a list and confirm it is written to file ..""" - DS_expected = 0 - CS_expected = "new" - SS_expected = 999 - ds = read_file(ct_name) - ds.ImagePositionPatient[2] = DS_expected - ds.ImageType[1] = CS_expected - ds[(0x0043, 0x1012)].value[0] = SS_expected - ds.save_as(ct_out) - # Now read it back in and check that the values were changed - ds = read_file(ct_out) - self.assertTrue(ds.ImageType[1] == CS_expected, - "Item in a list not written correctly to file (VR=CS)") - self.assertTrue(ds[0x00431012].value[0] == SS_expected, - "Item in a list not written correctly to file (VR=SS)") - self.assertTrue(ds.ImagePositionPatient[2] == DS_expected, - "Item in a list not written correctly to file (VR=DS)") - if os.path.exists(ct_out): - os.remove(ct_out) - - -class WriteDataElementTests(unittest.TestCase): - """Attempt to write data elements has the expected behaviour""" - def setUp(self): - # Create a dummy (in memory) file to write to - self.f1 = DicomBytesIO() - self.f1.is_little_endian = True - self.f1.is_implicit_VR = True - - def test_empty_AT(self): - """Write empty AT correctly..........""" - # Was issue 74 - data_elem = DataElement(0x00280009, "AT", []) - expected = hex2bytes(( - " 28 00 09 00" # (0028,0009) Frame Increment Pointer - " 00 00 00 00" # length 0 - )) - write_data_element(self.f1, data_elem) - got = self.f1.parent.getvalue() - msg = ("Did not write zero-length AT value correctly. " - "Expected %r, got %r") % (bytes2hex(expected), bytes2hex(got)) - msg = "%r %r" % (type(expected), type(got)) - msg = "'%r' '%r'" % (expected, got) - self.assertEqual(expected, got, msg) - - -class ScratchWriteTests(unittest.TestCase): - """Simple dataset from scratch, written in all endian/VR combinations""" - def setUp(self): - # Create simple dataset for all tests - ds = Dataset() - ds.PatientName = "Name^Patient" - - # Set up a simple nested sequence - # first, the innermost sequence - subitem1 = Dataset() - subitem1.ContourNumber = 1 - subitem1.ContourData = ['2', '4', '8', '16'] - subitem2 = Dataset() - subitem2.ContourNumber = 2 - subitem2.ContourData = ['32', '64', '128', '196'] - - sub_ds = Dataset() - sub_ds.ContourSequence = Sequence((subitem1, subitem2)) - - # Now the top-level sequence - ds.ROIContourSequence = Sequence((sub_ds,)) # Comma to make one-tuple - - # Store so each test can use it - self.ds = ds - - def compare_write(self, hex_std, file_ds): - """Write file and compare with expected byte string - - :arg hex_std: the bytes which should be written, as space separated hex - :arg file_ds: a FileDataset instance containing the dataset to write - """ - out_filename = "scratch.dcm" - file_ds.save_as(out_filename) - std = hex2bytes(hex_std) - bytes_written = open(out_filename, 'rb').read() - # print "std :", bytes2hex(std) - # print "written:", bytes2hex(bytes_written) - same, pos = bytes_identical(std, bytes_written) - self.assertTrue(same, - "Writing from scratch unexpected result - 1st diff at 0x%x" % pos) - if os.path.exists(out_filename): - os.remove(out_filename) # get rid of the file - - def testImpl_LE_deflen_write(self): - """Scratch Write for implicit VR little endian, defined length SQ's""" - from dicom.test._write_stds import impl_LE_deflen_std_hex as std - - file_ds = FileDataset("test", self.ds) - self.compare_write(std, file_ds) - - -if __name__ == "__main__": - # This is called if run alone, but not if loaded through run_tests.py - # If not run from the directory where the sample images are, - # then need to switch there - dir_name = os.path.dirname(sys.argv[0]) - save_dir = os.getcwd() - if dir_name: - os.chdir(dir_name) - os.chdir("../testfiles") - unittest.main() - os.chdir(save_dir) diff -Nru pydicom-0.9.8/dicom/test/test_multival.py pydicom-0.9.9/dicom/test/test_multival.py --- pydicom-0.9.8/dicom/test/test_multival.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_multival.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -# test_multival.py -"""Test suite for MultiValue class""" -# Copyright (c) 2012 Darcy Mason -# This file is part of pydicom, relased under an MIT-style license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom.multival import MultiValue -from dicom.valuerep import DS, DSfloat, DSdecimal, IS -import dicom.config - -import sys -python_version = sys.version_info - - -class MultiValuetests(unittest.TestCase): - def testMultiDS(self): - """MultiValue: Multi-valued data elements can be created........""" - multival = MultiValue(DS, ['11.1', '22.2', '33.3']) - for val in multival: - self.assertTrue(isinstance(val, (DSfloat, DSdecimal)), - "Multi-value DS item not converted to DS") - - def testLimits(self): - """MultiValue: Raise error if any item outside DICOM limits....""" - original_flag = dicom.config.enforce_valid_values - dicom.config.enforce_valid_values = True - self.assertRaises(OverflowError, MultiValue, IS, [1, -2 ** 31 - 1]) # Overflow error not raised for IS out of DICOM valid range - dicom.config.enforce_valid_values = original_flag - - def testAppend(self): - """MultiValue: Append of item converts it to required type...""" - multival = MultiValue(IS, [1, 5, 10]) - multival.append('5') - self.assertTrue(isinstance(multival[-1], IS)) - self.assertEqual(multival[-1], 5, "Item set by append is not correct value") - - def testSetIndex(self): - """MultiValue: Setting list item converts it to required type""" - multival = MultiValue(IS, [1, 5, 10]) - multival[1] = '7' - self.assertTrue(isinstance(multival[1], IS)) - self.assertEqual(multival[1], 7, "Item set by index is not correct value") - - def testExtend(self): - """MultiValue: Extending a list converts all to required type""" - multival = MultiValue(IS, [1, 5, 10]) - multival.extend(['7', 42]) - self.assertTrue(isinstance(multival[-2], IS)) - self.assertTrue(isinstance(multival[-1], IS)) - self.assertEqual(multival[-2], 7, "Item set by extend not correct value") - - def testSlice(self): - """MultiValue: Setting slice converts items to required type.""" - multival = MultiValue(IS, range(7)) - multival[2:7:2] = [4, 16, 36] - for val in multival: - self.assertTrue(isinstance(val, IS), "Slice IS value not correct type") - self.assertEqual(multival[4], 16, "Set by slice failed for item 4 of list") - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_rawread.py pydicom-0.9.9/dicom/test/test_rawread.py --- pydicom-0.9.8/dicom/test/test_rawread.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_rawread.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,277 +0,0 @@ -# test_rawread.py -"""unittest tests for dicom.filereader module -- simple raw data elements""" -# Copyright (c) 2010-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from io import BytesIO -import unittest -from dicom import in_py3 -from dicom.filereader import data_element_generator -from dicom.values import convert_value -from dicom.sequence import Sequence -from dicom.util.hexutil import hex2bytes - - -class RawReaderExplVRTests(unittest.TestCase): - # See comments in data_element_generator -- summary of DICOM data element formats - # Here we are trying to test all those variations - - def testExplVRLittleEndianLongLength(self): - """Raw read: Explicit VR Little Endian long length......................""" - # (0002,0001) OB 2-byte-reserved 4-byte-length, value 0x00 0x01 - infile = BytesIO(hex2bytes("02 00 01 00 4f 42 00 00 02 00 00 00 00 01")) - expected = ((2, 1), 'OB', 2, b'\00\01', 0xc, False, True) - de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) - got = next(de_gen) - msg_loc = "in read of Explicit VR='OB' data element (long length format)" - self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) - # (0002,0002) OB 2-byte-reserved 4-byte-length, value 0x00 0x01 - - def testExplVRLittleEndianShortLength(self): - """Raw read: Explicit VR Little Endian short length.....................""" - # (0008,212a) IS 2-byte-length, value '1 ' - infile = BytesIO(hex2bytes("08 00 2a 21 49 53 02 00 31 20")) - # XXX Assumes that a RawDataElement doesn't convert the value based - # upon the VR value, thus it will remain a byte string since that is - # the input - expected = ((8, 0x212a), 'IS', 2, b'1 ', 0x8, False, True) - de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) - got = next(de_gen) - msg_loc = "in read of Explicit VR='IS' data element (short length format)" - self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) - - def testExplVRLittleEndianUndefLength(self): - """Raw read: Expl VR Little Endian with undefined length................""" - # (7fe0,0010), OB, 2-byte reserved, 4-byte-length (UNDEFINED) - hexstr1 = "e0 7f 10 00 4f 42 00 00 ff ff ff ff" - hexstr2 = " 41 42 43 44 45 46 47 48 49 4a" # 'content' - hexstr3 = " fe ff dd e0 00 00 00 00" # Sequence Delimiter - hexstr = hexstr1 + hexstr2 + hexstr3 - infile = BytesIO(hex2bytes(hexstr)) - expected = ((0x7fe0, 0x10), 'OB', 0xffffffffL, b'ABCDEFGHIJ', 0xc, False, True) - de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) - got = next(de_gen) - msg_loc = "in read of undefined length Explicit VR ='OB' short value)" - self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) - - # Test again such that delimiter crosses default 128-byte read "chunks", etc - for multiplier in (116, 117, 118, 120): - multiplier = 116 - hexstr2b = hexstr2 + " 00" * multiplier - hexstr = hexstr1 + hexstr2b + hexstr3 - infile = BytesIO(hex2bytes(hexstr)) - expected = len('ABCDEFGHIJ' + '\0' * multiplier) - de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) - got = next(de_gen) - got_len = len(got.value) - msg_loc = "in read of undefined length Explicit VR ='OB' with 'multiplier' %d" % multiplier - self.assertEqual(expected, got_len, "Expected value length %d, got %d in %s" % (expected, got_len, msg_loc)) - msg = "Unexpected value start with multiplier %d on Expl VR undefined length" % multiplier - self.assertTrue(got.value.startswith(b'ABCDEFGHIJ\0'), msg) - - -class RawReaderImplVRTests(unittest.TestCase): - # See comments in data_element_generator -- summary of DICOM data element formats - # Here we are trying to test all those variations - - def testImplVRLittleEndian(self): - """Raw read: Implicit VR Little Endian..................................""" - # (0008,212a) {IS} 4-byte-length, value '1 ' - infile = BytesIO(hex2bytes("08 00 2a 21 02 00 00 00 31 20")) - expected = ((8, 0x212a), None, 2, b'1 ', 0x8, True, True) - de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) - got = next(de_gen) - msg_loc = "in read of Implicit VR='IS' data element (short length format)" - self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) - - def testImplVRLittleEndianUndefLength(self): - """Raw read: Impl VR Little Endian with undefined length................""" - # (7fe0,0010), OB, 2-byte reserved, 4-byte-length (UNDEFINED) - hexstr1 = "e0 7f 10 00 ff ff ff ff" - hexstr2 = " 41 42 43 44 45 46 47 48 49 4a" # 'content' - hexstr3 = " fe ff dd e0 00 00 00 00" # Sequence Delimiter - hexstr = hexstr1 + hexstr2 + hexstr3 - infile = BytesIO(hex2bytes(hexstr)) - expected = ((0x7fe0, 0x10), 'OW or OB', 0xffffffffL, b'ABCDEFGHIJ', 0x8, True, True) - de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) - got = next(de_gen) - msg_loc = "in read of undefined length Implicit VR ='OB' short value)" - self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) - - # Test again such that delimiter crosses default 128-byte read "chunks", etc - for multiplier in (116, 117, 118, 120): - multiplier = 116 - hexstr2b = hexstr2 + " 00" * multiplier - hexstr = hexstr1 + hexstr2b + hexstr3 - infile = BytesIO(hex2bytes(hexstr)) - expected = len('ABCDEFGHIJ' + '\0' * multiplier) - de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) - got = next(de_gen) - got_len = len(got.value) - msg_loc = "in read of undefined length Implicit VR with 'multiplier' %d" % multiplier - self.assertEqual(expected, got_len, "Expected value length %d, got %d in %s" % (expected, got_len, msg_loc)) - msg = "Unexpected value start with multiplier %d on Implicit VR undefined length" % multiplier - self.assertTrue(got.value.startswith(b'ABCDEFGHIJ\0'), msg) - - -class RawSequenceTests(unittest.TestCase): - # See DICOM standard PS3.5-2008 section 7.5 for sequence syntax - def testEmptyItem(self): - """Read sequence with a single empty item...............................""" - # This is fix for issue 27 - hexstr = ( - "08 00 32 10" # (0008, 1032) SQ "Procedure Code Sequence" - " 08 00 00 00" # length 8 - " fe ff 00 e0" # (fffe, e000) Item Tag - " 00 00 00 00" # length = 0 - ) + ( # --------------- end of Sequence - " 08 00 3e 10" # (0008, 103e) LO "Series Description" - " 0c 00 00 00" # length - " 52 20 41 44 44 20 56 49 45 57 53 20" # value - ) - # "\x08\x00\x32\x10\x08\x00\x00\x00\xfe\xff\x00\xe0\x00\x00\x00\x00" # from issue 27, procedure code sequence (0008,1032) - # hexstr += "\x08\x00\x3e\x10\x0c\x00\x00\x00\x52\x20\x41\x44\x44\x20\x56\x49\x45\x57\x53\x20" # data element following - - fp = BytesIO(hex2bytes(hexstr)) - gen = data_element_generator(fp, is_implicit_VR=True, is_little_endian=True) - raw_seq = next(gen) - seq = convert_value("SQ", raw_seq) - - self.assertTrue(isinstance(seq, Sequence), "Did not get Sequence, got type {0:s}".format(type(seq))) - self.assertTrue(len(seq) == 1, "Expected Sequence with single (empty) item, got {0:d} item(s)".format(len(seq))) - self.assertTrue(len(seq[0]) == 0, "Expected the sequence item (dataset) to be empty") - elem2 = next(gen) - self.assertEqual(elem2.tag, 0x0008103e, "Expected a data element after empty sequence item") - - def testImplVRLittleEndian_ExplicitLengthSeq(self): - """Raw read: ImplVR Little Endian SQ with explicit lengths..............""" - # Create a fictional sequence with bytes directly, - # similar to PS 3.5-2008 Table 7.5-1 p42 - hexstr = ( - "0a 30 B0 00" # (300a, 00b0) Beam Sequence - " 40 00 00 00" # length - " fe ff 00 e0" # (fffe, e000) Item Tag - " 18 00 00 00" # Item (dataset) Length - " 0a 30 c0 00" # (300A, 00C0) Beam Number - " 02 00 00 00" # length - " 31 20" # value '1 ' - " 0a 30 c2 00" # (300A, 00C2) Beam Name - " 06 00 00 00" # length - " 42 65 61 6d 20 31" # value 'Beam 1' - # ------------- - " fe ff 00 e0" # (fffe, e000) Item Tag - " 18 00 00 00" # Item (dataset) Length - " 0a 30 c0 00" # (300A, 00C0) Beam Number - " 02 00 00 00" # length - " 32 20" # value '2 ' - " 0a 30 c2 00" # (300A, 00C2) Beam Name - " 06 00 00 00" # length - " 42 65 61 6d 20 32" # value 'Beam 2' - ) - - infile = BytesIO(hex2bytes(hexstr)) - de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) - raw_seq = next(de_gen) - seq = convert_value("SQ", raw_seq) - - # The sequence is parsed, but only into raw data elements. - # They will be converted when asked for. Check some: - got = seq[0].BeamNumber - self.assertTrue(got == 1, "Expected Beam Number 1, got {0!r}".format(got)) - got = seq[1].BeamName - self.assertTrue(got == 'Beam 2', "Expected Beam Name 'Beam 2', got {0:s}".format(got)) - - def testImplVRBigEndian_ExplicitLengthSeq(self): - """Raw read: ImplVR BigEndian SQ with explicit lengths..................""" - # Create a fictional sequence with bytes directly, - # similar to PS 3.5-2008 Table 7.5-1 p42 - hexstr = ( - "30 0a 00 B0" # (300a, 00b0) Beam Sequence - " 00 00 00 40" # length - " ff fe e0 00" # (fffe, e000) Item Tag - " 00 00 00 18" # Item (dataset) Length - " 30 0a 00 c0" # (300A, 00C0) Beam Number - " 00 00 00 02" # length - " 31 20" # value '1 ' - " 30 0a 00 c2" # (300A, 00C2) Beam Name - " 00 00 00 06" # length - " 42 65 61 6d 20 31" # value 'Beam 1' - # ------------- - " ff fe e0 00" # (fffe, e000) Item Tag - " 00 00 00 18" # Item (dataset) Length - " 30 0a 00 c0" # (300A, 00C0) Beam Number - " 00 00 00 02" # length - " 32 20" # value '2 ' - " 30 0a 00 c2" # (300A, 00C2) Beam Name - " 00 00 00 06" # length - " 42 65 61 6d 20 32" # value 'Beam 2' - ) - - infile = BytesIO(hex2bytes(hexstr)) - de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=False) - raw_seq = next(de_gen) - seq = convert_value("SQ", raw_seq) - - # The sequence is parsed, but only into raw data elements. - # They will be converted when asked for. Check some: - got = seq[0].BeamNumber - self.assertTrue(got == 1, "Expected Beam Number 1, got {0!r}".format(got)) - got = seq[1].BeamName - self.assertTrue(got == 'Beam 2', "Expected Beam Name 'Beam 2', got {0:s}".format(got)) - - def testExplVRBigEndian_UndefinedLengthSeq(self): - """Raw read: ExplVR BigEndian Undefined Length SQ.......................""" - # Create a fictional sequence with bytes directly, - # similar to PS 3.5-2008 Table 7.5-2 p42 - item1_value_bytes = "\1" * 126 - item2_value_bytes = "\2" * 222 - hexstr = ( - "30 0a 00 B0" # (300a, 00b0) Beam Sequence - " 53 51" # SQ - " 00 00" # reserved - " ff ff ff ff" # undefined length - " ff fe e0 00" # (fffe, e000) Item Tag - " 00 00 00 18" # Item (dataset) Length - " 30 0a 00 c0" # (300A, 00C0) Beam Number - " 49 53" # IS - " 00 02" # length - " 31 20" # value '1 ' - " 30 0a 00 c2" # (300A, 00C2) Beam Name - " 4c 4F" # LO - " 00 06" # length - " 42 65 61 6d 20 31" # value 'Beam 1' - # ------------- - " ff fe e0 00" # (fffe, e000) Item Tag - " 00 00 00 18" # Item (dataset) Length - " 30 0a 00 c0" # (300A, 00C0) Beam Number - " 49 53" # IS - " 00 02" # length - " 32 20" # value '2 ' - " 30 0a 00 c2" # (300A, 00C2) Beam Name - " 4C 4F" # LO - " 00 06" # length - " 42 65 61 6d 20 32" # value 'Beam 2' - " ff fe E0 dd" # SQ delimiter - " 00 00 00 00" # zero length - ) - - infile = BytesIO(hex2bytes(hexstr)) - de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=False) - seq = next(de_gen) - # Note seq itself is not a raw data element. - # The parser does parse undefined length SQ - - # The sequence is parsed, but only into raw data elements. - # They will be converted when asked for. Check some: - got = seq[0].BeamNumber - self.assertTrue(got == 1, "Expected Beam Number 1, got {0!r}".format(got)) - got = seq[1].BeamName - self.assertTrue(got == 'Beam 2', "Expected Beam Name 'Beam 2', got {0:s}".format(got)) - - -if __name__ == "__main__": - # import dicom - # dicom.debug() - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_sequence.py pydicom-0.9.9/dicom/test/test_sequence.py --- pydicom-0.9.8/dicom/test/test_sequence.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_sequence.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -# test_sequence.py -"""unittest cases for Sequence class""" -# Copyright (c) 2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom.dataset import Dataset -from dicom.sequence import Sequence - - -class SequenceTests(unittest.TestCase): - def testDefaultInitialization(self): - """Sequence: Ensure a valid Sequence is created""" - empty = Sequence() - self.assertTrue(len(empty) == 0, "Non-empty Sequence created") - - def testValidInitialization(self): - """Sequence: Ensure valid creation of Sequences using Dataset inputs""" - inputs = {'PatientPosition': 'HFS', - 'PatientSetupNumber': '1', - 'SetupTechniqueDescription': ''} - patientSetups = Dataset() - patientSetups.update(inputs) - - # Construct the sequence - seq = Sequence((patientSetups,)) - self.assertTrue(isinstance(seq[0], Dataset), - "Dataset modified during Sequence creation") - - def testInvalidInitialization(self): - """Sequence: Raise error if inputs are not iterables or Datasets""" - # Error on construction with single Dataset - self.assertRaises(TypeError, Sequence, Dataset()) - # Test for non-iterable - self.assertRaises(TypeError, Sequence, 1) - # Test for invalid iterable contents - self.assertRaises(TypeError, Sequence, [1, 2]) - - def testInvalidAssignment(self): - """Sequence: validate exception for invalid assignment""" - seq = Sequence([Dataset(), ]) - # Attempt to assign an integer to the first element - self.assertRaises(TypeError, seq.__setitem__, 0, 1) - - def testValidAssignment(self): - """Sequence: ensure ability to assign a Dataset to a Sequence item""" - ds = Dataset() - ds.add_new((1, 1), 'IS', 1) - - # Create a single element Sequence first - seq = Sequence([Dataset(), ]) - seq[0] = ds - - self.assertEqual(seq[0], ds, "Dataset modified during assignment") - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_tag.py pydicom-0.9.9/dicom/test/test_tag.py --- pydicom-0.9.8/dicom/test/test_tag.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_tag.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,93 +0,0 @@ -"""Test suite for Tag.py""" -# Copyright (c) 2008 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom.tag import Tag, TupleTag - - -class Values(unittest.TestCase): - def testGoodInts(self): - """Tags can be constructed with 4-byte integers..............""" - tag = Tag(0x300a00b0) - tag = Tag(0xFFFFFFEE) - - def testGoodTuple(self): - """Tags can be constructed with two-tuple of 2-byte integers.""" - tag = TupleTag((0xFFFF, 0xFFee)) - tag = TupleTag((0x300a, 0x00b0)) - self.assertEqual(tag.group, 0x300a, "Expected tag.group 0x300a, got %r" % tag.group) - - def testAnyUnpack(self): - """Tags can be constructed from list.........................""" - tag = Tag([2, 0]) - - def testBadTuple(self): - """Tags: if a tuple, must be a 2-tuple.......................""" - self.assertRaises(ValueError, Tag, (1, 2, 3, 4)) - - def testNonNumber(self): - """Tags cannot be instantiated from a non-hex string.........""" - self.assertRaises(ValueError, Tag, "hello") - - def testHexString(self): - """Tags can be instantiated from hex strings.................""" - tag = Tag('0010', '0002') - self.assertEqual(tag.group, 16) - self.assertEqual(tag.elem, 2) - - def testStr(self): - """Tags have (gggg, eeee) string rep.........................""" - self.assertTrue(str(Tag(0x300a00b0)) == "(300a, 00b0)") - - def testGroup(self): - """Tags' group and elem portions extracted properly..........""" - tag = Tag(0x300a00b0) - self.assertTrue(tag.group == 0x300a) - self.assertTrue(tag.elem == 0xb0) - self.assertTrue(tag.element == 0xb0) - - def testZeroElem(self): - """Tags with arg2=0 ok (was issue 47)........................""" - tag = Tag(2, 0) - self.assertTrue(tag.group == 2 and tag.elem == 0) - - def testBadInts(self): - """Tags constructed with > 8 bytes gives OverflowError.......""" - self.assertRaises(OverflowError, Tag, 0x123456789) - - -class Comparisons(unittest.TestCase): - def setUp(self): - self.int1 = 0x300a00b0 - self.tup1 = (0x300a, 0xb0) - self.tup3 = (0xFFFE, 0xFFFC) - self.t1 = Tag(self.int1) - self.t2 = Tag(self.tup1) - self.t3 = Tag(self.tup3) - - def testCmpEq(self): - """Tags compare correctly (==)...............................""" - self.assertTrue(self.t1 == self.int1, "tag t1 was not equal to int1") - self.assertTrue(self.t1 == self.t2, "tag t1 did not equal other tag") - self.assertTrue(self.t1 == self.tup1, "tag t1 did not equal its tuple") - - def testCmpNotEq(self): - self.assertTrue(self.t1 != self.t3, "Not equal comparison failed") - - def testCmpLT(self): - """Tags compare correctly (<, >).............................""" - self.assertTrue(self.t1 < self.int1 + 1, "tag < failed") - self.assertTrue(self.int1 + 1 > self.t1, "int > tag failed") - self.assertTrue(self.t3 > self.t1, "'negative' int tag > other tag failed") - - def testHash(self): - """Tags hash the same as an int..............................""" - self.assertTrue(hash(self.t1) == hash(self.int1)) - self.assertTrue(hash(self.t2) == hash(self.int1)) - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_UID.py pydicom-0.9.9/dicom/test/test_UID.py --- pydicom-0.9.8/dicom/test/test_UID.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_UID.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,83 +0,0 @@ -# test_UID.py -"""Test suite for UID.py""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom.UID import UID, generate_uid, pydicom_root_UID, InvalidUID - - -class UIDtests(unittest.TestCase): - def testKnownUID(self): - """UID: Known UID properties accessed.....................""" - - msg = "UID: expected '{1:s}', got '{2:s}' for UID {0:s}" - - uid = UID('1.2.840.10008.1.2') # Implicit VR Little Endian - expected = 'Implicit VR Little Endian' - got = uid.name - self.assertEqual(got, expected, msg.format("name", expected, got)) - - expected = 'Transfer Syntax' - got = uid.type - self.assertEqual(got, expected, msg.format("type", expected, got)) - - expected = 'Default Transfer Syntax for DICOM' - got = uid.info - self.assertEqual(got, expected, msg.format("info", expected, got)) - - expected = False - got = uid.is_retired - self.assertEqual(got, expected, - msg.format("is_retired", str(expected), str(got))) - - def testComparison(self): - """UID: can compare by number or by name..................""" - uid = UID('1.2.840.10008.1.2') - self.assertEqual(uid, 'Implicit VR Little Endian', - "UID equality failed on name") - self.assertEqual(uid, '1.2.840.10008.1.2', - "UID equality failed on number string") - - def testCompareNumber(self): - """UID: comparing against a number give False.............""" - # From issue 96 - uid = UID('1.2.3') - self.assertNotEqual(uid, 3, "Comparison to a number returned True") - - def testCompareNone(self): - """UID: comparing against None give False.................""" - # From issue 96 - uid = UID('1.2.3') - self.assertNotEqual(uid, None, "Comparison to a number returned True") - - def testTransferSyntaxes(self): - pass - - def testGenerateUID(self): - ''' - Test UID generator - ''' - #Test standard UID generation with pydicom prefix - uid = generate_uid() - self.assertEqual(uid[:26], pydicom_root_UID) - - #Test standard UID generation with no prefix - uid = generate_uid(None) - self.assertEqual(uid[:5], '2.25.') - - #Test invalid UID truncation (trailing dot) - invalid_prefix = \ - '1.2.33333333333333333333333333333333333333333333333333333333333.333.' - self.assertRaises(InvalidUID, - lambda: generate_uid(prefix=invalid_prefix, truncate=True)) - - #Test standard UID with truncate=True - prefix = '1.2.3.444444' - uid = generate_uid(prefix=prefix, truncate=True) - self.assertEqual(uid[:12], prefix) - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/test_valuerep.py pydicom-0.9.9/dicom/test/test_valuerep.py --- pydicom-0.9.8/dicom/test/test_valuerep.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/test_valuerep.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,110 +0,0 @@ -# test_valuerep.py -"""Test suite for valuerep.py""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import unittest -from dicom import in_py3 -from dicom.valuerep import PersonName, PersonNameUnicode -import dicom.config - -if in_py3: - from dicom.valuerep import PersonName3 as PersonNameUnicode - PersonName = PersonNameUnicode - - -default_encoding = 'iso8859' - - -class DecimalStringtests(unittest.TestCase): - """Unit tests unique to the use of DS class derived from python Decimal""" - - def setUp(self): - dicom.config.DS_decimal(True) - - def tearDown(self): - dicom.config.DS_decimal(False) - - def testValidDecimalStrings(self): - # Ensures that decimal.Decimal doesn't cause a valid string to become - # invalid - valid_str = '-9.81338674e-006' - ds = dicom.valuerep.DS(valid_str) - L = len(str(ds)) - self.assertTrue(L <= 16, "DS: expected a string of length 16 but got %d" % (L,)) - - # Now the input string is too long but decimal.Decimal can convert it - # to a valid 16-character string - long_str = '-0.000000981338674' - ds = dicom.valuerep.DS(long_str) - L = len(str(ds)) - self.assertTrue(L <= 16, "DS: expected a string of length 16 but got %d" % (L,)) - - def testInvalidDecimalStrings(self): - # Now the input string truly is invalid - invalid_string = '-9.813386743e-006' - self.assertRaises(OverflowError, dicom.valuerep.DS, invalid_string) - - -class PersonNametests(unittest.TestCase): - def testLastFirst(self): - """PN: Simple Family-name^Given-name works...............................""" - pn = PersonName("Family^Given") - expected = "Family" - got = pn.family_name - self.assertEqual(got, expected, "PN: expected '%s', got '%s' for family name" % (expected, got)) - - expected = 'Given' - got = pn.given_name - self.assertEqual(got, expected, "PN: expected '%s', got '%s' for given name" % (expected, got)) - - expected = '' - got = pn.name_suffix - self.assertEqual(got, expected, "PN: expected '%s', got '%s' for name_suffix" % (expected, got)) - - expected = '' - got = pn.phonetic - self.assertEqual(got, expected, "PN: expected '%s', got '%s' for phonetic component" % (expected, got)) - - def testThreeComponent(self): - """PN: 3component (single-byte, ideographic, phonetic characters) works..""" - # Example name from PS3.5-2008 section I.2 p. 108 - pn = PersonName("""Hong^Gildong=\033$)C\373\363^\033$)C\321\316\324\327=\033$)C\310\253^\033$)C\261\346\265\277""") - expected = ("Hong", "Gildong") - got = (pn.family_name, pn.given_name) - self.assertEqual(got, expected, "PN: Expected single_byte name '%s', got '%s'" % (expected, got)) - - def testFormatting(self): - """PN: Formatting works..................................................""" - pn = PersonName("Family^Given") - expected = "Family, Given" - got = pn.family_comma_given() - self.assertEqual(got, expected, "PN: expected '%s', got '%s' for formatted Family, Given" % (expected, got)) - - def testUnicodeKr(self): - """PN: 3component in unicode works (Korean)..............................""" - # Example name from PS3.5-2008 section I.2 p. 101 - from sys import version_info - pn = PersonNameUnicode( - """Hong^Gildong=\033$)C\373\363^\033$)C\321\316\324\327=\033$)C\310\253^\033$)C\261\346\265\277""", - [default_encoding, 'euc_kr']) - expected = ("Hong", "Gildong") - got = (pn.family_name, pn.given_name) - self.assertEqual(got, expected, "PN: Expected single_byte name '{0!s}', got '{1!s}'".format(expected, got)) - - def testUnicodeJp(self): - """PN: 3component in unicode works (Japanese)............................""" - # Example name from PS3.5-2008 section H p. 98 - from sys import version_info - pn = PersonNameUnicode( - """Yamada^Tarou=\033$B;3ED\033(B^\033$BB@O:\033(B=\033$B$d$^$@\033(B^\033$B$?$m$&\033(B""", - [default_encoding, 'iso2022_jp']) - expected = ("Yamada", "Tarou") - got = (pn.family_name, pn.given_name) - self.assertEqual(got, expected, "PN: Expected single_byte name '{0!s}', got '{1!s}'".format(expected, got)) - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/version_dep.py pydicom-0.9.9/dicom/test/version_dep.py --- pydicom-0.9.8/dicom/test/version_dep.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/version_dep.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -# version_dep.py -"""Holds test code that is dependent on certain python versions""" -# Copyright (c) 2009-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import warnings - - -def capture_warnings(function, *func_args, **func_kwargs): - """Capture function result and warnings. - """ - with warnings.catch_warnings(record=True) as w: - warnings.simplefilter("always") - result = function(*func_args, **func_kwargs) - all_warnings = w - return result, [str(warning.message) for warning in all_warnings] diff -Nru pydicom-0.9.8/dicom/test/warncheck.py pydicom-0.9.9/dicom/test/warncheck.py --- pydicom-0.9.8/dicom/test/warncheck.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/warncheck.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# warncheck.py -# -import warnings -import unittest -from sys import version_info -from dicom.test.version_dep import capture_warnings - - -def assertWarns(self, warn_msg, function, *func_args, **func_kwargs): - """ - Check that the function generates the expected warning - with the arguments given. - - warn_msg -- part of the warning string, any warnings should contain this - function -- the function to call (expected to issue a warning) - func_args -- positional arguments to the function - func_kwargs -- keyword arguments to the function - - Return the function return value. - """ - result, all_warnings = capture_warnings(function, *func_args, - **func_kwargs) - - msg = "Expected one warning; got {0:d}" - self.assertTrue(len(all_warnings) == 1, msg.format(len(all_warnings))) - msg = "Expected warning message '{0:s}...'; got '{1:s}'" - self.assertTrue(warn_msg in all_warnings[0], - msg.format(warn_msg, all_warnings[0])) - return result - - -def test_warning(the_warning): - if the_warning: - warnings.warn(the_warning) - - -class WarnTests(unittest.TestCase): - def testWarn(self): - """Test that assertWarns works as expected""" - assertWarns(self, "Look", test_warning, "Look out") - - -if __name__ == "__main__": - unittest.main() diff -Nru pydicom-0.9.8/dicom/test/_write_stds.py pydicom-0.9.9/dicom/test/_write_stds.py --- pydicom-0.9.8/dicom/test/_write_stds.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/test/_write_stds.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,68 +0,0 @@ -# _write_stds.py -"""Snippets for what a particular dataset (including nested sequences) -should look like after writing in different expl/impl Vr and endian combos, -as well as undefined length sequences and items -""" - -# Implicit VR, little endian, SQ's with defined lengths -impl_LE_deflen_std_hex = ( - "10 00 10 00 " # (0010, 0010) Patient's Name - "0c 00 00 00 " # length 12 - "4e 61 6d 65 5e 50 61 74 69 65 6e 74 " # "Name^Patient" - "06 30 39 00 " # (3006, 0039) ROI Contour Sequence - "5a 00 00 00 " # length 90 - "fe ff 00 e0 " # (fffe, e000) Item Tag - "52 00 00 00 " # length 82 - "06 30 40 00 " # (3006, 0040) Contour Sequence - "4a 00 00 00 " # length 74 - "fe ff 00 e0 " # (fffe, e000) Item Tag - "1a 00 00 00 " # length 26 - "06 30 48 00 " # (3006, 0048) Contour Number - "02 00 00 00 " # length 2 - "31 20 " # "1 " - "06 30 50 00 " # (3006, 0050) Contour Data - "08 00 00 00 " # length 8 - "32 5c 34 5c 38 5c 31 36 " # "2\4\8\16" - "fe ff 00 e0 " # (fffe, e000) Item Tag - "20 00 00 00 " # length 32 - "06 30 48 00 " # (3006, 0048) Contour Number - "02 00 00 00 " # length 2 - "32 20 " # "2 " - "06 30 50 00 " # (3006, 0050) Contour Data - "0e 00 00 00 " # length 14 - "33 32 5c 36 34 5c 31 32 38 5c 31 39 36 20 " - # "32\64\128\196 " - ) - -# Implicit VR, big endian, SQ's with defined lengths -# Realized after coding this that there is no Impl VR big endian in DICOM std; -# however, it seems to exist as a GE private transfer syntax. -# Will leave this here for now. -impl_BE_deflen_std_hex = ( - "00 10 00 10 " # (0010, 0010) Patient's Name - "00 00 00 0c " # length 12 - "4e 61 6d 65 5e 50 61 74 69 65 6e 74 " # "Name^Patient" - "30 06 00 39 " # (3006, 0039) ROI Contour Sequence - "00 00 00 5a " # length 90 - "ff fe e0 00 " # (fffe, e000) Item Tag - "00 00 00 52 " # length 82 - "30 06 00 40 " # (3006, 0040) Contour Sequence - "00 00 00 4a " # length 74 - "ff fe e0 00 " # (fffe, e000) Item Tag - "00 00 00 1a " # length 26 - "30 06 00 48 " # (3006, 0048) Contour Number - "00 00 00 02 " # length 2 - "31 20 " # "1 " - "30 06 00 50 " # (3006, 0050) Contour Data - "00 00 00 08 " # length 8 - "32 5c 34 5c 38 5c 31 36 " # "2\4\8\16" - "ff fe e0 00 " # (fffe, e000) Item Tag - "20 00 00 00 " # length 32 - "30 06 00 48 " # (3006, 0048) Contour Number - "00 00 00 02 " # length 2 - "32 20 " # "2 " - "30 06 00 50 " # (3006, 0050) Contour Data - "00 00 00 0e " # length 14 - "33 32 5c 36 34 5c 31 32 38 5c 31 39 36 20 " - # "32\64\128\196 " - ) diff -Nru pydicom-0.9.8/dicom/testcharsetfiles/charlist.py pydicom-0.9.9/dicom/testcharsetfiles/charlist.py --- pydicom-0.9.8/dicom/testcharsetfiles/charlist.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/testcharsetfiles/charlist.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -# charlist.py -"""List summary info for the test files in the charset directory""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import logging -logging.basicConfig(level=logging.INFO, - format='%(message)s') - -if __name__ == "__main__": - from glob import glob - import dicom - - # Get list of all DICOM files - names = glob("*.dcm") - - # Collect summary information from the files - files_info = [] - for name in names: - ds = dicom.read_file(name) - ds.decode() - files_info.append((name, ds.SpecificCharacterSet, ds.PatientsName)) - - # Show the information - format = "%-16s %-40s %s" - logging.info(format % ("Filename", "Character Sets", "Patient's Name")) - logging.info(format % ("--------", "--------------", "--------------")) - for file_info in files_info: - logging.info(format % file_info) - - if "chrFrenMulti.dcm" in names: - logging.info("\nOther\n=====") - logging.info( - "chrFrenMulti.dcm is a modified version of chrFren.dcm" - " with multi-valued PN and LO for testing decoding" - ) Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrArab.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrArab.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrFren.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrFren.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrFrenMulti.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrFrenMulti.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrGerm.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrGerm.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrGreek.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrGreek.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrH31.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrH31.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrH32.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrH32.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrHbrw.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrHbrw.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrI2.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrI2.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrJapMulti.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrJapMulti.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrKoreanMulti.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrKoreanMulti.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrRuss.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrRuss.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrSQEncoding.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrSQEncoding.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrX1.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrX1.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testcharsetfiles/chrX2.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testcharsetfiles/chrX2.dcm differ diff -Nru pydicom-0.9.8/dicom/testcharsetfiles/FileInfo.txt pydicom-0.9.9/dicom/testcharsetfiles/FileInfo.txt --- pydicom-0.9.8/dicom/testcharsetfiles/FileInfo.txt 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/testcharsetfiles/FileInfo.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -Filename Character Sets "Patient's Name" --------- -------------- '--------------' -chrArab.dcm ISO_IR 127 '\xe2\xc8\xc7\xe6\xea^\xe4\xe6\xd2\xc7\xd1' -chrFren.dcm ISO_IR 100 'Buc^J\xe9r\xf4me' -chrFrenMulti.dcm ISO_IR 100 'Buc^J\xe9r\xf4me' -chrGerm.dcm ISO_IR 100 '\xc4neas^R\xfcdiger' -chrGreek.dcm ISO_IR 126 '\xc4\xe9\xef\xed\xf5\xf3\xe9\xef\xf2' -chrH31.dcm ['', 'ISO 2022 IR 87'] 'Yamada^Tarou=\x1b$B;3ED\x1b(B^\x1b$BB@O:\x1b(B=\x1b$B$d$^$@\x1b(B^\x1b$B$?$m$&\x1b(B' -chrH32.dcm ['ISO 2022 IR 13', 'ISO 2022 IR 87'] '\xd4\xcf\xc0\xde^\xc0\xdb\xb3=\x1b$B;3ED\x1b(J^\x1b$BB@O:\x1b(J=\x1b$B$d$^$@\x1b(J^\x1b$B$?$m$&\x1b(J' -chrHbrw.dcm ISO_IR 138 '\xf9\xf8\xe5\xef^\xe3\xe1\xe5\xf8\xe4' -chrI2.dcm ['', 'ISO 2022 IR 149'] 'Hong^Gildong=\x1b$)C\xfb\xf3^\x1b$)C\xd1\xce\xd4\xd7=\x1b$)C\xc8\xab^\x1b$)C\xb1\xe6\xb5\xbf' -chrRuss.dcm ISO_IR 144 '\xbb\xee\xdace\xdc\xd1yp\xd3' -chrX1.dcm ISO_IR 192 'Wang^XiaoDong=\xe7\x8e\x8b^\xe5\xb0\x8f\xe6\x9d\xb1=' -chrX2.dcm GB18030 'Wang^XiaoDong=\xcd\xf5^\xd0\xa1\xb6\xab=' - -Other -===== -chrFrenMulti.dcm is a modified version of chrFren.dcm with multi-valued PN and LO for testing decoding Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/CT_small.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/CT_small.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/ExplVR_BigEnd.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/ExplVR_BigEnd.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/image_dfl.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/image_dfl.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/JPEG2000.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/JPEG2000.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/JPEG-LL.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/JPEG-LL.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/JPEG-lossy.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/JPEG-lossy.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/MR_small.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/MR_small.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/nested_priv_SQ.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/nested_priv_SQ.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/no_meta_group_length.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/no_meta_group_length.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/priv_SQ.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/priv_SQ.dcm differ diff -Nru pydicom-0.9.8/dicom/testfiles/README.txt pydicom-0.9.9/dicom/testfiles/README.txt --- pydicom-0.9.8/dicom/testfiles/README.txt 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/testfiles/README.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,60 +0,0 @@ -Test Files used for testing pydicom ------------------------------------ -I obtained images to test the pydicom code, and revised them as follow: - * images were often downsized to keep the total file size quite small (typically <50K-ish). I wanted unittests for the code where I could run a number of tests quickly, and with files I could include in the source (and binary) distributions without bloating them too much - * In some cases, the original files have been binary edited to replace anything that looks like a real patient name - -I believe there is no restriction on using any of these files in this manner. - -CT_small.dcm - * CT image, Explicit VR, LittleEndian - * Downsized to 128x128 from 'CT1_UNC', ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ - -MR_small.dcm - * MR image, Explicit VR, LittleEndian - * Downsized to 64x64 from 'MR1_UNC', ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ - -JPEG2000.dcm - * JPEG 2000 small image - * to test JPEG transfer syntax, eventually JPEG decompression - * Edited 'NM1_J2KI' from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04 - -image_dfl.dcm - * Compressed (using "deflate" zlib compression) after FileMeta - * 'image_dfl' from http://www.dclunie.com/images/compressed/ - -ExplVR_BigEnd.dcm - * Big Endian test image - * Also is Samples Per Pixel of 3 (RGB) - * Downsized to 60x80 from 'US-RGB-8-epicard' at http://www.barre.nom.fr/medical/samples/ - -JPEG-LL.dcm - * NM1_JPLL from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ - * Transfer Syntax 1.2.840.10008.1.2.4.70: JPEG Lossless Default Process 14 [Selection Value 1] - -JPEG-lossy.dcm - * NM1_JPLY from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ - * 1.2.840.10008.1.2.4.51 Default Transfer Syntax for Lossy JPEG 12-bit - -Created by a commercial radiotherapy treatment planning system and modified: -rtplan.dcm Implicit VR, Little Endian -rtdose.dcm Implicit VR, Little Endian - - -chr*.dcm - * Character set files for testing (0008,0005) Specific Character Set - * from http://www.dclunie.com/images/charset/SCS* - * downsized to 32x32 since pixel data is irrelevant for these (test pattern only) - -test_SR.dcm - * from ftp://ftp.dcmtk.org/pub/dicom/offis/software/dscope/dscope360/support/srdoc103.zip, file "test.dcm" - * Structured Reporting example, many levels of nesting - -priv_SQ.dcm - * a file with an undefined length SQ item in a private tag. - * minimal data elements kept from example files in issues 91, 97, 98 - -zipMR.gz - * a gzipped version of MR_small.dcm - * used for checking that deferred read reopens as zip again (issue 103) - Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/reportsi.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/reportsi.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/rtdose.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/rtdose.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/rtplan.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/rtplan.dcm differ diff -Nru pydicom-0.9.8/dicom/testfiles/rtplan.dump pydicom-0.9.9/dicom/testfiles/rtplan.dump --- pydicom-0.9.8/dicom/testfiles/rtplan.dump 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/testfiles/rtplan.dump 1970-01-01 00:00:00.000000000 +0000 @@ -1,250 +0,0 @@ -0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -... -0070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0080 : 44 49 43 4d DICOM prefix 'DICM' ------------- File meta information ------------------------------------- -(Always Explicit VR, Little Endian) -0084 : 02 00 00 00 (0002,0000) -0088 : 55 4c UL -008A : 04 00 value length 4 bytes -008C : 9c 00 00 00 value = 156 - -0090 : 02 00 01 00 (0002, 0001) -0094 : 4f 42 Explicit VR 'OB' -0096 : 00 00 2-byte reserved -0098 : 02 00 00 00 value length = 2 -009c : 00 01 - -009e : 02 00 02 00 (0002, 0002) Media Storage SOP Class UID -00a2 : 55 49 Explicit VR 'UI' -00a4 : 1e 00 value length 30 bytes -00a6 : 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 1.2.840.10008.5. -00b6 : 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 1.4.1.1.481.5 -00c3 00 pad to even length - -00c4 : 02 00 03 00 (0002, 0003) -00c8 : 55 49 Explicit VR 'UI' -00ca : 2a 00 Value length 42 bytes -00cc : 31 2e 32 2e 39 39 39 2e 39 39 39 2e 39 39 2e 39 1.2.999.999.99.9 -00dc : 2e 39 39 39 39 2e 39 39 39 39 2e 32 30 30 33 30 .9999.9999.20030 -00ec : 39 30 33 31 35 30 30 32 33 903150023 -00f5 : 00 pad to even length - -00f6 : 02 00 10 00 55 49 12 00 31 2e .....UI..1. -0100 : 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 00 2.840.10008.1.2. -0110 : 02 00 12 00 55 49 14 00 31 2e 32 2e 38 38 38 2e ....UI..1.2.888. -0120 : 38 38 38 2e 38 38 2e 38 2e 38 2e 38 08 00 - 12 00 888.88.8.8.8.... -0130 : 08 00 00 00 32 30 30 33 30 39 30 33 08 00 13 00 ....20030903.... -0140 : 06 00 00 00 31 35 30 30 33 31 08 00 16 00 1e 00 ....150031...... -0150 : 00 00 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e ..1.2.840.10008. -0160 : 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 00 5.1.4.1.1.481.5. -0170 : 08 00 18 00 2a 00 00 00 31 2e 32 2e 37 37 37 2e ....*...1.2.777. -0180 : 37 37 37 2e 37 37 2e 37 2e 37 37 37 37 2e 37 37 777.77.7.7777.77 -0190 : 37 37 2e 32 30 30 33 30 39 30 33 31 35 30 30 32 77.2003090315002 -01a0 : 33 00 08 00 20 00 08 00 00 00 32 30 30 33 30 37 3... .....200307 -01b0 : 31 36 08 00 30 00 06 00 00 00 31 35 33 35 35 37 16..0.....153557 -01c0 : 08 00 50 00 00 00 00 00 08 00 60 00 06 00 00 00 ..P.......`..... -01d0 : 52 54 50 4c 41 4e 08 00 70 00 16 00 00 00 4d 61 RTPLAN..p.....Ma -01e0 : 6e 75 66 61 63 74 75 72 65 72 20 6e 61 6d 65 20 nufacturer name -01f0 : 68 65 72 65 08 00 80 00 04 00 00 00 48 65 72 65 here........Here -0200 : 08 00 90 00 00 00 00 00 08 00 10 10 0c 00 00 00 ................ -0210 : 43 4f 4d 50 55 54 45 52 30 30 32 20 08 00 40 10 COMPUTER002 ..@. -0220 : 10 00 00 00 52 61 64 69 61 74 69 6f 6e 20 54 68 ....Radiation Th -0230 : 65 72 61 70 08 00 70 10 08 00 00 00 6f 70 65 72 erap..p.....oper -0240 : 61 74 6f 72 08 00 90 10 24 00 00 00 54 72 65 61 ator....$...Trea -0250 : 74 6d 65 6e 74 20 50 6c 61 6e 6e 69 6e 67 20 53 tment Planning S -0260 : 79 73 74 65 6d 20 6e 61 6d 65 20 68 65 72 65 20 ystem name here -0270 : 10 00 10 00 12 00 00 00 4c 61 73 74 5e 46 69 72 ........Last^Fir -0280 : 73 74 5e 6d 69 64 5e 70 72 65 10 00 20 00 08 00 st^mid^pre.. ... -0290 : 00 00 69 64 30 30 30 30 31 20 10 00 30 00 00 00 ..id00001 ..0... -02a0 : 00 00 10 00 40 00 02 00 00 00 4f 20 18 00 20 10 ....@.....O .. . -02b0 : 0a 00 00 00 73 6f 66 74 77 61 72 65 56 31 20 00 ....softwareV1 . -02c0 : 0d 00 30 00 00 00 31 2e 32 32 2e 33 33 33 2e 34 ..0...1.22.333.4 -02d0 : 2e 35 35 35 35 35 35 2e 36 2e 37 37 37 37 37 37 .555555.6.777777 -02e0 : 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777 -02f0 : 37 37 37 37 37 37 20 00 0e 00 1a 00 00 00 31 2e 777777 .......1. -0300 : 32 2e 33 33 33 2e 34 34 34 2e 35 35 2e 36 2e 37 2.333.444.55.6.7 -0310 : 37 37 37 2e 38 38 38 38 20 00 10 00 06 00 00 00 777.8888 ....... -0320 : 73 74 75 64 79 31 20 00 11 00 02 00 00 00 32 20 study1 .......2 -0330 : 0a 30 02 00 06 00 00 00 50 6c 61 6e 31 20 0a 30 .0......Plan1 .0 -0340 : 03 00 06 00 00 00 50 6c 61 6e 31 20 0a 30 06 00 ......Plan1 .0.. -0350 : 08 00 00 00 32 30 30 33 30 39 30 33 0a 30 07 00 ....20030903.0.. -0360 : 06 00 00 00 31 35 30 30 32 33 0a 30 0c 00 08 00 ....150023.0.... -0370 : 00 00 50 41 54 49 45 4e 54 20 0a 30 10 00 44 01 ..PATIENT .0..D. -0380 : 00 00 fe ff 00 e0 aa 00 00 00 0a 30 12 00 02 00 ...........0.... -0390 : 00 00 31 20 0a 30 14 00 0c 00 00 00 43 4f 4f 52 ..1 .0......COOR -03a0 : 44 49 4e 41 54 45 53 20 0a 30 16 00 04 00 00 00 DINATES .0...... -03b0 : 69 73 6f 20 0a 30 18 00 32 00 00 00 32 33 39 2e iso .0..2...239. -03c0 : 35 33 31 32 35 30 30 30 30 30 30 30 5c 32 33 39 531250000000.239 -03d0 : 2e 35 33 31 32 35 30 30 30 30 30 30 30 5c 2d 37 .531250000000.-7 -03e0 : 34 31 2e 38 37 30 30 30 30 30 30 30 30 30 0a 30 41.87000000000.0 -03f0 : 20 00 0e 00 00 00 4f 52 47 41 4e 5f 41 54 5f 52 .....ORGAN_AT_R -0400 : 49 53 4b 20 0a 30 23 00 10 00 00 00 37 35 2e 30 ISK .0#.....75.0 -0410 : 30 30 30 30 30 30 30 30 30 30 30 30 0a 30 2c 00 000000000000.0,. -0420 : 10 00 00 00 37 35 2e 30 30 30 30 30 30 30 30 30 ....75.000000000 -0430 : 30 30 30 30 fe ff 00 e0 8a 00 00 00 0a 30 12 00 0000.........0.. -0440 : 02 00 00 00 32 20 0a 30 14 00 0c 00 00 00 43 4f ....2 .0......CO -0450 : 4f 52 44 49 4e 41 54 45 53 20 0a 30 16 00 04 00 ORDINATES .0.... -0460 : 00 00 50 54 56 20 0a 30 18 00 32 00 00 00 32 33 ..PTV .0..2...23 -0470 : 39 2e 35 33 31 32 35 30 30 30 30 30 30 30 5c 32 9.531250000000.2 -0480 : 33 39 2e 35 33 31 32 35 30 30 30 30 30 30 30 5c 39.531250000000. -0490 : 2d 37 35 31 2e 38 37 30 30 30 30 30 30 30 30 30 -751.87000000000 -04a0 : 0a 30 20 00 06 00 00 00 54 41 52 47 45 54 0a 30 .0 .....TARGET.0 -04b0 : 26 00 10 00 00 00 33 30 2e 38 32 36 32 30 33 30 &.....30.8262030 -04c0 : 30 30 30 30 30 30 0a 30 70 00 b4 00 00 00 fe ff 000000.0p....... -04d0 : 00 e0 ac 00 00 00 0a 30 71 00 02 00 00 00 31 20 .......0q.....1 -04e0 : 0a 30 78 00 02 00 00 00 33 30 0a 30 80 00 02 00 .0x.....30.0.... -04f0 : 00 00 31 20 0a 30 a0 00 02 00 00 00 30 20 0c 30 ..1 .0......0 .0 -0500 : 04 00 7c 00 00 00 fe ff 00 e0 74 00 00 00 0a 30 ..|.......t....0 -0510 : 82 00 32 00 00 00 32 33 39 2e 35 33 31 32 35 30 ..2...239.531250 -0520 : 30 30 30 30 30 30 5c 32 33 39 2e 35 33 31 32 35 000000.239.53125 -0530 : 30 30 30 30 30 30 30 5c 2d 37 35 31 2e 38 37 30 0000000.-751.870 -0540 : 30 30 30 30 30 30 30 30 0a 30 84 00 10 00 00 00 00000000.0...... -0550 : 31 2e 30 32 37 35 34 30 31 30 30 30 30 30 30 30 1.02754010000000 -0560 : 0a 30 86 00 10 00 00 00 31 31 36 2e 30 30 33 36 .0......116.0036 -0570 : 36 39 37 30 30 30 30 30 0c 30 06 00 02 00 00 00 69700000.0...... -0580 : 31 20 -0582 : 0a 30 b0 00 (300a, 00b0) Beam Sequence - Implicit VR 'SQ' -0586 : d0 03 00 00 length 976 bytes - 058a : fe ff 00 e0 Item tag (FFFE, E000) - 058e : c8 03 00 00 Item length 968 bytes - - 0592 : 08 00 70 00 (0008, 0070) Manufacturer - Implicit VR 'LO' - 0596 : 0a 00 00 00 Value length 10 bytes - 059a : 4c 69 6e 61 63 20 63 6f 2e Linac co. - 05a3 : 20 pad to even length with blank - - 05a4 : 08 00 80 00 (0008, 0080) Institution Name - 04 00 00 00 Value length 4 - 48 65 72 65 value 'Here' - - 05b0 : 08 00 40 10 (0008, 1040) Institutional Department Name - 10 00 00 00 value length 16 - 52 61 64 69 61 74 69 6f 6e 20 54 68 65 72 61 70 value 'Radiation Therap' - 05c8 : 08 00 90 10 (0008, 1090) Manufacturer's Model Name - 0a 00 00 00 value length 10 - 05d0 : 5a 61 70 70 65 72 39 30 30 30 value 'Zapper9000' - - 18 00 00 10 (0018, 1000) Device Serial Number - 04 00 00 00 value length 4 - 05e2 : 39 39 39 39 value '9999' - - 0a 30 b2 00 (300a, 00b2) Treatment Machine Name - 08 00 00 00 value length 8 - 75 6e 69 74 30 30 31 20 value 'unit001 " - - 05f5 : 0a 30 b3 00 (300a, 00b3) Primary Dosimeter Unit - 02 00 00 00 value length 2 - 4d 55 value 'MU' - 0600 : 0a 30 b4 00 (300a, 00b4) Source-Axis Distance - 10 00 00 00 value length 16 - 31 30 30 30 2e 30 30 30 30 30 30 30 30 30 30 30 value '1000.00000000000' - - 0608: 0a 30 b6 00 (300a, 00b6) Beam Limiting Device Sequence - 38 00 00 00 length 56 - 0620 : fe ff 00 e0 Item tag (FFFE, E000) - 14 00 00 00 Item length 20 - - 0a 30 b8 00 (300a, 00b8) RT Beam Limiting Device Type - 02 00 00 00 value length 2 - 58 20 value 'X ' - - 0a 30 bc 00 (300a, 00bc) Number of Leaf/Jaw Pairs - 02 00 00 00 value length 2 - 31 20 value '1 ' - fe ff 00 e0 Item tag (FFFE, E000) - 14 00 00 00 Item length 20 - 0a 30 b8 00 (300a, 00b8) RT Beam Limiting Device Type - 02 00 00 00 value length 2 - 59 20 value 'Y ' - 0a 30 bc 00 (300a, 00bc) Number of Leaf/Jaw Pairs - - 0652 : 02 00 00 00 value length 2 - 31 20 value '1 ' - 0a 30 c0 00 (300a, 00c0) Beam Number - 02 00 00 00 value length 2 - 0660 : 31 20 value '1 ' - 0a 30 c2 00 (300a, 00c2) Beam Name - 08 00 00 00 value length 8 - 46 69 65 6c 64 20 31 20 'Field 1 ' -0672 : 0a 30 c4 00 06 00 00 00 53 54 41 54 49 43 1 .0......STATIC -0680 : 0a 30 c6 00 06 00 00 00 50 48 4f 54 4f 4e 0a 30 .0......PHOTON.0 -0690 : ce 00 0a 00 00 00 54 52 45 41 54 4d 45 4e 54 20 ......TREATMENT -06a0 : 0a 30 d0 00 02 00 00 00 30 20 0a 30 e0 00 02 00 .0......0 .0.... -06b0 : 00 00 30 20 0a 30 ed 00 02 00 00 00 30 20 0a 30 ..0 .0......0 .0 -06c0 : f0 00 02 00 00 00 30 20 0a 30 0e 01 10 00 00 00 ......0 .0...... -06d0 : 31 2e 30 30 30 30 30 30 30 30 30 30 30 30 30 30 1.00000000000000 -06e0 : 0a 30 10 01 02 00 00 00 32 20 0a 30 11 01 5e 02 .0......2 .0..^. -06f0 : 00 00 fe ff 00 e0 d4 01 00 00 0a 30 12 01 02 00 ...........0.... -0700 : 00 00 30 20 0a 30 14 01 10 00 00 00 36 2e 30 30 ..0 .0......6.00 -0710 : 30 30 30 30 30 30 30 30 30 30 30 30 0a 30 15 01 000000000000.0.. -0720 : 10 00 00 00 36 35 30 2e 30 30 30 30 30 30 30 30 ....650.00000000 -0730 : 30 30 30 30 0a 30 1a 01 78 00 00 00 fe ff 00 e0 0000.0..x....... -0740 : 34 00 00 00 0a 30 b8 00 02 00 00 00 58 20 0a 30 4....0......X .0 -0750 : 1c 01 22 00 00 00 2d 31 30 30 2e 30 30 30 30 30 .."...-100.00000 -0760 : 30 30 30 30 30 30 5c 31 30 30 2e 30 30 30 30 30 000000.100.00000 -0770 : 30 30 30 30 30 30 30 20 fe ff 00 e0 34 00 00 00 0000000 ....4... -0780 : 0a 30 b8 00 02 00 00 00 59 20 0a 30 1c 01 22 00 .0......Y .0..". -0790 : 00 00 2d 31 30 30 2e 30 30 30 30 30 30 30 30 30 ..-100.000000000 -07a0 : 30 30 5c 31 30 30 2e 30 30 30 30 30 30 30 30 30 00.100.000000000 -07b0 : 30 30 30 20 0a 30 1e 01 04 00 00 00 30 2e 30 20 000 .0......0.0 -07c0 : 0a 30 1f 01 04 00 00 00 4e 4f 4e 45 0a 30 20 01 .0......NONE.0 . -07d0 : 04 00 00 00 30 2e 30 20 0a 30 21 01 04 00 00 00 ....0.0 .0!..... -07e0 : 4e 4f 4e 45 0a 30 22 01 04 00 00 00 30 2e 30 20 NONE.0".....0.0 -07f0 : 0a 30 23 01 04 00 00 00 4e 4f 4e 45 0a 30 25 01 .0#.....NONE.0%. -0800 : 04 00 00 00 30 2e 30 20 0a 30 26 01 04 00 00 00 ....0.0 .0&..... -0810 : 4e 4f 4e 45 0a 30 28 01 00 00 00 00 0a 30 29 01 NONE.0(......0). -0820 : 00 00 00 00 0a 30 2a 01 00 00 00 00 0a 30 2c 01 .....0*......0,. -0830 : 32 00 00 00 32 33 35 2e 37 31 31 31 37 32 38 33 2...235.71117283 -0840 : 33 32 39 32 5c 32 34 34 2e 31 33 35 34 33 37 31 3292.244.1354371 -0850 : 31 30 37 38 32 5c 2d 37 32 34 2e 39 37 38 31 35 10782.-724.97815 -0860 : 34 30 39 39 31 38 0a 30 30 01 10 00 00 00 38 39 409918.00.....89 -0870 : 38 2e 34 32 39 36 36 34 38 33 31 33 30 39 0a 30 8.429664831309.0 -0880 : 34 01 04 00 00 00 30 2e 30 20 0c 30 50 00 3c 00 4.....0.0 .0P.<. -0890 : 00 00 -fe ff 00 e0 -16 00 00 00 0a 30 0c 01 04 00 ...........0.... -08a0 : 00 00 30 2e 30 20 0c 30 51 00 02 00 00 00 31 20 ..0.0 .0Q.....1 -08b0 : fe ff 00 e0 16 00 00 00 0a 30 0c 01 04 00 00 00 .........0...... -08c0 : 30 2e 30 20 0c 30 51 00 02 00 00 00 32 20 fe ff 0.0 .0Q.....2 .. -08d0 : 00 e0 7a 00 00 00 0a 30 12 01 02 00 00 00 31 20 ..z....0......1 -08e0 : 0a 30 34 01 10 00 00 00 31 2e 30 30 30 30 30 30 .04.....1.000000 -08f0 : 30 30 30 30 30 30 30 30 0c 30 50 00 50 00 00 00 00000000.0P.P... -0900 : fe ff 00 e0 1e 00 00 00 0a 30 0c 01 0c 00 00 00 .........0...... -0910 : 39 2e 39 39 30 32 36 38 30 65 2d 31 0c 30 51 00 9.9902680e-1.0Q. -0920 : 02 00 00 00 31 20 fe ff 00 e0 22 00 00 00 0a 30 ....1 ...."....0 -0930 : 0c 01 10 00 00 00 31 2e 30 30 30 30 30 30 30 30 ......1.00000000 -0940 : 30 30 30 30 30 30 0c 30 51 00 02 00 00 00 32 20 000000.0Q.....2 -0950 : 0c 30 6a 00 02 00 00 00 31 20 -===== ??? end of SQ????? -095a : 0a 30 80 01 (300a, 0180) Patient Setup Sequence - Implicit VR 'SQ' -095e : 26 00 00 00 Length 38 bytes -0962 : fe ff 00 e0 (fffe, e000) Item Tag -0966 : 1e 00 00 00 Item length 30 bytes -096a : 18 00 00 51 (0018, 5100) Patient Position - Implicit VR 'CS' -096e : 04 00 00 00 Value length 4 bytes -0973 : 48 46 53 HFS -0975 : 20 pad to even length -0976 : 0a 30 82 01 (300a, 0182) - 02 00 00 00 31 20 ..HFS .0......1 -0980 : 0a 30 b2 01 00 00 00 00 0c 30 02 00 74 00 00 00 .0.......0..t... -0990 : fe ff 00 e0 6c 00 00 00 08 00 50 11 1e 00 00 00 ....l.....P..... -09a0 : 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 1.2.840.10008.5. -09b0 : 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 00 08 00 1.4.1.1.481.5... -09c0 : 55 11 2a 00 00 00 31 2e 39 2e 39 39 39 2e 39 39 U.*...1.9.999.99 -09d0 : 39 2e 39 39 2e 39 2e 39 39 39 39 2e 39 39 39 39 9.99.9.9999.9999 -09e0 : 2e 32 30 30 33 30 39 30 33 31 34 35 31 32 38 00 .20030903145128. -09f0 : 0a 30 55 00 0c 00 00 00 50 52 45 44 45 43 45 53 .0U.....PREDECES -0a00 : 53 4f 52 20 0c 30 60 00 52 00 00 00 fe ff 00 e0 SOR .0`.R....... -0a10 : 4a 00 00 00 08 00 50 11 1e 00 00 00 31 2e 32 2e J.....P.....1.2. -0a20 : 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 840.10008.5.1.4. -0a30 : 31 2e 31 2e 34 38 31 2e 33 00 08 00 55 11 1c 00 1.1.481.3...U... -0a40 : 00 00 31 2e 32 2e 33 33 33 2e 34 34 34 2e 35 35 ..1.2.333.444.55 -0a50 : 2e 36 2e 37 37 37 37 2e 38 38 38 38 38 00 0e 30 .6.7777.88888..0 -0a60 : 02 00 0a 00 00 00 55 4e 41 50 50 52 4f 56 45 44 ......UNAPPROVED -0a70 : Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/rtplan_truncated.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/rtplan_truncated.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/rtstruct.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/rtstruct.dcm differ diff -Nru pydicom-0.9.8/dicom/testfiles/rtstruct.dump pydicom-0.9.9/dicom/testfiles/rtstruct.dump --- pydicom-0.9.8/dicom/testfiles/rtstruct.dump 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/testfiles/rtstruct.dump 1970-01-01 00:00:00.000000000 +0000 @@ -1,124 +0,0 @@ -(0008, 0005) Specific Character Set CS: 'ISO_IR 100' -(0008, 0012) Instance Creation Date DA: '20091223' -(0008, 0013) Instance Creation Time TM: '123840' -(0008, 0014) Instance Creator UID UI: 1.2.826.0.1.3680043.8.498 -(0008, 0016) SOP Class UID UI: RT Structure Set Storage -(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001 -(0008, 0020) Study Date DA: '' -(0008, 0030) Study Time TM: '' -(0008, 0050) Accession Number SH: '1' -(0008, 0060) Modality CS: 'RTSTRUCT' -(0008, 0070) Manufacturer LO: 'pydicom' -(0008, 0090) Referring Physician's Name PN: '' -(0008, 1010) Station Name SH: 'station1' -(0008, 1070) Operators' Name PN: 'dmason' -(0008, 1090) Manufacturer's Model Name LO: 'TPS' -(0010, 0010) Patient's Name PN: 'Test^Phantom30sep' -(0010, 0020) Patient ID LO: 'tPhantom30sep' -(0010, 0030) Patient's Birth Date DA: '19691231' -(0010, 0040) Patient's Sex CS: 'M' -(0018, 1020) Software Version(s) LO: '0.9.3' -(0018, 5100) Patient Position CS: 'HFS' -(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.1 -(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.1.1 -(0020, 0010) Study ID SH: 'sep30' -(0020, 0011) Series Number IS: '1' -(0020, 0013) Instance Number IS: '1' -(3006, 0002) Structure Set Label SH: 'sep30' -(3006, 0004) Structure Set Name LO: 'sep30' -(3006, 0008) Structure Set Date DA: '20091223' -(3006, 0009) Structure Set Time TM: '122507' -(3006, 0010) Referenced Frame of Reference Sequence 1 item(s) ---- - (0020, 0052) Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 - (3006, 0012) RT Referenced Study Sequence 1 item(s) ---- - (0008, 1150) Referenced SOP Class UID UI: Detached Study Management SOP Class - (0008, 1155) Referenced SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2.1 - (3006, 0014) RT Referenced Series Sequence 1 item(s) ---- - (0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2.1.1 - --------- - --------- - --------- -(3006, 0020) Structure Set ROI Sequence 3 item(s) ---- - (3006, 0022) ROI Number IS: '1' - (3006, 0024) Referenced Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 - (3006, 0026) ROI Name LO: 'patient' - (3006, 0028) ROI Description ST: 'patient' - (3006, 002c) ROI Volume DS: '49200.0' - (3006, 0036) ROI Generation Algorithm CS: 'MANUAL' - --------- - (3006, 0022) ROI Number IS: '2' - (3006, 0024) Referenced Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 - (3006, 0026) ROI Name LO: 'Isocenter 1' - (3006, 0028) ROI Description ST: 'Isocenter Beam 1' - (3006, 0036) ROI Generation Algorithm CS: 'MANUAL' - --------- - (3006, 0022) ROI Number IS: '3' - (3006, 0024) Referenced Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 - (3006, 0026) ROI Name LO: 'Isocenter 2' - (3006, 0028) ROI Description ST: 'Isocenter Beam 2' - (3006, 0036) ROI Generation Algorithm CS: 'MANUAL' - --------- -(3006, 0039) ROI Contour Sequence 3 item(s) ---- - (3006, 002a) ROI Display Color IS: ['220', '160', '120'] - (3006, 0040) Contour Sequence 3 item(s) ---- - (3006, 0042) Contour Geometric Type CS: 'CLOSED_PLANAR' - (3006, 0046) Number of Contour Points IS: '5' - (3006, 0048) Contour Number IS: '1' - (3006, 0050) Contour Data DS: ['-200.0', '150.0', '-200.0', '-200.0', '-150.0', '-200.0', '200.0', '-150.0', '-200.0', '200.0', '150.0', '-200.0', '-200.0', '150.0', '-200.0'] - --------- - (3006, 0042) Contour Geometric Type CS: 'CLOSED_PLANAR' - (3006, 0046) Number of Contour Points IS: '6' - (3006, 0048) Contour Number IS: '2' - (3006, 0050) Contour Data DS: ['200.0', '-0.0', '-190.0', '200.0', '-150.0', '-190.0', '-200.0', '-150.0', '-190.0', '-200.0', '150.0', '-190.0', '200.0', '150.0', '-190.0', '200.0', '-0.0', '-190.0'] - --------- - (3006, 0042) Contour Geometric Type CS: 'CLOSED_PLANAR' - (3006, 0046) Number of Contour Points IS: '6' - (3006, 0048) Contour Number IS: '3' - (3006, 0050) Contour Data DS: ['200.0', '-0.0', '-180.0', '200.0', '-150.0', '-180.0', '-200.0', '-150.0', '-180.0', '-200.0', '150.0', '-180.0', '200.0', '150.0', '-180.0', '200.0', '-0.0', '-180.0'] - --------- - (3006, 0084) Referenced ROI Number IS: '1' - --------- - (3006, 002a) ROI Display Color IS: ['255', '64', '255'] - (3006, 0040) Contour Sequence 1 item(s) ---- - (3006, 0042) Contour Geometric Type CS: 'POINT' - (3006, 0046) Number of Contour Points IS: '1' - (3006, 0048) Contour Number IS: '1' - (3006, 0050) Contour Data DS: ['0.0', '-0.0', '0.0'] - --------- - (3006, 0084) Referenced ROI Number IS: '2' - --------- - (3006, 002a) ROI Display Color IS: ['255', '64', '255'] - (3006, 0040) Contour Sequence 1 item(s) ---- - (3006, 0042) Contour Geometric Type CS: 'POINT' - (3006, 0046) Number of Contour Points IS: '1' - (3006, 0048) Contour Number IS: '1' - (3006, 0050) Contour Data DS: ['0.0', '-0.0', '0.0'] - --------- - (3006, 0084) Referenced ROI Number IS: '3' - --------- -(3006, 0080) RT ROI Observations Sequence 3 item(s) ---- - (3006, 0082) Observation Number IS: '1' - (3006, 0084) Referenced ROI Number IS: '1' - (3006, 0085) ROI Observation Label SH: 'patient' - (3006, 0088) ROI Observation Description ST: 'patient' - (3006, 00a4) RT ROI Interpreted Type CS: 'EXTERNAL' - (3006, 00a6) ROI Interpreter PN: '' - (3006, 00b0) ROI Physical Properties Sequence 1 item(s) ---- - (3006, 00b2) ROI Physical Property CS: 'REL_ELEC_DENSITY' - (3006, 00b4) ROI Physical Property Value DS: '1.000' - --------- - --------- - (3006, 0082) Observation Number IS: '2' - (3006, 0084) Referenced ROI Number IS: '2' - (3006, 0085) ROI Observation Label SH: 'Isocenter 1' - (3006, 0088) ROI Observation Description ST: 'Isocenter Beam 1' - (3006, 00a4) RT ROI Interpreted Type CS: 'ISOCENTER' - (3006, 00a6) ROI Interpreter PN: '' - --------- - (3006, 0082) Observation Number IS: '3' - (3006, 0084) Referenced ROI Number IS: '3' - (3006, 0085) ROI Observation Label SH: 'Isocenter 2' - (3006, 0088) ROI Observation Description ST: 'Isocenter Beam 2' - (3006, 00a4) RT ROI Interpreted Type CS: 'ISOCENTER' - (3006, 00a6) ROI Interpreter PN: '' - --------- \ No newline at end of file diff -Nru pydicom-0.9.8/dicom/testfiles/test.py pydicom-0.9.9/dicom/testfiles/test.py --- pydicom-0.9.8/dicom/testfiles/test.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/testfiles/test.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -# test.py -"""Temporary test file for pydicom development; will change over revisions -as test various things -""" -# Copyright (c) 2012 Darcy Mason -# This file is part of pydicom, relased under an MIT-style license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com -# - -import dicom -# dicom.debug() - -from dicom.valuerep import DS, MultiString -from dicom.multival import MultiValue - -# print("\n\nTry creating MultiValue directly") -s = r"1.2000\2.30000" -m = MultiString(s, DS) - -# print "m=", m -# print "type(m) = ", type(m) -# print "type(m[0]) = ", type(m[0]) -# print "m[0].original_string", m[0].original_string - - -filename = "rtplan.dcm" -print("\n\nTest reading rtplan.dcm and keeping original string for multival DS") -print("---------") -print("First read a file with DS as default float-derived class") -ds = dicom.read_file(filename) -dr = ds.DoseReferenceSequence[0] -drpc0 = dr.DoseReferencePointCoordinates[0] -print("Value of original_string: ".format(drpc0.original_string)) -print("Value of Instance of dose ref pt coord 0: {0:s}".format(str(drpc0))) - -print("---------\nChange to DS decimal and read same file again") -import dicom.config -dicom.config.DS_decimal() - -ds = dicom.read_file(filename) -dr = ds.DoseReferenceSequence[0] -drpc0 = dr.DoseReferencePointCoordinates[0] -print("Value of Instance of dose ref pt coord 0: {0:s}".format(str(drpc0))) Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/test-SR.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/test-SR.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/dicom/testfiles/zipMR.gz and /tmp/faEYoMsZHk/pydicom-0.9.9/dicom/testfiles/zipMR.gz differ diff -Nru pydicom-0.9.8/dicom/_UID_dict.py pydicom-0.9.9/dicom/_UID_dict.py --- pydicom-0.9.8/dicom/_UID_dict.py 2013-01-20 00:37:32.000000000 +0000 +++ pydicom-0.9.9/dicom/_UID_dict.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,295 +0,0 @@ -# _UID_dict.py -""" -Dictionary of UID: (name, type, name_info, is_retired) - -""" -# Auto-generated by make_UID_dict.py""" - -UID_dictionary = { -'1.2.840.10008.1.1': ('Verification SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.1.2': ('Implicit VR Little Endian', 'Transfer Syntax', 'Default Transfer Syntax for DICOM', ''), -'1.2.840.10008.1.2.1': ('Explicit VR Little Endian', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.1.99': ('Deflated Explicit VR Little Endian', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.2': ('Explicit VR Big Endian', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.50': ('JPEG Baseline (Process 1)', 'Transfer Syntax', - 'Default Transfer Syntax for Lossy JPEG 8 Bit Image Compression', ''), -'1.2.840.10008.1.2.4.51': ('JPEG Extended (Process 2 and 4)', 'Transfer Syntax', - 'Default Transfer Syntax for Lossy JPEG 12 Bit Image Compression (Process 4 only)', ''), -'1.2.840.10008.1.2.4.52': ('JPEG Extended (Process 3 and 5)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.53': ('JPEG Spectral Selection, Non-Hierarchical (Process 6 and 8)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.54': ('JPEG Spectral Selection, Non-Hierarchical (Process 7 and 9)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.55': ('JPEG Full Progression, Non-Hierarchical (Process 10 and 12)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.56': ('JPEG Full Progression, Non-Hierarchical (Process 11 and 13)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.57': ('JPEG Lossless, Non-Hierarchical (Process 14)', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.58': ('JPEG Lossless, Non-Hierarchical (Process 15)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.59': ('JPEG Extended, Hierarchical (Process 16 and 18)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.60': ('JPEG Extended, Hierarchical (Process 17 and 19)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.61': ('JPEG Spectral Selection, Hierarchical (Process 20 and 22)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.62': ('JPEG Spectral Selection, Hierarchical (Process 21 and 23)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.63': ('JPEG Full Progression, Hierarchical (Process 24 and 26)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.64': ('JPEG Full Progression, Hierarchical (Process 25 and 27)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.65': ('JPEG Lossless, Hierarchical (Process 28)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.66': ('JPEG Lossless, Hierarchical (Process 29)', 'Transfer Syntax', '', 'Retired'), -'1.2.840.10008.1.2.4.70': ('JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])', - 'Transfer Syntax', 'Default Transfer Syntax for Lossless JPEG Image Compression', ''), -'1.2.840.10008.1.2.4.80': ('JPEG-LS Lossless Image Compression', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.81': ('JPEG-LS Lossy (Near-Lossless) Image Compression', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.90': ('JPEG 2000 Image Compression (Lossless Only)', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.91': ('JPEG 2000 Image Compression', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.92': ('JPEG 2000 Part 2 Multi-component Image Compression (Lossless Only)', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.93': ('JPEG 2000 Part 2 Multi-component Image Compression', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.94': ('JPIP Referenced', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.95': ('JPIP Referenced Deflate', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.4.100': ('MPEG2 Main Profile @ Main Level', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.5': ('RLE Lossless', 'Transfer Syntax', '', ''), -'1.2.840.10008.1.2.6.1 ': ('RFC 2557 MIME encapsulation ', 'Transfer Syntax ', '', ''), -'1.2.840.10008.1.2.6.2': ('XML Encoding', 'Transfer Syntax ', '', ''), -'1.2.840.10008.1.3.10': ('Media Storage Directory Storage', 'SOP Class', '', ''), -'1.2.840.10008.1.4.1.1': ('Talairach Brain Atlas Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.2': ('SPM2 T1 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.3': ('SPM2 T2 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.4': ('SPM2 PD Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.5': ('SPM2 EPI Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.6': ('SPM2 FIL T1 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.7': ('SPM2 PET Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.8': ('SPM2 TRANSM Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.9': ('SPM2 SPECT Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.10': ('SPM2 GRAY Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.11': ('SPM2 WHITE Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.12': ('SPM2 CSF Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.13': ('SPM2 BRAINMASK Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.14': ('SPM2 AVG305T1 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.15': ('SPM2 AVG152T1 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.16': ('SPM2 AVG152T2 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.17': ('SPM2 AVG152PD Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.1.18': ('SPM2 SINGLESUBJT1 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.2.1': ('ICBM 452 T1 Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.4.2.2': ('ICBM Single Subject MRI Frame of Reference', 'Well-known frame of reference', '', ''), -'1.2.840.10008.1.9': ('Basic Study Content Notification SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.1.20.1': ('Storage Commitment Push Model SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.1.20.1.1': ('Storage Commitment Push Model SOP Instance', 'Well-known SOP Instance', '', ''), -'1.2.840.10008.1.20.2': ('Storage Commitment Pull Model SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.1.20.2.1': ('Storage Commitment Pull Model SOP Instance', 'Well-known SOP Instance', '', 'Retired'), -'1.2.840.10008.1.40': ('Procedural Event Logging SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.1.40.1': ('Procedural Event Logging SOP Instance', 'Well-known SOP Instance', '', ''), -'1.2.840.10008.1.42': ('Substance Administration Logging SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.1.42.1': ('Substance Administration Logging SOP Instance', 'Well-known SOP Instance', '', ''), -'1.2.840.10008.2.6.1': ('DICOM UID Registry', 'DICOM UIDs as a Coding Scheme', '', ''), -'1.2.840.10008.2.16.4': ('DICOM Controlled Terminology', 'Coding Scheme', '', ''), -'1.2.840.10008.3.1.1.1': ('DICOM Application Context Name', 'Application Context Name', '', ''), -'1.2.840.10008.3.1.2.1.1': ('Detached Patient Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.1.4': ('Detached Patient Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.2.1': ('Detached Visit Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.3.1': ('Detached Study Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.3.2': ('Study Component Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.3.3': ('Modality Performed Procedure Step SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.3.1.2.3.4': ('Modality Performed Procedure Step Retrieve SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.3.1.2.3.5': ('Modality Performed Procedure Step Notification SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.3.1.2.5.1': ('Detached Results Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.5.4': ('Detached Results Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.5.5': ('Detached Study Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), -'1.2.840.10008.3.1.2.6.1': ('Detached Interpretation Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.4.2': ('Storage Service Class', 'Service Class', '', ''), -'1.2.840.10008.5.1.1.1': ('Basic Film Session SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.2': ('Basic Film Box SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.4': ('Basic Grayscale Image Box SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.4.1': ('Basic Color Image Box SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.4.2': ('Referenced Image Box SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.9': ('Basic Grayscale Print Management Meta SOP Class', 'Meta SOP Class', '', ''), -'1.2.840.10008.5.1.1.9.1': ('Referenced Grayscale Print Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.14': ('Print Job SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.15': ('Basic Annotation Box SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.16': ('Printer SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.16.376': ('Printer Configuration Retrieval SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.17': ('Printer SOP Instance', 'Well-known Printer SOP Instance', '', ''), -'1.2.840.10008.5.1.1.17.376': ('Printer Configuration Retrieval SOP Instance', 'Well-known Printer SOP Instance', '', ''), -'1.2.840.10008.5.1.1.18': ('Basic Color Print Management Meta SOP Class', 'Meta SOP Class', '', ''), -'1.2.840.10008.5.1.1.18.1': ('Referenced Color Print Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.22': ('VOI LUT Box SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.23': ('Presentation LUT SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.1.24': ('Image Overlay Box SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.24.1': ('Basic Print Image Overlay Box SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.25': ('Print Queue SOP Instance', 'Well-known Print Queue SOP Instance', '', 'Retired'), -'1.2.840.10008.5.1.1.26': ('Print Queue Management SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.27': ('Stored Print Storage SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.29': ('Hardcopy Grayscale Image Storage SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.30': ('Hardcopy Color Image Storage SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.31': ('Pull Print Request SOP Class', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.32': ('Pull Stored Print Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.1.33': ('Media Creation Management SOP Class UID', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1': ('Computed Radiography Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1.1': ('Digital X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1.1.1': ('Digital X-Ray Image Storage - For Processing', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1.2': ('Digital Mammography X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1.2.1': ('Digital Mammography X-Ray Image Storage - For Processing', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1.3': ('Digital Intra-oral X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.1.3.1': ('Digital Intra-oral X-Ray Image Storage - For Processing', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.2': ('CT Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.2.1': ('Enhanced CT Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.3': ('Ultrasound Multi-frame Image Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.3.1': ('Ultrasound Multi-frame Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.4': ('MR Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.4.1': ('Enhanced MR Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.4.2': ('MR Spectroscopy Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.5': ('Nuclear Medicine Image Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.6': ('Ultrasound Image Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.6.1': ('Ultrasound Image Storage', 'SOP Class', '', ''), -# From Supp 43 -'1.2.840.10008.5.1.4.1.1.6.2': ('Enhanced US Volume Storage', 'SOP Class', '', ''), -# End From Supp 43 -'1.2.840.10008.5.1.4.1.1.7': ('Secondary Capture Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.7.1': ('Multi-frame Single Bit Secondary Capture Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.7.2': ('Multi-frame Grayscale Byte Secondary Capture Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.7.3': ('Multi-frame Grayscale Word Secondary Capture Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.7.4': ('Multi-frame True Color Secondary Capture Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.8': ('Standalone Overlay Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.9': ('Standalone Curve Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.9.1': ('Waveform Storage - Trial', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.9.1.1': ('12-lead ECG Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.1.2': ('General ECG Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.1.3': ('Ambulatory ECG Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.2.1': ('Hemodynamic Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.3.1': ('Cardiac Electrophysiology Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.4.1': ('Basic Voice Audio Waveform Storage', 'SOP Class', '', ''), -# From Supp 43 -'1.2.840.10008.5.1.4.1.1.9.4.2': ('General Audio Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.5.1': ('Arterial Pulse Waveform Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.9.6.1': ('Respiratory Waveform Storage', 'SOP Class', '', ''), -# End From Supp 43 -'1.2.840.10008.5.1.4.1.1.10': ('Standalone Modality LUT Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.11': ('Standalone VOI LUT Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.11.1': ('Grayscale Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.11.2': ('Color Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.11.3': ('Pseudo-Color Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.11.4': ('Blending Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.12.1': ('X-Ray Angiographic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.12.1.1': ('Enhanced XA Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.12.2': ('X-Ray Radiofluoroscopic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.12.2.1': ('Enhanced XRF Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.13.1.1': ('X-Ray 3D Angiographic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.13.1.2': ('X-Ray 3D Craniofacial Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.12.3': ('X-Ray Angiographic Bi-Plane Image Storage', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.20': ('Nuclear Medicine Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.66': ('Raw Data Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.66.1': ('Spatial Registration Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.66.2': ('Spatial Fiducials Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.66.3': ('Deformable Spatial Registration Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.66.4': ('Segmentation Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.67': ('Real World Value Mapping Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1': ('VL Image Storage - Trial', '', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.77.2': ('VL Multi-frame Image Storage - Trial', '', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.77.1.1': ('VL Endoscopic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.1.1': ('Video Endoscopic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.2': ('VL Microscopic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.2.1': ('Video Microscopic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.3': ('VL Slide-Coordinates Microscopic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.4': ('VL Photographic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.4.1': ('Video Photographic Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.5.1': ('Ophthalmic Photography 8 Bit Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.5.2': ('Ophthalmic Photography 16 Bit Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.5.3': ('Stereometric Relationship Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.77.1.5.4': ('Ophthalmic Tomography Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.1': ('Text SR Storage - Trial', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.88.2': ('Audio SR Storage - Trial', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.88.3': ('Detail SR Storage - Trial', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.88.4': ('Comprehensive SR Storage - Trial', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.1.88.11': ('Basic Text SR Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.22': ('Enhanced SR Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.33': ('Comprehensive SR Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.40': ('Procedure Log Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.50': ('Mammography CAD SR Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.59': ('Key Object Selection Document Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.65': ('Chest CAD SR Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.88.67': ('X-Ray Radiation Dose SR Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.104.1': ('Encapsulated PDF Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.104.2': ('Encapsulated CDA Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.128': ('Positron Emission Tomography Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.129': ('Standalone PET Curve Storage', 'SOP Class', '', 'Retired'), -# From Supp 117 -'1.2.840.10008.5.1.4.1.1.130': ('Enhanced PET Image Storage', 'SOP Class', '', ''), -# End From Supp 117 -'1.2.840.10008.5.1.4.1.1.481.1': ('RT Image Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.2': ('RT Dose Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.3': ('RT Structure Set Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.4': ('RT Beams Treatment Record Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.5': ('RT Plan Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.6': ('RT Brachy Treatment Record Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.7': ('RT Treatment Summary Record Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.8': ('RT Ion Plan Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.1.481.9': ('RT Ion Beams Treatment Record Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.1.1': ('Patient Root Query/Retrieve Information Model - FIND', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.1.2': ('Patient Root Query/Retrieve Information Model - MOVE', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.1.3': ('Patient Root Query/Retrieve Information Model - GET', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.2.1': ('Study Root Query/Retrieve Information Model - FIND', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.2.2': ('Study Root Query/Retrieve Information Model - MOVE', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.2.3': ('Study Root Query/Retrieve Information Model - GET', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.3.1': ('Patient/Study Only Query/Retrieve Information Model - FIND', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.2.3.2': ('Patient/Study Only Query/Retrieve Information Model - MOVE', 'SOP Class', '', 'Retired'), -'1.2.840.10008.5.1.4.1.2.3.3': ('Patient/Study Only Query/Retrieve Information Model - GET', 'SOP Class', '', 'Retired'), -# From Supp 119 -'1.2.840.10008.5.1.4.1.2.4.2': ('Composite Instance Root Retrieve - MOVE', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.4.3': ('Composite Instance Root Retrieve - GET', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.1.2.5.3': ('Composite Instance Retrieve Without Bulk Data - GET', 'SOP Class', '', ''), -# End From Supp 119 -'1.2.840.10008.5.1.4.31': ('Modality Worklist Information Model - FIND', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.32.1': ('General Purpose Worklist Information Model - FIND', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.32.2': ('General Purpose Scheduled Procedure Step SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.32.3': ('General Purpose Performed Procedure Step SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.32': ('General Purpose Worklist Management Meta SOP Class', 'Meta SOP Class', '', ''), -'1.2.840.10008.5.1.4.33': ('Instance Availability Notification SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.1': ('RT Beams Delivery Instruction Storage (Supplement 74 Frozen Draft)', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.2': ('RT Conventional Machine Verification (Supplement 74 Frozen Draft)', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.3': ('RT Ion Machine Verification (Supplement 74 Frozen Draft)', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.4': ('Unified Worklist and Procedure Step Service Class', 'Service Class', '', ''), -'1.2.840.10008.5.1.4.34.4.1 ': ('Unified Procedure Step - Push SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.4.2': ('Unified Procedure Step - Watch SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.4.3': ('Unified Procedure Step - Pull SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.4.4': ('Unified Procedure Step - Event SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.34.5 ': ('Unified Worklist and Procedure Step SOP Instance', 'Well-known SOP Instance', '', ''), -'1.2.840.10008.5.1.4.37.1': ('General Relevant Patient Information Query', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.37.2': ('Breast Imaging Relevant Patient Information Query', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.37.3': ('Cardiac Relevant Patient Information Query', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.38.1': ('Hanging Protocol Storage', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.38.2': ('Hanging Protocol Information Model - FIND', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.38.3': ('Hanging Protocol Information Model - MOVE', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.41': ('Product Characteristics Query SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.5.1.4.42': ('Substance Approval Query SOP Class', 'SOP Class', '', ''), -'1.2.840.10008.15.0.3.1': ('dicomDeviceName', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.2': ('dicomDescription', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.3': ('dicomManufacturer', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.4': ('dicomManufacturerModelName', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.5': ('dicomSoftwareVersion', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.6': ('dicomVendorData', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.7': ('dicomAETitle', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.8': ('dicomNetworkConnectionReference', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.9': ('dicomApplicationCluster', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.10': ('dicomAssociationInitiator', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.11': ('dicomAssociationAcceptor', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.12': ('dicomHostname', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.13': ('dicomPort', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.14': ('dicomSOPClass', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.15': ('dicomTransferRole', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.16': ('dicomTransferSyntax', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.17': ('dicomPrimaryDeviceType', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.18': ('dicomRelatedDeviceReference', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.19': ('dicomPreferredCalledAETitle', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.20': ('dicomTLSCyphersuite', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.21': ('dicomAuthorizedNodeCertificateReference', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.22': ('dicomThisNodeCertificateReference', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.23': ('dicomInstalled', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.24': ('dicomStationName', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.25': ('dicomDeviceSerialNumber', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.26': ('dicomInstitutionName', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.27': ('dicomInstitutionAddress', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.28': ('dicomInstitutionDepartmentName', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.29': ('dicomIssuerOfPatientID', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.30': ('dicomPreferredCallingAETitle', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.3.31': ('dicomSupportedCharacterSet', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.1': ('dicomConfigurationRoot', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.2': ('dicomDevicesRoot', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.3': ('dicomUniqueAETitlesRegistryRoot', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.4': ('dicomDevice', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.5': ('dicomNetworkAE', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.6': ('dicomNetworkConnection', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.7': ('dicomUniqueAETitle', 'LDAP OID', '', ''), -'1.2.840.10008.15.0.4.8': ('dicomTransferCapability', 'LDAP OID', '', '')} diff -Nru pydicom-0.9.8/dicom/UID.py pydicom-0.9.9/dicom/UID.py --- pydicom-0.9.8/dicom/UID.py 2013-01-20 00:37:32.000000000 +0000 +++ pydicom-0.9.9/dicom/UID.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,190 +0,0 @@ -# UID.py -"""Dicom Unique identifiers""" -# Copyright (c) 2008 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -import os -import uuid -import time -import datetime -from math import fabs - -from _UID_dict import UID_dictionary - - -class InvalidUID(Exception): - ''' - Throw when DICOM UID is invalid - - Example of invalid UID:: - - >>> uid = '1.2.123.' - ''' - def __init__(self, value): - self.value = value - - def __str__(self): - return repr(self.value) - - -class UID(str): - """Subclass python string so have human-friendly UIDs - - Use like: - uid = UID('1.2.840.10008.1.2.4.50') - then - uid.name, uid.type, uid.info, and uid.is_retired all return - values from the UID_dictionary - - String representation (__str__) will be the name, - __repr__ will be the full 1.2.840.... - """ - def __new__(cls, val): - """Set up new instance of the class""" - # Don't repeat if already a UID class -- then may get the name - # that str(uid) gives rather than the dotted number - if isinstance(val, UID): - return val - else: - if isinstance(val, basestring): - return super(UID, cls).__new__(cls, val.strip()) - else: - raise TypeError("UID must be a string") - - def __init__(self, val): - """Initialize the UID properties - - Sets name, type, info, is_retired, and is_transfer_syntax. - If UID is a transfer syntax, also sets is_little_endian, - is_implicit_VR, and is_deflated boolean values. - """ - # Note normally use __new__ on subclassing an immutable, but here we - # just want to do some pre-processing against the UID dictionary. - # "My" string can never change (it is a python immutable), so is safe - if self in UID_dictionary: - self.name, self.type, self.info, retired = UID_dictionary[self] - self.is_retired = bool(retired) - else: - self.name = str.__str__(self) - self.type, self.info, self.is_retired = (None, None, None) - - # If the UID represents a transfer syntax, store info about that syntax - self.is_transfer_syntax = (self.type == "Transfer Syntax") - if self.is_transfer_syntax: - # Assume a transfer syntax, correct it as necessary - self.is_implicit_VR = True - self.is_little_endian = True - self.is_deflated = False - - if val == '1.2.840.10008.1.2': # implicit VR little endian - pass - elif val == '1.2.840.10008.1.2.1': # ExplicitVRLittleEndian - self.is_implicit_VR = False - elif val == '1.2.840.10008.1.2.2': # ExplicitVRBigEndian - self.is_implicit_VR = False - self.is_little_endian = False - elif val == '1.2.840.10008.1.2.1.99': # DeflatedExplicitVRLittleEndian: - self.is_deflated = True - self.is_implicit_VR = False - else: - # Any other syntax should be Explicit VR Little Endian, - # e.g. all Encapsulated (JPEG etc) are ExplVR-LE by Standard PS 3.5-2008 A.4 (p63) - self.is_implicit_VR = False - - def __str__(self): - """Return the human-friendly name for this UID""" - return self.name - - def __eq__(self, other): - """Override string equality so either name or UID number match passes""" - if str.__eq__(self, other) is True: # 'is True' needed (issue 96) - return True - if str.__eq__(self.name, other) is True: # 'is True' needed (issue 96) - return True - return False - - def is_valid(self): - ''' - Raise an exception is the UID is invalid - - Usage example:: - - >>> invalid_uid = dicom.UID.UID('1.2.345.') - >>> invalid_uid.is_valid(invalid_uid) - InvalidUID: 'Trailing dot at the end of the UID' - >>> valid_uid = dicom.UID.UID('1.2.123') - - ''' - if self[-1] == '.': - raise InvalidUID('Trailing dot at the end of the UID') - - # For python 3, any override of __cmp__ or __eq__ immutable requires - # explicit redirect of hash function to the parent class - # See http://docs.python.org/dev/3.0/reference/datamodel.html#object.__hash__ - - def __hash__(self): - return super(UID, self).__hash__() - -ExplicitVRLittleEndian = UID('1.2.840.10008.1.2.1') -ImplicitVRLittleEndian = UID('1.2.840.10008.1.2') -DeflatedExplicitVRLittleEndian = UID('1.2.840.10008.1.2.1.99') -ExplicitVRBigEndian = UID('1.2.840.10008.1.2.2') - -NotCompressedPixelTransferSyntaxes = [ExplicitVRLittleEndian, - ImplicitVRLittleEndian, - DeflatedExplicitVRLittleEndian, - ExplicitVRBigEndian] - -# Many thanks to the Medical Connections for offering free valid UIDs (http://www.medicalconnections.co.uk/FreeUID.html) -# Their service was used to obtain the following root UID for pydicom: -pydicom_root_UID = '1.2.826.0.1.3680043.8.498.' -pydicom_UIDs = { - pydicom_root_UID + '1': 'ImplementationClassUID', - } - - -def generate_uid(prefix=pydicom_root_UID, truncate=False): - ''' - Generate a dicom unique identifier based on host id, process id and current - time. The max lenght of the generated UID is 64 caracters. - - If the given prefix is ``None``, the UID is generated following the method - described on `David Clunie website - `_ - - Usage example:: - - >>> dicom.UID.generate_uid() - 1.2.826.0.1.3680043.8.498.2913212949509824014974371514 - >>> dicom.UID.generate_uid(None) - 2.25.31215762025423160614120088028604965760 - - This method is inspired from the work of `DCMTK - `_. - - :param prefix: The site root UID. Default to pydicom root UID. - ''' - max_uid_len = 64 - - if prefix is None: - dicom_uid = '2.25.{0}'.format(uuid.uuid1().int) - else: - uid_info = [uuid.getnode(), - fabs(os.getpid()), - datetime.datetime.today().second, - datetime.datetime.today().microsecond] - - suffix = ''.join([str(long(x)) for x in uid_info]) - dicom_uid = ''.join([prefix, suffix]) - - if truncate: - dicom_uid = dicom_uid[:max_uid_len] - - dicom_uid = UID(dicom_uid) - - #This will raise an exception if the UID is invalid - dicom_uid.is_valid() - - return dicom_uid diff -Nru pydicom-0.9.8/dicom/util/dump.py pydicom-0.9.9/dicom/util/dump.py --- pydicom-0.9.8/dicom/util/dump.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/util/dump.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -# dump.py -"""Utility functions used in debugging writing and reading""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from __future__ import print_function -from io import BytesIO - - -def print_character(ordchr): - """Return a printable character, or '.' for non-printable ones.""" - if 31 < ordchr < 126 and ordchr != 92: - return chr(ordchr) - else: - return '.' - - -def filedump(filename, start_address=0, stop_address=None): - """Dump out the contents of a file to a standard hex dump 16 bytes wide""" - fp = file(filename, 'rb') - return hexdump(fp, start_address, stop_address) - - -def datadump(data): - stop_address = len(data) + 1 - fp = BytesIO(data) - print(hexdump(fp, 0, stop_address)) - - -def hexdump(file_in, start_address=0, stop_address=None, showAddress=True): - """Return a formatted string of hex bytes and characters in data. - - This is a utility function for debugging file writing. - - file_in -- a file-like object to get the bytes to show from""" - - str_out = BytesIO() - byteslen = 16 * 3 - 1 # space taken up if row has a full 16 bytes - blanks = ' ' * byteslen - - file_in.seek(start_address) - data = True # dummy to start the loop - while data: - if stop_address and file_in.tell() > stop_address: - break - if showAddress: - str_out.write("%04x : " % file_in.tell()) # address at start of line - data = file_in.read(16) - if not data: - break - row = [ord(x) for x in data] # need ord twice below so convert once - byte_string = ' '.join(["%02x" % x for x in row]) # string of two digit hex bytes - str_out.write(byte_string) - str_out.write(blanks[:byteslen - len(byte_string)]) # if not 16, pad - str_out.write(' ') - str_out.write(''.join([print_character(x) for x in row])) # character rep of bytes - str_out.write("\n") - - return str_out.getvalue() - - -def pretty_print(ds, indent=0, indent_chars=" "): - """Print a dataset directly, with indented levels. - - This is just like Dataset._pretty_str, but more useful for debugging as it - prints each item immediately rather than composing a string, making it - easier to immediately see where an error in processing a dataset starts. - - """ - - strings = [] - indentStr = indent_chars * indent - nextIndentStr = indent_chars * (indent + 1) - for data_element in ds: - if data_element.VR == "SQ": # a sequence - fmt_str = "{0:s}{1:s} {2:s} {3:d} item(s) ---" - new_str = fmt_str.format(indentStr, str(data_element.tag), - data_element.name, len(data_element.value)) - print(new_str) - for dataset in data_element.value: - pretty_print(dataset, indent + 1) - print(nextIndentStr + "---------") - else: - print(indentStr + repr(data_element)) - - -if __name__ == "__main__": - import sys - filename = sys.argv[1] - start_address = 0 - stop_address = None - if len(sys.argv) > 2: # then have start address - start_address = eval(sys.argv[2]) - if len(sys.argv) > 3: - stop_address = eval(sys.argv[3]) - - print(filedump(filename, start_address, stop_address)) diff -Nru pydicom-0.9.8/dicom/util/hexutil.py pydicom-0.9.9/dicom/util/hexutil.py --- pydicom-0.9.8/dicom/util/hexutil.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/util/hexutil.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,40 +0,0 @@ -# hexutil.py -"""Miscellaneous utility routines relating to hex and byte strings""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from binascii import a2b_hex, b2a_hex -from dicom import in_py3 -from dicom.charset import default_encoding - - -def hex2bytes(hexstring): - """Return bytestring for a string of hex bytes separated by whitespace - - This is useful for creating specific byte sequences for testing, using - python's implied concatenation for strings with comments allowed. - Example: - hex_string = ( - "08 00 32 10" # (0008, 1032) SQ "Procedure Code Sequence" - " 08 00 00 00" # length 8 - " fe ff 00 e0" # (fffe, e000) Item Tag - ) - byte_string = hex2bytes(hex_string) - Note in the example that all lines except the first must start with a space, - alternatively the space could end the previous line. - """ - # This works in both 3.x and 2.x because the first conditional evaluates to - # true in 2.x so the difference in bytes constructor doesn't matter - if isinstance(hexstring, bytes): - return a2b_hex(hexstring.replace(b" ", b"")) - else: - return a2b_hex(bytes(hexstring.replace(" ", ""), default_encoding)) - - -def bytes2hex(byte_string): - s = b2a_hex(byte_string) - if in_py3: - s = s.decode() - return " ".join(s[i:i + 2] for i in range(0, len(s), 2)) diff -Nru pydicom-0.9.8/dicom/util/__init__.py pydicom-0.9.9/dicom/util/__init__.py --- pydicom-0.9.8/dicom/util/__init__.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/util/__init__.py 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -# __init__.py diff -Nru pydicom-0.9.8/dicom/valuerep.py pydicom-0.9.9/dicom/valuerep.py --- pydicom-0.9.8/dicom/valuerep.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/valuerep.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,439 +0,0 @@ -# valuerep.py -"""Special classes for DICOM value representations (VR)""" -# Copyright (c) 2008-2012 Darcy Mason -# This file is part of pydicom, released under a modified MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from decimal import Decimal -import dicom.config -from dicom.multival import MultiValue -from dicom import in_py3 - -import logging -logger = logging.getLogger('pydicom') - -default_encoding = "iso8859" # can't import from charset or get circular import - -# For reading/writing data elements, these ones have longer explicit VR format -extra_length_VRs = ('OB', 'OW', 'OF', 'SQ', 'UN', 'UT') - -# VRs that can be affected by character repertoire in (0008,0005) Specific Character Set -# See PS-3.5 (2011), section 6.1.2 Graphic Characters -text_VRs = ('SH', 'LO', 'ST', 'LT', 'UT') # and PN, but it is handled separately. - -import re - -match_string = b''.join([ - b'(?P', - b'(?P[^=\^]*)', - b'\^?(?P[^=\^]*)', - b'\^?(?P[^=\^]*)', - b'\^?(?P[^=\^]*)', - b'\^?(?P[^=\^]*)', - b')', - b'=?(?P[^=]*)', - b'=?(?P[^=]*)$']) - -match_string_uni = re.compile(match_string.decode('iso8859')) -match_string_bytes = re.compile(match_string) - - -class DSfloat(float): - """Store values for DICOM VR of DS (Decimal String) as a float. - - If constructed from an empty string, return the empty string, - not an instance of this class. - - """ - __slots__ = 'original_string' - - def __init__(self, val): - """Store the original string if one given, for exact write-out of same - value later. - """ - # ... also if user changes a data element value, then will get - # a different object, becuase float is immutable. - - if isinstance(val, (str, unicode)): - self.original_string = val - elif isinstance(val, (DSfloat, DSdecimal)) and hasattr(val, 'original_string'): - self.original_string = val.original_string - - def __str__(self): - if hasattr(self, 'original_string'): - return self.original_string - else: - return super(DSfloat, self).__str__() - - def __repr__(self): - return "'" + str(self) + "'" - - -class DSdecimal(Decimal): - """Store values for DICOM VR of DS (Decimal String). - Note: if constructed by an empty string, returns the empty string, - not an instance of this class. - """ - __slots__ = 'original_string' - - def __new__(cls, val): - """Create an instance of DS object, or return a blank string if one is - passed in, e.g. from a type 2 DICOM blank value. - - :param val: val must be a string or a number type which can be - converted to a decimal - """ - # Store this value here so that if the input string is actually a valid - # string but decimal.Decimal transforms it to an invalid string it will - # still be initialized properly - enforce_length = dicom.config.enforce_valid_values - # DICOM allows spaces around the string, but python doesn't, so clean it - if isinstance(val, (str, unicode)): - val = val.strip() - # If the input string is actually invalid that we relax the valid - # value constraint for this particular instance - if len(val) <= 16: - enforce_length = False - if val == '': - return val - if isinstance(val, float) and not dicom.config.allow_DS_float: - msg = ("DS cannot be instantiated with a float value, unless " - "config.allow_DS_float is set to True. It is recommended to " - "convert to a string instead, with the desired number of digits, " - "or use Decimal.quantize and pass a Decimal instance.") - raise TypeError(msg) - if not isinstance(val, Decimal): - val = super(DSdecimal, cls).__new__(cls, val) - if len(str(val)) > 16 and enforce_length: - msg = ("DS value representation must be <= 16 characters by DICOM " - "standard. Initialize with a smaller string, or set config.enforce_valid_values " - "to False to override, " - "or use Decimal.quantize() and initialize with a Decimal instance.") - raise OverflowError(msg) - return val - - def __init__(self, val): - """Store the original string if one given, for exact write-out of same - value later. E.g. if set '1.23e2', Decimal would write '123', but DS - will use the original - """ - # ... also if user changes a data element value, then will get - # a different Decimal, as Decimal is immutable. - if isinstance(val, (str, unicode)): - self.original_string = val - elif isinstance(val, DSbase) and hasattr(val, 'original_string'): - self.original_string = val.original_string - - def __str__(self): - if hasattr(self, 'original_string') and len(self.original_string) <= 16: - return self.original_string - else: - return super(DSdecimal, self).__str__() - - def __repr__(self): - return "'" + str(self) + "'" - -# CHOOSE TYPE OF DS -if dicom.config.use_DS_decimal: - DSclass = DSdecimal -else: - DSclass = DSfloat - - -def DS(val): - """Factory function for creating DS class instances. - Checks for blank string; if so, return that. Else calls DSfloat or DSdecimal - to create the class instance. This avoids overriding __new__ in DSfloat - (which carries a time penalty for large arrays of DS). - Similarly the string clean and check can be avoided and DSfloat called - directly if a string has already been processed. - """ - if isinstance(val, (str, unicode)): - val = val.strip() - if val == '': - return val - return DSclass(val) - - -class IS(int): - """Derived class of int. Stores original integer string for exact rewriting - of the string originally read or stored. - """ - if not in_py3: - __slots__ = 'original_string' - # Unlikely that str(int) will not be the same as the original, but could happen - # with leading zeros. - - def __new__(cls, val): - """Create instance if new integer string""" - if isinstance(val, (str, unicode)) and val.strip() == '': - return '' - newval = super(IS, cls).__new__(cls, val) - # check if a float or Decimal passed in, then could have lost info, - # and will raise error. E.g. IS(Decimal('1')) is ok, but not IS(1.23) - if isinstance(val, (float, Decimal)) and newval != val: - raise TypeError("Could not convert value to integer without loss") - # Checks in case underlying int is >32 bits, DICOM does not allow this - if (newval < -2 ** 31 or newval >= 2 ** 31) and dicom.config.enforce_valid_values: - message = "Value exceeds DICOM limits of -2**31 to (2**31 - 1) for IS" - raise OverflowError(message) - return newval - - def __init__(self, val): - # If a string passed, then store it - if isinstance(val, (str, unicode)): - self.original_string = val - elif isinstance(val, IS) and hasattr(val, 'original_string'): - self.original_string = val.original_string - - def __repr__(self): - if hasattr(self, 'original_string'): - return "'" + self.original_string + "'" - else: - return "'" + int.__str__(self) + "'" - - -def MultiString(val, valtype=str): - """Split a bytestring by delimiters if there are any - - val -- DICOM bytestring to split up - valtype -- default str, but can be e.g. UID to overwrite to a specific type - """ - # Remove trailing blank used to pad to even length - # 2005.05.25: also check for trailing 0, error made in PET files we are converting - - if val and (val.endswith(' ') or val.endswith('\x00')): - val = val[:-1] - splitup = val.split("\\") - - if len(splitup) == 1: - val = splitup[0] - return valtype(val) if val else val - else: - return MultiValue(valtype, splitup) - - -class PersonName3(object): - def __init__(self, val, encodings=default_encoding): - if isinstance(val, PersonName3): - val = val.original_string - - self.original_string = val - - self.encodings = self._verify_encodings(encodings) - self.parse(val) - - def parse(self, val): - if isinstance(val, bytes): - matchstr = match_string_bytes - else: - matchstr = match_string_uni - - matchobj = re.match(matchstr, val) - - self.__dict__.update(matchobj.groupdict()) - - groups = matchobj.groups() - self.components = [groups[i] for i in (0, -2, -1)] - - def __eq__(self, other): - return self.original_string == other - - def __str__(self): - return self.original_string.__str__() - - def __repr__(self): - return self.original_string.__repr__() - - def decode(self, encodings=None): - encodings = self._verify_encodings(encodings) - - from dicom.charset import clean_escseq - if not isinstance(self.components[0], bytes): - comps = self.components - else: - comps = [clean_escseq(comp.decode(enc), encodings) - for comp, enc in zip(self.components, encodings)] - - while len(comps) and not comps[-1]: - comps.pop() - - return PersonName3('='.join(comps), encodings) - - def encode(self, encodings=None): - encodings = self._verify_encodings(encodings) - - if isinstance(self.components[0], bytes): - comps = self.components - else: - comps = [C.encode(enc) for C, enc in zip(self.components, encodings)] - - # Remove empty elements from the end - while len(comps) and not comps[-1]: - comps.pop() - - return b'='.join(comps) - - def family_comma_given(self): - return self.formatted('%(family_name)s, %(given_name)s') - - def formatted(self, format_str): - if isinstance(self.original_string, bytes): - return format_str % self.decode(default_encoding).__dict__ - else: - return format_str % self.__dict__ - - def _verify_encodings(self, encodings): - if encodings is None: - return self.encodings - - if not isinstance(encodings, list): - encodings = [encodings] * 3 - - if len(encodings) == 2: - encodings.append(encodings[1]) - - return encodings - - -class PersonNameBase(object): - """Base class for Person Name classes""" - - def __init__(self, val): - """Initialize the PN properties""" - # Note normally use __new__ on subclassing an immutable, but here we just want - # to do some pre-processing for properties - # PS 3.5-2008 section 6.2 (p.28) and 6.2.1 describes PN. Briefly: - # single-byte-characters=ideographic characters=phonetic-characters - # (each with?): - # family-name-complex^Given-name-complex^Middle-name^name-prefix^name-suffix - self.parse() - - def formatted(self, format_str): - """Return a formatted string according to the format pattern - - Use "...%(property)...%(property)..." where property is one of - family_name, given_name, middle_name, name_prefix, name_suffix - """ - return format_str % self.__dict__ - - def parse(self): - """Break down the components and name parts""" - self.components = self.split("=") - nComponents = len(self.components) - self.single_byte = self.components[0] - self.ideographic = '' - self.phonetic = '' - if nComponents > 1: - self.ideographic = self.components[1] - if nComponents > 2: - self.phonetic = self.components[2] - - if self.single_byte: - name_string = self.single_byte + "^^^^" # in case missing trailing items are left out - parts = name_string.split("^")[:5] - (self.family_name, self.given_name, self.middle_name, - self.name_prefix, self.name_suffix) = parts - else: - (self.family_name, self.given_name, self.middle_name, - self.name_prefix, self.name_suffix) = ('', '', '', '', '') - - -class PersonName(PersonNameBase, bytes): - """Human-friendly class to hold VR of Person Name (PN) - - Name is parsed into the following properties: - single-byte, ideographic, and phonetic components (PS3.5-2008 6.2.1) - family_name, - given_name, - middle_name, - name_prefix, - name_suffix - - """ - def __new__(cls, val): - """Return instance of the new class""" - # Check if trying to convert a string that has already been converted - if isinstance(val, PersonName): - return val - return super(PersonName, cls).__new__(cls, val) - - def encode(self, *args): - """Dummy method to mimic py2 str behavior in py3 bytes subclass""" - # This greatly simplifies the write process so all objects have the - # "encode" method - return self - - def family_comma_given(self): - """Return name as 'Family-name, Given-name'""" - return self.formatted("%(family_name)s, %(given_name)s") - # def __str__(self): - # return str(self.byte_string) - # XXX need to process the ideographic or phonetic components? - # def __len__(self): - # return len(self.byte_string) - - -class PersonNameUnicode(PersonNameBase, unicode): - """Unicode version of Person Name""" - - def __new__(cls, val, encodings): - """Return unicode string after conversion of each part - val -- the PN value to store - encodings -- a list of python encodings, generally found - from dicom.charset.python_encodings mapping - of values in DICOM data element (0008,0005). - """ - from dicom.charset import clean_escseq # in here to avoid circular import - - # Make the possible three character encodings explicit: - if not isinstance(encodings, list): - encodings = [encodings] * 3 - if len(encodings) == 2: - encodings.append(encodings[1]) - components = val.split(b"=") - # Remove the first encoding if only one component is present - if (len(components) == 1): - del encodings[0] - - comps = [clean_escseq(C.decode(enc), encodings) - for C, enc in zip(components, encodings)] - new_val = u"=".join(comps) - - return unicode.__new__(cls, new_val) - - def __init__(self, val, encodings): - self.encodings = self._verify_encodings(encodings) - PersonNameBase.__init__(self, val) - - def _verify_encodings(self, encodings): - """Checks the encoding to ensure proper format""" - if encodings is None: - return self.encodings - - if not isinstance(encodings, list): - encodings = [encodings] * 3 - - if len(encodings) == 2: - encodings.append(encodings[1]) - - return encodings - - def encode(self, encodings): - """Encode the unicode using the specified encoding""" - encodings = self._verify_encodings(encodings) - - components = self.split('=') - - comps = [C.encode(enc) for C, enc in zip(components, encodings)] - - # Remove empty elements from the end - while len(comps) and not comps[-1]: - comps.pop() - - return '='.join(comps) - - def family_comma_given(self): - """Return name as 'Family-name, Given-name'""" - return self.formatted("%(family_name)u, %(given_name)u") diff -Nru pydicom-0.9.8/dicom/values.py pydicom-0.9.9/dicom/values.py --- pydicom-0.9.8/dicom/values.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/dicom/values.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,237 +0,0 @@ -# values.py -"""Functions for converting values of DICOM data elements to proper python types -""" -# Copyright (c) 2010-2012 Darcy Mason -# This file is part of pydicom, relased under an MIT license. -# See the file license.txt included with this distribution, also -# available at http://pydicom.googlecode.com - -from dicom import in_py3 -from struct import unpack, calcsize, pack -import logging -logger = logging.getLogger('pydicom') - -# Because DS can be based on float or decimal, import whole module, not DS -# directly, so it can be changed in user code and be updated here also -import dicom.valuerep -from dicom.valuerep import MultiString - -if in_py3: - from dicom.valuerep import PersonName3 as PersonName -else: - from dicom.valuerep import PersonName - -from dicom.multival import MultiValue -import dicom.UID -from dicom.tag import Tag, TupleTag, SequenceDelimiterTag -from dicom.datadict import dictionaryVR -from dicom.filereader import read_sequence -from io import BytesIO -from dicom.charset import default_encoding, text_VRs - - -def convert_tag(byte_string, is_little_endian, offset=0): - if is_little_endian: - struct_format = " 4 - if length % 4 != 0: - logger.warn("Expected length to be multiple of 4 for VR 'AT', got length %d at file position 0x%x", length, fp.tell() - 4) - return MultiValue(Tag, [convert_tag(byte_string, is_little_endian, offset=x) - for x in range(0, length, 4)]) - - -def convert_DS_string(byte_string, is_little_endian, struct_format=None): - """Read and return a DS value or list of values""" - if in_py3: - byte_string = byte_string.decode(default_encoding) - # Below, go directly to DS class instance rather than factory DS, - # but need to ensure last string doesn't have blank padding (use strip()) - return MultiString(byte_string.strip(), valtype=dicom.valuerep.DSclass) - - -def convert_IS_string(byte_string, is_little_endian, struct_format=None): - """Read and return an IS value or list of values""" - if in_py3: - byte_string = byte_string.decode(default_encoding) - return MultiString(byte_string, valtype=dicom.valuerep.IS) - - -def convert_numbers(byte_string, is_little_endian, struct_format): - """Read a "value" of type struct_format from the dicom file. "Value" can be more than one number""" - endianChar = '><'[is_little_endian] - bytes_per_value = calcsize("=" + struct_format) # "=" means use 'standard' size, needed on 64-bit systems. - length = len(byte_string) - if length % bytes_per_value != 0: - logger.warn("Expected length to be even multiple of number size") - format_string = "%c%u%c" % (endianChar, length // bytes_per_value, struct_format) - value = unpack(format_string, byte_string) - if len(value) == 1: - return value[0] - else: - return list(value) # convert from tuple to a list so can modify if need to - - -def convert_OBvalue(byte_string, is_little_endian, struct_format=None): - """Return the raw bytes from reading an OB value""" - return byte_string - - -def convert_OWvalue(byte_string, is_little_endian, struct_format=None): - """Return the raw bytes from reading an OW value rep - - Note: pydicom does NOT do byte swapping, except in - dataset.pixel_array function - """ - return convert_OBvalue(byte_string, is_little_endian) # for now, Maybe later will have own routine - - -def convert_PN(byte_string, is_little_endian, struct_format=None, encoding=None): - """Read and return string(s) as PersonName instance(s)""" - - # XXX - We have to replicate MultiString functionality here because we can't decode - # easily here since that is performed in PersonNameUnicode - if byte_string and (byte_string.endswith(b' ') or byte_string.endswith(b'\x00')): - byte_string = byte_string[:-1] - - splitup = byte_string.split(b"\\") - - if encoding and in_py3: - args = (encoding,) - else: - args = () - - # We would like to return string literals - if in_py3: - valtype = lambda x: PersonName(x, *args).decode() - else: - valtype = lambda x: PersonName(x, *args) - - if len(splitup) == 1: - return valtype(splitup[0]) - else: - return MultiValue(valtype, splitup) - - -def convert_string(byte_string, is_little_endian, struct_format=None, encoding=default_encoding): - """Read and return a string or strings""" - if in_py3: - byte_string = byte_string.decode(encoding) - return MultiString(byte_string) - - -def convert_single_string(byte_string, is_little_endian, struct_format=None, encoding=default_encoding): - """Read and return a single string (backslash character does not split)""" - if in_py3: - byte_string = byte_string.decode(encoding) - if byte_string and byte_string.endswith(' '): - byte_string = byte_string[:-1] - return byte_string - - -def convert_SQ(byte_string, is_implicit_VR, is_little_endian, offset=0): - """Convert a sequence that has been read as bytes but not yet parsed.""" - fp = BytesIO(byte_string) - seq = read_sequence(fp, is_implicit_VR, is_little_endian, len(byte_string), offset) - return seq - - -def convert_UI(byte_string, is_little_endian, struct_format=None): - """Read and return a UI values or values""" - # Strip off 0-byte padding for even length (if there) - if in_py3: - byte_string = byte_string.decode(default_encoding) - if byte_string and byte_string.endswith('\0'): - byte_string = byte_string[:-1] - return MultiString(byte_string, dicom.UID.UID) - - -def convert_UN(byte_string, is_little_endian, struct_format=None): - """Return a byte string for a VR of 'UN' (unknown)""" - return byte_string - - -def convert_value(VR, raw_data_element, encoding=default_encoding): - """Return the converted value (from raw bytes) for the given VR""" - tag = Tag(raw_data_element.tag) - if VR not in converters: - raise NotImplementedError("Unknown Value Representation '{0}'".format(VR)) - - # Look up the function to convert that VR - # Dispatch two cases: a plain converter, or a number one which needs a format string - if isinstance(converters[VR], tuple): - converter, num_format = converters[VR] - else: - converter = converters[VR] - num_format = None - - # Ensure that encoding is in the proper 3-element format - if isinstance(encoding, basestring): - encoding = [encoding, ] * 3 - - byte_string = raw_data_element.value - is_little_endian = raw_data_element.is_little_endian - is_implicit_VR = raw_data_element.is_implicit_VR - - # Not only two cases. Also need extra info if is a raw sequence - # Pass the encoding to the converter if it is a specific VR - if VR == 'PN': - value = converter(byte_string, is_little_endian, encoding=encoding) - elif VR in text_VRs: - # Text VRs use the 2nd specified encoding - value = converter(byte_string, is_little_endian, encoding=encoding[1]) - elif VR != "SQ": - value = converter(byte_string, is_little_endian, num_format) - else: - value = convert_SQ(byte_string, is_implicit_VR, is_little_endian, raw_data_element.value_tell) - return value - -# converters map a VR to the function to read the value(s). -# for convert_numbers, the converter maps to a tuple (function, struct_format) -# (struct_format in python struct module style) -converters = {'UL': (convert_numbers, 'L'), - 'SL': (convert_numbers, 'l'), - 'US': (convert_numbers, 'H'), - 'SS': (convert_numbers, 'h'), - 'FL': (convert_numbers, 'f'), - 'FD': (convert_numbers, 'd'), - 'OF': (convert_numbers, 'f'), - 'OB': convert_OBvalue, - 'UI': convert_UI, - 'SH': convert_string, - 'DA': convert_string, - 'TM': convert_string, - 'CS': convert_string, - 'PN': convert_PN, - 'LO': convert_string, - 'IS': convert_IS_string, - 'DS': convert_DS_string, - 'AE': convert_string, - 'AS': convert_string, - 'LT': convert_single_string, - 'SQ': convert_SQ, - 'UN': convert_UN, - 'AT': convert_ATvalue, - 'ST': convert_string, - 'OW': convert_OWvalue, - 'OW/OB': convert_OBvalue, # note OW/OB depends on other items, which we don't know at read time - 'OB/OW': convert_OBvalue, - 'OW or OB': convert_OBvalue, - 'OB or OW': convert_OBvalue, - 'US or SS': convert_OWvalue, - 'US or SS or OW': convert_OWvalue, - 'US\\US or SS\\US': convert_OWvalue, - 'DT': convert_string, - 'UT': convert_single_string, - } -if __name__ == "__main__": - pass diff -Nru pydicom-0.9.8/distribute_setup.py pydicom-0.9.9/distribute_setup.py --- pydicom-0.9.8/distribute_setup.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/distribute_setup.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,477 +0,0 @@ -#!python -"""Bootstrap distribute installation - -If you want to use setuptools in your package's setup.py, just include this -file in the same directory with it, and add this to the top of your setup.py:: - - from distribute_setup import use_setuptools - use_setuptools() - -If you want to require a specific version of setuptools, set a download -mirror, or use an alternate download directory, you can do so by supplying -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -import os -import sys -import time -import fnmatch -import tempfile -import tarfile -from distutils import log - -try: - from site import USER_SITE -except ImportError: - USER_SITE = None - -try: - import subprocess - - def _python_cmd(*args): - args = (sys.executable,) + args - return subprocess.call(args) == 0 - -except ImportError: - # will be used for python 2.3 - def _python_cmd(*args): - args = (sys.executable,) + args - # quoting arguments if windows - if sys.platform == 'win32': - def quote(arg): - if ' ' in arg: - return '"%s"' % arg - return arg - args = [quote(arg) for arg in args] - return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 - -DEFAULT_VERSION = "0.6.10" -DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" -SETUPTOOLS_FAKED_VERSION = "0.6c11" - -SETUPTOOLS_PKG_INFO = """\ -Metadata-Version: 1.0 -Name: setuptools -Version: %s -Summary: xxxx -Home-page: xxx -Author: xxx -Author-email: xxx -License: xxx -Description: xxx -""" % SETUPTOOLS_FAKED_VERSION - - -def _install(tarball): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - tar.close() - - # going in the directory - subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) - os.chdir(subdir) - log.warn('Now working in %s', subdir) - - # installing - log.warn('Installing Distribute') - if not _python_cmd('setup.py', 'install'): - log.warn('Something went wrong during the installation.') - log.warn('See the error message above.') - finally: - os.chdir(old_wd) - - -def _build_egg(egg, tarball, to_dir): - # extracting the tarball - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - tar = tarfile.open(tarball) - _extractall(tar) - tar.close() - - # going in the directory - subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) - os.chdir(subdir) - log.warn('Now working in %s', subdir) - - # building an egg - log.warn('Building a Distribute egg in %s', to_dir) - _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) - - finally: - os.chdir(old_wd) - # returning the result - log.warn(egg) - if not os.path.exists(egg): - raise IOError('Could not build the egg.') - - -def _do_download(version, download_base, to_dir, download_delay): - egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg' - % (version, sys.version_info[0], sys.version_info[1])) - if not os.path.exists(egg): - tarball = download_setuptools(version, download_base, - to_dir, download_delay) - _build_egg(egg, tarball, to_dir) - sys.path.insert(0, egg) - import setuptools - setuptools.bootstrap_install_from = egg - - -def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, download_delay=15, no_fake=True): - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - was_imported = 'pkg_resources' in sys.modules or \ - 'setuptools' in sys.modules - try: - try: - import pkg_resources - if not hasattr(pkg_resources, '_distribute'): - if not no_fake: - _fake_setuptools() - raise ImportError - except ImportError: - return _do_download(version, download_base, to_dir, download_delay) - try: - pkg_resources.require("distribute>="+version) - return - except pkg_resources.VersionConflict: - e = sys.exc_info()[1] - if was_imported: - sys.stderr.write( - "The required version of distribute (>=%s) is not available,\n" - "and can't be installed while this script is running. Please\n" - "install a more recent version first, using\n" - "'easy_install -U distribute'." - "\n\n(Currently using %r)\n" % (version, e.args[0])) - sys.exit(2) - else: - del pkg_resources, sys.modules['pkg_resources'] # reload ok - return _do_download(version, download_base, to_dir, - download_delay) - except pkg_resources.DistributionNotFound: - return _do_download(version, download_base, to_dir, - download_delay) - finally: - if not no_fake: - _create_fake_setuptools_pkg_info(to_dir) - -def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, delay=15): - """Download distribute from a specified location and return its filename - - `version` should be a valid distribute version number that is available - as an egg for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download - attempt. - """ - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - try: - from urllib.request import urlopen - except ImportError: - from urllib2 import urlopen - tgz_name = "distribute-%s.tar.gz" % version - url = download_base + tgz_name - saveto = os.path.join(to_dir, tgz_name) - src = dst = None - if not os.path.exists(saveto): # Avoid repeated downloads - try: - log.warn("Downloading %s", url) - src = urlopen(url) - # Read/write all in one block, so we don't create a corrupt file - # if the download is interrupted. - data = src.read() - dst = open(saveto, "wb") - dst.write(data) - finally: - if src: - src.close() - if dst: - dst.close() - return os.path.realpath(saveto) - - -def _patch_file(path, content): - """Will backup the file then patch it""" - existing_content = open(path).read() - if existing_content == content: - # already patched - log.warn('Already patched.') - return False - log.warn('Patching...') - _rename_path(path) - f = open(path, 'w') - try: - f.write(content) - finally: - f.close() - return True - - -def _same_content(path, content): - return open(path).read() == content - -def _no_sandbox(function): - def __no_sandbox(*args, **kw): - try: - from setuptools.sandbox import DirectorySandbox - def violation(*args): - pass - DirectorySandbox._old = DirectorySandbox._violation - DirectorySandbox._violation = violation - patched = True - except ImportError: - patched = False - - try: - return function(*args, **kw) - finally: - if patched: - DirectorySandbox._violation = DirectorySandbox._old - del DirectorySandbox._old - - return __no_sandbox - -@_no_sandbox -def _rename_path(path): - new_name = path + '.OLD.%s' % time.time() - log.warn('Renaming %s into %s', path, new_name) - os.rename(path, new_name) - return new_name - -def _remove_flat_installation(placeholder): - if not os.path.isdir(placeholder): - log.warn('Unkown installation at %s', placeholder) - return False - found = False - for file in os.listdir(placeholder): - if fnmatch.fnmatch(file, 'setuptools*.egg-info'): - found = True - break - if not found: - log.warn('Could not locate setuptools*.egg-info') - return - - log.warn('Removing elements out of the way...') - pkg_info = os.path.join(placeholder, file) - if os.path.isdir(pkg_info): - patched = _patch_egg_dir(pkg_info) - else: - patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) - - if not patched: - log.warn('%s already patched.', pkg_info) - return False - # now let's move the files out of the way - for element in ('setuptools', 'pkg_resources.py', 'site.py'): - element = os.path.join(placeholder, element) - if os.path.exists(element): - _rename_path(element) - else: - log.warn('Could not find the %s element of the ' - 'Setuptools distribution', element) - return True - - -def _after_install(dist): - log.warn('After install bootstrap.') - placeholder = dist.get_command_obj('install').install_purelib - _create_fake_setuptools_pkg_info(placeholder) - -@_no_sandbox -def _create_fake_setuptools_pkg_info(placeholder): - if not placeholder or not os.path.exists(placeholder): - log.warn('Could not find the install location') - return - pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1]) - setuptools_file = 'setuptools-%s-py%s.egg-info' % \ - (SETUPTOOLS_FAKED_VERSION, pyver) - pkg_info = os.path.join(placeholder, setuptools_file) - if os.path.exists(pkg_info): - log.warn('%s already exists', pkg_info) - return - - log.warn('Creating %s', pkg_info) - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() - - pth_file = os.path.join(placeholder, 'setuptools.pth') - log.warn('Creating %s', pth_file) - f = open(pth_file, 'w') - try: - f.write(os.path.join(os.curdir, setuptools_file)) - finally: - f.close() - -def _patch_egg_dir(path): - # let's check if it's already patched - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - if os.path.exists(pkg_info): - if _same_content(pkg_info, SETUPTOOLS_PKG_INFO): - log.warn('%s already patched.', pkg_info) - return False - _rename_path(path) - os.mkdir(path) - os.mkdir(os.path.join(path, 'EGG-INFO')) - pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') - f = open(pkg_info, 'w') - try: - f.write(SETUPTOOLS_PKG_INFO) - finally: - f.close() - return True - - -def _before_install(): - log.warn('Before install bootstrap.') - _fake_setuptools() - - -def _under_prefix(location): - if 'install' not in sys.argv: - return True - args = sys.argv[sys.argv.index('install')+1:] - for index, arg in enumerate(args): - for option in ('--root', '--prefix'): - if arg.startswith('%s=' % option): - top_dir = arg.split('root=')[-1] - return location.startswith(top_dir) - elif arg == option: - if len(args) > index: - top_dir = args[index+1] - return location.startswith(top_dir) - elif option == '--user' and USER_SITE is not None: - return location.startswith(USER_SITE) - return True - - -def _fake_setuptools(): - log.warn('Scanning installed packages') - try: - import pkg_resources - except ImportError: - # we're cool - log.warn('Setuptools or Distribute does not seem to be installed.') - return - ws = pkg_resources.working_set - try: - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', - replacement=False)) - except TypeError: - # old distribute API - setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) - - if setuptools_dist is None: - log.warn('No setuptools distribution found') - return - # detecting if it was already faked - setuptools_location = setuptools_dist.location - log.warn('Setuptools installation detected at %s', setuptools_location) - - # if --root or --preix was provided, and if - # setuptools is not located in them, we don't patch it - if not _under_prefix(setuptools_location): - log.warn('Not patching, --root or --prefix is installing Distribute' - ' in another location') - return - - # let's see if its an egg - if not setuptools_location.endswith('.egg'): - log.warn('Non-egg installation') - res = _remove_flat_installation(setuptools_location) - if not res: - return - else: - log.warn('Egg installation') - pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO') - if (os.path.exists(pkg_info) and - _same_content(pkg_info, SETUPTOOLS_PKG_INFO)): - log.warn('Already patched.') - return - log.warn('Patching...') - # let's create a fake egg replacing setuptools one - res = _patch_egg_dir(setuptools_location) - if not res: - return - log.warn('Patched done.') - _relaunch() - - -def _relaunch(): - log.warn('Relaunching...') - # we have to relaunch the process - args = [sys.executable] + sys.argv - sys.exit(subprocess.call(args)) - - -def _extractall(self, path=".", members=None): - """Extract all members from the archive to the current working - directory and set owner, modification time and permissions on - directories afterwards. `path' specifies a different directory - to extract to. `members' is optional and must be a subset of the - list returned by getmembers(). - """ - import copy - import operator - from tarfile import ExtractError - directories = [] - - if members is None: - members = self - - for tarinfo in members: - if tarinfo.isdir(): - # Extract directories with a safe mode. - directories.append(tarinfo) - tarinfo = copy.copy(tarinfo) - tarinfo.mode = 448 # decimal for oct 0700 - self.extract(tarinfo, path) - - # Reverse sort directories. - if sys.version_info < (2, 4): - def sorter(dir1, dir2): - return cmp(dir1.name, dir2.name) - directories.sort(sorter) - directories.reverse() - else: - directories.sort(key=operator.attrgetter('name'), reverse=True) - - # Set correct owner, mtime and filemode on directories. - for tarinfo in directories: - dirpath = os.path.join(path, tarinfo.name) - try: - self.chown(tarinfo, dirpath) - self.utime(tarinfo, dirpath) - self.chmod(tarinfo, dirpath) - except ExtractError: - e = sys.exc_info()[1] - if self.errorlevel > 1: - raise - else: - self._dbg(1, "tarfile: %s" % e) - - -def main(argv, version=DEFAULT_VERSION): - """Install or upgrade setuptools and EasyInstall""" - tarball = download_setuptools() - _install(tarball) - - -if __name__ == '__main__': - main(sys.argv[1:]) diff -Nru pydicom-0.9.8/docs/conf.py pydicom-0.9.9/docs/conf.py --- pydicom-0.9.8/docs/conf.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/conf.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,202 @@ +# -*- coding: utf-8 -*- +# +# pydicom documentation build configuration file, created by +# sphinx-quickstart on Sat Feb 20 23:28:19 2010. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.append(os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'pydicom' +copyright = u'2008-2012, Darcy Mason and pydicom contributors' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0a' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +#unused_docs = [] + +# List of directories, relative to source directory, that shouldn't be searched +# for source files. +exclude_trees = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. Major themes that come with +# Sphinx are currently 'default' and 'sphinxdoc'. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_use_modindex = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = '' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'pydicomdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +# The paper size ('letter' or 'a4'). +#latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +#latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'pydicom.tex', u'pydicom Documentation', + u'Darcy Mason and pydicom contributors', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_use_modindex = True + +doctest_global_setup = """ +import dicom +import os, os.path +testfile_path = os.path.join(dicom.__path__[0], 'testfiles') +save_dir = os.getcwd() +os.chdir(testfile_path) +""" diff -Nru pydicom-0.9.8/docs/getting_started.rst pydicom-0.9.9/docs/getting_started.rst --- pydicom-0.9.8/docs/getting_started.rst 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/getting_started.rst 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,161 @@ +.. _getting_started: + +============================ +Getting Started with pydicom +============================ + +.. rubric:: Brief overview of pydicom and how to install. + +Introduction +============== + +pydicom is a pure python package for working with +`DICOM `_ +files such as medical images, reports, and radiotherapy objects. + +pydicom makes it easy to read these complex files into natural pythonic +structures for easy manipulation. Modified datasets can be written again to +DICOM format files. + +Here is a simple example of using pydicom in an interactive session, to read +a radiotherapy plan file, change the patient setup from head-first-supine to +head-first-prone, and save to a new file: + +>>> import dicom +>>> plan = dicom.read_file("rtplan.dcm") +>>> plan.PatientName +'Last^First^mid^pre' +>>> plan.dir("setup") # get a list of tags with "setup" somewhere in the name +['PatientSetupSequence'] +>>> plan.PatientSetupSequence[0] +(0018, 5100) Patient Position CS: 'HFS' +(300a, 0182) Patient Setup Number IS: '1' +(300a, 01b2) Setup Technique Description ST: '' +>>> plan.PatientSetupSequence[0].PatientPosition = "HFP" +>>> plan.save_as("rtplan2.dcm") + + +pydicom is not a DICOM server [#]_, and is not primarily about viewing images. It is designed to let you manipulate data elements in DICOM files with python code. + +pydicom is easy to install and use, and because it is a pure +python package, it should run anywhere python runs. + +One limitation of pydicom: compressed pixel data (e.g. JPEG) +cannot be altered in an intelligent way as it can be for uncompressed pixels. +Files can always be read and saved, but compressed pixel data cannot +easily be modified. + + +License +======= +pydicom has a `license +`_ +based on the MIT license. + + +Installing +========== + +As a pure python package, pydicom is easy to install and has no +requirements other than python itself (the NumPy library is recommended, +but is only required if manipulating pixel data). + +Note: in addition to the instructions below, pydicom can also be installed +through the `Python(x,y) `_ distribution, which can +install python and a number of packages [#]_ (including pydicom) at once. + +Prerequisites +------------- + * python 2.4 through 2.6 (or python 2.3 can be used for pydicom < 0.9.4) + * [ NumPy (http://numpy.scipy.org/) ] -- optional, only needed + if manipulating pixel data + +Python installers can be found at the python web site +(http://python.org/download/). On Windows, the `Activepython +`_ distributions are also quite good. + + +Installing on Windows +--------------------- + +On Windows, pydicom can be installed using the executable installer from the +`Downloads `_ tab. + +Alternatively, pydicom can be installed with easy_install, pip, or +from source, as described in the sections below. + + +Installing using easy_install or pip (all platforms) +---------------------------------------------------- + +if you have `setuptools `_ installed, +just use easy_install at the command line (you may need ``sudo`` on linux):: + + easy_install pydicom + +Depending on your python version, there may be some warning messages, +but the install should still be ok. + +`pip `_ is a newer install tool that works +quite similarly to easy_install and can also be used. + + +Installing from source (all platforms) +-------------------------------------- + * download the source code from the + `Downloads tab `_ or + `checkout the mercurial repository source + `_ + * at a command line, change to the directory with the setup.py file + * with admin privileges, run ``python setup.py install`` + + * with some linux variants, for example, use ``sudo python setup.py install`` + * with other linux variants you may have to ``su`` before running the command. + + * for python < 2.6, you may get a syntax error message when the python files + are "built" -- this is due to some python 2.6 specific code in one unit + test file. The installation seems to still be ok. + +Installing on Mac +----------------- + +The instructions above for easy_install or installing from source +will work on Mac OS. There is also a MacPorts portfile (py25-pydicom) +available at +http://trac.macports.org/browser/trunk/dports/python/py25-pydicom. +This is maintained by other users and may not immediately be up to +the latest release. + + +Using pydicom +============= + +Once installed, the package can be imported at a python command line or used +in your own python program with ``import dicom`` (note the package name is +``dicom``, not ``pydicom`` when used in code. +See the `examples directory +`_ +for both kinds of uses. Also see the :doc:`User Guide ` +for more details of how to use the package. + + +Support +======= + +Please join the `pydicom discussion group `_ +to ask questions, give feedback, post example code for others -- in other words +for any discussion about the pydicom code. New versions, major bug fixes, etc. +will also be announced through the group. + + +Next Steps +========== + +To start learning how to use pydicom, see the :doc:`pydicom_user_guide`. + +.. rubric: Footnotes:: + +.. [#] For DICOM network capabilities, see the `pynetdicom `_ project. +.. [#] If using python(x,y), other packages you might be interested in include IPython + (an indispensable interactive shell with auto-completion, history etc), + Numpy (optionally used by pydicom for pixel data), and ITK/VTK or PIL (image processing and visualization). \ No newline at end of file diff -Nru pydicom-0.9.8/docs/index.rst pydicom-0.9.9/docs/index.rst --- pydicom-0.9.8/docs/index.rst 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/index.rst 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,26 @@ +.. pydicom documentation master file, created by + sphinx-quickstart on Sat Feb 20 23:28:19 2010. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +pydicom documentation +===================== + +Contents: + +.. toctree:: + :maxdepth: 2 + + getting_started.rst + pydicom_user_guide.rst + working_with_pixel_data.rst + viewing_images.rst + ref_guide.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff -Nru pydicom-0.9.8/docs/make.bat pydicom-0.9.9/docs/make.bat --- pydicom-0.9.8/docs/make.bat 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/make.bat 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,113 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +set SPHINXBUILD=sphinx-build +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pydicom.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pydicom.ghc + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff -Nru pydicom-0.9.8/docs/Makefile pydicom-0.9.9/docs/Makefile --- pydicom-0.9.8/docs/Makefile 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/Makefile 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,89 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/pydicom.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pydicom.qhc" + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff -Nru pydicom-0.9.8/docs/pydicom_user_guide.rst pydicom-0.9.9/docs/pydicom_user_guide.rst --- pydicom-0.9.8/docs/pydicom_user_guide.rst 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/pydicom_user_guide.rst 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,188 @@ +.. _pydicom_user_guide: + +================== +Pydicom User Guide +================== + +.. rubric:: pydicom object model, description of classes, examples + +Dataset +======= + +Dataset is the base object in pydicom's object model. +The relationship between Dataset and other objects is: + +Dataset (derived from python's `dict`) + ---> contains DataElement instances + --> the value of the data element can be one of: + * a regular value like a number, string, etc. + * a list of regular values (e.g. a 3-D coordinate) + * a Sequence instance + --> a Sequence is a list of Datasets (and so we come full circle) + +Dataset is the main object you will work with directly. Dataset is derived +from python's ``dict``, so it inherits (and overrides some of) the methods +of ``dict``. In other words it is a collection of key:value pairs, where +the key value is the DICOM (group,element) tag (as a Tag object, +described below), and the value is a DataElement instance +(also described below). + +A dataset could be created directly, but you will usually get one by reading +an existing DICOM file:: + + >>> import dicom + >>> ds = dicom.read_file("rtplan.dcm") # (rtplan.dcm is in the testfiles directory) + + +You can display the entire dataset by simply printing its string +(str or repr) value:: + + >>> ds + (0008, 0012) Instance Creation Date DA: '20030903' + (0008, 0013) Instance Creation Time TM: '150031' + (0008, 0016) SOP Class UID UI: RT Plan Storage + (0008, 0018) SOP Instance UID UI: 1.2.777.777.77.7.7777.7777.20030903150023 + (0008, 0020) Study Date DA: '20030716' + (0008, 0030) Study Time TM: '153557' + (0008, 0050) Accession Number SH: '' + (0008, 0060) Modality CS: 'RTPLAN' + +Note: you can also view DICOM files in a collapsible tree using +the example program `dicomtree.py +`_. + +You can access specific data elements by name or by DICOM tag number:: + + >>> ds.PatientsName + 'Last^First^mid^pre' + >>> ds[0x10,0x10].value + 'Last^First^mid^pre' + +In the latter case (using the tag number directly) a DataElement instance +is returned, so the ``.value`` must be used to get the value. + +You can also set values by name or tag number:: + + >>> ds.PatientID = "12345" + >>> ds.SeriesNumber = 5 + >>> ds[0x10,0x10].value = 'Test' + +The use of names is possible because pydicom intercepts requests for +member variables, and checks if they are in the DICOM dictionary. +It translates the name to a (group,element) number and returns +the corresponding value for that key if it exists. The names are the +descriptive text from the dictionary with spaces and apostrophes, +etc. removed. + +DICOM Sequences are turned into python ``list`` s. For these, the name is +from the dictionary name with "sequence" removed, and the normal English +plural added. So "Beam Sequence" becomes "Beams", +"Referenced Film Box Sequence" becomes "ReferencedFilmBoxes". +Items in the sequence are referenced by number, beginning at index 0 as per +python convention. +:: + + >>> ds.Beams[0].BeamName + 'Field 1' + >>> # Same thing with tag numbers: + >>> ds[0x300a,0xb0][0][0x300a,0xc2].value + 'Field 1' + >>> # yet another way, using another variable + >>> beam1=ds[0x300a,0xb0][0] + >>> beam1.BeamName, beam1[0x300a,0xc2].value + ('Field 1', 'Field 1') + + +Since you may not always remember the exact name, Dataset provides +a handy `dir()` method, useful during interactive sessions +at the python prompt:: + + >>> ds.dir("pat") + ['PatientSetups', 'PatientsBirthDate', 'PatientsID', 'PatientsName', 'PatientsSex'] + +``dir`` will return any DICOM tag names in the dataset that have +the specified string anywhere in the name (case insensitive). +Calling `dir` with no string will list all tag names available in the dataset. +You can also see all the names that pydicom knows about by viewing the +`_dicom_dict.py` file. You could modify that file to add tags +that pydicom doesn't already know about. + +Under the hood, Dataset stores a DataElement object for each item, +but when accessed by name (e.g. ``ds.PatientsName``) only the `value` +of that DataElement is returned. If you need the whole DataElement +(see the DataElement class discussion), you can use Dataset's data_element() +method or access the item using the tag number:: + + >>> data_element = ds.data_element("PatientsName") # or data_element = ds[0x10,0x10] + >>> data_element.VR, data_element.value + ('PN', 'Last^First^mid^pre') + +To check for the existence of a particular tag before using it, +use the `in` keyword:: + + >>> "PatientsName" in ds + True + +To remove a data element from the dataset, use ``del``:: + + >>> del ds[0x10,0x1000] + >>> # OR + >>> tag = ds.data_element("OtherPatientIDs").tag + >>> del ds[tag] + +To work with pixel data, the raw bytes are available through the usual tag:: + + >>> pixel_bytes = ds.PixelData + +but to work with them in a more intelligent way, use ``pixel_array`` +(requires the `NumPy library `_):: + + >>> pix = ds.pixel_array + +For more details, see :doc:`working_with_pixel_data`. + + +DataElement +=========== + +The DataElement class is not usually used directly in user code, +but is used extensively by Dataset. +DataElement is a simple object which stores the following things: + + * tag -- a DICOM tag (as a Tag object) + * VR -- DICOM value representation -- various number and string formats, etc + * VM -- value multiplicity. This is 1 for most DICOM tags, but + can be multiple, e.g. for coordinates. You do not have to specify this, + the DataElement class keeps track of it based on value. + * value -- the actual value. A regular value like a number or string + (or list of them), or a Sequence. + +Tag +=== + +The Tag class is derived from python's ``long``, so in effect, it is just +a number with some extra behaviour: + + * Tag enforces that the DICOM tag fits in the expected 4-byte (group,element) + * a Tag instance can be created from a long or from a tuple containing + the (group,element) separately:: + + >>> from dicom.tag import Tag + >>> t1=Tag(0x00100010) # all of these are equivalent + >>> t2=Tag(0x10,0x10) + >>> t3=Tag((0x10, 0x10)) + >>> t1 + (0010, 0010) + >>> t1==t2, t1==t3 + (True, True) + + * Tag has properties group and element (or elem) to return the group and element portions + * the ``is_private`` property checks whether the tag represents + a private tag (i.e. if group number is odd). + +Sequence +======== + +Sequence is derived from python's ``list``. The only added functionality is +to make string representations prettier. Otherwise all the usual methods of +``list`` like item selection, append, etc. are available. \ No newline at end of file diff -Nru pydicom-0.9.8/docs/ref_guide.rst pydicom-0.9.9/docs/ref_guide.rst --- pydicom-0.9.8/docs/ref_guide.rst 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/ref_guide.rst 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,28 @@ +.. _api_filereader: + +======================= +Pydicom Reference Guide +======================= + +.. rubric:: Common pydicom functions called by user code + +File Reading/Parsing +==================== + +The main function to read and parse DICOM files using pydicom is ``read_file``. It is coded in the module +dicom.filereader, but is also imported when the dicom package is imported:: + + >>> import dicom + >>> dataset = dicom.read_file(...) + +If you need fine control over the reading, you can either call ``read_partial`` or use ``open_dicom``. +All are documented below: + +.. autofunction:: dicom.filereader.read_file + +.. autofunction:: dicom.filereader.read_partial + +Dataset +======= + +.. autoclass:: dicom.dataset.Dataset \ No newline at end of file diff -Nru pydicom-0.9.8/docs/release-notes.txt pydicom-0.9.9/docs/release-notes.txt --- pydicom-0.9.8/docs/release-notes.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/release-notes.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,226 @@ +#summary Release notes for pydicom package releases +---- += Release Notes pydicom 0.9.9 = + +In addition to bug fixes, pydicom 0.9.9 contains updates for all dicom dictionaries. +New features include DICOMDIR handling, and a utility module which produces python/pydicom source code to recreate a dicom file. + +== Major changes / enhancements == + * All dicom dictionaries updated (standard dictionary, UID dictionary, and private dictionaries) + * Dicom commands also added to dictionary + * Ability to work with DICOMDIR: read_dicomdir() function and DicomDir class. Example file show_dicomdir.py file added to examples subdirectory. + * codify.py: Produce python/pydicom source code from a dicom file. + * a number of python 3 compatibility enhancements + * setup.py uses ez_setup only if setuptools not already installed + * exceptions carry tag info with them, to aid in debugging + +== Contrib file changes == + * pydicom_series: force parameter added (Nil Goyette) + * dcm_qt_tree: switch to OrderedDict to preserve ordering of tags (Padraig Looney) + +== Other Contributors == +Other than Jonathan and myself, other contributors were: +Rickard Holmberg, Julien Lamy, Yaroslav Halchenko, Mark White, Matthew Brett, Dimitri Papadopoulos, videan42 ...(sorry if I've missed anyone). + + += Release Notes pydicom 0.9.8 = + +pydicom 0.9.8 is mainly a consolidation step before moving to official python 3 compatibility in pydicom 1.0. +It also reverts the change to using Decimal for VR of DS (in pydicom 0.9.7), due to performance issues. DS as Decimal is still available, but is off by default. + +== Major changes == + * Requires python 2.6 or later, in preparation for python 3 compatibility + * experimental python 3 compatibility (unofficial at this point) -- uncomment the two indicated lines in setup.py to use it. Please provide feedback to the issues list. + * DS values reverted to using float as default (issue 114) due to slow performance using python Decimal. Speed tests show approx factor of 10 improvement compared with pydicom 0.9.7 (several revisions up to r78ba350a3eb8) + * streamlined much code internally taking advantage of modern python constructs: decorators, generators, etc + +== Bug fixes == + * Fix for duplicate logger from Gunnar Schaefer. Fixes issue 107 (revision 774b7a55db33) + * Fix rewind behavior in find_bytes (issue 60, revision 6b949a5b925b) + * Fix error in nested private sequences (issue 113, revision 84af4b240add) + + +== Enhancements == + * UID generator added (Félix C. Morency) (revisions 0197b5846bb5 and 3678b1be6aca, tests in f1ae573d9de5, 0411bab7c985) + * new PersonName3 class for python 3: (revision 9b92b336e7d4) + +== Contrib file changes == + * Fix for pydicom_series for DS decimal (revision e830f30b6781) + * new dcm_qt_tree.py module - tree display of dicom files using PySide and Qt. Contributed by Padraig Looney. + +Special acknowledgement to Jonathan Suever who contributed most of the python 3 work and many bug fixes. + + += Release notes for pydicom 0.9.7 = + +pydicom 0.9.7 resolves some remaining bugs before moving to python 3 compatibility. +** It is the last version which will run with python < 2.6 ** (it will run with +python2.4 to python2.7) + +== Major changes == + * Added DICOM 2011 keywords. Old "named tags" still work, but + will be deprecated in future versions. Most names are identical, but some have changed. + For example: + * SamplesperPixel becomes SamplesPerPixel (capital 'P' on 'Per') + * Beams becomes BeamSequence (and similar for all sequences) + * Decimal and integer strings handled much better (revisions 4ed698a7bfbe and c313d2befb08). + * New classes for VR of types DS and IS (DS is derived from python Decimal) + * New MultiValue class, enforcing all values of same type + * New config.py file with user-definable parameters: + * allow_DS_float (default False) for controlling whether float values + can be used to construct DS or IS strings. + * enforce_valid_values (default True) for ensuring IS, DS meet DICOM standard limits + To change these, use 'import dicom.config, then dicom.config.={True|False}' + before setting values of data elements + +Users are encouraged to switch to the official DICOM keywords, as these are now part of +the standard, and promote consistency across programming languages and libraries. + +== Bug fixes == + * New way to read file meta information, not using the group length, instead + reading until end of group 2 data elements. If group length dose not match, + log a warning (revision b6b3658f3b14). + * Fix bug in copying raw private data elements (issue 98) + * Force logging level to warning on 'import dicom' (issue 102) + * Deferred read fixed to work with gzipped files (issue 103) + * Setting individual items in a DS or IS list now saves to file correctly + * Japanese and Korean encoding fixes (issue 110) + +== Other Enhancements == + * New Sequence class which verifies items are Datasets (issue 52) + * Assignment to SQ data element checks value is a Sequence or can be converted to one (issue 111) + * dir(ds) now includes methods and properties as well as DICOM named tags. Work only on Python >= 2.6 as previous versions do not call __dir__ method (issue 95) + * Added much more debugging info and simplified reading of data elements (revision b6b3658f3b14) + * updated example files to DICOM 2011 keywords; fixed bugs + +Many of the bug fixes/enhancements were submitted by users. Many thanks to +those who contributed. + += Release notes for pydicom 0.9.6 = + +pydicom 0.9.6 updates the dictionary to the DICOM 2011 standard, and has a number of bug fixes + +== Major changes == + * updated the dictionary to the DICOM 2011 standard's dictionary. + +== Bug fixes == + * Fixed bug in Dataset.file_metadata() and deprecated in favor of FileDataset (issue 93) + * Fixed UID comparisons against non-string values (issue 96) + * catch exceptions on reading undefined length private data elements (issue 91, issue 97) + * Fixed bug in raising exception for unknown tag + +== Other == + * added example file write_new.py to show how to create DICOM files from scratch + * updated other example files + * more PEP-8 style changes + + += Release notes for pydicom 0.9.5 = + +pydicom 0.9.5 is primarily a bug-fix release but includes some contrib files also. + +== Major fixes in this release == + * fix for incorrect pixel integer types which could lead to numeric errors (issue 79) + * By default an InvalidDicomError will be raised when trying to read a non-DICOM +file (unless read_file keyword arg {{{force}}} is True) (revision fc790f01f5) + * fix recursion error on private data elements (issue 81, issue 84) + +== Other fixes in this release == + * Fix for unicode decode failing with VM > 1 (issue 78) + * fix for fail of DicomIter on files with Explicit VR Transfer Syntax UID (issue 82) + * Fix for python 2.5 and 'with' statement (revision 1c32791bf0) + * Handle 'OB/OW' VR as well as 'OW/OB' (revision e3ee934bbc) + * Fix dataset.get(tag) so returns same as dataset[tag] (issue 88) + +== New 'Contrib' files == + * dicom_dao.py by Mike Wallace -- CouchDB storage of DICOM info and binary data + * pydicom_series.py by Almar Klein -- Reads files and separates into distinct series. + +== Other == + * switch to Distribute for packaging + * preliminary work on python 3 compatiblity + * preliminary work on using sphinx for documentation + * preliminary work on better writing of files from scratch + + += Release notes for pydicom 0.9.4 = + +*NOTE:* + * there is a *backwards incompatible* change made to storage of file_meta info. See item below. + * pydicom 0.9.4 requires python 2.4 or higher (pydicom 0.9.3 can run under python 2.3) + +== Major changes/additions in this version == + * file reading code reorganized substantially + * significant speed increase for reading DICOM files -- approx 3 times faster than 0.9.3 + * partial file reading available -- in particular, new optional argument to read_file(), stop_before_pixels, will stop before getting to the pixel data, not reading those into memory. Saves a little time for small images, but could be quite helpful for very large images when the pixel data is not needed. + * read_file() now returns a !FileDataset object, instead of a plain Dataset. Most user code will not see much difference (except see next bullet on file meta information) but now the information stored in the object has been made explicit -- e.g. the endian-ness and whether the file syntax was explicit VR or implicit VR. + * file meta info has been separated from the main dataset. Logically, this makes more sense, as the file meta is not really part of the dataset, but is specific to the method of storage. This is a backwards-incompatible change, but is easily fixed by changing any references to file-meta data elements from {{{dataset.}}} to {{{dataset.file_meta.}}}. The file_meta is a dataset like any other, all the usual methods for viewing, changing data elements work on it also. + * private dictionaries file now generated from the GDCM library's private dictionary -- code to convert formats contributed by Daniel Nanz. + * license has returned to an MIT-based license (with the compatible GDCM also noted for the private dictionary component). + * contributed files with example code for viewing using wxPython or Tkinter (and PIL) -- in dicom.contrib folder. Thanks to Dave Witten, Daniel Nanz and Adit Panchal for these contributions. + * updates to pydicom's DICOM data dictionary contributed by Adit Panchal: CP805/916; Supp 43 and 117 (and UID dict), Supp 119 and 122 + +== Other changes and bug fixes == + * Tag is now a factory function; the class is called !BaseTag. This was part of the file reading speed-up process -- a new class !TupleTag was also created, for faster file reading + * passing a file object to read_file() now works correctly, and also the file closing works as it should (caller needs to close any files passed in) (issue 73) + * Fix for issue 72 : dataset.get() fails when passed type other than string or Tag. Patch contributed by !NikitaTheSpider + * Fix for issue 58 : error opening file with unicode. Fix contributed by Pierre Raybaut + * Fix for issue 42 : catch !AttributeError in property and give proper error message + * Fix for issue 55 : UI type changed with string operations + * Tag fixes and enhancements : can create tags with hex string (group, elem). Allow lists as well as tuples (issue 47). Fix arg2=0 bug (issue 64). + + += Release notes for pydicom 0.9.3 = + +== Major changes == + * changed to MIT-style license + * option to defer reading of large data element values using read_file()'s new defer_size argument (r102, r103) + * dictionary of private tags added -- descriptive text shown when available (issue36, r97, r110) + * more conversion to PEP-8 style. Should now use read_file(), save_as(), pixel_array rather than !ReadFile(), !SaveAs(), !PixelArray. Old names kept for now as aliases. + +== Other Enhancements == + * added DicomFileLike class to simplify and generalize access. Any object that has read, write, seek, tell, and close can now be used. (r105) + * added dataset.iterall() function to iterate through all items (including inside sequences) (r105) + * added dataset.formatted_lines() generator to allow custom formatting (r91, r113) + * made reading tolerant of truncated files -- gives a warning, but returns dataset read to that point (r95) + +== Bug Fixes == + * fixed issue38, name collision for 'Other Patient Ids' as both data element and sequence name in DICOM standard (r95, r96) + * fixed issue40, blank VRs in some DICOM dictionary entries caused NotImplementError on reading (r100) + * fixed issue41, reading VRs of 'US or SS' and similar split on backslash character (r104) + * fixed bug where TransferSyntaxUID not present when reading file without DICOM header (r109) + * fixed print recursion bug when printing a UID (r111) + +== Other == + * many of the example files updated + * updated anonymize example file to also deal with 'OtherPatientIDs' and 'PatientsBirthDate' (r98) + += Release notes for pydicom 0.9.2 = + +== Major changes == + * Renamed Attribute class and related modules to !DataElement. Old code will continue to work until pydicom 1.0, but with a !DeprecationWarning (issue22, r72, r73) + * Added support for character sets through Specific Character Set (0008,0005), using python unicode. Thus foreign languages can display names in Greek, Japanese, Chinese etc characters in environments which support unicode (demonstrated in dicomtree.py example using Tkinter GUI) (r64, r65) + +== Other Enhancements == + * Added support for auto-completion of dataset elements in ipython; also all environments using python 2.6 (r69, r70) + * Added __iter__() to Dataset so returns data elements in DICOM order with "for data_elem in dataset:" (r68) + * Added dicomtree.py example program showing a DICOM file in a GUI window (Tkinter/Tix). + * Added !PersonName class to parse components of names more easily (r55) + * Added UID class to handle UID values. Name rather than UID number shown, UID_dictionary used (r51). + * Code tested under python 2.6 + * Added !DataElement.name property; synonym for !DataElement.description() function + +== Bug Fixes == + * Fixed issue27, sequence with a single empty item read incorrectly + * Fixed bug that read_OW did not handle !UndefinedLength (r50) + * Fixed bugs in example files anonymize.py, !DicomInfo.py, and dicomtree.py (r51) + * Fixed issue33, VR=UN being split on backslash (r70) + * Fixed issue18, util directory not installed (r45) + +== Other == + * Added example file myprint.py -- shows how to custom format DICOM file information (r67) + * Reorganized test files and added various new tests + * added preliminary work on encapsulated data (r50) + * added some simple files to view or work with pixel data (r46) + * Dataset.!PixelDataArray() Numpy array changed to property Dataset.!PixelArray + * changed to setuptools for packaging rather than distutils diff -Nru pydicom-0.9.8/docs/viewing_images.rst pydicom-0.9.9/docs/viewing_images.rst --- pydicom-0.9.8/docs/viewing_images.rst 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/viewing_images.rst 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,70 @@ +.. _viewing_images: + +============== +Viewing Images +============== + +.. rubric:: How to use other packages with pydicom to view DICOM images + +Introduction +============ + +pydicom is mainly concerned with getting at the DICOM data elements in files, +but it is often desirable to view pixel data as an image. +There are several options: + + * Use any of the many `DICOM viewer + `_ + programs available + * use pydicom with `matplotlib `_ + * use pydicom with Tkinter (comes standard with python) + * use pydicom with the `Python Imaging Library (PIL) + `_ + * use pydicom with `wxPython `_ + +Using pydicom with matplotlib +============================= + +matplotlib is available at http://matplotlib.sourceforge.net/. It +can take 2-d image information from ``Dataset.pixel_array`` and display it. +Here is an example:: + + >>> import dicom + >>> import pylab + >>> ds=dicom.read_file("CT_small.dcm") + >>> pylab.imshow(ds.pixel_array, cmap=pylab.cm.bone) + + >>> pylab.show() + >>> + +Thanks to Roy Keyes for pointing out how to do this. + + +Using pydicom with Tkinter +========================== + +The program `pydicom_Tkinter.py +`_ +in the ``contrib`` folder demonstrates how to show an image using the +Tkinter graphics system, which comes standard with most python installs. +It creates a Tkinter PhotoImage in a Label widget or a user-supplied widget. + + +Using pydicom with Python Imaging Library (PIL) +=============================================== + +The module `pydicom_PIL.py +`_ +in the ``contrib`` folder +uses PIL's ``Image.show()`` method after creating an Image instance +from the pixel data and some basic information about it (bit depth, LUTs, etc) + + +Using pydicom with wxPython +=========================== + +The module `imViewer-Simple.py +`_ +in the ``contrib`` folder uses wxPython (also PIL, but it notes that it +may not be strictly necessary) to display an image from a pydicom dataset. + diff -Nru pydicom-0.9.8/docs/working_with_pixel_data.rst pydicom-0.9.9/docs/working_with_pixel_data.rst --- pydicom-0.9.8/docs/working_with_pixel_data.rst 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/docs/working_with_pixel_data.rst 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,66 @@ +.. _working_with_pixel_data: +.. title:: Working with Pixel Data + +======================= +Working with Pixel Data +======================= + +.. rubric:: How to work with pixel data in pydicom. + +Introduction +============ + +pydicom tends to be "lazy" in interpreting DICOM data. For example, +by default it doesn't do anything with pixel data +except read in the raw bytes:: + + >>> import dicom + >>> ds=dicom.read_file("MR_small.dcm") + >>> ds.PixelData + '\x89\x03\xfb\x03\xcb\x04\xeb\x04\xf9\x02\x94\x01\x7f ... + ... + +``PixelData`` contains the raw bytes exactly as found in the file. +If the image is JPEG compressed, these bytes will be the compressed +pixel data, not the expanded, uncompressed image. Whether the image is +e.g. 16-bit or 8-bit, multiple frames or not, ``PixelData`` contains the same +raw bytes. But there is a function that can shape the pixels more sensibly +if you need to work with them... + +pixel_array +=========== + +A property of Dataset called ``pixel_array`` provides more useful pixel data +for uncompressed images. The `NumPy `_ +numerical package must be installed on your system to use this property, +because ``pixel_array`` returns a NumPy array:: + + >>> import dicom + >>> ds=dicom.read_file("MR_small.dcm") + >>> ds.pixel_array + array([[ 905, 1019, 1227, ..., 302, 304, 328], + [ 628, 770, 907, ..., 298, 331, 355], + [ 498, 566, 706, ..., 280, 285, 320], + ..., + [ 334, 400, 431, ..., 1094, 1068, 1083], + [ 339, 377, 413, ..., 1318, 1346, 1336], + [ 378, 374, 422, ..., 1369, 1129, 862]], dtype=int16) + >>> ds.pixel_array.shape + (64, 64) + +NumPy can be used to modify the pixels, but if the changes are to be saved, +they must be written back to the ``PixelData`` attribute:: + + >>> for n,val in enumerate(ds.pixel_array.flat): # example: zero anything < 300 + ... if val < 300: + ... ds.pixel_array.flat[n]=0 + >>> ds.PixelData = ds.pixel_array.tostring() + >>> ds.save_as("newfilename.dcm") + +Some changes may require other DICOM tags to be modified. For example, +if the pixel data is reduced (e.g. a 512x512 image is collapsed to 256x256) +then ``ds.Rows`` and ``ds.Columns`` should be set appropriately. +You must explicitly set these yourself; pydicom does not do so automatically. + +``pixel_array`` can also be used to pass image data to graphics libraries +for viewing. See :doc:`viewing_images` for details. \ No newline at end of file diff -Nru pydicom-0.9.8/.gitignore pydicom-0.9.9/.gitignore --- pydicom-0.9.8/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/.gitignore 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,38 @@ +# .gitignore file + +# Backup files +*~ + +# Lock files used by the Emacs editor. +.\#* + +# Temporary files used by editors. +*.swp +*.orig +*.bak + +# A hidden file created by the Mac OS X Finder. +.DS_Store + +# python byte-code files +*.pyc +*.pyo + +# Build/dist files +source/dist/* +source/build/* +source/pydicom.egg-info/* +source/distribute*.egg +source/distribute*.tar.gz +py3source +source/.tox/* + +# Docs build +docs/_build/* + +# coverage.py files +source/dicom/test/.coverage +source/dicom/test/htmlcov + +# PyCharm IDE files +*.idea* diff -Nru pydicom-0.9.8/MANIFEST.in pydicom-0.9.9/MANIFEST.in --- pydicom-0.9.8/MANIFEST.in 2013-01-20 00:37:32.000000000 +0000 +++ pydicom-0.9.9/MANIFEST.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -include dicom/testfiles/* -include dicom/testcharsetfiles/* -include dicom/test/all.bat -include dicom/test/shell_all -include dicom/doc/* -include distribute_setup.py diff -Nru pydicom-0.9.8/PKG-INFO pydicom-0.9.9/PKG-INFO --- pydicom-0.9.8/PKG-INFO 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/PKG-INFO 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -Metadata-Version: 1.1 -Name: pydicom -Version: 0.9.8 -Summary: Pure python package for DICOM medical file reading and writing -Home-page: http://pydicom.googlecode.com -Author: Darcy Mason -Author-email: darcymason@gmail.com -License: MIT license -Description: - pydicom is a pure python package for parsing DICOM files. - DICOM is a standard (http://medical.nema.org) for communicating - medical images and related information such as reports - and radiotherapy objects. - - pydicom makes it easy to read these complex files into natural - pythonic structures for easy manipulation. - Modified datasets can be written again to DICOM format files. - See the `Getting Started `_ - wiki page for installation and basic information, and the - `Pydicom User Guide `_ page - for an overview of how to use the pydicom library. - -Keywords: dicom python medical imaging -Platform: UNKNOWN -Classifier: License :: OSI Approved :: MIT License -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: Healthcare Industry -Classifier: Intended Audience :: Science/Research -Classifier: Development Status :: 4 - Beta -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Operating System :: OS Independent -Classifier: Topic :: Scientific/Engineering :: Medical Science Apps. -Classifier: Topic :: Scientific/Engineering :: Physics -Classifier: Topic :: Software Development :: Libraries diff -Nru pydicom-0.9.8/pydicom.egg-info/dependency_links.txt pydicom-0.9.9/pydicom.egg-info/dependency_links.txt --- pydicom-0.9.8/pydicom.egg-info/dependency_links.txt 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/pydicom.egg-info/dependency_links.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru pydicom-0.9.8/pydicom.egg-info/not-zip-safe pydicom-0.9.9/pydicom.egg-info/not-zip-safe --- pydicom-0.9.8/pydicom.egg-info/not-zip-safe 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/pydicom.egg-info/not-zip-safe 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ - diff -Nru pydicom-0.9.8/pydicom.egg-info/PKG-INFO pydicom-0.9.9/pydicom.egg-info/PKG-INFO --- pydicom-0.9.8/pydicom.egg-info/PKG-INFO 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/pydicom.egg-info/PKG-INFO 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -Metadata-Version: 1.1 -Name: pydicom -Version: 0.9.8 -Summary: Pure python package for DICOM medical file reading and writing -Home-page: http://pydicom.googlecode.com -Author: Darcy Mason -Author-email: darcymason@gmail.com -License: MIT license -Description: - pydicom is a pure python package for parsing DICOM files. - DICOM is a standard (http://medical.nema.org) for communicating - medical images and related information such as reports - and radiotherapy objects. - - pydicom makes it easy to read these complex files into natural - pythonic structures for easy manipulation. - Modified datasets can be written again to DICOM format files. - See the `Getting Started `_ - wiki page for installation and basic information, and the - `Pydicom User Guide `_ page - for an overview of how to use the pydicom library. - -Keywords: dicom python medical imaging -Platform: UNKNOWN -Classifier: License :: OSI Approved :: MIT License -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: Healthcare Industry -Classifier: Intended Audience :: Science/Research -Classifier: Development Status :: 4 - Beta -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2.6 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Operating System :: OS Independent -Classifier: Topic :: Scientific/Engineering :: Medical Science Apps. -Classifier: Topic :: Scientific/Engineering :: Physics -Classifier: Topic :: Software Development :: Libraries diff -Nru pydicom-0.9.8/pydicom.egg-info/SOURCES.txt pydicom-0.9.9/pydicom.egg-info/SOURCES.txt --- pydicom-0.9.8/pydicom.egg-info/SOURCES.txt 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/pydicom.egg-info/SOURCES.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -MANIFEST.in -distribute_setup.py -setup.py -dicom/UID.py -dicom/_UID_dict.py -dicom/__init__.py -dicom/_dicom_dict.py -dicom/_private_dict.py -dicom/charset.py -dicom/config.py -dicom/datadict.py -dicom/dataelem.py -dicom/dataset.py -dicom/encaps.py -dicom/filebase.py -dicom/filereader.py -dicom/fileutil.py -dicom/filewriter.py -dicom/misc.py -dicom/multival.py -dicom/sequence.py -dicom/tag.py -dicom/valuerep.py -dicom/values.py -dicom/contrib/__init__.py -dicom/contrib/dcm_qt_tree.py -dicom/contrib/dicom_dao.py -dicom/contrib/imViewer_Simple.py -dicom/contrib/pydicom_PIL.py -dicom/contrib/pydicom_Tkinter.py -dicom/contrib/pydicom_series.py -dicom/doc/index.html -dicom/examples/DicomDiff.py -dicom/examples/DicomInfo.py -dicom/examples/ListBeams.py -dicom/examples/__init__.py -dicom/examples/anonymize.py -dicom/examples/dicomtree.py -dicom/examples/myprint.py -dicom/examples/show_charset_name.py -dicom/examples/write_new.py -dicom/test/__init__.py -dicom/test/_write_stds.py -dicom/test/all.bat -dicom/test/run_tests.py -dicom/test/shell_all -dicom/test/test_UID.py -dicom/test/test_charset.py -dicom/test/test_dataelem.py -dicom/test/test_dataset.py -dicom/test/test_dictionary.py -dicom/test/test_filereader.py -dicom/test/test_filewriter.py -dicom/test/test_multival.py -dicom/test/test_rawread.py -dicom/test/test_sequence.py -dicom/test/test_tag.py -dicom/test/test_valuerep.py -dicom/test/version_dep.py -dicom/test/warncheck.py -dicom/test/performance/__init__.py -dicom/test/performance/raw_convert_test.py -dicom/test/performance/time_test.py -dicom/testcharsetfiles/FileInfo.txt -dicom/testcharsetfiles/charlist.py -dicom/testcharsetfiles/chrArab.dcm -dicom/testcharsetfiles/chrFren.dcm -dicom/testcharsetfiles/chrFrenMulti.dcm -dicom/testcharsetfiles/chrGerm.dcm -dicom/testcharsetfiles/chrGreek.dcm -dicom/testcharsetfiles/chrH31.dcm -dicom/testcharsetfiles/chrH32.dcm -dicom/testcharsetfiles/chrHbrw.dcm -dicom/testcharsetfiles/chrI2.dcm -dicom/testcharsetfiles/chrJapMulti.dcm -dicom/testcharsetfiles/chrKoreanMulti.dcm -dicom/testcharsetfiles/chrRuss.dcm -dicom/testcharsetfiles/chrSQEncoding.dcm -dicom/testcharsetfiles/chrX1.dcm -dicom/testcharsetfiles/chrX2.dcm -dicom/testfiles/CT_small.dcm -dicom/testfiles/ExplVR_BigEnd.dcm -dicom/testfiles/JPEG-LL.dcm -dicom/testfiles/JPEG-lossy.dcm -dicom/testfiles/JPEG2000.dcm -dicom/testfiles/MR_small.dcm -dicom/testfiles/README.txt -dicom/testfiles/image_dfl.dcm -dicom/testfiles/nested_priv_SQ.dcm -dicom/testfiles/no_meta_group_length.dcm -dicom/testfiles/priv_SQ.dcm -dicom/testfiles/reportsi.dcm -dicom/testfiles/rtdose.dcm -dicom/testfiles/rtplan.dcm -dicom/testfiles/rtplan.dump -dicom/testfiles/rtplan_truncated.dcm -dicom/testfiles/rtstruct.dcm -dicom/testfiles/rtstruct.dump -dicom/testfiles/test-SR.dcm -dicom/testfiles/test.py -dicom/testfiles/zipMR.gz -dicom/util/__init__.py -dicom/util/dump.py -dicom/util/hexutil.py -pydicom.egg-info/PKG-INFO -pydicom.egg-info/SOURCES.txt -pydicom.egg-info/dependency_links.txt -pydicom.egg-info/not-zip-safe -pydicom.egg-info/top_level.txt \ No newline at end of file diff -Nru pydicom-0.9.8/pydicom.egg-info/top_level.txt pydicom-0.9.9/pydicom.egg-info/top_level.txt --- pydicom-0.9.8/pydicom.egg-info/top_level.txt 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/pydicom.egg-info/top_level.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -dicom diff -Nru pydicom-0.9.8/README.md pydicom-0.9.9/README.md --- pydicom-0.9.8/README.md 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/README.md 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,16 @@ +pydicom +======= + +pydicom is a pure python package for working with [DICOM](http://medical.nema.org/) files. +It was made for inspecting and modifying DICOM data in an easy "pythonic" way. +The modifications can be written again to a new file. + +As a pure python package, pydicom can run anywhere python runs without any other requirements, +although [NumPy](http://www.numpy.org) is needed if manipulating pixel data. + +pydicom is not a DICOM server, and is not primarily about viewing images. It is designed to let you +manipulate data elements in DICOM files with python code. + +Limitations -- the main limitation of the current version is that _compressed_ pixel data (e.g. JPEG) +cannot be altered in an intelligent way as it can for uncompressed pixels. +Files can always be read and saved, but compressed pixel data cannot easily be modified. diff -Nru pydicom-0.9.8/setup.cfg pydicom-0.9.9/setup.cfg --- pydicom-0.9.8/setup.cfg 2013-01-20 00:43:15.000000000 +0000 +++ pydicom-0.9.9/setup.cfg 1970-01-01 00:00:00.000000000 +0000 @@ -1,5 +0,0 @@ -[egg_info] -tag_build = -tag_date = 0 -tag_svn_revision = 0 - diff -Nru pydicom-0.9.8/setup.py pydicom-0.9.9/setup.py --- pydicom-0.9.8/setup.py 2013-01-20 00:37:33.000000000 +0000 +++ pydicom-0.9.9/setup.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -#!/usr/bin/env python -from distribute_setup import use_setuptools -use_setuptools(version="0.6.17") - -from setuptools import setup, find_packages -import os -import os.path - -import sys - -extra = {} - -# Uncomment the following two lines to test in python 3 -# if sys.version_info >= (3,): -# extra['use_2to3'] = True - -setup( - name="pydicom", - packages=find_packages(), - include_package_data=True, - version="0.9.8", - package_data={'dicom': ['testfiles/*.dcm']}, - zip_safe=False, # want users to be able to see included examples,tests - description="Pure python package for DICOM medical file reading and writing", - author="Darcy Mason", - author_email="darcymason@gmail.com", - url="http://pydicom.googlecode.com", - license="MIT license", - keywords="dicom python medical imaging", - classifiers=[ - "License :: OSI Approved :: MIT License", - "Intended Audience :: Developers", - "Intended Audience :: Healthcare Industry", - "Intended Audience :: Science/Research", - "Development Status :: 4 - Beta", - "Programming Language :: Python", - "Programming Language :: Python :: 2.6", - "Programming Language :: Python :: 2.7", - #"Programming Language :: Python :: 3.0", - #"Programming Language :: Python :: 3.1", - #"Programming Language :: Python :: 3.2", - #"Programming Language :: Python :: 3.3", - "Operating System :: OS Independent", - "Topic :: Scientific/Engineering :: Medical Science Apps.", - "Topic :: Scientific/Engineering :: Physics", - "Topic :: Software Development :: Libraries", - ], - long_description=""" - pydicom is a pure python package for parsing DICOM files. - DICOM is a standard (http://medical.nema.org) for communicating - medical images and related information such as reports - and radiotherapy objects. - - pydicom makes it easy to read these complex files into natural - pythonic structures for easy manipulation. - Modified datasets can be written again to DICOM format files. - See the `Getting Started `_ - wiki page for installation and basic information, and the - `Pydicom User Guide `_ page - for an overview of how to use the pydicom library. - """, - test_loader="dicom.test.run_tests:MyTestLoader", - test_suite="dummy_string", - **extra -) diff -Nru pydicom-0.9.8/source/dicom/charset.py pydicom-0.9.9/source/dicom/charset.py --- pydicom-0.9.8/source/dicom/charset.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/charset.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,133 @@ +# charset.py +"""Handle alternate character sets for character strings.""" +# +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + +import logging +logger = logging.getLogger('pydicom') +from dicom.valuerep import PersonNameUnicode, text_VRs +from dicom import in_py3 + +# Map DICOM Specific Character Set to python equivalent +python_encoding = { + '': 'iso8859', # default character set for DICOM + 'ISO_IR 6': 'iso8859', # alias for latin_1 too + 'ISO_IR 100': 'latin_1', + 'ISO 2022 IR 87': 'iso2022_jp', + 'ISO 2022 IR 13': 'shift_jis', + 'ISO 2022 IR 149': 'euc_kr', # needs cleanup via clean_escseq() + 'ISO_IR 192': 'UTF8', # from Chinese example, 2008 PS3.5 Annex J p1-4 + 'GB18030': 'GB18030', + 'ISO_IR 126': 'iso_ir_126', # Greek + 'ISO_IR 127': 'iso_ir_127', # Arab + 'ISO_IR 138': 'iso_ir_138', # Hebrew + 'ISO_IR 144': 'iso_ir_144', # Russian +} + +default_encoding = "iso8859" + + +def clean_escseq(element, encodings): + """Remove escape sequences that Python does not remove from + Korean encoding ISO 2022 IR 149 due to the G1 code element. + """ + if 'euc_kr' in encodings: + return element.replace( + "\x1b\x24\x29\x43", "").replace("\x1b\x28\x42", "") + else: + return element + +# DICOM PS3.5-2008 6.1.1 (p 18) says: +# default is ISO-IR 6 G0, equiv to common chr set of ISO 8859 (PS3.5 6.1.2.1) +# (0008,0005) value 1 can *replace* the default encoding... +# for VRs of SH, LO, ST, LT, PN and UT (PS3.5 6.1.2.3)... +# with a single-byte character encoding +# if (0008,0005) is multi-valued, then value 1 (or default if blank)... +# is used until code extension escape sequence is hit, +# which can be at start of string, or after CR/LF, FF, or +# in Person Name PN, after ^ or = +# NOTE also that 7.5.3 SEQUENCE INHERITANCE states that if (0008,0005) +# is not present in a sequence item then it is inherited from its parent. + + +def convert_encodings(encodings): + """Converts DICOM encodings into corresponding python encodings""" + + # If a list if passed, we don't want to modify the list in place so copy it + encodings = encodings[:] + + if isinstance(encodings, basestring): + encodings = [encodings] + elif not encodings[0]: + encodings[0] = 'ISO_IR 6' + + try: + encodings = [python_encoding[x] for x in encodings] + except KeyError: # Assume that it is already the python encoding (is there a way to check this?) + pass + + if len(encodings) == 1: + encodings = [encodings[0]] * 3 + elif len(encodings) == 2: + encodings.append(encodings[1]) + + return encodings + + +def decode(data_element, dicom_character_set): + """Apply the DICOM character encoding to the data element + + data_element -- DataElement instance containing a value to convert + dicom_character_set -- the value of Specific Character Set (0008,0005), + which may be a single value, + a multiple value (code extension), or + may also be '' or None. + If blank or None, ISO_IR 6 is used. + + """ + if not dicom_character_set: + dicom_character_set = ['ISO_IR 6'] + + encodings = convert_encodings(dicom_character_set) + + # decode the string value to unicode + # PN is special case as may have 3 components with differenct chr sets + if data_element.VR == "PN": + # logger.warn("%s ... type: %s" %(str(data_element), type(data_element.VR))) + if in_py3: + if data_element.VM == 1: + data_element.value = data_element.value.decode(encodings) + else: + data_element.value = [val.decode(encodings) for val in data_element.value] + else: + if data_element.VM == 1: + data_element.value = PersonNameUnicode(data_element.value, encodings) + else: + data_element.value = [PersonNameUnicode(value, encodings) + for value in data_element.value] + if data_element.VR in text_VRs: + # Remove the first encoding if this is a multi-byte encoding + if len(encodings) > 1: + del encodings[0] + + # You can't re-decode unicode (string literals in py3) + if data_element.VM == 1: + if isinstance(data_element.value, unicode): + return + data_element.value = clean_escseq( + data_element.value.decode(encodings[0]), encodings) + else: + + output = list() + + for value in data_element.value: + if isinstance(value, unicode): + output.append(value) + else: + output.append(clean_escseq(value.decode(encodings[0]), encodings)) + + data_element.value = output diff -Nru pydicom-0.9.8/source/dicom/config.py pydicom-0.9.9/source/dicom/config.py --- pydicom-0.9.8/source/dicom/config.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/config.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,36 @@ +# config.py +"""Pydicom configuration options.""" +# Copyright (c) 2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +# doc strings following items are picked up by sphinx for documentation + +# Set the type used to hold DS values + +use_DS_decimal = False # default False; was decimal-based in pydicom 0.9.7 + + +def DS_decimal(use_Decimal_boolean=True): + """Set DS class to be derived from Decimal (True) or from float (False) + If this function is never called, the default in pydicom >= 0.9.8 + is for DS to be based on float. + """ + use_DS_decimal = use_Decimal_boolean + import dicom.valuerep + if use_DS_decimal: + dicom.valuerep.DSclass = dicom.valuerep.DSdecimal + else: + dicom.valuerep.DSclass = dicom.valuerep.DSfloat + + +allow_DS_float = False +"""Set allow_float to True to allow DSdecimal instances to be created with floats; +otherwise, they must be explicitly converted to strings, with the user +explicity setting the precision of digits and rounding. Default: False""" + +enforce_valid_values = True +"""Raise errors if any value is not allowed by DICOM standard, e.g. DS strings +that are longer than 16 characters; IS strings outside the allowed range. +""" diff -Nru pydicom-0.9.8/source/dicom/contrib/dcm_qt_tree.py pydicom-0.9.9/source/dicom/contrib/dcm_qt_tree.py --- pydicom-0.9.8/source/dicom/contrib/dcm_qt_tree.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/dcm_qt_tree.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,101 @@ +# dcm_qt_tree.py +"""View DICOM files in a tree using Qt and PySide""" +# Copyright (c) 2013 Padraig Looney +# This file is released under the pydicom (http://code.google.com/p/pydicom/) +# license, see the file license.txt available at +# (http://code.google.com/p/pydicom/) + +import dicom +import sys +from PySide import QtGui +import collections + + +class DicomTree: + + def __init__(self, filename): + self.filename = filename + + def show_tree(self): + ds = self.dicom_to_dataset(self.filename) + dic = self.dataset_to_dic(ds) + model = self.dic_to_model(dic) + self.display(model) + + def array_to_model(self, array): + model = QtGui.QStandardItemModel() + parentItem = model.invisibleRootItem() + for ntuple in array: + tag = ntuple[0] + value = ntuple[1] + if isinstance(value, dict): + self.recurse_dic_to_item(value, parentItem) + else: + item = QtGui.QStandardItem(tag + str(value)) + parentItem.appendRow(item) + return parentItem + + def dic_to_model(self, dic): + model = QtGui.QStandardItemModel() + parentItem = model.invisibleRootItem() + self.recurse_dic_to_item(dic, parentItem) + return model + + def dataset_to_array(self, dataset): + array = [] + for data_element in dataset: + array.append(self.data_element_to_dic(data_element)) + return array + + def recurse_dic_to_item(self, dic, parent): + for k in dic: + v = dic[k] + if isinstance(v, dict): + item = QtGui.QStandardItem(k + ':' + str(v)) + parent.appendRow(self.recurse_dic_to_item(v, item)) + else: + item = QtGui.QStandardItem(k + ': ' + str(v)) + parent.appendRow(item) + return parent + + def dicom_to_dataset(self, filename): + dataset = dicom.read_file(filename, force=True) + return dataset + + def data_element_to_dic(self, data_element): + dic = collections.OrderedDict() + if data_element.VR == "SQ": + items = collections.OrderedDict() + dic[data_element.name] = items + i = 0 + for dataset_item in data_element: + items['item ' + str(i)] = self.dataset_to_dic(dataset_item) + i += 1 + elif data_element.name != 'Pixel Data': + dic[data_element.name] = data_element.value + return dic + + def dataset_to_dic(self, dataset): + dic = collections.OrderedDict() + for data_element in dataset: + dic.update(self.data_element_to_dic(data_element)) + return dic + + def display(self, model): + app = QtGui.QApplication.instance() + if not app: # create QApplication if it doesnt exist + app = QtGui.QApplication(sys.argv) + tree = QtGui.QTreeView() + tree.setModel(model) + tree.show() + app.exec_() + return tree + + +def main(): + filename = sys.argv[1] + dicomTree = DicomTree(filename) + dicomTree.show_tree() + +if __name__ == "__main__": + main() diff -Nru pydicom-0.9.8/source/dicom/contrib/dicom_dao.py pydicom-0.9.9/source/dicom/contrib/dicom_dao.py --- pydicom-0.9.8/source/dicom/contrib/dicom_dao.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/dicom_dao.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,409 @@ +#!/usr/bin/python + +""" dicom_dao + +Data Access Objects for persisting PyDicom DataSet objects. + +Currently we support couchdb through the DicomCouch class. + +Limitations: + - Private tags are discarded + +TODO: + - Unit tests with multiple objects open at a time + - Unit tests with rtstruct objects + - Support for mongodb (mongo has more direct support for binary data) + +Dependencies: + - PyDicom + - python-couchdb + +Tested with: + - PyDicom 0.9.4-1 + - python-couchdb 0.6 + - couchdb 0.10.1 + +""" +# +# Copyright (c) 2010 Michael Wallace +# This file is released under the pydicom license. +# See the file license.txt included with the pydicom distribution, also +# available at http://pydicom.googlecode.com +# + +import hashlib +import os +import string +import couchdb +import dicom + + +def uid2str(uid): + """ Convert PyDicom uid to a string """ + return repr(uid).strip("'") + +# When reading files a VR of 'US or SS' is left as binary, because we +# don't know how to interpret the values different numbers. We therefore +# treat it as binary and will continue to until either pydicom works it out +# for us, or we figure out a test. +BINARY_VR_VALUES = ['OW', 'OB', 'OW/OB', 'US or SS'] + + +class DicomCouch(dict): + """ A Data Access Object for persisting PyDicom objects into CouchDB + + We follow the same pattern as the python-couchdb library for getting and + setting documents, for example storing dicom.dataset.Dataset object dcm: + db = DicomCouch('http://localhost:5984/', 'dbname') + db[dcm.SeriesInstanceUID] = dcm + + The only constraints on the key are that it must be json-serializable and + unique within the database instance. In theory it should be possible to + use any DICOM UID. Unfortunately I have written this code under the + assumption that SeriesInstanceUID will always be used. This will be fixed. + + Retrieving object with key 'foo': + dcm = db['foo'] + + Deleting object with key 'foo': + dcm = db['foo'] + db.delete(dcm) + + TODO: + - It is possible to have couchdb assign a uid when adding objects. This + should be supported. + """ + + def __init__(self, server, db): + """ Create connection to couchdb server/db """ + super(DicomCouch, self).__init__() + self._meta = {} + server = couchdb.Server(server) + try: + self._db = server[db] + except couchdb.client.ResourceNotFound: + self._db = server.create(db) + + def __getitem__(self, key): + """ Retrieve DICOM object with specified SeriesInstanceUID """ + doc = self._db[key] + dcm = json2pydicom(doc) + + if dcm.SeriesInstanceUID not in self._meta: + self._meta[dcm.SeriesInstanceUID] = {} + self._meta[dcm.SeriesInstanceUID]['hashes'] = {} + + if '_attachments' in doc: + self.__get_attachments(dcm, doc) + _set_meta_info_dcm(dcm) + # Keep a copy of the couch doc for use in DELETE operations + self._meta[dcm.SeriesInstanceUID]['doc'] = doc + return dcm + + def __setitem__(self, key, dcm): + """ Write the supplied DICOM object to the database """ + try: + dcm.PixelData = dcm.pixel_array.tostring() + except AttributeError: + pass # Silently ignore errors due to pixel_array not existing + except NotImplementedError: + pass # Silently ignore attempts to modify compressed pixel data + except TypeError: + pass # Silently ignore errors due to PixelData not existing + + jsn, binary_elements, file_meta_binary_elements = pydicom2json(dcm) + _strip_elements(jsn, binary_elements) + _strip_elements(jsn['file_meta'], file_meta_binary_elements) + if dcm.SeriesInstanceUID in self._meta: + self.__set_meta_info_jsn(jsn, dcm) + + try: # Actually write to the db + self._db[key] = jsn + except TypeError as type_error: + if str(type_error) == 'string indices must be integers, not str': + pass + + if dcm.SeriesInstanceUID not in self._meta: + self._meta[dcm.SeriesInstanceUID] = {} + self._meta[dcm.SeriesInstanceUID]['hashes'] = {} + + self.__put_attachments(dcm, binary_elements, jsn) + # Get a local copy of the document + # We get this from couch because we get the _id, _rev and _attachments + # keys which will ensure we don't overwrite the attachments we just + # uploaded. + # I don't really like the extra HTTP GET and I think we can generate + # what we need without doing it. Don't have time to work out how yet. + self._meta[dcm.SeriesInstanceUID]['doc'] = \ + self._db[dcm.SeriesInstanceUID] + + def __str__(self): + """ Return the string representation of the couchdb client """ + return str(self._db) + + def __repr__(self): + """ Return the canonical string representation of the couchdb client """ + return repr(self._db) + + def __get_attachments(self, dcm, doc): + """ Set binary tags by retrieving attachments from couchdb. + + Values are hashed so they are only updated if they have changed. + + """ + for id in doc['_attachments'].keys(): + tagstack = id.split(':') + value = self._db.get_attachment(doc['_id'], id) + _add_element(dcm, tagstack, value) + self._meta[dcm.SeriesInstanceUID]['hashes'][id] = hashlib.md5(value) + + def __put_attachments(self, dcm, binary_elements, jsn): + """ Upload all new and modified attachments """ + elements_to_update = \ + [(tagstack, item) + for tagstack, item in binary_elements + if self.__attachment_update_needed(dcm, + _tagstack2id(tagstack + [item.tag]), item) + ] # nopep8 + for tagstack, element in elements_to_update: + id = _tagstack2id(tagstack + [element.tag]) + self._db.put_attachment(jsn, element.value, id) + self._meta[dcm.SeriesInstanceUID]['hashes'][id] = \ + hashlib.md5(element.value) + + def delete(self, dcm): + """ Delete from database and remove meta info from the DAO """ + self._db.delete(self._meta[dcm.SeriesInstanceUID]['doc']) + self._meta.pop(dcm.SeriesInstanceUID) + + def __set_meta_info_jsn(self, jsn, dcm): + """ Set the couch-specific meta data for supplied dict """ + jsn['_rev'] = self._meta[dcm.SeriesInstanceUID]['doc']['_rev'] + if '_attachments' in self._meta[dcm.SeriesInstanceUID]['doc']: + jsn['_attachments'] = \ + self._meta[dcm.SeriesInstanceUID]['doc']['_attachments'] + + def __attachment_update_needed(self, dcm, id, binary_element): + """ Compare hashes for binary element and return true if different """ + try: + hashes = self._meta[dcm.SeriesInstanceUID]['hashes'] + except KeyError: + return True # If no hashes dict then attachments do not exist + + if id not in hashes or hashes[id].digest() != \ + hashlib.md5(binary_element.value).digest(): + return True + else: + return False + + +def _add_element(dcm, tagstack, value): + """ Add element with tag, vr and value to dcm at location tagstack """ + current_node = dcm + for item in tagstack[:-1]: + try: + address = int(item) + except ValueError: + address = dicom.tag.Tag(__str2tag(item)) + current_node = current_node[address] + tag = __str2tag(tagstack[-1]) + vr = dicom.datadict.dictionaryVR(tag) + current_node[tag] = dicom.dataelem.DataElement(tag, vr, value) + + +def _tagstack2id(tagstack): + """ Convert a list of tags to a unique (within document) attachment id """ + return string.join([str(tag) for tag in tagstack], ':') + + +def _strip_elements(jsn, elements): + """ Remove supplied elements from the dict object + + We use this with a list of binary elements so that we don't store + empty tags in couchdb when we are already storing the binary data as + attachments. + + """ + for tagstack, element in elements: + if len(tagstack) == 0: + jsn.pop(element.tag) + else: + current_node = jsn + for tag in tagstack: + current_node = current_node[tag] + current_node.pop(element.tag) + + +def _set_meta_info_dcm(dcm): + """ Set the file metadata DataSet attributes + + This is done by PyDicom when we dicom.read_file(foo) but we need to do it + ourselves when creating a DataSet from scratch, otherwise we cannot use + foo.pixel_array or dicom.write_file(foo). + + This code is lifted from PyDicom. + + """ + TransferSyntax = dcm.file_meta.TransferSyntaxUID + if TransferSyntax == dicom.UID.ExplicitVRLittleEndian: + dcm.is_implicit_vr = False + dcm.is_little_endian = True # This line not in PyDicom + elif TransferSyntax == dicom.UID.ImplicitVRLittleEndian: + dcm.is_implicit_vr = True + dcm.is_little_endian = True + elif TransferSyntax == dicom.UID.ExplicitVRBigEndian: + dcm.is_implicit_vr = False + dcm.is_little_endian = False + elif TransferSyntax == dicom.UID.DeflatedExplicitVRLittleEndian: + dcm.is_implicit_vr = False # Deleted lines above as it relates + dcm.is_little_endian = True # to reading compressed file data. + else: + # Any other syntax should be Explicit VR Little Endian, + # e.g. all Encapsulated (JPEG etc) are ExplVR-LE by + # Standard PS 3.5-2008 A.4 (p63) + dcm.is_implicit_vr = False + dcm.is_little_endian = True + + +def pydicom2json(dcm): + """ Convert the supplied PyDicom object into a json-serializable dict + + Binary elements cannot be represented in json so we return these as + as separate list of the tuple (tagstack, element), where: + - element = dicom.dataelem.DataElement + - tagstack = list of tags/sequence IDs that address the element + + The tagstack variable means we know the absolute address of each binary + element. We then use this as the attachment id in couchdb - when we + retrieve the attachment we can then insert it at the appropriate point in + the tree. + + """ + dcm.remove_private_tags() # No support for now + dcm.decode() # Convert to unicode + binary_elements = [] + tagstack = [] + jsn = dict((key, __jsonify(dcm[key], binary_elements, tagstack)) + for key in dcm.keys()) + file_meta_binary_elements = [] + jsn['file_meta'] = dict((key, __jsonify(dcm.file_meta[key], + file_meta_binary_elements, tagstack)) + for key in dcm.file_meta.keys()) + return jsn, binary_elements, file_meta_binary_elements + + +def __jsonify(element, binary_elements, tagstack): + """ Convert key, value to json-serializable types + + Recursive, so if value is key/value pairs then all children will get + converted + + """ + value = element.value + if element.VR in BINARY_VR_VALUES: + binary_elements.append((tagstack[:], element)) + return '' + elif type(value) == list: + new_list = [__typemap(listvalue) for listvalue in value] + return new_list + elif type(value) == dicom.sequence.Sequence: + tagstack.append(element.tag) + nested_data = [] + for i in range(0, len(value)): + tagstack.append(i) + nested_data.append(dict( + (subkey, __jsonify(value[i][subkey], binary_elements, tagstack)) + for subkey in value[i].keys())) + tagstack.pop() + tagstack.pop() + return nested_data + else: + return __typemap(value) + + +def __typemap(value): + """ Map PyDicom types that won't serialise to JSON types """ + if type(value) == dicom.UID.UID: + return uid2str(value) + elif isinstance(value, dicom.tag.BaseTag): + return long(value) + else: + return value + + +def json2pydicom(jsn): + """ Convert the supplied json dict into a PyDicom object """ + dataset = dicom.dataset.Dataset() + # Don't try to convert couch specific tags + dicom_keys = [key for key in jsn.keys() + if key not in ['_rev', '_id', '_attachments', 'file_meta']] + for key in dicom_keys: + dataset.add(__dicomify(key, jsn[key])) + file_meta = dicom.dataset.Dataset() + for key in jsn['file_meta']: + file_meta.add(__dicomify(key, jsn['file_meta'][key])) + dataset.file_meta = file_meta + return dataset + + +def __dicomify(key, value): + """ Convert a json key, value to a PyDicom DataElement """ + tag = __str2tag(key) + if tag.element == 0: # 0 tag implies group length (filreader.py pydicom) + vr = 'UL' + else: + vr = dicom.datadict.dictionaryVR(tag) + + if vr == 'OW/OB': # Always write pixel data as bytes + vr = 'OB' # rather than words + + if vr == 'US or SS': # US or SS is up to us as the data is already + if value < 0: # decoded. We therefore choose US, unless we + vr = 'SS' # need a signed value. + else: + vr = 'US' + + if vr == 'SQ': # We have a sequence of datasets, so we recurse + seq_list = [__make_dataset([__dicomify(subkey, listvalue[subkey]) + for subkey in listvalue.keys()]) + for listvalue in value + ] + seq = dicom.sequence.Sequence(seq_list) + return dicom.dataelem.DataElement(tag, vr, seq) + else: + return dicom.dataelem.DataElement(tag, vr, value) + + +def __make_dataset(data_elements): + """ Create a Dataset from a list of DataElement objects """ + dataset = dicom.dataset.Dataset() + for element in data_elements: + dataset.add(element) + return dataset + + +def __str2tag(key): + """ Convert string representation of a tag into a Tag """ + return dicom.tag.Tag((int(key[1:5], 16), int(key[7:-1], 16))) + + +if __name__ == '__main__': + TESTDB = 'dicom_test' + SERVER = 'http://127.0.0.1:5984' + # Delete test database if it already exists + couch = couchdb.Server(SERVER) + try: + couch.delete(TESTDB) + except couchdb.client.ResourceNotFound: + pass # Don't worry if it didn't exist + + db = DicomCouch(SERVER, TESTDB) + + testfiles_dir = '../testfiles' + testfiles = os.listdir('../testfiles') + testfiles = filter(lambda x: x.endswith('dcm'), testfiles) + testfiles = map(lambda x: os.path.join('../testfiles', x), testfiles) + + for dcmfile in testfiles: + dcm = dicom.read_file(dcmfile) + db[dcm.SeriesInstanceUID] = dcm diff -Nru pydicom-0.9.8/source/dicom/contrib/imViewer_Simple.py pydicom-0.9.9/source/dicom/contrib/imViewer_Simple.py --- pydicom-0.9.8/source/dicom/contrib/imViewer_Simple.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/imViewer_Simple.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,292 @@ +# ========================================================================== +# imViewer-Simple.py +# +# An example program that opens uncompressed DICOM images and +# converts them via numPy and PIL to be viewed in wxWidgets GUI +# apps. The conversion is currently: +# +# pydicom->NumPy->PIL->wxPython.Image->wxPython.Bitmap +# +# Gruesome but it mostly works. Surely there is at least one +# of these steps that could be eliminated (probably PIL) but +# haven't tried that yet and I may want some of the PIL manipulation +# functions. +# +# This won't handle RLE, embedded JPEG-Lossy, JPEG-lossless, +# JPEG2000, old ACR/NEMA files, or anything wierd. Also doesn't +# handle some RGB images that I tried. +# +# Have added Adit Panchal's LUT code. It helps a lot, but needs +# to be further generalized. Added test for window and/or level +# as 'list' type - crude, but it worked for a bunch of old MR and +# CT slices I have. +# +# Testing: minimal +# Tried only on WinXP sp2 using numpy 1.3.0 +# and PIL 1.1.7b1, Python 2.6.4, and wxPython 2.8.10.1 +# +# Dave Witten: Nov. 11, 2009 +# ========================================================================== +import dicom +import wx +have_PIL = True +try: + import PIL.Image +except: + have_PIL = False +have_numpy = True +try: + import numpy as np +except: + have_numpy = False + +# ---------------------------------------------------------------- +# Initialize image capabilities. +# ---------------------------------------------------------------- +wx.InitAllImageHandlers() + + +def MsgDlg(window, string, caption='OFAImage', style=wx.YES_NO | wx.CANCEL): + """Common MessageDialog.""" + dlg = wx.MessageDialog(window, string, caption, style) + result = dlg.ShowModal() + dlg.Destroy() + return result + + +class ImFrame(wx.Frame): + """Class for main window.""" + + def __init__(self, parent, title): + """Create the pydicom image example's main frame window.""" + + wx.Frame.__init__(self, parent, id=-1, title="", pos=wx.DefaultPosition, + size=wx.Size(w=1024, h=768), + style=wx.DEFAULT_FRAME_STYLE | wx.SUNKEN_BORDER | wx.CLIP_CHILDREN) + + # -------------------------------------------------------- + # Set up the menubar. + # -------------------------------------------------------- + self.mainmenu = wx.MenuBar() + + # Make the 'File' menu. + menu = wx.Menu() + item = menu.Append(wx.ID_ANY, '&Open', 'Open file for editing') + self.Bind(wx.EVT_MENU, self.OnFileOpen, item) + item = menu.Append(wx.ID_ANY, 'E&xit', 'Exit Program') + self.Bind(wx.EVT_MENU, self.OnFileExit, item) + self.mainmenu.Append(menu, '&File') + + # Attach the menu bar to the window. + self.SetMenuBar(self.mainmenu) + + # -------------------------------------------------------- + # Set up the main splitter window. + # -------------------------------------------------------- + self.mainSplitter = wx.SplitterWindow(self, style=wx.NO_3D | wx.SP_3D) + self.mainSplitter.SetMinimumPaneSize(1) + + # ------------------------------------------------------------- + # Create the folderTreeView on the left. + # ------------------------------------------------------------- + self.dsTreeView = wx.TreeCtrl(self.mainSplitter, style=wx.TR_LINES_AT_ROOT | wx.TR_HAS_BUTTONS) + + # -------------------------------------------------------- + # Create the ImageView on the right pane. + # -------------------------------------------------------- + self.imView = wx.Panel(self.mainSplitter, style=wx.VSCROLL | wx.HSCROLL | wx.CLIP_CHILDREN) + self.imView.Bind(wx.EVT_PAINT, self.OnPaint) + self.imView.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground) + self.imView.Bind(wx.EVT_SIZE, self.OnSize) + + # -------------------------------------------------------- + # Install the splitter panes. + # -------------------------------------------------------- + self.mainSplitter.SplitVertically(self.dsTreeView, self.imView) + self.mainSplitter.SetSashPosition(300, True) + + # -------------------------------------------------------- + # Initialize some values + # -------------------------------------------------------- + self.dcmdsRoot = False + self.foldersRoot = False + self.loadCentered = True + self.bitmap = None + self.Show(True) + + def OnFileExit(self, event): + """Exits the program.""" + self.Destroy() + event.Skip() + + def OnSize(self, event): + "Window 'size' event." + self.Refresh() + + def OnEraseBackground(self, event): + "Window 'erase background' event." + pass + + def populateTree(self, ds): + """ Populate the tree in the left window with the [desired] + dataset values""" + if not self.dcmdsRoot: + self.dcmdsRoot = self.dsTreeView.AddRoot(text="DICOM Objects") + else: + self.dsTreeView.DeleteChildren(self.dcmdsRoot) + self.recurse_tree(ds, self.dcmdsRoot) + self.dsTreeView.ExpandAll() + + def recurse_tree(self, ds, parent, hide=False): + """ order the dicom tags """ + for data_element in ds: + if isinstance(data_element.value, unicode): + ip = self.dsTreeView.AppendItem(parent, text=unicode(data_element)) + else: + ip = self.dsTreeView.AppendItem(parent, text=str(data_element)) + + if data_element.VR == "SQ": + for i, ds in enumerate(data_element.value): + sq_item_description = data_element.name.replace(" Sequence", "") + item_text = "%s %d" % (sq_item_description, i + 1) + parentNodeID = self.dsTreeView.AppendItem(ip, text=item_text.rjust(128)) + self.recurse_tree(ds, parentNodeID) + +# --- Most of what is important happens below this line --------------------- + + def OnFileOpen(self, event): + """Opens a selected file.""" + dlg = wx.FileDialog(self, 'Choose a file to add.', '', '', '*.*', wx.OPEN) + if dlg.ShowModal() == wx.ID_OK: + fullPath = dlg.GetPath() + imageFile = dlg.GetFilename() + # checkDICMHeader() + self.show_file(imageFile, fullPath) + + def OnPaint(self, event): + "Window 'paint' event." + dc = wx.PaintDC(self.imView) + dc = wx.BufferedDC(dc) + + # paint a background just so it isn't *so* boring. + dc.SetBackground(wx.Brush("WHITE")) + dc.Clear() + dc.SetBrush(wx.Brush("GREY", wx.CROSSDIAG_HATCH)) + windowsize = self.imView.GetSizeTuple() + dc.DrawRectangle(0, 0, windowsize[0], windowsize[1]) + bmpX0 = 0 + bmpY0 = 0 + if self.bitmap is not None: + if self.loadCentered: + bmpX0 = (windowsize[0] - self.bitmap.Width) / 2 + bmpY0 = (windowsize[1] - self.bitmap.Height) / 2 + dc.DrawBitmap(self.bitmap, bmpX0, bmpY0, False) + + # ------------------------------------------------------------ + # ImFrame.ConvertWXToPIL() + # Expropriated from Andrea Gavana's + # ShapedButton.py in the wxPython dist + # ------------------------------------------------------------ + def ConvertWXToPIL(self, bmp): + """ Convert wx.Image Into PIL Image. """ + width = bmp.GetWidth() + height = bmp.GetHeight() + im = wx.EmptyImage(width, height) + im.fromarray("RGBA", (width, height), bmp.GetData()) + return im + + # ------------------------------------------------------------ + # ImFrame.ConvertPILToWX() + # Expropriated from Andrea Gavana's + # ShapedButton.py in the wxPython dist + # ------------------------------------------------------------ + def ConvertPILToWX(self, pil, alpha=True): + """ Convert PIL Image Into wx.Image. """ + if alpha: + image = apply(wx.EmptyImage, pil.size) + image.SetData(pil.convert("RGB").tostring()) + image.SetAlphaData(pil.convert("RGBA").tostring()[3::4]) + else: + image = wx.EmptyImage(pil.size[0], pil.size[1]) + new_image = pil.convert('RGB') + data = new_image.tostring() + image.SetData(data) + return image + + def get_LUT_value(self, data, window, level): + """Apply the RGB Look-Up Table for the given data and window/level value.""" + if not have_numpy: + raise ImportError("Numpy is not available. See http://numpy.scipy.org/ to download and install") + if isinstance(window, list): + window = window[0] + if isinstance(level, list): + level = level[0] + return np.piecewise(data, + [data <= (level - 0.5 - (window - 1) / 2), + data > (level - 0.5 + (window - 1) / 2)], + [0, 255, lambda data: ((data - (level - 0.5)) / (window - 1) + 0.5) * (255 - 0)] + ) + + # ----------------------------------------------------------- + # ImFrame.loadPIL_LUT(dataset) + # Display an image using the Python Imaging Library (PIL) + # ----------------------------------------------------------- + def loadPIL_LUT(self, dataset): + if not have_PIL: + raise ImportError("Python Imaging Library is not available. See http://www.pythonware.com/products/pil/ to download and install") + if('PixelData' not in dataset): + raise TypeError("Cannot show image -- DICOM dataset does not have pixel data") + if('WindowWidth' not in dataset) or ('WindowCenter' not in dataset): # can only apply LUT if these values exist + bits = dataset.BitsAllocated + samples = dataset.SamplesPerPixel + if bits == 8 and samples == 1: + mode = "L" + elif bits == 8 and samples == 3: + mode = "RGB" + elif bits == 16: # not sure about this -- PIL source says is 'experimental' and no documentation. + mode = "I;16" # Also, should bytes swap depending on endian of file and system?? + else: + raise TypeError("Don't know PIL mode for %d BitsAllocated and %d SamplesPerPixel" % (bits, samples)) + size = (dataset.Columns, dataset.Rows) + im = PIL.Image.frombuffer(mode, size, dataset.PixelData, "raw", mode, 0, 1) # Recommended to specify all details by http://www.pythonware.com/library/pil/handbook/image.htm + else: + image = self.get_LUT_value(dataset.pixel_array, dataset.WindowWidth, dataset.WindowCenter) + im = PIL.Image.fromarray(image).convert('L') # Convert mode to L since LUT has only 256 values: http://www.pythonware.com/library/pil/handbook/image.htm + return im + + def show_file(self, imageFile, fullPath): + """ Load the DICOM file, make sure it contains at least one + image, and set it up for display by OnPaint(). ** be + careful not to pass a unicode string to read_file or it will + give you 'fp object does not have a defer_size attribute, + or some such.""" + ds = dicom.read_file(str(fullPath)) + ds.decode() # change strings to unicode + self.populateTree(ds) + if 'PixelData' in ds: + self.dImage = self.loadPIL_LUT(ds) + if self.dImage is not None: + tmpImage = self.ConvertPILToWX(self.dImage, False) + self.bitmap = wx.BitmapFromImage(tmpImage) + self.Refresh() + +# ------ This is just the initialization of the App ------------------------- + + +# ======================================================= +# The main App Class. +# ======================================================= +class App(wx.App): + """Image Application.""" + + def OnInit(self): + """Create the Image Application.""" + ImFrame(None, 'wxImage Example') + return True + +# --------------------------------------------------------------------- +# If this file is running as main or a standalone test, begin execution here. +# --------------------------------------------------------------------- +if __name__ == '__main__': + app = App(0) + app.MainLoop() diff -Nru pydicom-0.9.8/source/dicom/contrib/__init__.py pydicom-0.9.9/source/dicom/contrib/__init__.py --- pydicom-0.9.8/source/dicom/contrib/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/__init__.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,2 @@ +# __init__.py +# Mark the folder as a python package diff -Nru pydicom-0.9.8/source/dicom/contrib/pydicom_PIL.py pydicom-0.9.9/source/dicom/contrib/pydicom_PIL.py --- pydicom-0.9.8/source/dicom/contrib/pydicom_PIL.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/pydicom_PIL.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,75 @@ +# pydicom_PIL.py +"""View DICOM images using Python image Library (PIL) + +Usage: +>>> import dicom +>>> from dicom.contrib.pydicom_PIL import show_PIL +>>> ds = dicom.read_file("filename") +>>> show_PIL(ds) + +Requires Numpy: http://numpy.scipy.org/ +and Python Imaging Library: http://www.pythonware.com/products/pil/ + +""" +# Copyright (c) 2009 Darcy Mason, Adit Panchal +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +# Based on image.py from pydicom version 0.9.3, +# LUT code added by Adit Panchal +# Tested on Python 2.5.4 (32-bit) on Mac OS X 10.6 +# using numpy 1.3.0 and PIL 1.1.7b1 + +have_PIL = True +try: + import PIL.Image +except: + have_PIL = False + +have_numpy = True +try: + import numpy as np +except: + have_numpy = False + + +def get_LUT_value(data, window, level): + """Apply the RGB Look-Up Table for the given data and window/level value.""" + if not have_numpy: + raise ImportError("Numpy is not available. See http://numpy.scipy.org/ to download and install") + + return np.piecewise(data, + [data <= (level - 0.5 - (window - 1) / 2), + data > (level - 0.5 + (window - 1) / 2)], + [0, 255, lambda data: ((data - (level - 0.5)) / (window - 1) + 0.5) * (255 - 0)]) + + +# Display an image using the Python Imaging Library (PIL) +def show_PIL(dataset): + if not have_PIL: + raise ImportError("Python Imaging Library is not available. See http://www.pythonware.com/products/pil/ to download and install") + if ('PixelData' not in dataset): + raise TypeError("Cannot show image -- DICOM dataset does not have pixel data") + if ('WindowWidth' not in dataset) or ('WindowCenter' not in dataset): # can only apply LUT if these values exist + bits = dataset.BitsAllocated + samples = dataset.SamplesPerPixel + if bits == 8 and samples == 1: + mode = "L" + elif bits == 8 and samples == 3: + mode = "RGB" + elif bits == 16: + mode = "I;16" # not sure about this -- PIL source says is 'experimental' and no documentation. Also, should bytes swap depending on endian of file and system?? + else: + raise TypeError("Don't know PIL mode for %d BitsAllocated and %d SamplesPerPixel" % (bits, samples)) + + # PIL size = (width, height) + size = (dataset.Columns, dataset.Rows) + + im = PIL.Image.frombuffer(mode, size, dataset.PixelData, "raw", mode, 0, 1) # Recommended to specify all details by http://www.pythonware.com/library/pil/handbook/image.htm + + else: + image = get_LUT_value(dataset.pixel_array, dataset.WindowWidth, dataset.WindowCenter) + im = PIL.Image.fromarray(image).convert('L') # Convert mode to L since LUT has only 256 values: http://www.pythonware.com/library/pil/handbook/image.htm + + im.show() diff -Nru pydicom-0.9.8/source/dicom/contrib/pydicom_series.py pydicom-0.9.9/source/dicom/contrib/pydicom_series.py --- pydicom-0.9.8/source/dicom/contrib/pydicom_series.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/pydicom_series.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,675 @@ +# dicom_series.py +""" +By calling the function read_files with a directory name or list +of files as an argument, a list of DicomSeries instances can be +obtained. A DicomSeries object has some attributes that give +information about the serie (such as shape, sampling, suid) and +has an info attribute, which is a dicom.DataSet instance containing +information about the first dicom file in the serie. The data can +be obtained using the get_pixel_array() method, which produces a +3D numpy array if there a multiple files in the serie. + +This module can deal with gated data, in which case a DicomSeries +instance is created for each 3D volume. + +""" +# +# Copyright (c) 2010 Almar Klein +# This file is released under the pydicom license. +# See the file license.txt included with the pydicom distribution, also +# available at http://pydicom.googlecode.com +# + + +# I (Almar) performed some test to loading a series of data +# in two different ways: loading all data, and deferring loading +# the data. Both ways seem equally fast on my system. I have to +# note that results can differ quite a lot depending on the system, +# but still I think this suggests that deferred reading is in +# general not slower. I think deferred loading of the pixel data +# can be advantageous because maybe not all data of all series +# is needed. Also it simply saves memory, because the data is +# removed from the Dataset instances. +# In the few result below, cold means reading for the first time, +# warm means reading 2nd/3d/etc time. +# - Full loading of data, cold: 9 sec +# - Full loading of data, warm: 3 sec +# - Deferred loading of data, cold: 9 sec +# - Deferred loading of data, warm: 3 sec + + +import os +import time +import gc +import dicom +from dicom.sequence import Sequence + +# Try importing numpy +try: + import numpy as np + have_numpy = True +except Exception: + np = None # NOQA + have_numpy = False + + +# Helper functions and classes +class ProgressBar: + """ To print progress to the screen. + """ + def __init__(self, char='-', length=20): + self.char = char + self.length = length + self.progress = 0.0 + self.nbits = 0 + self.what = '' + + def Start(self, what=''): + """ Start(what='') + Start the progress bar, displaying the given text first. + Make sure not to print anything untill after calling + Finish(). Messages can be printed while displaying + progess by using printMessage(). + """ + self.what = what + self.progress = 0.0 + self.nbits = 0 + sys.stdout.write(what + " [") + + def Stop(self, message=""): + """ Stop the progress bar where it is now. + Optionally print a message behind it.""" + delta = int(self.length - self.nbits) + sys.stdout.write(" " * delta + "] " + message + "\n") + + def Finish(self, message=""): + """ Finish the progress bar, setting it to 100% if it + was not already. Optionally print a message behind the bar. + """ + delta = int(self.length - self.nbits) + sys.stdout.write(self.char * delta + "] " + message + "\n") + + def Update(self, newProgress): + """ Update progress. Progress is given as a number + between 0 and 1. + """ + self.progress = newProgress + required = self.length * (newProgress) + delta = int(required - self.nbits) + if delta > 0: + sys.stdout.write(self.char * delta) + self.nbits += delta + + def PrintMessage(self, message): + """ Print a message (for example a warning). + The message is printed behind the progress bar, + and a new bar is started. + """ + self.Stop(message) + self.Start(self.what) + + +def _dummyProgressCallback(progress): + """ A callback to indicate progress that does nothing. """ + pass + +_progressBar = ProgressBar() + + +def _progressCallback(progress): + """ The default callback for displaying progress. """ + if isinstance(progress, basestring): + _progressBar.Start(progress) + _progressBar._t0 = time.time() + elif progress is None: + dt = time.time() - _progressBar._t0 + _progressBar.Finish('%2.2f seconds' % dt) + else: + _progressBar.Update(progress) + + +def _listFiles(files, path): + """List all files in the directory, recursively. """ + + for item in os.listdir(path): + item = os.path.join(path, item) + if os.path.isdir(item): + _listFiles(files, item) + else: + files.append(item) + + +def _splitSerieIfRequired(serie, series): + """ _splitSerieIfRequired(serie, series) + Split the serie in multiple series if this is required. + The choice is based on examing the image position relative to + the previous image. If it differs too much, it is assumed + that there is a new dataset. This can happen for example in + unspitted gated CT data. + """ + + # Sort the original list and get local name + serie._sort() + L = serie._datasets + + # Init previous slice + ds1 = L[0] + + # Check whether we can do this + if "ImagePositionPatient" not in ds1: + return + + # Initialize a list of new lists + L2 = [[ds1]] + + # Init slice distance estimate + distance = 0 + + for index in range(1, len(L)): + + # Get current slice + ds2 = L[index] + + # Get positions + pos1 = float(ds1.ImagePositionPatient[2]) + pos2 = float(ds2.ImagePositionPatient[2]) + + # Get distances + newDist = abs(pos1 - pos2) + # deltaDist = abs(firstPos-pos2) + + # If the distance deviates more than 2x from what we've seen, + # we can agree it's a new dataset. + if distance and newDist > 2.1 * distance: + L2.append([]) + distance = 0 + else: + # Test missing file + if distance and newDist > 1.5 * distance: + print 'Warning: missing file after "%s"' % ds1.filename + distance = newDist + + # Add to last list + L2[-1].append(ds2) + + # Store previous + ds1 = ds2 + + # Split if we should + if len(L2) > 1: + + # At what position are we now? + i = series.index(serie) + + # Create new series + series2insert = [] + for L in L2: + newSerie = DicomSeries(serie.suid, serie._showProgress) + newSerie._datasets = Sequence(L) + series2insert.append(newSerie) + + # Insert series and remove self + for newSerie in reversed(series2insert): + series.insert(i, newSerie) + series.remove(serie) + + +pixelDataTag = dicom.tag.Tag(0x7fe0, 0x0010) + + +def _getPixelDataFromDataset(ds): + """ Get the pixel data from the given dataset. If the data + was deferred, make it deferred again, so that memory is + preserved. Also applies RescaleSlope and RescaleIntercept + if available. """ + + # Get original element + el = dict.__getitem__(ds, pixelDataTag) + + # Get data + data = ds.pixel_array + + # Remove data (mark as deferred) + dict.__setitem__(ds, pixelDataTag, el) + del ds._pixel_array + + # Obtain slope and offset + slope = 1 + offset = 0 + needFloats = False + needApplySlopeOffset = False + if 'RescaleSlope' in ds: + needApplySlopeOffset = True + slope = ds.RescaleSlope + if 'RescaleIntercept' in ds: + needApplySlopeOffset = True + offset = ds.RescaleIntercept + if int(slope) != slope or int(offset) != offset: + needFloats = True + if not needFloats: + slope, offset = int(slope), int(offset) + + # Apply slope and offset + if needApplySlopeOffset: + + # Maybe we need to change the datatype? + if data.dtype in [np.float32, np.float64]: + pass + elif needFloats: + data = data.astype(np.float32) + else: + # Determine required range + minReq, maxReq = data.min(), data.max() + minReq = min([minReq, minReq * slope + offset, maxReq * slope + offset]) + maxReq = max([maxReq, minReq * slope + offset, maxReq * slope + offset]) + + # Determine required datatype from that + dtype = None + if minReq < 0: + # Signed integer type + maxReq = max([-minReq, maxReq]) + if maxReq < 2 ** 7: + dtype = np.int8 + elif maxReq < 2 ** 15: + dtype = np.int16 + elif maxReq < 2 ** 31: + dtype = np.int32 + else: + dtype = np.float32 + else: + # Unsigned integer type + if maxReq < 2 ** 8: + dtype = np.int8 + elif maxReq < 2 ** 16: + dtype = np.int16 + elif maxReq < 2 ** 32: + dtype = np.int32 + else: + dtype = np.float32 + + # Change datatype + if dtype != data.dtype: + data = data.astype(dtype) + + # Apply slope and offset + data *= slope + data += offset + + # Done + return data + + +# The public functions and classes + +def read_files(path, showProgress=False, readPixelData=False, force=False): + """ read_files(path, showProgress=False, readPixelData=False) + + Reads dicom files and returns a list of DicomSeries objects, which + contain information about the data, and can be used to load the + image or volume data. + + The parameter "path" can also be a list of files or directories. + + If the callable "showProgress" is given, it is called with a single + argument to indicate the progress. The argument is a string when a + progress is started (indicating what is processed). A float indicates + progress updates. The paremeter is None when the progress is finished. + When "showProgress" is True, a default callback is used that writes + to stdout. By default, no progress is shown. + + if readPixelData is True, the pixel data of all series is read. By + default the loading of pixeldata is deferred until it is requested + using the DicomSeries.get_pixel_array() method. In general, both + methods should be equally fast. + """ + + # Init list of files + files = [] + + # Obtain data from the given path + if isinstance(path, basestring): + # Make dir nice + basedir = os.path.abspath(path) + # Check whether it exists + if not os.path.isdir(basedir): + raise ValueError('The given path is not a valid directory.') + # Find files recursively + _listFiles(files, basedir) + + elif isinstance(path, (tuple, list)): + # Iterate over all elements, which can be files or directories + for p in path: + if os.path.isdir(p): + _listFiles(files, os.path.abspath(p)) + elif os.path.isfile(p): + files.append(p) + else: + print "Warning, the path '%s' is not valid." % p + else: + raise ValueError('The path argument must be a string or list.') + + # Set default progress callback? + if showProgress is True: + showProgress = _progressCallback + if not hasattr(showProgress, '__call__'): + showProgress = _dummyProgressCallback + + # Set defer size + deferSize = 16383 # 128**2-1 + if readPixelData: + deferSize = None + + # Gather file data and put in DicomSeries + series = {} + count = 0 + showProgress('Loading series information:') + for filename in files: + + # Skip DICOMDIR files + if filename.count("DICOMDIR"): + continue + + # Try loading dicom ... + try: + dcm = dicom.read_file(filename, deferSize, force=force) + except dicom.filereader.InvalidDicomError: + continue # skip non-dicom file + except Exception as why: + if showProgress is _progressCallback: + _progressBar.PrintMessage(str(why)) + else: + print 'Warning:', why + continue + + # Get SUID and register the file with an existing or new series object + try: + suid = dcm.SeriesInstanceUID + except AttributeError: + continue # some other kind of dicom file + if suid not in series: + series[suid] = DicomSeries(suid, showProgress) + series[suid]._append(dcm) + + # Show progress (note that we always start with a 0.0) + showProgress(float(count) / len(files)) + count += 1 + + # Finish progress + showProgress(None) + + # Make a list and sort, so that the order is deterministic + series = series.values() + series.sort(key=lambda x: x.suid) + + # Split series if necessary + for serie in reversed([serie for serie in series]): + _splitSerieIfRequired(serie, series) + + # Finish all series + showProgress('Analysing series') + series_ = [] + for i in range(len(series)): + try: + series[i]._finish() + series_.append(series[i]) + except Exception: + pass # Skip serie (probably report-like file without pixels) + showProgress(float(i + 1) / len(series)) + showProgress(None) + + return series_ + + +class DicomSeries(object): + """ DicomSeries + This class represents a serie of dicom files that belong together. + If these are multiple files, they represent the slices of a volume + (like for CT or MRI). The actual volume can be obtained using loadData(). + Information about the data can be obtained using the info attribute. + """ + + # To create a DicomSeries object, start by making an instance and + # append files using the "_append" method. When all files are + # added, call "_sort" to sort the files, and then "_finish" to evaluate + # the data, perform some checks, and set the shape and sampling + # attributes of the instance. + + def __init__(self, suid, showProgress): + # Init dataset list and the callback + self._datasets = Sequence() + self._showProgress = showProgress + + # Init props + self._suid = suid + self._info = None + self._shape = None + self._sampling = None + + @property + def suid(self): + """ The Series Instance UID. """ + return self._suid + + @property + def shape(self): + """ The shape of the data (nz, ny, nx). + If None, the serie contains a single dicom file. """ + return self._shape + + @property + def sampling(self): + """ The sampling (voxel distances) of the data (dz, dy, dx). + If None, the serie contains a single dicom file. """ + return self._sampling + + @property + def info(self): + """ A DataSet instance containing the information as present in the + first dicomfile of this serie. """ + return self._info + + @property + def description(self): + """ A description of the dicom series. Used fields are + PatientName, shape of the data, SeriesDescription, + and ImageComments. + """ + + info = self.info + + # If no info available, return simple description + if info is None: + return "DicomSeries containing %i images" % len(self._datasets) + + fields = [] + + # Give patient name + if 'PatientName' in info: + fields.append("" + info.PatientName) + + # Also add dimensions + if self.shape: + tmp = [str(d) for d in self.shape] + fields.append('x'.join(tmp)) + + # Try adding more fields + if 'SeriesDescription' in info: + fields.append("'" + info.SeriesDescription + "'") + if 'ImageComments' in info: + fields.append("'" + info.ImageComments + "'") + + # Combine + return ' '.join(fields) + + def __repr__(self): + adr = hex(id(self)).upper() + return "" % (len(self._datasets), adr) + + def get_pixel_array(self): + """ get_pixel_array() + + Get (load) the data that this DicomSeries represents, and return + it as a numpy array. If this serie contains multiple images, the + resulting array is 3D, otherwise it's 2D. + + If RescaleSlope and RescaleIntercept are present in the dicom info, + the data is rescaled using these parameters. The data type is chosen + depending on the range of the (rescaled) data. + + """ + + # Can we do this? + if not have_numpy: + msg = "The Numpy package is required to use get_pixel_array.\n" + raise ImportError(msg) + + # It's easy if no file or if just a single file + if len(self._datasets) == 0: + raise ValueError('Serie does not contain any files.') + elif len(self._datasets) == 1: + ds = self._datasets[0] + slice = _getPixelDataFromDataset(ds) + return slice + + # Check info + if self.info is None: + raise RuntimeError("Cannot return volume if series not finished.") + + # Set callback to update progress + showProgress = self._showProgress + + # Init data (using what the dicom packaged produces as a reference) + ds = self._datasets[0] + slice = _getPixelDataFromDataset(ds) + # vol = Aarray(self.shape, self.sampling, fill=0, dtype=slice.dtype) + vol = np.zeros(self.shape, dtype=slice.dtype) + vol[0] = slice + + # Fill volume + showProgress('Loading data:') + ll = self.shape[0] + for z in range(1, ll): + ds = self._datasets[z] + vol[z] = _getPixelDataFromDataset(ds) + showProgress(float(z) / ll) + + # Finish + showProgress(None) + + # Done + gc.collect() + return vol + + def _append(self, dcm): + """ _append(dcm) + Append a dicomfile (as a dicom.dataset.FileDataset) to the series. + """ + self._datasets.append(dcm) + + def _sort(self): + """ sort() + Sort the datasets by instance number. + """ + self._datasets.sort(key=lambda k: k.InstanceNumber) + + def _finish(self): + """ _finish() + + Evaluate the series of dicom files. Together they should make up + a volumetric dataset. This means the files should meet certain + conditions. Also some additional information has to be calculated, + such as the distance between the slices. This method sets the + attributes for "shape", "sampling" and "info". + + This method checks: + * that there are no missing files + * that the dimensions of all images match + * that the pixel spacing of all images match + + """ + + # The datasets list should be sorted by instance number + L = self._datasets + if len(L) == 0: + return + elif len(L) < 2: + # Set attributes + ds = self._datasets[0] + self._info = self._datasets[0] + self._shape = [ds.Rows, ds.Columns] + self._sampling = [float(ds.PixelSpacing[0]), float(ds.PixelSpacing[1])] + return + + # Get previous + ds1 = L[0] + + # Init measures to calculate average of + distance_sum = 0.0 + + # Init measures to check (these are in 2D) + dimensions = ds1.Rows, ds1.Columns + sampling = float(ds1.PixelSpacing[0]), float(ds1.PixelSpacing[1]) # row, column + + for index in range(len(L)): + # The first round ds1 and ds2 will be the same, for the + # distance calculation this does not matter + + # Get current + ds2 = L[index] + + # Get positions + pos1 = float(ds1.ImagePositionPatient[2]) + pos2 = float(ds2.ImagePositionPatient[2]) + + # Update distance_sum to calculate distance later + distance_sum += abs(pos1 - pos2) + + # Test measures + dimensions2 = ds2.Rows, ds2.Columns + sampling2 = float(ds2.PixelSpacing[0]), float(ds2.PixelSpacing[1]) + if dimensions != dimensions2: + # We cannot produce a volume if the dimensions match + raise ValueError('Dimensions of slices does not match.') + if sampling != sampling2: + # We can still produce a volume, but we should notify the user + msg = 'Warning: sampling does not match.' + if self._showProgress is _progressCallback: + _progressBar.PrintMessage(msg) + else: + print msg + # Store previous + ds1 = ds2 + + # Create new dataset by making a deep copy of the first + info = dicom.dataset.Dataset() + firstDs = self._datasets[0] + for key in firstDs.keys(): + if key != (0x7fe0, 0x0010): + el = firstDs[key] + info.add_new(el.tag, el.VR, el.value) + + # Finish calculating average distance + # (Note that there are len(L)-1 distances) + distance_mean = distance_sum / (len(L) - 1) + + # Store information that is specific for the serie + self._shape = [len(L), ds2.Rows, ds2.Columns] + self._sampling = [distance_mean, float(ds2.PixelSpacing[0]), + float(ds2.PixelSpacing[1])] + + # Store + self._info = info + + +if __name__ == '__main__': + import sys + + if len(sys.argv) != 2: + print "Expected a single argument: a directory with dicom files in it" + else: + adir = sys.argv[1] + t0 = time.time() + all_series = read_files(adir, None, False) + print "Summary of each series:" + for series in all_series: + print series.description diff -Nru pydicom-0.9.8/source/dicom/contrib/pydicom_Tkinter.py pydicom-0.9.9/source/dicom/contrib/pydicom_Tkinter.py --- pydicom-0.9.8/source/dicom/contrib/pydicom_Tkinter.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/contrib/pydicom_Tkinter.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,212 @@ +# pydicom_Tkinter.py +# +# Copyright (c) 2009 Daniel Nanz +# This file is released under the pydicom (http://code.google.com/p/pydicom/) +# license, see the file license.txt available at +# (http://code.google.com/p/pydicom/) +# +# revision history: +# Dec-08-2009: version 0.1 +# +# 0.1: tested with pydicom version 0.9.3, Python version 2.6.2 (32-bit) +# under Windows XP Professional 2002, and Mac OS X 10.5.5, +# using numpy 1.3.0 and a small random selection of MRI and +# CT images. +''' +View DICOM images from pydicom + +requires numpy: http://numpy.scipy.org/ + +Usage: +------ +>>> import dicom # pydicom +>>> import dicom.contrib.pydicom_Tkinter as pydicom_Tkinter # this module + +>>> df = dicom.read_file(filename) +>>> pydicom_Tkinter.show_image(df) +''' + +import Tkinter +import tempfile +import os + +have_numpy = True +try: + import numpy as np +except: + # will not work... + have_numpy = False + + +def get_PGM_bytedata_string(arr): + '''Given a 2D numpy array as input write gray-value image data in the PGM + format into a byte string and return it. + + arr: single-byte unsigned int numpy array + note: Tkinter's PhotoImage object seems to accept only single-byte data + ''' + + if arr.dtype != np.uint8: + raise ValueError + if len(arr.shape) != 2: + raise ValueError + + # array.shape is (#rows, #cols) tuple; PGM input needs this reversed + col_row_string = ' '.join(reversed(map(str, arr.shape))) + + bytedata_string = '\n'.join(('P5', + col_row_string, + str(arr.max()), + arr.tostring())) + return bytedata_string + + +def get_PGM_from_numpy_arr(arr, window_center, window_width, + lut_min=0, lut_max=255): + '''real-valued numpy input -> PGM-image formatted byte string + + arr: real-valued numpy array to display as grayscale image + window_center, window_width: to define max/min values to be mapped to the + lookup-table range. WC/WW scaling is done + according to DICOM-3 specifications. + lut_min, lut_max: min/max values of (PGM-) grayscale table: do not change + ''' + + if np.isreal(arr).sum() != arr.size: + raise ValueError + + # currently only support 8-bit colors + if lut_max != 255: + raise ValueError + + if arr.dtype != np.float64: + arr = arr.astype(np.float64) + + # LUT-specific array scaling + # width >= 1 (DICOM standard) + window_width = max(1, window_width) + + wc, ww = np.float64(window_center), np.float64(window_width) + lut_range = np.float64(lut_max) - lut_min + + minval = wc - 0.5 - (ww - 1.0) / 2.0 + maxval = wc - 0.5 + (ww - 1.0) / 2.0 + + min_mask = (minval >= arr) + to_scale = (arr > minval) & (arr < maxval) + max_mask = (arr >= maxval) + + if min_mask.any(): + arr[min_mask] = lut_min + if to_scale.any(): + arr[to_scale] = ((arr[to_scale] - (wc - 0.5)) / + (ww - 1.0) + 0.5) * lut_range + lut_min + if max_mask.any(): + arr[max_mask] = lut_max + + # round to next integer values and convert to unsigned int + arr = np.rint(arr).astype(np.uint8) + + # return PGM byte-data string + return get_PGM_bytedata_string(arr) + + +def get_tkinter_photoimage_from_pydicom_image(data): + ''' + Wrap data.pixel_array in a Tkinter PhotoImage instance, + after conversion into a PGM grayscale image. + + This will fail if the "numpy" module is not installed in the attempt of + creating the data.pixel_array. + + data: object returned from pydicom.read_file() + side effect: may leave a temporary .pgm file on disk + ''' + + # get numpy array as representation of image data + arr = data.pixel_array.astype(np.float64) + + # pixel_array seems to be the original, non-rescaled array. + # If present, window center and width refer to rescaled array + # -> do rescaling if possible. + if ('RescaleIntercept' in data) and ('RescaleSlope' in data): + intercept = data.RescaleIntercept # single value + slope = data.RescaleSlope + arr = slope * arr + intercept + + # get default window_center and window_width values + wc = (arr.max() + arr.min()) / 2.0 + ww = arr.max() - arr.min() + 1.0 + + # overwrite with specific values from data, if available + if ('WindowCenter' in data) and ('WindowWidth' in data): + wc = data.WindowCenter + ww = data.WindowWidth + try: + wc = wc[0] # can be multiple values + except: + pass + try: + ww = ww[0] + except: + pass + + # scale array to account for center, width and PGM grayscale range, + # and wrap into PGM formatted ((byte-) string + pgm = get_PGM_from_numpy_arr(arr, wc, ww) + + # create a PhotoImage + # for as yet unidentified reasons the following fails for certain + # window center/width values: + # photo_image = Tkinter.PhotoImage(data=pgm, gamma=1.0) + # Error with Python 2.6.2 under Windows XP: + # (self.tk.call(('image', 'create', imgtype, name,) + options) + # _tkinter.TclError: truncated PPM data + # OsX: distorted images + # while all seems perfectly OK for other values of center/width or when + # the PGM is first written to a temporary file and read again + + # write PGM file into temp dir + (os_id, abs_path) = tempfile.mkstemp(suffix='.pgm') + with open(abs_path, 'wb') as fd: + fd.write(pgm) + + photo_image = Tkinter.PhotoImage(file=abs_path, gamma=1.0) + + # close and remove temporary file on disk + # os.close is needed under windows for os.remove not to fail + try: + os.close(os_id) + os.remove(abs_path) + except: + pass # silently leave file on disk in temp-like directory + + return photo_image + + +def show_image(data, block=True, master=None): + ''' + Get minimal Tkinter GUI and display a pydicom data.pixel_array + + data: object returned from pydicom.read_file() + block: if True run Tk mainloop() to show the image + master: use with block==False and an existing Tk widget as parent widget + + side effects: may leave a temporary .pgm file on disk + ''' + frame = Tkinter.Frame(master=master, background='#000') + if 'SeriesDescription' in data and 'InstanceNumber' in data: + title = ', '.join(('Ser: ' + data.SeriesDescription, + 'Img: ' + str(data.InstanceNumber))) + else: + title = 'pydicom image' + frame.master.title(title) + photo_image = get_tkinter_photoimage_from_pydicom_image(data) + label = Tkinter.Label(frame, image=photo_image, background='#000') + # keep a reference to avoid disappearance upon garbage collection + label.photo_reference = photo_image + label.grid() + frame.grid() + + if block: + frame.mainloop() diff -Nru pydicom-0.9.8/source/dicom/datadict.py pydicom-0.9.9/source/dicom/datadict.py --- pydicom-0.9.8/source/dicom/datadict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/datadict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,246 @@ +# datadict.py +# -*- coding: utf-8 -*- +"""Access dicom dictionary information""" + +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + +import logging +logger = logging.getLogger("pydicom") +from dicom.tag import Tag +from dicom._dicom_dict import DicomDictionary # the actual dict of {tag: (VR, VM, name, is_retired, keyword), ...} +from dicom._dicom_dict import RepeatersDictionary # those with tags like "(50xx, 0005)" +from dicom._private_dict import private_dictionaries +import warnings +from dicom import in_py3 + +# Generate mask dict for checking repeating groups etc. +# Map a true bitwise mask to the DICOM mask with "x"'s in it. +masks = {} +for mask_x in RepeatersDictionary: + # mask1 is XOR'd to see that all non-"x" bits are identical (XOR result = 0 if bits same) + # then AND those out with 0 bits at the "x" ("we don't care") location using mask2 + mask1 = long(mask_x.replace("x", "0"), 16) + mask2 = long("".join(["F0"[c == "x"] for c in mask_x]), 16) + masks[mask_x] = (mask1, mask2) + +# For shorter naming of dicom member elements, put an entry here +# (longer naming can also still be used) +# The descriptive name must start with the long version (not replaced if internal) +shortNames = [ + ("BeamLimitingDevice", "BLD"), + ("RTBeamLimitingDevice", "RTBLD"), + ("ControlPoint", "CP"), + ("Referenced", "Refd") +] + + +def mask_match(tag): + for mask_x, (mask1, mask2) in masks.items(): + if (tag ^ mask1) & mask2 == 0: + return mask_x + return None + + +def get_entry(tag): + """Return the tuple (VR, VM, name, is_retired, keyword) from the DICOM dictionary + + If the entry is not in the main dictionary, check the masked ones, + e.g. repeating groups like 50xx, etc. + """ + tag = Tag(tag) + try: + return DicomDictionary[tag] + except KeyError: + mask_x = mask_match(tag) + if mask_x: + return RepeatersDictionary[mask_x] + else: + raise KeyError("Tag {0} not found in DICOM dictionary".format(tag)) + + +def dictionary_description(tag): + """Return the descriptive text for the given dicom tag.""" + return get_entry(tag)[2] + + +def dictionaryVM(tag): + """Return the dicom value multiplicity for the given dicom tag.""" + return get_entry(tag)[1] + + +def dictionaryVR(tag): + """Return the dicom value representation for the given dicom tag.""" + return get_entry(tag)[0] + + +def dictionary_has_tag(tag): + """Return True if the dicom dictionary has an entry for the given tag.""" + return (tag in DicomDictionary) + + +def dictionary_keyword(tag): + """Return the official DICOM standard (since 2011) keyword for the tag""" + return get_entry(tag)[4] + +# Set up a translation table for "cleaning" DICOM descriptions +# for backwards compatibility pydicom < 0.9.7 (before DICOM keywords) +# Translation is different with unicode - see .translate() at +# http://docs.python.org/library/stdtypes.html#string-methods +chars_to_remove = r""" !@#$%^&*(),;:.?\|{}[]+-="'’/""" +if in_py3: # i.e. unicode strings + translate_table = dict((ord(char), None) for char in chars_to_remove) +else: + import string + translate_table = string.maketrans('', '') + + +def keyword_for_tag(tag): + """Return the DICOM keyword for the given tag. Replaces old CleanName() + method using the 2011 DICOM standard keywords instead. + + Will return GroupLength for group length tags, + and returns empty string ("") if the tag doesn't exist in the dictionary. + """ + try: + return dictionary_keyword(tag) + except KeyError: + return "" + + +def CleanName(tag): + """Return the dictionary descriptive text string but without bad characters. + + Used for e.g. *named tags* of Dataset instances (before DICOM keywords were + part of the standard) + + """ + tag = Tag(tag) + if tag not in DicomDictionary: + if tag.element == 0: # 0=implied group length in DICOM versions < 3 + return "GroupLength" + else: + return "" + s = dictionary_description(tag) # Descriptive name in dictionary + # remove blanks and nasty characters + if in_py3: + s = s.translate(translate_table) + else: + s = s.translate(translate_table, chars_to_remove) + + # Take "Sequence" out of name (pydicom < 0.9.7) + # e..g "BeamSequence"->"Beams"; "ReferencedImageBoxSequence"->"ReferencedImageBoxes" + # 'Other Patient ID' exists as single value AND as sequence so check for it and leave 'Sequence' in + if dictionaryVR(tag) == "SQ" and not s.startswith("OtherPatientIDs"): + if s.endswith("Sequence"): + s = s[:-8] + "s" + if s.endswith("ss"): + s = s[:-1] + if s.endswith("xs"): + s = s[:-1] + "es" + if s.endswith("Studys"): + s = s[:-2] + "ies" + return s + +# Provide for the 'reverse' lookup. Given clean name, what is the tag? +logger.debug("Reversing DICOM dictionary so can look up tag from a name...") +NameDict = dict([(CleanName(tag), tag) for tag in DicomDictionary]) +keyword_dict = dict([(dictionary_keyword(tag), tag) for tag in DicomDictionary]) + + +def short_name(name): + """Return a short *named tag* for the corresponding long version. + + Return a blank string if there is no short version of the name. + + """ + for longname, shortname in shortNames: + if name.startswith(longname): + return name.replace(longname, shortname) + return "" + + +def long_name(name): + """Return a long *named tag* for the corresponding short version. + + Return a blank string if there is no long version of the name. + + """ + + for longname, shortname in shortNames: + if name.startswith(shortname): + return name.replace(shortname, longname) + return "" + + +def tag_for_name(name): + """Return the dicom tag corresponding to name, or None if none exist.""" + if name in keyword_dict: # the usual case + return keyword_dict[name] + # If not an official keyword, check the old style pydicom names + if name in NameDict: + tag = NameDict[name] + msg = ("'%s' as tag name has been deprecated; use official DICOM keyword '%s'" + % (name, dictionary_keyword(tag))) + warnings.warn(msg, DeprecationWarning) + return tag + + # check if is short-form of a valid name + longname = long_name(name) + if longname: + return NameDict.get(longname, None) + return None + + +def all_names_for_tag(tag): + """Return a list of all (long and short) names for the tag""" + longname = keyword_for_tag(tag) + shortname = short_name(longname) + names = [longname] + if shortname: + names.append(shortname) + return names + + +# PRIVATE DICTIONARY handling +# functions in analogy with those of main DICOM dict +def get_private_entry(tag, private_creator): + """Return the tuple (VR, VM, name, is_retired) from a private dictionary""" + tag = Tag(tag) + try: + private_dict = private_dictionaries[private_creator] + except KeyError: + raise KeyError("Private creator {0} not in private dictionary".format(private_creator)) + + # private elements are usually agnostic for "block" (see PS3.5-2008 7.8.1 p44) + # Some elements in _private_dict are explicit; most have "xx" for high-byte of element + # Try exact key first, but then try with "xx" in block position + try: + dict_entry = private_dict[tag] + except KeyError: + # so here put in the "xx" in the block position for key to look up + group_str = "%04x" % tag.group + elem_str = "%04x" % tag.elem + key = "%sxx%s" % (group_str, elem_str[-2:]) + if key not in private_dict: + raise KeyError("Tag {0} not in private dictionary for private creator {1}".format(key, private_creator)) + dict_entry = private_dict[key] + return dict_entry + + +def private_dictionary_description(tag, private_creator): + """Return the descriptive text for the given dicom tag.""" + return get_private_entry(tag, private_creator)[2] + + +def private_dictionaryVM(tag, private_creator): + """Return the dicom value multiplicity for the given dicom tag.""" + return get_private_entry(tag, private_creator)[1] + + +def private_dictionaryVR(tag, private_creator): + """Return the dicom value representation for the given dicom tag.""" + return get_private_entry(tag, private_creator)[0] diff -Nru pydicom-0.9.8/source/dicom/dataelem.py pydicom-0.9.9/source/dicom/dataelem.py --- pydicom-0.9.8/source/dicom/dataelem.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/dataelem.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,324 @@ +# dataelem.py +"""Define the DataElement class - elements within a dataset. + +DataElements have a DICOM value representation VR, a value multiplicity VM, +and a value. +""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# +from __future__ import absolute_import + +import logging +logger = logging.getLogger('pydicom') + +from dicom.datadict import dictionary_has_tag, dictionary_description +from dicom.datadict import private_dictionary_description, dictionaryVR +from dicom.tag import Tag + +from dicom.UID import UID +import dicom.valuerep # don't import DS directly as can be changed by config +from dicom import in_py3 + +if in_py3: + from dicom.valuerep import PersonName3 as PersonNameUnicode + PersonName = PersonNameUnicode + +from collections import namedtuple + + +# Helper functions: +def isMultiValue(value): + """Helper function: return True if 'value' is 'list-like'.""" + if isString(value) or isinstance(value, bytes): + return False + try: + iter(value) + except TypeError: + return False + return True + + +def isString(val): + """Helper function: return True if val is a string.""" + return isinstance(val, basestring) + + +def isStringOrStringList(val): + """Return true if val consists only of strings. val may be a list/tuple.""" + if isMultiValue(val): + for item in val: + if not isString(item): + return False + return True + else: # single value - test for a string + return isString(val) + +_backslash = "\\" # double '\' because it is used as escape chr in Python + + +class DataElement(object): + """Contain and manipulate a Dicom data element, having a tag, VR, VM and value. + + Most user code will not create data elements using this class directly, + but rather through DICOM keywords in Dataset objects. + See the Dataset class for a description of how Datasets, Sequences, + and DataElements work. + + Class Data + ---------- + For string display (via __str__), the following are used: + + descripWidth -- maximum width of description field (default 35). + maxBytesToDisplay -- longer data will display "array of # bytes" (default 16). + showVR -- True (default) to include the dicom VR just before the value. + """ + descripWidth = 35 + maxBytesToDisplay = 16 + showVR = 1 + + def __init__(self, tag, VR, value, file_value_tell=None, + is_undefined_length=False, already_converted=False): + """Create a data element instance. + + Most user code should instead use DICOM keywords + to create data_elements, for which only the value is supplied, + and the VR and tag are determined from the dicom dictionary. + + tag -- dicom (group, element) tag in any form accepted by Tag(). + VR -- dicom value representation (see DICOM standard part 6) + value -- the value of the data element. One of the following: + - a single string value + - a number + - a list or tuple with all strings or all numbers + - a multi-value string with backslash separator + file_value_tell -- used internally by Dataset, to store the write + position for ReplaceDataElementValue method + is_undefined_length -- used internally to store whether the length + field in this data element was 0xFFFFFFFFL, i.e. "undefined length" + + """ + self.tag = Tag(tag) + self.VR = VR # Note!: you must set VR before setting value + if already_converted: + self._value = value + else: + self.value = value # calls property setter which will convert + self.file_tell = file_value_tell + self.is_undefined_length = is_undefined_length + + @property + def value(self): + """The value (possibly multiple values) of this data_element""" + return self._value + + @value.setter + def value(self, val): + """Set method for 'value' property""" + # Check if is a string with multiple values separated by '\' + # If so, turn them into a list of separate strings + if isString(val) and self.VR not in \ + ['UT', 'ST', 'LT', 'FL', 'FD', 'AT', 'OB', 'OW', 'OF', 'SL', 'SQ', 'SS', + 'UL', 'OB/OW', 'OW/OB', 'OB or OW', 'OW or OB', 'UN'] and 'US' not in self.VR: # latter covers 'US or SS' etc + if _backslash in val: + val = val.split(_backslash) + self._value = self._convert_value(val) + + @property + def VM(self): + """The number of values in the data_element's 'value'""" + if isMultiValue(self.value): + return len(self.value) + else: + return 1 + + def _convert_value(self, val): + """Convert Dicom string values if possible to e.g. numbers. Handle the case + of multiple value data_elements""" + if self.VR == 'SQ': # a sequence - leave it alone + from dicom.sequence import Sequence + if isinstance(val, Sequence): + return val + else: + return Sequence(val) + + # if the value is a list, convert each element + try: + val.append + except AttributeError: # not a list + return self._convert(val) + else: + returnvalue = [] + for subval in val: + returnvalue.append(self._convert(subval)) + return returnvalue + + def _convert(self, val): + """Take the value and convert to number, etc if possible""" + if self.VR == 'IS': + return dicom.valuerep.IS(val) + elif self.VR == 'DS': + return dicom.valuerep.DS(val) + elif self.VR == "UI": + return UID(val) + elif in_py3 and self.VR == "PN": + return PersonName(val) + # Later may need this for PersonName as for UI, + # but needs more thought + # elif self.VR == "PN": + # return PersonName(val) + else: # is either a string or a type 2 optionally blank string + return val # this means a "numeric" value could be empty string "" + # except TypeError: + # print "Could not convert value '%s' to VR '%s' in tag %s" \ + # % (repr(val), self.VR, self.tag) + # except ValueError: + # print "Could not convert value '%s' to VR '%s' in tag %s" \ + # % (repr(val), self.VR, self.tag) + + def __str__(self): + """Return str representation of this data_element""" + repVal = self.repval + if self.showVR: + s = "%s %-*s %s: %s" % (str(self.tag), self.descripWidth, + self.description()[:self.descripWidth], self.VR, repVal) + else: + s = "%s %-*s %s" % (str(self.tag), self.descripWidth, + self.description()[:self.descripWidth], repVal) + return s + + @property + def repval(self): + """Return a str representation of the current value for use in __str__""" + byte_VRs = ['OB', 'OW', 'OW/OB', 'OW or OB', 'OB or OW', 'US or SS or OW', 'US or SS'] + if (self.VR in byte_VRs and len(self.value) > self.maxBytesToDisplay): + repVal = "Array of %d bytes" % len(self.value) + elif hasattr(self, 'original_string'): # for VR of IS or DS + repVal = repr(self.original_string) + elif isinstance(self.value, UID): + repVal = self.value.name + else: + repVal = repr(self.value) # will tolerate unicode too + return repVal + + def __unicode__(self): + """Return unicode representation of this data_element""" + if isinstance(self.value, unicode): + # start with the string rep then replace the value part with the unicode + strVal = str(self) + uniVal = unicode(strVal.replace(self.repval, "")) + self.value + return uniVal + else: + return unicode(str(self)) + + def __getitem__(self, key): + """Returns the item from my value's Sequence, if it is one.""" + try: + return self.value[key] + except TypeError: + raise TypeError("DataElement value is unscriptable (not a Sequence)") + + @property + def name(self): + return self.description() + + def description(self): + """Return the DICOM dictionary description for this dicom tag.""" + if dictionary_has_tag(self.tag): + name = dictionary_description(self.tag) + elif self.tag.is_private: + name = "Private tag data" # default + if hasattr(self, 'private_creator'): + try: + # If have name from private dictionary, use it, but + # but put in square brackets so is differentiated, + # and clear that cannot access it by name + name = "[" + private_dictionary_description(self.tag, self.private_creator) + "]" + except KeyError: + pass + elif self.tag.elem >> 8 == 0: + name = "Private Creator" + elif self.tag.element == 0: # implied Group Length dicom versions < 3 + name = "Group Length" + else: + name = "" + return name + + def __repr__(self): + """Handle repr(data_element)""" + if self.VR == "SQ": + return repr(self.value) + else: + return str(self) + + +class DeferredDataElement(DataElement): + """Subclass of DataElement where value is not read into memory until needed""" + def __init__(self, tag, VR, fp, file_mtime, data_element_tell, length): + """Store basic info for the data element but value will be read later + + fp -- DicomFile object representing the dicom file being read + file_mtime -- last modification time on file, used to make sure + it has not changed since original read + data_element_tell -- file position at start of data element, + (not the start of the value part, but start of whole element) + """ + self.tag = Tag(tag) + self.VR = VR + self._value = None # flag as unread + + # Check current file object and save info needed for read later + self.fp_is_implicit_VR = fp.is_implicit_VR + self.fp_is_little_endian = fp.is_little_endian + self.filepath = fp.name + self.file_mtime = file_mtime + self.data_element_tell = data_element_tell + self.length = length + + @property + def repval(self): + if self._value is None: + return "Deferred read: length %d" % self.length + else: + return DataElement.repval.fget(self) + + @property + def value(self): + """Get method for 'value' property""" + # Must now read the value if haven't already + if self._value is None: + self.read_value() + return DataElement.value.fget(self) + + @value.setter + def value(self, val): + DataElement.value.fset(self, val) + + +RawDataElement = namedtuple('RawDataElement', + 'tag VR length value value_tell is_implicit_VR is_little_endian') + + +def DataElement_from_raw(raw_data_element, encoding=None): + """Return a DataElement from a RawDataElement""" + from dicom.values import convert_value # XXX buried here to avoid circular import filereader->Dataset->convert_value->filereader (for SQ parsing) + raw = raw_data_element + VR = raw.VR + if VR is None: # Can be if was implicit VR + try: + VR = dictionaryVR(raw.tag) + except KeyError: + if raw.tag.is_private: + VR = 'OB' # just read the bytes, no way to know what they mean + elif raw.tag.element == 0: # group length tag implied in versions < 3.0 + VR = 'UL' + else: + raise KeyError("Unknown DICOM tag {0:s} - can't look up VR".format(str(raw.tag))) + try: + value = convert_value(VR, raw, encoding) + except NotImplementedError as e: + raise NotImplementedError("{0:s} in tag {1!r}".format(str(e), raw.tag)) + return DataElement(raw.tag, VR, value, raw.value_tell, + raw.length == 0xFFFFFFFF, already_converted=True) diff -Nru pydicom-0.9.8/source/dicom/dataset.py pydicom-0.9.9/source/dicom/dataset.py --- pydicom-0.9.8/source/dicom/dataset.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/dataset.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,641 @@ +# dataset.py +"""Module for Dataset class + +Overview of Dicom object model: + +Dataset(derived class of Python's dict class) + contains DataElement instances (DataElement is a class with tag, VR, value) + the value can be a Sequence instance + (Sequence is derived from Python's list), + or just a regular value like a number, string, etc., + or a list of regular values, e.g. a 3d coordinate + Sequence's are a list of Datasets (note recursive nature here) + +""" +# +# Copyright (c) 2008-2013 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# +import sys +from sys import byteorder +sys_is_little_endian = (byteorder == 'little') +import logging +logger = logging.getLogger('pydicom') +import inspect # for __dir__ + +from dicom.charset import default_encoding, convert_encodings +from dicom.datadict import dictionaryVR +from dicom.datadict import tag_for_name, all_names_for_tag +from dicom.tag import Tag, BaseTag +from dicom.dataelem import DataElement, DataElement_from_raw, RawDataElement +from dicom.UID import NotCompressedPixelTransferSyntaxes +from dicom.tagtools import tag_in_exception +import os.path + +import io + +import dicom # for write_file +import dicom.charset + +have_numpy = True +try: + import numpy +except: + have_numpy = False + +stat_available = True +try: + from os import stat +except: + stat_available = False + + +class PropertyError(Exception): + """For AttributeErrors caught in a property, so do not go to __getattr__""" + # http://docs.python.org/release/3.1.3/tutorial/errors.html#tut-userexceptions + pass + + +class Dataset(dict): + """A collection (dictionary) of Dicom `DataElement` instances. + + Example of two ways to retrieve or set values: + + 1. dataset[0x10, 0x10].value --> patient's name + 2. dataset.PatientName --> patient's name + + Example (2) uses DICOM "keywords", defined starting in 2011 standard. + PatientName is not actually a member of the object, but unknown member + requests are checked against the DICOM dictionary. If the name matches a + DicomDictionary descriptive string, the corresponding tag is used + to look up or set the `DataElement` instance's value. + + :attribute indent_chars: for string display, the characters used to indent + nested Data Elements (e.g. sequence items). Default is three spaces. + + """ + indent_chars = " " + + def __init__(self, *args, **kwargs): + self._parent_encoding = kwargs.get('parent_encoding', default_encoding) + dict.__init__(self, *args) + + def add(self, data_element): + """Equivalent to dataset[data_element.tag] = data_element.""" + self[data_element.tag] = data_element + + def add_new(self, tag, VR, value): + """Create a new DataElement instance and add it to this Dataset.""" + data_element = DataElement(tag, VR, value) + # use data_element.tag since DataElement verified it + self[data_element.tag] = data_element + + def data_element(self, name): + """Return the full data_element instance for the given descriptive name + + :param name: a DICOM keyword + :returns: a DataElement instance in this dataset with the given name + If the tag for that name is not found, returns None + """ + tag = tag_for_name(name) + if tag: + return self[tag] + return None + + def __contains__(self, name): + """Extend dict.__contains__() to handle DICOM keywords. + + This is called for code like: ``if 'SliceLocation' in dataset``. + + """ + if isinstance(name, (str, unicode)): + tag = tag_for_name(name) + else: + try: + tag = Tag(name) + except: + return False + if tag: + return dict.__contains__(self, tag) + else: + return dict.__contains__(self, name) # will no doubt raise an exception + + def decode(self): + """Apply character set decoding to all data elements. + + See DICOM PS3.5-2008 6.1.1. + """ + # Find specific character set. 'ISO_IR 6' is default + # May be multi-valued, but let dicom.charset handle all logic on that + dicom_character_set = self._character_set + + # Shortcut to the decode function in dicom.charset + decode_data_element = dicom.charset.decode + + # Callback for walk(), to decode the chr strings if necessary + # This simply calls the dicom.charset.decode function + def decode_callback(ds, data_element): + if data_element.VR == 'SQ': + [dset.decode() for dset in data_element.value] + else: + decode_data_element(data_element, dicom_character_set) + + self.walk(decode_callback, recursive=False) + + def __delattr__(self, name): + """Intercept requests to delete an attribute by name, e.g. del ds.name + + If name is a DICOM keyword, then delete the corresponding tag + and data_element. Else, delete an instance (python) attribute + as any other class would do + + """ + # First check if a valid DICOM keyword and if we have that data element + tag = tag_for_name(name) + if tag and tag in self: + dict.__delitem__(self, tag) # direct to dict as we know we have key + # If not a DICOM name in this dataset, check for regular instance name + # can't do delete directly, that will call __delattr__ again + elif name in self.__dict__: + del self.__dict__[name] + # Not found, raise an error in same style as python does + else: + raise AttributeError(name) + + def __delitem__(self, key): + """Intercept requests to delete an attribute by key, e.g. del ds[tag]""" + # Assume is a standard tag (for speed in common case) + try: + dict.__delitem__(self, key) + # If not a standard tag, than convert to Tag and try again + except KeyError: + tag = Tag(key) + dict.__delitem__(self, tag) + + def __dir__(self): + """Give a list of attributes available in the dataset + + List of attributes is used, for example, in auto-completion in editors + or command-line environments. + """ + # Force zip object into a list in case of python3. Also backwards + # compatible + meths = set(list(zip( + *inspect.getmembers(Dataset, inspect.isroutine)))[0]) + props = set(list(zip( + *inspect.getmembers(Dataset, inspect.isdatadescriptor)))[0]) + dicom_names = set(self.dir()) + alldir = sorted(props | meths | dicom_names) + return alldir + + def dir(self, *filters): + """Return an alphabetical list of data_element keywords in the dataset. + + Intended mainly for use in interactive Python sessions. + :param filters: zero or more string arguments to the function. Used for + case-insensitive match to any part of the DICOM name. + :returns: All data_element names in this dataset matching the filters. + If no filters, return all DICOM keywords in the dataset + """ + allnames = [] + for tag, data_element in self.items(): + allnames.extend(all_names_for_tag(tag)) + # remove blanks - tags without valid names (e.g. private tags) + allnames = [x for x in allnames if x] + # Store found names in a dict, so duplicate names appear only once + matches = {} + for filter_ in filters: + filter_ = filter_.lower() + match = [x for x in allnames if x.lower().find(filter_) != -1] + matches.update(dict([(x, 1) for x in match])) + if filters: + names = sorted(matches.keys()) + return names + else: + return sorted(allnames) + + def get(self, key, default=None): + """Extend dict.get() to handle DICOM keywords""" + if isinstance(key, (str, unicode)): + try: + return getattr(self, key) + except AttributeError: + return default + else: + # is not a string, try to make it into a tag and then hand it + # off to the underlying dict + if not isinstance(key, BaseTag): + try: + key = Tag(key) + except: + raise TypeError("Dataset.get key must be a string or tag") + try: + return_val = self.__getitem__(key) + except KeyError: + return_val = default + return return_val + + def __getattr__(self, name): + """Intercept requests for unknown Dataset python-attribute names. + + If the name matches a Dicom keyword, + return the value for the data_element with the corresponding tag. + + """ + # __getattr__ only called if instance cannot find name in self.__dict__ + # So, if name is not a dicom string, then is an error + tag = tag_for_name(name) + if tag is None: + raise AttributeError("Dataset does not have attribute " + "'{0:s}'.".format(name)) + tag = Tag(tag) + if tag not in self: + raise AttributeError("Dataset does not have attribute " + "'{0:s}'.".format(name)) + else: # do have that dicom data_element + return self[tag].value + + @property + def _character_set(self): + """ + :return: + """ + char_set = self.get('SpecificCharacterSet', None) + + if not char_set: + char_set = self._parent_encoding + else: + char_set = convert_encodings(char_set) + + return char_set + + def __getitem__(self, key): + """Operator for dataset[key] request.""" + tag = Tag(key) + data_elem = dict.__getitem__(self, tag) + + if isinstance(data_elem, DataElement): + return data_elem + elif isinstance(data_elem, tuple): + # If a deferred read, then go get the value now + if data_elem.value is None: + from dicom.filereader import read_deferred_data_element + data_elem = read_deferred_data_element(self.fileobj_type, + self.filename, self.timestamp, data_elem) + + if tag != (0x08, 0x05): + character_set = self._character_set + else: + character_set = default_encoding + # Not converted from raw form read from file yet; do so now + self[tag] = DataElement_from_raw(data_elem, character_set) + return dict.__getitem__(self, tag) + + def get_item(self, key): + """Return the raw data element if possible. + It will be raw if the user has never accessed the value, + or set their own value. + Note if the data element is a deferred-read element, + then it is read and converted before being returned + """ + tag = Tag(key) + data_elem = dict.__getitem__(self, tag) + # If a deferred read, return using __getitem__ to read and convert it + if isinstance(data_elem, tuple) and data_elem.value is None: + return self[key] + return data_elem + + def group_dataset(self, group): + """Return a Dataset containing only data_elements of a certain group. + + :param group: the group part of a dicom (group, element) tag. + :returns: a dataset instance containing data elements of the group + specified + """ + ds = Dataset() + ds.update(dict([(tag, data_element) for tag, data_element in self.items() + if tag.group == group])) + return ds + + def __iter__(self): + """Method to iterate through the dataset, returning data_elements. + e.g.: + for data_element in dataset: + do_something... + The data_elements are returned in DICOM order, + i.e. in increasing order by tag value. + Sequence items are returned as a single data_element; it is up to the + calling code to recurse into the Sequence items if desired + """ + # Note this is different than the underlying dict class, + # which returns the key of the key:value mapping. + # Here the value is returned (but data_element.tag has the key) + taglist = sorted(self.keys()) + for tag in taglist: + yield self[tag] + + def _pixel_data_numpy(self): + """Return a NumPy array of the pixel data. + + NumPy is a numerical package for python. It is used if available. + + :raises TypeError: if no pixel data in this dataset. + :raises ImportError: if cannot import numpy. + + """ + if 'PixelData' not in self: + raise TypeError("No pixel data found in this dataset.") + + if not have_numpy: + msg = "The Numpy package is required to use pixel_array, and numpy could not be imported.\n" + raise ImportError(msg) + + # determine the type used for the array + need_byteswap = (self.is_little_endian != sys_is_little_endian) + + # Make NumPy format code, e.g. "uint16", "int32" etc + # from two pieces of info: + # self.PixelRepresentation -- 0 for unsigned, 1 for signed; + # self.BitsAllocated -- 8, 16, or 32 + format_str = '%sint%d' % (('u', '')[self.PixelRepresentation], + self.BitsAllocated) + try: + numpy_format = numpy.dtype(format_str) + except TypeError: + msg = ("Data type not understood by NumPy: " + "format='%s', PixelRepresentation=%d, BitsAllocated=%d") + raise TypeError(msg % (numpy_format, self.PixelRepresentation, + self.BitsAllocated)) + + # Have correct Numpy format, so create the NumPy array + arr = numpy.fromstring(self.PixelData, numpy_format) + + # XXX byte swap - may later handle this in read_file!!? + if need_byteswap: + arr.byteswap(True) # True means swap in-place, don't make a new copy + # Note the following reshape operations return a new *view* onto arr, but don't copy the data + if 'NumberOfFrames' in self and self.NumberOfFrames > 1: + if self.SamplesPerPixel > 1: + arr = arr.reshape(self.SamplesPerPixel, self.NumberOfFrames, self.Rows, self.Columns) + else: + arr = arr.reshape(self.NumberOfFrames, self.Rows, self.Columns) + else: + if self.SamplesPerPixel > 1: + if self.BitsAllocated == 8: + arr = arr.reshape(self.SamplesPerPixel, self.Rows, self.Columns) + else: + raise NotImplementedError("This code only handles SamplesPerPixel > 1 if Bits Allocated = 8") + else: + arr = arr.reshape(self.Rows, self.Columns) + return arr + + # Use by pixel_array property + def _get_pixel_array(self): + # Check if pixel data is in a form we know how to make into an array + # XXX uses file_meta here, should really only be thus for FileDataset + if self.file_meta.TransferSyntaxUID not in NotCompressedPixelTransferSyntaxes: + raise NotImplementedError("Pixel Data is compressed in a format pydicom does not yet handle. Cannot return array") + + # Check if already have converted to a NumPy array + # Also check if self.PixelData has changed. If so, get new NumPy array + already_have = True + if not hasattr(self, "_pixel_array"): + already_have = False + elif self._pixel_id != id(self.PixelData): + already_have = False + if not already_have: + self._pixel_array = self._pixel_data_numpy() + self._pixel_id = id(self.PixelData) # is this guaranteed to work if memory is re-used?? + return self._pixel_array + + @property + def pixel_array(self): + """Return the pixel data as a NumPy array""" + try: + return self._get_pixel_array() + except AttributeError: + t, e, tb = sys.exc_info() + raise PropertyError("AttributeError in pixel_array property: " + + e.args[0]), None, tb + + # Format strings spec'd according to python string formatting options + # See http://docs.python.org/library/stdtypes.html#string-formatting-operations + default_element_format = "%(tag)s %(name)-35.35s %(VR)s: %(repval)s" + default_sequence_element_format = "%(tag)s %(name)-35.35s %(VR)s: %(repval)s" + + def formatted_lines(self, element_format=default_element_format, + sequence_element_format=default_sequence_element_format, + indent_format=None): + """A generator to give back a formatted string representing each line + one at a time. Example: + for line in dataset.formatted_lines("%(name)s=%(repval)s", "SQ:%(name)s=%(repval)s"): + print(line) + See the source code for default values which illustrate some of the names that can be used in the + format strings + indent_format -- not used in current version. Placeholder for future functionality. + """ + for data_element in self.iterall(): + # Get all the attributes possible for this data element (e.g. + # gets descriptive text name too) + # This is the dictionary of names that can be used in the format string + elem_dict = dict([(x, getattr(data_element, x)() + if callable(getattr(data_element, x)) + else getattr(data_element, x)) + for x in dir(data_element) if not x.startswith("_")]) + if data_element.VR == "SQ": + yield sequence_element_format % elem_dict + else: + yield element_format % elem_dict + + def _pretty_str(self, indent=0, top_level_only=False): + """Return a string of the data_elements in this dataset, with indented levels. + + This private method is called by the __str__() method + for handling print statements or str(dataset), and the __repr__() method. + It is also used by top(), which is the reason for the top_level_only flag. + This function recurses, with increasing indentation levels. + + """ + strings = [] + indent_str = self.indent_chars * indent + nextindent_str = self.indent_chars * (indent + 1) + for data_element in self: + with tag_in_exception(data_element.tag): + if data_element.VR == "SQ": # a sequence + strings.append(indent_str + str(data_element.tag) + " %s %i item(s) ---- " % (data_element.description(), len(data_element.value))) + if not top_level_only: + for dataset in data_element.value: + strings.append(dataset._pretty_str(indent + 1)) + strings.append(nextindent_str + "---------") + else: + strings.append(indent_str + repr(data_element)) + return "\n".join(strings) + + def remove_private_tags(self): + """Remove all Dicom private tags in this dataset and those contained within.""" + def RemoveCallback(dataset, data_element): + """Internal method to use as callback to walk() method.""" + if data_element.tag.is_private: + # can't del self[tag] - won't be right dataset on recursion + del dataset[data_element.tag] + self.walk(RemoveCallback) + + def save_as(self, filename, write_like_original=True): + """Write the dataset to a file. + + :param filename: full path and filename to save the file to + :write_like_original: see dicom.filewriter.write_file for info on this parameter. + """ + dicom.write_file(filename, self, write_like_original) + + def __setattr__(self, name, value): + """Intercept any attempts to set a value for an instance attribute. + + If name is a dicom descriptive string (cleaned with CleanName), + then set the corresponding tag and data_element. + Else, set an instance (python) attribute as any other class would do. + + """ + tag = tag_for_name(name) + if tag is not None: # successfully mapped name to a tag + if tag not in self: # don't have this tag yet->create the data_element instance + VR = dictionaryVR(tag) + data_element = DataElement(tag, VR, value) + else: # already have this data_element, just changing its value + data_element = self[tag] + data_element.value = value + # Now have data_element - store it in this dict + self[tag] = data_element + else: # name not in dicom dictionary - setting a non-dicom instance attribute + # XXX note if user mis-spells a dicom data_element - no error!!! + self.__dict__[name] = value + + def __setitem__(self, key, value): + """Operator for dataset[key]=value. Check consistency, and deal with private tags""" + if not isinstance(value, (DataElement, RawDataElement)): # ok if is subclass, e.g. DeferredDataElement + raise TypeError("Dataset contents must be DataElement instances.\n" + "To set a data_element value use data_element.value=val") + tag = Tag(value.tag) + if key != tag: + raise ValueError("data_element.tag must match the dictionary key") + + data_element = value + if tag.is_private: + # See PS 3.5-2008 section 7.8.1 (p. 44) for how blocks are reserved + logger.debug("Setting private tag %r" % tag) + private_block = tag.elem >> 8 + private_creator_tag = Tag(tag.group, private_block) + if private_creator_tag in self and tag != private_creator_tag: + if isinstance(data_element, RawDataElement): + data_element = DataElement_from_raw(data_element, self._character_set) + data_element.private_creator = self[private_creator_tag].value + dict.__setitem__(self, tag, data_element) + + def __str__(self): + """Handle str(dataset).""" + return self._pretty_str() + + def top(self): + """Show the DICOM tags, but only the top level; do not recurse into Sequences""" + return self._pretty_str(top_level_only=True) + + def trait_names(self): + """Return a list of valid names for auto-completion code + Used in IPython, so that data element names can be found + and offered for autocompletion on the IPython command line + """ + return dir(self) # only valid python >=2.6, else use self.__dir__() + + def update(self, dictionary): + """Extend dict.update() to handle DICOM keywords.""" + for key, value in dictionary.items(): + if isinstance(key, (str, unicode)): + setattr(self, key, value) + else: + self[Tag(key)] = value + + def iterall(self): + """Iterate through the dataset, yielding all data elements. + + Unlike Dataset.__iter__, this *does* recurse into sequences, + and so returns all data elements as if the file were "flattened". + """ + for data_element in self: + yield data_element + if data_element.VR == "SQ": + sequence = data_element.value + for dataset in sequence: + for elem in dataset.iterall(): + yield elem + + def walk(self, callback, recursive=True): + """Call the given function for all dataset data_elements (recurses). + + Visit all data_elements, recurse into sequences and their datasets (if specified), + The callback function is called for each data_element + (including SQ element). + Can be used to perform an operation on certain types of data_elements. + E.g., `remove_private_tags`() finds all private tags and deletes them. + + :param callback: a callable taking two arguments: a dataset, and + a data_element belonging to that dataset. + :param recursive: a boolean indicating whether to recurse into Sequences + + `DataElement`s will come back in DICOM order (by increasing tag number + within their dataset) + + """ + taglist = sorted(self.keys()) + for tag in taglist: + + with tag_in_exception(tag): + data_element = self[tag] + callback(self, data_element) # self = this Dataset + # 'tag in self' below needed in case callback deleted data_element + if recursive and tag in self and data_element.VR == "SQ": + sequence = data_element.value + for dataset in sequence: + dataset.walk(callback) + + __repr__ = __str__ + + +class FileDataset(Dataset): + def __init__(self, filename_or_obj, dataset, preamble=None, file_meta=None, + is_implicit_VR=True, is_little_endian=True): + """Initialize a dataset read from a DICOM file + + :param filename: full path and filename to the file. Use None if is a BytesIO. + :param dataset: some form of dictionary, usually a Dataset from read_dataset() + :param preamble: the 128-byte DICOM preamble + :param file_meta: the file meta info dataset, as returned by _read_file_meta, + or an empty dataset if no file meta information is in the file + :param is_implicit_VR: True if implicit VR transfer syntax used; False if explicit VR. Default is True. + :param is_little_endian: True if little-endian transfer syntax used; False if big-endian. Default is True. + """ + Dataset.__init__(self, dataset) + self.preamble = preamble + self.file_meta = file_meta + self.is_implicit_VR = is_implicit_VR + self.is_little_endian = is_little_endian + if isinstance(filename_or_obj, basestring): + self.filename = filename_or_obj + self.fileobj_type = open + elif isinstance(filename_or_obj, io.BufferedReader): + self.filename = filename_or_obj.name + # This is the appropriate constructor for io.BufferedReader + self.fileobj_type = open + else: + self.fileobj_type = filename_or_obj.__class__ # use __class__ python <2.7?; http://docs.python.org/reference/datamodel.html + if getattr(filename_or_obj, "name", False): + self.filename = filename_or_obj.name + elif getattr(filename_or_obj, "filename", False): # gzip python <2.7? + self.filename = filename_or_obj.filename + else: + self.filename = None # e.g. came from BytesIO or something file-like + self.timestamp = None + if stat_available and self.filename and os.path.exists(self.filename): + statinfo = stat(self.filename) + self.timestamp = statinfo.st_mtime diff -Nru pydicom-0.9.8/source/dicom/_dicom_dict.py pydicom-0.9.9/source/dicom/_dicom_dict.py --- pydicom-0.9.8/source/dicom/_dicom_dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/_dicom_dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,3806 @@ +# _dicom_dict.py +"""DICOM data dictionary auto-generated by docbook_to_dict2013.py (in Rickard Holmberg's clone)""" +from __future__ import absolute_import + +DicomDictionary = { + 0x00000000: ('UL', '1', "Command Group Length", '', 'CommandGroupLength'), + 0x00000001: ('UL', '1', "Command Length to End", 'Retired', 'CommandLengthToEnd'), + 0x00000002: ('UI', '1', "Affected SOP Class UID", '', 'AffectedSOPClassUID'), + 0x00000003: ('UI', '1', "Requested SOP Class UID", '', 'RequestedSOPClassUID'), + 0x00000010: ('SH', '1', "Command Recognition Code", 'Retired', 'CommandRecognitionCode'), + 0x00000100: ('US', '1', "Command Field", '', 'CommandField'), + 0x00000110: ('US', '1', "Message ID", '', 'MessageID'), + 0x00000120: ('US', '1', "Message ID Being Responded To", '', 'MessageIDBeingRespondedTo'), + 0x00000200: ('AE', '1', "Initiator", 'Retired', 'Initiator'), + 0x00000300: ('AE', '1', "Receiver", 'Retired', 'Receiver'), + 0x00000400: ('AE', '1', "Find Location", 'Retired', 'FindLocation'), + 0x00000600: ('AE', '1', "Move Destination", '', 'MoveDestination'), + 0x00000700: ('US', '1', "Priority", '', 'Priority'), + 0x00000800: ('US', '1', "Command Data Set Type", '', 'CommandDataSetType'), + 0x00000850: ('US', '1', "Number of Matches", 'Retired', 'NumberOfMatches'), + 0x00000860: ('US', '1', "Response Sequence Number", 'Retired', 'ResponseSequenceNumber'), + 0x00000900: ('US', '1', "Status", '', 'Status'), + 0x00000901: ('AT', '1-n', "Offending Element", '', 'OffendingElement'), + 0x00000902: ('LO', '1', "Error Comment", '', 'ErrorComment'), + 0x00000903: ('US', '1', "Error ID", '', 'ErrorID'), + 0x00001000: ('UI', '1', "Affected SOP Instance UID", '', 'AffectedSOPInstanceUID'), + 0x00001001: ('UI', '1', "Requested SOP Instance UID", '', 'RequestedSOPInstanceUID'), + 0x00001002: ('US', '1', "Event Type ID", '', 'EventTypeID'), + 0x00001005: ('AT', '1-n', "Attribute Identifier List", '', 'AttributeIdentifierList'), + 0x00001008: ('US', '1', "Action Type ID", '', 'ActionTypeID'), + 0x00001020: ('US', '1', "Number of Remaining Sub-operations", '', 'NumberOfRemainingSuboperations'), + 0x00001021: ('US', '1', "Number of Completed Sub-operations", '', 'NumberOfCompletedSuboperations'), + 0x00001022: ('US', '1', "Number of Failed Sub-operations", '', 'NumberOfFailedSuboperations'), + 0x00001023: ('US', '1', "Number of Warning Sub-operations", '', 'NumberOfWarningSuboperations'), + 0x00001030: ('AE', '1', "Move Originator Application Entity Title", '', 'MoveOriginatorApplicationEntityTitle'), + 0x00001031: ('US', '1', "Move Originator Message ID", '', 'MoveOriginatorMessageID'), + 0x00004000: ('LT', '1', "Dialog Receiver", 'Retired', 'DialogReceiver'), + 0x00004010: ('LT', '1', "Terminal Type", 'Retired', 'TerminalType'), + 0x00005010: ('SH', '1', "Message Set ID", 'Retired', 'MessageSetID'), + 0x00005020: ('SH', '1', "End Message ID", 'Retired', 'EndMessageID'), + 0x00005110: ('LT', '1', "Display Format", 'Retired', 'DisplayFormat'), + 0x00005120: ('LT', '1', "Page Position ID", 'Retired', 'PagePositionID'), + 0x00005130: ('CS', '1', "Text Format ID", 'Retired', 'TextFormatID'), + 0x00005140: ('CS', '1', "Normal/Reverse", 'Retired', 'NormalReverse'), + 0x00005150: ('CS', '1', "Add Gray Scale", 'Retired', 'AddGrayScale'), + 0x00005160: ('CS', '1', "Borders", 'Retired', 'Borders'), + 0x00005170: ('IS', '1', "Copies", 'Retired', 'Copies'), + 0x00005180: ('CS', '1', "Command Magnification Type", 'Retired', 'CommandMagnificationType'), + 0x00005190: ('CS', '1', "Erase", 'Retired', 'Erase'), + 0x000051A0: ('CS', '1', "Print", 'Retired', 'Print'), + 0x000051B0: ('US', '1-n', "Overlays", 'Retired', 'Overlays'), + 0x00020000: ('UL', '1', "File Meta Information Group Length", '', 'FileMetaInformationGroupLength'), + 0x00020001: ('OB', '1', "File Meta Information Version", '', 'FileMetaInformationVersion'), + 0x00020002: ('UI', '1', "Media Storage SOP Class UID", '', 'MediaStorageSOPClassUID'), + 0x00020003: ('UI', '1', "Media Storage SOP Instance UID", '', 'MediaStorageSOPInstanceUID'), + 0x00020010: ('UI', '1', "Transfer Syntax UID", '', 'TransferSyntaxUID'), + 0x00020012: ('UI', '1', "Implementation Class UID", '', 'ImplementationClassUID'), + 0x00020013: ('SH', '1', "Implementation Version Name", '', 'ImplementationVersionName'), + 0x00020016: ('AE', '1', "Source Application Entity Title", '', 'SourceApplicationEntityTitle'), + 0x00020100: ('UI', '1', "Private Information Creator UID", '', 'PrivateInformationCreatorUID'), + 0x00020102: ('OB', '1', "Private Information", '', 'PrivateInformation'), + 0x00041130: ('CS', '1', "File-set ID", '', 'FileSetID'), + 0x00041141: ('CS', '1-8', "File-set Descriptor File ID", '', 'FileSetDescriptorFileID'), + 0x00041142: ('CS', '1', "Specific Character Set of File-set Descriptor File", '', 'SpecificCharacterSetOfFileSetDescriptorFile'), + 0x00041200: ('UL', '1', "Offset of the First Directory Record of the Root Directory Entity", '', 'OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity'), + 0x00041202: ('UL', '1', "Offset of the Last Directory Record of the Root Directory Entity", '', 'OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity'), + 0x00041212: ('US', '1', "File-set Consistency Flag", '', 'FileSetConsistencyFlag'), + 0x00041220: ('SQ', '1', "Directory Record Sequence", '', 'DirectoryRecordSequence'), + 0x00041400: ('UL', '1', "Offset of the Next Directory Record", '', 'OffsetOfTheNextDirectoryRecord'), + 0x00041410: ('US', '1', "Record In-use Flag", '', 'RecordInUseFlag'), + 0x00041420: ('UL', '1', "Offset of Referenced Lower-Level Directory Entity", '', 'OffsetOfReferencedLowerLevelDirectoryEntity'), + 0x00041430: ('CS', '1', "Directory Record Type", '', 'DirectoryRecordType'), + 0x00041432: ('UI', '1', "Private Record UID", '', 'PrivateRecordUID'), + 0x00041500: ('CS', '1-8', "Referenced File ID", '', 'ReferencedFileID'), + 0x00041504: ('UL', '1', "MRDR Directory Record Offset", 'Retired', 'MRDRDirectoryRecordOffset'), + 0x00041510: ('UI', '1', "Referenced SOP Class UID in File", '', 'ReferencedSOPClassUIDInFile'), + 0x00041511: ('UI', '1', "Referenced SOP Instance UID in File", '', 'ReferencedSOPInstanceUIDInFile'), + 0x00041512: ('UI', '1', "Referenced Transfer Syntax UID in File", '', 'ReferencedTransferSyntaxUIDInFile'), + 0x0004151A: ('UI', '1-n', "Referenced Related General SOP Class UID in File", '', 'ReferencedRelatedGeneralSOPClassUIDInFile'), + 0x00041600: ('UL', '1', "Number of References", 'Retired', 'NumberOfReferences'), + 0x00080001: ('UL', '1', "Length to End", 'Retired', 'LengthToEnd'), + 0x00080005: ('CS', '1-n', "Specific Character Set", '', 'SpecificCharacterSet'), + 0x00080006: ('SQ', '1', "Language Code Sequence", '', 'LanguageCodeSequence'), + 0x00080008: ('CS', '2-n', "Image Type", '', 'ImageType'), + 0x00080010: ('SH', '1', "Recognition Code", 'Retired', 'RecognitionCode'), + 0x00080012: ('DA', '1', "Instance Creation Date", '', 'InstanceCreationDate'), + 0x00080013: ('TM', '1', "Instance Creation Time", '', 'InstanceCreationTime'), + 0x00080014: ('UI', '1', "Instance Creator UID", '', 'InstanceCreatorUID'), + 0x00080015: ('DT', '1', "Instance Coercion DateTime", '', 'InstanceCoercionDateTime'), + 0x00080016: ('UI', '1', "SOP Class UID", '', 'SOPClassUID'), + 0x00080018: ('UI', '1', "SOP Instance UID", '', 'SOPInstanceUID'), + 0x0008001A: ('UI', '1-n', "Related General SOP Class UID", '', 'RelatedGeneralSOPClassUID'), + 0x0008001B: ('UI', '1', "Original Specialized SOP Class UID", '', 'OriginalSpecializedSOPClassUID'), + 0x00080020: ('DA', '1', "Study Date", '', 'StudyDate'), + 0x00080021: ('DA', '1', "Series Date", '', 'SeriesDate'), + 0x00080022: ('DA', '1', "Acquisition Date", '', 'AcquisitionDate'), + 0x00080023: ('DA', '1', "Content Date", '', 'ContentDate'), + 0x00080024: ('DA', '1', "Overlay Date", 'Retired', 'OverlayDate'), + 0x00080025: ('DA', '1', "Curve Date", 'Retired', 'CurveDate'), + 0x0008002A: ('DT', '1', "Acquisition DateTime", '', 'AcquisitionDateTime'), + 0x00080030: ('TM', '1', "Study Time", '', 'StudyTime'), + 0x00080031: ('TM', '1', "Series Time", '', 'SeriesTime'), + 0x00080032: ('TM', '1', "Acquisition Time", '', 'AcquisitionTime'), + 0x00080033: ('TM', '1', "Content Time", '', 'ContentTime'), + 0x00080034: ('TM', '1', "Overlay Time", 'Retired', 'OverlayTime'), + 0x00080035: ('TM', '1', "Curve Time", 'Retired', 'CurveTime'), + 0x00080040: ('US', '1', "Data Set Type", 'Retired', 'DataSetType'), + 0x00080041: ('LO', '1', "Data Set Subtype", 'Retired', 'DataSetSubtype'), + 0x00080042: ('CS', '1', "Nuclear Medicine Series Type", 'Retired', 'NuclearMedicineSeriesType'), + 0x00080050: ('SH', '1', "Accession Number", '', 'AccessionNumber'), + 0x00080051: ('SQ', '1', "Issuer of Accession Number Sequence", '', 'IssuerOfAccessionNumberSequence'), + 0x00080052: ('CS', '1', "Query/Retrieve Level", '', 'QueryRetrieveLevel'), + 0x00080053: ('CS', '1', "Query/Retrieve View", '', 'QueryRetrieveView'), + 0x00080054: ('AE', '1-n', "Retrieve AE Title", '', 'RetrieveAETitle'), + 0x00080056: ('CS', '1', "Instance Availability", '', 'InstanceAvailability'), + 0x00080058: ('UI', '1-n', "Failed SOP Instance UID List", '', 'FailedSOPInstanceUIDList'), + 0x00080060: ('CS', '1', "Modality", '', 'Modality'), + 0x00080061: ('CS', '1-n', "Modalities in Study", '', 'ModalitiesInStudy'), + 0x00080062: ('UI', '1-n', "SOP Classes in Study", '', 'SOPClassesInStudy'), + 0x00080064: ('CS', '1', "Conversion Type", '', 'ConversionType'), + 0x00080068: ('CS', '1', "Presentation Intent Type", '', 'PresentationIntentType'), + 0x00080070: ('LO', '1', "Manufacturer", '', 'Manufacturer'), + 0x00080080: ('LO', '1', "Institution Name", '', 'InstitutionName'), + 0x00080081: ('ST', '1', "Institution Address", '', 'InstitutionAddress'), + 0x00080082: ('SQ', '1', "Institution Code Sequence", '', 'InstitutionCodeSequence'), + 0x00080090: ('PN', '1', "Referring Physician's Name", '', 'ReferringPhysicianName'), + 0x00080092: ('ST', '1', "Referring Physician's Address", '', 'ReferringPhysicianAddress'), + 0x00080094: ('SH', '1-n', "Referring Physician's Telephone Numbers", '', 'ReferringPhysicianTelephoneNumbers'), + 0x00080096: ('SQ', '1', "Referring Physician Identification Sequence", '', 'ReferringPhysicianIdentificationSequence'), + 0x00080100: ('SH', '1', "Code Value", '', 'CodeValue'), + 0x00080101: ('LO', '1', "Extended Code Value", '', 'ExtendedCodeValue'), + 0x00080102: ('SH', '1', "Coding Scheme Designator", '', 'CodingSchemeDesignator'), + 0x00080103: ('SH', '1', "Coding Scheme Version", '', 'CodingSchemeVersion'), + 0x00080104: ('LO', '1', "Code Meaning", '', 'CodeMeaning'), + 0x00080105: ('CS', '1', "Mapping Resource", '', 'MappingResource'), + 0x00080106: ('DT', '1', "Context Group Version", '', 'ContextGroupVersion'), + 0x00080107: ('DT', '1', "Context Group Local Version", '', 'ContextGroupLocalVersion'), + 0x00080108: ('LT', '1', "Extended Code Meaning", '', 'ExtendedCodeMeaning'), + 0x0008010B: ('CS', '1', "Context Group Extension Flag", '', 'ContextGroupExtensionFlag'), + 0x0008010C: ('UI', '1', "Coding Scheme UID", '', 'CodingSchemeUID'), + 0x0008010D: ('UI', '1', "Context Group Extension Creator UID", '', 'ContextGroupExtensionCreatorUID'), + 0x0008010F: ('CS', '1', "Context Identifier", '', 'ContextIdentifier'), + 0x00080110: ('SQ', '1', "Coding Scheme Identification Sequence", '', 'CodingSchemeIdentificationSequence'), + 0x00080112: ('LO', '1', "Coding Scheme Registry", '', 'CodingSchemeRegistry'), + 0x00080114: ('ST', '1', "Coding Scheme External ID", '', 'CodingSchemeExternalID'), + 0x00080115: ('ST', '1', "Coding Scheme Name", '', 'CodingSchemeName'), + 0x00080116: ('ST', '1', "Coding Scheme Responsible Organization", '', 'CodingSchemeResponsibleOrganization'), + 0x00080117: ('UI', '1', "Context UID", '', 'ContextUID'), + 0x00080201: ('SH', '1', "Timezone Offset From UTC", '', 'TimezoneOffsetFromUTC'), + 0x00081000: ('AE', '1', "Network ID", 'Retired', 'NetworkID'), + 0x00081010: ('SH', '1', "Station Name", '', 'StationName'), + 0x00081030: ('LO', '1', "Study Description", '', 'StudyDescription'), + 0x00081032: ('SQ', '1', "Procedure Code Sequence", '', 'ProcedureCodeSequence'), + 0x0008103E: ('LO', '1', "Series Description", '', 'SeriesDescription'), + 0x0008103F: ('SQ', '1', "Series Description Code Sequence", '', 'SeriesDescriptionCodeSequence'), + 0x00081040: ('LO', '1', "Institutional Department Name", '', 'InstitutionalDepartmentName'), + 0x00081048: ('PN', '1-n', "Physician(s) of Record", '', 'PhysiciansOfRecord'), + 0x00081049: ('SQ', '1', "Physician(s) of Record Identification Sequence", '', 'PhysiciansOfRecordIdentificationSequence'), + 0x00081050: ('PN', '1-n', "Performing Physician's Name", '', 'PerformingPhysicianName'), + 0x00081052: ('SQ', '1', "Performing Physician Identification Sequence", '', 'PerformingPhysicianIdentificationSequence'), + 0x00081060: ('PN', '1-n', "Name of Physician(s) Reading Study", '', 'NameOfPhysiciansReadingStudy'), + 0x00081062: ('SQ', '1', "Physician(s) Reading Study Identification Sequence", '', 'PhysiciansReadingStudyIdentificationSequence'), + 0x00081070: ('PN', '1-n', "Operators' Name", '', 'OperatorsName'), + 0x00081072: ('SQ', '1', "Operator Identification Sequence", '', 'OperatorIdentificationSequence'), + 0x00081080: ('LO', '1-n', "Admitting Diagnoses Description", '', 'AdmittingDiagnosesDescription'), + 0x00081084: ('SQ', '1', "Admitting Diagnoses Code Sequence", '', 'AdmittingDiagnosesCodeSequence'), + 0x00081090: ('LO', '1', "Manufacturer's Model Name", '', 'ManufacturerModelName'), + 0x00081100: ('SQ', '1', "Referenced Results Sequence", 'Retired', 'ReferencedResultsSequence'), + 0x00081110: ('SQ', '1', "Referenced Study Sequence", '', 'ReferencedStudySequence'), + 0x00081111: ('SQ', '1', "Referenced Performed Procedure Step Sequence", '', 'ReferencedPerformedProcedureStepSequence'), + 0x00081115: ('SQ', '1', "Referenced Series Sequence", '', 'ReferencedSeriesSequence'), + 0x00081120: ('SQ', '1', "Referenced Patient Sequence", '', 'ReferencedPatientSequence'), + 0x00081125: ('SQ', '1', "Referenced Visit Sequence", '', 'ReferencedVisitSequence'), + 0x00081130: ('SQ', '1', "Referenced Overlay Sequence", 'Retired', 'ReferencedOverlaySequence'), + 0x00081134: ('SQ', '1', "Referenced Stereometric Instance Sequence", '', 'ReferencedStereometricInstanceSequence'), + 0x0008113A: ('SQ', '1', "Referenced Waveform Sequence", '', 'ReferencedWaveformSequence'), + 0x00081140: ('SQ', '1', "Referenced Image Sequence", '', 'ReferencedImageSequence'), + 0x00081145: ('SQ', '1', "Referenced Curve Sequence", 'Retired', 'ReferencedCurveSequence'), + 0x0008114A: ('SQ', '1', "Referenced Instance Sequence", '', 'ReferencedInstanceSequence'), + 0x0008114B: ('SQ', '1', "Referenced Real World Value Mapping Instance Sequence", '', 'ReferencedRealWorldValueMappingInstanceSequence'), + 0x00081150: ('UI', '1', "Referenced SOP Class UID", '', 'ReferencedSOPClassUID'), + 0x00081155: ('UI', '1', "Referenced SOP Instance UID", '', 'ReferencedSOPInstanceUID'), + 0x0008115A: ('UI', '1-n', "SOP Classes Supported", '', 'SOPClassesSupported'), + 0x00081160: ('IS', '1-n', "Referenced Frame Number", '', 'ReferencedFrameNumber'), + 0x00081161: ('UL', '1-n', "Simple Frame List", '', 'SimpleFrameList'), + 0x00081162: ('UL', '3-3n', "Calculated Frame List", '', 'CalculatedFrameList'), + 0x00081163: ('FD', '2', "TimeRange", '', 'TimeRange'), + 0x00081164: ('SQ', '1', "Frame Extraction Sequence", '', 'FrameExtractionSequence'), + 0x00081167: ('UI', '1', "Multi-frame Source SOP Instance UID", '', 'MultiFrameSourceSOPInstanceUID'), + 0x00081190: ('UT', '1', "Retrieve URL", '', 'RetrieveURL'), + 0x00081195: ('UI', '1', "Transaction UID", '', 'TransactionUID'), + 0x00081196: ('US', '1', "Warning Reason", '', 'WarningReason'), + 0x00081197: ('US', '1', "Failure Reason", '', 'FailureReason'), + 0x00081198: ('SQ', '1', "Failed SOP Sequence", '', 'FailedSOPSequence'), + 0x00081199: ('SQ', '1', "Referenced SOP Sequence", '', 'ReferencedSOPSequence'), + 0x00081200: ('SQ', '1', "Studies Containing Other Referenced Instances Sequence", '', 'StudiesContainingOtherReferencedInstancesSequence'), + 0x00081250: ('SQ', '1', "Related Series Sequence", '', 'RelatedSeriesSequence'), + 0x00082110: ('CS', '1', "Lossy Image Compression (Retired)", 'Retired', 'LossyImageCompressionRetired'), + 0x00082111: ('ST', '1', "Derivation Description", '', 'DerivationDescription'), + 0x00082112: ('SQ', '1', "Source Image Sequence", '', 'SourceImageSequence'), + 0x00082120: ('SH', '1', "Stage Name", '', 'StageName'), + 0x00082122: ('IS', '1', "Stage Number", '', 'StageNumber'), + 0x00082124: ('IS', '1', "Number of Stages", '', 'NumberOfStages'), + 0x00082127: ('SH', '1', "View Name", '', 'ViewName'), + 0x00082128: ('IS', '1', "View Number", '', 'ViewNumber'), + 0x00082129: ('IS', '1', "Number of Event Timers", '', 'NumberOfEventTimers'), + 0x0008212A: ('IS', '1', "Number of Views in Stage", '', 'NumberOfViewsInStage'), + 0x00082130: ('DS', '1-n', "Event Elapsed Time(s)", '', 'EventElapsedTimes'), + 0x00082132: ('LO', '1-n', "Event Timer Name(s)", '', 'EventTimerNames'), + 0x00082133: ('SQ', '1', "Event Timer Sequence", '', 'EventTimerSequence'), + 0x00082134: ('FD', '1', "Event Time Offset", '', 'EventTimeOffset'), + 0x00082135: ('SQ', '1', "Event Code Sequence", '', 'EventCodeSequence'), + 0x00082142: ('IS', '1', "Start Trim", '', 'StartTrim'), + 0x00082143: ('IS', '1', "Stop Trim", '', 'StopTrim'), + 0x00082144: ('IS', '1', "Recommended Display Frame Rate", '', 'RecommendedDisplayFrameRate'), + 0x00082200: ('CS', '1', "Transducer Position", 'Retired', 'TransducerPosition'), + 0x00082204: ('CS', '1', "Transducer Orientation", 'Retired', 'TransducerOrientation'), + 0x00082208: ('CS', '1', "Anatomic Structure", 'Retired', 'AnatomicStructure'), + 0x00082218: ('SQ', '1', "Anatomic Region Sequence", '', 'AnatomicRegionSequence'), + 0x00082220: ('SQ', '1', "Anatomic Region Modifier Sequence", '', 'AnatomicRegionModifierSequence'), + 0x00082228: ('SQ', '1', "Primary Anatomic Structure Sequence", '', 'PrimaryAnatomicStructureSequence'), + 0x00082229: ('SQ', '1', "Anatomic Structure, Space or Region Sequence", '', 'AnatomicStructureSpaceOrRegionSequence'), + 0x00082230: ('SQ', '1', "Primary Anatomic Structure Modifier Sequence", '', 'PrimaryAnatomicStructureModifierSequence'), + 0x00082240: ('SQ', '1', "Transducer Position Sequence", 'Retired', 'TransducerPositionSequence'), + 0x00082242: ('SQ', '1', "Transducer Position Modifier Sequence", 'Retired', 'TransducerPositionModifierSequence'), + 0x00082244: ('SQ', '1', "Transducer Orientation Sequence", 'Retired', 'TransducerOrientationSequence'), + 0x00082246: ('SQ', '1', "Transducer Orientation Modifier Sequence", 'Retired', 'TransducerOrientationModifierSequence'), + 0x00082251: ('SQ', '1', "Anatomic Structure Space Or Region Code Sequence (Trial)", 'Retired', 'AnatomicStructureSpaceOrRegionCodeSequenceTrial'), + 0x00082253: ('SQ', '1', "Anatomic Portal Of Entrance Code Sequence (Trial)", 'Retired', 'AnatomicPortalOfEntranceCodeSequenceTrial'), + 0x00082255: ('SQ', '1', "Anatomic Approach Direction Code Sequence (Trial)", 'Retired', 'AnatomicApproachDirectionCodeSequenceTrial'), + 0x00082256: ('ST', '1', "Anatomic Perspective Description (Trial)", 'Retired', 'AnatomicPerspectiveDescriptionTrial'), + 0x00082257: ('SQ', '1', "Anatomic Perspective Code Sequence (Trial)", 'Retired', 'AnatomicPerspectiveCodeSequenceTrial'), + 0x00082258: ('ST', '1', "Anatomic Location Of Examining Instrument Description (Trial)", 'Retired', 'AnatomicLocationOfExaminingInstrumentDescriptionTrial'), + 0x00082259: ('SQ', '1', "Anatomic Location Of Examining Instrument Code Sequence (Trial)", 'Retired', 'AnatomicLocationOfExaminingInstrumentCodeSequenceTrial'), + 0x0008225A: ('SQ', '1', "Anatomic Structure Space Or Region Modifier Code Sequence (Trial)", 'Retired', 'AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial'), + 0x0008225C: ('SQ', '1', "OnAxis Background Anatomic Structure Code Sequence (Trial)", 'Retired', 'OnAxisBackgroundAnatomicStructureCodeSequenceTrial'), + 0x00083001: ('SQ', '1', "Alternate Representation Sequence", '', 'AlternateRepresentationSequence'), + 0x00083010: ('UI', '1-n', "Irradiation Event UID", '', 'IrradiationEventUID'), + 0x00084000: ('LT', '1', "Identifying Comments", 'Retired', 'IdentifyingComments'), + 0x00089007: ('CS', '4', "Frame Type", '', 'FrameType'), + 0x00089092: ('SQ', '1', "Referenced Image Evidence Sequence", '', 'ReferencedImageEvidenceSequence'), + 0x00089121: ('SQ', '1', "Referenced Raw Data Sequence", '', 'ReferencedRawDataSequence'), + 0x00089123: ('UI', '1', "Creator-Version UID", '', 'CreatorVersionUID'), + 0x00089124: ('SQ', '1', "Derivation Image Sequence", '', 'DerivationImageSequence'), + 0x00089154: ('SQ', '1', "Source Image Evidence Sequence", '', 'SourceImageEvidenceSequence'), + 0x00089205: ('CS', '1', "Pixel Presentation", '', 'PixelPresentation'), + 0x00089206: ('CS', '1', "Volumetric Properties", '', 'VolumetricProperties'), + 0x00089207: ('CS', '1', "Volume Based Calculation Technique", '', 'VolumeBasedCalculationTechnique'), + 0x00089208: ('CS', '1', "Complex Image Component", '', 'ComplexImageComponent'), + 0x00089209: ('CS', '1', "Acquisition Contrast", '', 'AcquisitionContrast'), + 0x00089215: ('SQ', '1', "Derivation Code Sequence", '', 'DerivationCodeSequence'), + 0x00089237: ('SQ', '1', "Referenced Presentation State Sequence", '', 'ReferencedPresentationStateSequence'), + 0x00089410: ('SQ', '1', "Referenced Other Plane Sequence", '', 'ReferencedOtherPlaneSequence'), + 0x00089458: ('SQ', '1', "Frame Display Sequence", '', 'FrameDisplaySequence'), + 0x00089459: ('FL', '1', "Recommended Display Frame Rate in Float", '', 'RecommendedDisplayFrameRateInFloat'), + 0x00089460: ('CS', '1', "Skip Frame Range Flag", '', 'SkipFrameRangeFlag'), + 0x00100010: ('PN', '1', "Patient's Name", '', 'PatientName'), + 0x00100020: ('LO', '1', "Patient ID", '', 'PatientID'), + 0x00100021: ('LO', '1', "Issuer of Patient ID", '', 'IssuerOfPatientID'), + 0x00100022: ('CS', '1', "Type of Patient ID", '', 'TypeOfPatientID'), + 0x00100024: ('SQ', '1', "Issuer of Patient ID Qualifiers Sequence", '', 'IssuerOfPatientIDQualifiersSequence'), + 0x00100030: ('DA', '1', "Patient's Birth Date", '', 'PatientBirthDate'), + 0x00100032: ('TM', '1', "Patient's Birth Time", '', 'PatientBirthTime'), + 0x00100040: ('CS', '1', "Patient's Sex", '', 'PatientSex'), + 0x00100050: ('SQ', '1', "Patient's Insurance Plan Code Sequence", '', 'PatientInsurancePlanCodeSequence'), + 0x00100101: ('SQ', '1', "Patient's Primary Language Code Sequence", '', 'PatientPrimaryLanguageCodeSequence'), + 0x00100102: ('SQ', '1', "Patient's Primary Language Modifier Code Sequence", '', 'PatientPrimaryLanguageModifierCodeSequence'), + 0x00100200: ('CS', '1', "Quality Control Subject", '', 'QualityControlSubject'), + 0x00100201: ('SQ', '1', "Quality Control Subject Type Code Sequence", '', 'QualityControlSubjectTypeCodeSequence'), + 0x00101000: ('LO', '1-n', "Other Patient IDs", '', 'OtherPatientIDs'), + 0x00101001: ('PN', '1-n', "Other Patient Names", '', 'OtherPatientNames'), + 0x00101002: ('SQ', '1', "Other Patient IDs Sequence", '', 'OtherPatientIDsSequence'), + 0x00101005: ('PN', '1', "Patient's Birth Name", '', 'PatientBirthName'), + 0x00101010: ('AS', '1', "Patient's Age", '', 'PatientAge'), + 0x00101020: ('DS', '1', "Patient's Size", '', 'PatientSize'), + 0x00101021: ('SQ', '1', "Patient's Size Code Sequence", '', 'PatientSizeCodeSequence'), + 0x00101030: ('DS', '1', "Patient's Weight", '', 'PatientWeight'), + 0x00101040: ('LO', '1', "Patient's Address", '', 'PatientAddress'), + 0x00101050: ('LO', '1-n', "Insurance Plan Identification", 'Retired', 'InsurancePlanIdentification'), + 0x00101060: ('PN', '1', "Patient's Mother's Birth Name", '', 'PatientMotherBirthName'), + 0x00101080: ('LO', '1', "Military Rank", '', 'MilitaryRank'), + 0x00101081: ('LO', '1', "Branch of Service", '', 'BranchOfService'), + 0x00101090: ('LO', '1', "Medical Record Locator", '', 'MedicalRecordLocator'), + 0x00102000: ('LO', '1-n', "Medical Alerts", '', 'MedicalAlerts'), + 0x00102110: ('LO', '1-n', "Allergies", '', 'Allergies'), + 0x00102150: ('LO', '1', "Country of Residence", '', 'CountryOfResidence'), + 0x00102152: ('LO', '1', "Region of Residence", '', 'RegionOfResidence'), + 0x00102154: ('SH', '1-n', "Patient's Telephone Numbers", '', 'PatientTelephoneNumbers'), + 0x00102160: ('SH', '1', "Ethnic Group", '', 'EthnicGroup'), + 0x00102180: ('SH', '1', "Occupation", '', 'Occupation'), + 0x001021A0: ('CS', '1', "Smoking Status", '', 'SmokingStatus'), + 0x001021B0: ('LT', '1', "Additional Patient History", '', 'AdditionalPatientHistory'), + 0x001021C0: ('US', '1', "Pregnancy Status", '', 'PregnancyStatus'), + 0x001021D0: ('DA', '1', "Last Menstrual Date", '', 'LastMenstrualDate'), + 0x001021F0: ('LO', '1', "Patient's Religious Preference", '', 'PatientReligiousPreference'), + 0x00102201: ('LO', '1', "Patient Species Description", '', 'PatientSpeciesDescription'), + 0x00102202: ('SQ', '1', "Patient Species Code Sequence", '', 'PatientSpeciesCodeSequence'), + 0x00102203: ('CS', '1', "Patient's Sex Neutered", '', 'PatientSexNeutered'), + 0x00102210: ('CS', '1', "Anatomical Orientation Type", '', 'AnatomicalOrientationType'), + 0x00102292: ('LO', '1', "Patient Breed Description", '', 'PatientBreedDescription'), + 0x00102293: ('SQ', '1', "Patient Breed Code Sequence", '', 'PatientBreedCodeSequence'), + 0x00102294: ('SQ', '1', "Breed Registration Sequence", '', 'BreedRegistrationSequence'), + 0x00102295: ('LO', '1', "Breed Registration Number", '', 'BreedRegistrationNumber'), + 0x00102296: ('SQ', '1', "Breed Registry Code Sequence", '', 'BreedRegistryCodeSequence'), + 0x00102297: ('PN', '1', "Responsible Person", '', 'ResponsiblePerson'), + 0x00102298: ('CS', '1', "Responsible Person Role", '', 'ResponsiblePersonRole'), + 0x00102299: ('LO', '1', "Responsible Organization", '', 'ResponsibleOrganization'), + 0x00104000: ('LT', '1', "Patient Comments", '', 'PatientComments'), + 0x00109431: ('FL', '1', "Examined Body Thickness", '', 'ExaminedBodyThickness'), + 0x00120010: ('LO', '1', "Clinical Trial Sponsor Name", '', 'ClinicalTrialSponsorName'), + 0x00120020: ('LO', '1', "Clinical Trial Protocol ID", '', 'ClinicalTrialProtocolID'), + 0x00120021: ('LO', '1', "Clinical Trial Protocol Name", '', 'ClinicalTrialProtocolName'), + 0x00120030: ('LO', '1', "Clinical Trial Site ID", '', 'ClinicalTrialSiteID'), + 0x00120031: ('LO', '1', "Clinical Trial Site Name", '', 'ClinicalTrialSiteName'), + 0x00120040: ('LO', '1', "Clinical Trial Subject ID", '', 'ClinicalTrialSubjectID'), + 0x00120042: ('LO', '1', "Clinical Trial Subject Reading ID", '', 'ClinicalTrialSubjectReadingID'), + 0x00120050: ('LO', '1', "Clinical Trial Time Point ID", '', 'ClinicalTrialTimePointID'), + 0x00120051: ('ST', '1', "Clinical Trial Time Point Description", '', 'ClinicalTrialTimePointDescription'), + 0x00120060: ('LO', '1', "Clinical Trial Coordinating Center Name", '', 'ClinicalTrialCoordinatingCenterName'), + 0x00120062: ('CS', '1', "Patient Identity Removed", '', 'PatientIdentityRemoved'), + 0x00120063: ('LO', '1-n', "De-identification Method", '', 'DeidentificationMethod'), + 0x00120064: ('SQ', '1', "De-identification Method Code Sequence", '', 'DeidentificationMethodCodeSequence'), + 0x00120071: ('LO', '1', "Clinical Trial Series ID", '', 'ClinicalTrialSeriesID'), + 0x00120072: ('LO', '1', "Clinical Trial Series Description", '', 'ClinicalTrialSeriesDescription'), + 0x00120081: ('LO', '1', "Clinical Trial Protocol Ethics Committee Name", '', 'ClinicalTrialProtocolEthicsCommitteeName'), + 0x00120082: ('LO', '1', "Clinical Trial Protocol Ethics Committee Approval Number", '', 'ClinicalTrialProtocolEthicsCommitteeApprovalNumber'), + 0x00120083: ('SQ', '1', "Consent for Clinical Trial Use Sequence", '', 'ConsentForClinicalTrialUseSequence'), + 0x00120084: ('CS', '1', "Distribution Type", '', 'DistributionType'), + 0x00120085: ('CS', '1', "Consent for Distribution Flag", '', 'ConsentForDistributionFlag'), + 0x00140023: ('ST', '1-n', "CAD File Format", 'Retired', 'CADFileFormat'), + 0x00140024: ('ST', '1-n', "Component Reference System", 'Retired', 'ComponentReferenceSystem'), + 0x00140025: ('ST', '1-n', "Component Manufacturing Procedure", '', 'ComponentManufacturingProcedure'), + 0x00140028: ('ST', '1-n', "Component Manufacturer", '', 'ComponentManufacturer'), + 0x00140030: ('DS', '1-n', "Material Thickness", '', 'MaterialThickness'), + 0x00140032: ('DS', '1-n', "Material Pipe Diameter", '', 'MaterialPipeDiameter'), + 0x00140034: ('DS', '1-n', "Material Isolation Diameter", '', 'MaterialIsolationDiameter'), + 0x00140042: ('ST', '1-n', "Material Grade", '', 'MaterialGrade'), + 0x00140044: ('ST', '1-n', "Material Properties Description", '', 'MaterialPropertiesDescription'), + 0x00140045: ('ST', '1-n', "Material Properties File Format (Retired)", 'Retired', 'MaterialPropertiesFileFormatRetired'), + 0x00140046: ('LT', '1', "Material Notes", '', 'MaterialNotes'), + 0x00140050: ('CS', '1', "Component Shape", '', 'ComponentShape'), + 0x00140052: ('CS', '1', "Curvature Type", '', 'CurvatureType'), + 0x00140054: ('DS', '1', "Outer Diameter", '', 'OuterDiameter'), + 0x00140056: ('DS', '1', "Inner Diameter", '', 'InnerDiameter'), + 0x00141010: ('ST', '1', "Actual Environmental Conditions", '', 'ActualEnvironmentalConditions'), + 0x00141020: ('DA', '1', "Expiry Date", '', 'ExpiryDate'), + 0x00141040: ('ST', '1', "Environmental Conditions", '', 'EnvironmentalConditions'), + 0x00142002: ('SQ', '1', "Evaluator Sequence", '', 'EvaluatorSequence'), + 0x00142004: ('IS', '1', "Evaluator Number", '', 'EvaluatorNumber'), + 0x00142006: ('PN', '1', "Evaluator Name", '', 'EvaluatorName'), + 0x00142008: ('IS', '1', "Evaluation Attempt", '', 'EvaluationAttempt'), + 0x00142012: ('SQ', '1', "Indication Sequence", '', 'IndicationSequence'), + 0x00142014: ('IS', '1', "Indication Number", '', 'IndicationNumber'), + 0x00142016: ('SH', '1', "Indication Label", '', 'IndicationLabel'), + 0x00142018: ('ST', '1', "Indication Description", '', 'IndicationDescription'), + 0x0014201A: ('CS', '1-n', "Indication Type", '', 'IndicationType'), + 0x0014201C: ('CS', '1', "Indication Disposition", '', 'IndicationDisposition'), + 0x0014201E: ('SQ', '1', "Indication ROI Sequence", '', 'IndicationROISequence'), + 0x00142030: ('SQ', '1', "Indication Physical Property Sequence", '', 'IndicationPhysicalPropertySequence'), + 0x00142032: ('SH', '1', "Property Label", '', 'PropertyLabel'), + 0x00142202: ('IS', '1', "Coordinate System Number of Axes", '', 'CoordinateSystemNumberOfAxes'), + 0x00142204: ('SQ', '1', "Coordinate System Axes Sequence", '', 'CoordinateSystemAxesSequence'), + 0x00142206: ('ST', '1', "Coordinate System Axis Description", '', 'CoordinateSystemAxisDescription'), + 0x00142208: ('CS', '1', "Coordinate System Data Set Mapping", '', 'CoordinateSystemDataSetMapping'), + 0x0014220A: ('IS', '1', "Coordinate System Axis Number", '', 'CoordinateSystemAxisNumber'), + 0x0014220C: ('CS', '1', "Coordinate System Axis Type", '', 'CoordinateSystemAxisType'), + 0x0014220E: ('CS', '1', "Coordinate System Axis Units", '', 'CoordinateSystemAxisUnits'), + 0x00142210: ('OB', '1', "Coordinate System Axis Values", '', 'CoordinateSystemAxisValues'), + 0x00142220: ('SQ', '1', "Coordinate System Transform Sequence", '', 'CoordinateSystemTransformSequence'), + 0x00142222: ('ST', '1', "Transform Description", '', 'TransformDescription'), + 0x00142224: ('IS', '1', "Transform Number of Axes", '', 'TransformNumberOfAxes'), + 0x00142226: ('IS', '1-n', "Transform Order of Axes", '', 'TransformOrderOfAxes'), + 0x00142228: ('CS', '1', "Transformed Axis Units", '', 'TransformedAxisUnits'), + 0x0014222A: ('DS', '1-n', "Coordinate System Transform Rotation and Scale Matrix", '', 'CoordinateSystemTransformRotationAndScaleMatrix'), + 0x0014222C: ('DS', '1-n', "Coordinate System Transform Translation Matrix", '', 'CoordinateSystemTransformTranslationMatrix'), + 0x00143011: ('DS', '1', "Internal Detector Frame Time", '', 'InternalDetectorFrameTime'), + 0x00143012: ('DS', '1', "Number of Frames Integrated", '', 'NumberOfFramesIntegrated'), + 0x00143020: ('SQ', '1', "Detector Temperature Sequence", '', 'DetectorTemperatureSequence'), + 0x00143022: ('ST', '1', "Sensor Name", '', 'SensorName'), + 0x00143024: ('DS', '1', "Horizontal Offset of Sensor", '', 'HorizontalOffsetOfSensor'), + 0x00143026: ('DS', '1', "Vertical Offset of Sensor", '', 'VerticalOffsetOfSensor'), + 0x00143028: ('DS', '1', "Sensor Temperature", '', 'SensorTemperature'), + 0x00143040: ('SQ', '1', "Dark Current Sequence", '', 'DarkCurrentSequence'), + 0x00143050: ('OB or OW', '1', "Dark Current Counts", '', 'DarkCurrentCounts'), + 0x00143060: ('SQ', '1', "Gain Correction Reference Sequence", '', 'GainCorrectionReferenceSequence'), + 0x00143070: ('OB or OW', '1', "Air Counts", '', 'AirCounts'), + 0x00143071: ('DS', '1', "KV Used in Gain Calibration", '', 'KVUsedInGainCalibration'), + 0x00143072: ('DS', '1', "MA Used in Gain Calibration", '', 'MAUsedInGainCalibration'), + 0x00143073: ('DS', '1', "Number of Frames Used for Integration", '', 'NumberOfFramesUsedForIntegration'), + 0x00143074: ('LO', '1', "Filter Material Used in Gain Calibration", '', 'FilterMaterialUsedInGainCalibration'), + 0x00143075: ('DS', '1', "Filter Thickness Used in Gain Calibration", '', 'FilterThicknessUsedInGainCalibration'), + 0x00143076: ('DA', '1', "Date of Gain Calibration", '', 'DateOfGainCalibration'), + 0x00143077: ('TM', '1', "Time of Gain Calibration", '', 'TimeOfGainCalibration'), + 0x00143080: ('OB', '1', "Bad Pixel Image", '', 'BadPixelImage'), + 0x00143099: ('LT', '1', "Calibration Notes", '', 'CalibrationNotes'), + 0x00144002: ('SQ', '1', "Pulser Equipment Sequence", '', 'PulserEquipmentSequence'), + 0x00144004: ('CS', '1', "Pulser Type", '', 'PulserType'), + 0x00144006: ('LT', '1', "Pulser Notes", '', 'PulserNotes'), + 0x00144008: ('SQ', '1', "Receiver Equipment Sequence", '', 'ReceiverEquipmentSequence'), + 0x0014400A: ('CS', '1', "Amplifier Type", '', 'AmplifierType'), + 0x0014400C: ('LT', '1', "Receiver Notes", '', 'ReceiverNotes'), + 0x0014400E: ('SQ', '1', "Pre-Amplifier Equipment Sequence", '', 'PreAmplifierEquipmentSequence'), + 0x0014400F: ('LT', '1', "Pre-Amplifier Notes", '', 'PreAmplifierNotes'), + 0x00144010: ('SQ', '1', "Transmit Transducer Sequence", '', 'TransmitTransducerSequence'), + 0x00144011: ('SQ', '1', "Receive Transducer Sequence", '', 'ReceiveTransducerSequence'), + 0x00144012: ('US', '1', "Number of Elements", '', 'NumberOfElements'), + 0x00144013: ('CS', '1', "Element Shape", '', 'ElementShape'), + 0x00144014: ('DS', '1', "Element Dimension A", '', 'ElementDimensionA'), + 0x00144015: ('DS', '1', "Element Dimension B", '', 'ElementDimensionB'), + 0x00144016: ('DS', '1', "Element Pitch A", '', 'ElementPitchA'), + 0x00144017: ('DS', '1', "Measured Beam Dimension A", '', 'MeasuredBeamDimensionA'), + 0x00144018: ('DS', '1', "Measured Beam Dimension B", '', 'MeasuredBeamDimensionB'), + 0x00144019: ('DS', '1', "Location of Measured Beam Diameter", '', 'LocationOfMeasuredBeamDiameter'), + 0x0014401A: ('DS', '1', "Nominal Frequency", '', 'NominalFrequency'), + 0x0014401B: ('DS', '1', "Measured Center Frequency", '', 'MeasuredCenterFrequency'), + 0x0014401C: ('DS', '1', "Measured Bandwidth", '', 'MeasuredBandwidth'), + 0x0014401D: ('DS', '1', "Element Pitch B", '', 'ElementPitchB'), + 0x00144020: ('SQ', '1', "Pulser Settings Sequence", '', 'PulserSettingsSequence'), + 0x00144022: ('DS', '1', "Pulse Width", '', 'PulseWidth'), + 0x00144024: ('DS', '1', "Excitation Frequency", '', 'ExcitationFrequency'), + 0x00144026: ('CS', '1', "Modulation Type", '', 'ModulationType'), + 0x00144028: ('DS', '1', "Damping", '', 'Damping'), + 0x00144030: ('SQ', '1', "Receiver Settings Sequence", '', 'ReceiverSettingsSequence'), + 0x00144031: ('DS', '1', "Acquired Soundpath Length", '', 'AcquiredSoundpathLength'), + 0x00144032: ('CS', '1', "Acquisition Compression Type", '', 'AcquisitionCompressionType'), + 0x00144033: ('IS', '1', "Acquisition Sample Size", '', 'AcquisitionSampleSize'), + 0x00144034: ('DS', '1', "Rectifier Smoothing", '', 'RectifierSmoothing'), + 0x00144035: ('SQ', '1', "DAC Sequence", '', 'DACSequence'), + 0x00144036: ('CS', '1', "DAC Type", '', 'DACType'), + 0x00144038: ('DS', '1-n', "DAC Gain Points", '', 'DACGainPoints'), + 0x0014403A: ('DS', '1-n', "DAC Time Points", '', 'DACTimePoints'), + 0x0014403C: ('DS', '1-n', "DAC Amplitude", '', 'DACAmplitude'), + 0x00144040: ('SQ', '1', "Pre-Amplifier Settings Sequence", '', 'PreAmplifierSettingsSequence'), + 0x00144050: ('SQ', '1', "Transmit Transducer Settings Sequence", '', 'TransmitTransducerSettingsSequence'), + 0x00144051: ('SQ', '1', "Receive Transducer Settings Sequence", '', 'ReceiveTransducerSettingsSequence'), + 0x00144052: ('DS', '1', "Incident Angle", '', 'IncidentAngle'), + 0x00144054: ('ST', '1', "Coupling Technique", '', 'CouplingTechnique'), + 0x00144056: ('ST', '1', "Coupling Medium", '', 'CouplingMedium'), + 0x00144057: ('DS', '1', "Coupling Velocity", '', 'CouplingVelocity'), + 0x00144058: ('DS', '1', "Probe Center Location X", '', 'ProbeCenterLocationX'), + 0x00144059: ('DS', '1', "Probe Center Location Z", '', 'ProbeCenterLocationZ'), + 0x0014405A: ('DS', '1', "Sound Path Length", '', 'SoundPathLength'), + 0x0014405C: ('ST', '1', "Delay Law Identifier", '', 'DelayLawIdentifier'), + 0x00144060: ('SQ', '1', "Gate Settings Sequence", '', 'GateSettingsSequence'), + 0x00144062: ('DS', '1', "Gate Threshold", '', 'GateThreshold'), + 0x00144064: ('DS', '1', "Velocity of Sound", '', 'VelocityOfSound'), + 0x00144070: ('SQ', '1', "Calibration Settings Sequence", '', 'CalibrationSettingsSequence'), + 0x00144072: ('ST', '1', "Calibration Procedure", '', 'CalibrationProcedure'), + 0x00144074: ('SH', '1', "Procedure Version", '', 'ProcedureVersion'), + 0x00144076: ('DA', '1', "Procedure Creation Date", '', 'ProcedureCreationDate'), + 0x00144078: ('DA', '1', "Procedure Expiration Date", '', 'ProcedureExpirationDate'), + 0x0014407A: ('DA', '1', "Procedure Last Modified Date", '', 'ProcedureLastModifiedDate'), + 0x0014407C: ('TM', '1-n', "Calibration Time", '', 'CalibrationTime'), + 0x0014407E: ('DA', '1-n', "Calibration Date", '', 'CalibrationDate'), + 0x00144080: ('SQ', '1', "Probe Drive Equipment Sequence", '', 'ProbeDriveEquipmentSequence'), + 0x00144081: ('CS', '1', "Drive Type", '', 'DriveType'), + 0x00144082: ('LT', '1', "Probe Drive Notes", '', 'ProbeDriveNotes'), + 0x00144083: ('SQ', '1', "Drive Probe Sequence", '', 'DriveProbeSequence'), + 0x00144084: ('DS', '1', "Probe Inductance", '', 'ProbeInductance'), + 0x00144085: ('DS', '1', "Probe Resistance", '', 'ProbeResistance'), + 0x00144086: ('SQ', '1', "Receive Probe Sequence", '', 'ReceiveProbeSequence'), + 0x00144087: ('SQ', '1', "Probe Drive Settings Sequence", '', 'ProbeDriveSettingsSequence'), + 0x00144088: ('DS', '1', "Bridge Resistors", '', 'BridgeResistors'), + 0x00144089: ('DS', '1', "Probe Orientation Angle", '', 'ProbeOrientationAngle'), + 0x0014408B: ('DS', '1', "User Selected Gain Y", '', 'UserSelectedGainY'), + 0x0014408C: ('DS', '1', "User Selected Phase", '', 'UserSelectedPhase'), + 0x0014408D: ('DS', '1', "User Selected Offset X", '', 'UserSelectedOffsetX'), + 0x0014408E: ('DS', '1', "User Selected Offset Y", '', 'UserSelectedOffsetY'), + 0x00144091: ('SQ', '1', "Channel Settings Sequence", '', 'ChannelSettingsSequence'), + 0x00144092: ('DS', '1', "Channel Threshold", '', 'ChannelThreshold'), + 0x0014409A: ('SQ', '1', "Scanner Settings Sequence", '', 'ScannerSettingsSequence'), + 0x0014409B: ('ST', '1', "Scan Procedure", '', 'ScanProcedure'), + 0x0014409C: ('DS', '1', "Translation Rate X", '', 'TranslationRateX'), + 0x0014409D: ('DS', '1', "Translation Rate Y", '', 'TranslationRateY'), + 0x0014409F: ('DS', '1', "Channel Overlap", '', 'ChannelOverlap'), + 0x001440A0: ('LO', '1', "Image Quality Indicator Type", '', 'ImageQualityIndicatorType'), + 0x001440A1: ('LO', '1', "Image Quality Indicator Material", '', 'ImageQualityIndicatorMaterial'), + 0x001440A2: ('LO', '1', "Image Quality Indicator Size", '', 'ImageQualityIndicatorSize'), + 0x00145002: ('IS', '1', "LINAC Energy", '', 'LINACEnergy'), + 0x00145004: ('IS', '1', "LINAC Output", '', 'LINACOutput'), + 0x00180010: ('LO', '1', "Contrast/Bolus Agent", '', 'ContrastBolusAgent'), + 0x00180012: ('SQ', '1', "Contrast/Bolus Agent Sequence", '', 'ContrastBolusAgentSequence'), + 0x00180014: ('SQ', '1', "Contrast/Bolus Administration Route Sequence", '', 'ContrastBolusAdministrationRouteSequence'), + 0x00180015: ('CS', '1', "Body Part Examined", '', 'BodyPartExamined'), + 0x00180020: ('CS', '1-n', "Scanning Sequence", '', 'ScanningSequence'), + 0x00180021: ('CS', '1-n', "Sequence Variant", '', 'SequenceVariant'), + 0x00180022: ('CS', '1-n', "Scan Options", '', 'ScanOptions'), + 0x00180023: ('CS', '1', "MR Acquisition Type", '', 'MRAcquisitionType'), + 0x00180024: ('SH', '1', "Sequence Name", '', 'SequenceName'), + 0x00180025: ('CS', '1', "Angio Flag", '', 'AngioFlag'), + 0x00180026: ('SQ', '1', "Intervention Drug Information Sequence", '', 'InterventionDrugInformationSequence'), + 0x00180027: ('TM', '1', "Intervention Drug Stop Time", '', 'InterventionDrugStopTime'), + 0x00180028: ('DS', '1', "Intervention Drug Dose", '', 'InterventionDrugDose'), + 0x00180029: ('SQ', '1', "Intervention Drug Code Sequence", '', 'InterventionDrugCodeSequence'), + 0x0018002A: ('SQ', '1', "Additional Drug Sequence", '', 'AdditionalDrugSequence'), + 0x00180030: ('LO', '1-n', "Radionuclide", 'Retired', 'Radionuclide'), + 0x00180031: ('LO', '1', "Radiopharmaceutical", '', 'Radiopharmaceutical'), + 0x00180032: ('DS', '1', "Energy Window Centerline", 'Retired', 'EnergyWindowCenterline'), + 0x00180033: ('DS', '1-n', "Energy Window Total Width", 'Retired', 'EnergyWindowTotalWidth'), + 0x00180034: ('LO', '1', "Intervention Drug Name", '', 'InterventionDrugName'), + 0x00180035: ('TM', '1', "Intervention Drug Start Time", '', 'InterventionDrugStartTime'), + 0x00180036: ('SQ', '1', "Intervention Sequence", '', 'InterventionSequence'), + 0x00180037: ('CS', '1', "Therapy Type", 'Retired', 'TherapyType'), + 0x00180038: ('CS', '1', "Intervention Status", '', 'InterventionStatus'), + 0x00180039: ('CS', '1', "Therapy Description", 'Retired', 'TherapyDescription'), + 0x0018003A: ('ST', '1', "Intervention Description", '', 'InterventionDescription'), + 0x00180040: ('IS', '1', "Cine Rate", '', 'CineRate'), + 0x00180042: ('CS', '1', "Initial Cine Run State", '', 'InitialCineRunState'), + 0x00180050: ('DS', '1', "Slice Thickness", '', 'SliceThickness'), + 0x00180060: ('DS', '1', "KVP", '', 'KVP'), + 0x00180070: ('IS', '1', "Counts Accumulated", '', 'CountsAccumulated'), + 0x00180071: ('CS', '1', "Acquisition Termination Condition", '', 'AcquisitionTerminationCondition'), + 0x00180072: ('DS', '1', "Effective Duration", '', 'EffectiveDuration'), + 0x00180073: ('CS', '1', "Acquisition Start Condition", '', 'AcquisitionStartCondition'), + 0x00180074: ('IS', '1', "Acquisition Start Condition Data", '', 'AcquisitionStartConditionData'), + 0x00180075: ('IS', '1', "Acquisition Termination Condition Data", '', 'AcquisitionTerminationConditionData'), + 0x00180080: ('DS', '1', "Repetition Time", '', 'RepetitionTime'), + 0x00180081: ('DS', '1', "Echo Time", '', 'EchoTime'), + 0x00180082: ('DS', '1', "Inversion Time", '', 'InversionTime'), + 0x00180083: ('DS', '1', "Number of Averages", '', 'NumberOfAverages'), + 0x00180084: ('DS', '1', "Imaging Frequency", '', 'ImagingFrequency'), + 0x00180085: ('SH', '1', "Imaged Nucleus", '', 'ImagedNucleus'), + 0x00180086: ('IS', '1-n', "Echo Number(s)", '', 'EchoNumbers'), + 0x00180087: ('DS', '1', "Magnetic Field Strength", '', 'MagneticFieldStrength'), + 0x00180088: ('DS', '1', "Spacing Between Slices", '', 'SpacingBetweenSlices'), + 0x00180089: ('IS', '1', "Number of Phase Encoding Steps", '', 'NumberOfPhaseEncodingSteps'), + 0x00180090: ('DS', '1', "Data Collection Diameter", '', 'DataCollectionDiameter'), + 0x00180091: ('IS', '1', "Echo Train Length", '', 'EchoTrainLength'), + 0x00180093: ('DS', '1', "Percent Sampling", '', 'PercentSampling'), + 0x00180094: ('DS', '1', "Percent Phase Field of View", '', 'PercentPhaseFieldOfView'), + 0x00180095: ('DS', '1', "Pixel Bandwidth", '', 'PixelBandwidth'), + 0x00181000: ('LO', '1', "Device Serial Number", '', 'DeviceSerialNumber'), + 0x00181002: ('UI', '1', "Device UID", '', 'DeviceUID'), + 0x00181003: ('LO', '1', "Device ID", '', 'DeviceID'), + 0x00181004: ('LO', '1', "Plate ID", '', 'PlateID'), + 0x00181005: ('LO', '1', "Generator ID", '', 'GeneratorID'), + 0x00181006: ('LO', '1', "Grid ID", '', 'GridID'), + 0x00181007: ('LO', '1', "Cassette ID", '', 'CassetteID'), + 0x00181008: ('LO', '1', "Gantry ID", '', 'GantryID'), + 0x00181010: ('LO', '1', "Secondary Capture Device ID", '', 'SecondaryCaptureDeviceID'), + 0x00181011: ('LO', '1', "Hardcopy Creation Device ID", 'Retired', 'HardcopyCreationDeviceID'), + 0x00181012: ('DA', '1', "Date of Secondary Capture", '', 'DateOfSecondaryCapture'), + 0x00181014: ('TM', '1', "Time of Secondary Capture", '', 'TimeOfSecondaryCapture'), + 0x00181016: ('LO', '1', "Secondary Capture Device Manufacturer", '', 'SecondaryCaptureDeviceManufacturer'), + 0x00181017: ('LO', '1', "Hardcopy Device Manufacturer", 'Retired', 'HardcopyDeviceManufacturer'), + 0x00181018: ('LO', '1', "Secondary Capture Device Manufacturer's Model Name", '', 'SecondaryCaptureDeviceManufacturerModelName'), + 0x00181019: ('LO', '1-n', "Secondary Capture Device Software Versions", '', 'SecondaryCaptureDeviceSoftwareVersions'), + 0x0018101A: ('LO', '1-n', "Hardcopy Device Software Version", 'Retired', 'HardcopyDeviceSoftwareVersion'), + 0x0018101B: ('LO', '1', "Hardcopy Device Manufacturer's Model Name", 'Retired', 'HardcopyDeviceManufacturerModelName'), + 0x00181020: ('LO', '1-n', "Software Version(s)", '', 'SoftwareVersions'), + 0x00181022: ('SH', '1', "Video Image Format Acquired", '', 'VideoImageFormatAcquired'), + 0x00181023: ('LO', '1', "Digital Image Format Acquired", '', 'DigitalImageFormatAcquired'), + 0x00181030: ('LO', '1', "Protocol Name", '', 'ProtocolName'), + 0x00181040: ('LO', '1', "Contrast/Bolus Route", '', 'ContrastBolusRoute'), + 0x00181041: ('DS', '1', "Contrast/Bolus Volume", '', 'ContrastBolusVolume'), + 0x00181042: ('TM', '1', "Contrast/Bolus Start Time", '', 'ContrastBolusStartTime'), + 0x00181043: ('TM', '1', "Contrast/Bolus Stop Time", '', 'ContrastBolusStopTime'), + 0x00181044: ('DS', '1', "Contrast/Bolus Total Dose", '', 'ContrastBolusTotalDose'), + 0x00181045: ('IS', '1', "Syringe Counts", '', 'SyringeCounts'), + 0x00181046: ('DS', '1-n', "Contrast Flow Rate", '', 'ContrastFlowRate'), + 0x00181047: ('DS', '1-n', "Contrast Flow Duration", '', 'ContrastFlowDuration'), + 0x00181048: ('CS', '1', "Contrast/Bolus Ingredient", '', 'ContrastBolusIngredient'), + 0x00181049: ('DS', '1', "Contrast/Bolus Ingredient Concentration", '', 'ContrastBolusIngredientConcentration'), + 0x00181050: ('DS', '1', "Spatial Resolution", '', 'SpatialResolution'), + 0x00181060: ('DS', '1', "Trigger Time", '', 'TriggerTime'), + 0x00181061: ('LO', '1', "Trigger Source or Type", '', 'TriggerSourceOrType'), + 0x00181062: ('IS', '1', "Nominal Interval", '', 'NominalInterval'), + 0x00181063: ('DS', '1', "Frame Time", '', 'FrameTime'), + 0x00181064: ('LO', '1', "Cardiac Framing Type", '', 'CardiacFramingType'), + 0x00181065: ('DS', '1-n', "Frame Time Vector", '', 'FrameTimeVector'), + 0x00181066: ('DS', '1', "Frame Delay", '', 'FrameDelay'), + 0x00181067: ('DS', '1', "Image Trigger Delay", '', 'ImageTriggerDelay'), + 0x00181068: ('DS', '1', "Multiplex Group Time Offset", '', 'MultiplexGroupTimeOffset'), + 0x00181069: ('DS', '1', "Trigger Time Offset", '', 'TriggerTimeOffset'), + 0x0018106A: ('CS', '1', "Synchronization Trigger", '', 'SynchronizationTrigger'), + 0x0018106C: ('US', '2', "Synchronization Channel", '', 'SynchronizationChannel'), + 0x0018106E: ('UL', '1', "Trigger Sample Position", '', 'TriggerSamplePosition'), + 0x00181070: ('LO', '1', "Radiopharmaceutical Route", '', 'RadiopharmaceuticalRoute'), + 0x00181071: ('DS', '1', "Radiopharmaceutical Volume", '', 'RadiopharmaceuticalVolume'), + 0x00181072: ('TM', '1', "Radiopharmaceutical Start Time", '', 'RadiopharmaceuticalStartTime'), + 0x00181073: ('TM', '1', "Radiopharmaceutical Stop Time", '', 'RadiopharmaceuticalStopTime'), + 0x00181074: ('DS', '1', "Radionuclide Total Dose", '', 'RadionuclideTotalDose'), + 0x00181075: ('DS', '1', "Radionuclide Half Life", '', 'RadionuclideHalfLife'), + 0x00181076: ('DS', '1', "Radionuclide Positron Fraction", '', 'RadionuclidePositronFraction'), + 0x00181077: ('DS', '1', "Radiopharmaceutical Specific Activity", '', 'RadiopharmaceuticalSpecificActivity'), + 0x00181078: ('DT', '1', "Radiopharmaceutical Start DateTime", '', 'RadiopharmaceuticalStartDateTime'), + 0x00181079: ('DT', '1', "Radiopharmaceutical Stop DateTime", '', 'RadiopharmaceuticalStopDateTime'), + 0x00181080: ('CS', '1', "Beat Rejection Flag", '', 'BeatRejectionFlag'), + 0x00181081: ('IS', '1', "Low R-R Value", '', 'LowRRValue'), + 0x00181082: ('IS', '1', "High R-R Value", '', 'HighRRValue'), + 0x00181083: ('IS', '1', "Intervals Acquired", '', 'IntervalsAcquired'), + 0x00181084: ('IS', '1', "Intervals Rejected", '', 'IntervalsRejected'), + 0x00181085: ('LO', '1', "PVC Rejection", '', 'PVCRejection'), + 0x00181086: ('IS', '1', "Skip Beats", '', 'SkipBeats'), + 0x00181088: ('IS', '1', "Heart Rate", '', 'HeartRate'), + 0x00181090: ('IS', '1', "Cardiac Number of Images", '', 'CardiacNumberOfImages'), + 0x00181094: ('IS', '1', "Trigger Window", '', 'TriggerWindow'), + 0x00181100: ('DS', '1', "Reconstruction Diameter", '', 'ReconstructionDiameter'), + 0x00181110: ('DS', '1', "Distance Source to Detector", '', 'DistanceSourceToDetector'), + 0x00181111: ('DS', '1', "Distance Source to Patient", '', 'DistanceSourceToPatient'), + 0x00181114: ('DS', '1', "Estimated Radiographic Magnification Factor", '', 'EstimatedRadiographicMagnificationFactor'), + 0x00181120: ('DS', '1', "Gantry/Detector Tilt", '', 'GantryDetectorTilt'), + 0x00181121: ('DS', '1', "Gantry/Detector Slew", '', 'GantryDetectorSlew'), + 0x00181130: ('DS', '1', "Table Height", '', 'TableHeight'), + 0x00181131: ('DS', '1', "Table Traverse", '', 'TableTraverse'), + 0x00181134: ('CS', '1', "Table Motion", '', 'TableMotion'), + 0x00181135: ('DS', '1-n', "Table Vertical Increment", '', 'TableVerticalIncrement'), + 0x00181136: ('DS', '1-n', "Table Lateral Increment", '', 'TableLateralIncrement'), + 0x00181137: ('DS', '1-n', "Table Longitudinal Increment", '', 'TableLongitudinalIncrement'), + 0x00181138: ('DS', '1', "Table Angle", '', 'TableAngle'), + 0x0018113A: ('CS', '1', "Table Type", '', 'TableType'), + 0x00181140: ('CS', '1', "Rotation Direction", '', 'RotationDirection'), + 0x00181141: ('DS', '1', "Angular Position", 'Retired', 'AngularPosition'), + 0x00181142: ('DS', '1-n', "Radial Position", '', 'RadialPosition'), + 0x00181143: ('DS', '1', "Scan Arc", '', 'ScanArc'), + 0x00181144: ('DS', '1', "Angular Step", '', 'AngularStep'), + 0x00181145: ('DS', '1', "Center of Rotation Offset", '', 'CenterOfRotationOffset'), + 0x00181146: ('DS', '1-n', "Rotation Offset", 'Retired', 'RotationOffset'), + 0x00181147: ('CS', '1', "Field of View Shape", '', 'FieldOfViewShape'), + 0x00181149: ('IS', '1-2', "Field of View Dimension(s)", '', 'FieldOfViewDimensions'), + 0x00181150: ('IS', '1', "Exposure Time", '', 'ExposureTime'), + 0x00181151: ('IS', '1', "X-Ray Tube Current", '', 'XRayTubeCurrent'), + 0x00181152: ('IS', '1', "Exposure", '', 'Exposure'), + 0x00181153: ('IS', '1', "Exposure in uAs", '', 'ExposureInuAs'), + 0x00181154: ('DS', '1', "Average Pulse Width", '', 'AveragePulseWidth'), + 0x00181155: ('CS', '1', "Radiation Setting", '', 'RadiationSetting'), + 0x00181156: ('CS', '1', "Rectification Type", '', 'RectificationType'), + 0x0018115A: ('CS', '1', "Radiation Mode", '', 'RadiationMode'), + 0x0018115E: ('DS', '1', "Image and Fluoroscopy Area Dose Product", '', 'ImageAndFluoroscopyAreaDoseProduct'), + 0x00181160: ('SH', '1', "Filter Type", '', 'FilterType'), + 0x00181161: ('LO', '1-n', "Type of Filters", '', 'TypeOfFilters'), + 0x00181162: ('DS', '1', "Intensifier Size", '', 'IntensifierSize'), + 0x00181164: ('DS', '2', "Imager Pixel Spacing", '', 'ImagerPixelSpacing'), + 0x00181166: ('CS', '1-n', "Grid", '', 'Grid'), + 0x00181170: ('IS', '1', "Generator Power", '', 'GeneratorPower'), + 0x00181180: ('SH', '1', "Collimator/grid Name", '', 'CollimatorGridName'), + 0x00181181: ('CS', '1', "Collimator Type", '', 'CollimatorType'), + 0x00181182: ('IS', '1-2', "Focal Distance", '', 'FocalDistance'), + 0x00181183: ('DS', '1-2', "X Focus Center", '', 'XFocusCenter'), + 0x00181184: ('DS', '1-2', "Y Focus Center", '', 'YFocusCenter'), + 0x00181190: ('DS', '1-n', "Focal Spot(s)", '', 'FocalSpots'), + 0x00181191: ('CS', '1', "Anode Target Material", '', 'AnodeTargetMaterial'), + 0x001811A0: ('DS', '1', "Body Part Thickness", '', 'BodyPartThickness'), + 0x001811A2: ('DS', '1', "Compression Force", '', 'CompressionForce'), + 0x001811A4: ('LO', '1', "Paddle Description", '', 'PaddleDescription'), + 0x00181200: ('DA', '1-n', "Date of Last Calibration", '', 'DateOfLastCalibration'), + 0x00181201: ('TM', '1-n', "Time of Last Calibration", '', 'TimeOfLastCalibration'), + 0x00181210: ('SH', '1-n', "Convolution Kernel", '', 'ConvolutionKernel'), + 0x00181240: ('IS', '1-n', "Upper/Lower Pixel Values", 'Retired', 'UpperLowerPixelValues'), + 0x00181242: ('IS', '1', "Actual Frame Duration", '', 'ActualFrameDuration'), + 0x00181243: ('IS', '1', "Count Rate", '', 'CountRate'), + 0x00181244: ('US', '1', "Preferred Playback Sequencing", '', 'PreferredPlaybackSequencing'), + 0x00181250: ('SH', '1', "Receive Coil Name", '', 'ReceiveCoilName'), + 0x00181251: ('SH', '1', "Transmit Coil Name", '', 'TransmitCoilName'), + 0x00181260: ('SH', '1', "Plate Type", '', 'PlateType'), + 0x00181261: ('LO', '1', "Phosphor Type", '', 'PhosphorType'), + 0x00181300: ('DS', '1', "Scan Velocity", '', 'ScanVelocity'), + 0x00181301: ('CS', '1-n', "Whole Body Technique", '', 'WholeBodyTechnique'), + 0x00181302: ('IS', '1', "Scan Length", '', 'ScanLength'), + 0x00181310: ('US', '4', "Acquisition Matrix", '', 'AcquisitionMatrix'), + 0x00181312: ('CS', '1', "In-plane Phase Encoding Direction", '', 'InPlanePhaseEncodingDirection'), + 0x00181314: ('DS', '1', "Flip Angle", '', 'FlipAngle'), + 0x00181315: ('CS', '1', "Variable Flip Angle Flag", '', 'VariableFlipAngleFlag'), + 0x00181316: ('DS', '1', "SAR", '', 'SAR'), + 0x00181318: ('DS', '1', "dB/dt", '', 'dBdt'), + 0x00181400: ('LO', '1', "Acquisition Device Processing Description", '', 'AcquisitionDeviceProcessingDescription'), + 0x00181401: ('LO', '1', "Acquisition Device Processing Code", '', 'AcquisitionDeviceProcessingCode'), + 0x00181402: ('CS', '1', "Cassette Orientation", '', 'CassetteOrientation'), + 0x00181403: ('CS', '1', "Cassette Size", '', 'CassetteSize'), + 0x00181404: ('US', '1', "Exposures on Plate", '', 'ExposuresOnPlate'), + 0x00181405: ('IS', '1', "Relative X-Ray Exposure", '', 'RelativeXRayExposure'), + 0x00181411: ('DS', '1', "Exposure Index", '', 'ExposureIndex'), + 0x00181412: ('DS', '1', "Target Exposure Index", '', 'TargetExposureIndex'), + 0x00181413: ('DS', '1', "Deviation Index", '', 'DeviationIndex'), + 0x00181450: ('DS', '1', "Column Angulation", '', 'ColumnAngulation'), + 0x00181460: ('DS', '1', "Tomo Layer Height", '', 'TomoLayerHeight'), + 0x00181470: ('DS', '1', "Tomo Angle", '', 'TomoAngle'), + 0x00181480: ('DS', '1', "Tomo Time", '', 'TomoTime'), + 0x00181490: ('CS', '1', "Tomo Type", '', 'TomoType'), + 0x00181491: ('CS', '1', "Tomo Class", '', 'TomoClass'), + 0x00181495: ('IS', '1', "Number of Tomosynthesis Source Images", '', 'NumberOfTomosynthesisSourceImages'), + 0x00181500: ('CS', '1', "Positioner Motion", '', 'PositionerMotion'), + 0x00181508: ('CS', '1', "Positioner Type", '', 'PositionerType'), + 0x00181510: ('DS', '1', "Positioner Primary Angle", '', 'PositionerPrimaryAngle'), + 0x00181511: ('DS', '1', "Positioner Secondary Angle", '', 'PositionerSecondaryAngle'), + 0x00181520: ('DS', '1-n', "Positioner Primary Angle Increment", '', 'PositionerPrimaryAngleIncrement'), + 0x00181521: ('DS', '1-n', "Positioner Secondary Angle Increment", '', 'PositionerSecondaryAngleIncrement'), + 0x00181530: ('DS', '1', "Detector Primary Angle", '', 'DetectorPrimaryAngle'), + 0x00181531: ('DS', '1', "Detector Secondary Angle", '', 'DetectorSecondaryAngle'), + 0x00181600: ('CS', '1-3', "Shutter Shape", '', 'ShutterShape'), + 0x00181602: ('IS', '1', "Shutter Left Vertical Edge", '', 'ShutterLeftVerticalEdge'), + 0x00181604: ('IS', '1', "Shutter Right Vertical Edge", '', 'ShutterRightVerticalEdge'), + 0x00181606: ('IS', '1', "Shutter Upper Horizontal Edge", '', 'ShutterUpperHorizontalEdge'), + 0x00181608: ('IS', '1', "Shutter Lower Horizontal Edge", '', 'ShutterLowerHorizontalEdge'), + 0x00181610: ('IS', '2', "Center of Circular Shutter", '', 'CenterOfCircularShutter'), + 0x00181612: ('IS', '1', "Radius of Circular Shutter", '', 'RadiusOfCircularShutter'), + 0x00181620: ('IS', '2-2n', "Vertices of the Polygonal Shutter", '', 'VerticesOfThePolygonalShutter'), + 0x00181622: ('US', '1', "Shutter Presentation Value", '', 'ShutterPresentationValue'), + 0x00181623: ('US', '1', "Shutter Overlay Group", '', 'ShutterOverlayGroup'), + 0x00181624: ('US', '3', "Shutter Presentation Color CIELab Value", '', 'ShutterPresentationColorCIELabValue'), + 0x00181700: ('CS', '1-3', "Collimator Shape", '', 'CollimatorShape'), + 0x00181702: ('IS', '1', "Collimator Left Vertical Edge", '', 'CollimatorLeftVerticalEdge'), + 0x00181704: ('IS', '1', "Collimator Right Vertical Edge", '', 'CollimatorRightVerticalEdge'), + 0x00181706: ('IS', '1', "Collimator Upper Horizontal Edge", '', 'CollimatorUpperHorizontalEdge'), + 0x00181708: ('IS', '1', "Collimator Lower Horizontal Edge", '', 'CollimatorLowerHorizontalEdge'), + 0x00181710: ('IS', '2', "Center of Circular Collimator", '', 'CenterOfCircularCollimator'), + 0x00181712: ('IS', '1', "Radius of Circular Collimator", '', 'RadiusOfCircularCollimator'), + 0x00181720: ('IS', '2-2n', "Vertices of the Polygonal Collimator", '', 'VerticesOfThePolygonalCollimator'), + 0x00181800: ('CS', '1', "Acquisition Time Synchronized", '', 'AcquisitionTimeSynchronized'), + 0x00181801: ('SH', '1', "Time Source", '', 'TimeSource'), + 0x00181802: ('CS', '1', "Time Distribution Protocol", '', 'TimeDistributionProtocol'), + 0x00181803: ('LO', '1', "NTP Source Address", '', 'NTPSourceAddress'), + 0x00182001: ('IS', '1-n', "Page Number Vector", '', 'PageNumberVector'), + 0x00182002: ('SH', '1-n', "Frame Label Vector", '', 'FrameLabelVector'), + 0x00182003: ('DS', '1-n', "Frame Primary Angle Vector", '', 'FramePrimaryAngleVector'), + 0x00182004: ('DS', '1-n', "Frame Secondary Angle Vector", '', 'FrameSecondaryAngleVector'), + 0x00182005: ('DS', '1-n', "Slice Location Vector", '', 'SliceLocationVector'), + 0x00182006: ('SH', '1-n', "Display Window Label Vector", '', 'DisplayWindowLabelVector'), + 0x00182010: ('DS', '2', "Nominal Scanned Pixel Spacing", '', 'NominalScannedPixelSpacing'), + 0x00182020: ('CS', '1', "Digitizing Device Transport Direction", '', 'DigitizingDeviceTransportDirection'), + 0x00182030: ('DS', '1', "Rotation of Scanned Film", '', 'RotationOfScannedFilm'), + 0x00182041: ('SQ', '1', "Biopsy Target Sequence", '', 'BiopsyTargetSequence'), + 0x00182042: ('UI', '1', "Target UID", '', 'TargetUID'), + 0x00182043: ('FL', '2', "Localizing Cursor Position", '', 'LocalizingCursorPosition'), + 0x00182044: ('FL', '3', "Calculated Target Position", '', 'CalculatedTargetPosition'), + 0x00182045: ('SH', '1', "Target Label", '', 'TargetLabel'), + 0x00182046: ('FL', '1', "Displayed Z Value", '', 'DisplayedZValue'), + 0x00183100: ('CS', '1', "IVUS Acquisition", '', 'IVUSAcquisition'), + 0x00183101: ('DS', '1', "IVUS Pullback Rate", '', 'IVUSPullbackRate'), + 0x00183102: ('DS', '1', "IVUS Gated Rate", '', 'IVUSGatedRate'), + 0x00183103: ('IS', '1', "IVUS Pullback Start Frame Number", '', 'IVUSPullbackStartFrameNumber'), + 0x00183104: ('IS', '1', "IVUS Pullback Stop Frame Number", '', 'IVUSPullbackStopFrameNumber'), + 0x00183105: ('IS', '1-n', "Lesion Number", '', 'LesionNumber'), + 0x00184000: ('LT', '1', "Acquisition Comments", 'Retired', 'AcquisitionComments'), + 0x00185000: ('SH', '1-n', "Output Power", '', 'OutputPower'), + 0x00185010: ('LO', '1-n', "Transducer Data", '', 'TransducerData'), + 0x00185012: ('DS', '1', "Focus Depth", '', 'FocusDepth'), + 0x00185020: ('LO', '1', "Processing Function", '', 'ProcessingFunction'), + 0x00185021: ('LO', '1', "Postprocessing Function", 'Retired', 'PostprocessingFunction'), + 0x00185022: ('DS', '1', "Mechanical Index", '', 'MechanicalIndex'), + 0x00185024: ('DS', '1', "Bone Thermal Index", '', 'BoneThermalIndex'), + 0x00185026: ('DS', '1', "Cranial Thermal Index", '', 'CranialThermalIndex'), + 0x00185027: ('DS', '1', "Soft Tissue Thermal Index", '', 'SoftTissueThermalIndex'), + 0x00185028: ('DS', '1', "Soft Tissue-focus Thermal Index", '', 'SoftTissueFocusThermalIndex'), + 0x00185029: ('DS', '1', "Soft Tissue-surface Thermal Index", '', 'SoftTissueSurfaceThermalIndex'), + 0x00185030: ('DS', '1', "Dynamic Range", 'Retired', 'DynamicRange'), + 0x00185040: ('DS', '1', "Total Gain", 'Retired', 'TotalGain'), + 0x00185050: ('IS', '1', "Depth of Scan Field", '', 'DepthOfScanField'), + 0x00185100: ('CS', '1', "Patient Position", '', 'PatientPosition'), + 0x00185101: ('CS', '1', "View Position", '', 'ViewPosition'), + 0x00185104: ('SQ', '1', "Projection Eponymous Name Code Sequence", '', 'ProjectionEponymousNameCodeSequence'), + 0x00185210: ('DS', '6', "Image Transformation Matrix", 'Retired', 'ImageTransformationMatrix'), + 0x00185212: ('DS', '3', "Image Translation Vector", 'Retired', 'ImageTranslationVector'), + 0x00186000: ('DS', '1', "Sensitivity", '', 'Sensitivity'), + 0x00186011: ('SQ', '1', "Sequence of Ultrasound Regions", '', 'SequenceOfUltrasoundRegions'), + 0x00186012: ('US', '1', "Region Spatial Format", '', 'RegionSpatialFormat'), + 0x00186014: ('US', '1', "Region Data Type", '', 'RegionDataType'), + 0x00186016: ('UL', '1', "Region Flags", '', 'RegionFlags'), + 0x00186018: ('UL', '1', "Region Location Min X0", '', 'RegionLocationMinX0'), + 0x0018601A: ('UL', '1', "Region Location Min Y0", '', 'RegionLocationMinY0'), + 0x0018601C: ('UL', '1', "Region Location Max X1", '', 'RegionLocationMaxX1'), + 0x0018601E: ('UL', '1', "Region Location Max Y1", '', 'RegionLocationMaxY1'), + 0x00186020: ('SL', '1', "Reference Pixel X0", '', 'ReferencePixelX0'), + 0x00186022: ('SL', '1', "Reference Pixel Y0", '', 'ReferencePixelY0'), + 0x00186024: ('US', '1', "Physical Units X Direction", '', 'PhysicalUnitsXDirection'), + 0x00186026: ('US', '1', "Physical Units Y Direction", '', 'PhysicalUnitsYDirection'), + 0x00186028: ('FD', '1', "Reference Pixel Physical Value X", '', 'ReferencePixelPhysicalValueX'), + 0x0018602A: ('FD', '1', "Reference Pixel Physical Value Y", '', 'ReferencePixelPhysicalValueY'), + 0x0018602C: ('FD', '1', "Physical Delta X", '', 'PhysicalDeltaX'), + 0x0018602E: ('FD', '1', "Physical Delta Y", '', 'PhysicalDeltaY'), + 0x00186030: ('UL', '1', "Transducer Frequency", '', 'TransducerFrequency'), + 0x00186031: ('CS', '1', "Transducer Type", '', 'TransducerType'), + 0x00186032: ('UL', '1', "Pulse Repetition Frequency", '', 'PulseRepetitionFrequency'), + 0x00186034: ('FD', '1', "Doppler Correction Angle", '', 'DopplerCorrectionAngle'), + 0x00186036: ('FD', '1', "Steering Angle", '', 'SteeringAngle'), + 0x00186038: ('UL', '1', "Doppler Sample Volume X Position (Retired)", 'Retired', 'DopplerSampleVolumeXPositionRetired'), + 0x00186039: ('SL', '1', "Doppler Sample Volume X Position", '', 'DopplerSampleVolumeXPosition'), + 0x0018603A: ('UL', '1', "Doppler Sample Volume Y Position (Retired)", 'Retired', 'DopplerSampleVolumeYPositionRetired'), + 0x0018603B: ('SL', '1', "Doppler Sample Volume Y Position", '', 'DopplerSampleVolumeYPosition'), + 0x0018603C: ('UL', '1', "TM-Line Position X0 (Retired)", 'Retired', 'TMLinePositionX0Retired'), + 0x0018603D: ('SL', '1', "TM-Line Position X0", '', 'TMLinePositionX0'), + 0x0018603E: ('UL', '1', "TM-Line Position Y0 (Retired)", 'Retired', 'TMLinePositionY0Retired'), + 0x0018603F: ('SL', '1', "TM-Line Position Y0", '', 'TMLinePositionY0'), + 0x00186040: ('UL', '1', "TM-Line Position X1 (Retired)", 'Retired', 'TMLinePositionX1Retired'), + 0x00186041: ('SL', '1', "TM-Line Position X1", '', 'TMLinePositionX1'), + 0x00186042: ('UL', '1', "TM-Line Position Y1 (Retired)", 'Retired', 'TMLinePositionY1Retired'), + 0x00186043: ('SL', '1', "TM-Line Position Y1", '', 'TMLinePositionY1'), + 0x00186044: ('US', '1', "Pixel Component Organization", '', 'PixelComponentOrganization'), + 0x00186046: ('UL', '1', "Pixel Component Mask", '', 'PixelComponentMask'), + 0x00186048: ('UL', '1', "Pixel Component Range Start", '', 'PixelComponentRangeStart'), + 0x0018604A: ('UL', '1', "Pixel Component Range Stop", '', 'PixelComponentRangeStop'), + 0x0018604C: ('US', '1', "Pixel Component Physical Units", '', 'PixelComponentPhysicalUnits'), + 0x0018604E: ('US', '1', "Pixel Component Data Type", '', 'PixelComponentDataType'), + 0x00186050: ('UL', '1', "Number of Table Break Points", '', 'NumberOfTableBreakPoints'), + 0x00186052: ('UL', '1-n', "Table of X Break Points", '', 'TableOfXBreakPoints'), + 0x00186054: ('FD', '1-n', "Table of Y Break Points", '', 'TableOfYBreakPoints'), + 0x00186056: ('UL', '1', "Number of Table Entries", '', 'NumberOfTableEntries'), + 0x00186058: ('UL', '1-n', "Table of Pixel Values", '', 'TableOfPixelValues'), + 0x0018605A: ('FL', '1-n', "Table of Parameter Values", '', 'TableOfParameterValues'), + 0x00186060: ('FL', '1-n', "R Wave Time Vector", '', 'RWaveTimeVector'), + 0x00187000: ('CS', '1', "Detector Conditions Nominal Flag", '', 'DetectorConditionsNominalFlag'), + 0x00187001: ('DS', '1', "Detector Temperature", '', 'DetectorTemperature'), + 0x00187004: ('CS', '1', "Detector Type", '', 'DetectorType'), + 0x00187005: ('CS', '1', "Detector Configuration", '', 'DetectorConfiguration'), + 0x00187006: ('LT', '1', "Detector Description", '', 'DetectorDescription'), + 0x00187008: ('LT', '1', "Detector Mode", '', 'DetectorMode'), + 0x0018700A: ('SH', '1', "Detector ID", '', 'DetectorID'), + 0x0018700C: ('DA', '1', "Date of Last Detector Calibration", '', 'DateOfLastDetectorCalibration'), + 0x0018700E: ('TM', '1', "Time of Last Detector Calibration", '', 'TimeOfLastDetectorCalibration'), + 0x00187010: ('IS', '1', "Exposures on Detector Since Last Calibration", '', 'ExposuresOnDetectorSinceLastCalibration'), + 0x00187011: ('IS', '1', "Exposures on Detector Since Manufactured", '', 'ExposuresOnDetectorSinceManufactured'), + 0x00187012: ('DS', '1', "Detector Time Since Last Exposure", '', 'DetectorTimeSinceLastExposure'), + 0x00187014: ('DS', '1', "Detector Active Time", '', 'DetectorActiveTime'), + 0x00187016: ('DS', '1', "Detector Activation Offset From Exposure", '', 'DetectorActivationOffsetFromExposure'), + 0x0018701A: ('DS', '2', "Detector Binning", '', 'DetectorBinning'), + 0x00187020: ('DS', '2', "Detector Element Physical Size", '', 'DetectorElementPhysicalSize'), + 0x00187022: ('DS', '2', "Detector Element Spacing", '', 'DetectorElementSpacing'), + 0x00187024: ('CS', '1', "Detector Active Shape", '', 'DetectorActiveShape'), + 0x00187026: ('DS', '1-2', "Detector Active Dimension(s)", '', 'DetectorActiveDimensions'), + 0x00187028: ('DS', '2', "Detector Active Origin", '', 'DetectorActiveOrigin'), + 0x0018702A: ('LO', '1', "Detector Manufacturer Name", '', 'DetectorManufacturerName'), + 0x0018702B: ('LO', '1', "Detector Manufacturer's Model Name", '', 'DetectorManufacturerModelName'), + 0x00187030: ('DS', '2', "Field of View Origin", '', 'FieldOfViewOrigin'), + 0x00187032: ('DS', '1', "Field of View Rotation", '', 'FieldOfViewRotation'), + 0x00187034: ('CS', '1', "Field of View Horizontal Flip", '', 'FieldOfViewHorizontalFlip'), + 0x00187036: ('FL', '2', "Pixel Data Area Origin Relative To FOV", '', 'PixelDataAreaOriginRelativeToFOV'), + 0x00187038: ('FL', '1', "Pixel Data Area Rotation Angle Relative To FOV", '', 'PixelDataAreaRotationAngleRelativeToFOV'), + 0x00187040: ('LT', '1', "Grid Absorbing Material", '', 'GridAbsorbingMaterial'), + 0x00187041: ('LT', '1', "Grid Spacing Material", '', 'GridSpacingMaterial'), + 0x00187042: ('DS', '1', "Grid Thickness", '', 'GridThickness'), + 0x00187044: ('DS', '1', "Grid Pitch", '', 'GridPitch'), + 0x00187046: ('IS', '2', "Grid Aspect Ratio", '', 'GridAspectRatio'), + 0x00187048: ('DS', '1', "Grid Period", '', 'GridPeriod'), + 0x0018704C: ('DS', '1', "Grid Focal Distance", '', 'GridFocalDistance'), + 0x00187050: ('CS', '1-n', "Filter Material", '', 'FilterMaterial'), + 0x00187052: ('DS', '1-n', "Filter Thickness Minimum", '', 'FilterThicknessMinimum'), + 0x00187054: ('DS', '1-n', "Filter Thickness Maximum", '', 'FilterThicknessMaximum'), + 0x00187056: ('FL', '1-n', "Filter Beam Path Length Minimum", '', 'FilterBeamPathLengthMinimum'), + 0x00187058: ('FL', '1-n', "Filter Beam Path Length Maximum", '', 'FilterBeamPathLengthMaximum'), + 0x00187060: ('CS', '1', "Exposure Control Mode", '', 'ExposureControlMode'), + 0x00187062: ('LT', '1', "Exposure Control Mode Description", '', 'ExposureControlModeDescription'), + 0x00187064: ('CS', '1', "Exposure Status", '', 'ExposureStatus'), + 0x00187065: ('DS', '1', "Phototimer Setting", '', 'PhototimerSetting'), + 0x00188150: ('DS', '1', "Exposure Time in uS", '', 'ExposureTimeInuS'), + 0x00188151: ('DS', '1', "X-Ray Tube Current in uA", '', 'XRayTubeCurrentInuA'), + 0x00189004: ('CS', '1', "Content Qualification", '', 'ContentQualification'), + 0x00189005: ('SH', '1', "Pulse Sequence Name", '', 'PulseSequenceName'), + 0x00189006: ('SQ', '1', "MR Imaging Modifier Sequence", '', 'MRImagingModifierSequence'), + 0x00189008: ('CS', '1', "Echo Pulse Sequence", '', 'EchoPulseSequence'), + 0x00189009: ('CS', '1', "Inversion Recovery", '', 'InversionRecovery'), + 0x00189010: ('CS', '1', "Flow Compensation", '', 'FlowCompensation'), + 0x00189011: ('CS', '1', "Multiple Spin Echo", '', 'MultipleSpinEcho'), + 0x00189012: ('CS', '1', "Multi-planar Excitation", '', 'MultiPlanarExcitation'), + 0x00189014: ('CS', '1', "Phase Contrast", '', 'PhaseContrast'), + 0x00189015: ('CS', '1', "Time of Flight Contrast", '', 'TimeOfFlightContrast'), + 0x00189016: ('CS', '1', "Spoiling", '', 'Spoiling'), + 0x00189017: ('CS', '1', "Steady State Pulse Sequence", '', 'SteadyStatePulseSequence'), + 0x00189018: ('CS', '1', "Echo Planar Pulse Sequence", '', 'EchoPlanarPulseSequence'), + 0x00189019: ('FD', '1', "Tag Angle First Axis", '', 'TagAngleFirstAxis'), + 0x00189020: ('CS', '1', "Magnetization Transfer", '', 'MagnetizationTransfer'), + 0x00189021: ('CS', '1', "T2 Preparation", '', 'T2Preparation'), + 0x00189022: ('CS', '1', "Blood Signal Nulling", '', 'BloodSignalNulling'), + 0x00189024: ('CS', '1', "Saturation Recovery", '', 'SaturationRecovery'), + 0x00189025: ('CS', '1', "Spectrally Selected Suppression", '', 'SpectrallySelectedSuppression'), + 0x00189026: ('CS', '1', "Spectrally Selected Excitation", '', 'SpectrallySelectedExcitation'), + 0x00189027: ('CS', '1', "Spatial Pre-saturation", '', 'SpatialPresaturation'), + 0x00189028: ('CS', '1', "Tagging", '', 'Tagging'), + 0x00189029: ('CS', '1', "Oversampling Phase", '', 'OversamplingPhase'), + 0x00189030: ('FD', '1', "Tag Spacing First Dimension", '', 'TagSpacingFirstDimension'), + 0x00189032: ('CS', '1', "Geometry of k-Space Traversal", '', 'GeometryOfKSpaceTraversal'), + 0x00189033: ('CS', '1', "Segmented k-Space Traversal", '', 'SegmentedKSpaceTraversal'), + 0x00189034: ('CS', '1', "Rectilinear Phase Encode Reordering", '', 'RectilinearPhaseEncodeReordering'), + 0x00189035: ('FD', '1', "Tag Thickness", '', 'TagThickness'), + 0x00189036: ('CS', '1', "Partial Fourier Direction", '', 'PartialFourierDirection'), + 0x00189037: ('CS', '1', "Cardiac Synchronization Technique", '', 'CardiacSynchronizationTechnique'), + 0x00189041: ('LO', '1', "Receive Coil Manufacturer Name", '', 'ReceiveCoilManufacturerName'), + 0x00189042: ('SQ', '1', "MR Receive Coil Sequence", '', 'MRReceiveCoilSequence'), + 0x00189043: ('CS', '1', "Receive Coil Type", '', 'ReceiveCoilType'), + 0x00189044: ('CS', '1', "Quadrature Receive Coil", '', 'QuadratureReceiveCoil'), + 0x00189045: ('SQ', '1', "Multi-Coil Definition Sequence", '', 'MultiCoilDefinitionSequence'), + 0x00189046: ('LO', '1', "Multi-Coil Configuration", '', 'MultiCoilConfiguration'), + 0x00189047: ('SH', '1', "Multi-Coil Element Name", '', 'MultiCoilElementName'), + 0x00189048: ('CS', '1', "Multi-Coil Element Used", '', 'MultiCoilElementUsed'), + 0x00189049: ('SQ', '1', "MR Transmit Coil Sequence", '', 'MRTransmitCoilSequence'), + 0x00189050: ('LO', '1', "Transmit Coil Manufacturer Name", '', 'TransmitCoilManufacturerName'), + 0x00189051: ('CS', '1', "Transmit Coil Type", '', 'TransmitCoilType'), + 0x00189052: ('FD', '1-2', "Spectral Width", '', 'SpectralWidth'), + 0x00189053: ('FD', '1-2', "Chemical Shift Reference", '', 'ChemicalShiftReference'), + 0x00189054: ('CS', '1', "Volume Localization Technique", '', 'VolumeLocalizationTechnique'), + 0x00189058: ('US', '1', "MR Acquisition Frequency Encoding Steps", '', 'MRAcquisitionFrequencyEncodingSteps'), + 0x00189059: ('CS', '1', "De-coupling", '', 'Decoupling'), + 0x00189060: ('CS', '1-2', "De-coupled Nucleus", '', 'DecoupledNucleus'), + 0x00189061: ('FD', '1-2', "De-coupling Frequency", '', 'DecouplingFrequency'), + 0x00189062: ('CS', '1', "De-coupling Method", '', 'DecouplingMethod'), + 0x00189063: ('FD', '1-2', "De-coupling Chemical Shift Reference", '', 'DecouplingChemicalShiftReference'), + 0x00189064: ('CS', '1', "k-space Filtering", '', 'KSpaceFiltering'), + 0x00189065: ('CS', '1-2', "Time Domain Filtering", '', 'TimeDomainFiltering'), + 0x00189066: ('US', '1-2', "Number of Zero Fills", '', 'NumberOfZeroFills'), + 0x00189067: ('CS', '1', "Baseline Correction", '', 'BaselineCorrection'), + 0x00189069: ('FD', '1', "Parallel Reduction Factor In-plane", '', 'ParallelReductionFactorInPlane'), + 0x00189070: ('FD', '1', "Cardiac R-R Interval Specified", '', 'CardiacRRIntervalSpecified'), + 0x00189073: ('FD', '1', "Acquisition Duration", '', 'AcquisitionDuration'), + 0x00189074: ('DT', '1', "Frame Acquisition DateTime", '', 'FrameAcquisitionDateTime'), + 0x00189075: ('CS', '1', "Diffusion Directionality", '', 'DiffusionDirectionality'), + 0x00189076: ('SQ', '1', "Diffusion Gradient Direction Sequence", '', 'DiffusionGradientDirectionSequence'), + 0x00189077: ('CS', '1', "Parallel Acquisition", '', 'ParallelAcquisition'), + 0x00189078: ('CS', '1', "Parallel Acquisition Technique", '', 'ParallelAcquisitionTechnique'), + 0x00189079: ('FD', '1-n', "Inversion Times", '', 'InversionTimes'), + 0x00189080: ('ST', '1', "Metabolite Map Description", '', 'MetaboliteMapDescription'), + 0x00189081: ('CS', '1', "Partial Fourier", '', 'PartialFourier'), + 0x00189082: ('FD', '1', "Effective Echo Time", '', 'EffectiveEchoTime'), + 0x00189083: ('SQ', '1', "Metabolite Map Code Sequence", '', 'MetaboliteMapCodeSequence'), + 0x00189084: ('SQ', '1', "Chemical Shift Sequence", '', 'ChemicalShiftSequence'), + 0x00189085: ('CS', '1', "Cardiac Signal Source", '', 'CardiacSignalSource'), + 0x00189087: ('FD', '1', "Diffusion b-value", '', 'DiffusionBValue'), + 0x00189089: ('FD', '3', "Diffusion Gradient Orientation", '', 'DiffusionGradientOrientation'), + 0x00189090: ('FD', '3', "Velocity Encoding Direction", '', 'VelocityEncodingDirection'), + 0x00189091: ('FD', '1', "Velocity Encoding Minimum Value", '', 'VelocityEncodingMinimumValue'), + 0x00189092: ('SQ', '1', "Velocity Encoding Acquisition Sequence", '', 'VelocityEncodingAcquisitionSequence'), + 0x00189093: ('US', '1', "Number of k-Space Trajectories", '', 'NumberOfKSpaceTrajectories'), + 0x00189094: ('CS', '1', "Coverage of k-Space", '', 'CoverageOfKSpace'), + 0x00189095: ('UL', '1', "Spectroscopy Acquisition Phase Rows", '', 'SpectroscopyAcquisitionPhaseRows'), + 0x00189096: ('FD', '1', "Parallel Reduction Factor In-plane (Retired)", 'Retired', 'ParallelReductionFactorInPlaneRetired'), + 0x00189098: ('FD', '1-2', "Transmitter Frequency", '', 'TransmitterFrequency'), + 0x00189100: ('CS', '1-2', "Resonant Nucleus", '', 'ResonantNucleus'), + 0x00189101: ('CS', '1', "Frequency Correction", '', 'FrequencyCorrection'), + 0x00189103: ('SQ', '1', "MR Spectroscopy FOV/Geometry Sequence", '', 'MRSpectroscopyFOVGeometrySequence'), + 0x00189104: ('FD', '1', "Slab Thickness", '', 'SlabThickness'), + 0x00189105: ('FD', '3', "Slab Orientation", '', 'SlabOrientation'), + 0x00189106: ('FD', '3', "Mid Slab Position", '', 'MidSlabPosition'), + 0x00189107: ('SQ', '1', "MR Spatial Saturation Sequence", '', 'MRSpatialSaturationSequence'), + 0x00189112: ('SQ', '1', "MR Timing and Related Parameters Sequence", '', 'MRTimingAndRelatedParametersSequence'), + 0x00189114: ('SQ', '1', "MR Echo Sequence", '', 'MREchoSequence'), + 0x00189115: ('SQ', '1', "MR Modifier Sequence", '', 'MRModifierSequence'), + 0x00189117: ('SQ', '1', "MR Diffusion Sequence", '', 'MRDiffusionSequence'), + 0x00189118: ('SQ', '1', "Cardiac Synchronization Sequence", '', 'CardiacSynchronizationSequence'), + 0x00189119: ('SQ', '1', "MR Averages Sequence", '', 'MRAveragesSequence'), + 0x00189125: ('SQ', '1', "MR FOV/Geometry Sequence", '', 'MRFOVGeometrySequence'), + 0x00189126: ('SQ', '1', "Volume Localization Sequence", '', 'VolumeLocalizationSequence'), + 0x00189127: ('UL', '1', "Spectroscopy Acquisition Data Columns", '', 'SpectroscopyAcquisitionDataColumns'), + 0x00189147: ('CS', '1', "Diffusion Anisotropy Type", '', 'DiffusionAnisotropyType'), + 0x00189151: ('DT', '1', "Frame Reference DateTime", '', 'FrameReferenceDateTime'), + 0x00189152: ('SQ', '1', "MR Metabolite Map Sequence", '', 'MRMetaboliteMapSequence'), + 0x00189155: ('FD', '1', "Parallel Reduction Factor out-of-plane", '', 'ParallelReductionFactorOutOfPlane'), + 0x00189159: ('UL', '1', "Spectroscopy Acquisition Out-of-plane Phase Steps", '', 'SpectroscopyAcquisitionOutOfPlanePhaseSteps'), + 0x00189166: ('CS', '1', "Bulk Motion Status", 'Retired', 'BulkMotionStatus'), + 0x00189168: ('FD', '1', "Parallel Reduction Factor Second In-plane", '', 'ParallelReductionFactorSecondInPlane'), + 0x00189169: ('CS', '1', "Cardiac Beat Rejection Technique", '', 'CardiacBeatRejectionTechnique'), + 0x00189170: ('CS', '1', "Respiratory Motion Compensation Technique", '', 'RespiratoryMotionCompensationTechnique'), + 0x00189171: ('CS', '1', "Respiratory Signal Source", '', 'RespiratorySignalSource'), + 0x00189172: ('CS', '1', "Bulk Motion Compensation Technique", '', 'BulkMotionCompensationTechnique'), + 0x00189173: ('CS', '1', "Bulk Motion Signal Source", '', 'BulkMotionSignalSource'), + 0x00189174: ('CS', '1', "Applicable Safety Standard Agency", '', 'ApplicableSafetyStandardAgency'), + 0x00189175: ('LO', '1', "Applicable Safety Standard Description", '', 'ApplicableSafetyStandardDescription'), + 0x00189176: ('SQ', '1', "Operating Mode Sequence", '', 'OperatingModeSequence'), + 0x00189177: ('CS', '1', "Operating Mode Type", '', 'OperatingModeType'), + 0x00189178: ('CS', '1', "Operating Mode", '', 'OperatingMode'), + 0x00189179: ('CS', '1', "Specific Absorption Rate Definition", '', 'SpecificAbsorptionRateDefinition'), + 0x00189180: ('CS', '1', "Gradient Output Type", '', 'GradientOutputType'), + 0x00189181: ('FD', '1', "Specific Absorption Rate Value", '', 'SpecificAbsorptionRateValue'), + 0x00189182: ('FD', '1', "Gradient Output", '', 'GradientOutput'), + 0x00189183: ('CS', '1', "Flow Compensation Direction", '', 'FlowCompensationDirection'), + 0x00189184: ('FD', '1', "Tagging Delay", '', 'TaggingDelay'), + 0x00189185: ('ST', '1', "Respiratory Motion Compensation Technique Description", '', 'RespiratoryMotionCompensationTechniqueDescription'), + 0x00189186: ('SH', '1', "Respiratory Signal Source ID", '', 'RespiratorySignalSourceID'), + 0x00189195: ('FD', '1', "Chemical Shift Minimum Integration Limit in Hz", 'Retired', 'ChemicalShiftMinimumIntegrationLimitInHz'), + 0x00189196: ('FD', '1', "Chemical Shift Maximum Integration Limit in Hz", 'Retired', 'ChemicalShiftMaximumIntegrationLimitInHz'), + 0x00189197: ('SQ', '1', "MR Velocity Encoding Sequence", '', 'MRVelocityEncodingSequence'), + 0x00189198: ('CS', '1', "First Order Phase Correction", '', 'FirstOrderPhaseCorrection'), + 0x00189199: ('CS', '1', "Water Referenced Phase Correction", '', 'WaterReferencedPhaseCorrection'), + 0x00189200: ('CS', '1', "MR Spectroscopy Acquisition Type", '', 'MRSpectroscopyAcquisitionType'), + 0x00189214: ('CS', '1', "Respiratory Cycle Position", '', 'RespiratoryCyclePosition'), + 0x00189217: ('FD', '1', "Velocity Encoding Maximum Value", '', 'VelocityEncodingMaximumValue'), + 0x00189218: ('FD', '1', "Tag Spacing Second Dimension", '', 'TagSpacingSecondDimension'), + 0x00189219: ('SS', '1', "Tag Angle Second Axis", '', 'TagAngleSecondAxis'), + 0x00189220: ('FD', '1', "Frame Acquisition Duration", '', 'FrameAcquisitionDuration'), + 0x00189226: ('SQ', '1', "MR Image Frame Type Sequence", '', 'MRImageFrameTypeSequence'), + 0x00189227: ('SQ', '1', "MR Spectroscopy Frame Type Sequence", '', 'MRSpectroscopyFrameTypeSequence'), + 0x00189231: ('US', '1', "MR Acquisition Phase Encoding Steps in-plane", '', 'MRAcquisitionPhaseEncodingStepsInPlane'), + 0x00189232: ('US', '1', "MR Acquisition Phase Encoding Steps out-of-plane", '', 'MRAcquisitionPhaseEncodingStepsOutOfPlane'), + 0x00189234: ('UL', '1', "Spectroscopy Acquisition Phase Columns", '', 'SpectroscopyAcquisitionPhaseColumns'), + 0x00189236: ('CS', '1', "Cardiac Cycle Position", '', 'CardiacCyclePosition'), + 0x00189239: ('SQ', '1', "Specific Absorption Rate Sequence", '', 'SpecificAbsorptionRateSequence'), + 0x00189240: ('US', '1', "RF Echo Train Length", '', 'RFEchoTrainLength'), + 0x00189241: ('US', '1', "Gradient Echo Train Length", '', 'GradientEchoTrainLength'), + 0x00189250: ('CS', '1', "Arterial Spin Labeling Contrast", '', 'ArterialSpinLabelingContrast'), + 0x00189251: ('SQ', '1', "MR Arterial Spin Labeling Sequence", '', 'MRArterialSpinLabelingSequence'), + 0x00189252: ('LO', '1', "ASL Technique Description", '', 'ASLTechniqueDescription'), + 0x00189253: ('US', '1', "ASL Slab Number", '', 'ASLSlabNumber'), + 0x00189254: ('FD', '1', "ASL Slab Thickness", '', 'ASLSlabThickness'), + 0x00189255: ('FD', '3', "ASL Slab Orientation", '', 'ASLSlabOrientation'), + 0x00189256: ('FD', '3', "ASL Mid Slab Position", '', 'ASLMidSlabPosition'), + 0x00189257: ('CS', '1', "ASL Context", '', 'ASLContext'), + 0x00189258: ('UL', '1', "ASL Pulse Train Duration", '', 'ASLPulseTrainDuration'), + 0x00189259: ('CS', '1', "ASL Crusher Flag", '', 'ASLCrusherFlag'), + 0x0018925A: ('FD', '1', "ASL Crusher Flow Limit", '', 'ASLCrusherFlowLimit'), + 0x0018925B: ('LO', '1', "ASL Crusher Description", '', 'ASLCrusherDescription'), + 0x0018925C: ('CS', '1', "ASL Bolus Cut-off Flag", '', 'ASLBolusCutoffFlag'), + 0x0018925D: ('SQ', '1', "ASL Bolus Cut-off Timing Sequence", '', 'ASLBolusCutoffTimingSequence'), + 0x0018925E: ('LO', '1', "ASL Bolus Cut-off Technique", '', 'ASLBolusCutoffTechnique'), + 0x0018925F: ('UL', '1', "ASL Bolus Cut-off Delay Time", '', 'ASLBolusCutoffDelayTime'), + 0x00189260: ('SQ', '1', "ASL Slab Sequence", '', 'ASLSlabSequence'), + 0x00189295: ('FD', '1', "Chemical Shift Minimum Integration Limit in ppm", '', 'ChemicalShiftMinimumIntegrationLimitInppm'), + 0x00189296: ('FD', '1', "Chemical Shift Maximum Integration Limit in ppm", '', 'ChemicalShiftMaximumIntegrationLimitInppm'), + 0x00189301: ('SQ', '1', "CT Acquisition Type Sequence", '', 'CTAcquisitionTypeSequence'), + 0x00189302: ('CS', '1', "Acquisition Type", '', 'AcquisitionType'), + 0x00189303: ('FD', '1', "Tube Angle", '', 'TubeAngle'), + 0x00189304: ('SQ', '1', "CT Acquisition Details Sequence", '', 'CTAcquisitionDetailsSequence'), + 0x00189305: ('FD', '1', "Revolution Time", '', 'RevolutionTime'), + 0x00189306: ('FD', '1', "Single Collimation Width", '', 'SingleCollimationWidth'), + 0x00189307: ('FD', '1', "Total Collimation Width", '', 'TotalCollimationWidth'), + 0x00189308: ('SQ', '1', "CT Table Dynamics Sequence", '', 'CTTableDynamicsSequence'), + 0x00189309: ('FD', '1', "Table Speed", '', 'TableSpeed'), + 0x00189310: ('FD', '1', "Table Feed per Rotation", '', 'TableFeedPerRotation'), + 0x00189311: ('FD', '1', "Spiral Pitch Factor", '', 'SpiralPitchFactor'), + 0x00189312: ('SQ', '1', "CT Geometry Sequence", '', 'CTGeometrySequence'), + 0x00189313: ('FD', '3', "Data Collection Center (Patient)", '', 'DataCollectionCenterPatient'), + 0x00189314: ('SQ', '1', "CT Reconstruction Sequence", '', 'CTReconstructionSequence'), + 0x00189315: ('CS', '1', "Reconstruction Algorithm", '', 'ReconstructionAlgorithm'), + 0x00189316: ('CS', '1', "Convolution Kernel Group", '', 'ConvolutionKernelGroup'), + 0x00189317: ('FD', '2', "Reconstruction Field of View", '', 'ReconstructionFieldOfView'), + 0x00189318: ('FD', '3', "Reconstruction Target Center (Patient)", '', 'ReconstructionTargetCenterPatient'), + 0x00189319: ('FD', '1', "Reconstruction Angle", '', 'ReconstructionAngle'), + 0x00189320: ('SH', '1', "Image Filter", '', 'ImageFilter'), + 0x00189321: ('SQ', '1', "CT Exposure Sequence", '', 'CTExposureSequence'), + 0x00189322: ('FD', '2', "Reconstruction Pixel Spacing", '', 'ReconstructionPixelSpacing'), + 0x00189323: ('CS', '1', "Exposure Modulation Type", '', 'ExposureModulationType'), + 0x00189324: ('FD', '1', "Estimated Dose Saving", '', 'EstimatedDoseSaving'), + 0x00189325: ('SQ', '1', "CT X-Ray Details Sequence", '', 'CTXRayDetailsSequence'), + 0x00189326: ('SQ', '1', "CT Position Sequence", '', 'CTPositionSequence'), + 0x00189327: ('FD', '1', "Table Position", '', 'TablePosition'), + 0x00189328: ('FD', '1', "Exposure Time in ms", '', 'ExposureTimeInms'), + 0x00189329: ('SQ', '1', "CT Image Frame Type Sequence", '', 'CTImageFrameTypeSequence'), + 0x00189330: ('FD', '1', "X-Ray Tube Current in mA", '', 'XRayTubeCurrentInmA'), + 0x00189332: ('FD', '1', "Exposure in mAs", '', 'ExposureInmAs'), + 0x00189333: ('CS', '1', "Constant Volume Flag", '', 'ConstantVolumeFlag'), + 0x00189334: ('CS', '1', "Fluoroscopy Flag", '', 'FluoroscopyFlag'), + 0x00189335: ('FD', '1', "Distance Source to Data Collection Center", '', 'DistanceSourceToDataCollectionCenter'), + 0x00189337: ('US', '1', "Contrast/Bolus Agent Number", '', 'ContrastBolusAgentNumber'), + 0x00189338: ('SQ', '1', "Contrast/Bolus Ingredient Code Sequence", '', 'ContrastBolusIngredientCodeSequence'), + 0x00189340: ('SQ', '1', "Contrast Administration Profile Sequence", '', 'ContrastAdministrationProfileSequence'), + 0x00189341: ('SQ', '1', "Contrast/Bolus Usage Sequence", '', 'ContrastBolusUsageSequence'), + 0x00189342: ('CS', '1', "Contrast/Bolus Agent Administered", '', 'ContrastBolusAgentAdministered'), + 0x00189343: ('CS', '1', "Contrast/Bolus Agent Detected", '', 'ContrastBolusAgentDetected'), + 0x00189344: ('CS', '1', "Contrast/Bolus Agent Phase", '', 'ContrastBolusAgentPhase'), + 0x00189345: ('FD', '1', "CTDIvol", '', 'CTDIvol'), + 0x00189346: ('SQ', '1', "CTDI Phantom Type Code Sequence", '', 'CTDIPhantomTypeCodeSequence'), + 0x00189351: ('FL', '1', "Calcium Scoring Mass Factor Patient", '', 'CalciumScoringMassFactorPatient'), + 0x00189352: ('FL', '3', "Calcium Scoring Mass Factor Device", '', 'CalciumScoringMassFactorDevice'), + 0x00189353: ('FL', '1', "Energy Weighting Factor", '', 'EnergyWeightingFactor'), + 0x00189360: ('SQ', '1', "CT Additional X-Ray Source Sequence", '', 'CTAdditionalXRaySourceSequence'), + 0x00189401: ('SQ', '1', "Projection Pixel Calibration Sequence", '', 'ProjectionPixelCalibrationSequence'), + 0x00189402: ('FL', '1', "Distance Source to Isocenter", '', 'DistanceSourceToIsocenter'), + 0x00189403: ('FL', '1', "Distance Object to Table Top", '', 'DistanceObjectToTableTop'), + 0x00189404: ('FL', '2', "Object Pixel Spacing in Center of Beam", '', 'ObjectPixelSpacingInCenterOfBeam'), + 0x00189405: ('SQ', '1', "Positioner Position Sequence", '', 'PositionerPositionSequence'), + 0x00189406: ('SQ', '1', "Table Position Sequence", '', 'TablePositionSequence'), + 0x00189407: ('SQ', '1', "Collimator Shape Sequence", '', 'CollimatorShapeSequence'), + 0x00189410: ('CS', '1', "Planes in Acquisition", '', 'PlanesInAcquisition'), + 0x00189412: ('SQ', '1', "XA/XRF Frame Characteristics Sequence", '', 'XAXRFFrameCharacteristicsSequence'), + 0x00189417: ('SQ', '1', "Frame Acquisition Sequence", '', 'FrameAcquisitionSequence'), + 0x00189420: ('CS', '1', "X-Ray Receptor Type", '', 'XRayReceptorType'), + 0x00189423: ('LO', '1', "Acquisition Protocol Name", '', 'AcquisitionProtocolName'), + 0x00189424: ('LT', '1', "Acquisition Protocol Description", '', 'AcquisitionProtocolDescription'), + 0x00189425: ('CS', '1', "Contrast/Bolus Ingredient Opaque", '', 'ContrastBolusIngredientOpaque'), + 0x00189426: ('FL', '1', "Distance Receptor Plane to Detector Housing", '', 'DistanceReceptorPlaneToDetectorHousing'), + 0x00189427: ('CS', '1', "Intensifier Active Shape", '', 'IntensifierActiveShape'), + 0x00189428: ('FL', '1-2', "Intensifier Active Dimension(s)", '', 'IntensifierActiveDimensions'), + 0x00189429: ('FL', '2', "Physical Detector Size", '', 'PhysicalDetectorSize'), + 0x00189430: ('FL', '2', "Position of Isocenter Projection", '', 'PositionOfIsocenterProjection'), + 0x00189432: ('SQ', '1', "Field of View Sequence", '', 'FieldOfViewSequence'), + 0x00189433: ('LO', '1', "Field of View Description", '', 'FieldOfViewDescription'), + 0x00189434: ('SQ', '1', "Exposure Control Sensing Regions Sequence", '', 'ExposureControlSensingRegionsSequence'), + 0x00189435: ('CS', '1', "Exposure Control Sensing Region Shape", '', 'ExposureControlSensingRegionShape'), + 0x00189436: ('SS', '1', "Exposure Control Sensing Region Left Vertical Edge", '', 'ExposureControlSensingRegionLeftVerticalEdge'), + 0x00189437: ('SS', '1', "Exposure Control Sensing Region Right Vertical Edge", '', 'ExposureControlSensingRegionRightVerticalEdge'), + 0x00189438: ('SS', '1', "Exposure Control Sensing Region Upper Horizontal Edge", '', 'ExposureControlSensingRegionUpperHorizontalEdge'), + 0x00189439: ('SS', '1', "Exposure Control Sensing Region Lower Horizontal Edge", '', 'ExposureControlSensingRegionLowerHorizontalEdge'), + 0x00189440: ('SS', '2', "Center of Circular Exposure Control Sensing Region", '', 'CenterOfCircularExposureControlSensingRegion'), + 0x00189441: ('US', '1', "Radius of Circular Exposure Control Sensing Region", '', 'RadiusOfCircularExposureControlSensingRegion'), + 0x00189442: ('SS', '2-n', "Vertices of the Polygonal Exposure Control Sensing Region", '', 'VerticesOfThePolygonalExposureControlSensingRegion'), + 0x00189445: ('OB', '1', "Retired-blank", 'Retired', ''), + 0x00189447: ('FL', '1', "Column Angulation (Patient)", '', 'ColumnAngulationPatient'), + 0x00189449: ('FL', '1', "Beam Angle", '', 'BeamAngle'), + 0x00189451: ('SQ', '1', "Frame Detector Parameters Sequence", '', 'FrameDetectorParametersSequence'), + 0x00189452: ('FL', '1', "Calculated Anatomy Thickness", '', 'CalculatedAnatomyThickness'), + 0x00189455: ('SQ', '1', "Calibration Sequence", '', 'CalibrationSequence'), + 0x00189456: ('SQ', '1', "Object Thickness Sequence", '', 'ObjectThicknessSequence'), + 0x00189457: ('CS', '1', "Plane Identification", '', 'PlaneIdentification'), + 0x00189461: ('FL', '1-2', "Field of View Dimension(s) in Float", '', 'FieldOfViewDimensionsInFloat'), + 0x00189462: ('SQ', '1', "Isocenter Reference System Sequence", '', 'IsocenterReferenceSystemSequence'), + 0x00189463: ('FL', '1', "Positioner Isocenter Primary Angle", '', 'PositionerIsocenterPrimaryAngle'), + 0x00189464: ('FL', '1', "Positioner Isocenter Secondary Angle", '', 'PositionerIsocenterSecondaryAngle'), + 0x00189465: ('FL', '1', "Positioner Isocenter Detector Rotation Angle", '', 'PositionerIsocenterDetectorRotationAngle'), + 0x00189466: ('FL', '1', "Table X Position to Isocenter", '', 'TableXPositionToIsocenter'), + 0x00189467: ('FL', '1', "Table Y Position to Isocenter", '', 'TableYPositionToIsocenter'), + 0x00189468: ('FL', '1', "Table Z Position to Isocenter", '', 'TableZPositionToIsocenter'), + 0x00189469: ('FL', '1', "Table Horizontal Rotation Angle", '', 'TableHorizontalRotationAngle'), + 0x00189470: ('FL', '1', "Table Head Tilt Angle", '', 'TableHeadTiltAngle'), + 0x00189471: ('FL', '1', "Table Cradle Tilt Angle", '', 'TableCradleTiltAngle'), + 0x00189472: ('SQ', '1', "Frame Display Shutter Sequence", '', 'FrameDisplayShutterSequence'), + 0x00189473: ('FL', '1', "Acquired Image Area Dose Product", '', 'AcquiredImageAreaDoseProduct'), + 0x00189474: ('CS', '1', "C-arm Positioner Tabletop Relationship", '', 'CArmPositionerTabletopRelationship'), + 0x00189476: ('SQ', '1', "X-Ray Geometry Sequence", '', 'XRayGeometrySequence'), + 0x00189477: ('SQ', '1', "Irradiation Event Identification Sequence", '', 'IrradiationEventIdentificationSequence'), + 0x00189504: ('SQ', '1', "X-Ray 3D Frame Type Sequence", '', 'XRay3DFrameTypeSequence'), + 0x00189506: ('SQ', '1', "Contributing Sources Sequence", '', 'ContributingSourcesSequence'), + 0x00189507: ('SQ', '1', "X-Ray 3D Acquisition Sequence", '', 'XRay3DAcquisitionSequence'), + 0x00189508: ('FL', '1', "Primary Positioner Scan Arc", '', 'PrimaryPositionerScanArc'), + 0x00189509: ('FL', '1', "Secondary Positioner Scan Arc", '', 'SecondaryPositionerScanArc'), + 0x00189510: ('FL', '1', "Primary Positioner Scan Start Angle", '', 'PrimaryPositionerScanStartAngle'), + 0x00189511: ('FL', '1', "Secondary Positioner Scan Start Angle", '', 'SecondaryPositionerScanStartAngle'), + 0x00189514: ('FL', '1', "Primary Positioner Increment", '', 'PrimaryPositionerIncrement'), + 0x00189515: ('FL', '1', "Secondary Positioner Increment", '', 'SecondaryPositionerIncrement'), + 0x00189516: ('DT', '1', "Start Acquisition DateTime", '', 'StartAcquisitionDateTime'), + 0x00189517: ('DT', '1', "End Acquisition DateTime", '', 'EndAcquisitionDateTime'), + 0x00189524: ('LO', '1', "Application Name", '', 'ApplicationName'), + 0x00189525: ('LO', '1', "Application Version", '', 'ApplicationVersion'), + 0x00189526: ('LO', '1', "Application Manufacturer", '', 'ApplicationManufacturer'), + 0x00189527: ('CS', '1', "Algorithm Type", '', 'AlgorithmType'), + 0x00189528: ('LO', '1', "Algorithm Description", '', 'AlgorithmDescription'), + 0x00189530: ('SQ', '1', "X-Ray 3D Reconstruction Sequence", '', 'XRay3DReconstructionSequence'), + 0x00189531: ('LO', '1', "Reconstruction Description", '', 'ReconstructionDescription'), + 0x00189538: ('SQ', '1', "Per Projection Acquisition Sequence", '', 'PerProjectionAcquisitionSequence'), + 0x00189601: ('SQ', '1', "Diffusion b-matrix Sequence", '', 'DiffusionBMatrixSequence'), + 0x00189602: ('FD', '1', "Diffusion b-value XX", '', 'DiffusionBValueXX'), + 0x00189603: ('FD', '1', "Diffusion b-value XY", '', 'DiffusionBValueXY'), + 0x00189604: ('FD', '1', "Diffusion b-value XZ", '', 'DiffusionBValueXZ'), + 0x00189605: ('FD', '1', "Diffusion b-value YY", '', 'DiffusionBValueYY'), + 0x00189606: ('FD', '1', "Diffusion b-value YZ", '', 'DiffusionBValueYZ'), + 0x00189607: ('FD', '1', "Diffusion b-value ZZ", '', 'DiffusionBValueZZ'), + 0x00189701: ('DT', '1', "Decay Correction DateTime", '', 'DecayCorrectionDateTime'), + 0x00189715: ('FD', '1', "Start Density Threshold", '', 'StartDensityThreshold'), + 0x00189716: ('FD', '1', "Start Relative Density Difference Threshold", '', 'StartRelativeDensityDifferenceThreshold'), + 0x00189717: ('FD', '1', "Start Cardiac Trigger Count Threshold", '', 'StartCardiacTriggerCountThreshold'), + 0x00189718: ('FD', '1', "Start Respiratory Trigger Count Threshold", '', 'StartRespiratoryTriggerCountThreshold'), + 0x00189719: ('FD', '1', "Termination Counts Threshold", '', 'TerminationCountsThreshold'), + 0x00189720: ('FD', '1', "Termination Density Threshold", '', 'TerminationDensityThreshold'), + 0x00189721: ('FD', '1', "Termination Relative Density Threshold", '', 'TerminationRelativeDensityThreshold'), + 0x00189722: ('FD', '1', "Termination Time Threshold", '', 'TerminationTimeThreshold'), + 0x00189723: ('FD', '1', "Termination Cardiac Trigger Count Threshold", '', 'TerminationCardiacTriggerCountThreshold'), + 0x00189724: ('FD', '1', "Termination Respiratory Trigger Count Threshold", '', 'TerminationRespiratoryTriggerCountThreshold'), + 0x00189725: ('CS', '1', "Detector Geometry", '', 'DetectorGeometry'), + 0x00189726: ('FD', '1', "Transverse Detector Separation", '', 'TransverseDetectorSeparation'), + 0x00189727: ('FD', '1', "Axial Detector Dimension", '', 'AxialDetectorDimension'), + 0x00189729: ('US', '1', "Radiopharmaceutical Agent Number", '', 'RadiopharmaceuticalAgentNumber'), + 0x00189732: ('SQ', '1', "PET Frame Acquisition Sequence", '', 'PETFrameAcquisitionSequence'), + 0x00189733: ('SQ', '1', "PET Detector Motion Details Sequence", '', 'PETDetectorMotionDetailsSequence'), + 0x00189734: ('SQ', '1', "PET Table Dynamics Sequence", '', 'PETTableDynamicsSequence'), + 0x00189735: ('SQ', '1', "PET Position Sequence", '', 'PETPositionSequence'), + 0x00189736: ('SQ', '1', "PET Frame Correction Factors Sequence", '', 'PETFrameCorrectionFactorsSequence'), + 0x00189737: ('SQ', '1', "Radiopharmaceutical Usage Sequence", '', 'RadiopharmaceuticalUsageSequence'), + 0x00189738: ('CS', '1', "Attenuation Correction Source", '', 'AttenuationCorrectionSource'), + 0x00189739: ('US', '1', "Number of Iterations", '', 'NumberOfIterations'), + 0x00189740: ('US', '1', "Number of Subsets", '', 'NumberOfSubsets'), + 0x00189749: ('SQ', '1', "PET Reconstruction Sequence", '', 'PETReconstructionSequence'), + 0x00189751: ('SQ', '1', "PET Frame Type Sequence", '', 'PETFrameTypeSequence'), + 0x00189755: ('CS', '1', "Time of Flight Information Used", '', 'TimeOfFlightInformationUsed'), + 0x00189756: ('CS', '1', "Reconstruction Type", '', 'ReconstructionType'), + 0x00189758: ('CS', '1', "Decay Corrected", '', 'DecayCorrected'), + 0x00189759: ('CS', '1', "Attenuation Corrected", '', 'AttenuationCorrected'), + 0x00189760: ('CS', '1', "Scatter Corrected", '', 'ScatterCorrected'), + 0x00189761: ('CS', '1', "Dead Time Corrected", '', 'DeadTimeCorrected'), + 0x00189762: ('CS', '1', "Gantry Motion Corrected", '', 'GantryMotionCorrected'), + 0x00189763: ('CS', '1', "Patient Motion Corrected", '', 'PatientMotionCorrected'), + 0x00189764: ('CS', '1', "Count Loss Normalization Corrected", '', 'CountLossNormalizationCorrected'), + 0x00189765: ('CS', '1', "Randoms Corrected", '', 'RandomsCorrected'), + 0x00189766: ('CS', '1', "Non-uniform Radial Sampling Corrected", '', 'NonUniformRadialSamplingCorrected'), + 0x00189767: ('CS', '1', "Sensitivity Calibrated", '', 'SensitivityCalibrated'), + 0x00189768: ('CS', '1', "Detector Normalization Correction", '', 'DetectorNormalizationCorrection'), + 0x00189769: ('CS', '1', "Iterative Reconstruction Method", '', 'IterativeReconstructionMethod'), + 0x00189770: ('CS', '1', "Attenuation Correction Temporal Relationship", '', 'AttenuationCorrectionTemporalRelationship'), + 0x00189771: ('SQ', '1', "Patient Physiological State Sequence", '', 'PatientPhysiologicalStateSequence'), + 0x00189772: ('SQ', '1', "Patient Physiological State Code Sequence", '', 'PatientPhysiologicalStateCodeSequence'), + 0x00189801: ('FD', '1-n', "Depth(s) of Focus", '', 'DepthsOfFocus'), + 0x00189803: ('SQ', '1', "Excluded Intervals Sequence", '', 'ExcludedIntervalsSequence'), + 0x00189804: ('DT', '1', "Exclusion Start DateTime", '', 'ExclusionStartDateTime'), + 0x00189805: ('FD', '1', "Exclusion Duration", '', 'ExclusionDuration'), + 0x00189806: ('SQ', '1', "US Image Description Sequence", '', 'USImageDescriptionSequence'), + 0x00189807: ('SQ', '1', "Image Data Type Sequence", '', 'ImageDataTypeSequence'), + 0x00189808: ('CS', '1', "Data Type", '', 'DataType'), + 0x00189809: ('SQ', '1', "Transducer Scan Pattern Code Sequence", '', 'TransducerScanPatternCodeSequence'), + 0x0018980B: ('CS', '1', "Aliased Data Type", '', 'AliasedDataType'), + 0x0018980C: ('CS', '1', "Position Measuring Device Used", '', 'PositionMeasuringDeviceUsed'), + 0x0018980D: ('SQ', '1', "Transducer Geometry Code Sequence", '', 'TransducerGeometryCodeSequence'), + 0x0018980E: ('SQ', '1', "Transducer Beam Steering Code Sequence", '', 'TransducerBeamSteeringCodeSequence'), + 0x0018980F: ('SQ', '1', "Transducer Application Code Sequence", '', 'TransducerApplicationCodeSequence'), + 0x00189810: ('US or SS', '1', "Zero Velocity Pixel Value", '', 'ZeroVelocityPixelValue'), + 0x0018A001: ('SQ', '1', "Contributing Equipment Sequence", '', 'ContributingEquipmentSequence'), + 0x0018A002: ('DT', '1', "Contribution DateTime", '', 'ContributionDateTime'), + 0x0018A003: ('ST', '1', "Contribution Description", '', 'ContributionDescription'), + 0x0020000D: ('UI', '1', "Study Instance UID", '', 'StudyInstanceUID'), + 0x0020000E: ('UI', '1', "Series Instance UID", '', 'SeriesInstanceUID'), + 0x00200010: ('SH', '1', "Study ID", '', 'StudyID'), + 0x00200011: ('IS', '1', "Series Number", '', 'SeriesNumber'), + 0x00200012: ('IS', '1', "Acquisition Number", '', 'AcquisitionNumber'), + 0x00200013: ('IS', '1', "Instance Number", '', 'InstanceNumber'), + 0x00200014: ('IS', '1', "Isotope Number", 'Retired', 'IsotopeNumber'), + 0x00200015: ('IS', '1', "Phase Number", 'Retired', 'PhaseNumber'), + 0x00200016: ('IS', '1', "Interval Number", 'Retired', 'IntervalNumber'), + 0x00200017: ('IS', '1', "Time Slot Number", 'Retired', 'TimeSlotNumber'), + 0x00200018: ('IS', '1', "Angle Number", 'Retired', 'AngleNumber'), + 0x00200019: ('IS', '1', "Item Number", '', 'ItemNumber'), + 0x00200020: ('CS', '2', "Patient Orientation", '', 'PatientOrientation'), + 0x00200022: ('IS', '1', "Overlay Number", 'Retired', 'OverlayNumber'), + 0x00200024: ('IS', '1', "Curve Number", 'Retired', 'CurveNumber'), + 0x00200026: ('IS', '1', "LUT Number", 'Retired', 'LUTNumber'), + 0x00200030: ('DS', '3', "Image Position", 'Retired', 'ImagePosition'), + 0x00200032: ('DS', '3', "Image Position (Patient)", '', 'ImagePositionPatient'), + 0x00200035: ('DS', '6', "Image Orientation", 'Retired', 'ImageOrientation'), + 0x00200037: ('DS', '6', "Image Orientation (Patient)", '', 'ImageOrientationPatient'), + 0x00200050: ('DS', '1', "Location", 'Retired', 'Location'), + 0x00200052: ('UI', '1', "Frame of Reference UID", '', 'FrameOfReferenceUID'), + 0x00200060: ('CS', '1', "Laterality", '', 'Laterality'), + 0x00200062: ('CS', '1', "Image Laterality", '', 'ImageLaterality'), + 0x00200070: ('LO', '1', "Image Geometry Type", 'Retired', 'ImageGeometryType'), + 0x00200080: ('CS', '1-n', "Masking Image", 'Retired', 'MaskingImage'), + 0x002000AA: ('IS', '1', "Report Number", 'Retired', 'ReportNumber'), + 0x00200100: ('IS', '1', "Temporal Position Identifier", '', 'TemporalPositionIdentifier'), + 0x00200105: ('IS', '1', "Number of Temporal Positions", '', 'NumberOfTemporalPositions'), + 0x00200110: ('DS', '1', "Temporal Resolution", '', 'TemporalResolution'), + 0x00200200: ('UI', '1', "Synchronization Frame of Reference UID", '', 'SynchronizationFrameOfReferenceUID'), + 0x00200242: ('UI', '1', "SOP Instance UID of Concatenation Source", '', 'SOPInstanceUIDOfConcatenationSource'), + 0x00201000: ('IS', '1', "Series in Study", 'Retired', 'SeriesInStudy'), + 0x00201001: ('IS', '1', "Acquisitions in Series", 'Retired', 'AcquisitionsInSeries'), + 0x00201002: ('IS', '1', "Images in Acquisition", '', 'ImagesInAcquisition'), + 0x00201003: ('IS', '1', "Images in Series", 'Retired', 'ImagesInSeries'), + 0x00201004: ('IS', '1', "Acquisitions in Study", 'Retired', 'AcquisitionsInStudy'), + 0x00201005: ('IS', '1', "Images in Study", 'Retired', 'ImagesInStudy'), + 0x00201020: ('LO', '1-n', "Reference", 'Retired', 'Reference'), + 0x00201040: ('LO', '1', "Position Reference Indicator", '', 'PositionReferenceIndicator'), + 0x00201041: ('DS', '1', "Slice Location", '', 'SliceLocation'), + 0x00201070: ('IS', '1-n', "Other Study Numbers", 'Retired', 'OtherStudyNumbers'), + 0x00201200: ('IS', '1', "Number of Patient Related Studies", '', 'NumberOfPatientRelatedStudies'), + 0x00201202: ('IS', '1', "Number of Patient Related Series", '', 'NumberOfPatientRelatedSeries'), + 0x00201204: ('IS', '1', "Number of Patient Related Instances", '', 'NumberOfPatientRelatedInstances'), + 0x00201206: ('IS', '1', "Number of Study Related Series", '', 'NumberOfStudyRelatedSeries'), + 0x00201208: ('IS', '1', "Number of Study Related Instances", '', 'NumberOfStudyRelatedInstances'), + 0x00201209: ('IS', '1', "Number of Series Related Instances", '', 'NumberOfSeriesRelatedInstances'), + 0x00203401: ('CS', '1', "Modifying Device ID", 'Retired', 'ModifyingDeviceID'), + 0x00203402: ('CS', '1', "Modified Image ID", 'Retired', 'ModifiedImageID'), + 0x00203403: ('DA', '1', "Modified Image Date", 'Retired', 'ModifiedImageDate'), + 0x00203404: ('LO', '1', "Modifying Device Manufacturer", 'Retired', 'ModifyingDeviceManufacturer'), + 0x00203405: ('TM', '1', "Modified Image Time", 'Retired', 'ModifiedImageTime'), + 0x00203406: ('LO', '1', "Modified Image Description", 'Retired', 'ModifiedImageDescription'), + 0x00204000: ('LT', '1', "Image Comments", '', 'ImageComments'), + 0x00205000: ('AT', '1-n', "Original Image Identification", 'Retired', 'OriginalImageIdentification'), + 0x00205002: ('LO', '1-n', "Original Image Identification Nomenclature", 'Retired', 'OriginalImageIdentificationNomenclature'), + 0x00209056: ('SH', '1', "Stack ID", '', 'StackID'), + 0x00209057: ('UL', '1', "In-Stack Position Number", '', 'InStackPositionNumber'), + 0x00209071: ('SQ', '1', "Frame Anatomy Sequence", '', 'FrameAnatomySequence'), + 0x00209072: ('CS', '1', "Frame Laterality", '', 'FrameLaterality'), + 0x00209111: ('SQ', '1', "Frame Content Sequence", '', 'FrameContentSequence'), + 0x00209113: ('SQ', '1', "Plane Position Sequence", '', 'PlanePositionSequence'), + 0x00209116: ('SQ', '1', "Plane Orientation Sequence", '', 'PlaneOrientationSequence'), + 0x00209128: ('UL', '1', "Temporal Position Index", '', 'TemporalPositionIndex'), + 0x00209153: ('FD', '1', "Nominal Cardiac Trigger Delay Time", '', 'NominalCardiacTriggerDelayTime'), + 0x00209154: ('FL', '1', "Nominal Cardiac Trigger Time Prior To R-Peak", '', 'NominalCardiacTriggerTimePriorToRPeak'), + 0x00209155: ('FL', '1', "Actual Cardiac Trigger Time Prior To R-Peak", '', 'ActualCardiacTriggerTimePriorToRPeak'), + 0x00209156: ('US', '1', "Frame Acquisition Number", '', 'FrameAcquisitionNumber'), + 0x00209157: ('UL', '1-n', "Dimension Index Values", '', 'DimensionIndexValues'), + 0x00209158: ('LT', '1', "Frame Comments", '', 'FrameComments'), + 0x00209161: ('UI', '1', "Concatenation UID", '', 'ConcatenationUID'), + 0x00209162: ('US', '1', "In-concatenation Number", '', 'InConcatenationNumber'), + 0x00209163: ('US', '1', "In-concatenation Total Number", '', 'InConcatenationTotalNumber'), + 0x00209164: ('UI', '1', "Dimension Organization UID", '', 'DimensionOrganizationUID'), + 0x00209165: ('AT', '1', "Dimension Index Pointer", '', 'DimensionIndexPointer'), + 0x00209167: ('AT', '1', "Functional Group Pointer", '', 'FunctionalGroupPointer'), + 0x00209170: ('SQ', '1', "Unassigned Shared Converted Attributes Sequence", '', 'UnassignedSharedConvertedAttributesSequence'), + 0x00209171: ('SQ', '1', "Unassigned Per-Frame Converted Attributes Sequence", '', 'UnassignedPerFrameConvertedAttributesSequence'), + 0x00209172: ('SQ', '1', "Conversion Source Attributes Sequence", '', 'ConversionSourceAttributesSequence'), + 0x00209213: ('LO', '1', "Dimension Index Private Creator", '', 'DimensionIndexPrivateCreator'), + 0x00209221: ('SQ', '1', "Dimension Organization Sequence", '', 'DimensionOrganizationSequence'), + 0x00209222: ('SQ', '1', "Dimension Index Sequence", '', 'DimensionIndexSequence'), + 0x00209228: ('UL', '1', "Concatenation Frame Offset Number", '', 'ConcatenationFrameOffsetNumber'), + 0x00209238: ('LO', '1', "Functional Group Private Creator", '', 'FunctionalGroupPrivateCreator'), + 0x00209241: ('FL', '1', "Nominal Percentage of Cardiac Phase", '', 'NominalPercentageOfCardiacPhase'), + 0x00209245: ('FL', '1', "Nominal Percentage of Respiratory Phase", '', 'NominalPercentageOfRespiratoryPhase'), + 0x00209246: ('FL', '1', "Starting Respiratory Amplitude", '', 'StartingRespiratoryAmplitude'), + 0x00209247: ('CS', '1', "Starting Respiratory Phase", '', 'StartingRespiratoryPhase'), + 0x00209248: ('FL', '1', "Ending Respiratory Amplitude", '', 'EndingRespiratoryAmplitude'), + 0x00209249: ('CS', '1', "Ending Respiratory Phase", '', 'EndingRespiratoryPhase'), + 0x00209250: ('CS', '1', "Respiratory Trigger Type", '', 'RespiratoryTriggerType'), + 0x00209251: ('FD', '1', "R-R Interval Time Nominal", '', 'RRIntervalTimeNominal'), + 0x00209252: ('FD', '1', "Actual Cardiac Trigger Delay Time", '', 'ActualCardiacTriggerDelayTime'), + 0x00209253: ('SQ', '1', "Respiratory Synchronization Sequence", '', 'RespiratorySynchronizationSequence'), + 0x00209254: ('FD', '1', "Respiratory Interval Time", '', 'RespiratoryIntervalTime'), + 0x00209255: ('FD', '1', "Nominal Respiratory Trigger Delay Time", '', 'NominalRespiratoryTriggerDelayTime'), + 0x00209256: ('FD', '1', "Respiratory Trigger Delay Threshold", '', 'RespiratoryTriggerDelayThreshold'), + 0x00209257: ('FD', '1', "Actual Respiratory Trigger Delay Time", '', 'ActualRespiratoryTriggerDelayTime'), + 0x00209301: ('FD', '3', "Image Position (Volume)", '', 'ImagePositionVolume'), + 0x00209302: ('FD', '6', "Image Orientation (Volume)", '', 'ImageOrientationVolume'), + 0x00209307: ('CS', '1', "Ultrasound Acquisition Geometry", '', 'UltrasoundAcquisitionGeometry'), + 0x00209308: ('FD', '3', "Apex Position", '', 'ApexPosition'), + 0x00209309: ('FD', '16', "Volume to Transducer Mapping Matrix", '', 'VolumeToTransducerMappingMatrix'), + 0x0020930A: ('FD', '16', "Volume to Table Mapping Matrix", '', 'VolumeToTableMappingMatrix'), + 0x0020930C: ('CS', '1', "Patient Frame of Reference Source", '', 'PatientFrameOfReferenceSource'), + 0x0020930D: ('FD', '1', "Temporal Position Time Offset", '', 'TemporalPositionTimeOffset'), + 0x0020930E: ('SQ', '1', "Plane Position (Volume) Sequence", '', 'PlanePositionVolumeSequence'), + 0x0020930F: ('SQ', '1', "Plane Orientation (Volume) Sequence", '', 'PlaneOrientationVolumeSequence'), + 0x00209310: ('SQ', '1', "Temporal Position Sequence", '', 'TemporalPositionSequence'), + 0x00209311: ('CS', '1', "Dimension Organization Type", '', 'DimensionOrganizationType'), + 0x00209312: ('UI', '1', "Volume Frame of Reference UID", '', 'VolumeFrameOfReferenceUID'), + 0x00209313: ('UI', '1', "Table Frame of Reference UID", '', 'TableFrameOfReferenceUID'), + 0x00209421: ('LO', '1', "Dimension Description Label", '', 'DimensionDescriptionLabel'), + 0x00209450: ('SQ', '1', "Patient Orientation in Frame Sequence", '', 'PatientOrientationInFrameSequence'), + 0x00209453: ('LO', '1', "Frame Label", '', 'FrameLabel'), + 0x00209518: ('US', '1-n', "Acquisition Index", '', 'AcquisitionIndex'), + 0x00209529: ('SQ', '1', "Contributing SOP Instances Reference Sequence", '', 'ContributingSOPInstancesReferenceSequence'), + 0x00209536: ('US', '1', "Reconstruction Index", '', 'ReconstructionIndex'), + 0x00220001: ('US', '1', "Light Path Filter Pass-Through Wavelength", '', 'LightPathFilterPassThroughWavelength'), + 0x00220002: ('US', '2', "Light Path Filter Pass Band", '', 'LightPathFilterPassBand'), + 0x00220003: ('US', '1', "Image Path Filter Pass-Through Wavelength", '', 'ImagePathFilterPassThroughWavelength'), + 0x00220004: ('US', '2', "Image Path Filter Pass Band", '', 'ImagePathFilterPassBand'), + 0x00220005: ('CS', '1', "Patient Eye Movement Commanded", '', 'PatientEyeMovementCommanded'), + 0x00220006: ('SQ', '1', "Patient Eye Movement Command Code Sequence", '', 'PatientEyeMovementCommandCodeSequence'), + 0x00220007: ('FL', '1', "Spherical Lens Power", '', 'SphericalLensPower'), + 0x00220008: ('FL', '1', "Cylinder Lens Power", '', 'CylinderLensPower'), + 0x00220009: ('FL', '1', "Cylinder Axis", '', 'CylinderAxis'), + 0x0022000A: ('FL', '1', "Emmetropic Magnification", '', 'EmmetropicMagnification'), + 0x0022000B: ('FL', '1', "Intra Ocular Pressure", '', 'IntraOcularPressure'), + 0x0022000C: ('FL', '1', "Horizontal Field of View", '', 'HorizontalFieldOfView'), + 0x0022000D: ('CS', '1', "Pupil Dilated", '', 'PupilDilated'), + 0x0022000E: ('FL', '1', "Degree of Dilation", '', 'DegreeOfDilation'), + 0x00220010: ('FL', '1', "Stereo Baseline Angle", '', 'StereoBaselineAngle'), + 0x00220011: ('FL', '1', "Stereo Baseline Displacement", '', 'StereoBaselineDisplacement'), + 0x00220012: ('FL', '1', "Stereo Horizontal Pixel Offset", '', 'StereoHorizontalPixelOffset'), + 0x00220013: ('FL', '1', "Stereo Vertical Pixel Offset", '', 'StereoVerticalPixelOffset'), + 0x00220014: ('FL', '1', "Stereo Rotation", '', 'StereoRotation'), + 0x00220015: ('SQ', '1', "Acquisition Device Type Code Sequence", '', 'AcquisitionDeviceTypeCodeSequence'), + 0x00220016: ('SQ', '1', "Illumination Type Code Sequence", '', 'IlluminationTypeCodeSequence'), + 0x00220017: ('SQ', '1', "Light Path Filter Type Stack Code Sequence", '', 'LightPathFilterTypeStackCodeSequence'), + 0x00220018: ('SQ', '1', "Image Path Filter Type Stack Code Sequence", '', 'ImagePathFilterTypeStackCodeSequence'), + 0x00220019: ('SQ', '1', "Lenses Code Sequence", '', 'LensesCodeSequence'), + 0x0022001A: ('SQ', '1', "Channel Description Code Sequence", '', 'ChannelDescriptionCodeSequence'), + 0x0022001B: ('SQ', '1', "Refractive State Sequence", '', 'RefractiveStateSequence'), + 0x0022001C: ('SQ', '1', "Mydriatic Agent Code Sequence", '', 'MydriaticAgentCodeSequence'), + 0x0022001D: ('SQ', '1', "Relative Image Position Code Sequence", '', 'RelativeImagePositionCodeSequence'), + 0x0022001E: ('FL', '1', "Camera Angle of View", '', 'CameraAngleOfView'), + 0x00220020: ('SQ', '1', "Stereo Pairs Sequence", '', 'StereoPairsSequence'), + 0x00220021: ('SQ', '1', "Left Image Sequence", '', 'LeftImageSequence'), + 0x00220022: ('SQ', '1', "Right Image Sequence", '', 'RightImageSequence'), + 0x00220030: ('FL', '1', "Axial Length of the Eye", '', 'AxialLengthOfTheEye'), + 0x00220031: ('SQ', '1', "Ophthalmic Frame Location Sequence", '', 'OphthalmicFrameLocationSequence'), + 0x00220032: ('FL', '2-2n', "Reference Coordinates", '', 'ReferenceCoordinates'), + 0x00220035: ('FL', '1', "Depth Spatial Resolution", '', 'DepthSpatialResolution'), + 0x00220036: ('FL', '1', "Maximum Depth Distortion", '', 'MaximumDepthDistortion'), + 0x00220037: ('FL', '1', "Along-scan Spatial Resolution", '', 'AlongScanSpatialResolution'), + 0x00220038: ('FL', '1', "Maximum Along-scan Distortion", '', 'MaximumAlongScanDistortion'), + 0x00220039: ('CS', '1', "Ophthalmic Image Orientation", '', 'OphthalmicImageOrientation'), + 0x00220041: ('FL', '1', "Depth of Transverse Image", '', 'DepthOfTransverseImage'), + 0x00220042: ('SQ', '1', "Mydriatic Agent Concentration Units Sequence", '', 'MydriaticAgentConcentrationUnitsSequence'), + 0x00220048: ('FL', '1', "Across-scan Spatial Resolution", '', 'AcrossScanSpatialResolution'), + 0x00220049: ('FL', '1', "Maximum Across-scan Distortion", '', 'MaximumAcrossScanDistortion'), + 0x0022004E: ('DS', '1', "Mydriatic Agent Concentration", '', 'MydriaticAgentConcentration'), + 0x00220055: ('FL', '1', "Illumination Wave Length", '', 'IlluminationWaveLength'), + 0x00220056: ('FL', '1', "Illumination Power", '', 'IlluminationPower'), + 0x00220057: ('FL', '1', "Illumination Bandwidth", '', 'IlluminationBandwidth'), + 0x00220058: ('SQ', '1', "Mydriatic Agent Sequence", '', 'MydriaticAgentSequence'), + 0x00221007: ('SQ', '1', "Ophthalmic Axial Measurements Right Eye Sequence", '', 'OphthalmicAxialMeasurementsRightEyeSequence'), + 0x00221008: ('SQ', '1', "Ophthalmic Axial Measurements Left Eye Sequence", '', 'OphthalmicAxialMeasurementsLeftEyeSequence'), + 0x00221009: ('CS', '1', "Ophthalmic Axial Measurements Device Type", '', 'OphthalmicAxialMeasurementsDeviceType'), + 0x00221010: ('CS', '1', "Ophthalmic Axial Length Measurements Type", '', 'OphthalmicAxialLengthMeasurementsType'), + 0x00221012: ('SQ', '1', "Ophthalmic Axial Length Sequence", '', 'OphthalmicAxialLengthSequence'), + 0x00221019: ('FL', '1', "Ophthalmic Axial Length", '', 'OphthalmicAxialLength'), + 0x00221024: ('SQ', '1', "Lens Status Code Sequence", '', 'LensStatusCodeSequence'), + 0x00221025: ('SQ', '1', "Vitreous Status Code Sequence", '', 'VitreousStatusCodeSequence'), + 0x00221028: ('SQ', '1', "IOL Formula Code Sequence", '', 'IOLFormulaCodeSequence'), + 0x00221029: ('LO', '1', "IOL Formula Detail", '', 'IOLFormulaDetail'), + 0x00221033: ('FL', '1', "Keratometer Index", '', 'KeratometerIndex'), + 0x00221035: ('SQ', '1', "Source of Ophthalmic Axial Length Code Sequence", '', 'SourceOfOphthalmicAxialLengthCodeSequence'), + 0x00221037: ('FL', '1', "Target Refraction", '', 'TargetRefraction'), + 0x00221039: ('CS', '1', "Refractive Procedure Occurred", '', 'RefractiveProcedureOccurred'), + 0x00221040: ('SQ', '1', "Refractive Surgery Type Code Sequence", '', 'RefractiveSurgeryTypeCodeSequence'), + 0x00221044: ('SQ', '1', "Ophthalmic Ultrasound Method Code Sequence", '', 'OphthalmicUltrasoundMethodCodeSequence'), + 0x00221050: ('SQ', '1', "Ophthalmic Axial Length Measurements Sequence", '', 'OphthalmicAxialLengthMeasurementsSequence'), + 0x00221053: ('FL', '1', "IOL Power", '', 'IOLPower'), + 0x00221054: ('FL', '1', "Predicted Refractive Error", '', 'PredictedRefractiveError'), + 0x00221059: ('FL', '1', "Ophthalmic Axial Length Velocity", '', 'OphthalmicAxialLengthVelocity'), + 0x00221065: ('LO', '1', "Lens Status Description", '', 'LensStatusDescription'), + 0x00221066: ('LO', '1', "Vitreous Status Description", '', 'VitreousStatusDescription'), + 0x00221090: ('SQ', '1', "IOL Power Sequence", '', 'IOLPowerSequence'), + 0x00221092: ('SQ', '1', "Lens Constant Sequence", '', 'LensConstantSequence'), + 0x00221093: ('LO', '1', "IOL Manufacturer", '', 'IOLManufacturer'), + 0x00221094: ('LO', '1', "Lens Constant Description", 'Retired', 'LensConstantDescription'), + 0x00221095: ('LO', '1', "Implant Name", '', 'ImplantName'), + 0x00221096: ('SQ', '1', "Keratometry Measurement Type Code Sequence", '', 'KeratometryMeasurementTypeCodeSequence'), + 0x00221097: ('LO', '1', "Implant Part Number", '', 'ImplantPartNumber'), + 0x00221100: ('SQ', '1', "Referenced Ophthalmic Axial Measurements Sequence", '', 'ReferencedOphthalmicAxialMeasurementsSequence'), + 0x00221101: ('SQ', '1', "Ophthalmic Axial Length Measurements Segment Name Code Sequence", '', 'OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence'), + 0x00221103: ('SQ', '1', "Refractive Error Before Refractive Surgery Code Sequence", '', 'RefractiveErrorBeforeRefractiveSurgeryCodeSequence'), + 0x00221121: ('FL', '1', "IOL Power For Exact Emmetropia", '', 'IOLPowerForExactEmmetropia'), + 0x00221122: ('FL', '1', "IOL Power For Exact Target Refraction", '', 'IOLPowerForExactTargetRefraction'), + 0x00221125: ('SQ', '1', "Anterior Chamber Depth Definition Code Sequence", '', 'AnteriorChamberDepthDefinitionCodeSequence'), + 0x00221127: ('SQ', '1', "Lens Thickness Sequence", '', 'LensThicknessSequence'), + 0x00221128: ('SQ', '1', "Anterior Chamber Depth Sequence", '', 'AnteriorChamberDepthSequence'), + 0x00221130: ('FL', '1', "Lens Thickness", '', 'LensThickness'), + 0x00221131: ('FL', '1', "Anterior Chamber Depth", '', 'AnteriorChamberDepth'), + 0x00221132: ('SQ', '1', "Source of Lens Thickness Data Code Sequence", '', 'SourceOfLensThicknessDataCodeSequence'), + 0x00221133: ('SQ', '1', "Source of Anterior Chamber Depth Data Code Sequence", '', 'SourceOfAnteriorChamberDepthDataCodeSequence'), + 0x00221134: ('SQ', '1', "Source of Refractive Measurements Sequence", '', 'SourceOfRefractiveMeasurementsSequence'), + 0x00221135: ('SQ', '1', "Source of Refractive Measurements Code Sequence", '', 'SourceOfRefractiveMeasurementsCodeSequence'), + 0x00221140: ('CS', '1', "Ophthalmic Axial Length Measurement Modified", '', 'OphthalmicAxialLengthMeasurementModified'), + 0x00221150: ('SQ', '1', "Ophthalmic Axial Length Data Source Code Sequence", '', 'OphthalmicAxialLengthDataSourceCodeSequence'), + 0x00221153: ('SQ', '1', "Ophthalmic Axial Length Acquisition Method Code Sequence", 'Retired', 'OphthalmicAxialLengthAcquisitionMethodCodeSequence'), + 0x00221155: ('FL', '1', "Signal to Noise Ratio", '', 'SignalToNoiseRatio'), + 0x00221159: ('LO', '1', "Ophthalmic Axial Length Data Source Description", '', 'OphthalmicAxialLengthDataSourceDescription'), + 0x00221210: ('SQ', '1', "Ophthalmic Axial Length Measurements Total Length Sequence", '', 'OphthalmicAxialLengthMeasurementsTotalLengthSequence'), + 0x00221211: ('SQ', '1', "Ophthalmic Axial Length Measurements Segmental Length Sequence", '', 'OphthalmicAxialLengthMeasurementsSegmentalLengthSequence'), + 0x00221212: ('SQ', '1', "Ophthalmic Axial Length Measurements Length Summation Sequence", '', 'OphthalmicAxialLengthMeasurementsLengthSummationSequence'), + 0x00221220: ('SQ', '1', "Ultrasound Ophthalmic Axial Length Measurements Sequence", '', 'UltrasoundOphthalmicAxialLengthMeasurementsSequence'), + 0x00221225: ('SQ', '1', "Optical Ophthalmic Axial Length Measurements Sequence", '', 'OpticalOphthalmicAxialLengthMeasurementsSequence'), + 0x00221230: ('SQ', '1', "Ultrasound Selected Ophthalmic Axial Length Sequence", '', 'UltrasoundSelectedOphthalmicAxialLengthSequence'), + 0x00221250: ('SQ', '1', "Ophthalmic Axial Length Selection Method Code Sequence", '', 'OphthalmicAxialLengthSelectionMethodCodeSequence'), + 0x00221255: ('SQ', '1', "Optical Selected Ophthalmic Axial Length Sequence", '', 'OpticalSelectedOphthalmicAxialLengthSequence'), + 0x00221257: ('SQ', '1', "Selected Segmental Ophthalmic Axial Length Sequence", '', 'SelectedSegmentalOphthalmicAxialLengthSequence'), + 0x00221260: ('SQ', '1', "Selected Total Ophthalmic Axial Length Sequence", '', 'SelectedTotalOphthalmicAxialLengthSequence'), + 0x00221262: ('SQ', '1', "Ophthalmic Axial Length Quality Metric Sequence", '', 'OphthalmicAxialLengthQualityMetricSequence'), + 0x00221265: ('SQ', '1', "Ophthalmic Axial Length Quality Metric Type Code Sequence", 'Retired', 'OphthalmicAxialLengthQualityMetricTypeCodeSequence'), + 0x00221273: ('LO', '1', "Ophthalmic Axial Length Quality Metric Type Description", 'Retired', 'OphthalmicAxialLengthQualityMetricTypeDescription'), + 0x00221300: ('SQ', '1', "Intraocular Lens Calculations Right Eye Sequence", '', 'IntraocularLensCalculationsRightEyeSequence'), + 0x00221310: ('SQ', '1', "Intraocular Lens Calculations Left Eye Sequence", '', 'IntraocularLensCalculationsLeftEyeSequence'), + 0x00221330: ('SQ', '1', "Referenced Ophthalmic Axial Length Measurement QC Image Sequence", '', 'ReferencedOphthalmicAxialLengthMeasurementQCImageSequence'), + 0x00221415: ('CS', '1', "Ophthalmic Mapping Device Type", '', 'OphthalmicMappingDeviceType'), + 0x00221420: ('SQ', '1', "Acquisition Method Code Sequence", '', 'AcquisitionMethodCodeSequence'), + 0x00221423: ('SQ', '1', "Acquisition Method Algorithm Sequence", '', 'AcquisitionMethodAlgorithmSequence'), + 0x00221436: ('SQ', '1', "Ophthalmic Thickness Map Type Code Sequence", '', 'OphthalmicThicknessMapTypeCodeSequence'), + 0x00221443: ('SQ', '1', "Ophthalmic Thickness Mapping Normals Sequence", '', 'OphthalmicThicknessMappingNormalsSequence'), + 0x00221445: ('SQ', '1', "Retinal Thickness Definition Code Sequence", '', 'RetinalThicknessDefinitionCodeSequence'), + 0x00221450: ('SQ', '1', "Pixel Value Mapping to Coded Concept Sequence", '', 'PixelValueMappingToCodedConceptSequence'), + 0x00221452: ('US or SS', '1', "Mapped Pixel Value", '', 'MappedPixelValue'), + 0x00221454: ('LO', '1', "Pixel Value Mapping Explanation", '', 'PixelValueMappingExplanation'), + 0x00221458: ('SQ', '1', "Ophthalmic Thickness Map Quality Threshold Sequence", '', 'OphthalmicThicknessMapQualityThresholdSequence'), + 0x00221460: ('FL', '1', "Ophthalmic Thickness Map Threshold Quality Rating", '', 'OphthalmicThicknessMapThresholdQualityRating'), + 0x00221463: ('FL', '2', "Anatomic Structure Reference Point", '', 'AnatomicStructureReferencePoint'), + 0x00221465: ('SQ', '1', "Registration to Localizer Sequence", '', 'RegistrationToLocalizerSequence'), + 0x00221466: ('CS', '1', "Registered Localizer Units", '', 'RegisteredLocalizerUnits'), + 0x00221467: ('FL', '2', "Registered Localizer Top Left Hand Corner", '', 'RegisteredLocalizerTopLeftHandCorner'), + 0x00221468: ('FL', '2', "Registered Localizer Bottom Right Hand Corner", '', 'RegisteredLocalizerBottomRightHandCorner'), + 0x00221470: ('SQ', '1', "Ophthalmic Thickness Map Quality Rating Sequence", '', 'OphthalmicThicknessMapQualityRatingSequence'), + 0x00221472: ('SQ', '1', "Relevant OPT Attributes Sequence", '', 'RelevantOPTAttributesSequence'), + 0x00240010: ('FL', '1', "Visual Field Horizontal Extent", '', 'VisualFieldHorizontalExtent'), + 0x00240011: ('FL', '1', "Visual Field Vertical Extent", '', 'VisualFieldVerticalExtent'), + 0x00240012: ('CS', '1', "Visual Field Shape", '', 'VisualFieldShape'), + 0x00240016: ('SQ', '1', "Screening Test Mode Code Sequence", '', 'ScreeningTestModeCodeSequence'), + 0x00240018: ('FL', '1', "Maximum Stimulus Luminance", '', 'MaximumStimulusLuminance'), + 0x00240020: ('FL', '1', "Background Luminance", '', 'BackgroundLuminance'), + 0x00240021: ('SQ', '1', "Stimulus Color Code Sequence", '', 'StimulusColorCodeSequence'), + 0x00240024: ('SQ', '1', "Background Illumination Color Code Sequence", '', 'BackgroundIlluminationColorCodeSequence'), + 0x00240025: ('FL', '1', "Stimulus Area", '', 'StimulusArea'), + 0x00240028: ('FL', '1', "Stimulus Presentation Time", '', 'StimulusPresentationTime'), + 0x00240032: ('SQ', '1', "Fixation Sequence", '', 'FixationSequence'), + 0x00240033: ('SQ', '1', "Fixation Monitoring Code Sequence", '', 'FixationMonitoringCodeSequence'), + 0x00240034: ('SQ', '1', "Visual Field Catch Trial Sequence", '', 'VisualFieldCatchTrialSequence'), + 0x00240035: ('US', '1', "Fixation Checked Quantity", '', 'FixationCheckedQuantity'), + 0x00240036: ('US', '1', "Patient Not Properly Fixated Quantity", '', 'PatientNotProperlyFixatedQuantity'), + 0x00240037: ('CS', '1', "Presented Visual Stimuli Data Flag", '', 'PresentedVisualStimuliDataFlag'), + 0x00240038: ('US', '1', "Number of Visual Stimuli", '', 'NumberOfVisualStimuli'), + 0x00240039: ('CS', '1', "Excessive Fixation Losses Data Flag", '', 'ExcessiveFixationLossesDataFlag'), + 0x00240040: ('CS', '1', "Excessive Fixation Losses", '', 'ExcessiveFixationLosses'), + 0x00240042: ('US', '1', "Stimuli Retesting Quantity", '', 'StimuliRetestingQuantity'), + 0x00240044: ('LT', '1', "Comments on Patient's Performance of Visual Field", '', 'CommentsOnPatientPerformanceOfVisualField'), + 0x00240045: ('CS', '1', "False Negatives Estimate Flag", '', 'FalseNegativesEstimateFlag'), + 0x00240046: ('FL', '1', "False Negatives Estimate", '', 'FalseNegativesEstimate'), + 0x00240048: ('US', '1', "Negative Catch Trials Quantity", '', 'NegativeCatchTrialsQuantity'), + 0x00240050: ('US', '1', "False Negatives Quantity", '', 'FalseNegativesQuantity'), + 0x00240051: ('CS', '1', "Excessive False Negatives Data Flag", '', 'ExcessiveFalseNegativesDataFlag'), + 0x00240052: ('CS', '1', "Excessive False Negatives", '', 'ExcessiveFalseNegatives'), + 0x00240053: ('CS', '1', "False Positives Estimate Flag", '', 'FalsePositivesEstimateFlag'), + 0x00240054: ('FL', '1', "False Positives Estimate", '', 'FalsePositivesEstimate'), + 0x00240055: ('CS', '1', "Catch Trials Data Flag", '', 'CatchTrialsDataFlag'), + 0x00240056: ('US', '1', "Positive Catch Trials Quantity", '', 'PositiveCatchTrialsQuantity'), + 0x00240057: ('CS', '1', "Test Point Normals Data Flag", '', 'TestPointNormalsDataFlag'), + 0x00240058: ('SQ', '1', "Test Point Normals Sequence", '', 'TestPointNormalsSequence'), + 0x00240059: ('CS', '1', "Global Deviation Probability Normals Flag", '', 'GlobalDeviationProbabilityNormalsFlag'), + 0x00240060: ('US', '1', "False Positives Quantity", '', 'FalsePositivesQuantity'), + 0x00240061: ('CS', '1', "Excessive False Positives Data Flag", '', 'ExcessiveFalsePositivesDataFlag'), + 0x00240062: ('CS', '1', "Excessive False Positives", '', 'ExcessiveFalsePositives'), + 0x00240063: ('CS', '1', "Visual Field Test Normals Flag", '', 'VisualFieldTestNormalsFlag'), + 0x00240064: ('SQ', '1', "Results Normals Sequence", '', 'ResultsNormalsSequence'), + 0x00240065: ('SQ', '1', "Age Corrected Sensitivity Deviation Algorithm Sequence", '', 'AgeCorrectedSensitivityDeviationAlgorithmSequence'), + 0x00240066: ('FL', '1', "Global Deviation From Normal", '', 'GlobalDeviationFromNormal'), + 0x00240067: ('SQ', '1', "Generalized Defect Sensitivity Deviation Algorithm Sequence", '', 'GeneralizedDefectSensitivityDeviationAlgorithmSequence'), + 0x00240068: ('FL', '1', "Localized Deviation From Normal", '', 'LocalizedDeviationFromNormal'), + 0x00240069: ('LO', '1', "Patient Reliability Indicator", '', 'PatientReliabilityIndicator'), + 0x00240070: ('FL', '1', "Visual Field Mean Sensitivity", '', 'VisualFieldMeanSensitivity'), + 0x00240071: ('FL', '1', "Global Deviation Probability", '', 'GlobalDeviationProbability'), + 0x00240072: ('CS', '1', "Local Deviation Probability Normals Flag", '', 'LocalDeviationProbabilityNormalsFlag'), + 0x00240073: ('FL', '1', "Localized Deviation Probability", '', 'LocalizedDeviationProbability'), + 0x00240074: ('CS', '1', "Short Term Fluctuation Calculated", '', 'ShortTermFluctuationCalculated'), + 0x00240075: ('FL', '1', "Short Term Fluctuation", '', 'ShortTermFluctuation'), + 0x00240076: ('CS', '1', "Short Term Fluctuation Probability Calculated", '', 'ShortTermFluctuationProbabilityCalculated'), + 0x00240077: ('FL', '1', "Short Term Fluctuation Probability", '', 'ShortTermFluctuationProbability'), + 0x00240078: ('CS', '1', "Corrected Localized Deviation From Normal Calculated", '', 'CorrectedLocalizedDeviationFromNormalCalculated'), + 0x00240079: ('FL', '1', "Corrected Localized Deviation From Normal", '', 'CorrectedLocalizedDeviationFromNormal'), + 0x00240080: ('CS', '1', "Corrected Localized Deviation From Normal Probability Calculated", '', 'CorrectedLocalizedDeviationFromNormalProbabilityCalculated'), + 0x00240081: ('FL', '1', "Corrected Localized Deviation From Normal Probability", '', 'CorrectedLocalizedDeviationFromNormalProbability'), + 0x00240083: ('SQ', '1', "Global Deviation Probability Sequence", '', 'GlobalDeviationProbabilitySequence'), + 0x00240085: ('SQ', '1', "Localized Deviation Probability Sequence", '', 'LocalizedDeviationProbabilitySequence'), + 0x00240086: ('CS', '1', "Foveal Sensitivity Measured", '', 'FovealSensitivityMeasured'), + 0x00240087: ('FL', '1', "Foveal Sensitivity", '', 'FovealSensitivity'), + 0x00240088: ('FL', '1', "Visual Field Test Duration", '', 'VisualFieldTestDuration'), + 0x00240089: ('SQ', '1', "Visual Field Test Point Sequence", '', 'VisualFieldTestPointSequence'), + 0x00240090: ('FL', '1', "Visual Field Test Point X-Coordinate", '', 'VisualFieldTestPointXCoordinate'), + 0x00240091: ('FL', '1', "Visual Field Test Point Y-Coordinate", '', 'VisualFieldTestPointYCoordinate'), + 0x00240092: ('FL', '1', "Age Corrected Sensitivity Deviation Value", '', 'AgeCorrectedSensitivityDeviationValue'), + 0x00240093: ('CS', '1', "Stimulus Results", '', 'StimulusResults'), + 0x00240094: ('FL', '1', "Sensitivity Value", '', 'SensitivityValue'), + 0x00240095: ('CS', '1', "Retest Stimulus Seen", '', 'RetestStimulusSeen'), + 0x00240096: ('FL', '1', "Retest Sensitivity Value", '', 'RetestSensitivityValue'), + 0x00240097: ('SQ', '1', "Visual Field Test Point Normals Sequence", '', 'VisualFieldTestPointNormalsSequence'), + 0x00240098: ('FL', '1', "Quantified Defect", '', 'QuantifiedDefect'), + 0x00240100: ('FL', '1', "Age Corrected Sensitivity Deviation Probability Value", '', 'AgeCorrectedSensitivityDeviationProbabilityValue'), + 0x00240102: ('CS', '1', "Generalized Defect Corrected Sensitivity Deviation Flag", '', 'GeneralizedDefectCorrectedSensitivityDeviationFlag'), + 0x00240103: ('FL', '1', "Generalized Defect Corrected Sensitivity Deviation Value", '', 'GeneralizedDefectCorrectedSensitivityDeviationValue'), + 0x00240104: ('FL', '1', "Generalized Defect Corrected Sensitivity Deviation Probability Value", '', 'GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue'), + 0x00240105: ('FL', '1', "Minimum Sensitivity Value", '', 'MinimumSensitivityValue'), + 0x00240106: ('CS', '1', "Blind Spot Localized", '', 'BlindSpotLocalized'), + 0x00240107: ('FL', '1', "Blind Spot X-Coordinate", '', 'BlindSpotXCoordinate'), + 0x00240108: ('FL', '1', "Blind Spot Y-Coordinate", '', 'BlindSpotYCoordinate'), + 0x00240110: ('SQ', '1', "Visual Acuity Measurement Sequence", '', 'VisualAcuityMeasurementSequence'), + 0x00240112: ('SQ', '1', "Refractive Parameters Used on Patient Sequence", '', 'RefractiveParametersUsedOnPatientSequence'), + 0x00240113: ('CS', '1', "Measurement Laterality", '', 'MeasurementLaterality'), + 0x00240114: ('SQ', '1', "Ophthalmic Patient Clinical Information Left Eye Sequence", '', 'OphthalmicPatientClinicalInformationLeftEyeSequence'), + 0x00240115: ('SQ', '1', "Ophthalmic Patient Clinical Information Right Eye Sequence", '', 'OphthalmicPatientClinicalInformationRightEyeSequence'), + 0x00240117: ('CS', '1', "Foveal Point Normative Data Flag", '', 'FovealPointNormativeDataFlag'), + 0x00240118: ('FL', '1', "Foveal Point Probability Value", '', 'FovealPointProbabilityValue'), + 0x00240120: ('CS', '1', "Screening Baseline Measured", '', 'ScreeningBaselineMeasured'), + 0x00240122: ('SQ', '1', "Screening Baseline Measured Sequence", '', 'ScreeningBaselineMeasuredSequence'), + 0x00240124: ('CS', '1', "Screening Baseline Type", '', 'ScreeningBaselineType'), + 0x00240126: ('FL', '1', "Screening Baseline Value", '', 'ScreeningBaselineValue'), + 0x00240202: ('LO', '1', "Algorithm Source", '', 'AlgorithmSource'), + 0x00240306: ('LO', '1', "Data Set Name", '', 'DataSetName'), + 0x00240307: ('LO', '1', "Data Set Version", '', 'DataSetVersion'), + 0x00240308: ('LO', '1', "Data Set Source", '', 'DataSetSource'), + 0x00240309: ('LO', '1', "Data Set Description", '', 'DataSetDescription'), + 0x00240317: ('SQ', '1', "Visual Field Test Reliability Global Index Sequence", '', 'VisualFieldTestReliabilityGlobalIndexSequence'), + 0x00240320: ('SQ', '1', "Visual Field Global Results Index Sequence", '', 'VisualFieldGlobalResultsIndexSequence'), + 0x00240325: ('SQ', '1', "Data Observation Sequence", '', 'DataObservationSequence'), + 0x00240338: ('CS', '1', "Index Normals Flag", '', 'IndexNormalsFlag'), + 0x00240341: ('FL', '1', "Index Probability", '', 'IndexProbability'), + 0x00240344: ('SQ', '1', "Index Probability Sequence", '', 'IndexProbabilitySequence'), + 0x00280002: ('US', '1', "Samples per Pixel", '', 'SamplesPerPixel'), + 0x00280003: ('US', '1', "Samples per Pixel Used", '', 'SamplesPerPixelUsed'), + 0x00280004: ('CS', '1', "Photometric Interpretation", '', 'PhotometricInterpretation'), + 0x00280005: ('US', '1', "Image Dimensions", 'Retired', 'ImageDimensions'), + 0x00280006: ('US', '1', "Planar Configuration", '', 'PlanarConfiguration'), + 0x00280008: ('IS', '1', "Number of Frames", '', 'NumberOfFrames'), + 0x00280009: ('AT', '1-n', "Frame Increment Pointer", '', 'FrameIncrementPointer'), + 0x0028000A: ('AT', '1-n', "Frame Dimension Pointer", '', 'FrameDimensionPointer'), + 0x00280010: ('US', '1', "Rows", '', 'Rows'), + 0x00280011: ('US', '1', "Columns", '', 'Columns'), + 0x00280012: ('US', '1', "Planes", 'Retired', 'Planes'), + 0x00280014: ('US', '1', "Ultrasound Color Data Present", '', 'UltrasoundColorDataPresent'), + 0x00280020: ('OB', '1', "Retired-blank", 'Retired', ''), + 0x00280030: ('DS', '2', "Pixel Spacing", '', 'PixelSpacing'), + 0x00280031: ('DS', '2', "Zoom Factor", '', 'ZoomFactor'), + 0x00280032: ('DS', '2', "Zoom Center", '', 'ZoomCenter'), + 0x00280034: ('IS', '2', "Pixel Aspect Ratio", '', 'PixelAspectRatio'), + 0x00280040: ('CS', '1', "Image Format", 'Retired', 'ImageFormat'), + 0x00280050: ('LO', '1-n', "Manipulated Image", 'Retired', 'ManipulatedImage'), + 0x00280051: ('CS', '1-n', "Corrected Image", '', 'CorrectedImage'), + 0x0028005F: ('LO', '1', "Compression Recognition Code", 'Retired', 'CompressionRecognitionCode'), + 0x00280060: ('CS', '1', "Compression Code", 'Retired', 'CompressionCode'), + 0x00280061: ('SH', '1', "Compression Originator", 'Retired', 'CompressionOriginator'), + 0x00280062: ('LO', '1', "Compression Label", 'Retired', 'CompressionLabel'), + 0x00280063: ('SH', '1', "Compression Description", 'Retired', 'CompressionDescription'), + 0x00280065: ('CS', '1-n', "Compression Sequence", 'Retired', 'CompressionSequence'), + 0x00280066: ('AT', '1-n', "Compression Step Pointers", 'Retired', 'CompressionStepPointers'), + 0x00280068: ('US', '1', "Repeat Interval", 'Retired', 'RepeatInterval'), + 0x00280069: ('US', '1', "Bits Grouped", 'Retired', 'BitsGrouped'), + 0x00280070: ('US', '1-n', "Perimeter Table", 'Retired', 'PerimeterTable'), + 0x00280071: ('US or SS', '1', "Perimeter Value", 'Retired', 'PerimeterValue'), + 0x00280080: ('US', '1', "Predictor Rows", 'Retired', 'PredictorRows'), + 0x00280081: ('US', '1', "Predictor Columns", 'Retired', 'PredictorColumns'), + 0x00280082: ('US', '1-n', "Predictor Constants", 'Retired', 'PredictorConstants'), + 0x00280090: ('CS', '1', "Blocked Pixels", 'Retired', 'BlockedPixels'), + 0x00280091: ('US', '1', "Block Rows", 'Retired', 'BlockRows'), + 0x00280092: ('US', '1', "Block Columns", 'Retired', 'BlockColumns'), + 0x00280093: ('US', '1', "Row Overlap", 'Retired', 'RowOverlap'), + 0x00280094: ('US', '1', "Column Overlap", 'Retired', 'ColumnOverlap'), + 0x00280100: ('US', '1', "Bits Allocated", '', 'BitsAllocated'), + 0x00280101: ('US', '1', "Bits Stored", '', 'BitsStored'), + 0x00280102: ('US', '1', "High Bit", '', 'HighBit'), + 0x00280103: ('US', '1', "Pixel Representation", '', 'PixelRepresentation'), + 0x00280104: ('US or SS', '1', "Smallest Valid Pixel Value", 'Retired', 'SmallestValidPixelValue'), + 0x00280105: ('US or SS', '1', "Largest Valid Pixel Value", 'Retired', 'LargestValidPixelValue'), + 0x00280106: ('US or SS', '1', "Smallest Image Pixel Value", '', 'SmallestImagePixelValue'), + 0x00280107: ('US or SS', '1', "Largest Image Pixel Value", '', 'LargestImagePixelValue'), + 0x00280108: ('US or SS', '1', "Smallest Pixel Value in Series", '', 'SmallestPixelValueInSeries'), + 0x00280109: ('US or SS', '1', "Largest Pixel Value in Series", '', 'LargestPixelValueInSeries'), + 0x00280110: ('US or SS', '1', "Smallest Image Pixel Value in Plane", 'Retired', 'SmallestImagePixelValueInPlane'), + 0x00280111: ('US or SS', '1', "Largest Image Pixel Value in Plane", 'Retired', 'LargestImagePixelValueInPlane'), + 0x00280120: ('US or SS', '1', "Pixel Padding Value", '', 'PixelPaddingValue'), + 0x00280121: ('US or SS', '1', "Pixel Padding Range Limit", '', 'PixelPaddingRangeLimit'), + 0x00280200: ('US', '1', "Image Location", 'Retired', 'ImageLocation'), + 0x00280300: ('CS', '1', "Quality Control Image", '', 'QualityControlImage'), + 0x00280301: ('CS', '1', "Burned In Annotation", '', 'BurnedInAnnotation'), + 0x00280302: ('CS', '1', "Recognizable Visual Features", '', 'RecognizableVisualFeatures'), + 0x00280303: ('CS', '1', "Longitudinal Temporal Information Modified", '', 'LongitudinalTemporalInformationModified'), + 0x00280304: ('UI', '1', "Referenced Color Palette Instance UID", '', 'ReferencedColorPaletteInstanceUID'), + 0x00280400: ('LO', '1', "Transform Label", 'Retired', 'TransformLabel'), + 0x00280401: ('LO', '1', "Transform Version Number", 'Retired', 'TransformVersionNumber'), + 0x00280402: ('US', '1', "Number of Transform Steps", 'Retired', 'NumberOfTransformSteps'), + 0x00280403: ('LO', '1-n', "Sequence of Compressed Data", 'Retired', 'SequenceOfCompressedData'), + 0x00280404: ('AT', '1-n', "Details of Coefficients", 'Retired', 'DetailsOfCoefficients'), + 0x00280700: ('LO', '1', "DCT Label", 'Retired', 'DCTLabel'), + 0x00280701: ('CS', '1-n', "Data Block Description", 'Retired', 'DataBlockDescription'), + 0x00280702: ('AT', '1-n', "Data Block", 'Retired', 'DataBlock'), + 0x00280710: ('US', '1', "Normalization Factor Format", 'Retired', 'NormalizationFactorFormat'), + 0x00280720: ('US', '1', "Zonal Map Number Format", 'Retired', 'ZonalMapNumberFormat'), + 0x00280721: ('AT', '1-n', "Zonal Map Location", 'Retired', 'ZonalMapLocation'), + 0x00280722: ('US', '1', "Zonal Map Format", 'Retired', 'ZonalMapFormat'), + 0x00280730: ('US', '1', "Adaptive Map Format", 'Retired', 'AdaptiveMapFormat'), + 0x00280740: ('US', '1', "Code Number Format", 'Retired', 'CodeNumberFormat'), + 0x00280A02: ('CS', '1', "Pixel Spacing Calibration Type", '', 'PixelSpacingCalibrationType'), + 0x00280A04: ('LO', '1', "Pixel Spacing Calibration Description", '', 'PixelSpacingCalibrationDescription'), + 0x00281040: ('CS', '1', "Pixel Intensity Relationship", '', 'PixelIntensityRelationship'), + 0x00281041: ('SS', '1', "Pixel Intensity Relationship Sign", '', 'PixelIntensityRelationshipSign'), + 0x00281050: ('DS', '1-n', "Window Center", '', 'WindowCenter'), + 0x00281051: ('DS', '1-n', "Window Width", '', 'WindowWidth'), + 0x00281052: ('DS', '1', "Rescale Intercept", '', 'RescaleIntercept'), + 0x00281053: ('DS', '1', "Rescale Slope", '', 'RescaleSlope'), + 0x00281054: ('LO', '1', "Rescale Type", '', 'RescaleType'), + 0x00281055: ('LO', '1-n', "Window Center & Width Explanation", '', 'WindowCenterWidthExplanation'), + 0x00281056: ('CS', '1', "VOI LUT Function", '', 'VOILUTFunction'), + 0x00281080: ('CS', '1', "Gray Scale", 'Retired', 'GrayScale'), + 0x00281090: ('CS', '1', "Recommended Viewing Mode", '', 'RecommendedViewingMode'), + 0x00281100: ('US or SS', '3', "Gray Lookup Table Descriptor", 'Retired', 'GrayLookupTableDescriptor'), + 0x00281101: ('US or SS', '3', "Red Palette Color Lookup Table Descriptor", '', 'RedPaletteColorLookupTableDescriptor'), + 0x00281102: ('US or SS', '3', "Green Palette Color Lookup Table Descriptor", '', 'GreenPaletteColorLookupTableDescriptor'), + 0x00281103: ('US or SS', '3', "Blue Palette Color Lookup Table Descriptor", '', 'BluePaletteColorLookupTableDescriptor'), + 0x00281104: ('US', '3', "AlphaPalette ColorLookup Table Descriptor", '', 'AlphaPaletteColorLookupTableDescriptor'), + 0x00281111: ('US or SS', '4', "Large Red Palette Color Lookup Table Descriptor", 'Retired', 'LargeRedPaletteColorLookupTableDescriptor'), + 0x00281112: ('US or SS', '4', "Large Green Palette Color Lookup Table Descriptor", 'Retired', 'LargeGreenPaletteColorLookupTableDescriptor'), + 0x00281113: ('US or SS', '4', "Large Blue Palette Color Lookup Table Descriptor", 'Retired', 'LargeBluePaletteColorLookupTableDescriptor'), + 0x00281199: ('UI', '1', "Palette Color Lookup Table UID", '', 'PaletteColorLookupTableUID'), + 0x00281200: ('US or SS or OW', '1-n 1', "Gray Lookup Table Data", 'Retired', 'GrayLookupTableData'), + 0x00281201: ('OW', '1', "Red Palette Color Lookup Table Data", '', 'RedPaletteColorLookupTableData'), + 0x00281202: ('OW', '1', "Green Palette Color Lookup Table Data", '', 'GreenPaletteColorLookupTableData'), + 0x00281203: ('OW', '1', "Blue Palette Color Lookup Table Data", '', 'BluePaletteColorLookupTableData'), + 0x00281204: ('OW', '1', "Alpha Palette Color Lookup Table Data", '', 'AlphaPaletteColorLookupTableData'), + 0x00281211: ('OW', '1', "Large Red Palette Color Lookup Table Data", 'Retired', 'LargeRedPaletteColorLookupTableData'), + 0x00281212: ('OW', '1', "Large Green Palette Color Lookup Table Data", 'Retired', 'LargeGreenPaletteColorLookupTableData'), + 0x00281213: ('OW', '1', "Large Blue Palette Color Lookup Table Data", 'Retired', 'LargeBluePaletteColorLookupTableData'), + 0x00281214: ('UI', '1', "Large Palette Color Lookup Table UID", 'Retired', 'LargePaletteColorLookupTableUID'), + 0x00281221: ('OW', '1', "Segmented Red Palette Color Lookup Table Data", '', 'SegmentedRedPaletteColorLookupTableData'), + 0x00281222: ('OW', '1', "Segmented Green Palette Color Lookup Table Data", '', 'SegmentedGreenPaletteColorLookupTableData'), + 0x00281223: ('OW', '1', "Segmented Blue Palette Color Lookup Table Data", '', 'SegmentedBluePaletteColorLookupTableData'), + 0x00281300: ('CS', '1', "Breast Implant Present", '', 'BreastImplantPresent'), + 0x00281350: ('CS', '1', "Partial View", '', 'PartialView'), + 0x00281351: ('ST', '1', "Partial View Description", '', 'PartialViewDescription'), + 0x00281352: ('SQ', '1', "Partial View Code Sequence", '', 'PartialViewCodeSequence'), + 0x0028135A: ('CS', '1', "Spatial Locations Preserved", '', 'SpatialLocationsPreserved'), + 0x00281401: ('SQ', '1', "Data Frame Assignment Sequence", '', 'DataFrameAssignmentSequence'), + 0x00281402: ('CS', '1', "Data Path Assignment", '', 'DataPathAssignment'), + 0x00281403: ('US', '1', "Bits Mapped to Color Lookup Table", '', 'BitsMappedToColorLookupTable'), + 0x00281404: ('SQ', '1', "Blending LUT 1 Sequence", '', 'BlendingLUT1Sequence'), + 0x00281405: ('CS', '1', "Blending LUT 1 Transfer Function", '', 'BlendingLUT1TransferFunction'), + 0x00281406: ('FD', '1', "Blending Weight Constant", '', 'BlendingWeightConstant'), + 0x00281407: ('US', '3', "Blending Lookup Table Descriptor", '', 'BlendingLookupTableDescriptor'), + 0x00281408: ('OW', '1', "Blending Lookup Table Data", '', 'BlendingLookupTableData'), + 0x0028140B: ('SQ', '1', "Enhanced Palette Color Lookup Table Sequence", '', 'EnhancedPaletteColorLookupTableSequence'), + 0x0028140C: ('SQ', '1', "Blending LUT 2 Sequence", '', 'BlendingLUT2Sequence'), + 0x0028140D: ('CS', '1', "Blending LUT 2 Transfer Function", '', 'BlendingLUT2TransferFunction'), + 0x0028140E: ('CS', '1', "Data Path ID", '', 'DataPathID'), + 0x0028140F: ('CS', '1', "RGB LUT Transfer Function", '', 'RGBLUTTransferFunction'), + 0x00281410: ('CS', '1', "Alpha LUT Transfer Function", '', 'AlphaLUTTransferFunction'), + 0x00282000: ('OB', '1', "ICC Profile", '', 'ICCProfile'), + 0x00282110: ('CS', '1', "Lossy Image Compression", '', 'LossyImageCompression'), + 0x00282112: ('DS', '1-n', "Lossy Image Compression Ratio", '', 'LossyImageCompressionRatio'), + 0x00282114: ('CS', '1-n', "Lossy Image Compression Method", '', 'LossyImageCompressionMethod'), + 0x00283000: ('SQ', '1', "Modality LUT Sequence", '', 'ModalityLUTSequence'), + 0x00283002: ('US or SS', '3', "LUT Descriptor", '', 'LUTDescriptor'), + 0x00283003: ('LO', '1', "LUT Explanation", '', 'LUTExplanation'), + 0x00283004: ('LO', '1', "Modality LUT Type", '', 'ModalityLUTType'), + 0x00283006: ('US or OW', '1-n 1', "LUT Data", '', 'LUTData'), + 0x00283010: ('SQ', '1', "VOI LUT Sequence", '', 'VOILUTSequence'), + 0x00283110: ('SQ', '1', "Softcopy VOI LUT Sequence", '', 'SoftcopyVOILUTSequence'), + 0x00284000: ('LT', '1', "Image Presentation Comments", 'Retired', 'ImagePresentationComments'), + 0x00285000: ('SQ', '1', "Bi-Plane Acquisition Sequence", 'Retired', 'BiPlaneAcquisitionSequence'), + 0x00286010: ('US', '1', "Representative Frame Number", '', 'RepresentativeFrameNumber'), + 0x00286020: ('US', '1-n', "Frame Numbers of Interest (FOI)", '', 'FrameNumbersOfInterest'), + 0x00286022: ('LO', '1-n', "Frame of Interest Description", '', 'FrameOfInterestDescription'), + 0x00286023: ('CS', '1-n', "Frame of Interest Type", '', 'FrameOfInterestType'), + 0x00286030: ('US', '1-n', "Mask Pointer(s)", 'Retired', 'MaskPointers'), + 0x00286040: ('US', '1-n', "R Wave Pointer", '', 'RWavePointer'), + 0x00286100: ('SQ', '1', "Mask Subtraction Sequence", '', 'MaskSubtractionSequence'), + 0x00286101: ('CS', '1', "Mask Operation", '', 'MaskOperation'), + 0x00286102: ('US', '2-2n', "Applicable Frame Range", '', 'ApplicableFrameRange'), + 0x00286110: ('US', '1-n', "Mask Frame Numbers", '', 'MaskFrameNumbers'), + 0x00286112: ('US', '1', "Contrast Frame Averaging", '', 'ContrastFrameAveraging'), + 0x00286114: ('FL', '2', "Mask Sub-pixel Shift", '', 'MaskSubPixelShift'), + 0x00286120: ('SS', '1', "TID Offset", '', 'TIDOffset'), + 0x00286190: ('ST', '1', "Mask Operation Explanation", '', 'MaskOperationExplanation'), + 0x00287FE0: ('UT', '1', "Pixel Data Provider URL", '', 'PixelDataProviderURL'), + 0x00289001: ('UL', '1', "Data Point Rows", '', 'DataPointRows'), + 0x00289002: ('UL', '1', "Data Point Columns", '', 'DataPointColumns'), + 0x00289003: ('CS', '1', "Signal Domain Columns", '', 'SignalDomainColumns'), + 0x00289099: ('US', '1', "Largest Monochrome Pixel Value", 'Retired', 'LargestMonochromePixelValue'), + 0x00289108: ('CS', '1', "Data Representation", '', 'DataRepresentation'), + 0x00289110: ('SQ', '1', "Pixel Measures Sequence", '', 'PixelMeasuresSequence'), + 0x00289132: ('SQ', '1', "Frame VOI LUT Sequence", '', 'FrameVOILUTSequence'), + 0x00289145: ('SQ', '1', "Pixel Value Transformation Sequence", '', 'PixelValueTransformationSequence'), + 0x00289235: ('CS', '1', "Signal Domain Rows", '', 'SignalDomainRows'), + 0x00289411: ('FL', '1', "Display Filter Percentage", '', 'DisplayFilterPercentage'), + 0x00289415: ('SQ', '1', "Frame Pixel Shift Sequence", '', 'FramePixelShiftSequence'), + 0x00289416: ('US', '1', "Subtraction Item ID", '', 'SubtractionItemID'), + 0x00289422: ('SQ', '1', "Pixel Intensity Relationship LUT Sequence", '', 'PixelIntensityRelationshipLUTSequence'), + 0x00289443: ('SQ', '1', "Frame Pixel Data Properties Sequence", '', 'FramePixelDataPropertiesSequence'), + 0x00289444: ('CS', '1', "Geometrical Properties", '', 'GeometricalProperties'), + 0x00289445: ('FL', '1', "Geometric Maximum Distortion", '', 'GeometricMaximumDistortion'), + 0x00289446: ('CS', '1-n', "Image Processing Applied", '', 'ImageProcessingApplied'), + 0x00289454: ('CS', '1', "Mask Selection Mode", '', 'MaskSelectionMode'), + 0x00289474: ('CS', '1', "LUT Function", '', 'LUTFunction'), + 0x00289478: ('FL', '1', "Mask Visibility Percentage", '', 'MaskVisibilityPercentage'), + 0x00289501: ('SQ', '1', "Pixel Shift Sequence", '', 'PixelShiftSequence'), + 0x00289502: ('SQ', '1', "Region Pixel Shift Sequence", '', 'RegionPixelShiftSequence'), + 0x00289503: ('SS', '2-2n', "Vertices of the Region", '', 'VerticesOfTheRegion'), + 0x00289505: ('SQ', '1', "Multi-frame Presentation Sequence", '', 'MultiFramePresentationSequence'), + 0x00289506: ('US', '2-2n', "Pixel Shift Frame Range", '', 'PixelShiftFrameRange'), + 0x00289507: ('US', '2-2n', "LUT Frame Range", '', 'LUTFrameRange'), + 0x00289520: ('DS', '16', "Image to Equipment Mapping Matrix", '', 'ImageToEquipmentMappingMatrix'), + 0x00289537: ('CS', '1', "Equipment Coordinate System Identification", '', 'EquipmentCoordinateSystemIdentification'), + 0x0032000A: ('CS', '1', "Study Status ID", 'Retired', 'StudyStatusID'), + 0x0032000C: ('CS', '1', "Study Priority ID", 'Retired', 'StudyPriorityID'), + 0x00320012: ('LO', '1', "Study ID Issuer", 'Retired', 'StudyIDIssuer'), + 0x00320032: ('DA', '1', "Study Verified Date", 'Retired', 'StudyVerifiedDate'), + 0x00320033: ('TM', '1', "Study Verified Time", 'Retired', 'StudyVerifiedTime'), + 0x00320034: ('DA', '1', "Study Read Date", 'Retired', 'StudyReadDate'), + 0x00320035: ('TM', '1', "Study Read Time", 'Retired', 'StudyReadTime'), + 0x00321000: ('DA', '1', "Scheduled Study Start Date", 'Retired', 'ScheduledStudyStartDate'), + 0x00321001: ('TM', '1', "Scheduled Study Start Time", 'Retired', 'ScheduledStudyStartTime'), + 0x00321010: ('DA', '1', "Scheduled Study Stop Date", 'Retired', 'ScheduledStudyStopDate'), + 0x00321011: ('TM', '1', "Scheduled Study Stop Time", 'Retired', 'ScheduledStudyStopTime'), + 0x00321020: ('LO', '1', "Scheduled Study Location", 'Retired', 'ScheduledStudyLocation'), + 0x00321021: ('AE', '1-n', "Scheduled Study Location AE Title", 'Retired', 'ScheduledStudyLocationAETitle'), + 0x00321030: ('LO', '1', "Reason for Study", 'Retired', 'ReasonForStudy'), + 0x00321031: ('SQ', '1', "Requesting Physician Identification Sequence", '', 'RequestingPhysicianIdentificationSequence'), + 0x00321032: ('PN', '1', "Requesting Physician", '', 'RequestingPhysician'), + 0x00321033: ('LO', '1', "Requesting Service", '', 'RequestingService'), + 0x00321034: ('SQ', '1', "Requesting Service Code Sequence", '', 'RequestingServiceCodeSequence'), + 0x00321040: ('DA', '1', "Study Arrival Date", 'Retired', 'StudyArrivalDate'), + 0x00321041: ('TM', '1', "Study Arrival Time", 'Retired', 'StudyArrivalTime'), + 0x00321050: ('DA', '1', "Study Completion Date", 'Retired', 'StudyCompletionDate'), + 0x00321051: ('TM', '1', "Study Completion Time", 'Retired', 'StudyCompletionTime'), + 0x00321055: ('CS', '1', "Study Component Status ID", 'Retired', 'StudyComponentStatusID'), + 0x00321060: ('LO', '1', "Requested Procedure Description", '', 'RequestedProcedureDescription'), + 0x00321064: ('SQ', '1', "Requested Procedure Code Sequence", '', 'RequestedProcedureCodeSequence'), + 0x00321070: ('LO', '1', "Requested Contrast Agent", '', 'RequestedContrastAgent'), + 0x00324000: ('LT', '1', "Study Comments", 'Retired', 'StudyComments'), + 0x00380004: ('SQ', '1', "Referenced Patient Alias Sequence", '', 'ReferencedPatientAliasSequence'), + 0x00380008: ('CS', '1', "Visit Status ID", '', 'VisitStatusID'), + 0x00380010: ('LO', '1', "Admission ID", '', 'AdmissionID'), + 0x00380011: ('LO', '1', "Issuer of Admission ID", 'Retired', 'IssuerOfAdmissionID'), + 0x00380014: ('SQ', '1', "Issuer of Admission ID Sequence", '', 'IssuerOfAdmissionIDSequence'), + 0x00380016: ('LO', '1', "Route of Admissions", '', 'RouteOfAdmissions'), + 0x0038001A: ('DA', '1', "Scheduled Admission Date", 'Retired', 'ScheduledAdmissionDate'), + 0x0038001B: ('TM', '1', "Scheduled Admission Time", 'Retired', 'ScheduledAdmissionTime'), + 0x0038001C: ('DA', '1', "Scheduled Discharge Date", 'Retired', 'ScheduledDischargeDate'), + 0x0038001D: ('TM', '1', "Scheduled Discharge Time", 'Retired', 'ScheduledDischargeTime'), + 0x0038001E: ('LO', '1', "Scheduled Patient Institution Residence", 'Retired', 'ScheduledPatientInstitutionResidence'), + 0x00380020: ('DA', '1', "Admitting Date", '', 'AdmittingDate'), + 0x00380021: ('TM', '1', "Admitting Time", '', 'AdmittingTime'), + 0x00380030: ('DA', '1', "Discharge Date", 'Retired', 'DischargeDate'), + 0x00380032: ('TM', '1', "Discharge Time", 'Retired', 'DischargeTime'), + 0x00380040: ('LO', '1', "Discharge Diagnosis Description", 'Retired', 'DischargeDiagnosisDescription'), + 0x00380044: ('SQ', '1', "Discharge Diagnosis Code Sequence", 'Retired', 'DischargeDiagnosisCodeSequence'), + 0x00380050: ('LO', '1', "Special Needs", '', 'SpecialNeeds'), + 0x00380060: ('LO', '1', "Service Episode ID", '', 'ServiceEpisodeID'), + 0x00380061: ('LO', '1', "Issuer of Service Episode ID", 'Retired', 'IssuerOfServiceEpisodeID'), + 0x00380062: ('LO', '1', "Service Episode Description", '', 'ServiceEpisodeDescription'), + 0x00380064: ('SQ', '1', "Issuer of Service Episode ID Sequence", '', 'IssuerOfServiceEpisodeIDSequence'), + 0x00380100: ('SQ', '1', "Pertinent Documents Sequence", '', 'PertinentDocumentsSequence'), + 0x00380300: ('LO', '1', "Current Patient Location", '', 'CurrentPatientLocation'), + 0x00380400: ('LO', '1', "Patient's Institution Residence", '', 'PatientInstitutionResidence'), + 0x00380500: ('LO', '1', "Patient State", '', 'PatientState'), + 0x00380502: ('SQ', '1', "Patient Clinical Trial Participation Sequence", '', 'PatientClinicalTrialParticipationSequence'), + 0x00384000: ('LT', '1', "Visit Comments", '', 'VisitComments'), + 0x003A0004: ('CS', '1', "Waveform Originality", '', 'WaveformOriginality'), + 0x003A0005: ('US', '1', "Number of Waveform Channels", '', 'NumberOfWaveformChannels'), + 0x003A0010: ('UL', '1', "Number of Waveform Samples", '', 'NumberOfWaveformSamples'), + 0x003A001A: ('DS', '1', "Sampling Frequency", '', 'SamplingFrequency'), + 0x003A0020: ('SH', '1', "Multiplex Group Label", '', 'MultiplexGroupLabel'), + 0x003A0200: ('SQ', '1', "Channel Definition Sequence", '', 'ChannelDefinitionSequence'), + 0x003A0202: ('IS', '1', "Waveform Channel Number", '', 'WaveformChannelNumber'), + 0x003A0203: ('SH', '1', "Channel Label", '', 'ChannelLabel'), + 0x003A0205: ('CS', '1-n', "Channel Status", '', 'ChannelStatus'), + 0x003A0208: ('SQ', '1', "Channel Source Sequence", '', 'ChannelSourceSequence'), + 0x003A0209: ('SQ', '1', "Channel Source Modifiers Sequence", '', 'ChannelSourceModifiersSequence'), + 0x003A020A: ('SQ', '1', "Source Waveform Sequence", '', 'SourceWaveformSequence'), + 0x003A020C: ('LO', '1', "Channel Derivation Description", '', 'ChannelDerivationDescription'), + 0x003A0210: ('DS', '1', "Channel Sensitivity", '', 'ChannelSensitivity'), + 0x003A0211: ('SQ', '1', "Channel Sensitivity Units Sequence", '', 'ChannelSensitivityUnitsSequence'), + 0x003A0212: ('DS', '1', "Channel Sensitivity Correction Factor", '', 'ChannelSensitivityCorrectionFactor'), + 0x003A0213: ('DS', '1', "Channel Baseline", '', 'ChannelBaseline'), + 0x003A0214: ('DS', '1', "Channel Time Skew", '', 'ChannelTimeSkew'), + 0x003A0215: ('DS', '1', "Channel Sample Skew", '', 'ChannelSampleSkew'), + 0x003A0218: ('DS', '1', "Channel Offset", '', 'ChannelOffset'), + 0x003A021A: ('US', '1', "Waveform Bits Stored", '', 'WaveformBitsStored'), + 0x003A0220: ('DS', '1', "Filter Low Frequency", '', 'FilterLowFrequency'), + 0x003A0221: ('DS', '1', "Filter High Frequency", '', 'FilterHighFrequency'), + 0x003A0222: ('DS', '1', "Notch Filter Frequency", '', 'NotchFilterFrequency'), + 0x003A0223: ('DS', '1', "Notch Filter Bandwidth", '', 'NotchFilterBandwidth'), + 0x003A0230: ('FL', '1', "Waveform Data Display Scale", '', 'WaveformDataDisplayScale'), + 0x003A0231: ('US', '3', "Waveform Display Background CIELab Value", '', 'WaveformDisplayBackgroundCIELabValue'), + 0x003A0240: ('SQ', '1', "Waveform Presentation Group Sequence", '', 'WaveformPresentationGroupSequence'), + 0x003A0241: ('US', '1', "Presentation Group Number", '', 'PresentationGroupNumber'), + 0x003A0242: ('SQ', '1', "Channel Display Sequence", '', 'ChannelDisplaySequence'), + 0x003A0244: ('US', '3', "Channel Recommended Display CIELab Value", '', 'ChannelRecommendedDisplayCIELabValue'), + 0x003A0245: ('FL', '1', "Channel Position", '', 'ChannelPosition'), + 0x003A0246: ('CS', '1', "Display Shading Flag", '', 'DisplayShadingFlag'), + 0x003A0247: ('FL', '1', "Fractional Channel Display Scale", '', 'FractionalChannelDisplayScale'), + 0x003A0248: ('FL', '1', "Absolute Channel Display Scale", '', 'AbsoluteChannelDisplayScale'), + 0x003A0300: ('SQ', '1', "Multiplexed Audio Channels Description Code Sequence", '', 'MultiplexedAudioChannelsDescriptionCodeSequence'), + 0x003A0301: ('IS', '1', "Channel Identification Code", '', 'ChannelIdentificationCode'), + 0x003A0302: ('CS', '1', "Channel Mode", '', 'ChannelMode'), + 0x00400001: ('AE', '1-n', "Scheduled Station AE Title", '', 'ScheduledStationAETitle'), + 0x00400002: ('DA', '1', "Scheduled Procedure Step Start Date", '', 'ScheduledProcedureStepStartDate'), + 0x00400003: ('TM', '1', "Scheduled Procedure Step Start Time", '', 'ScheduledProcedureStepStartTime'), + 0x00400004: ('DA', '1', "Scheduled Procedure Step End Date", '', 'ScheduledProcedureStepEndDate'), + 0x00400005: ('TM', '1', "Scheduled Procedure Step End Time", '', 'ScheduledProcedureStepEndTime'), + 0x00400006: ('PN', '1', "Scheduled Performing Physician's Name", '', 'ScheduledPerformingPhysicianName'), + 0x00400007: ('LO', '1', "Scheduled Procedure Step Description", '', 'ScheduledProcedureStepDescription'), + 0x00400008: ('SQ', '1', "Scheduled Protocol Code Sequence", '', 'ScheduledProtocolCodeSequence'), + 0x00400009: ('SH', '1', "Scheduled Procedure Step ID", '', 'ScheduledProcedureStepID'), + 0x0040000A: ('SQ', '1', "Stage Code Sequence", '', 'StageCodeSequence'), + 0x0040000B: ('SQ', '1', "Scheduled Performing Physician Identification Sequence", '', 'ScheduledPerformingPhysicianIdentificationSequence'), + 0x00400010: ('SH', '1-n', "Scheduled Station Name", '', 'ScheduledStationName'), + 0x00400011: ('SH', '1', "Scheduled Procedure Step Location", '', 'ScheduledProcedureStepLocation'), + 0x00400012: ('LO', '1', "Pre-Medication", '', 'PreMedication'), + 0x00400020: ('CS', '1', "Scheduled Procedure Step Status", '', 'ScheduledProcedureStepStatus'), + 0x00400026: ('SQ', '1', "Order Placer Identifier Sequence", '', 'OrderPlacerIdentifierSequence'), + 0x00400027: ('SQ', '1', "Order Filler Identifier Sequence", '', 'OrderFillerIdentifierSequence'), + 0x00400031: ('UT', '1', "Local Namespace Entity ID", '', 'LocalNamespaceEntityID'), + 0x00400032: ('UT', '1', "Universal Entity ID", '', 'UniversalEntityID'), + 0x00400033: ('CS', '1', "Universal Entity ID Type", '', 'UniversalEntityIDType'), + 0x00400035: ('CS', '1', "Identifier Type Code", '', 'IdentifierTypeCode'), + 0x00400036: ('SQ', '1', "Assigning Facility Sequence", '', 'AssigningFacilitySequence'), + 0x00400039: ('SQ', '1', "Assigning Jurisdiction Code Sequence", '', 'AssigningJurisdictionCodeSequence'), + 0x0040003A: ('SQ', '1', "Assigning Agency or Department Code Sequence", '', 'AssigningAgencyOrDepartmentCodeSequence'), + 0x00400100: ('SQ', '1', "Scheduled Procedure Step Sequence", '', 'ScheduledProcedureStepSequence'), + 0x00400220: ('SQ', '1', "Referenced Non-Image Composite SOP Instance Sequence", '', 'ReferencedNonImageCompositeSOPInstanceSequence'), + 0x00400241: ('AE', '1', "Performed Station AE Title", '', 'PerformedStationAETitle'), + 0x00400242: ('SH', '1', "Performed Station Name", '', 'PerformedStationName'), + 0x00400243: ('SH', '1', "Performed Location", '', 'PerformedLocation'), + 0x00400244: ('DA', '1', "Performed Procedure Step Start Date", '', 'PerformedProcedureStepStartDate'), + 0x00400245: ('TM', '1', "Performed Procedure Step Start Time", '', 'PerformedProcedureStepStartTime'), + 0x00400250: ('DA', '1', "Performed Procedure Step End Date", '', 'PerformedProcedureStepEndDate'), + 0x00400251: ('TM', '1', "Performed Procedure Step End Time", '', 'PerformedProcedureStepEndTime'), + 0x00400252: ('CS', '1', "Performed Procedure Step Status", '', 'PerformedProcedureStepStatus'), + 0x00400253: ('SH', '1', "Performed Procedure Step ID", '', 'PerformedProcedureStepID'), + 0x00400254: ('LO', '1', "Performed Procedure Step Description", '', 'PerformedProcedureStepDescription'), + 0x00400255: ('LO', '1', "Performed Procedure Type Description", '', 'PerformedProcedureTypeDescription'), + 0x00400260: ('SQ', '1', "Performed Protocol Code Sequence", '', 'PerformedProtocolCodeSequence'), + 0x00400261: ('CS', '1', "Performed Protocol Type", '', 'PerformedProtocolType'), + 0x00400270: ('SQ', '1', "Scheduled Step Attributes Sequence", '', 'ScheduledStepAttributesSequence'), + 0x00400275: ('SQ', '1', "Request Attributes Sequence", '', 'RequestAttributesSequence'), + 0x00400280: ('ST', '1', "Comments on the Performed Procedure Step", '', 'CommentsOnThePerformedProcedureStep'), + 0x00400281: ('SQ', '1', "Performed Procedure Step Discontinuation Reason Code Sequence", '', 'PerformedProcedureStepDiscontinuationReasonCodeSequence'), + 0x00400293: ('SQ', '1', "Quantity Sequence", '', 'QuantitySequence'), + 0x00400294: ('DS', '1', "Quantity", '', 'Quantity'), + 0x00400295: ('SQ', '1', "Measuring Units Sequence", '', 'MeasuringUnitsSequence'), + 0x00400296: ('SQ', '1', "Billing Item Sequence", '', 'BillingItemSequence'), + 0x00400300: ('US', '1', "Total Time of Fluoroscopy", '', 'TotalTimeOfFluoroscopy'), + 0x00400301: ('US', '1', "Total Number of Exposures", '', 'TotalNumberOfExposures'), + 0x00400302: ('US', '1', "Entrance Dose", '', 'EntranceDose'), + 0x00400303: ('US', '1-2', "Exposed Area", '', 'ExposedArea'), + 0x00400306: ('DS', '1', "Distance Source to Entrance", '', 'DistanceSourceToEntrance'), + 0x00400307: ('DS', '1', "Distance Source to Support", 'Retired', 'DistanceSourceToSupport'), + 0x0040030E: ('SQ', '1', "Exposure Dose Sequence", '', 'ExposureDoseSequence'), + 0x00400310: ('ST', '1', "Comments on Radiation Dose", '', 'CommentsOnRadiationDose'), + 0x00400312: ('DS', '1', "X-Ray Output", '', 'XRayOutput'), + 0x00400314: ('DS', '1', "Half Value Layer", '', 'HalfValueLayer'), + 0x00400316: ('DS', '1', "Organ Dose", '', 'OrganDose'), + 0x00400318: ('CS', '1', "Organ Exposed", '', 'OrganExposed'), + 0x00400320: ('SQ', '1', "Billing Procedure Step Sequence", '', 'BillingProcedureStepSequence'), + 0x00400321: ('SQ', '1', "Film Consumption Sequence", '', 'FilmConsumptionSequence'), + 0x00400324: ('SQ', '1', "Billing Supplies and Devices Sequence", '', 'BillingSuppliesAndDevicesSequence'), + 0x00400330: ('SQ', '1', "Referenced Procedure Step Sequence", 'Retired', 'ReferencedProcedureStepSequence'), + 0x00400340: ('SQ', '1', "Performed Series Sequence", '', 'PerformedSeriesSequence'), + 0x00400400: ('LT', '1', "Comments on the Scheduled Procedure Step", '', 'CommentsOnTheScheduledProcedureStep'), + 0x00400440: ('SQ', '1', "Protocol Context Sequence", '', 'ProtocolContextSequence'), + 0x00400441: ('SQ', '1', "Content Item Modifier Sequence", '', 'ContentItemModifierSequence'), + 0x00400500: ('SQ', '1', "Scheduled Specimen Sequence", '', 'ScheduledSpecimenSequence'), + 0x0040050A: ('LO', '1', "Specimen Accession Number", 'Retired', 'SpecimenAccessionNumber'), + 0x00400512: ('LO', '1', "Container Identifier", '', 'ContainerIdentifier'), + 0x00400513: ('SQ', '1', "Issuer of the Container Identifier Sequence", '', 'IssuerOfTheContainerIdentifierSequence'), + 0x00400515: ('SQ', '1', "Alternate Container Identifier Sequence", '', 'AlternateContainerIdentifierSequence'), + 0x00400518: ('SQ', '1', "Container Type Code Sequence", '', 'ContainerTypeCodeSequence'), + 0x0040051A: ('LO', '1', "Container Description", '', 'ContainerDescription'), + 0x00400520: ('SQ', '1', "Container Component Sequence", '', 'ContainerComponentSequence'), + 0x00400550: ('SQ', '1', "Specimen Sequence", 'Retired', 'SpecimenSequence'), + 0x00400551: ('LO', '1', "Specimen Identifier", '', 'SpecimenIdentifier'), + 0x00400552: ('SQ', '1', "Specimen Description Sequence (Trial)", 'Retired', 'SpecimenDescriptionSequenceTrial'), + 0x00400553: ('ST', '1', "Specimen Description (Trial)", 'Retired', 'SpecimenDescriptionTrial'), + 0x00400554: ('UI', '1', "Specimen UID", '', 'SpecimenUID'), + 0x00400555: ('SQ', '1', "Acquisition Context Sequence", '', 'AcquisitionContextSequence'), + 0x00400556: ('ST', '1', "Acquisition Context Description", '', 'AcquisitionContextDescription'), + 0x00400560: ('SQ', '1', "Specimen Description Sequence", '', 'SpecimenDescriptionSequence'), + 0x00400562: ('SQ', '1', "Issuer of the Specimen Identifier Sequence", '', 'IssuerOfTheSpecimenIdentifierSequence'), + 0x0040059A: ('SQ', '1', "Specimen Type Code Sequence", '', 'SpecimenTypeCodeSequence'), + 0x00400600: ('LO', '1', "Specimen Short Description", '', 'SpecimenShortDescription'), + 0x00400602: ('UT', '1', "Specimen Detailed Description", '', 'SpecimenDetailedDescription'), + 0x00400610: ('SQ', '1', "Specimen Preparation Sequence", '', 'SpecimenPreparationSequence'), + 0x00400612: ('SQ', '1', "Specimen Preparation Step Content Item Sequence", '', 'SpecimenPreparationStepContentItemSequence'), + 0x00400620: ('SQ', '1', "Specimen Localization Content Item Sequence", '', 'SpecimenLocalizationContentItemSequence'), + 0x004006FA: ('LO', '1', "Slide Identifier", 'Retired', 'SlideIdentifier'), + 0x0040071A: ('SQ', '1', "Image Center Point Coordinates Sequence", '', 'ImageCenterPointCoordinatesSequence'), + 0x0040072A: ('DS', '1', "X Offset in Slide Coordinate System", '', 'XOffsetInSlideCoordinateSystem'), + 0x0040073A: ('DS', '1', "Y Offset in Slide Coordinate System", '', 'YOffsetInSlideCoordinateSystem'), + 0x0040074A: ('DS', '1', "Z Offset in Slide Coordinate System", '', 'ZOffsetInSlideCoordinateSystem'), + 0x004008D8: ('SQ', '1', "Pixel Spacing Sequence", 'Retired', 'PixelSpacingSequence'), + 0x004008DA: ('SQ', '1', "Coordinate System Axis Code Sequence", 'Retired', 'CoordinateSystemAxisCodeSequence'), + 0x004008EA: ('SQ', '1', "Measurement Units Code Sequence", '', 'MeasurementUnitsCodeSequence'), + 0x004009F8: ('SQ', '1', "Vital Stain Code Sequence (Trial)", 'Retired', 'VitalStainCodeSequenceTrial'), + 0x00401001: ('SH', '1', "Requested Procedure ID", '', 'RequestedProcedureID'), + 0x00401002: ('LO', '1', "Reason for the Requested Procedure", '', 'ReasonForTheRequestedProcedure'), + 0x00401003: ('SH', '1', "Requested Procedure Priority", '', 'RequestedProcedurePriority'), + 0x00401004: ('LO', '1', "Patient Transport Arrangements", '', 'PatientTransportArrangements'), + 0x00401005: ('LO', '1', "Requested Procedure Location", '', 'RequestedProcedureLocation'), + 0x00401006: ('SH', '1', "Placer Order Number / Procedure", 'Retired', 'PlacerOrderNumberProcedure'), + 0x00401007: ('SH', '1', "Filler Order Number / Procedure", 'Retired', 'FillerOrderNumberProcedure'), + 0x00401008: ('LO', '1', "Confidentiality Code", '', 'ConfidentialityCode'), + 0x00401009: ('SH', '1', "Reporting Priority", '', 'ReportingPriority'), + 0x0040100A: ('SQ', '1', "Reason for Requested Procedure Code Sequence", '', 'ReasonForRequestedProcedureCodeSequence'), + 0x00401010: ('PN', '1-n', "Names of Intended Recipients of Results", '', 'NamesOfIntendedRecipientsOfResults'), + 0x00401011: ('SQ', '1', "Intended Recipients of Results Identification Sequence", '', 'IntendedRecipientsOfResultsIdentificationSequence'), + 0x00401012: ('SQ', '1', "Reason For Performed Procedure Code Sequence", '', 'ReasonForPerformedProcedureCodeSequence'), + 0x00401060: ('LO', '1', "Requested Procedure Description (Trial)", 'Retired', 'RequestedProcedureDescriptionTrial'), + 0x00401101: ('SQ', '1', "Person Identification Code Sequence", '', 'PersonIdentificationCodeSequence'), + 0x00401102: ('ST', '1', "Person's Address", '', 'PersonAddress'), + 0x00401103: ('LO', '1-n', "Person's Telephone Numbers", '', 'PersonTelephoneNumbers'), + 0x00401400: ('LT', '1', "Requested Procedure Comments", '', 'RequestedProcedureComments'), + 0x00402001: ('LO', '1', "Reason for the Imaging Service Request", 'Retired', 'ReasonForTheImagingServiceRequest'), + 0x00402004: ('DA', '1', "Issue Date of Imaging Service Request", '', 'IssueDateOfImagingServiceRequest'), + 0x00402005: ('TM', '1', "Issue Time of Imaging Service Request", '', 'IssueTimeOfImagingServiceRequest'), + 0x00402006: ('SH', '1', "Placer Order Number / Imaging Service Request (Retired)", 'Retired', 'PlacerOrderNumberImagingServiceRequestRetired'), + 0x00402007: ('SH', '1', "Filler Order Number / Imaging Service Request (Retired)", 'Retired', 'FillerOrderNumberImagingServiceRequestRetired'), + 0x00402008: ('PN', '1', "Order Entered By", '', 'OrderEnteredBy'), + 0x00402009: ('SH', '1', "Order Enterer's Location", '', 'OrderEntererLocation'), + 0x00402010: ('SH', '1', "Order Callback Phone Number", '', 'OrderCallbackPhoneNumber'), + 0x00402016: ('LO', '1', "Placer Order Number / Imaging Service Request", '', 'PlacerOrderNumberImagingServiceRequest'), + 0x00402017: ('LO', '1', "Filler Order Number / Imaging Service Request", '', 'FillerOrderNumberImagingServiceRequest'), + 0x00402400: ('LT', '1', "Imaging Service Request Comments", '', 'ImagingServiceRequestComments'), + 0x00403001: ('LO', '1', "Confidentiality Constraint on Patient Data Description", '', 'ConfidentialityConstraintOnPatientDataDescription'), + 0x00404001: ('CS', '1', "General Purpose Scheduled Procedure Step Status", 'Retired', 'GeneralPurposeScheduledProcedureStepStatus'), + 0x00404002: ('CS', '1', "General Purpose Performed Procedure Step Status", 'Retired', 'GeneralPurposePerformedProcedureStepStatus'), + 0x00404003: ('CS', '1', "General Purpose Scheduled Procedure Step Priority", 'Retired', 'GeneralPurposeScheduledProcedureStepPriority'), + 0x00404004: ('SQ', '1', "Scheduled Processing Applications Code Sequence", 'Retired', 'ScheduledProcessingApplicationsCodeSequence'), + 0x00404005: ('DT', '1', "Scheduled Procedure Step Start DateTime", 'Retired', 'ScheduledProcedureStepStartDateTime'), + 0x00404006: ('CS', '1', "Multiple Copies Flag", 'Retired', 'MultipleCopiesFlag'), + 0x00404007: ('SQ', '1', "Performed Processing Applications Code Sequence", '', 'PerformedProcessingApplicationsCodeSequence'), + 0x00404009: ('SQ', '1', "Human Performer Code Sequence", '', 'HumanPerformerCodeSequence'), + 0x00404010: ('DT', '1', "Scheduled Procedure Step Modification DateTime", '', 'ScheduledProcedureStepModificationDateTime'), + 0x00404011: ('DT', '1', "Expected Completion DateTime", '', 'ExpectedCompletionDateTime'), + 0x00404015: ('SQ', '1', "Resulting General Purpose Performed Procedure Steps Sequence", 'Retired', 'ResultingGeneralPurposePerformedProcedureStepsSequence'), + 0x00404016: ('SQ', '1', "Referenced General Purpose Scheduled Procedure Step Sequence", 'Retired', 'ReferencedGeneralPurposeScheduledProcedureStepSequence'), + 0x00404018: ('SQ', '1', "Scheduled Workitem Code Sequence", '', 'ScheduledWorkitemCodeSequence'), + 0x00404019: ('SQ', '1', "Performed Workitem Code Sequence", '', 'PerformedWorkitemCodeSequence'), + 0x00404020: ('CS', '1', "Input Availability Flag", '', 'InputAvailabilityFlag'), + 0x00404021: ('SQ', '1', "Input Information Sequence", '', 'InputInformationSequence'), + 0x00404022: ('SQ', '1', "Relevant Information Sequence", 'Retired', 'RelevantInformationSequence'), + 0x00404023: ('UI', '1', "Referenced General Purpose Scheduled Procedure Step Transaction UID", 'Retired', 'ReferencedGeneralPurposeScheduledProcedureStepTransactionUID'), + 0x00404025: ('SQ', '1', "Scheduled Station Name Code Sequence", '', 'ScheduledStationNameCodeSequence'), + 0x00404026: ('SQ', '1', "Scheduled Station Class Code Sequence", '', 'ScheduledStationClassCodeSequence'), + 0x00404027: ('SQ', '1', "Scheduled Station Geographic Location Code Sequence", '', 'ScheduledStationGeographicLocationCodeSequence'), + 0x00404028: ('SQ', '1', "Performed Station Name Code Sequence", '', 'PerformedStationNameCodeSequence'), + 0x00404029: ('SQ', '1', "Performed Station Class Code Sequence", '', 'PerformedStationClassCodeSequence'), + 0x00404030: ('SQ', '1', "Performed Station Geographic Location Code Sequence", '', 'PerformedStationGeographicLocationCodeSequence'), + 0x00404031: ('SQ', '1', "Requested Subsequent Workitem Code Sequence", 'Retired', 'RequestedSubsequentWorkitemCodeSequence'), + 0x00404032: ('SQ', '1', "Non-DICOM Output Code Sequence", 'Retired', 'NonDICOMOutputCodeSequence'), + 0x00404033: ('SQ', '1', "Output Information Sequence", '', 'OutputInformationSequence'), + 0x00404034: ('SQ', '1', "Scheduled Human Performers Sequence", '', 'ScheduledHumanPerformersSequence'), + 0x00404035: ('SQ', '1', "Actual Human Performers Sequence", '', 'ActualHumanPerformersSequence'), + 0x00404036: ('LO', '1', "Human Performer's Organization", '', 'HumanPerformerOrganization'), + 0x00404037: ('PN', '1', "Human Performer's Name", '', 'HumanPerformerName'), + 0x00404040: ('CS', '1', "Raw Data Handling", '', 'RawDataHandling'), + 0x00404041: ('CS', '1', "Input Readiness State", '', 'InputReadinessState'), + 0x00404050: ('DT', '1', "Performed Procedure Step Start DateTime", '', 'PerformedProcedureStepStartDateTime'), + 0x00404051: ('DT', '1', "Performed Procedure Step End DateTime", '', 'PerformedProcedureStepEndDateTime'), + 0x00404052: ('DT', '1', "Procedure Step Cancellation DateTime", '', 'ProcedureStepCancellationDateTime'), + 0x00408302: ('DS', '1', "Entrance Dose in mGy", '', 'EntranceDoseInmGy'), + 0x00409094: ('SQ', '1', "Referenced Image Real World Value Mapping Sequence", '', 'ReferencedImageRealWorldValueMappingSequence'), + 0x00409096: ('SQ', '1', "Real World Value Mapping Sequence", '', 'RealWorldValueMappingSequence'), + 0x00409098: ('SQ', '1', "Pixel Value Mapping Code Sequence", '', 'PixelValueMappingCodeSequence'), + 0x00409210: ('SH', '1', "LUT Label", '', 'LUTLabel'), + 0x00409211: ('US or SS', '1', "Real World Value Last Value Mapped", '', 'RealWorldValueLastValueMapped'), + 0x00409212: ('FD', '1-n', "Real World Value LUT Data", '', 'RealWorldValueLUTData'), + 0x00409216: ('US or SS', '1', "Real World Value First Value Mapped", '', 'RealWorldValueFirstValueMapped'), + 0x00409224: ('FD', '1', "Real World Value Intercept", '', 'RealWorldValueIntercept'), + 0x00409225: ('FD', '1', "Real World Value Slope", '', 'RealWorldValueSlope'), + 0x0040A007: ('CS', '1', "Findings Flag (Trial)", 'Retired', 'FindingsFlagTrial'), + 0x0040A010: ('CS', '1', "Relationship Type", '', 'RelationshipType'), + 0x0040A020: ('SQ', '1', "Findings Sequence (Trial)", 'Retired', 'FindingsSequenceTrial'), + 0x0040A021: ('UI', '1', "Findings Group UID (Trial)", 'Retired', 'FindingsGroupUIDTrial'), + 0x0040A022: ('UI', '1', "Referenced Findings Group UID (Trial)", 'Retired', 'ReferencedFindingsGroupUIDTrial'), + 0x0040A023: ('DA', '1', "Findings Group Recording Date (Trial)", 'Retired', 'FindingsGroupRecordingDateTrial'), + 0x0040A024: ('TM', '1', "Findings Group Recording Time (Trial)", 'Retired', 'FindingsGroupRecordingTimeTrial'), + 0x0040A026: ('SQ', '1', "Findings Source Category Code Sequence (Trial)", 'Retired', 'FindingsSourceCategoryCodeSequenceTrial'), + 0x0040A027: ('LO', '1', "Verifying Organization", '', 'VerifyingOrganization'), + 0x0040A028: ('SQ', '1', "Documenting Organization Identifier Code Sequence (Trial)", 'Retired', 'DocumentingOrganizationIdentifierCodeSequenceTrial'), + 0x0040A030: ('DT', '1', "Verification DateTime", '', 'VerificationDateTime'), + 0x0040A032: ('DT', '1', "Observation DateTime", '', 'ObservationDateTime'), + 0x0040A040: ('CS', '1', "Value Type", '', 'ValueType'), + 0x0040A043: ('SQ', '1', "Concept Name Code Sequence", '', 'ConceptNameCodeSequence'), + 0x0040A047: ('LO', '1', "Measurement Precision Description (Trial)", 'Retired', 'MeasurementPrecisionDescriptionTrial'), + 0x0040A050: ('CS', '1', "Continuity Of Content", '', 'ContinuityOfContent'), + 0x0040A057: ('CS', '1-n', "Urgency or Priority Alerts (Trial)", 'Retired', 'UrgencyOrPriorityAlertsTrial'), + 0x0040A060: ('LO', '1', "Sequencing Indicator (Trial)", 'Retired', 'SequencingIndicatorTrial'), + 0x0040A066: ('SQ', '1', "Document Identifier Code Sequence (Trial)", 'Retired', 'DocumentIdentifierCodeSequenceTrial'), + 0x0040A067: ('PN', '1', "Document Author (Trial)", 'Retired', 'DocumentAuthorTrial'), + 0x0040A068: ('SQ', '1', "Document Author Identifier Code Sequence (Trial)", 'Retired', 'DocumentAuthorIdentifierCodeSequenceTrial'), + 0x0040A070: ('SQ', '1', "Identifier Code Sequence (Trial)", 'Retired', 'IdentifierCodeSequenceTrial'), + 0x0040A073: ('SQ', '1', "Verifying Observer Sequence", '', 'VerifyingObserverSequence'), + 0x0040A074: ('OB', '1', "Object Binary Identifier (Trial)", 'Retired', 'ObjectBinaryIdentifierTrial'), + 0x0040A075: ('PN', '1', "Verifying Observer Name", '', 'VerifyingObserverName'), + 0x0040A076: ('SQ', '1', "Documenting Observer Identifier Code Sequence (Trial)", 'Retired', 'DocumentingObserverIdentifierCodeSequenceTrial'), + 0x0040A078: ('SQ', '1', "Author Observer Sequence", '', 'AuthorObserverSequence'), + 0x0040A07A: ('SQ', '1', "Participant Sequence", '', 'ParticipantSequence'), + 0x0040A07C: ('SQ', '1', "Custodial Organization Sequence", '', 'CustodialOrganizationSequence'), + 0x0040A080: ('CS', '1', "Participation Type", '', 'ParticipationType'), + 0x0040A082: ('DT', '1', "Participation DateTime", '', 'ParticipationDateTime'), + 0x0040A084: ('CS', '1', "Observer Type", '', 'ObserverType'), + 0x0040A085: ('SQ', '1', "Procedure Identifier Code Sequence (Trial)", 'Retired', 'ProcedureIdentifierCodeSequenceTrial'), + 0x0040A088: ('SQ', '1', "Verifying Observer Identification Code Sequence", '', 'VerifyingObserverIdentificationCodeSequence'), + 0x0040A089: ('OB', '1', "Object Directory Binary Identifier (Trial)", 'Retired', 'ObjectDirectoryBinaryIdentifierTrial'), + 0x0040A090: ('SQ', '1', "Equivalent CDA Document Sequence", 'Retired', 'EquivalentCDADocumentSequence'), + 0x0040A0B0: ('US', '2-2n', "Referenced Waveform Channels", '', 'ReferencedWaveformChannels'), + 0x0040A110: ('DA', '1', "Date of Document or Verbal Transaction (Trial)", 'Retired', 'DateOfDocumentOrVerbalTransactionTrial'), + 0x0040A112: ('TM', '1', "Time of Document Creation or Verbal Transaction (Trial)", 'Retired', 'TimeOfDocumentCreationOrVerbalTransactionTrial'), + 0x0040A120: ('DT', '1', "DateTime", '', 'DateTime'), + 0x0040A121: ('DA', '1', "Date", '', 'Date'), + 0x0040A122: ('TM', '1', "Time", '', 'Time'), + 0x0040A123: ('PN', '1', "Person Name", '', 'PersonName'), + 0x0040A124: ('UI', '1', "UID", '', 'UID'), + 0x0040A125: ('CS', '2', "Report Status ID (Trial)", 'Retired', 'ReportStatusIDTrial'), + 0x0040A130: ('CS', '1', "Temporal Range Type", '', 'TemporalRangeType'), + 0x0040A132: ('UL', '1-n', "Referenced Sample Positions", '', 'ReferencedSamplePositions'), + 0x0040A136: ('US', '1-n', "Referenced Frame Numbers", '', 'ReferencedFrameNumbers'), + 0x0040A138: ('DS', '1-n', "Referenced Time Offsets", '', 'ReferencedTimeOffsets'), + 0x0040A13A: ('DT', '1-n', "Referenced DateTime", '', 'ReferencedDateTime'), + 0x0040A160: ('UT', '1', "Text Value", '', 'TextValue'), + 0x0040A161: ('FD', '1-n', "Floating Point Value", '', 'FloatingPointValue'), + 0x0040A162: ('SL', '1-n', "Rational Numerator Value", '', 'RationalNumeratorValue'), + 0x0040A163: ('UL', '1-n', "Rational Denominator Value", '', 'RationalDenominatorValue'), + 0x0040A167: ('SQ', '1', "Observation Category Code Sequence (Trial)", 'Retired', 'ObservationCategoryCodeSequenceTrial'), + 0x0040A168: ('SQ', '1', "Concept Code Sequence", '', 'ConceptCodeSequence'), + 0x0040A16A: ('ST', '1', "Bibliographic Citation (Trial)", 'Retired', 'BibliographicCitationTrial'), + 0x0040A170: ('SQ', '1', "Purpose of Reference Code Sequence", '', 'PurposeOfReferenceCodeSequence'), + 0x0040A171: ('UI', '1', "Observation UID", '', 'ObservationUID'), + 0x0040A172: ('UI', '1', "Referenced Observation UID (Trial)", 'Retired', 'ReferencedObservationUIDTrial'), + 0x0040A173: ('CS', '1', "Referenced Observation Class (Trial)", 'Retired', 'ReferencedObservationClassTrial'), + 0x0040A174: ('CS', '1', "Referenced Object Observation Class (Trial)", 'Retired', 'ReferencedObjectObservationClassTrial'), + 0x0040A180: ('US', '1', "Annotation Group Number", '', 'AnnotationGroupNumber'), + 0x0040A192: ('DA', '1', "Observation Date (Trial)", 'Retired', 'ObservationDateTrial'), + 0x0040A193: ('TM', '1', "Observation Time (Trial)", 'Retired', 'ObservationTimeTrial'), + 0x0040A194: ('CS', '1', "Measurement Automation (Trial)", 'Retired', 'MeasurementAutomationTrial'), + 0x0040A195: ('SQ', '1', "Modifier Code Sequence", '', 'ModifierCodeSequence'), + 0x0040A224: ('ST', '1', "Identification Description (Trial)", 'Retired', 'IdentificationDescriptionTrial'), + 0x0040A290: ('CS', '1', "Coordinates Set Geometric Type (Trial)", 'Retired', 'CoordinatesSetGeometricTypeTrial'), + 0x0040A296: ('SQ', '1', "Algorithm Code Sequence (Trial)", 'Retired', 'AlgorithmCodeSequenceTrial'), + 0x0040A297: ('ST', '1', "Algorithm Description (Trial)", 'Retired', 'AlgorithmDescriptionTrial'), + 0x0040A29A: ('SL', '2-2n', "Pixel Coordinates Set (Trial)", 'Retired', 'PixelCoordinatesSetTrial'), + 0x0040A300: ('SQ', '1', "Measured Value Sequence", '', 'MeasuredValueSequence'), + 0x0040A301: ('SQ', '1', "Numeric Value Qualifier Code Sequence", '', 'NumericValueQualifierCodeSequence'), + 0x0040A307: ('PN', '1', "Current Observer (Trial)", 'Retired', 'CurrentObserverTrial'), + 0x0040A30A: ('DS', '1-n', "Numeric Value", '', 'NumericValue'), + 0x0040A313: ('SQ', '1', "Referenced Accession Sequence (Trial)", 'Retired', 'ReferencedAccessionSequenceTrial'), + 0x0040A33A: ('ST', '1', "Report Status Comment (Trial)", 'Retired', 'ReportStatusCommentTrial'), + 0x0040A340: ('SQ', '1', "Procedure Context Sequence (Trial)", 'Retired', 'ProcedureContextSequenceTrial'), + 0x0040A352: ('PN', '1', "Verbal Source (Trial)", 'Retired', 'VerbalSourceTrial'), + 0x0040A353: ('ST', '1', "Address (Trial)", 'Retired', 'AddressTrial'), + 0x0040A354: ('LO', '1', "Telephone Number (Trial)", 'Retired', 'TelephoneNumberTrial'), + 0x0040A358: ('SQ', '1', "Verbal Source Identifier Code Sequence (Trial)", 'Retired', 'VerbalSourceIdentifierCodeSequenceTrial'), + 0x0040A360: ('SQ', '1', "Predecessor Documents Sequence", '', 'PredecessorDocumentsSequence'), + 0x0040A370: ('SQ', '1', "Referenced Request Sequence", '', 'ReferencedRequestSequence'), + 0x0040A372: ('SQ', '1', "Performed Procedure Code Sequence", '', 'PerformedProcedureCodeSequence'), + 0x0040A375: ('SQ', '1', "Current Requested Procedure Evidence Sequence", '', 'CurrentRequestedProcedureEvidenceSequence'), + 0x0040A380: ('SQ', '1', "Report Detail Sequence (Trial)", 'Retired', 'ReportDetailSequenceTrial'), + 0x0040A385: ('SQ', '1', "Pertinent Other Evidence Sequence", '', 'PertinentOtherEvidenceSequence'), + 0x0040A390: ('SQ', '1', "HL7 Structured Document Reference Sequence", '', 'HL7StructuredDocumentReferenceSequence'), + 0x0040A402: ('UI', '1', "Observation Subject UID (Trial)", 'Retired', 'ObservationSubjectUIDTrial'), + 0x0040A403: ('CS', '1', "Observation Subject Class (Trial)", 'Retired', 'ObservationSubjectClassTrial'), + 0x0040A404: ('SQ', '1', "Observation Subject Type Code Sequence (Trial)", 'Retired', 'ObservationSubjectTypeCodeSequenceTrial'), + 0x0040A491: ('CS', '1', "Completion Flag", '', 'CompletionFlag'), + 0x0040A492: ('LO', '1', "Completion Flag Description", '', 'CompletionFlagDescription'), + 0x0040A493: ('CS', '1', "Verification Flag", '', 'VerificationFlag'), + 0x0040A494: ('CS', '1', "Archive Requested", '', 'ArchiveRequested'), + 0x0040A496: ('CS', '1', "Preliminary Flag", '', 'PreliminaryFlag'), + 0x0040A504: ('SQ', '1', "Content Template Sequence", '', 'ContentTemplateSequence'), + 0x0040A525: ('SQ', '1', "Identical Documents Sequence", '', 'IdenticalDocumentsSequence'), + 0x0040A600: ('CS', '1', "Observation Subject Context Flag (Trial)", 'Retired', 'ObservationSubjectContextFlagTrial'), + 0x0040A601: ('CS', '1', "Observer Context Flag (Trial)", 'Retired', 'ObserverContextFlagTrial'), + 0x0040A603: ('CS', '1', "Procedure Context Flag (Trial)", 'Retired', 'ProcedureContextFlagTrial'), + 0x0040A730: ('SQ', '1', "Content Sequence", '', 'ContentSequence'), + 0x0040A731: ('SQ', '1', "Relationship Sequence (Trial)", 'Retired', 'RelationshipSequenceTrial'), + 0x0040A732: ('SQ', '1', "Relationship Type Code Sequence (Trial)", 'Retired', 'RelationshipTypeCodeSequenceTrial'), + 0x0040A744: ('SQ', '1', "Language Code Sequence (Trial)", 'Retired', 'LanguageCodeSequenceTrial'), + 0x0040A992: ('ST', '1', "Uniform Resource Locator (Trial)", 'Retired', 'UniformResourceLocatorTrial'), + 0x0040B020: ('SQ', '1', "Waveform Annotation Sequence", '', 'WaveformAnnotationSequence'), + 0x0040DB00: ('CS', '1', "Template Identifier", '', 'TemplateIdentifier'), + 0x0040DB06: ('DT', '1', "Template Version", 'Retired', 'TemplateVersion'), + 0x0040DB07: ('DT', '1', "Template Local Version", 'Retired', 'TemplateLocalVersion'), + 0x0040DB0B: ('CS', '1', "Template Extension Flag", 'Retired', 'TemplateExtensionFlag'), + 0x0040DB0C: ('UI', '1', "Template Extension Organization UID", 'Retired', 'TemplateExtensionOrganizationUID'), + 0x0040DB0D: ('UI', '1', "Template Extension Creator UID", 'Retired', 'TemplateExtensionCreatorUID'), + 0x0040DB73: ('UL', '1-n', "Referenced Content Item Identifier", '', 'ReferencedContentItemIdentifier'), + 0x0040E001: ('ST', '1', "HL7 Instance Identifier", '', 'HL7InstanceIdentifier'), + 0x0040E004: ('DT', '1', "HL7 Document Effective Time", '', 'HL7DocumentEffectiveTime'), + 0x0040E006: ('SQ', '1', "HL7 Document Type Code Sequence", '', 'HL7DocumentTypeCodeSequence'), + 0x0040E008: ('SQ', '1', "Document Class Code Sequence", '', 'DocumentClassCodeSequence'), + 0x0040E010: ('UT', '1', "Retrieve URI", '', 'RetrieveURI'), + 0x0040E011: ('UI', '1', "Retrieve Location UID", '', 'RetrieveLocationUID'), + 0x0040E020: ('CS', '1', "Type of Instances", '', 'TypeOfInstances'), + 0x0040E021: ('SQ', '1', "DICOM Retrieval Sequence", '', 'DICOMRetrievalSequence'), + 0x0040E022: ('SQ', '1', "DICOM Media Retrieval Sequence", '', 'DICOMMediaRetrievalSequence'), + 0x0040E023: ('SQ', '1', "WADO Retrieval Sequence", '', 'WADORetrievalSequence'), + 0x0040E024: ('SQ', '1', "XDS Retrieval Sequence", '', 'XDSRetrievalSequence'), + 0x0040E030: ('UI', '1', "Repository Unique ID", '', 'RepositoryUniqueID'), + 0x0040E031: ('UI', '1', "Home Community ID", '', 'HomeCommunityID'), + 0x00420010: ('ST', '1', "Document Title", '', 'DocumentTitle'), + 0x00420011: ('OB', '1', "Encapsulated Document", '', 'EncapsulatedDocument'), + 0x00420012: ('LO', '1', "MIME Type of Encapsulated Document", '', 'MIMETypeOfEncapsulatedDocument'), + 0x00420013: ('SQ', '1', "Source Instance Sequence", '', 'SourceInstanceSequence'), + 0x00420014: ('LO', '1-n', "List of MIME Types", '', 'ListOfMIMETypes'), + 0x00440001: ('ST', '1', "Product Package Identifier", '', 'ProductPackageIdentifier'), + 0x00440002: ('CS', '1', "Substance Administration Approval", '', 'SubstanceAdministrationApproval'), + 0x00440003: ('LT', '1', "Approval Status Further Description", '', 'ApprovalStatusFurtherDescription'), + 0x00440004: ('DT', '1', "Approval Status DateTime", '', 'ApprovalStatusDateTime'), + 0x00440007: ('SQ', '1', "Product Type Code Sequence", '', 'ProductTypeCodeSequence'), + 0x00440008: ('LO', '1-n', "Product Name", '', 'ProductName'), + 0x00440009: ('LT', '1', "Product Description", '', 'ProductDescription'), + 0x0044000A: ('LO', '1', "Product Lot Identifier", '', 'ProductLotIdentifier'), + 0x0044000B: ('DT', '1', "Product Expiration DateTime", '', 'ProductExpirationDateTime'), + 0x00440010: ('DT', '1', "Substance Administration DateTime", '', 'SubstanceAdministrationDateTime'), + 0x00440011: ('LO', '1', "Substance Administration Notes", '', 'SubstanceAdministrationNotes'), + 0x00440012: ('LO', '1', "Substance Administration Device ID", '', 'SubstanceAdministrationDeviceID'), + 0x00440013: ('SQ', '1', "Product Parameter Sequence", '', 'ProductParameterSequence'), + 0x00440019: ('SQ', '1', "Substance Administration Parameter Sequence", '', 'SubstanceAdministrationParameterSequence'), + 0x00460012: ('LO', '1', "Lens Description", '', 'LensDescription'), + 0x00460014: ('SQ', '1', "Right Lens Sequence", '', 'RightLensSequence'), + 0x00460015: ('SQ', '1', "Left Lens Sequence", '', 'LeftLensSequence'), + 0x00460016: ('SQ', '1', "Unspecified Laterality Lens Sequence", '', 'UnspecifiedLateralityLensSequence'), + 0x00460018: ('SQ', '1', "Cylinder Sequence", '', 'CylinderSequence'), + 0x00460028: ('SQ', '1', "Prism Sequence", '', 'PrismSequence'), + 0x00460030: ('FD', '1', "Horizontal Prism Power", '', 'HorizontalPrismPower'), + 0x00460032: ('CS', '1', "Horizontal Prism Base", '', 'HorizontalPrismBase'), + 0x00460034: ('FD', '1', "Vertical Prism Power", '', 'VerticalPrismPower'), + 0x00460036: ('CS', '1', "Vertical Prism Base", '', 'VerticalPrismBase'), + 0x00460038: ('CS', '1', "Lens Segment Type", '', 'LensSegmentType'), + 0x00460040: ('FD', '1', "Optical Transmittance", '', 'OpticalTransmittance'), + 0x00460042: ('FD', '1', "Channel Width", '', 'ChannelWidth'), + 0x00460044: ('FD', '1', "Pupil Size", '', 'PupilSize'), + 0x00460046: ('FD', '1', "Corneal Size", '', 'CornealSize'), + 0x00460050: ('SQ', '1', "Autorefraction Right Eye Sequence", '', 'AutorefractionRightEyeSequence'), + 0x00460052: ('SQ', '1', "Autorefraction Left Eye Sequence", '', 'AutorefractionLeftEyeSequence'), + 0x00460060: ('FD', '1', "Distance Pupillary Distance", '', 'DistancePupillaryDistance'), + 0x00460062: ('FD', '1', "Near Pupillary Distance", '', 'NearPupillaryDistance'), + 0x00460063: ('FD', '1', "Intermediate Pupillary Distance", '', 'IntermediatePupillaryDistance'), + 0x00460064: ('FD', '1', "Other Pupillary Distance", '', 'OtherPupillaryDistance'), + 0x00460070: ('SQ', '1', "Keratometry Right Eye Sequence", '', 'KeratometryRightEyeSequence'), + 0x00460071: ('SQ', '1', "Keratometry Left Eye Sequence", '', 'KeratometryLeftEyeSequence'), + 0x00460074: ('SQ', '1', "Steep Keratometric Axis Sequence", '', 'SteepKeratometricAxisSequence'), + 0x00460075: ('FD', '1', "Radius of Curvature", '', 'RadiusOfCurvature'), + 0x00460076: ('FD', '1', "Keratometric Power", '', 'KeratometricPower'), + 0x00460077: ('FD', '1', "Keratometric Axis", '', 'KeratometricAxis'), + 0x00460080: ('SQ', '1', "Flat Keratometric Axis Sequence", '', 'FlatKeratometricAxisSequence'), + 0x00460092: ('CS', '1', "Background Color", '', 'BackgroundColor'), + 0x00460094: ('CS', '1', "Optotype", '', 'Optotype'), + 0x00460095: ('CS', '1', "Optotype Presentation", '', 'OptotypePresentation'), + 0x00460097: ('SQ', '1', "Subjective Refraction Right Eye Sequence", '', 'SubjectiveRefractionRightEyeSequence'), + 0x00460098: ('SQ', '1', "Subjective Refraction Left Eye Sequence", '', 'SubjectiveRefractionLeftEyeSequence'), + 0x00460100: ('SQ', '1', "Add Near Sequence", '', 'AddNearSequence'), + 0x00460101: ('SQ', '1', "Add Intermediate Sequence", '', 'AddIntermediateSequence'), + 0x00460102: ('SQ', '1', "Add Other Sequence", '', 'AddOtherSequence'), + 0x00460104: ('FD', '1', "Add Power", '', 'AddPower'), + 0x00460106: ('FD', '1', "Viewing Distance", '', 'ViewingDistance'), + 0x00460121: ('SQ', '1', "Visual Acuity Type Code Sequence", '', 'VisualAcuityTypeCodeSequence'), + 0x00460122: ('SQ', '1', "Visual Acuity Right Eye Sequence", '', 'VisualAcuityRightEyeSequence'), + 0x00460123: ('SQ', '1', "Visual Acuity Left Eye Sequence", '', 'VisualAcuityLeftEyeSequence'), + 0x00460124: ('SQ', '1', "Visual Acuity Both Eyes Open Sequence", '', 'VisualAcuityBothEyesOpenSequence'), + 0x00460125: ('CS', '1', "Viewing Distance Type", '', 'ViewingDistanceType'), + 0x00460135: ('SS', '2', "Visual Acuity Modifiers", '', 'VisualAcuityModifiers'), + 0x00460137: ('FD', '1', "Decimal Visual Acuity", '', 'DecimalVisualAcuity'), + 0x00460139: ('LO', '1', "Optotype Detailed Definition", '', 'OptotypeDetailedDefinition'), + 0x00460145: ('SQ', '1', "Referenced Refractive Measurements Sequence", '', 'ReferencedRefractiveMeasurementsSequence'), + 0x00460146: ('FD', '1', "Sphere Power", '', 'SpherePower'), + 0x00460147: ('FD', '1', "Cylinder Power", '', 'CylinderPower'), + 0x00460201: ('CS', '1', "Corneal Topography Surface", '', 'CornealTopographySurface'), + 0x00460202: ('FL', '2', "Corneal Vertex Location", '', 'CornealVertexLocation'), + 0x00460203: ('FL', '1', "Pupil Centroid X-Coordinate", '', 'PupilCentroidXCoordinate'), + 0x00460204: ('FL', '1', "Pupil Centroid Y-Coordinate", '', 'PupilCentroidYCoordinate'), + 0x00460205: ('FL', '1', "Equivalent Pupil Radius", '', 'EquivalentPupilRadius'), + 0x00460207: ('SQ', '1', "Corneal Topography Map Type Code Sequence", '', 'CornealTopographyMapTypeCodeSequence'), + 0x00460208: ('IS', '2-2n', "Vertices of the Outline of Pupil", '', 'VerticesOfTheOutlineOfPupil'), + 0x00460210: ('SQ', '1', "Corneal Topography Mapping Normals Sequence", '', 'CornealTopographyMappingNormalsSequence'), + 0x00460211: ('SQ', '1', "Maximum Corneal Curvature Sequence", '', 'MaximumCornealCurvatureSequence'), + 0x00460212: ('FL', '1', "Maximum Corneal Curvature", '', 'MaximumCornealCurvature'), + 0x00460213: ('FL', '2', "Maximum Corneal Curvature Location", '', 'MaximumCornealCurvatureLocation'), + 0x00460215: ('SQ', '1', "Minimum Keratometric Sequence", '', 'MinimumKeratometricSequence'), + 0x00460218: ('SQ', '1', "Simulated Keratometric Cylinder Sequence", '', 'SimulatedKeratometricCylinderSequence'), + 0x00460220: ('FL', '1', "Average Corneal Power", '', 'AverageCornealPower'), + 0x00460224: ('FL', '1', "Corneal I-S Value", '', 'CornealISValue'), + 0x00460227: ('FL', '1', "Analyzed Area", '', 'AnalyzedArea'), + 0x00460230: ('FL', '1', "Surface Regularity Index", '', 'SurfaceRegularityIndex'), + 0x00460232: ('FL', '1', "Surface Asymmetry Index", '', 'SurfaceAsymmetryIndex'), + 0x00460234: ('FL', '1', "Corneal Eccentricity Index", '', 'CornealEccentricityIndex'), + 0x00460236: ('FL', '1', "Keratoconus Prediction Index", '', 'KeratoconusPredictionIndex'), + 0x00460238: ('FL', '1', "Decimal Potential Visual Acuity", '', 'DecimalPotentialVisualAcuity'), + 0x00460242: ('CS', '1', "Corneal Topography Map Quality Evaluation", '', 'CornealTopographyMapQualityEvaluation'), + 0x00460244: ('SQ', '1', "Source Image Corneal Processed Data Sequence", '', 'SourceImageCornealProcessedDataSequence'), + 0x00460247: ('FL', '3', "Corneal Point Location", '', 'CornealPointLocation'), + 0x00460248: ('CS', '1', "Corneal Point Estimated", '', 'CornealPointEstimated'), + 0x00460249: ('FL', '1', "Axial Power", '', 'AxialPower'), + 0x00460250: ('FL', '1', "Tangential Power", '', 'TangentialPower'), + 0x00460251: ('FL', '1', "Refractive Power", '', 'RefractivePower'), + 0x00460252: ('FL', '1', "Relative Elevation", '', 'RelativeElevation'), + 0x00460253: ('FL', '1', "Corneal Wavefront", '', 'CornealWavefront'), + 0x00480001: ('FL', '1', "Imaged Volume Width", '', 'ImagedVolumeWidth'), + 0x00480002: ('FL', '1', "Imaged Volume Height", '', 'ImagedVolumeHeight'), + 0x00480003: ('FL', '1', "Imaged Volume Depth", '', 'ImagedVolumeDepth'), + 0x00480006: ('UL', '1', "Total Pixel Matrix Columns", '', 'TotalPixelMatrixColumns'), + 0x00480007: ('UL', '1', "Total Pixel Matrix Rows", '', 'TotalPixelMatrixRows'), + 0x00480008: ('SQ', '1', "Total Pixel Matrix Origin Sequence", '', 'TotalPixelMatrixOriginSequence'), + 0x00480010: ('CS', '1', "Specimen Label in Image", '', 'SpecimenLabelInImage'), + 0x00480011: ('CS', '1', "Focus Method", '', 'FocusMethod'), + 0x00480012: ('CS', '1', "Extended Depth of Field", '', 'ExtendedDepthOfField'), + 0x00480013: ('US', '1', "Number of Focal Planes", '', 'NumberOfFocalPlanes'), + 0x00480014: ('FL', '1', "Distance Between Focal Planes", '', 'DistanceBetweenFocalPlanes'), + 0x00480015: ('US', '3', "Recommended Absent Pixel CIELab Value", '', 'RecommendedAbsentPixelCIELabValue'), + 0x00480100: ('SQ', '1', "Illuminator Type Code Sequence", '', 'IlluminatorTypeCodeSequence'), + 0x00480102: ('DS', '6', "Image Orientation (Slide)", '', 'ImageOrientationSlide'), + 0x00480105: ('SQ', '1', "Optical Path Sequence", '', 'OpticalPathSequence'), + 0x00480106: ('SH', '1', "Optical Path Identifier", '', 'OpticalPathIdentifier'), + 0x00480107: ('ST', '1', "Optical Path Description", '', 'OpticalPathDescription'), + 0x00480108: ('SQ', '1', "Illumination Color Code Sequence", '', 'IlluminationColorCodeSequence'), + 0x00480110: ('SQ', '1', "Specimen Reference Sequence", '', 'SpecimenReferenceSequence'), + 0x00480111: ('DS', '1', "Condenser Lens Power", '', 'CondenserLensPower'), + 0x00480112: ('DS', '1', "Objective Lens Power", '', 'ObjectiveLensPower'), + 0x00480113: ('DS', '1', "Objective Lens Numerical Aperture", '', 'ObjectiveLensNumericalAperture'), + 0x00480120: ('SQ', '1', "Palette Color Lookup Table Sequence", '', 'PaletteColorLookupTableSequence'), + 0x00480200: ('SQ', '1', "Referenced Image Navigation Sequence", '', 'ReferencedImageNavigationSequence'), + 0x00480201: ('US', '2', "Top Left Hand Corner of Localizer Area", '', 'TopLeftHandCornerOfLocalizerArea'), + 0x00480202: ('US', '2', "Bottom Right Hand Corner of Localizer Area", '', 'BottomRightHandCornerOfLocalizerArea'), + 0x00480207: ('SQ', '1', "Optical Path Identification Sequence", '', 'OpticalPathIdentificationSequence'), + 0x0048021A: ('SQ', '1', "Plane Position (Slide) Sequence", '', 'PlanePositionSlideSequence'), + 0x0048021E: ('SL', '1', "Column Position In Total Image Pixel Matrix", '', 'ColumnPositionInTotalImagePixelMatrix'), + 0x0048021F: ('SL', '1', "Row Position In Total Image Pixel Matrix", '', 'RowPositionInTotalImagePixelMatrix'), + 0x00480301: ('CS', '1', "Pixel Origin Interpretation", '', 'PixelOriginInterpretation'), + 0x00500004: ('CS', '1', "Calibration Image", '', 'CalibrationImage'), + 0x00500010: ('SQ', '1', "Device Sequence", '', 'DeviceSequence'), + 0x00500012: ('SQ', '1', "Container Component Type Code Sequence", '', 'ContainerComponentTypeCodeSequence'), + 0x00500013: ('FD', '1', "Container Component Thickness", '', 'ContainerComponentThickness'), + 0x00500014: ('DS', '1', "Device Length", '', 'DeviceLength'), + 0x00500015: ('FD', '1', "Container Component Width", '', 'ContainerComponentWidth'), + 0x00500016: ('DS', '1', "Device Diameter", '', 'DeviceDiameter'), + 0x00500017: ('CS', '1', "Device Diameter Units", '', 'DeviceDiameterUnits'), + 0x00500018: ('DS', '1', "Device Volume", '', 'DeviceVolume'), + 0x00500019: ('DS', '1', "Inter-Marker Distance", '', 'InterMarkerDistance'), + 0x0050001A: ('CS', '1', "Container Component Material", '', 'ContainerComponentMaterial'), + 0x0050001B: ('LO', '1', "Container Component ID", '', 'ContainerComponentID'), + 0x0050001C: ('FD', '1', "Container Component Length", '', 'ContainerComponentLength'), + 0x0050001D: ('FD', '1', "Container Component Diameter", '', 'ContainerComponentDiameter'), + 0x0050001E: ('LO', '1', "Container Component Description", '', 'ContainerComponentDescription'), + 0x00500020: ('LO', '1', "Device Description", '', 'DeviceDescription'), + 0x00520001: ('FL', '1', "Contrast/Bolus Ingredient Percent by Volume", '', 'ContrastBolusIngredientPercentByVolume'), + 0x00520002: ('FD', '1', "OCT Focal Distance", '', 'OCTFocalDistance'), + 0x00520003: ('FD', '1', "Beam Spot Size", '', 'BeamSpotSize'), + 0x00520004: ('FD', '1', "Effective Refractive Index", '', 'EffectiveRefractiveIndex'), + 0x00520006: ('CS', '1', "OCT Acquisition Domain", '', 'OCTAcquisitionDomain'), + 0x00520007: ('FD', '1', "OCT Optical Center Wavelength", '', 'OCTOpticalCenterWavelength'), + 0x00520008: ('FD', '1', "Axial Resolution", '', 'AxialResolution'), + 0x00520009: ('FD', '1', "Ranging Depth", '', 'RangingDepth'), + 0x00520011: ('FD', '1', "A-line Rate", '', 'ALineRate'), + 0x00520012: ('US', '1', "A-lines Per Frame", '', 'ALinesPerFrame'), + 0x00520013: ('FD', '1', "Catheter Rotational Rate", '', 'CatheterRotationalRate'), + 0x00520014: ('FD', '1', "A-line Pixel Spacing", '', 'ALinePixelSpacing'), + 0x00520016: ('SQ', '1', "Mode of Percutaneous Access Sequence", '', 'ModeOfPercutaneousAccessSequence'), + 0x00520025: ('SQ', '1', "Intravascular OCT Frame Type Sequence", '', 'IntravascularOCTFrameTypeSequence'), + 0x00520026: ('CS', '1', "OCT Z Offset Applied", '', 'OCTZOffsetApplied'), + 0x00520027: ('SQ', '1', "Intravascular Frame Content Sequence", '', 'IntravascularFrameContentSequence'), + 0x00520028: ('FD', '1', "Intravascular Longitudinal Distance", '', 'IntravascularLongitudinalDistance'), + 0x00520029: ('SQ', '1', "Intravascular OCT Frame Content Sequence", '', 'IntravascularOCTFrameContentSequence'), + 0x00520030: ('SS', '1', "OCT Z Offset Correction", '', 'OCTZOffsetCorrection'), + 0x00520031: ('CS', '1', "Catheter Direction of Rotation", '', 'CatheterDirectionOfRotation'), + 0x00520033: ('FD', '1', "Seam Line Location", '', 'SeamLineLocation'), + 0x00520034: ('FD', '1', "First A-line Location", '', 'FirstALineLocation'), + 0x00520036: ('US', '1', "Seam Line Index", '', 'SeamLineIndex'), + 0x00520038: ('US', '1', "Number of Padded A-lines", '', 'NumberOfPaddedALines'), + 0x00520039: ('CS', '1', "Interpolation Type", '', 'InterpolationType'), + 0x0052003A: ('CS', '1', "Refractive Index Applied", '', 'RefractiveIndexApplied'), + 0x00540010: ('US', '1-n', "Energy Window Vector", '', 'EnergyWindowVector'), + 0x00540011: ('US', '1', "Number of Energy Windows", '', 'NumberOfEnergyWindows'), + 0x00540012: ('SQ', '1', "Energy Window Information Sequence", '', 'EnergyWindowInformationSequence'), + 0x00540013: ('SQ', '1', "Energy Window Range Sequence", '', 'EnergyWindowRangeSequence'), + 0x00540014: ('DS', '1', "Energy Window Lower Limit", '', 'EnergyWindowLowerLimit'), + 0x00540015: ('DS', '1', "Energy Window Upper Limit", '', 'EnergyWindowUpperLimit'), + 0x00540016: ('SQ', '1', "Radiopharmaceutical Information Sequence", '', 'RadiopharmaceuticalInformationSequence'), + 0x00540017: ('IS', '1', "Residual Syringe Counts", '', 'ResidualSyringeCounts'), + 0x00540018: ('SH', '1', "Energy Window Name", '', 'EnergyWindowName'), + 0x00540020: ('US', '1-n', "Detector Vector", '', 'DetectorVector'), + 0x00540021: ('US', '1', "Number of Detectors", '', 'NumberOfDetectors'), + 0x00540022: ('SQ', '1', "Detector Information Sequence", '', 'DetectorInformationSequence'), + 0x00540030: ('US', '1-n', "Phase Vector", '', 'PhaseVector'), + 0x00540031: ('US', '1', "Number of Phases", '', 'NumberOfPhases'), + 0x00540032: ('SQ', '1', "Phase Information Sequence", '', 'PhaseInformationSequence'), + 0x00540033: ('US', '1', "Number of Frames in Phase", '', 'NumberOfFramesInPhase'), + 0x00540036: ('IS', '1', "Phase Delay", '', 'PhaseDelay'), + 0x00540038: ('IS', '1', "Pause Between Frames", '', 'PauseBetweenFrames'), + 0x00540039: ('CS', '1', "Phase Description", '', 'PhaseDescription'), + 0x00540050: ('US', '1-n', "Rotation Vector", '', 'RotationVector'), + 0x00540051: ('US', '1', "Number of Rotations", '', 'NumberOfRotations'), + 0x00540052: ('SQ', '1', "Rotation Information Sequence", '', 'RotationInformationSequence'), + 0x00540053: ('US', '1', "Number of Frames in Rotation", '', 'NumberOfFramesInRotation'), + 0x00540060: ('US', '1-n', "R-R Interval Vector", '', 'RRIntervalVector'), + 0x00540061: ('US', '1', "Number of R-R Intervals", '', 'NumberOfRRIntervals'), + 0x00540062: ('SQ', '1', "Gated Information Sequence", '', 'GatedInformationSequence'), + 0x00540063: ('SQ', '1', "Data Information Sequence", '', 'DataInformationSequence'), + 0x00540070: ('US', '1-n', "Time Slot Vector", '', 'TimeSlotVector'), + 0x00540071: ('US', '1', "Number of Time Slots", '', 'NumberOfTimeSlots'), + 0x00540072: ('SQ', '1', "Time Slot Information Sequence", '', 'TimeSlotInformationSequence'), + 0x00540073: ('DS', '1', "Time Slot Time", '', 'TimeSlotTime'), + 0x00540080: ('US', '1-n', "Slice Vector", '', 'SliceVector'), + 0x00540081: ('US', '1', "Number of Slices", '', 'NumberOfSlices'), + 0x00540090: ('US', '1-n', "Angular View Vector", '', 'AngularViewVector'), + 0x00540100: ('US', '1-n', "Time Slice Vector", '', 'TimeSliceVector'), + 0x00540101: ('US', '1', "Number of Time Slices", '', 'NumberOfTimeSlices'), + 0x00540200: ('DS', '1', "Start Angle", '', 'StartAngle'), + 0x00540202: ('CS', '1', "Type of Detector Motion", '', 'TypeOfDetectorMotion'), + 0x00540210: ('IS', '1-n', "Trigger Vector", '', 'TriggerVector'), + 0x00540211: ('US', '1', "Number of Triggers in Phase", '', 'NumberOfTriggersInPhase'), + 0x00540220: ('SQ', '1', "View Code Sequence", '', 'ViewCodeSequence'), + 0x00540222: ('SQ', '1', "View Modifier Code Sequence", '', 'ViewModifierCodeSequence'), + 0x00540300: ('SQ', '1', "Radionuclide Code Sequence", '', 'RadionuclideCodeSequence'), + 0x00540302: ('SQ', '1', "Administration Route Code Sequence", '', 'AdministrationRouteCodeSequence'), + 0x00540304: ('SQ', '1', "Radiopharmaceutical Code Sequence", '', 'RadiopharmaceuticalCodeSequence'), + 0x00540306: ('SQ', '1', "Calibration Data Sequence", '', 'CalibrationDataSequence'), + 0x00540308: ('US', '1', "Energy Window Number", '', 'EnergyWindowNumber'), + 0x00540400: ('SH', '1', "Image ID", '', 'ImageID'), + 0x00540410: ('SQ', '1', "Patient Orientation Code Sequence", '', 'PatientOrientationCodeSequence'), + 0x00540412: ('SQ', '1', "Patient Orientation Modifier Code Sequence", '', 'PatientOrientationModifierCodeSequence'), + 0x00540414: ('SQ', '1', "Patient Gantry Relationship Code Sequence", '', 'PatientGantryRelationshipCodeSequence'), + 0x00540500: ('CS', '1', "Slice Progression Direction", '', 'SliceProgressionDirection'), + 0x00541000: ('CS', '2', "Series Type", '', 'SeriesType'), + 0x00541001: ('CS', '1', "Units", '', 'Units'), + 0x00541002: ('CS', '1', "Counts Source", '', 'CountsSource'), + 0x00541004: ('CS', '1', "Reprojection Method", '', 'ReprojectionMethod'), + 0x00541006: ('CS', '1', "SUV Type", '', 'SUVType'), + 0x00541100: ('CS', '1', "Randoms Correction Method", '', 'RandomsCorrectionMethod'), + 0x00541101: ('LO', '1', "Attenuation Correction Method", '', 'AttenuationCorrectionMethod'), + 0x00541102: ('CS', '1', "Decay Correction", '', 'DecayCorrection'), + 0x00541103: ('LO', '1', "Reconstruction Method", '', 'ReconstructionMethod'), + 0x00541104: ('LO', '1', "Detector Lines of Response Used", '', 'DetectorLinesOfResponseUsed'), + 0x00541105: ('LO', '1', "Scatter Correction Method", '', 'ScatterCorrectionMethod'), + 0x00541200: ('DS', '1', "Axial Acceptance", '', 'AxialAcceptance'), + 0x00541201: ('IS', '2', "Axial Mash", '', 'AxialMash'), + 0x00541202: ('IS', '1', "Transverse Mash", '', 'TransverseMash'), + 0x00541203: ('DS', '2', "Detector Element Size", '', 'DetectorElementSize'), + 0x00541210: ('DS', '1', "Coincidence Window Width", '', 'CoincidenceWindowWidth'), + 0x00541220: ('CS', '1-n', "Secondary Counts Type", '', 'SecondaryCountsType'), + 0x00541300: ('DS', '1', "Frame Reference Time", '', 'FrameReferenceTime'), + 0x00541310: ('IS', '1', "Primary (Prompts) Counts Accumulated", '', 'PrimaryPromptsCountsAccumulated'), + 0x00541311: ('IS', '1-n', "Secondary Counts Accumulated", '', 'SecondaryCountsAccumulated'), + 0x00541320: ('DS', '1', "Slice Sensitivity Factor", '', 'SliceSensitivityFactor'), + 0x00541321: ('DS', '1', "Decay Factor", '', 'DecayFactor'), + 0x00541322: ('DS', '1', "Dose Calibration Factor", '', 'DoseCalibrationFactor'), + 0x00541323: ('DS', '1', "Scatter Fraction Factor", '', 'ScatterFractionFactor'), + 0x00541324: ('DS', '1', "Dead Time Factor", '', 'DeadTimeFactor'), + 0x00541330: ('US', '1', "Image Index", '', 'ImageIndex'), + 0x00541400: ('CS', '1-n', "Counts Included", 'Retired', 'CountsIncluded'), + 0x00541401: ('CS', '1', "Dead Time Correction Flag", 'Retired', 'DeadTimeCorrectionFlag'), + 0x00603000: ('SQ', '1', "Histogram Sequence", '', 'HistogramSequence'), + 0x00603002: ('US', '1', "Histogram Number of Bins", '', 'HistogramNumberOfBins'), + 0x00603004: ('US or SS', '1', "Histogram First Bin Value", '', 'HistogramFirstBinValue'), + 0x00603006: ('US or SS', '1', "Histogram Last Bin Value", '', 'HistogramLastBinValue'), + 0x00603008: ('US', '1', "Histogram Bin Width", '', 'HistogramBinWidth'), + 0x00603010: ('LO', '1', "Histogram Explanation", '', 'HistogramExplanation'), + 0x00603020: ('UL', '1-n', "Histogram Data", '', 'HistogramData'), + 0x00620001: ('CS', '1', "Segmentation Type", '', 'SegmentationType'), + 0x00620002: ('SQ', '1', "Segment Sequence", '', 'SegmentSequence'), + 0x00620003: ('SQ', '1', "Segmented Property Category Code Sequence", '', 'SegmentedPropertyCategoryCodeSequence'), + 0x00620004: ('US', '1', "Segment Number", '', 'SegmentNumber'), + 0x00620005: ('LO', '1', "Segment Label", '', 'SegmentLabel'), + 0x00620006: ('ST', '1', "Segment Description", '', 'SegmentDescription'), + 0x00620008: ('CS', '1', "Segment Algorithm Type", '', 'SegmentAlgorithmType'), + 0x00620009: ('LO', '1', "Segment Algorithm Name", '', 'SegmentAlgorithmName'), + 0x0062000A: ('SQ', '1', "Segment Identification Sequence", '', 'SegmentIdentificationSequence'), + 0x0062000B: ('US', '1-n', "Referenced Segment Number", '', 'ReferencedSegmentNumber'), + 0x0062000C: ('US', '1', "Recommended Display Grayscale Value", '', 'RecommendedDisplayGrayscaleValue'), + 0x0062000D: ('US', '3', "Recommended Display CIELab Value", '', 'RecommendedDisplayCIELabValue'), + 0x0062000E: ('US', '1', "Maximum Fractional Value", '', 'MaximumFractionalValue'), + 0x0062000F: ('SQ', '1', "Segmented Property Type Code Sequence", '', 'SegmentedPropertyTypeCodeSequence'), + 0x00620010: ('CS', '1', "Segmentation Fractional Type", '', 'SegmentationFractionalType'), + 0x00620011: ('SQ', '1', "Segmented Property Type Modifier Code Sequence", '', 'SegmentedPropertyTypeModifierCodeSequence'), + 0x00620012: ('SQ', '1', "Used Segments Sequence", '', 'UsedSegmentsSequence'), + 0x00640002: ('SQ', '1', "Deformable Registration Sequence", '', 'DeformableRegistrationSequence'), + 0x00640003: ('UI', '1', "Source Frame of Reference UID", '', 'SourceFrameOfReferenceUID'), + 0x00640005: ('SQ', '1', "Deformable Registration Grid Sequence", '', 'DeformableRegistrationGridSequence'), + 0x00640007: ('UL', '3', "Grid Dimensions", '', 'GridDimensions'), + 0x00640008: ('FD', '3', "Grid Resolution", '', 'GridResolution'), + 0x00640009: ('OF', '1', "Vector Grid Data", '', 'VectorGridData'), + 0x0064000F: ('SQ', '1', "Pre Deformation Matrix Registration Sequence", '', 'PreDeformationMatrixRegistrationSequence'), + 0x00640010: ('SQ', '1', "Post Deformation Matrix Registration Sequence", '', 'PostDeformationMatrixRegistrationSequence'), + 0x00660001: ('UL', '1', "Number of Surfaces", '', 'NumberOfSurfaces'), + 0x00660002: ('SQ', '1', "Surface Sequence", '', 'SurfaceSequence'), + 0x00660003: ('UL', '1', "Surface Number", '', 'SurfaceNumber'), + 0x00660004: ('LT', '1', "Surface Comments", '', 'SurfaceComments'), + 0x00660009: ('CS', '1', "Surface Processing", '', 'SurfaceProcessing'), + 0x0066000A: ('FL', '1', "Surface Processing Ratio", '', 'SurfaceProcessingRatio'), + 0x0066000B: ('LO', '1', "Surface Processing Description", '', 'SurfaceProcessingDescription'), + 0x0066000C: ('FL', '1', "Recommended Presentation Opacity", '', 'RecommendedPresentationOpacity'), + 0x0066000D: ('CS', '1', "Recommended Presentation Type", '', 'RecommendedPresentationType'), + 0x0066000E: ('CS', '1', "Finite Volume", '', 'FiniteVolume'), + 0x00660010: ('CS', '1', "Manifold", '', 'Manifold'), + 0x00660011: ('SQ', '1', "Surface Points Sequence", '', 'SurfacePointsSequence'), + 0x00660012: ('SQ', '1', "Surface Points Normals Sequence", '', 'SurfacePointsNormalsSequence'), + 0x00660013: ('SQ', '1', "Surface Mesh Primitives Sequence", '', 'SurfaceMeshPrimitivesSequence'), + 0x00660015: ('UL', '1', "Number of Surface Points", '', 'NumberOfSurfacePoints'), + 0x00660016: ('OF', '1', "Point Coordinates Data", '', 'PointCoordinatesData'), + 0x00660017: ('FL', '3', "Point Position Accuracy", '', 'PointPositionAccuracy'), + 0x00660018: ('FL', '1', "Mean Point Distance", '', 'MeanPointDistance'), + 0x00660019: ('FL', '1', "Maximum Point Distance", '', 'MaximumPointDistance'), + 0x0066001A: ('FL', '6', "Points Bounding Box Coordinates", '', 'PointsBoundingBoxCoordinates'), + 0x0066001B: ('FL', '3', "Axis of Rotation", '', 'AxisOfRotation'), + 0x0066001C: ('FL', '3', "Center of Rotation", '', 'CenterOfRotation'), + 0x0066001E: ('UL', '1', "Number of Vectors", '', 'NumberOfVectors'), + 0x0066001F: ('US', '1', "Vector Dimensionality", '', 'VectorDimensionality'), + 0x00660020: ('FL', '1-n', "Vector Accuracy", '', 'VectorAccuracy'), + 0x00660021: ('OF', '1', "Vector Coordinate Data", '', 'VectorCoordinateData'), + 0x00660023: ('OW', '1', "Triangle Point Index List", '', 'TrianglePointIndexList'), + 0x00660024: ('OW', '1', "Edge Point Index List", '', 'EdgePointIndexList'), + 0x00660025: ('OW', '1', "Vertex Point Index List", '', 'VertexPointIndexList'), + 0x00660026: ('SQ', '1', "Triangle Strip Sequence", '', 'TriangleStripSequence'), + 0x00660027: ('SQ', '1', "Triangle Fan Sequence", '', 'TriangleFanSequence'), + 0x00660028: ('SQ', '1', "Line Sequence", '', 'LineSequence'), + 0x00660029: ('OW', '1', "Primitive Point Index List", '', 'PrimitivePointIndexList'), + 0x0066002A: ('UL', '1', "Surface Count", '', 'SurfaceCount'), + 0x0066002B: ('SQ', '1', "Referenced Surface Sequence", '', 'ReferencedSurfaceSequence'), + 0x0066002C: ('UL', '1', "Referenced Surface Number", '', 'ReferencedSurfaceNumber'), + 0x0066002D: ('SQ', '1', "Segment Surface Generation Algorithm Identification Sequence", '', 'SegmentSurfaceGenerationAlgorithmIdentificationSequence'), + 0x0066002E: ('SQ', '1', "Segment Surface Source Instance Sequence", '', 'SegmentSurfaceSourceInstanceSequence'), + 0x0066002F: ('SQ', '1', "Algorithm Family Code Sequence", '', 'AlgorithmFamilyCodeSequence'), + 0x00660030: ('SQ', '1', "Algorithm Name Code Sequence", '', 'AlgorithmNameCodeSequence'), + 0x00660031: ('LO', '1', "Algorithm Version", '', 'AlgorithmVersion'), + 0x00660032: ('LT', '1', "Algorithm Parameters", '', 'AlgorithmParameters'), + 0x00660034: ('SQ', '1', "Facet Sequence", '', 'FacetSequence'), + 0x00660035: ('SQ', '1', "Surface Processing Algorithm Identification Sequence", '', 'SurfaceProcessingAlgorithmIdentificationSequence'), + 0x00660036: ('LO', '1', "Algorithm Name", '', 'AlgorithmName'), + 0x00660037: ('FL', '1', "Recommended Point Radius", '', 'RecommendedPointRadius'), + 0x00660038: ('FL', '1', "Recommended Line Thickness", '', 'RecommendedLineThickness'), + 0x00686210: ('LO', '1', "Implant Size", '', 'ImplantSize'), + 0x00686221: ('LO', '1', "Implant Template Version", '', 'ImplantTemplateVersion'), + 0x00686222: ('SQ', '1', "Replaced Implant Template Sequence", '', 'ReplacedImplantTemplateSequence'), + 0x00686223: ('CS', '1', "Implant Type", '', 'ImplantType'), + 0x00686224: ('SQ', '1', "Derivation Implant Template Sequence", '', 'DerivationImplantTemplateSequence'), + 0x00686225: ('SQ', '1', "Original Implant Template Sequence", '', 'OriginalImplantTemplateSequence'), + 0x00686226: ('DT', '1', "Effective DateTime", '', 'EffectiveDateTime'), + 0x00686230: ('SQ', '1', "Implant Target Anatomy Sequence", '', 'ImplantTargetAnatomySequence'), + 0x00686260: ('SQ', '1', "Information From Manufacturer Sequence", '', 'InformationFromManufacturerSequence'), + 0x00686265: ('SQ', '1', "Notification From Manufacturer Sequence", '', 'NotificationFromManufacturerSequence'), + 0x00686270: ('DT', '1', "Information Issue DateTime", '', 'InformationIssueDateTime'), + 0x00686280: ('ST', '1', "Information Summary", '', 'InformationSummary'), + 0x006862A0: ('SQ', '1', "Implant Regulatory Disapproval Code Sequence", '', 'ImplantRegulatoryDisapprovalCodeSequence'), + 0x006862A5: ('FD', '1', "Overall Template Spatial Tolerance", '', 'OverallTemplateSpatialTolerance'), + 0x006862C0: ('SQ', '1', "HPGL Document Sequence", '', 'HPGLDocumentSequence'), + 0x006862D0: ('US', '1', "HPGL Document ID", '', 'HPGLDocumentID'), + 0x006862D5: ('LO', '1', "HPGL Document Label", '', 'HPGLDocumentLabel'), + 0x006862E0: ('SQ', '1', "View Orientation Code Sequence", '', 'ViewOrientationCodeSequence'), + 0x006862F0: ('FD', '9', "View Orientation Modifier", '', 'ViewOrientationModifier'), + 0x006862F2: ('FD', '1', "HPGL Document Scaling", '', 'HPGLDocumentScaling'), + 0x00686300: ('OB', '1', "HPGL Document", '', 'HPGLDocument'), + 0x00686310: ('US', '1', "HPGL Contour Pen Number", '', 'HPGLContourPenNumber'), + 0x00686320: ('SQ', '1', "HPGL Pen Sequence", '', 'HPGLPenSequence'), + 0x00686330: ('US', '1', "HPGL Pen Number", '', 'HPGLPenNumber'), + 0x00686340: ('LO', '1', "HPGL Pen Label", '', 'HPGLPenLabel'), + 0x00686345: ('ST', '1', "HPGL Pen Description", '', 'HPGLPenDescription'), + 0x00686346: ('FD', '2', "Recommended Rotation Point", '', 'RecommendedRotationPoint'), + 0x00686347: ('FD', '4', "Bounding Rectangle", '', 'BoundingRectangle'), + 0x00686350: ('US', '1-n', "Implant Template 3D Model Surface Number", '', 'ImplantTemplate3DModelSurfaceNumber'), + 0x00686360: ('SQ', '1', "Surface Model Description Sequence", '', 'SurfaceModelDescriptionSequence'), + 0x00686380: ('LO', '1', "Surface Model Label", '', 'SurfaceModelLabel'), + 0x00686390: ('FD', '1', "Surface Model Scaling Factor", '', 'SurfaceModelScalingFactor'), + 0x006863A0: ('SQ', '1', "Materials Code Sequence", '', 'MaterialsCodeSequence'), + 0x006863A4: ('SQ', '1', "Coating Materials Code Sequence", '', 'CoatingMaterialsCodeSequence'), + 0x006863A8: ('SQ', '1', "Implant Type Code Sequence", '', 'ImplantTypeCodeSequence'), + 0x006863AC: ('SQ', '1', "Fixation Method Code Sequence", '', 'FixationMethodCodeSequence'), + 0x006863B0: ('SQ', '1', "Mating Feature Sets Sequence", '', 'MatingFeatureSetsSequence'), + 0x006863C0: ('US', '1', "Mating Feature Set ID", '', 'MatingFeatureSetID'), + 0x006863D0: ('LO', '1', "Mating Feature Set Label", '', 'MatingFeatureSetLabel'), + 0x006863E0: ('SQ', '1', "Mating Feature Sequence", '', 'MatingFeatureSequence'), + 0x006863F0: ('US', '1', "Mating Feature ID", '', 'MatingFeatureID'), + 0x00686400: ('SQ', '1', "Mating Feature Degree of Freedom Sequence", '', 'MatingFeatureDegreeOfFreedomSequence'), + 0x00686410: ('US', '1', "Degree of Freedom ID", '', 'DegreeOfFreedomID'), + 0x00686420: ('CS', '1', "Degree of Freedom Type", '', 'DegreeOfFreedomType'), + 0x00686430: ('SQ', '1', "2D Mating Feature Coordinates Sequence", '', 'TwoDMatingFeatureCoordinatesSequence'), + 0x00686440: ('US', '1', "Referenced HPGL Document ID", '', 'ReferencedHPGLDocumentID'), + 0x00686450: ('FD', '2', "2D Mating Point", '', 'TwoDMatingPoint'), + 0x00686460: ('FD', '4', "2D Mating Axes", '', 'TwoDMatingAxes'), + 0x00686470: ('SQ', '1', "2D Degree of Freedom Sequence", '', 'TwoDDegreeOfFreedomSequence'), + 0x00686490: ('FD', '3', "3D Degree of Freedom Axis", '', 'ThreeDDegreeOfFreedomAxis'), + 0x006864A0: ('FD', '2', "Range of Freedom", '', 'RangeOfFreedom'), + 0x006864C0: ('FD', '3', "3D Mating Point", '', 'ThreeDMatingPoint'), + 0x006864D0: ('FD', '9', "3D Mating Axes", '', 'ThreeDMatingAxes'), + 0x006864F0: ('FD', '3', "2D Degree of Freedom Axis", '', 'TwoDDegreeOfFreedomAxis'), + 0x00686500: ('SQ', '1', "Planning Landmark Point Sequence", '', 'PlanningLandmarkPointSequence'), + 0x00686510: ('SQ', '1', "Planning Landmark Line Sequence", '', 'PlanningLandmarkLineSequence'), + 0x00686520: ('SQ', '1', "Planning Landmark Plane Sequence", '', 'PlanningLandmarkPlaneSequence'), + 0x00686530: ('US', '1', "Planning Landmark ID", '', 'PlanningLandmarkID'), + 0x00686540: ('LO', '1', "Planning Landmark Description", '', 'PlanningLandmarkDescription'), + 0x00686545: ('SQ', '1', "Planning Landmark Identification Code Sequence", '', 'PlanningLandmarkIdentificationCodeSequence'), + 0x00686550: ('SQ', '1', "2D Point Coordinates Sequence", '', 'TwoDPointCoordinatesSequence'), + 0x00686560: ('FD', '2', "2D Point Coordinates", '', 'TwoDPointCoordinates'), + 0x00686590: ('FD', '3', "3D Point Coordinates", '', 'ThreeDPointCoordinates'), + 0x006865A0: ('SQ', '1', "2D Line Coordinates Sequence", '', 'TwoDLineCoordinatesSequence'), + 0x006865B0: ('FD', '4', "2D Line Coordinates", '', 'TwoDLineCoordinates'), + 0x006865D0: ('FD', '6', "3D Line Coordinates", '', 'ThreeDLineCoordinates'), + 0x006865E0: ('SQ', '1', "2D Plane Coordinates Sequence", '', 'TwoDPlaneCoordinatesSequence'), + 0x006865F0: ('FD', '4', "2D Plane Intersection", '', 'TwoDPlaneIntersection'), + 0x00686610: ('FD', '3', "3D Plane Origin", '', 'ThreeDPlaneOrigin'), + 0x00686620: ('FD', '3', "3D Plane Normal", '', 'ThreeDPlaneNormal'), + 0x00700001: ('SQ', '1', "Graphic Annotation Sequence", '', 'GraphicAnnotationSequence'), + 0x00700002: ('CS', '1', "Graphic Layer", '', 'GraphicLayer'), + 0x00700003: ('CS', '1', "Bounding Box Annotation Units", '', 'BoundingBoxAnnotationUnits'), + 0x00700004: ('CS', '1', "Anchor Point Annotation Units", '', 'AnchorPointAnnotationUnits'), + 0x00700005: ('CS', '1', "Graphic Annotation Units", '', 'GraphicAnnotationUnits'), + 0x00700006: ('ST', '1', "Unformatted Text Value", '', 'UnformattedTextValue'), + 0x00700008: ('SQ', '1', "Text Object Sequence", '', 'TextObjectSequence'), + 0x00700009: ('SQ', '1', "Graphic Object Sequence", '', 'GraphicObjectSequence'), + 0x00700010: ('FL', '2', "Bounding Box Top Left Hand Corner", '', 'BoundingBoxTopLeftHandCorner'), + 0x00700011: ('FL', '2', "Bounding Box Bottom Right Hand Corner", '', 'BoundingBoxBottomRightHandCorner'), + 0x00700012: ('CS', '1', "Bounding Box Text Horizontal Justification", '', 'BoundingBoxTextHorizontalJustification'), + 0x00700014: ('FL', '2', "Anchor Point", '', 'AnchorPoint'), + 0x00700015: ('CS', '1', "Anchor Point Visibility", '', 'AnchorPointVisibility'), + 0x00700020: ('US', '1', "Graphic Dimensions", '', 'GraphicDimensions'), + 0x00700021: ('US', '1', "Number of Graphic Points", '', 'NumberOfGraphicPoints'), + 0x00700022: ('FL', '2-n', "Graphic Data", '', 'GraphicData'), + 0x00700023: ('CS', '1', "Graphic Type", '', 'GraphicType'), + 0x00700024: ('CS', '1', "Graphic Filled", '', 'GraphicFilled'), + 0x00700040: ('IS', '1', "Image Rotation (Retired)", 'Retired', 'ImageRotationRetired'), + 0x00700041: ('CS', '1', "Image Horizontal Flip", '', 'ImageHorizontalFlip'), + 0x00700042: ('US', '1', "Image Rotation", '', 'ImageRotation'), + 0x00700050: ('US', '2', "Displayed Area Top Left Hand Corner (Trial)", 'Retired', 'DisplayedAreaTopLeftHandCornerTrial'), + 0x00700051: ('US', '2', "Displayed Area Bottom Right Hand Corner (Trial)", 'Retired', 'DisplayedAreaBottomRightHandCornerTrial'), + 0x00700052: ('SL', '2', "Displayed Area Top Left Hand Corner", '', 'DisplayedAreaTopLeftHandCorner'), + 0x00700053: ('SL', '2', "Displayed Area Bottom Right Hand Corner", '', 'DisplayedAreaBottomRightHandCorner'), + 0x0070005A: ('SQ', '1', "Displayed Area Selection Sequence", '', 'DisplayedAreaSelectionSequence'), + 0x00700060: ('SQ', '1', "Graphic Layer Sequence", '', 'GraphicLayerSequence'), + 0x00700062: ('IS', '1', "Graphic Layer Order", '', 'GraphicLayerOrder'), + 0x00700066: ('US', '1', "Graphic Layer Recommended Display Grayscale Value", '', 'GraphicLayerRecommendedDisplayGrayscaleValue'), + 0x00700067: ('US', '3', "Graphic Layer Recommended Display RGB Value", 'Retired', 'GraphicLayerRecommendedDisplayRGBValue'), + 0x00700068: ('LO', '1', "Graphic Layer Description", '', 'GraphicLayerDescription'), + 0x00700080: ('CS', '1', "Content Label", '', 'ContentLabel'), + 0x00700081: ('LO', '1', "Content Description", '', 'ContentDescription'), + 0x00700082: ('DA', '1', "Presentation Creation Date", '', 'PresentationCreationDate'), + 0x00700083: ('TM', '1', "Presentation Creation Time", '', 'PresentationCreationTime'), + 0x00700084: ('PN', '1', "Content Creator's Name", '', 'ContentCreatorName'), + 0x00700086: ('SQ', '1', "Content Creator's Identification Code Sequence", '', 'ContentCreatorIdentificationCodeSequence'), + 0x00700087: ('SQ', '1', "Alternate Content Description Sequence", '', 'AlternateContentDescriptionSequence'), + 0x00700100: ('CS', '1', "Presentation Size Mode", '', 'PresentationSizeMode'), + 0x00700101: ('DS', '2', "Presentation Pixel Spacing", '', 'PresentationPixelSpacing'), + 0x00700102: ('IS', '2', "Presentation Pixel Aspect Ratio", '', 'PresentationPixelAspectRatio'), + 0x00700103: ('FL', '1', "Presentation Pixel Magnification Ratio", '', 'PresentationPixelMagnificationRatio'), + 0x00700207: ('LO', '1', "Graphic Group Label", '', 'GraphicGroupLabel'), + 0x00700208: ('ST', '1', "Graphic Group Description", '', 'GraphicGroupDescription'), + 0x00700209: ('SQ', '1', "Compound Graphic Sequence", '', 'CompoundGraphicSequence'), + 0x00700226: ('UL', '1', "Compound Graphic Instance ID", '', 'CompoundGraphicInstanceID'), + 0x00700227: ('LO', '1', "Font Name", '', 'FontName'), + 0x00700228: ('CS', '1', "Font Name Type", '', 'FontNameType'), + 0x00700229: ('LO', '1', "CSS Font Name", '', 'CSSFontName'), + 0x00700230: ('FD', '1', "Rotation Angle", '', 'RotationAngle'), + 0x00700231: ('SQ', '1', "Text Style Sequence", '', 'TextStyleSequence'), + 0x00700232: ('SQ', '1', "Line Style Sequence", '', 'LineStyleSequence'), + 0x00700233: ('SQ', '1', "Fill Style Sequence", '', 'FillStyleSequence'), + 0x00700234: ('SQ', '1', "Graphic Group Sequence", '', 'GraphicGroupSequence'), + 0x00700241: ('US', '3', "Text Color CIELab Value", '', 'TextColorCIELabValue'), + 0x00700242: ('CS', '1', "Horizontal Alignment", '', 'HorizontalAlignment'), + 0x00700243: ('CS', '1', "Vertical Alignment", '', 'VerticalAlignment'), + 0x00700244: ('CS', '1', "Shadow Style", '', 'ShadowStyle'), + 0x00700245: ('FL', '1', "Shadow Offset X", '', 'ShadowOffsetX'), + 0x00700246: ('FL', '1', "Shadow Offset Y", '', 'ShadowOffsetY'), + 0x00700247: ('US', '3', "Shadow Color CIELab Value", '', 'ShadowColorCIELabValue'), + 0x00700248: ('CS', '1', "Underlined", '', 'Underlined'), + 0x00700249: ('CS', '1', "Bold", '', 'Bold'), + 0x00700250: ('CS', '1', "Italic", '', 'Italic'), + 0x00700251: ('US', '3', "Pattern On Color CIELab Value", '', 'PatternOnColorCIELabValue'), + 0x00700252: ('US', '3', "Pattern Off Color CIELab Value", '', 'PatternOffColorCIELabValue'), + 0x00700253: ('FL', '1', "Line Thickness", '', 'LineThickness'), + 0x00700254: ('CS', '1', "Line Dashing Style", '', 'LineDashingStyle'), + 0x00700255: ('UL', '1', "Line Pattern", '', 'LinePattern'), + 0x00700256: ('OB', '1', "Fill Pattern", '', 'FillPattern'), + 0x00700257: ('CS', '1', "Fill Mode", '', 'FillMode'), + 0x00700258: ('FL', '1', "Shadow Opacity", '', 'ShadowOpacity'), + 0x00700261: ('FL', '1', "Gap Length", '', 'GapLength'), + 0x00700262: ('FL', '1', "Diameter of Visibility", '', 'DiameterOfVisibility'), + 0x00700273: ('FL', '2', "Rotation Point", '', 'RotationPoint'), + 0x00700274: ('CS', '1', "Tick Alignment", '', 'TickAlignment'), + 0x00700278: ('CS', '1', "Show Tick Label", '', 'ShowTickLabel'), + 0x00700279: ('CS', '1', "Tick Label Alignment", '', 'TickLabelAlignment'), + 0x00700282: ('CS', '1', "Compound Graphic Units", '', 'CompoundGraphicUnits'), + 0x00700284: ('FL', '1', "Pattern On Opacity", '', 'PatternOnOpacity'), + 0x00700285: ('FL', '1', "Pattern Off Opacity", '', 'PatternOffOpacity'), + 0x00700287: ('SQ', '1', "Major Ticks Sequence", '', 'MajorTicksSequence'), + 0x00700288: ('FL', '1', "Tick Position", '', 'TickPosition'), + 0x00700289: ('SH', '1', "Tick Label", '', 'TickLabel'), + 0x00700294: ('CS', '1', "Compound Graphic Type", '', 'CompoundGraphicType'), + 0x00700295: ('UL', '1', "Graphic Group ID", '', 'GraphicGroupID'), + 0x00700306: ('CS', '1', "Shape Type", '', 'ShapeType'), + 0x00700308: ('SQ', '1', "Registration Sequence", '', 'RegistrationSequence'), + 0x00700309: ('SQ', '1', "Matrix Registration Sequence", '', 'MatrixRegistrationSequence'), + 0x0070030A: ('SQ', '1', "Matrix Sequence", '', 'MatrixSequence'), + 0x0070030C: ('CS', '1', "Frame of Reference Transformation Matrix Type", '', 'FrameOfReferenceTransformationMatrixType'), + 0x0070030D: ('SQ', '1', "Registration Type Code Sequence", '', 'RegistrationTypeCodeSequence'), + 0x0070030F: ('ST', '1', "Fiducial Description", '', 'FiducialDescription'), + 0x00700310: ('SH', '1', "Fiducial Identifier", '', 'FiducialIdentifier'), + 0x00700311: ('SQ', '1', "Fiducial Identifier Code Sequence", '', 'FiducialIdentifierCodeSequence'), + 0x00700312: ('FD', '1', "Contour Uncertainty Radius", '', 'ContourUncertaintyRadius'), + 0x00700314: ('SQ', '1', "Used Fiducials Sequence", '', 'UsedFiducialsSequence'), + 0x00700318: ('SQ', '1', "Graphic Coordinates Data Sequence", '', 'GraphicCoordinatesDataSequence'), + 0x0070031A: ('UI', '1', "Fiducial UID", '', 'FiducialUID'), + 0x0070031C: ('SQ', '1', "Fiducial Set Sequence", '', 'FiducialSetSequence'), + 0x0070031E: ('SQ', '1', "Fiducial Sequence", '', 'FiducialSequence'), + 0x00700401: ('US', '3', "Graphic Layer Recommended Display CIELab Value", '', 'GraphicLayerRecommendedDisplayCIELabValue'), + 0x00700402: ('SQ', '1', "Blending Sequence", '', 'BlendingSequence'), + 0x00700403: ('FL', '1', "Relative Opacity", '', 'RelativeOpacity'), + 0x00700404: ('SQ', '1', "Referenced Spatial Registration Sequence", '', 'ReferencedSpatialRegistrationSequence'), + 0x00700405: ('CS', '1', "Blending Position", '', 'BlendingPosition'), + 0x00720002: ('SH', '1', "Hanging Protocol Name", '', 'HangingProtocolName'), + 0x00720004: ('LO', '1', "Hanging Protocol Description", '', 'HangingProtocolDescription'), + 0x00720006: ('CS', '1', "Hanging Protocol Level", '', 'HangingProtocolLevel'), + 0x00720008: ('LO', '1', "Hanging Protocol Creator", '', 'HangingProtocolCreator'), + 0x0072000A: ('DT', '1', "Hanging Protocol Creation DateTime", '', 'HangingProtocolCreationDateTime'), + 0x0072000C: ('SQ', '1', "Hanging Protocol Definition Sequence", '', 'HangingProtocolDefinitionSequence'), + 0x0072000E: ('SQ', '1', "Hanging Protocol User Identification Code Sequence", '', 'HangingProtocolUserIdentificationCodeSequence'), + 0x00720010: ('LO', '1', "Hanging Protocol User Group Name", '', 'HangingProtocolUserGroupName'), + 0x00720012: ('SQ', '1', "Source Hanging Protocol Sequence", '', 'SourceHangingProtocolSequence'), + 0x00720014: ('US', '1', "Number of Priors Referenced", '', 'NumberOfPriorsReferenced'), + 0x00720020: ('SQ', '1', "Image Sets Sequence", '', 'ImageSetsSequence'), + 0x00720022: ('SQ', '1', "Image Set Selector Sequence", '', 'ImageSetSelectorSequence'), + 0x00720024: ('CS', '1', "Image Set Selector Usage Flag", '', 'ImageSetSelectorUsageFlag'), + 0x00720026: ('AT', '1', "Selector Attribute", '', 'SelectorAttribute'), + 0x00720028: ('US', '1', "Selector Value Number", '', 'SelectorValueNumber'), + 0x00720030: ('SQ', '1', "Time Based Image Sets Sequence", '', 'TimeBasedImageSetsSequence'), + 0x00720032: ('US', '1', "Image Set Number", '', 'ImageSetNumber'), + 0x00720034: ('CS', '1', "Image Set Selector Category", '', 'ImageSetSelectorCategory'), + 0x00720038: ('US', '2', "Relative Time", '', 'RelativeTime'), + 0x0072003A: ('CS', '1', "Relative Time Units", '', 'RelativeTimeUnits'), + 0x0072003C: ('SS', '2', "Abstract Prior Value", '', 'AbstractPriorValue'), + 0x0072003E: ('SQ', '1', "Abstract Prior Code Sequence", '', 'AbstractPriorCodeSequence'), + 0x00720040: ('LO', '1', "Image Set Label", '', 'ImageSetLabel'), + 0x00720050: ('CS', '1', "Selector Attribute VR", '', 'SelectorAttributeVR'), + 0x00720052: ('AT', '1-n', "Selector Sequence Pointer", '', 'SelectorSequencePointer'), + 0x00720054: ('LO', '1-n', "Selector Sequence Pointer Private Creator", '', 'SelectorSequencePointerPrivateCreator'), + 0x00720056: ('LO', '1', "Selector Attribute Private Creator", '', 'SelectorAttributePrivateCreator'), + 0x00720060: ('AT', '1-n', "Selector AT Value", '', 'SelectorATValue'), + 0x00720062: ('CS', '1-n', "Selector CS Value", '', 'SelectorCSValue'), + 0x00720064: ('IS', '1-n', "Selector IS Value", '', 'SelectorISValue'), + 0x00720066: ('LO', '1-n', "Selector LO Value", '', 'SelectorLOValue'), + 0x00720068: ('LT', '1', "Selector LT Value", '', 'SelectorLTValue'), + 0x0072006A: ('PN', '1-n', "Selector PN Value", '', 'SelectorPNValue'), + 0x0072006C: ('SH', '1-n', "Selector SH Value", '', 'SelectorSHValue'), + 0x0072006E: ('ST', '1', "Selector ST Value", '', 'SelectorSTValue'), + 0x00720070: ('UT', '1', "Selector UT Value", '', 'SelectorUTValue'), + 0x00720072: ('DS', '1-n', "Selector DS Value", '', 'SelectorDSValue'), + 0x00720074: ('FD', '1-n', "Selector FD Value", '', 'SelectorFDValue'), + 0x00720076: ('FL', '1-n', "Selector FL Value", '', 'SelectorFLValue'), + 0x00720078: ('UL', '1-n', "Selector UL Value", '', 'SelectorULValue'), + 0x0072007A: ('US', '1-n', "Selector US Value", '', 'SelectorUSValue'), + 0x0072007C: ('SL', '1-n', "Selector SL Value", '', 'SelectorSLValue'), + 0x0072007E: ('SS', '1-n', "Selector SS Value", '', 'SelectorSSValue'), + 0x00720080: ('SQ', '1', "Selector Code Sequence Value", '', 'SelectorCodeSequenceValue'), + 0x00720100: ('US', '1', "Number of Screens", '', 'NumberOfScreens'), + 0x00720102: ('SQ', '1', "Nominal Screen Definition Sequence", '', 'NominalScreenDefinitionSequence'), + 0x00720104: ('US', '1', "Number of Vertical Pixels", '', 'NumberOfVerticalPixels'), + 0x00720106: ('US', '1', "Number of Horizontal Pixels", '', 'NumberOfHorizontalPixels'), + 0x00720108: ('FD', '4', "Display Environment Spatial Position", '', 'DisplayEnvironmentSpatialPosition'), + 0x0072010A: ('US', '1', "Screen Minimum Grayscale Bit Depth", '', 'ScreenMinimumGrayscaleBitDepth'), + 0x0072010C: ('US', '1', "Screen Minimum Color Bit Depth", '', 'ScreenMinimumColorBitDepth'), + 0x0072010E: ('US', '1', "Application Maximum Repaint Time", '', 'ApplicationMaximumRepaintTime'), + 0x00720200: ('SQ', '1', "Display Sets Sequence", '', 'DisplaySetsSequence'), + 0x00720202: ('US', '1', "Display Set Number", '', 'DisplaySetNumber'), + 0x00720203: ('LO', '1', "Display Set Label", '', 'DisplaySetLabel'), + 0x00720204: ('US', '1', "Display Set Presentation Group", '', 'DisplaySetPresentationGroup'), + 0x00720206: ('LO', '1', "Display Set Presentation Group Description", '', 'DisplaySetPresentationGroupDescription'), + 0x00720208: ('CS', '1', "Partial Data Display Handling", '', 'PartialDataDisplayHandling'), + 0x00720210: ('SQ', '1', "Synchronized Scrolling Sequence", '', 'SynchronizedScrollingSequence'), + 0x00720212: ('US', '2-n', "Display Set Scrolling Group", '', 'DisplaySetScrollingGroup'), + 0x00720214: ('SQ', '1', "Navigation Indicator Sequence", '', 'NavigationIndicatorSequence'), + 0x00720216: ('US', '1', "Navigation Display Set", '', 'NavigationDisplaySet'), + 0x00720218: ('US', '1-n', "Reference Display Sets", '', 'ReferenceDisplaySets'), + 0x00720300: ('SQ', '1', "Image Boxes Sequence", '', 'ImageBoxesSequence'), + 0x00720302: ('US', '1', "Image Box Number", '', 'ImageBoxNumber'), + 0x00720304: ('CS', '1', "Image Box Layout Type", '', 'ImageBoxLayoutType'), + 0x00720306: ('US', '1', "Image Box Tile Horizontal Dimension", '', 'ImageBoxTileHorizontalDimension'), + 0x00720308: ('US', '1', "Image Box Tile Vertical Dimension", '', 'ImageBoxTileVerticalDimension'), + 0x00720310: ('CS', '1', "Image Box Scroll Direction", '', 'ImageBoxScrollDirection'), + 0x00720312: ('CS', '1', "Image Box Small Scroll Type", '', 'ImageBoxSmallScrollType'), + 0x00720314: ('US', '1', "Image Box Small Scroll Amount", '', 'ImageBoxSmallScrollAmount'), + 0x00720316: ('CS', '1', "Image Box Large Scroll Type", '', 'ImageBoxLargeScrollType'), + 0x00720318: ('US', '1', "Image Box Large Scroll Amount", '', 'ImageBoxLargeScrollAmount'), + 0x00720320: ('US', '1', "Image Box Overlap Priority", '', 'ImageBoxOverlapPriority'), + 0x00720330: ('FD', '1', "Cine Relative to Real-Time", '', 'CineRelativeToRealTime'), + 0x00720400: ('SQ', '1', "Filter Operations Sequence", '', 'FilterOperationsSequence'), + 0x00720402: ('CS', '1', "Filter-by Category", '', 'FilterByCategory'), + 0x00720404: ('CS', '1', "Filter-by Attribute Presence", '', 'FilterByAttributePresence'), + 0x00720406: ('CS', '1', "Filter-by Operator", '', 'FilterByOperator'), + 0x00720420: ('US', '3', "Structured Display Background CIELab Value", '', 'StructuredDisplayBackgroundCIELabValue'), + 0x00720421: ('US', '3', "Empty Image Box CIELab Value", '', 'EmptyImageBoxCIELabValue'), + 0x00720422: ('SQ', '1', "Structured Display Image Box Sequence", '', 'StructuredDisplayImageBoxSequence'), + 0x00720424: ('SQ', '1', "Structured Display Text Box Sequence", '', 'StructuredDisplayTextBoxSequence'), + 0x00720427: ('SQ', '1', "Referenced First Frame Sequence", '', 'ReferencedFirstFrameSequence'), + 0x00720430: ('SQ', '1', "Image Box Synchronization Sequence", '', 'ImageBoxSynchronizationSequence'), + 0x00720432: ('US', '2-n', "Synchronized Image Box List", '', 'SynchronizedImageBoxList'), + 0x00720434: ('CS', '1', "Type of Synchronization", '', 'TypeOfSynchronization'), + 0x00720500: ('CS', '1', "Blending Operation Type", '', 'BlendingOperationType'), + 0x00720510: ('CS', '1', "Reformatting Operation Type", '', 'ReformattingOperationType'), + 0x00720512: ('FD', '1', "Reformatting Thickness", '', 'ReformattingThickness'), + 0x00720514: ('FD', '1', "Reformatting Interval", '', 'ReformattingInterval'), + 0x00720516: ('CS', '1', "Reformatting Operation Initial View Direction", '', 'ReformattingOperationInitialViewDirection'), + 0x00720520: ('CS', '1-n', "3D Rendering Type", '', 'ThreeDRenderingType'), + 0x00720600: ('SQ', '1', "Sorting Operations Sequence", '', 'SortingOperationsSequence'), + 0x00720602: ('CS', '1', "Sort-by Category", '', 'SortByCategory'), + 0x00720604: ('CS', '1', "Sorting Direction", '', 'SortingDirection'), + 0x00720700: ('CS', '2', "Display Set Patient Orientation", '', 'DisplaySetPatientOrientation'), + 0x00720702: ('CS', '1', "VOI Type", '', 'VOIType'), + 0x00720704: ('CS', '1', "Pseudo-Color Type", '', 'PseudoColorType'), + 0x00720705: ('SQ', '1', "Pseudo-Color Palette Instance Reference Sequence", '', 'PseudoColorPaletteInstanceReferenceSequence'), + 0x00720706: ('CS', '1', "Show Grayscale Inverted", '', 'ShowGrayscaleInverted'), + 0x00720710: ('CS', '1', "Show Image True Size Flag", '', 'ShowImageTrueSizeFlag'), + 0x00720712: ('CS', '1', "Show Graphic Annotation Flag", '', 'ShowGraphicAnnotationFlag'), + 0x00720714: ('CS', '1', "Show Patient Demographics Flag", '', 'ShowPatientDemographicsFlag'), + 0x00720716: ('CS', '1', "Show Acquisition Techniques Flag", '', 'ShowAcquisitionTechniquesFlag'), + 0x00720717: ('CS', '1', "Display Set Horizontal Justification", '', 'DisplaySetHorizontalJustification'), + 0x00720718: ('CS', '1', "Display Set Vertical Justification", '', 'DisplaySetVerticalJustification'), + 0x00740120: ('FD', '1', "Continuation Start Meterset", '', 'ContinuationStartMeterset'), + 0x00740121: ('FD', '1', "Continuation End Meterset", '', 'ContinuationEndMeterset'), + 0x00741000: ('CS', '1', "Procedure Step State", '', 'ProcedureStepState'), + 0x00741002: ('SQ', '1', "Procedure Step Progress Information Sequence", '', 'ProcedureStepProgressInformationSequence'), + 0x00741004: ('DS', '1', "Procedure Step Progress", '', 'ProcedureStepProgress'), + 0x00741006: ('ST', '1', "Procedure Step Progress Description", '', 'ProcedureStepProgressDescription'), + 0x00741008: ('SQ', '1', "Procedure Step Communications URI Sequence", '', 'ProcedureStepCommunicationsURISequence'), + 0x0074100a: ('ST', '1', "Contact URI", '', 'ContactURI'), + 0x0074100c: ('LO', '1', "Contact Display Name", '', 'ContactDisplayName'), + 0x0074100e: ('SQ', '1', "Procedure Step Discontinuation Reason Code Sequence", '', 'ProcedureStepDiscontinuationReasonCodeSequence'), + 0x00741020: ('SQ', '1', "Beam Task Sequence", '', 'BeamTaskSequence'), + 0x00741022: ('CS', '1', "Beam Task Type", '', 'BeamTaskType'), + 0x00741024: ('IS', '1', "Beam Order Index (Trial)", 'Retired', 'BeamOrderIndexTrial'), + 0x00741025: ('CS', '1', "Autosequence Flag", '', 'AutosequenceFlag'), + 0x00741026: ('FD', '1', "Table Top Vertical Adjusted Position", '', 'TableTopVerticalAdjustedPosition'), + 0x00741027: ('FD', '1', "Table Top Longitudinal Adjusted Position", '', 'TableTopLongitudinalAdjustedPosition'), + 0x00741028: ('FD', '1', "Table Top Lateral Adjusted Position", '', 'TableTopLateralAdjustedPosition'), + 0x0074102A: ('FD', '1', "Patient Support Adjusted Angle", '', 'PatientSupportAdjustedAngle'), + 0x0074102B: ('FD', '1', "Table Top Eccentric Adjusted Angle", '', 'TableTopEccentricAdjustedAngle'), + 0x0074102C: ('FD', '1', "Table Top Pitch Adjusted Angle", '', 'TableTopPitchAdjustedAngle'), + 0x0074102D: ('FD', '1', "Table Top Roll Adjusted Angle", '', 'TableTopRollAdjustedAngle'), + 0x00741030: ('SQ', '1', "Delivery Verification Image Sequence", '', 'DeliveryVerificationImageSequence'), + 0x00741032: ('CS', '1', "Verification Image Timing", '', 'VerificationImageTiming'), + 0x00741034: ('CS', '1', "Double Exposure Flag", '', 'DoubleExposureFlag'), + 0x00741036: ('CS', '1', "Double Exposure Ordering", '', 'DoubleExposureOrdering'), + 0x00741038: ('DS', '1', "Double Exposure Meterset (Trial)", 'Retired', 'DoubleExposureMetersetTrial'), + 0x0074103A: ('DS', '4', "Double Exposure Field Delta (Trial)", 'Retired', 'DoubleExposureFieldDeltaTrial'), + 0x00741040: ('SQ', '1', "Related Reference RT Image Sequence", '', 'RelatedReferenceRTImageSequence'), + 0x00741042: ('SQ', '1', "General Machine Verification Sequence", '', 'GeneralMachineVerificationSequence'), + 0x00741044: ('SQ', '1', "Conventional Machine Verification Sequence", '', 'ConventionalMachineVerificationSequence'), + 0x00741046: ('SQ', '1', "Ion Machine Verification Sequence", '', 'IonMachineVerificationSequence'), + 0x00741048: ('SQ', '1', "Failed Attributes Sequence", '', 'FailedAttributesSequence'), + 0x0074104A: ('SQ', '1', "Overridden Attributes Sequence", '', 'OverriddenAttributesSequence'), + 0x0074104C: ('SQ', '1', "Conventional Control Point Verification Sequence", '', 'ConventionalControlPointVerificationSequence'), + 0x0074104E: ('SQ', '1', "Ion Control Point Verification Sequence", '', 'IonControlPointVerificationSequence'), + 0x00741050: ('SQ', '1', "Attribute Occurrence Sequence", '', 'AttributeOccurrenceSequence'), + 0x00741052: ('AT', '1', "Attribute Occurrence Pointer", '', 'AttributeOccurrencePointer'), + 0x00741054: ('UL', '1', "Attribute Item Selector", '', 'AttributeItemSelector'), + 0x00741056: ('LO', '1', "Attribute Occurrence Private Creator", '', 'AttributeOccurrencePrivateCreator'), + 0x00741057: ('IS', '1-n', "Selector Sequence Pointer Items", '', 'SelectorSequencePointerItems'), + 0x00741200: ('CS', '1', "Scheduled Procedure Step Priority", '', 'ScheduledProcedureStepPriority'), + 0x00741202: ('LO', '1', "Worklist Label", '', 'WorklistLabel'), + 0x00741204: ('LO', '1', "Procedure Step Label", '', 'ProcedureStepLabel'), + 0x00741210: ('SQ', '1', "Scheduled Processing Parameters Sequence", '', 'ScheduledProcessingParametersSequence'), + 0x00741212: ('SQ', '1', "Performed Processing Parameters Sequence", '', 'PerformedProcessingParametersSequence'), + 0x00741216: ('SQ', '1', "Unified Procedure Step Performed Procedure Sequence", '', 'UnifiedProcedureStepPerformedProcedureSequence'), + 0x00741220: ('SQ', '1', "Related Procedure Step Sequence", 'Retired', 'RelatedProcedureStepSequence'), + 0x00741222: ('LO', '1', "Procedure Step Relationship Type", 'Retired', 'ProcedureStepRelationshipType'), + 0x00741224: ('SQ', '1', "Replaced Procedure Step Sequence", '', 'ReplacedProcedureStepSequence'), + 0x00741230: ('LO', '1', "Deletion Lock", '', 'DeletionLock'), + 0x00741234: ('AE', '1', "Receiving AE", '', 'ReceivingAE'), + 0x00741236: ('AE', '1', "Requesting AE", '', 'RequestingAE'), + 0x00741238: ('LT', '1', "Reason for Cancellation", '', 'ReasonForCancellation'), + 0x00741242: ('CS', '1', "SCP Status", '', 'SCPStatus'), + 0x00741244: ('CS', '1', "Subscription List Status", '', 'SubscriptionListStatus'), + 0x00741246: ('CS', '1', "Unified Procedure StepList Status", '', 'UnifiedProcedureStepListStatus'), + 0x00741324: ('UL', '1', "Beam Order Index", '', 'BeamOrderIndex'), + 0x00741338: ('FD', '1', "Double Exposure Meterset", '', 'DoubleExposureMeterset'), + 0x0074133A: ('FD', '4', "Double Exposure Field Delta", '', 'DoubleExposureFieldDelta'), + 0x00760001: ('LO', '1', "Implant Assembly Template Name", '', 'ImplantAssemblyTemplateName'), + 0x00760003: ('LO', '1', "Implant Assembly Template Issuer", '', 'ImplantAssemblyTemplateIssuer'), + 0x00760006: ('LO', '1', "Implant Assembly Template Version", '', 'ImplantAssemblyTemplateVersion'), + 0x00760008: ('SQ', '1', "Replaced Implant Assembly Template Sequence", '', 'ReplacedImplantAssemblyTemplateSequence'), + 0x0076000A: ('CS', '1', "Implant Assembly Template Type", '', 'ImplantAssemblyTemplateType'), + 0x0076000C: ('SQ', '1', "Original Implant Assembly Template Sequence", '', 'OriginalImplantAssemblyTemplateSequence'), + 0x0076000E: ('SQ', '1', "Derivation Implant Assembly Template Sequence", '', 'DerivationImplantAssemblyTemplateSequence'), + 0x00760010: ('SQ', '1', "Implant Assembly Template Target Anatomy Sequence", '', 'ImplantAssemblyTemplateTargetAnatomySequence'), + 0x00760020: ('SQ', '1', "Procedure Type Code Sequence", '', 'ProcedureTypeCodeSequence'), + 0x00760030: ('LO', '1', "Surgical Technique", '', 'SurgicalTechnique'), + 0x00760032: ('SQ', '1', "Component Types Sequence", '', 'ComponentTypesSequence'), + 0x00760034: ('CS', '1', "Component Type Code Sequence", '', 'ComponentTypeCodeSequence'), + 0x00760036: ('CS', '1', "Exclusive Component Type", '', 'ExclusiveComponentType'), + 0x00760038: ('CS', '1', "Mandatory Component Type", '', 'MandatoryComponentType'), + 0x00760040: ('SQ', '1', "Component Sequence", '', 'ComponentSequence'), + 0x00760055: ('US', '1', "Component ID", '', 'ComponentID'), + 0x00760060: ('SQ', '1', "Component Assembly Sequence", '', 'ComponentAssemblySequence'), + 0x00760070: ('US', '1', "Component 1 Referenced ID", '', 'Component1ReferencedID'), + 0x00760080: ('US', '1', "Component 1 Referenced Mating Feature Set ID", '', 'Component1ReferencedMatingFeatureSetID'), + 0x00760090: ('US', '1', "Component 1 Referenced Mating Feature ID", '', 'Component1ReferencedMatingFeatureID'), + 0x007600A0: ('US', '1', "Component 2 Referenced ID", '', 'Component2ReferencedID'), + 0x007600B0: ('US', '1', "Component 2 Referenced Mating Feature Set ID", '', 'Component2ReferencedMatingFeatureSetID'), + 0x007600C0: ('US', '1', "Component 2 Referenced Mating Feature ID", '', 'Component2ReferencedMatingFeatureID'), + 0x00780001: ('LO', '1', "Implant Template Group Name", '', 'ImplantTemplateGroupName'), + 0x00780010: ('ST', '1', "Implant Template Group Description", '', 'ImplantTemplateGroupDescription'), + 0x00780020: ('LO', '1', "Implant Template Group Issuer", '', 'ImplantTemplateGroupIssuer'), + 0x00780024: ('LO', '1', "Implant Template Group Version", '', 'ImplantTemplateGroupVersion'), + 0x00780026: ('SQ', '1', "Replaced Implant Template Group Sequence", '', 'ReplacedImplantTemplateGroupSequence'), + 0x00780028: ('SQ', '1', "Implant Template Group Target Anatomy Sequence", '', 'ImplantTemplateGroupTargetAnatomySequence'), + 0x0078002A: ('SQ', '1', "Implant Template Group Members Sequence", '', 'ImplantTemplateGroupMembersSequence'), + 0x0078002E: ('US', '1', "Implant Template Group Member ID", '', 'ImplantTemplateGroupMemberID'), + 0x00780050: ('FD', '3', "3D Implant Template Group Member Matching Point", '', 'ThreeDImplantTemplateGroupMemberMatchingPoint'), + 0x00780060: ('FD', '9', "3D Implant Template Group Member Matching Axes", '', 'ThreeDImplantTemplateGroupMemberMatchingAxes'), + 0x00780070: ('SQ', '1', "Implant Template Group Member Matching 2D Coordinates Sequence", '', 'ImplantTemplateGroupMemberMatching2DCoordinatesSequence'), + 0x00780090: ('FD', '2', "2D Implant Template Group Member Matching Point", '', 'TwoDImplantTemplateGroupMemberMatchingPoint'), + 0x007800A0: ('FD', '4', "2D Implant Template Group Member Matching Axes", '', 'TwoDImplantTemplateGroupMemberMatchingAxes'), + 0x007800B0: ('SQ', '1', "Implant Template Group Variation Dimension Sequence", '', 'ImplantTemplateGroupVariationDimensionSequence'), + 0x007800B2: ('LO', '1', "Implant Template Group Variation Dimension Name", '', 'ImplantTemplateGroupVariationDimensionName'), + 0x007800B4: ('SQ', '1', "Implant Template Group Variation Dimension Rank Sequence", '', 'ImplantTemplateGroupVariationDimensionRankSequence'), + 0x007800B6: ('US', '1', "Referenced Implant Template Group Member ID", '', 'ReferencedImplantTemplateGroupMemberID'), + 0x007800B8: ('US', '1', "Implant Template Group Variation Dimension Rank", '', 'ImplantTemplateGroupVariationDimensionRank'), + 0x00800001: ('SQ', '1', "Surface Scan Acquisition Type Code Sequence", '', 'SurfaceScanAcquisitionTypeCodeSequence'), + 0x00800002: ('SQ', '1', "Surface Scan Mode Code Sequence", '', 'SurfaceScanModeCodeSequence'), + 0x00800003: ('SQ', '1', "Registration Method Code Sequence", '', 'RegistrationMethodCodeSequence'), + 0x00800004: ('FD', '1', "Shot Duration Time", '', 'ShotDurationTime'), + 0x00800005: ('FD', '1', "Shot Offset Time", '', 'ShotOffsetTime'), + 0x00800006: ('US', '1-n', "Surface Point Presentation Value Data", '', 'SurfacePointPresentationValueData'), + 0x00800007: ('US', '3-3n', "Surface Point Color CIELab Value Data", '', 'SurfacePointColorCIELabValueData'), + 0x00800008: ('SQ', '1', "UV Mapping Sequence", '', 'UVMappingSequence'), + 0x00800009: ('SH', '1', "Texture Label", '', 'TextureLabel'), + 0x00800010: ('OF', '1-n', "U Value Data", '', 'UValueData'), + 0x00800011: ('OF', '1-n', "V Value Data", '', 'VValueData'), + 0x00800012: ('SQ', '1', "Referenced Texture Sequence", '', 'ReferencedTextureSequence'), + 0x00800013: ('SQ', '1', "Referenced Surface Data Sequence", '', 'ReferencedSurfaceDataSequence'), + 0x00880130: ('SH', '1', "Storage Media File-set ID", '', 'StorageMediaFileSetID'), + 0x00880140: ('UI', '1', "Storage Media File-set UID", '', 'StorageMediaFileSetUID'), + 0x00880200: ('SQ', '1', "Icon Image Sequence", '', 'IconImageSequence'), + 0x00880904: ('LO', '1', "Topic Title", 'Retired', 'TopicTitle'), + 0x00880906: ('ST', '1', "Topic Subject", 'Retired', 'TopicSubject'), + 0x00880910: ('LO', '1', "Topic Author", 'Retired', 'TopicAuthor'), + 0x00880912: ('LO', '1-32', "Topic Keywords", 'Retired', 'TopicKeywords'), + 0x01000410: ('CS', '1', "SOP Instance Status", '', 'SOPInstanceStatus'), + 0x01000420: ('DT', '1', "SOP Authorization DateTime", '', 'SOPAuthorizationDateTime'), + 0x01000424: ('LT', '1', "SOP Authorization Comment", '', 'SOPAuthorizationComment'), + 0x01000426: ('LO', '1', "Authorization Equipment Certification Number", '', 'AuthorizationEquipmentCertificationNumber'), + 0x04000005: ('US', '1', "MAC ID Number", '', 'MACIDNumber'), + 0x04000010: ('UI', '1', "MAC Calculation Transfer Syntax UID", '', 'MACCalculationTransferSyntaxUID'), + 0x04000015: ('CS', '1', "MAC Algorithm", '', 'MACAlgorithm'), + 0x04000020: ('AT', '1-n', "Data Elements Signed", '', 'DataElementsSigned'), + 0x04000100: ('UI', '1', "Digital Signature UID", '', 'DigitalSignatureUID'), + 0x04000105: ('DT', '1', "Digital Signature DateTime", '', 'DigitalSignatureDateTime'), + 0x04000110: ('CS', '1', "Certificate Type", '', 'CertificateType'), + 0x04000115: ('OB', '1', "Certificate of Signer", '', 'CertificateOfSigner'), + 0x04000120: ('OB', '1', "Signature", '', 'Signature'), + 0x04000305: ('CS', '1', "Certified Timestamp Type", '', 'CertifiedTimestampType'), + 0x04000310: ('OB', '1', "Certified Timestamp", '', 'CertifiedTimestamp'), + 0x04000401: ('SQ', '1', "Digital Signature Purpose Code Sequence", '', 'DigitalSignaturePurposeCodeSequence'), + 0x04000402: ('SQ', '1', "Referenced Digital Signature Sequence", '', 'ReferencedDigitalSignatureSequence'), + 0x04000403: ('SQ', '1', "Referenced SOP Instance MAC Sequence", '', 'ReferencedSOPInstanceMACSequence'), + 0x04000404: ('OB', '1', "MAC", '', 'MAC'), + 0x04000500: ('SQ', '1', "Encrypted Attributes Sequence", '', 'EncryptedAttributesSequence'), + 0x04000510: ('UI', '1', "Encrypted Content Transfer Syntax UID", '', 'EncryptedContentTransferSyntaxUID'), + 0x04000520: ('OB', '1', "Encrypted Content", '', 'EncryptedContent'), + 0x04000550: ('SQ', '1', "Modified Attributes Sequence", '', 'ModifiedAttributesSequence'), + 0x04000561: ('SQ', '1', "Original Attributes Sequence", '', 'OriginalAttributesSequence'), + 0x04000562: ('DT', '1', "Attribute Modification DateTime", '', 'AttributeModificationDateTime'), + 0x04000563: ('LO', '1', "Modifying System", '', 'ModifyingSystem'), + 0x04000564: ('LO', '1', "Source of Previous Values", '', 'SourceOfPreviousValues'), + 0x04000565: ('CS', '1', "Reason for the Attribute Modification", '', 'ReasonForTheAttributeModification'), + 0x20000010: ('IS', '1', "Number of Copies", '', 'NumberOfCopies'), + 0x2000001E: ('SQ', '1', "Printer Configuration Sequence", '', 'PrinterConfigurationSequence'), + 0x20000020: ('CS', '1', "Print Priority", '', 'PrintPriority'), + 0x20000030: ('CS', '1', "Medium Type", '', 'MediumType'), + 0x20000040: ('CS', '1', "Film Destination", '', 'FilmDestination'), + 0x20000050: ('LO', '1', "Film Session Label", '', 'FilmSessionLabel'), + 0x20000060: ('IS', '1', "Memory Allocation", '', 'MemoryAllocation'), + 0x20000061: ('IS', '1', "Maximum Memory Allocation", '', 'MaximumMemoryAllocation'), + 0x20000062: ('CS', '1', "Color Image Printing Flag", 'Retired', 'ColorImagePrintingFlag'), + 0x20000063: ('CS', '1', "Collation Flag", 'Retired', 'CollationFlag'), + 0x20000065: ('CS', '1', "Annotation Flag", 'Retired', 'AnnotationFlag'), + 0x20000067: ('CS', '1', "Image Overlay Flag", 'Retired', 'ImageOverlayFlag'), + 0x20000069: ('CS', '1', "Presentation LUT Flag", 'Retired', 'PresentationLUTFlag'), + 0x2000006A: ('CS', '1', "Image Box Presentation LUT Flag", 'Retired', 'ImageBoxPresentationLUTFlag'), + 0x200000A0: ('US', '1', "Memory Bit Depth", '', 'MemoryBitDepth'), + 0x200000A1: ('US', '1', "Printing Bit Depth", '', 'PrintingBitDepth'), + 0x200000A2: ('SQ', '1', "Media Installed Sequence", '', 'MediaInstalledSequence'), + 0x200000A4: ('SQ', '1', "Other Media Available Sequence", '', 'OtherMediaAvailableSequence'), + 0x200000A8: ('SQ', '1', "Supported Image Display Formats Sequence", '', 'SupportedImageDisplayFormatsSequence'), + 0x20000500: ('SQ', '1', "Referenced Film Box Sequence", '', 'ReferencedFilmBoxSequence'), + 0x20000510: ('SQ', '1', "Referenced Stored Print Sequence", 'Retired', 'ReferencedStoredPrintSequence'), + 0x20100010: ('ST', '1', "Image Display Format", '', 'ImageDisplayFormat'), + 0x20100030: ('CS', '1', "Annotation Display Format ID", '', 'AnnotationDisplayFormatID'), + 0x20100040: ('CS', '1', "Film Orientation", '', 'FilmOrientation'), + 0x20100050: ('CS', '1', "Film Size ID", '', 'FilmSizeID'), + 0x20100052: ('CS', '1', "Printer Resolution ID", '', 'PrinterResolutionID'), + 0x20100054: ('CS', '1', "Default Printer Resolution ID", '', 'DefaultPrinterResolutionID'), + 0x20100060: ('CS', '1', "Magnification Type", '', 'MagnificationType'), + 0x20100080: ('CS', '1', "Smoothing Type", '', 'SmoothingType'), + 0x201000A6: ('CS', '1', "Default Magnification Type", '', 'DefaultMagnificationType'), + 0x201000A7: ('CS', '1-n', "Other Magnification Types Available", '', 'OtherMagnificationTypesAvailable'), + 0x201000A8: ('CS', '1', "Default Smoothing Type", '', 'DefaultSmoothingType'), + 0x201000A9: ('CS', '1-n', "Other Smoothing Types Available", '', 'OtherSmoothingTypesAvailable'), + 0x20100100: ('CS', '1', "Border Density", '', 'BorderDensity'), + 0x20100110: ('CS', '1', "Empty Image Density", '', 'EmptyImageDensity'), + 0x20100120: ('US', '1', "Min Density", '', 'MinDensity'), + 0x20100130: ('US', '1', "Max Density", '', 'MaxDensity'), + 0x20100140: ('CS', '1', "Trim", '', 'Trim'), + 0x20100150: ('ST', '1', "Configuration Information", '', 'ConfigurationInformation'), + 0x20100152: ('LT', '1', "Configuration Information Description", '', 'ConfigurationInformationDescription'), + 0x20100154: ('IS', '1', "Maximum Collated Films", '', 'MaximumCollatedFilms'), + 0x2010015E: ('US', '1', "Illumination", '', 'Illumination'), + 0x20100160: ('US', '1', "Reflected Ambient Light", '', 'ReflectedAmbientLight'), + 0x20100376: ('DS', '2', "Printer Pixel Spacing", '', 'PrinterPixelSpacing'), + 0x20100500: ('SQ', '1', "Referenced Film Session Sequence", '', 'ReferencedFilmSessionSequence'), + 0x20100510: ('SQ', '1', "Referenced Image Box Sequence", '', 'ReferencedImageBoxSequence'), + 0x20100520: ('SQ', '1', "Referenced Basic Annotation Box Sequence", '', 'ReferencedBasicAnnotationBoxSequence'), + 0x20200010: ('US', '1', "Image Box Position", '', 'ImageBoxPosition'), + 0x20200020: ('CS', '1', "Polarity", '', 'Polarity'), + 0x20200030: ('DS', '1', "Requested Image Size", '', 'RequestedImageSize'), + 0x20200040: ('CS', '1', "Requested Decimate/Crop Behavior", '', 'RequestedDecimateCropBehavior'), + 0x20200050: ('CS', '1', "Requested Resolution ID", '', 'RequestedResolutionID'), + 0x202000A0: ('CS', '1', "Requested Image Size Flag", '', 'RequestedImageSizeFlag'), + 0x202000A2: ('CS', '1', "Decimate/Crop Result", '', 'DecimateCropResult'), + 0x20200110: ('SQ', '1', "Basic Grayscale Image Sequence", '', 'BasicGrayscaleImageSequence'), + 0x20200111: ('SQ', '1', "Basic Color Image Sequence", '', 'BasicColorImageSequence'), + 0x20200130: ('SQ', '1', "Referenced Image Overlay Box Sequence", 'Retired', 'ReferencedImageOverlayBoxSequence'), + 0x20200140: ('SQ', '1', "Referenced VOI LUT Box Sequence", 'Retired', 'ReferencedVOILUTBoxSequence'), + 0x20300010: ('US', '1', "Annotation Position", '', 'AnnotationPosition'), + 0x20300020: ('LO', '1', "Text String", '', 'TextString'), + 0x20400010: ('SQ', '1', "Referenced Overlay Plane Sequence", 'Retired', 'ReferencedOverlayPlaneSequence'), + 0x20400011: ('US', '1-99', "Referenced Overlay Plane Groups", 'Retired', 'ReferencedOverlayPlaneGroups'), + 0x20400020: ('SQ', '1', "Overlay Pixel Data Sequence", 'Retired', 'OverlayPixelDataSequence'), + 0x20400060: ('CS', '1', "Overlay Magnification Type", 'Retired', 'OverlayMagnificationType'), + 0x20400070: ('CS', '1', "Overlay Smoothing Type", 'Retired', 'OverlaySmoothingType'), + 0x20400072: ('CS', '1', "Overlay or Image Magnification", 'Retired', 'OverlayOrImageMagnification'), + 0x20400074: ('US', '1', "Magnify to Number of Columns", 'Retired', 'MagnifyToNumberOfColumns'), + 0x20400080: ('CS', '1', "Overlay Foreground Density", 'Retired', 'OverlayForegroundDensity'), + 0x20400082: ('CS', '1', "Overlay Background Density", 'Retired', 'OverlayBackgroundDensity'), + 0x20400090: ('CS', '1', "Overlay Mode", 'Retired', 'OverlayMode'), + 0x20400100: ('CS', '1', "Threshold Density", 'Retired', 'ThresholdDensity'), + 0x20400500: ('SQ', '1', "Referenced Image Box Sequence (Retired)", 'Retired', 'ReferencedImageBoxSequenceRetired'), + 0x20500010: ('SQ', '1', "Presentation LUT Sequence", '', 'PresentationLUTSequence'), + 0x20500020: ('CS', '1', "Presentation LUT Shape", '', 'PresentationLUTShape'), + 0x20500500: ('SQ', '1', "Referenced Presentation LUT Sequence", '', 'ReferencedPresentationLUTSequence'), + 0x21000010: ('SH', '1', "Print Job ID", 'Retired', 'PrintJobID'), + 0x21000020: ('CS', '1', "Execution Status", '', 'ExecutionStatus'), + 0x21000030: ('CS', '1', "Execution Status Info", '', 'ExecutionStatusInfo'), + 0x21000040: ('DA', '1', "Creation Date", '', 'CreationDate'), + 0x21000050: ('TM', '1', "Creation Time", '', 'CreationTime'), + 0x21000070: ('AE', '1', "Originator", '', 'Originator'), + 0x21000140: ('AE', '1', "Destination AE", 'Retired', 'DestinationAE'), + 0x21000160: ('SH', '1', "Owner ID", '', 'OwnerID'), + 0x21000170: ('IS', '1', "Number of Films", '', 'NumberOfFilms'), + 0x21000500: ('SQ', '1', "Referenced Print Job Sequence (Pull Stored Print)", 'Retired', 'ReferencedPrintJobSequencePullStoredPrint'), + 0x21100010: ('CS', '1', "Printer Status", '', 'PrinterStatus'), + 0x21100020: ('CS', '1', "Printer Status Info", '', 'PrinterStatusInfo'), + 0x21100030: ('LO', '1', "Printer Name", '', 'PrinterName'), + 0x21100099: ('SH', '1', "Print Queue ID", 'Retired', 'PrintQueueID'), + 0x21200010: ('CS', '1', "Queue Status", 'Retired', 'QueueStatus'), + 0x21200050: ('SQ', '1', "Print Job Description Sequence", 'Retired', 'PrintJobDescriptionSequence'), + 0x21200070: ('SQ', '1', "Referenced Print Job Sequence", 'Retired', 'ReferencedPrintJobSequence'), + 0x21300010: ('SQ', '1', "Print Management Capabilities Sequence", 'Retired', 'PrintManagementCapabilitiesSequence'), + 0x21300015: ('SQ', '1', "Printer Characteristics Sequence", 'Retired', 'PrinterCharacteristicsSequence'), + 0x21300030: ('SQ', '1', "Film Box Content Sequence", 'Retired', 'FilmBoxContentSequence'), + 0x21300040: ('SQ', '1', "Image Box Content Sequence", 'Retired', 'ImageBoxContentSequence'), + 0x21300050: ('SQ', '1', "Annotation Content Sequence", 'Retired', 'AnnotationContentSequence'), + 0x21300060: ('SQ', '1', "Image Overlay Box Content Sequence", 'Retired', 'ImageOverlayBoxContentSequence'), + 0x21300080: ('SQ', '1', "Presentation LUT Content Sequence", 'Retired', 'PresentationLUTContentSequence'), + 0x213000A0: ('SQ', '1', "Proposed Study Sequence", 'Retired', 'ProposedStudySequence'), + 0x213000C0: ('SQ', '1', "Original Image Sequence", 'Retired', 'OriginalImageSequence'), + 0x22000001: ('CS', '1', "Label Using Information Extracted From Instances", '', 'LabelUsingInformationExtractedFromInstances'), + 0x22000002: ('UT', '1', "Label Text", '', 'LabelText'), + 0x22000003: ('CS', '1', "Label Style Selection", '', 'LabelStyleSelection'), + 0x22000004: ('LT', '1', "Media Disposition", '', 'MediaDisposition'), + 0x22000005: ('LT', '1', "Barcode Value", '', 'BarcodeValue'), + 0x22000006: ('CS', '1', "Barcode Symbology", '', 'BarcodeSymbology'), + 0x22000007: ('CS', '1', "Allow Media Splitting", '', 'AllowMediaSplitting'), + 0x22000008: ('CS', '1', "Include Non-DICOM Objects", '', 'IncludeNonDICOMObjects'), + 0x22000009: ('CS', '1', "Include Display Application", '', 'IncludeDisplayApplication'), + 0x2200000A: ('CS', '1', "Preserve Composite Instances After Media Creation", '', 'PreserveCompositeInstancesAfterMediaCreation'), + 0x2200000B: ('US', '1', "Total Number of Pieces of Media Created", '', 'TotalNumberOfPiecesOfMediaCreated'), + 0x2200000C: ('LO', '1', "Requested Media Application Profile", '', 'RequestedMediaApplicationProfile'), + 0x2200000D: ('SQ', '1', "Referenced Storage Media Sequence", '', 'ReferencedStorageMediaSequence'), + 0x2200000E: ('AT', '1-n', "Failure Attributes", '', 'FailureAttributes'), + 0x2200000F: ('CS', '1', "Allow Lossy Compression", '', 'AllowLossyCompression'), + 0x22000020: ('CS', '1', "Request Priority", '', 'RequestPriority'), + 0x30020002: ('SH', '1', "RT Image Label", '', 'RTImageLabel'), + 0x30020003: ('LO', '1', "RT Image Name", '', 'RTImageName'), + 0x30020004: ('ST', '1', "RT Image Description", '', 'RTImageDescription'), + 0x3002000A: ('CS', '1', "Reported Values Origin", '', 'ReportedValuesOrigin'), + 0x3002000C: ('CS', '1', "RT Image Plane", '', 'RTImagePlane'), + 0x3002000D: ('DS', '3', "X-Ray Image Receptor Translation", '', 'XRayImageReceptorTranslation'), + 0x3002000E: ('DS', '1', "X-Ray Image Receptor Angle", '', 'XRayImageReceptorAngle'), + 0x30020010: ('DS', '6', "RT Image Orientation", '', 'RTImageOrientation'), + 0x30020011: ('DS', '2', "Image Plane Pixel Spacing", '', 'ImagePlanePixelSpacing'), + 0x30020012: ('DS', '2', "RT Image Position", '', 'RTImagePosition'), + 0x30020020: ('SH', '1', "Radiation Machine Name", '', 'RadiationMachineName'), + 0x30020022: ('DS', '1', "Radiation Machine SAD", '', 'RadiationMachineSAD'), + 0x30020024: ('DS', '1', "Radiation Machine SSD", '', 'RadiationMachineSSD'), + 0x30020026: ('DS', '1', "RT Image SID", '', 'RTImageSID'), + 0x30020028: ('DS', '1', "Source to Reference Object Distance", '', 'SourceToReferenceObjectDistance'), + 0x30020029: ('IS', '1', "Fraction Number", '', 'FractionNumber'), + 0x30020030: ('SQ', '1', "Exposure Sequence", '', 'ExposureSequence'), + 0x30020032: ('DS', '1', "Meterset Exposure", '', 'MetersetExposure'), + 0x30020034: ('DS', '4', "Diaphragm Position", '', 'DiaphragmPosition'), + 0x30020040: ('SQ', '1', "Fluence Map Sequence", '', 'FluenceMapSequence'), + 0x30020041: ('CS', '1', "Fluence Data Source", '', 'FluenceDataSource'), + 0x30020042: ('DS', '1', "Fluence Data Scale", '', 'FluenceDataScale'), + 0x30020050: ('SQ', '1', "Primary Fluence Mode Sequence", '', 'PrimaryFluenceModeSequence'), + 0x30020051: ('CS', '1', "Fluence Mode", '', 'FluenceMode'), + 0x30020052: ('SH', '1', "Fluence Mode ID", '', 'FluenceModeID'), + 0x30040001: ('CS', '1', "DVH Type", '', 'DVHType'), + 0x30040002: ('CS', '1', "Dose Units", '', 'DoseUnits'), + 0x30040004: ('CS', '1', "Dose Type", '', 'DoseType'), + 0x30040005: ('CS', '1', "Spatial Transform of Dose", '', 'SpatialTransformOfDose'), + 0x30040006: ('LO', '1', "Dose Comment", '', 'DoseComment'), + 0x30040008: ('DS', '3', "Normalization Point", '', 'NormalizationPoint'), + 0x3004000A: ('CS', '1', "Dose Summation Type", '', 'DoseSummationType'), + 0x3004000C: ('DS', '2-n', "Grid Frame Offset Vector", '', 'GridFrameOffsetVector'), + 0x3004000E: ('DS', '1', "Dose Grid Scaling", '', 'DoseGridScaling'), + 0x30040010: ('SQ', '1', "RT Dose ROI Sequence", '', 'RTDoseROISequence'), + 0x30040012: ('DS', '1', "Dose Value", '', 'DoseValue'), + 0x30040014: ('CS', '1-3', "Tissue Heterogeneity Correction", '', 'TissueHeterogeneityCorrection'), + 0x30040040: ('DS', '3', "DVH Normalization Point", '', 'DVHNormalizationPoint'), + 0x30040042: ('DS', '1', "DVH Normalization Dose Value", '', 'DVHNormalizationDoseValue'), + 0x30040050: ('SQ', '1', "DVH Sequence", '', 'DVHSequence'), + 0x30040052: ('DS', '1', "DVH Dose Scaling", '', 'DVHDoseScaling'), + 0x30040054: ('CS', '1', "DVH Volume Units", '', 'DVHVolumeUnits'), + 0x30040056: ('IS', '1', "DVH Number of Bins", '', 'DVHNumberOfBins'), + 0x30040058: ('DS', '2-2n', "DVH Data", '', 'DVHData'), + 0x30040060: ('SQ', '1', "DVH Referenced ROI Sequence", '', 'DVHReferencedROISequence'), + 0x30040062: ('CS', '1', "DVH ROI Contribution Type", '', 'DVHROIContributionType'), + 0x30040070: ('DS', '1', "DVH Minimum Dose", '', 'DVHMinimumDose'), + 0x30040072: ('DS', '1', "DVH Maximum Dose", '', 'DVHMaximumDose'), + 0x30040074: ('DS', '1', "DVH Mean Dose", '', 'DVHMeanDose'), + 0x30060002: ('SH', '1', "Structure Set Label", '', 'StructureSetLabel'), + 0x30060004: ('LO', '1', "Structure Set Name", '', 'StructureSetName'), + 0x30060006: ('ST', '1', "Structure Set Description", '', 'StructureSetDescription'), + 0x30060008: ('DA', '1', "Structure Set Date", '', 'StructureSetDate'), + 0x30060009: ('TM', '1', "Structure Set Time", '', 'StructureSetTime'), + 0x30060010: ('SQ', '1', "Referenced Frame of Reference Sequence", '', 'ReferencedFrameOfReferenceSequence'), + 0x30060012: ('SQ', '1', "RT Referenced Study Sequence", '', 'RTReferencedStudySequence'), + 0x30060014: ('SQ', '1', "RT Referenced Series Sequence", '', 'RTReferencedSeriesSequence'), + 0x30060016: ('SQ', '1', "Contour Image Sequence", '', 'ContourImageSequence'), + 0x30060018: ('SQ', '1', "Predecessor Structure Set Sequence", '', 'PredecessorStructureSetSequence'), + 0x30060020: ('SQ', '1', "Structure Set ROI Sequence", '', 'StructureSetROISequence'), + 0x30060022: ('IS', '1', "ROI Number", '', 'ROINumber'), + 0x30060024: ('UI', '1', "Referenced Frame of Reference UID", '', 'ReferencedFrameOfReferenceUID'), + 0x30060026: ('LO', '1', "ROI Name", '', 'ROIName'), + 0x30060028: ('ST', '1', "ROI Description", '', 'ROIDescription'), + 0x3006002A: ('IS', '3', "ROI Display Color", '', 'ROIDisplayColor'), + 0x3006002C: ('DS', '1', "ROI Volume", '', 'ROIVolume'), + 0x30060030: ('SQ', '1', "RT Related ROI Sequence", '', 'RTRelatedROISequence'), + 0x30060033: ('CS', '1', "RT ROI Relationship", '', 'RTROIRelationship'), + 0x30060036: ('CS', '1', "ROI Generation Algorithm", '', 'ROIGenerationAlgorithm'), + 0x30060038: ('LO', '1', "ROI Generation Description", '', 'ROIGenerationDescription'), + 0x30060039: ('SQ', '1', "ROI Contour Sequence", '', 'ROIContourSequence'), + 0x30060040: ('SQ', '1', "Contour Sequence", '', 'ContourSequence'), + 0x30060042: ('CS', '1', "Contour Geometric Type", '', 'ContourGeometricType'), + 0x30060044: ('DS', '1', "Contour Slab Thickness", '', 'ContourSlabThickness'), + 0x30060045: ('DS', '3', "Contour Offset Vector", '', 'ContourOffsetVector'), + 0x30060046: ('IS', '1', "Number of Contour Points", '', 'NumberOfContourPoints'), + 0x30060048: ('IS', '1', "Contour Number", '', 'ContourNumber'), + 0x30060049: ('IS', '1-n', "Attached Contours", '', 'AttachedContours'), + 0x30060050: ('DS', '3-3n', "Contour Data", '', 'ContourData'), + 0x30060080: ('SQ', '1', "RT ROI Observations Sequence", '', 'RTROIObservationsSequence'), + 0x30060082: ('IS', '1', "Observation Number", '', 'ObservationNumber'), + 0x30060084: ('IS', '1', "Referenced ROI Number", '', 'ReferencedROINumber'), + 0x30060085: ('SH', '1', "ROI Observation Label", '', 'ROIObservationLabel'), + 0x30060086: ('SQ', '1', "RT ROI Identification Code Sequence", '', 'RTROIIdentificationCodeSequence'), + 0x30060088: ('ST', '1', "ROI Observation Description", '', 'ROIObservationDescription'), + 0x300600A0: ('SQ', '1', "Related RT ROI Observations Sequence", '', 'RelatedRTROIObservationsSequence'), + 0x300600A4: ('CS', '1', "RT ROI Interpreted Type", '', 'RTROIInterpretedType'), + 0x300600A6: ('PN', '1', "ROI Interpreter", '', 'ROIInterpreter'), + 0x300600B0: ('SQ', '1', "ROI Physical Properties Sequence", '', 'ROIPhysicalPropertiesSequence'), + 0x300600B2: ('CS', '1', "ROI Physical Property", '', 'ROIPhysicalProperty'), + 0x300600B4: ('DS', '1', "ROI Physical Property Value", '', 'ROIPhysicalPropertyValue'), + 0x300600B6: ('SQ', '1', "ROI Elemental Composition Sequence", '', 'ROIElementalCompositionSequence'), + 0x300600B7: ('US', '1', "ROI Elemental Composition Atomic Number", '', 'ROIElementalCompositionAtomicNumber'), + 0x300600B8: ('FL', '1', "ROI Elemental Composition Atomic Mass Fraction", '', 'ROIElementalCompositionAtomicMassFraction'), + 0x300600C0: ('SQ', '1', "Frame of Reference Relationship Sequence", 'Retired', 'FrameOfReferenceRelationshipSequence'), + 0x300600C2: ('UI', '1', "Related Frame of Reference UID", 'Retired', 'RelatedFrameOfReferenceUID'), + 0x300600C4: ('CS', '1', "Frame of Reference Transformation Type", 'Retired', 'FrameOfReferenceTransformationType'), + 0x300600C6: ('DS', '16', "Frame of Reference Transformation Matrix", '', 'FrameOfReferenceTransformationMatrix'), + 0x300600C8: ('LO', '1', "Frame of Reference Transformation Comment", '', 'FrameOfReferenceTransformationComment'), + 0x30080010: ('SQ', '1', "Measured Dose Reference Sequence", '', 'MeasuredDoseReferenceSequence'), + 0x30080012: ('ST', '1', "Measured Dose Description", '', 'MeasuredDoseDescription'), + 0x30080014: ('CS', '1', "Measured Dose Type", '', 'MeasuredDoseType'), + 0x30080016: ('DS', '1', "Measured Dose Value", '', 'MeasuredDoseValue'), + 0x30080020: ('SQ', '1', "Treatment Session Beam Sequence", '', 'TreatmentSessionBeamSequence'), + 0x30080021: ('SQ', '1', "Treatment Session Ion Beam Sequence", '', 'TreatmentSessionIonBeamSequence'), + 0x30080022: ('IS', '1', "Current Fraction Number", '', 'CurrentFractionNumber'), + 0x30080024: ('DA', '1', "Treatment Control Point Date", '', 'TreatmentControlPointDate'), + 0x30080025: ('TM', '1', "Treatment Control Point Time", '', 'TreatmentControlPointTime'), + 0x3008002A: ('CS', '1', "Treatment Termination Status", '', 'TreatmentTerminationStatus'), + 0x3008002B: ('SH', '1', "Treatment Termination Code", '', 'TreatmentTerminationCode'), + 0x3008002C: ('CS', '1', "Treatment Verification Status", '', 'TreatmentVerificationStatus'), + 0x30080030: ('SQ', '1', "Referenced Treatment Record Sequence", '', 'ReferencedTreatmentRecordSequence'), + 0x30080032: ('DS', '1', "Specified Primary Meterset", '', 'SpecifiedPrimaryMeterset'), + 0x30080033: ('DS', '1', "Specified Secondary Meterset", '', 'SpecifiedSecondaryMeterset'), + 0x30080036: ('DS', '1', "Delivered Primary Meterset", '', 'DeliveredPrimaryMeterset'), + 0x30080037: ('DS', '1', "Delivered Secondary Meterset", '', 'DeliveredSecondaryMeterset'), + 0x3008003A: ('DS', '1', "Specified Treatment Time", '', 'SpecifiedTreatmentTime'), + 0x3008003B: ('DS', '1', "Delivered Treatment Time", '', 'DeliveredTreatmentTime'), + 0x30080040: ('SQ', '1', "Control Point Delivery Sequence", '', 'ControlPointDeliverySequence'), + 0x30080041: ('SQ', '1', "Ion Control Point Delivery Sequence", '', 'IonControlPointDeliverySequence'), + 0x30080042: ('DS', '1', "Specified Meterset", '', 'SpecifiedMeterset'), + 0x30080044: ('DS', '1', "Delivered Meterset", '', 'DeliveredMeterset'), + 0x30080045: ('FL', '1', "Meterset Rate Set", '', 'MetersetRateSet'), + 0x30080046: ('FL', '1', "Meterset Rate Delivered", '', 'MetersetRateDelivered'), + 0x30080047: ('FL', '1-n', "Scan Spot Metersets Delivered", '', 'ScanSpotMetersetsDelivered'), + 0x30080048: ('DS', '1', "Dose Rate Delivered", '', 'DoseRateDelivered'), + 0x30080050: ('SQ', '1', "Treatment Summary Calculated Dose Reference Sequence", '', 'TreatmentSummaryCalculatedDoseReferenceSequence'), + 0x30080052: ('DS', '1', "Cumulative Dose to Dose Reference", '', 'CumulativeDoseToDoseReference'), + 0x30080054: ('DA', '1', "First Treatment Date", '', 'FirstTreatmentDate'), + 0x30080056: ('DA', '1', "Most Recent Treatment Date", '', 'MostRecentTreatmentDate'), + 0x3008005A: ('IS', '1', "Number of Fractions Delivered", '', 'NumberOfFractionsDelivered'), + 0x30080060: ('SQ', '1', "Override Sequence", '', 'OverrideSequence'), + 0x30080061: ('AT', '1', "Parameter Sequence Pointer", '', 'ParameterSequencePointer'), + 0x30080062: ('AT', '1', "Override Parameter Pointer", '', 'OverrideParameterPointer'), + 0x30080063: ('IS', '1', "Parameter Item Index", '', 'ParameterItemIndex'), + 0x30080064: ('IS', '1', "Measured Dose Reference Number", '', 'MeasuredDoseReferenceNumber'), + 0x30080065: ('AT', '1', "Parameter Pointer", '', 'ParameterPointer'), + 0x30080066: ('ST', '1', "Override Reason", '', 'OverrideReason'), + 0x30080068: ('SQ', '1', "Corrected Parameter Sequence", '', 'CorrectedParameterSequence'), + 0x3008006A: ('FL', '1', "Correction Value", '', 'CorrectionValue'), + 0x30080070: ('SQ', '1', "Calculated Dose Reference Sequence", '', 'CalculatedDoseReferenceSequence'), + 0x30080072: ('IS', '1', "Calculated Dose Reference Number", '', 'CalculatedDoseReferenceNumber'), + 0x30080074: ('ST', '1', "Calculated Dose Reference Description", '', 'CalculatedDoseReferenceDescription'), + 0x30080076: ('DS', '1', "Calculated Dose Reference Dose Value", '', 'CalculatedDoseReferenceDoseValue'), + 0x30080078: ('DS', '1', "Start Meterset", '', 'StartMeterset'), + 0x3008007A: ('DS', '1', "End Meterset", '', 'EndMeterset'), + 0x30080080: ('SQ', '1', "Referenced Measured Dose Reference Sequence", '', 'ReferencedMeasuredDoseReferenceSequence'), + 0x30080082: ('IS', '1', "Referenced Measured Dose Reference Number", '', 'ReferencedMeasuredDoseReferenceNumber'), + 0x30080090: ('SQ', '1', "Referenced Calculated Dose Reference Sequence", '', 'ReferencedCalculatedDoseReferenceSequence'), + 0x30080092: ('IS', '1', "Referenced Calculated Dose Reference Number", '', 'ReferencedCalculatedDoseReferenceNumber'), + 0x300800A0: ('SQ', '1', "Beam Limiting Device Leaf Pairs Sequence", '', 'BeamLimitingDeviceLeafPairsSequence'), + 0x300800B0: ('SQ', '1', "Recorded Wedge Sequence", '', 'RecordedWedgeSequence'), + 0x300800C0: ('SQ', '1', "Recorded Compensator Sequence", '', 'RecordedCompensatorSequence'), + 0x300800D0: ('SQ', '1', "Recorded Block Sequence", '', 'RecordedBlockSequence'), + 0x300800E0: ('SQ', '1', "Treatment Summary Measured Dose Reference Sequence", '', 'TreatmentSummaryMeasuredDoseReferenceSequence'), + 0x300800F0: ('SQ', '1', "Recorded Snout Sequence", '', 'RecordedSnoutSequence'), + 0x300800F2: ('SQ', '1', "Recorded Range Shifter Sequence", '', 'RecordedRangeShifterSequence'), + 0x300800F4: ('SQ', '1', "Recorded Lateral Spreading Device Sequence", '', 'RecordedLateralSpreadingDeviceSequence'), + 0x300800F6: ('SQ', '1', "Recorded Range Modulator Sequence", '', 'RecordedRangeModulatorSequence'), + 0x30080100: ('SQ', '1', "Recorded Source Sequence", '', 'RecordedSourceSequence'), + 0x30080105: ('LO', '1', "Source Serial Number", '', 'SourceSerialNumber'), + 0x30080110: ('SQ', '1', "Treatment Session Application Setup Sequence", '', 'TreatmentSessionApplicationSetupSequence'), + 0x30080116: ('CS', '1', "Application Setup Check", '', 'ApplicationSetupCheck'), + 0x30080120: ('SQ', '1', "Recorded Brachy Accessory Device Sequence", '', 'RecordedBrachyAccessoryDeviceSequence'), + 0x30080122: ('IS', '1', "Referenced Brachy Accessory Device Number", '', 'ReferencedBrachyAccessoryDeviceNumber'), + 0x30080130: ('SQ', '1', "Recorded Channel Sequence", '', 'RecordedChannelSequence'), + 0x30080132: ('DS', '1', "Specified Channel Total Time", '', 'SpecifiedChannelTotalTime'), + 0x30080134: ('DS', '1', "Delivered Channel Total Time", '', 'DeliveredChannelTotalTime'), + 0x30080136: ('IS', '1', "Specified Number of Pulses", '', 'SpecifiedNumberOfPulses'), + 0x30080138: ('IS', '1', "Delivered Number of Pulses", '', 'DeliveredNumberOfPulses'), + 0x3008013A: ('DS', '1', "Specified Pulse Repetition Interval", '', 'SpecifiedPulseRepetitionInterval'), + 0x3008013C: ('DS', '1', "Delivered Pulse Repetition Interval", '', 'DeliveredPulseRepetitionInterval'), + 0x30080140: ('SQ', '1', "Recorded Source Applicator Sequence", '', 'RecordedSourceApplicatorSequence'), + 0x30080142: ('IS', '1', "Referenced Source Applicator Number", '', 'ReferencedSourceApplicatorNumber'), + 0x30080150: ('SQ', '1', "Recorded Channel Shield Sequence", '', 'RecordedChannelShieldSequence'), + 0x30080152: ('IS', '1', "Referenced Channel Shield Number", '', 'ReferencedChannelShieldNumber'), + 0x30080160: ('SQ', '1', "Brachy Control Point Delivered Sequence", '', 'BrachyControlPointDeliveredSequence'), + 0x30080162: ('DA', '1', "Safe Position Exit Date", '', 'SafePositionExitDate'), + 0x30080164: ('TM', '1', "Safe Position Exit Time", '', 'SafePositionExitTime'), + 0x30080166: ('DA', '1', "Safe Position Return Date", '', 'SafePositionReturnDate'), + 0x30080168: ('TM', '1', "Safe Position Return Time", '', 'SafePositionReturnTime'), + 0x30080200: ('CS', '1', "Current Treatment Status", '', 'CurrentTreatmentStatus'), + 0x30080202: ('ST', '1', "Treatment Status Comment", '', 'TreatmentStatusComment'), + 0x30080220: ('SQ', '1', "Fraction Group Summary Sequence", '', 'FractionGroupSummarySequence'), + 0x30080223: ('IS', '1', "Referenced Fraction Number", '', 'ReferencedFractionNumber'), + 0x30080224: ('CS', '1', "Fraction Group Type", '', 'FractionGroupType'), + 0x30080230: ('CS', '1', "Beam Stopper Position", '', 'BeamStopperPosition'), + 0x30080240: ('SQ', '1', "Fraction Status Summary Sequence", '', 'FractionStatusSummarySequence'), + 0x30080250: ('DA', '1', "Treatment Date", '', 'TreatmentDate'), + 0x30080251: ('TM', '1', "Treatment Time", '', 'TreatmentTime'), + 0x300A0002: ('SH', '1', "RT Plan Label", '', 'RTPlanLabel'), + 0x300A0003: ('LO', '1', "RT Plan Name", '', 'RTPlanName'), + 0x300A0004: ('ST', '1', "RT Plan Description", '', 'RTPlanDescription'), + 0x300A0006: ('DA', '1', "RT Plan Date", '', 'RTPlanDate'), + 0x300A0007: ('TM', '1', "RT Plan Time", '', 'RTPlanTime'), + 0x300A0009: ('LO', '1-n', "Treatment Protocols", '', 'TreatmentProtocols'), + 0x300A000A: ('CS', '1', "Plan Intent", '', 'PlanIntent'), + 0x300A000B: ('LO', '1-n', "Treatment Sites", '', 'TreatmentSites'), + 0x300A000C: ('CS', '1', "RT Plan Geometry", '', 'RTPlanGeometry'), + 0x300A000E: ('ST', '1', "Prescription Description", '', 'PrescriptionDescription'), + 0x300A0010: ('SQ', '1', "Dose Reference Sequence", '', 'DoseReferenceSequence'), + 0x300A0012: ('IS', '1', "Dose Reference Number", '', 'DoseReferenceNumber'), + 0x300A0013: ('UI', '1', "Dose Reference UID", '', 'DoseReferenceUID'), + 0x300A0014: ('CS', '1', "Dose Reference Structure Type", '', 'DoseReferenceStructureType'), + 0x300A0015: ('CS', '1', "Nominal Beam Energy Unit", '', 'NominalBeamEnergyUnit'), + 0x300A0016: ('LO', '1', "Dose Reference Description", '', 'DoseReferenceDescription'), + 0x300A0018: ('DS', '3', "Dose Reference Point Coordinates", '', 'DoseReferencePointCoordinates'), + 0x300A001A: ('DS', '1', "Nominal Prior Dose", '', 'NominalPriorDose'), + 0x300A0020: ('CS', '1', "Dose Reference Type", '', 'DoseReferenceType'), + 0x300A0021: ('DS', '1', "Constraint Weight", '', 'ConstraintWeight'), + 0x300A0022: ('DS', '1', "Delivery Warning Dose", '', 'DeliveryWarningDose'), + 0x300A0023: ('DS', '1', "Delivery Maximum Dose", '', 'DeliveryMaximumDose'), + 0x300A0025: ('DS', '1', "Target Minimum Dose", '', 'TargetMinimumDose'), + 0x300A0026: ('DS', '1', "Target Prescription Dose", '', 'TargetPrescriptionDose'), + 0x300A0027: ('DS', '1', "Target Maximum Dose", '', 'TargetMaximumDose'), + 0x300A0028: ('DS', '1', "Target Underdose Volume Fraction", '', 'TargetUnderdoseVolumeFraction'), + 0x300A002A: ('DS', '1', "Organ at Risk Full-volume Dose", '', 'OrganAtRiskFullVolumeDose'), + 0x300A002B: ('DS', '1', "Organ at Risk Limit Dose", '', 'OrganAtRiskLimitDose'), + 0x300A002C: ('DS', '1', "Organ at Risk Maximum Dose", '', 'OrganAtRiskMaximumDose'), + 0x300A002D: ('DS', '1', "Organ at Risk Overdose Volume Fraction", '', 'OrganAtRiskOverdoseVolumeFraction'), + 0x300A0040: ('SQ', '1', "Tolerance Table Sequence", '', 'ToleranceTableSequence'), + 0x300A0042: ('IS', '1', "Tolerance Table Number", '', 'ToleranceTableNumber'), + 0x300A0043: ('SH', '1', "Tolerance Table Label", '', 'ToleranceTableLabel'), + 0x300A0044: ('DS', '1', "Gantry Angle Tolerance", '', 'GantryAngleTolerance'), + 0x300A0046: ('DS', '1', "Beam Limiting Device Angle Tolerance", '', 'BeamLimitingDeviceAngleTolerance'), + 0x300A0048: ('SQ', '1', "Beam Limiting Device Tolerance Sequence", '', 'BeamLimitingDeviceToleranceSequence'), + 0x300A004A: ('DS', '1', "Beam Limiting Device Position Tolerance", '', 'BeamLimitingDevicePositionTolerance'), + 0x300A004B: ('FL', '1', "Snout Position Tolerance", '', 'SnoutPositionTolerance'), + 0x300A004C: ('DS', '1', "Patient Support Angle Tolerance", '', 'PatientSupportAngleTolerance'), + 0x300A004E: ('DS', '1', "Table Top Eccentric Angle Tolerance", '', 'TableTopEccentricAngleTolerance'), + 0x300A004F: ('FL', '1', "Table Top Pitch Angle Tolerance", '', 'TableTopPitchAngleTolerance'), + 0x300A0050: ('FL', '1', "Table Top Roll Angle Tolerance", '', 'TableTopRollAngleTolerance'), + 0x300A0051: ('DS', '1', "Table Top Vertical Position Tolerance", '', 'TableTopVerticalPositionTolerance'), + 0x300A0052: ('DS', '1', "Table Top Longitudinal Position Tolerance", '', 'TableTopLongitudinalPositionTolerance'), + 0x300A0053: ('DS', '1', "Table Top Lateral Position Tolerance", '', 'TableTopLateralPositionTolerance'), + 0x300A0055: ('CS', '1', "RT Plan Relationship", '', 'RTPlanRelationship'), + 0x300A0070: ('SQ', '1', "Fraction Group Sequence", '', 'FractionGroupSequence'), + 0x300A0071: ('IS', '1', "Fraction Group Number", '', 'FractionGroupNumber'), + 0x300A0072: ('LO', '1', "Fraction Group Description", '', 'FractionGroupDescription'), + 0x300A0078: ('IS', '1', "Number of Fractions Planned", '', 'NumberOfFractionsPlanned'), + 0x300A0079: ('IS', '1', "Number of Fraction Pattern Digits Per Day", '', 'NumberOfFractionPatternDigitsPerDay'), + 0x300A007A: ('IS', '1', "Repeat Fraction Cycle Length", '', 'RepeatFractionCycleLength'), + 0x300A007B: ('LT', '1', "Fraction Pattern", '', 'FractionPattern'), + 0x300A0080: ('IS', '1', "Number of Beams", '', 'NumberOfBeams'), + 0x300A0082: ('DS', '3', "Beam Dose Specification Point", '', 'BeamDoseSpecificationPoint'), + 0x300A0084: ('DS', '1', "Beam Dose", '', 'BeamDose'), + 0x300A0086: ('DS', '1', "Beam Meterset", '', 'BeamMeterset'), + 0x300A0088: ('FL', '1', "Beam Dose Point Depth", 'Retired', 'BeamDosePointDepth'), + 0x300A0089: ('FL', '1', "Beam Dose Point Equivalent Depth", 'Retired', 'BeamDosePointEquivalentDepth'), + 0x300A008A: ('FL', '1', "Beam Dose Point SSD", 'Retired', 'BeamDosePointSSD'), + 0x300A008B: ('CS', '1', "Beam Dose Meaning", '', 'BeamDoseMeaning'), + 0x300A008C: ('SQ', '1', "Beam Dose Verification Control Point Sequence", '', 'BeamDoseVerificationControlPointSequence'), + 0x300A008D: ('FL', '1', "Average Beam Dose Point Depth", '', 'AverageBeamDosePointDepth'), + 0x300A008E: ('FL', '1', "Average Beam Dose Point Equivalent Depth", '', 'AverageBeamDosePointEquivalentDepth'), + 0x300A008F: ('FL', '1', "Average Beam Dose Point SSD", '', 'AverageBeamDosePointSSD'), + 0x300A00A0: ('IS', '1', "Number of Brachy Application Setups", '', 'NumberOfBrachyApplicationSetups'), + 0x300A00A2: ('DS', '3', "Brachy Application Setup Dose Specification Point", '', 'BrachyApplicationSetupDoseSpecificationPoint'), + 0x300A00A4: ('DS', '1', "Brachy Application Setup Dose", '', 'BrachyApplicationSetupDose'), + 0x300A00B0: ('SQ', '1', "Beam Sequence", '', 'BeamSequence'), + 0x300A00B2: ('SH', '1', "Treatment Machine Name", '', 'TreatmentMachineName'), + 0x300A00B3: ('CS', '1', "Primary Dosimeter Unit", '', 'PrimaryDosimeterUnit'), + 0x300A00B4: ('DS', '1', "Source-Axis Distance", '', 'SourceAxisDistance'), + 0x300A00B6: ('SQ', '1', "Beam Limiting Device Sequence", '', 'BeamLimitingDeviceSequence'), + 0x300A00B8: ('CS', '1', "RT Beam Limiting Device Type", '', 'RTBeamLimitingDeviceType'), + 0x300A00BA: ('DS', '1', "Source to Beam Limiting Device Distance", '', 'SourceToBeamLimitingDeviceDistance'), + 0x300A00BB: ('FL', '1', "Isocenter to Beam Limiting Device Distance", '', 'IsocenterToBeamLimitingDeviceDistance'), + 0x300A00BC: ('IS', '1', "Number of Leaf/Jaw Pairs", '', 'NumberOfLeafJawPairs'), + 0x300A00BE: ('DS', '3-n', "Leaf Position Boundaries", '', 'LeafPositionBoundaries'), + 0x300A00C0: ('IS', '1', "Beam Number", '', 'BeamNumber'), + 0x300A00C2: ('LO', '1', "Beam Name", '', 'BeamName'), + 0x300A00C3: ('ST', '1', "Beam Description", '', 'BeamDescription'), + 0x300A00C4: ('CS', '1', "Beam Type", '', 'BeamType'), + 0x300A00C6: ('CS', '1', "Radiation Type", '', 'RadiationType'), + 0x300A00C7: ('CS', '1', "High-Dose Technique Type", '', 'HighDoseTechniqueType'), + 0x300A00C8: ('IS', '1', "Reference Image Number", '', 'ReferenceImageNumber'), + 0x300A00CA: ('SQ', '1', "Planned Verification Image Sequence", '', 'PlannedVerificationImageSequence'), + 0x300A00CC: ('LO', '1-n', "Imaging Device-Specific Acquisition Parameters", '', 'ImagingDeviceSpecificAcquisitionParameters'), + 0x300A00CE: ('CS', '1', "Treatment Delivery Type", '', 'TreatmentDeliveryType'), + 0x300A00D0: ('IS', '1', "Number of Wedges", '', 'NumberOfWedges'), + 0x300A00D1: ('SQ', '1', "Wedge Sequence", '', 'WedgeSequence'), + 0x300A00D2: ('IS', '1', "Wedge Number", '', 'WedgeNumber'), + 0x300A00D3: ('CS', '1', "Wedge Type", '', 'WedgeType'), + 0x300A00D4: ('SH', '1', "Wedge ID", '', 'WedgeID'), + 0x300A00D5: ('IS', '1', "Wedge Angle", '', 'WedgeAngle'), + 0x300A00D6: ('DS', '1', "Wedge Factor", '', 'WedgeFactor'), + 0x300A00D7: ('FL', '1', "Total Wedge Tray Water-Equivalent Thickness", '', 'TotalWedgeTrayWaterEquivalentThickness'), + 0x300A00D8: ('DS', '1', "Wedge Orientation", '', 'WedgeOrientation'), + 0x300A00D9: ('FL', '1', "Isocenter to Wedge Tray Distance", '', 'IsocenterToWedgeTrayDistance'), + 0x300A00DA: ('DS', '1', "Source to Wedge Tray Distance", '', 'SourceToWedgeTrayDistance'), + 0x300A00DB: ('FL', '1', "Wedge Thin Edge Position", '', 'WedgeThinEdgePosition'), + 0x300A00DC: ('SH', '1', "Bolus ID", '', 'BolusID'), + 0x300A00DD: ('ST', '1', "Bolus Description", '', 'BolusDescription'), + 0x300A00E0: ('IS', '1', "Number of Compensators", '', 'NumberOfCompensators'), + 0x300A00E1: ('SH', '1', "Material ID", '', 'MaterialID'), + 0x300A00E2: ('DS', '1', "Total Compensator Tray Factor", '', 'TotalCompensatorTrayFactor'), + 0x300A00E3: ('SQ', '1', "Compensator Sequence", '', 'CompensatorSequence'), + 0x300A00E4: ('IS', '1', "Compensator Number", '', 'CompensatorNumber'), + 0x300A00E5: ('SH', '1', "Compensator ID", '', 'CompensatorID'), + 0x300A00E6: ('DS', '1', "Source to Compensator Tray Distance", '', 'SourceToCompensatorTrayDistance'), + 0x300A00E7: ('IS', '1', "Compensator Rows", '', 'CompensatorRows'), + 0x300A00E8: ('IS', '1', "Compensator Columns", '', 'CompensatorColumns'), + 0x300A00E9: ('DS', '2', "Compensator Pixel Spacing", '', 'CompensatorPixelSpacing'), + 0x300A00EA: ('DS', '2', "Compensator Position", '', 'CompensatorPosition'), + 0x300A00EB: ('DS', '1-n', "Compensator Transmission Data", '', 'CompensatorTransmissionData'), + 0x300A00EC: ('DS', '1-n', "Compensator Thickness Data", '', 'CompensatorThicknessData'), + 0x300A00ED: ('IS', '1', "Number of Boli", '', 'NumberOfBoli'), + 0x300A00EE: ('CS', '1', "Compensator Type", '', 'CompensatorType'), + 0x300A00EF: ('SH', '1', "Compensator Tray ID", '', 'CompensatorTrayID'), + 0x300A00F0: ('IS', '1', "Number of Blocks", '', 'NumberOfBlocks'), + 0x300A00F2: ('DS', '1', "Total Block Tray Factor", '', 'TotalBlockTrayFactor'), + 0x300A00F3: ('FL', '1', "Total Block Tray Water-Equivalent Thickness", '', 'TotalBlockTrayWaterEquivalentThickness'), + 0x300A00F4: ('SQ', '1', "Block Sequence", '', 'BlockSequence'), + 0x300A00F5: ('SH', '1', "Block Tray ID", '', 'BlockTrayID'), + 0x300A00F6: ('DS', '1', "Source to Block Tray Distance", '', 'SourceToBlockTrayDistance'), + 0x300A00F7: ('FL', '1', "Isocenter to Block Tray Distance", '', 'IsocenterToBlockTrayDistance'), + 0x300A00F8: ('CS', '1', "Block Type", '', 'BlockType'), + 0x300A00F9: ('LO', '1', "Accessory Code", '', 'AccessoryCode'), + 0x300A00FA: ('CS', '1', "Block Divergence", '', 'BlockDivergence'), + 0x300A00FB: ('CS', '1', "Block Mounting Position", '', 'BlockMountingPosition'), + 0x300A00FC: ('IS', '1', "Block Number", '', 'BlockNumber'), + 0x300A00FE: ('LO', '1', "Block Name", '', 'BlockName'), + 0x300A0100: ('DS', '1', "Block Thickness", '', 'BlockThickness'), + 0x300A0102: ('DS', '1', "Block Transmission", '', 'BlockTransmission'), + 0x300A0104: ('IS', '1', "Block Number of Points", '', 'BlockNumberOfPoints'), + 0x300A0106: ('DS', '2-2n', "Block Data", '', 'BlockData'), + 0x300A0107: ('SQ', '1', "Applicator Sequence", '', 'ApplicatorSequence'), + 0x300A0108: ('SH', '1', "Applicator ID", '', 'ApplicatorID'), + 0x300A0109: ('CS', '1', "Applicator Type", '', 'ApplicatorType'), + 0x300A010A: ('LO', '1', "Applicator Description", '', 'ApplicatorDescription'), + 0x300A010C: ('DS', '1', "Cumulative Dose Reference Coefficient", '', 'CumulativeDoseReferenceCoefficient'), + 0x300A010E: ('DS', '1', "Final Cumulative Meterset Weight", '', 'FinalCumulativeMetersetWeight'), + 0x300A0110: ('IS', '1', "Number of Control Points", '', 'NumberOfControlPoints'), + 0x300A0111: ('SQ', '1', "Control Point Sequence", '', 'ControlPointSequence'), + 0x300A0112: ('IS', '1', "Control Point Index", '', 'ControlPointIndex'), + 0x300A0114: ('DS', '1', "Nominal Beam Energy", '', 'NominalBeamEnergy'), + 0x300A0115: ('DS', '1', "Dose Rate Set", '', 'DoseRateSet'), + 0x300A0116: ('SQ', '1', "Wedge Position Sequence", '', 'WedgePositionSequence'), + 0x300A0118: ('CS', '1', "Wedge Position", '', 'WedgePosition'), + 0x300A011A: ('SQ', '1', "Beam Limiting Device Position Sequence", '', 'BeamLimitingDevicePositionSequence'), + 0x300A011C: ('DS', '2-2n', "Leaf/Jaw Positions", '', 'LeafJawPositions'), + 0x300A011E: ('DS', '1', "Gantry Angle", '', 'GantryAngle'), + 0x300A011F: ('CS', '1', "Gantry Rotation Direction", '', 'GantryRotationDirection'), + 0x300A0120: ('DS', '1', "Beam Limiting Device Angle", '', 'BeamLimitingDeviceAngle'), + 0x300A0121: ('CS', '1', "Beam Limiting Device Rotation Direction", '', 'BeamLimitingDeviceRotationDirection'), + 0x300A0122: ('DS', '1', "Patient Support Angle", '', 'PatientSupportAngle'), + 0x300A0123: ('CS', '1', "Patient Support Rotation Direction", '', 'PatientSupportRotationDirection'), + 0x300A0124: ('DS', '1', "Table Top Eccentric Axis Distance", '', 'TableTopEccentricAxisDistance'), + 0x300A0125: ('DS', '1', "Table Top Eccentric Angle", '', 'TableTopEccentricAngle'), + 0x300A0126: ('CS', '1', "Table Top Eccentric Rotation Direction", '', 'TableTopEccentricRotationDirection'), + 0x300A0128: ('DS', '1', "Table Top Vertical Position", '', 'TableTopVerticalPosition'), + 0x300A0129: ('DS', '1', "Table Top Longitudinal Position", '', 'TableTopLongitudinalPosition'), + 0x300A012A: ('DS', '1', "Table Top Lateral Position", '', 'TableTopLateralPosition'), + 0x300A012C: ('DS', '3', "Isocenter Position", '', 'IsocenterPosition'), + 0x300A012E: ('DS', '3', "Surface Entry Point", '', 'SurfaceEntryPoint'), + 0x300A0130: ('DS', '1', "Source to Surface Distance", '', 'SourceToSurfaceDistance'), + 0x300A0134: ('DS', '1', "Cumulative Meterset Weight", '', 'CumulativeMetersetWeight'), + 0x300A0140: ('FL', '1', "Table Top Pitch Angle", '', 'TableTopPitchAngle'), + 0x300A0142: ('CS', '1', "Table Top Pitch Rotation Direction", '', 'TableTopPitchRotationDirection'), + 0x300A0144: ('FL', '1', "Table Top Roll Angle", '', 'TableTopRollAngle'), + 0x300A0146: ('CS', '1', "Table Top Roll Rotation Direction", '', 'TableTopRollRotationDirection'), + 0x300A0148: ('FL', '1', "Head Fixation Angle", '', 'HeadFixationAngle'), + 0x300A014A: ('FL', '1', "Gantry Pitch Angle", '', 'GantryPitchAngle'), + 0x300A014C: ('CS', '1', "Gantry Pitch Rotation Direction", '', 'GantryPitchRotationDirection'), + 0x300A014E: ('FL', '1', "Gantry Pitch Angle Tolerance", '', 'GantryPitchAngleTolerance'), + 0x300A0180: ('SQ', '1', "Patient Setup Sequence", '', 'PatientSetupSequence'), + 0x300A0182: ('IS', '1', "Patient Setup Number", '', 'PatientSetupNumber'), + 0x300A0183: ('LO', '1', "Patient Setup Label", '', 'PatientSetupLabel'), + 0x300A0184: ('LO', '1', "Patient Additional Position", '', 'PatientAdditionalPosition'), + 0x300A0190: ('SQ', '1', "Fixation Device Sequence", '', 'FixationDeviceSequence'), + 0x300A0192: ('CS', '1', "Fixation Device Type", '', 'FixationDeviceType'), + 0x300A0194: ('SH', '1', "Fixation Device Label", '', 'FixationDeviceLabel'), + 0x300A0196: ('ST', '1', "Fixation Device Description", '', 'FixationDeviceDescription'), + 0x300A0198: ('SH', '1', "Fixation Device Position", '', 'FixationDevicePosition'), + 0x300A0199: ('FL', '1', "Fixation Device Pitch Angle", '', 'FixationDevicePitchAngle'), + 0x300A019A: ('FL', '1', "Fixation Device Roll Angle", '', 'FixationDeviceRollAngle'), + 0x300A01A0: ('SQ', '1', "Shielding Device Sequence", '', 'ShieldingDeviceSequence'), + 0x300A01A2: ('CS', '1', "Shielding Device Type", '', 'ShieldingDeviceType'), + 0x300A01A4: ('SH', '1', "Shielding Device Label", '', 'ShieldingDeviceLabel'), + 0x300A01A6: ('ST', '1', "Shielding Device Description", '', 'ShieldingDeviceDescription'), + 0x300A01A8: ('SH', '1', "Shielding Device Position", '', 'ShieldingDevicePosition'), + 0x300A01B0: ('CS', '1', "Setup Technique", '', 'SetupTechnique'), + 0x300A01B2: ('ST', '1', "Setup Technique Description", '', 'SetupTechniqueDescription'), + 0x300A01B4: ('SQ', '1', "Setup Device Sequence", '', 'SetupDeviceSequence'), + 0x300A01B6: ('CS', '1', "Setup Device Type", '', 'SetupDeviceType'), + 0x300A01B8: ('SH', '1', "Setup Device Label", '', 'SetupDeviceLabel'), + 0x300A01BA: ('ST', '1', "Setup Device Description", '', 'SetupDeviceDescription'), + 0x300A01BC: ('DS', '1', "Setup Device Parameter", '', 'SetupDeviceParameter'), + 0x300A01D0: ('ST', '1', "Setup Reference Description", '', 'SetupReferenceDescription'), + 0x300A01D2: ('DS', '1', "Table Top Vertical Setup Displacement", '', 'TableTopVerticalSetupDisplacement'), + 0x300A01D4: ('DS', '1', "Table Top Longitudinal Setup Displacement", '', 'TableTopLongitudinalSetupDisplacement'), + 0x300A01D6: ('DS', '1', "Table Top Lateral Setup Displacement", '', 'TableTopLateralSetupDisplacement'), + 0x300A0200: ('CS', '1', "Brachy Treatment Technique", '', 'BrachyTreatmentTechnique'), + 0x300A0202: ('CS', '1', "Brachy Treatment Type", '', 'BrachyTreatmentType'), + 0x300A0206: ('SQ', '1', "Treatment Machine Sequence", '', 'TreatmentMachineSequence'), + 0x300A0210: ('SQ', '1', "Source Sequence", '', 'SourceSequence'), + 0x300A0212: ('IS', '1', "Source Number", '', 'SourceNumber'), + 0x300A0214: ('CS', '1', "Source Type", '', 'SourceType'), + 0x300A0216: ('LO', '1', "Source Manufacturer", '', 'SourceManufacturer'), + 0x300A0218: ('DS', '1', "Active Source Diameter", '', 'ActiveSourceDiameter'), + 0x300A021A: ('DS', '1', "Active Source Length", '', 'ActiveSourceLength'), + 0x300A021B: ('SH', '1', "Source Model ID", '', 'SourceModelID'), + 0x300A021C: ('LO', '1', "Source Description", '', 'SourceDescription'), + 0x300A0222: ('DS', '1', "Source Encapsulation Nominal Thickness", '', 'SourceEncapsulationNominalThickness'), + 0x300A0224: ('DS', '1', "Source Encapsulation Nominal Transmission", '', 'SourceEncapsulationNominalTransmission'), + 0x300A0226: ('LO', '1', "Source Isotope Name", '', 'SourceIsotopeName'), + 0x300A0228: ('DS', '1', "Source Isotope Half Life", '', 'SourceIsotopeHalfLife'), + 0x300A0229: ('CS', '1', "Source Strength Units", '', 'SourceStrengthUnits'), + 0x300A022A: ('DS', '1', "Reference Air Kerma Rate", '', 'ReferenceAirKermaRate'), + 0x300A022B: ('DS', '1', "Source Strength", '', 'SourceStrength'), + 0x300A022C: ('DA', '1', "Source Strength Reference Date", '', 'SourceStrengthReferenceDate'), + 0x300A022E: ('TM', '1', "Source Strength Reference Time", '', 'SourceStrengthReferenceTime'), + 0x300A0230: ('SQ', '1', "Application Setup Sequence", '', 'ApplicationSetupSequence'), + 0x300A0232: ('CS', '1', "Application Setup Type", '', 'ApplicationSetupType'), + 0x300A0234: ('IS', '1', "Application Setup Number", '', 'ApplicationSetupNumber'), + 0x300A0236: ('LO', '1', "Application Setup Name", '', 'ApplicationSetupName'), + 0x300A0238: ('LO', '1', "Application Setup Manufacturer", '', 'ApplicationSetupManufacturer'), + 0x300A0240: ('IS', '1', "Template Number", '', 'TemplateNumber'), + 0x300A0242: ('SH', '1', "Template Type", '', 'TemplateType'), + 0x300A0244: ('LO', '1', "Template Name", '', 'TemplateName'), + 0x300A0250: ('DS', '1', "Total Reference Air Kerma", '', 'TotalReferenceAirKerma'), + 0x300A0260: ('SQ', '1', "Brachy Accessory Device Sequence", '', 'BrachyAccessoryDeviceSequence'), + 0x300A0262: ('IS', '1', "Brachy Accessory Device Number", '', 'BrachyAccessoryDeviceNumber'), + 0x300A0263: ('SH', '1', "Brachy Accessory Device ID", '', 'BrachyAccessoryDeviceID'), + 0x300A0264: ('CS', '1', "Brachy Accessory Device Type", '', 'BrachyAccessoryDeviceType'), + 0x300A0266: ('LO', '1', "Brachy Accessory Device Name", '', 'BrachyAccessoryDeviceName'), + 0x300A026A: ('DS', '1', "Brachy Accessory Device Nominal Thickness", '', 'BrachyAccessoryDeviceNominalThickness'), + 0x300A026C: ('DS', '1', "Brachy Accessory Device Nominal Transmission", '', 'BrachyAccessoryDeviceNominalTransmission'), + 0x300A0280: ('SQ', '1', "Channel Sequence", '', 'ChannelSequence'), + 0x300A0282: ('IS', '1', "Channel Number", '', 'ChannelNumber'), + 0x300A0284: ('DS', '1', "Channel Length", '', 'ChannelLength'), + 0x300A0286: ('DS', '1', "Channel Total Time", '', 'ChannelTotalTime'), + 0x300A0288: ('CS', '1', "Source Movement Type", '', 'SourceMovementType'), + 0x300A028A: ('IS', '1', "Number of Pulses", '', 'NumberOfPulses'), + 0x300A028C: ('DS', '1', "Pulse Repetition Interval", '', 'PulseRepetitionInterval'), + 0x300A0290: ('IS', '1', "Source Applicator Number", '', 'SourceApplicatorNumber'), + 0x300A0291: ('SH', '1', "Source Applicator ID", '', 'SourceApplicatorID'), + 0x300A0292: ('CS', '1', "Source Applicator Type", '', 'SourceApplicatorType'), + 0x300A0294: ('LO', '1', "Source Applicator Name", '', 'SourceApplicatorName'), + 0x300A0296: ('DS', '1', "Source Applicator Length", '', 'SourceApplicatorLength'), + 0x300A0298: ('LO', '1', "Source Applicator Manufacturer", '', 'SourceApplicatorManufacturer'), + 0x300A029C: ('DS', '1', "Source Applicator Wall Nominal Thickness", '', 'SourceApplicatorWallNominalThickness'), + 0x300A029E: ('DS', '1', "Source Applicator Wall Nominal Transmission", '', 'SourceApplicatorWallNominalTransmission'), + 0x300A02A0: ('DS', '1', "Source Applicator Step Size", '', 'SourceApplicatorStepSize'), + 0x300A02A2: ('IS', '1', "Transfer Tube Number", '', 'TransferTubeNumber'), + 0x300A02A4: ('DS', '1', "Transfer Tube Length", '', 'TransferTubeLength'), + 0x300A02B0: ('SQ', '1', "Channel Shield Sequence", '', 'ChannelShieldSequence'), + 0x300A02B2: ('IS', '1', "Channel Shield Number", '', 'ChannelShieldNumber'), + 0x300A02B3: ('SH', '1', "Channel Shield ID", '', 'ChannelShieldID'), + 0x300A02B4: ('LO', '1', "Channel Shield Name", '', 'ChannelShieldName'), + 0x300A02B8: ('DS', '1', "Channel Shield Nominal Thickness", '', 'ChannelShieldNominalThickness'), + 0x300A02BA: ('DS', '1', "Channel Shield Nominal Transmission", '', 'ChannelShieldNominalTransmission'), + 0x300A02C8: ('DS', '1', "Final Cumulative Time Weight", '', 'FinalCumulativeTimeWeight'), + 0x300A02D0: ('SQ', '1', "Brachy Control Point Sequence", '', 'BrachyControlPointSequence'), + 0x300A02D2: ('DS', '1', "Control Point Relative Position", '', 'ControlPointRelativePosition'), + 0x300A02D4: ('DS', '3', "Control Point 3D Position", '', 'ControlPoint3DPosition'), + 0x300A02D6: ('DS', '1', "Cumulative Time Weight", '', 'CumulativeTimeWeight'), + 0x300A02E0: ('CS', '1', "Compensator Divergence", '', 'CompensatorDivergence'), + 0x300A02E1: ('CS', '1', "Compensator Mounting Position", '', 'CompensatorMountingPosition'), + 0x300A02E2: ('DS', '1-n', "Source to Compensator Distance", '', 'SourceToCompensatorDistance'), + 0x300A02E3: ('FL', '1', "Total Compensator Tray Water-Equivalent Thickness", '', 'TotalCompensatorTrayWaterEquivalentThickness'), + 0x300A02E4: ('FL', '1', "Isocenter to Compensator Tray Distance", '', 'IsocenterToCompensatorTrayDistance'), + 0x300A02E5: ('FL', '1', "Compensator Column Offset", '', 'CompensatorColumnOffset'), + 0x300A02E6: ('FL', '1-n', "Isocenter to Compensator Distances", '', 'IsocenterToCompensatorDistances'), + 0x300A02E7: ('FL', '1', "Compensator Relative Stopping Power Ratio", '', 'CompensatorRelativeStoppingPowerRatio'), + 0x300A02E8: ('FL', '1', "Compensator Milling Tool Diameter", '', 'CompensatorMillingToolDiameter'), + 0x300A02EA: ('SQ', '1', "Ion Range Compensator Sequence", '', 'IonRangeCompensatorSequence'), + 0x300A02EB: ('LT', '1', "Compensator Description", '', 'CompensatorDescription'), + 0x300A0302: ('IS', '1', "Radiation Mass Number", '', 'RadiationMassNumber'), + 0x300A0304: ('IS', '1', "Radiation Atomic Number", '', 'RadiationAtomicNumber'), + 0x300A0306: ('SS', '1', "Radiation Charge State", '', 'RadiationChargeState'), + 0x300A0308: ('CS', '1', "Scan Mode", '', 'ScanMode'), + 0x300A030A: ('FL', '2', "Virtual Source-Axis Distances", '', 'VirtualSourceAxisDistances'), + 0x300A030C: ('SQ', '1', "Snout Sequence", '', 'SnoutSequence'), + 0x300A030D: ('FL', '1', "Snout Position", '', 'SnoutPosition'), + 0x300A030F: ('SH', '1', "Snout ID", '', 'SnoutID'), + 0x300A0312: ('IS', '1', "Number of Range Shifters", '', 'NumberOfRangeShifters'), + 0x300A0314: ('SQ', '1', "Range Shifter Sequence", '', 'RangeShifterSequence'), + 0x300A0316: ('IS', '1', "Range Shifter Number", '', 'RangeShifterNumber'), + 0x300A0318: ('SH', '1', "Range Shifter ID", '', 'RangeShifterID'), + 0x300A0320: ('CS', '1', "Range Shifter Type", '', 'RangeShifterType'), + 0x300A0322: ('LO', '1', "Range Shifter Description", '', 'RangeShifterDescription'), + 0x300A0330: ('IS', '1', "Number of Lateral Spreading Devices", '', 'NumberOfLateralSpreadingDevices'), + 0x300A0332: ('SQ', '1', "Lateral Spreading Device Sequence", '', 'LateralSpreadingDeviceSequence'), + 0x300A0334: ('IS', '1', "Lateral Spreading Device Number", '', 'LateralSpreadingDeviceNumber'), + 0x300A0336: ('SH', '1', "Lateral Spreading Device ID", '', 'LateralSpreadingDeviceID'), + 0x300A0338: ('CS', '1', "Lateral Spreading Device Type", '', 'LateralSpreadingDeviceType'), + 0x300A033A: ('LO', '1', "Lateral Spreading Device Description", '', 'LateralSpreadingDeviceDescription'), + 0x300A033C: ('FL', '1', "Lateral Spreading Device Water Equivalent Thickness", '', 'LateralSpreadingDeviceWaterEquivalentThickness'), + 0x300A0340: ('IS', '1', "Number of Range Modulators", '', 'NumberOfRangeModulators'), + 0x300A0342: ('SQ', '1', "Range Modulator Sequence", '', 'RangeModulatorSequence'), + 0x300A0344: ('IS', '1', "Range Modulator Number", '', 'RangeModulatorNumber'), + 0x300A0346: ('SH', '1', "Range Modulator ID", '', 'RangeModulatorID'), + 0x300A0348: ('CS', '1', "Range Modulator Type", '', 'RangeModulatorType'), + 0x300A034A: ('LO', '1', "Range Modulator Description", '', 'RangeModulatorDescription'), + 0x300A034C: ('SH', '1', "Beam Current Modulation ID", '', 'BeamCurrentModulationID'), + 0x300A0350: ('CS', '1', "Patient Support Type", '', 'PatientSupportType'), + 0x300A0352: ('SH', '1', "Patient Support ID", '', 'PatientSupportID'), + 0x300A0354: ('LO', '1', "Patient Support Accessory Code", '', 'PatientSupportAccessoryCode'), + 0x300A0356: ('FL', '1', "Fixation Light Azimuthal Angle", '', 'FixationLightAzimuthalAngle'), + 0x300A0358: ('FL', '1', "Fixation Light Polar Angle", '', 'FixationLightPolarAngle'), + 0x300A035A: ('FL', '1', "Meterset Rate", '', 'MetersetRate'), + 0x300A0360: ('SQ', '1', "Range Shifter Settings Sequence", '', 'RangeShifterSettingsSequence'), + 0x300A0362: ('LO', '1', "Range Shifter Setting", '', 'RangeShifterSetting'), + 0x300A0364: ('FL', '1', "Isocenter to Range Shifter Distance", '', 'IsocenterToRangeShifterDistance'), + 0x300A0366: ('FL', '1', "Range Shifter Water Equivalent Thickness", '', 'RangeShifterWaterEquivalentThickness'), + 0x300A0370: ('SQ', '1', "Lateral Spreading Device Settings Sequence", '', 'LateralSpreadingDeviceSettingsSequence'), + 0x300A0372: ('LO', '1', "Lateral Spreading Device Setting", '', 'LateralSpreadingDeviceSetting'), + 0x300A0374: ('FL', '1', "Isocenter to Lateral Spreading Device Distance", '', 'IsocenterToLateralSpreadingDeviceDistance'), + 0x300A0380: ('SQ', '1', "Range Modulator Settings Sequence", '', 'RangeModulatorSettingsSequence'), + 0x300A0382: ('FL', '1', "Range Modulator Gating Start Value", '', 'RangeModulatorGatingStartValue'), + 0x300A0384: ('FL', '1', "Range Modulator Gating Stop Value", '', 'RangeModulatorGatingStopValue'), + 0x300A0386: ('FL', '1', "Range Modulator Gating Start Water Equivalent Thickness", '', 'RangeModulatorGatingStartWaterEquivalentThickness'), + 0x300A0388: ('FL', '1', "Range Modulator Gating Stop Water Equivalent Thickness", '', 'RangeModulatorGatingStopWaterEquivalentThickness'), + 0x300A038A: ('FL', '1', "Isocenter to Range Modulator Distance", '', 'IsocenterToRangeModulatorDistance'), + 0x300A0390: ('SH', '1', "Scan Spot Tune ID", '', 'ScanSpotTuneID'), + 0x300A0392: ('IS', '1', "Number of Scan Spot Positions", '', 'NumberOfScanSpotPositions'), + 0x300A0394: ('FL', '1-n', "Scan Spot Position Map", '', 'ScanSpotPositionMap'), + 0x300A0396: ('FL', '1-n', "Scan Spot Meterset Weights", '', 'ScanSpotMetersetWeights'), + 0x300A0398: ('FL', '2', "Scanning Spot Size", '', 'ScanningSpotSize'), + 0x300A039A: ('IS', '1', "Number of Paintings", '', 'NumberOfPaintings'), + 0x300A03A0: ('SQ', '1', "Ion Tolerance Table Sequence", '', 'IonToleranceTableSequence'), + 0x300A03A2: ('SQ', '1', "Ion Beam Sequence", '', 'IonBeamSequence'), + 0x300A03A4: ('SQ', '1', "Ion Beam Limiting Device Sequence", '', 'IonBeamLimitingDeviceSequence'), + 0x300A03A6: ('SQ', '1', "Ion Block Sequence", '', 'IonBlockSequence'), + 0x300A03A8: ('SQ', '1', "Ion Control Point Sequence", '', 'IonControlPointSequence'), + 0x300A03AA: ('SQ', '1', "Ion Wedge Sequence", '', 'IonWedgeSequence'), + 0x300A03AC: ('SQ', '1', "Ion Wedge Position Sequence", '', 'IonWedgePositionSequence'), + 0x300A0401: ('SQ', '1', "Referenced Setup Image Sequence", '', 'ReferencedSetupImageSequence'), + 0x300A0402: ('ST', '1', "Setup Image Comment", '', 'SetupImageComment'), + 0x300A0410: ('SQ', '1', "Motion Synchronization Sequence", '', 'MotionSynchronizationSequence'), + 0x300A0412: ('FL', '3', "Control Point Orientation", '', 'ControlPointOrientation'), + 0x300A0420: ('SQ', '1', "General Accessory Sequence", '', 'GeneralAccessorySequence'), + 0x300A0421: ('SH', '1', "General Accessory ID", '', 'GeneralAccessoryID'), + 0x300A0422: ('ST', '1', "General Accessory Description", '', 'GeneralAccessoryDescription'), + 0x300A0423: ('CS', '1', "General Accessory Type", '', 'GeneralAccessoryType'), + 0x300A0424: ('IS', '1', "General Accessory Number", '', 'GeneralAccessoryNumber'), + 0x300A0425: ('FL', '1', "Source to General Accessory Distance", '', 'SourceToGeneralAccessoryDistance'), + 0x300A0431: ('SQ', '1', "Applicator Geometry Sequence", '', 'ApplicatorGeometrySequence'), + 0x300A0432: ('CS', '1', "Applicator Aperture Shape", '', 'ApplicatorApertureShape'), + 0x300A0433: ('FL', '1', "Applicator Opening", '', 'ApplicatorOpening'), + 0x300A0434: ('FL', '1', "Applicator Opening X", '', 'ApplicatorOpeningX'), + 0x300A0435: ('FL', '1', "Applicator Opening Y", '', 'ApplicatorOpeningY'), + 0x300A0436: ('FL', '1', "Source to Applicator Mounting Position Distance", '', 'SourceToApplicatorMountingPositionDistance'), + 0x300C0002: ('SQ', '1', "Referenced RT Plan Sequence", '', 'ReferencedRTPlanSequence'), + 0x300C0004: ('SQ', '1', "Referenced Beam Sequence", '', 'ReferencedBeamSequence'), + 0x300C0006: ('IS', '1', "Referenced Beam Number", '', 'ReferencedBeamNumber'), + 0x300C0007: ('IS', '1', "Referenced Reference Image Number", '', 'ReferencedReferenceImageNumber'), + 0x300C0008: ('DS', '1', "Start Cumulative Meterset Weight", '', 'StartCumulativeMetersetWeight'), + 0x300C0009: ('DS', '1', "End Cumulative Meterset Weight", '', 'EndCumulativeMetersetWeight'), + 0x300C000A: ('SQ', '1', "Referenced Brachy Application Setup Sequence", '', 'ReferencedBrachyApplicationSetupSequence'), + 0x300C000C: ('IS', '1', "Referenced Brachy Application Setup Number", '', 'ReferencedBrachyApplicationSetupNumber'), + 0x300C000E: ('IS', '1', "Referenced Source Number", '', 'ReferencedSourceNumber'), + 0x300C0020: ('SQ', '1', "Referenced Fraction Group Sequence", '', 'ReferencedFractionGroupSequence'), + 0x300C0022: ('IS', '1', "Referenced Fraction Group Number", '', 'ReferencedFractionGroupNumber'), + 0x300C0040: ('SQ', '1', "Referenced Verification Image Sequence", '', 'ReferencedVerificationImageSequence'), + 0x300C0042: ('SQ', '1', "Referenced Reference Image Sequence", '', 'ReferencedReferenceImageSequence'), + 0x300C0050: ('SQ', '1', "Referenced Dose Reference Sequence", '', 'ReferencedDoseReferenceSequence'), + 0x300C0051: ('IS', '1', "Referenced Dose Reference Number", '', 'ReferencedDoseReferenceNumber'), + 0x300C0055: ('SQ', '1', "Brachy Referenced Dose Reference Sequence", '', 'BrachyReferencedDoseReferenceSequence'), + 0x300C0060: ('SQ', '1', "Referenced Structure Set Sequence", '', 'ReferencedStructureSetSequence'), + 0x300C006A: ('IS', '1', "Referenced Patient Setup Number", '', 'ReferencedPatientSetupNumber'), + 0x300C0080: ('SQ', '1', "Referenced Dose Sequence", '', 'ReferencedDoseSequence'), + 0x300C00A0: ('IS', '1', "Referenced Tolerance Table Number", '', 'ReferencedToleranceTableNumber'), + 0x300C00B0: ('SQ', '1', "Referenced Bolus Sequence", '', 'ReferencedBolusSequence'), + 0x300C00C0: ('IS', '1', "Referenced Wedge Number", '', 'ReferencedWedgeNumber'), + 0x300C00D0: ('IS', '1', "Referenced Compensator Number", '', 'ReferencedCompensatorNumber'), + 0x300C00E0: ('IS', '1', "Referenced Block Number", '', 'ReferencedBlockNumber'), + 0x300C00F0: ('IS', '1', "Referenced Control Point Index", '', 'ReferencedControlPointIndex'), + 0x300C00F2: ('SQ', '1', "Referenced Control Point Sequence", '', 'ReferencedControlPointSequence'), + 0x300C00F4: ('IS', '1', "Referenced Start Control Point Index", '', 'ReferencedStartControlPointIndex'), + 0x300C00F6: ('IS', '1', "Referenced Stop Control Point Index", '', 'ReferencedStopControlPointIndex'), + 0x300C0100: ('IS', '1', "Referenced Range Shifter Number", '', 'ReferencedRangeShifterNumber'), + 0x300C0102: ('IS', '1', "Referenced Lateral Spreading Device Number", '', 'ReferencedLateralSpreadingDeviceNumber'), + 0x300C0104: ('IS', '1', "Referenced Range Modulator Number", '', 'ReferencedRangeModulatorNumber'), + 0x300E0002: ('CS', '1', "Approval Status", '', 'ApprovalStatus'), + 0x300E0004: ('DA', '1', "Review Date", '', 'ReviewDate'), + 0x300E0005: ('TM', '1', "Review Time", '', 'ReviewTime'), + 0x300E0008: ('PN', '1', "Reviewer Name", '', 'ReviewerName'), + 0x40000010: ('LT', '1', "Arbitrary", 'Retired', 'Arbitrary'), + 0x40004000: ('LT', '1', "Text Comments", 'Retired', 'TextComments'), + 0x40080040: ('SH', '1', "Results ID", 'Retired', 'ResultsID'), + 0x40080042: ('LO', '1', "Results ID Issuer", 'Retired', 'ResultsIDIssuer'), + 0x40080050: ('SQ', '1', "Referenced Interpretation Sequence", 'Retired', 'ReferencedInterpretationSequence'), + 0x400800FF: ('CS', '1', "Report Production Status (Trial)", 'Retired', 'ReportProductionStatusTrial'), + 0x40080100: ('DA', '1', "Interpretation Recorded Date", 'Retired', 'InterpretationRecordedDate'), + 0x40080101: ('TM', '1', "Interpretation Recorded Time", 'Retired', 'InterpretationRecordedTime'), + 0x40080102: ('PN', '1', "Interpretation Recorder", 'Retired', 'InterpretationRecorder'), + 0x40080103: ('LO', '1', "Reference to Recorded Sound", 'Retired', 'ReferenceToRecordedSound'), + 0x40080108: ('DA', '1', "Interpretation Transcription Date", 'Retired', 'InterpretationTranscriptionDate'), + 0x40080109: ('TM', '1', "Interpretation Transcription Time", 'Retired', 'InterpretationTranscriptionTime'), + 0x4008010A: ('PN', '1', "Interpretation Transcriber", 'Retired', 'InterpretationTranscriber'), + 0x4008010B: ('ST', '1', "Interpretation Text", 'Retired', 'InterpretationText'), + 0x4008010C: ('PN', '1', "Interpretation Author", 'Retired', 'InterpretationAuthor'), + 0x40080111: ('SQ', '1', "Interpretation Approver Sequence", 'Retired', 'InterpretationApproverSequence'), + 0x40080112: ('DA', '1', "Interpretation Approval Date", 'Retired', 'InterpretationApprovalDate'), + 0x40080113: ('TM', '1', "Interpretation Approval Time", 'Retired', 'InterpretationApprovalTime'), + 0x40080114: ('PN', '1', "Physician Approving Interpretation", 'Retired', 'PhysicianApprovingInterpretation'), + 0x40080115: ('LT', '1', "Interpretation Diagnosis Description", 'Retired', 'InterpretationDiagnosisDescription'), + 0x40080117: ('SQ', '1', "Interpretation Diagnosis Code Sequence", 'Retired', 'InterpretationDiagnosisCodeSequence'), + 0x40080118: ('SQ', '1', "Results Distribution List Sequence", 'Retired', 'ResultsDistributionListSequence'), + 0x40080119: ('PN', '1', "Distribution Name", 'Retired', 'DistributionName'), + 0x4008011A: ('LO', '1', "Distribution Address", 'Retired', 'DistributionAddress'), + 0x40080200: ('SH', '1', "Interpretation ID", 'Retired', 'InterpretationID'), + 0x40080202: ('LO', '1', "Interpretation ID Issuer", 'Retired', 'InterpretationIDIssuer'), + 0x40080210: ('CS', '1', "Interpretation Type ID", 'Retired', 'InterpretationTypeID'), + 0x40080212: ('CS', '1', "Interpretation Status ID", 'Retired', 'InterpretationStatusID'), + 0x40080300: ('ST', '1', "Impressions", 'Retired', 'Impressions'), + 0x40084000: ('ST', '1', "Results Comments", 'Retired', 'ResultsComments'), + 0x40100001: ('CS', '1', "Low Energy Detectors", '', 'LowEnergyDetectors'), + 0x40100002: ('CS', '1', "High Energy Detectors", '', 'HighEnergyDetectors'), + 0x40100004: ('SQ', '1', "Detector Geometry Sequence", '', 'DetectorGeometrySequence'), + 0x40101001: ('SQ', '1', "Threat ROI Voxel Sequence", '', 'ThreatROIVoxelSequence'), + 0x40101004: ('FL', '3', "Threat ROI Base", '', 'ThreatROIBase'), + 0x40101005: ('FL', '3', "Threat ROI Extents", '', 'ThreatROIExtents'), + 0x40101006: ('OB', '1', "Threat ROI Bitmap", '', 'ThreatROIBitmap'), + 0x40101007: ('SH', '1', "Route Segment ID", '', 'RouteSegmentID'), + 0x40101008: ('CS', '1', "Gantry Type", '', 'GantryType'), + 0x40101009: ('CS', '1', "OOI Owner Type", '', 'OOIOwnerType'), + 0x4010100A: ('SQ', '1', "Route Segment Sequence", '', 'RouteSegmentSequence'), + 0x40101010: ('US', '1', "Potential Threat Object ID", '', 'PotentialThreatObjectID'), + 0x40101011: ('SQ', '1', "Threat Sequence", '', 'ThreatSequence'), + 0x40101012: ('CS', '1', "Threat Category", '', 'ThreatCategory'), + 0x40101013: ('LT', '1', "Threat Category Description", '', 'ThreatCategoryDescription'), + 0x40101014: ('CS', '1', "ATD Ability Assessment", '', 'ATDAbilityAssessment'), + 0x40101015: ('CS', '1', "ATD Assessment Flag", '', 'ATDAssessmentFlag'), + 0x40101016: ('FL', '1', "ATD Assessment Probability", '', 'ATDAssessmentProbability'), + 0x40101017: ('FL', '1', "Mass", '', 'Mass'), + 0x40101018: ('FL', '1', "Density", '', 'Density'), + 0x40101019: ('FL', '1', "Z Effective", '', 'ZEffective'), + 0x4010101A: ('SH', '1', "Boarding Pass ID", '', 'BoardingPassID'), + 0x4010101B: ('FL', '3', "Center of Mass", '', 'CenterOfMass'), + 0x4010101C: ('FL', '3', "Center of PTO", '', 'CenterOfPTO'), + 0x4010101D: ('FL', '6-n', "Bounding Polygon", '', 'BoundingPolygon'), + 0x4010101E: ('SH', '1', "Route Segment Start Location ID", '', 'RouteSegmentStartLocationID'), + 0x4010101F: ('SH', '1', "Route Segment End Location ID", '', 'RouteSegmentEndLocationID'), + 0x40101020: ('CS', '1', "Route Segment Location ID Type", '', 'RouteSegmentLocationIDType'), + 0x40101021: ('CS', '1-n', "Abort Reason", '', 'AbortReason'), + 0x40101023: ('FL', '1', "Volume of PTO", '', 'VolumeOfPTO'), + 0x40101024: ('CS', '1', "Abort Flag", '', 'AbortFlag'), + 0x40101025: ('DT', '1', "Route Segment Start Time", '', 'RouteSegmentStartTime'), + 0x40101026: ('DT', '1', "Route Segment End Time", '', 'RouteSegmentEndTime'), + 0x40101027: ('CS', '1', "TDR Type", '', 'TDRType'), + 0x40101028: ('CS', '1', "International Route Segment", '', 'InternationalRouteSegment'), + 0x40101029: ('LO', '1-n', "Threat Detection Algorithm and Version", '', 'ThreatDetectionAlgorithmandVersion'), + 0x4010102A: ('SH', '1', "Assigned Location", '', 'AssignedLocation'), + 0x4010102B: ('DT', '1', "Alarm Decision Time", '', 'AlarmDecisionTime'), + 0x40101031: ('CS', '1', "Alarm Decision", '', 'AlarmDecision'), + 0x40101033: ('US', '1', "Number of Total Objects", '', 'NumberOfTotalObjects'), + 0x40101034: ('US', '1', "Number of Alarm Objects", '', 'NumberOfAlarmObjects'), + 0x40101037: ('SQ', '1', "PTO Representation Sequence", '', 'PTORepresentationSequence'), + 0x40101038: ('SQ', '1', "ATD Assessment Sequence", '', 'ATDAssessmentSequence'), + 0x40101039: ('CS', '1', "TIP Type", '', 'TIPType'), + 0x4010103A: ('CS', '1', "DICOS Version", '', 'DICOSVersion'), + 0x40101041: ('DT', '1', "OOI Owner Creation Time", '', 'OOIOwnerCreationTime'), + 0x40101042: ('CS', '1', "OOI Type", '', 'OOIType'), + 0x40101043: ('FL', '3', "OOI Size", '', 'OOISize'), + 0x40101044: ('CS', '1', "Acquisition Status", '', 'AcquisitionStatus'), + 0x40101045: ('SQ', '1', "Basis Materials Code Sequence", '', 'BasisMaterialsCodeSequence'), + 0x40101046: ('CS', '1', "Phantom Type", '', 'PhantomType'), + 0x40101047: ('SQ', '1', "OOI Owner Sequence", '', 'OOIOwnerSequence'), + 0x40101048: ('CS', '1', "Scan Type", '', 'ScanType'), + 0x40101051: ('LO', '1', "Itinerary ID", '', 'ItineraryID'), + 0x40101052: ('SH', '1', "Itinerary ID Type", '', 'ItineraryIDType'), + 0x40101053: ('LO', '1', "Itinerary ID Assigning Authority", '', 'ItineraryIDAssigningAuthority'), + 0x40101054: ('SH', '1', "Route ID", '', 'RouteID'), + 0x40101055: ('SH', '1', "Route ID Assigning Authority", '', 'RouteIDAssigningAuthority'), + 0x40101056: ('CS', '1', "Inbound Arrival Type", '', 'InboundArrivalType'), + 0x40101058: ('SH', '1', "Carrier ID", '', 'CarrierID'), + 0x40101059: ('CS', '1', "Carrier ID Assigning Authority", '', 'CarrierIDAssigningAuthority'), + 0x40101060: ('FL', '3', "Source Orientation", '', 'SourceOrientation'), + 0x40101061: ('FL', '3', "Source Position", '', 'SourcePosition'), + 0x40101062: ('FL', '1', "Belt Height", '', 'BeltHeight'), + 0x40101064: ('SQ', '1', "Algorithm Routing Code Sequence", '', 'AlgorithmRoutingCodeSequence'), + 0x40101067: ('CS', '1', "Transport Classification", '', 'TransportClassification'), + 0x40101068: ('LT', '1', "OOI Type Descriptor", '', 'OOITypeDescriptor'), + 0x40101069: ('FL', '1', "Total Processing Time", '', 'TotalProcessingTime'), + 0x4010106C: ('OB', '1', "Detector Calibration Data", '', 'DetectorCalibrationData'), + 0x4010106D: ('CS', '1', "Additional Screening Performed", '', 'AdditionalScreeningPerformed'), + 0x4010106E: ('CS', '1', "Additional Inspection Selection Criteria", '', 'AdditionalInspectionSelectionCriteria'), + 0x4010106F: ('SQ', '1', "Additional Inspection Method Sequence", '', 'AdditionalInspectionMethodSequence'), + 0x40101070: ('CS', '1', "AIT Device Type", '', 'AITDeviceType'), + 0x40101071: ('SQ', '1', "QR Measurements Sequence", '', 'QRMeasurementsSequence'), + 0x40101072: ('SQ', '1', "Target Material Sequence", '', 'TargetMaterialSequence'), + 0x40101073: ('FD', '1', "SNR Threshold", '', 'SNRThreshold'), + 0x40101075: ('DS', '1', "Image Scale Representation", '', 'ImageScaleRepresentation'), + 0x40101076: ('SQ', '1', "Referenced PTO Sequence", '', 'ReferencedPTOSequence'), + 0x40101077: ('SQ', '1', "Referenced TDR Instance Sequence", '', 'ReferencedTDRInstanceSequence'), + 0x40101078: ('ST', '1', "PTO Location Description", '', 'PTOLocationDescription'), + 0x40101079: ('SQ', '1', "Anomaly Locator Indicator Sequence", '', 'AnomalyLocatorIndicatorSequence'), + 0x4010107A: ('FL', '3', "Anomaly Locator Indicator", '', 'AnomalyLocatorIndicator'), + 0x4010107B: ('SQ', '1', "PTO Region Sequence", '', 'PTORegionSequence'), + 0x4010107C: ('CS', '1', "Inspection Selection Criteria", '', 'InspectionSelectionCriteria'), + 0x4010107D: ('SQ', '1', "Secondary Inspection Method Sequence", '', 'SecondaryInspectionMethodSequence'), + 0x4010107E: ('DS', '6', "PRCS to RCS Orientation", '', 'PRCSToRCSOrientation'), + 0x4FFE0001: ('SQ', '1', "MAC Parameters Sequence", '', 'MACParametersSequence'), + 0x52009229: ('SQ', '1', "Shared Functional Groups Sequence", '', 'SharedFunctionalGroupsSequence'), + 0x52009230: ('SQ', '1', "Per-frame Functional Groups Sequence", '', 'PerFrameFunctionalGroupsSequence'), + 0x54000100: ('SQ', '1', "Waveform Sequence", '', 'WaveformSequence'), + 0x54000110: ('OB or OW', '1', "Channel Minimum Value", '', 'ChannelMinimumValue'), + 0x54000112: ('OB or OW', '1', "Channel Maximum Value", '', 'ChannelMaximumValue'), + 0x54001004: ('US', '1', "Waveform Bits Allocated", '', 'WaveformBitsAllocated'), + 0x54001006: ('CS', '1', "Waveform Sample Interpretation", '', 'WaveformSampleInterpretation'), + 0x5400100A: ('OB or OW', '1', "Waveform Padding Value", '', 'WaveformPaddingValue'), + 0x54001010: ('OB or OW', '1', "Waveform Data", '', 'WaveformData'), + 0x56000010: ('OF', '1', "First Order Phase Correction Angle", '', 'FirstOrderPhaseCorrectionAngle'), + 0x56000020: ('OF', '1', "Spectroscopy Data", '', 'SpectroscopyData'), + 0x7FE00010: ('OB or OW', '1', "Pixel Data", '', 'PixelData'), + 0x7FE00020: ('OW', '1', "Coefficients SDVN", 'Retired', 'CoefficientsSDVN'), + 0x7FE00030: ('OW', '1', "Coefficients SDHN", 'Retired', 'CoefficientsSDHN'), + 0x7FE00040: ('OW', '1', "Coefficients SDDN", 'Retired', 'CoefficientsSDDN'), + 0xFFFAFFFA: ('SQ', '1', "Digital Signatures Sequence", '', 'DigitalSignaturesSequence'), + 0xFFFCFFFC: ('OB', '1', "Data Set Trailing Padding", '', 'DataSetTrailingPadding'), + 0xFFFEE000: ('NONE', '1', "Item", '', 'Item'), + 0xFFFEE00D: ('NONE', '1', "Item Delimitation Item", '', 'ItemDelimitationItem'), + 0xFFFEE0DD: ('NONE', '1', "Sequence Delimitation Item", '', 'SequenceDelimitationItem') +} + +RepeatersDictionary = { + '002031xx': ('CS', '1-n', "Source Image IDs", 'Retired', 'SourceImageIDs'), + '002804x0': ('US', '1', "Rows For Nth Order Coefficients", 'Retired', 'RowsForNthOrderCoefficients'), + '002804x1': ('US', '1', "Columns For Nth Order Coefficients", 'Retired', 'ColumnsForNthOrderCoefficients'), + '002804x2': ('LO', '1-n', "Coefficient Coding", 'Retired', 'CoefficientCoding'), + '002804x3': ('AT', '1-n', "Coefficient Coding Pointers", 'Retired', 'CoefficientCodingPointers'), + '002808x0': ('CS', '1-n', "Code Label", 'Retired', 'CodeLabel'), + '002808x2': ('US', '1', "Number of Tables", 'Retired', 'NumberOfTables'), + '002808x3': ('AT', '1-n', "Code Table Location", 'Retired', 'CodeTableLocation'), + '002808x4': ('US', '1', "Bits For Code Word", 'Retired', 'BitsForCodeWord'), + '002808x8': ('AT', '1-n', "Image Data Location", 'Retired', 'ImageDataLocation'), + '1000xxx0': ('US', '3', "Escape Triplet", 'Retired', 'EscapeTriplet'), + '1000xxx1': ('US', '3', "Run Length Triplet", 'Retired', 'RunLengthTriplet'), + '1000xxx2': ('US', '1', "Huffman Table Size", 'Retired', 'HuffmanTableSize'), + '1000xxx3': ('US', '3', "Huffman Table Triplet", 'Retired', 'HuffmanTableTriplet'), + '1000xxx4': ('US', '1', "Shift Table Size", 'Retired', 'ShiftTableSize'), + '1000xxx5': ('US', '3', "Shift Table Triplet", 'Retired', 'ShiftTableTriplet'), + '1010xxxx': ('US', '1-n', "Zonal Map", 'Retired', 'ZonalMap'), + '50xx0005': ('US', '1', "Curve Dimensions", 'Retired', 'CurveDimensions'), + '50xx0010': ('US', '1', "Number of Points", 'Retired', 'NumberOfPoints'), + '50xx0020': ('CS', '1', "Type of Data", 'Retired', 'TypeOfData'), + '50xx0022': ('LO', '1', "Curve Description", 'Retired', 'CurveDescription'), + '50xx0030': ('SH', '1-n', "Axis Units", 'Retired', 'AxisUnits'), + '50xx0040': ('SH', '1-n', "Axis Labels", 'Retired', 'AxisLabels'), + '50xx0103': ('US', '1', "Data Value Representation", 'Retired', 'DataValueRepresentation'), + '50xx0104': ('US', '1-n', "Minimum Coordinate Value", 'Retired', 'MinimumCoordinateValue'), + '50xx0105': ('US', '1-n', "Maximum Coordinate Value", 'Retired', 'MaximumCoordinateValue'), + '50xx0106': ('SH', '1-n', "Curve Range", 'Retired', 'CurveRange'), + '50xx0110': ('US', '1-n', "Curve Data Descriptor", 'Retired', 'CurveDataDescriptor'), + '50xx0112': ('US', '1-n', "Coordinate Start Value", 'Retired', 'CoordinateStartValue'), + '50xx0114': ('US', '1-n', "Coordinate Step Value", 'Retired', 'CoordinateStepValue'), + '50xx1001': ('CS', '1', "Curve Activation Layer", 'Retired', 'CurveActivationLayer'), + '50xx2000': ('US', '1', "Audio Type", 'Retired', 'AudioType'), + '50xx2002': ('US', '1', "Audio Sample Format", 'Retired', 'AudioSampleFormat'), + '50xx2004': ('US', '1', "Number of Channels", 'Retired', 'NumberOfChannels'), + '50xx2006': ('UL', '1', "Number of Samples", 'Retired', 'NumberOfSamples'), + '50xx2008': ('UL', '1', "Sample Rate", 'Retired', 'SampleRate'), + '50xx200A': ('UL', '1', "Total Time", 'Retired', 'TotalTime'), + '50xx200C': ('OB or OW', '1', "Audio Sample Data", 'Retired', 'AudioSampleData'), + '50xx200E': ('LT', '1', "Audio Comments", 'Retired', 'AudioComments'), + '50xx2500': ('LO', '1', "Curve Label", 'Retired', 'CurveLabel'), + '50xx2600': ('SQ', '1', "Curve Referenced Overlay Sequence", 'Retired', 'CurveReferencedOverlaySequence'), + '50xx2610': ('US', '1', "Curve Referenced Overlay Group", 'Retired', 'CurveReferencedOverlayGroup'), + '50xx3000': ('OB or OW', '1', "Curve Data", 'Retired', 'CurveData'), + '60xx0010': ('US', '1', "Overlay Rows", '', 'OverlayRows'), + '60xx0011': ('US', '1', "Overlay Columns", '', 'OverlayColumns'), + '60xx0012': ('US', '1', "Overlay Planes", 'Retired', 'OverlayPlanes'), + '60xx0015': ('IS', '1', "Number of Frames in Overlay", '', 'NumberOfFramesInOverlay'), + '60xx0022': ('LO', '1', "Overlay Description", '', 'OverlayDescription'), + '60xx0040': ('CS', '1', "Overlay Type", '', 'OverlayType'), + '60xx0045': ('LO', '1', "Overlay Subtype", '', 'OverlaySubtype'), + '60xx0050': ('SS', '2', "Overlay Origin", '', 'OverlayOrigin'), + '60xx0051': ('US', '1', "Image Frame Origin", '', 'ImageFrameOrigin'), + '60xx0052': ('US', '1', "Overlay Plane Origin", 'Retired', 'OverlayPlaneOrigin'), + '60xx0060': ('CS', '1', "Overlay Compression Code", 'Retired', 'OverlayCompressionCode'), + '60xx0061': ('SH', '1', "Overlay Compression Originator", 'Retired', 'OverlayCompressionOriginator'), + '60xx0062': ('SH', '1', "Overlay Compression Label", 'Retired', 'OverlayCompressionLabel'), + '60xx0063': ('CS', '1', "Overlay Compression Description", 'Retired', 'OverlayCompressionDescription'), + '60xx0066': ('AT', '1-n', "Overlay Compression Step Pointers", 'Retired', 'OverlayCompressionStepPointers'), + '60xx0068': ('US', '1', "Overlay Repeat Interval", 'Retired', 'OverlayRepeatInterval'), + '60xx0069': ('US', '1', "Overlay Bits Grouped", 'Retired', 'OverlayBitsGrouped'), + '60xx0100': ('US', '1', "Overlay Bits Allocated", '', 'OverlayBitsAllocated'), + '60xx0102': ('US', '1', "Overlay Bit Position", '', 'OverlayBitPosition'), + '60xx0110': ('CS', '1', "Overlay Format", 'Retired', 'OverlayFormat'), + '60xx0200': ('US', '1', "Overlay Location", 'Retired', 'OverlayLocation'), + '60xx0800': ('CS', '1-n', "Overlay Code Label", 'Retired', 'OverlayCodeLabel'), + '60xx0802': ('US', '1', "Overlay Number of Tables", 'Retired', 'OverlayNumberOfTables'), + '60xx0803': ('AT', '1-n', "Overlay Code Table Location", 'Retired', 'OverlayCodeTableLocation'), + '60xx0804': ('US', '1', "Overlay Bits For Code Word", 'Retired', 'OverlayBitsForCodeWord'), + '60xx1001': ('CS', '1', "Overlay Activation Layer", '', 'OverlayActivationLayer'), + '60xx1100': ('US', '1', "Overlay Descriptor - Gray", 'Retired', 'OverlayDescriptorGray'), + '60xx1101': ('US', '1', "Overlay Descriptor - Red", 'Retired', 'OverlayDescriptorRed'), + '60xx1102': ('US', '1', "Overlay Descriptor - Green", 'Retired', 'OverlayDescriptorGreen'), + '60xx1103': ('US', '1', "Overlay Descriptor - Blue", 'Retired', 'OverlayDescriptorBlue'), + '60xx1200': ('US', '1-n', "Overlays - Gray", 'Retired', 'OverlaysGray'), + '60xx1201': ('US', '1-n', "Overlays - Red", 'Retired', 'OverlaysRed'), + '60xx1202': ('US', '1-n', "Overlays - Green", 'Retired', 'OverlaysGreen'), + '60xx1203': ('US', '1-n', "Overlays - Blue", 'Retired', 'OverlaysBlue'), + '60xx1301': ('IS', '1', "ROI Area", '', 'ROIArea'), + '60xx1302': ('DS', '1', "ROI Mean", '', 'ROIMean'), + '60xx1303': ('DS', '1', "ROI Standard Deviation", '', 'ROIStandardDeviation'), + '60xx1500': ('LO', '1', "Overlay Label", '', 'OverlayLabel'), + '60xx3000': ('OB or OW', '1', "Overlay Data", '', 'OverlayData'), + '60xx4000': ('LT', '1', "Overlay Comments", 'Retired', 'OverlayComments'), + '7Fxx0010': ('OB or OW', '1', "Variable Pixel Data", 'Retired', 'VariablePixelData'), + '7Fxx0011': ('US', '1', "Variable Next Data Group", 'Retired', 'VariableNextDataGroup'), + '7Fxx0020': ('OW', '1', "Variable Coefficients SDVN", 'Retired', 'VariableCoefficientsSDVN'), + '7Fxx0030': ('OW', '1', "Variable Coefficients SDHN", 'Retired', 'VariableCoefficientsSDHN'), + '7Fxx0040': ('OW', '1', "Variable Coefficients SDDN", 'Retired', 'VariableCoefficientsSDDN') +} diff -Nru pydicom-0.9.8/source/dicom/dicomdir.py pydicom-0.9.9/source/dicom/dicomdir.py --- pydicom-0.9.8/source/dicom/dicomdir.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/dicomdir.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,88 @@ +# dicomdir.py +"""Module for DicomDir class""" +# +# Copyright (c) 2013 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + +from dicom.errors import InvalidDicomError +from dicom.dataset import FileDataset + + +class DicomDir(FileDataset): + """Hold a DICOMDIR dataset read from file. + + Derived from FileDataset, but additional methods are available, + specific to the Directory structure + """ + def __init__(self, filename_or_obj, dataset, preamble=None, file_meta=None, + is_implicit_VR=True, is_little_endian=True): + """Initialize a DICOMDIR dataset read from a DICOM file + Carries forward all the initialization from FileDataset class + + :param filename: full path and filename to the file. Use None if is a BytesIO. + :param dataset: some form of dictionary, usually a Dataset from read_dataset() + :param preamble: the 128-byte DICOM preamble + :param file_meta: the file meta info dataset, as returned by _read_file_meta, + or an empty dataset if no file meta information is in the file + :param is_implicit_VR: True if implicit VR transfer syntax used; False if explicit VR. Default is True. + :param is_little_endian: True if little-endian transfer syntax used; False if big-endian. Default is True. + """ + # Usually this class is created through filereader.read_partial, + # and it checks class SOP, but in case of direct creation, + # check here also + if file_meta: + class_uid = file_meta.MediaStorageSOPClassUID + if not class_uid == "Media Storage Directory Storage": + print class_uid, type(class_uid) + msg = "SOP Class is not Media Storage Directory (DICOMDIR)" + raise InvalidDicomError(msg) + FileDataset.__init__(self, filename_or_obj, dataset, + preamble, file_meta, + is_implicit_VR=True, is_little_endian=True) + self.parse_records() + + def parse_records(self): + """Build the hierarchy of given directory records, and structure + into Patient, Studies, Series, Images hierarchy. + + This is intended for initial read of file only, + it will not reorganize correctly if records are changed. + + :return: None + """ + # Define a helper function for organizing the records + def get_siblings(record, map_offset_to_record): + """Return a list of all siblings of the given directory record, + including itself. + """ + sibling_list = [record] + current_record = record + while current_record.OffsetOfTheNextDirectoryRecord: + offset_of_next = current_record.OffsetoftheNextDirectoryRecord + sibling = map_offset_to_record[offset_of_next] + sibling_list.append(sibling) + current_record = sibling + return sibling_list + + # Build the mapping from file offsets to records + records = self.DirectoryRecordSequence + map_offset_to_record = {} + for record in records: + offset = record.seq_item_tell + map_offset_to_record[offset] = record + # logging.debug("Record offsets: " + map_offset_to_record.keys()) + + # Find the children of each record + for record in records: + child_offset = record.OffsetOfReferencedLowerLevelDirectoryEntity + if child_offset: + child = map_offset_to_record[child_offset] + record.children = get_siblings(child, map_offset_to_record) + else: + record.children = [] + + # Find the top-level records : siblings of the first record + self.patient_records = get_siblings(records[0], map_offset_to_record) diff -Nru pydicom-0.9.8/source/dicom/doc/index.html pydicom-0.9.9/source/dicom/doc/index.html --- pydicom-0.9.8/source/dicom/doc/index.html 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/doc/index.html 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,12 @@ + + +Pydicom - Pure Python package for DICOM files + + +

Pydicom - Pure Python package for DICOM files

+

+Documentation for pydicom is available at the +pydicom googlecode website +

+ + \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/encaps.py pydicom-0.9.9/source/dicom/encaps.py --- pydicom-0.9.8/source/dicom/encaps.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/encaps.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,72 @@ +# encaps.py +"""Routines for working with encapsulated (compressed) data + +""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +# Encapsulated Pixel Data -- 3.5-2008 A.4 +# Encapsulated Pixel data is in a number of Items (start with Item tag (0xFFFE,E000) and ending ultimately with SQ delimiter and Item Length field of 0 (no value), +# just like SQ of undefined length, but here Item must have explicit length. + +# PixelData length is Undefined Length if encapsulated +# First item is an Offset Table. It can have 0 length and no value, or it can have a table of US pointers to first byte of the Item tag starting each *Frame*, +# where 0 of pointer is at first Item tag following the Offset table +# If a single frame, it may be 0 length/no value, or it may have a single pointer (0). +import logging +logger = logging.getLogger('pydicom') + +from dicom.filebase import DicomBytesIO +from dicom.tag import ItemTag, SequenceDelimiterTag + + +def defragment_data(data): + """Read encapsulated data and return one continuous string + + data -- string of encapsulated data, typically dataset.PixelData + Return all fragments concatenated together as a byte string + + If PixelData has multiple frames, then should separate out before calling this routine. + """ + + # Convert data into a memory-mapped file + fp = DicomBytesIO(data) + fp.is_little_endian = True # DICOM standard requires this + BasicOffsetTable = read_item(fp) # NOQA + seq = [] + while True: + item = read_item(fp) + if not item: # None is returned if get to Sequence Delimiter + break + seq.append(item) + + # XXX should + return "".join(seq) + + +# read_item modeled after filereader.ReadSequenceItem +def read_item(fp): + """Read and return a single Item in the fragmented data stream""" + try: + tag = fp.read_tag() + except EOFError: # already read delimiter before passing data here, so should just run out + return None + if tag == SequenceDelimiterTag: # No more items, time for sequence to stop reading + length = fp.read_UL() + logger.debug("%04x: Sequence Delimiter, length 0x%x", fp.tell() - 8, length) + if length != 0: + logger.warning("Expected 0x00000000 after delimiter, found 0x%x, at data position 0x%x", length, fp.tell() - 4) + return None + if tag != ItemTag: + logger.warning("Expected Item with tag %s at data position 0x%x", ItemTag, fp.tell() - 4) + length = fp.read_UL() + else: + length = fp.read_UL() + logger.debug("%04x: Item, length 0x%x", fp.tell() - 8, length) + + if length == 0xFFFFFFFFL: + raise ValueError("Encapsulated data fragment had Undefined Length at data position 0x%x" % fp.tell() - 4) + item_data = fp.read(length) + return item_data diff -Nru pydicom-0.9.8/source/dicom/errors.py pydicom-0.9.9/source/dicom/errors.py --- pydicom-0.9.8/source/dicom/errors.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/errors.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,24 @@ +# errors.py +"""Module for pydicom exception classes""" +# +# Copyright (c) 2013 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + + +class InvalidDicomError(Exception): + """Exception that is raised when the the file does not seem + to be a valid dicom file, usually when the four characters + "DICM" are not present at position 128 in the file. + (According to the dicom specification, each dicom file should + have this.) + + To force reading the file (because maybe it is a dicom file without + a header), use read_file(..., force=True). + """ + def __init__(self, *args): + if not args: + args = ('The specified file is not a valid DICOM file.',) + Exception.__init__(self, *args) diff -Nru pydicom-0.9.8/source/dicom/examples/add_dict_entries.py pydicom-0.9.9/source/dicom/examples/add_dict_entries.py --- pydicom-0.9.8/source/dicom/examples/add_dict_entries.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/add_dict_entries.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,40 @@ +# add_dict_entries.py +"""Example script to add dictionary items to the 'standard' DICOM +dictionary dynamically + +Not a recommended solution in general, but useful as a demonstration +or for in-house programs only, or to get around elements missing +from pydicom's DICOM dictionaries. + +For private items, the proper way would be similar to ones in _private_dict.py, +where a block is reserved etc as specified in the DICOM standards. +""" + +# D. Mason, 2013-01 +from dicom.datadict import DicomDictionary, NameDict, CleanName +from dicom.dataset import Dataset + +# Define items as (VR, VM, description, is_retired flag, keyword) +# Leave is_retired flag blank. +new_dict_items = { + 0x10011001: ('UL', '1', "Test One", '', 'TestOne'), + 0x10011002: ('OB', '1', "Test Two", '', 'TestTwo'), + 0x10011003: ('UI', '1', "Test Three", '', 'TestThree'), +} + +# Update the dictionary itself +DicomDictionary.update(new_dict_items) + +# Update the reverse mapping from name to tag +new_names_dict = dict([(CleanName(tag), tag) for tag in + new_dict_items]) +NameDict.update(new_names_dict) + +# Test that it is working +ds = Dataset() # or could get one from read_file, etc + +ds.TestOne = 42 +ds.TestTwo = '12345' +ds.TestThree = '1.2.3.4.5' + +print ds.top() diff -Nru pydicom-0.9.8/source/dicom/examples/anonymize.py pydicom-0.9.9/source/dicom/examples/anonymize.py --- pydicom-0.9.8/source/dicom/examples/anonymize.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/anonymize.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,109 @@ +# anonymize.py +"""Read a dicom file (or directory of files), partially "anonymize" it (them), +by replacing Person names, patient id, optionally remove curves +and private tags, and write result to a new file (directory) +This is an example only; use only as a starting point. +""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# Use at your own risk!! +# Many more items need to be addressed for proper de-identifying DICOM data. +# In particular, note that pixel data could have confidential data "burned in" +# Annex E of PS3.15-2011 DICOM standard document details what must be done to +# fully de-identify DICOM data + +from __future__ import print_function + +usage = """ +Usage: +python anonymize.py dicomfile.dcm outputfile.dcm +OR +python anonymize.py originals_directory anonymized_directory + +Note: Use at your own risk. Does not fully de-identify the DICOM data as per +the DICOM standard, e.g in Annex E of PS3.15-2011. +""" + +import os +import os.path +import dicom + + +def anonymize(filename, output_filename, new_person_name="anonymous", + new_patient_id="id", remove_curves=True, remove_private_tags=True): + """Replace data element values to partly anonymize a DICOM file. + Note: completely anonymizing a DICOM file is very complicated; there + are many things this example code does not address. USE AT YOUR OWN RISK. + """ + + # Define call-back functions for the dataset.walk() function + def PN_callback(ds, data_element): + """Called from the dataset "walk" recursive function for all data elements.""" + if data_element.VR == "PN": + data_element.value = new_person_name + + def curves_callback(ds, data_element): + """Called from the dataset "walk" recursive function for all data elements.""" + if data_element.tag.group & 0xFF00 == 0x5000: + del ds[data_element.tag] + + # Load the current dicom file to 'anonymize' + dataset = dicom.read_file(filename) + + # Remove patient name and any other person names + dataset.walk(PN_callback) + + # Change ID + dataset.PatientID = new_patient_id + + # Remove data elements (should only do so if DICOM type 3 optional) + # Use general loop so easy to add more later + # Could also have done: del ds.OtherPatientIDs, etc. + for name in ['OtherPatientIDs', 'OtherPatientIDsSequence']: + if name in dataset: + delattr(dataset, name) + + # Same as above but for blanking data elements that are type 2. + for name in ['PatientBirthDate']: + if name in dataset: + dataset.data_element(name).value = '' + + # Remove private tags if function argument says to do so. Same for curves + if remove_private_tags: + dataset.remove_private_tags() + if remove_curves: + dataset.walk(curves_callback) + + # write the 'anonymized' DICOM out under the new filename + dataset.save_as(output_filename) + +# Can run as a script: +if __name__ == "__main__": + import sys + if len(sys.argv) != 3: + print(usage) + sys.exit() + arg1, arg2 = sys.argv[1:] + + if os.path.isdir(arg1): + in_dir = arg1 + out_dir = arg2 + if os.path.exists(out_dir): + if not os.path.isdir(out_dir): + raise IOError("Input is directory; output name exists but is not a directory") + else: # out_dir does not exist; create it. + os.makedirs(out_dir) + + filenames = os.listdir(in_dir) + for filename in filenames: + if not os.path.isdir(os.path.join(in_dir, filename)): + print(filename + "...", end='') + anonymize(os.path.join(in_dir, filename), os.path.join(out_dir, filename)) + print("done\r") + else: # first arg not a directory, assume two files given + in_filename = arg1 + out_filename = arg2 + anonymize(in_filename, out_filename) + print() diff -Nru pydicom-0.9.8/source/dicom/examples/DicomDiff.py pydicom-0.9.9/source/dicom/examples/DicomDiff.py --- pydicom-0.9.8/source/dicom/examples/DicomDiff.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/DicomDiff.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,46 @@ +# DicomDiff.py +"""Show the difference between two dicom files. +""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from __future__ import print_function + +usage = """ +Usage: +python DicomDiff.py file1 file2 + +Results printed in python difflib form - indicated by start of each line: +' ' blank means lines the same +'-' means in file1 but "removed" in file2 +'+' means not in file1, but "added" in file2 +('?' lines from difflib removed - no use here) +""" + +import sys +import dicom +import difflib + +# only used as a script +if len(sys.argv) != 3: + print(usage) + sys.exit() + +datasets = (dicom.read_file(sys.argv[1], force=True), + dicom.read_file(sys.argv[2], force=True)) + +# diflib compare functions require a list of lines, each terminated with newline character +# massage the string representation of each dicom dataset into this form: +rep = [] +for dataset in datasets: + lines = str(dataset).split("\n") + lines = [line + "\n" for line in lines] # add the newline to end + rep.append(lines) + + +diff = difflib.Differ() +for line in diff.compare(rep[0], rep[1]): + if line[0] != "?": + print(line) diff -Nru pydicom-0.9.8/source/dicom/examples/DicomInfo.py pydicom-0.9.9/source/dicom/examples/DicomInfo.py --- pydicom-0.9.8/source/dicom/examples/DicomInfo.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/DicomInfo.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,63 @@ +# DicomInfo.py +""" +Read a DICOM file and print some or all of its values. + +Usage: python DicomInfo.py imagefile [-v] + +-v (optional): Verbose mode, prints all DICOM data elements + +Without the -v option, a few of the most common dicom file +data elements are printed: some info about the patient and about +the image. + +""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from __future__ import print_function + +import sys +import dicom + +# check command line arguments make sense +if not 1 < len(sys.argv) < 4: + print(__doc__) + sys.exit() + +# read the file +filename = sys.argv[1] +dataset = dicom.read_file(filename) + +# Verbose mode: +if len(sys.argv) == 3: + if sys.argv[2] == "-v": # user asked for all info + print(dataset) + else: # unknown command argument + print(__doc__) + sys.exit() + +# Normal mode: +print() +print("Filename.........:", filename) +print("Storage type.....:", dataset.SOPClassUID) +print() + +pat_name = dataset.PatientName +display_name = pat_name.family_name + ", " + pat_name.given_name +print("Patient's name...:", display_name) +print("Patient id.......:", dataset.PatientID) +print("Modality.........:", dataset.Modality) +print("Study Date.......:", dataset.StudyDate) + +if 'PixelData' in dataset: + rows = int(dataset.Rows) + cols = int(dataset.Columns) + print("Image size.......: {rows:d} x {cols:d}, {size:d} bytes".format( + rows=rows, cols=cols, size=len(dataset.PixelData))) + if 'PixelSpacing' in dataset: + print("Pixel spacing....:", dataset.PixelSpacing) + +# use .get() if not sure the item exists, and want a default value if missing +print("Slice location...:", dataset.get('SliceLocation', "(missing)")) diff -Nru pydicom-0.9.8/source/dicom/examples/dicomtree.py pydicom-0.9.9/source/dicom/examples/dicomtree.py --- pydicom-0.9.8/source/dicom/examples/dicomtree.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/dicomtree.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,68 @@ +# dicomtree.py +"""Show a dicom file using a hierarchical tree in a graphical window""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +usage = "Usage: python dicomtree.py dicom_filename" + +import Tix + + +def RunTree(w, filename): + top = Tix.Frame(w, relief=Tix.RAISED, bd=1) + tree = Tix.Tree(top, options="hlist.columns 2") + tree.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.LEFT) + # print(tree.hlist.keys()) # use to see the available configure() options + tree.hlist.configure(bg='white', font='Courier 10', indent=30) + tree.hlist.configure(selectbackground='light yellow', gap=150) + + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + # box.add('ok', text='Ok', underline=0, command=w.destroy, width=6) + box.add('exit', text='Exit', underline=0, command=w.destroy, width=6) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + + show_file(filename, tree) + + +def show_file(filename, tree): + tree.hlist.add("root", text=filename) + ds = dicom.read_file(sys.argv[1]) + ds.decode() # change strings to unicode + recurse_tree(tree, ds, "root", False) + tree.autosetmode() + + +def recurse_tree(tree, dataset, parent, hide=False): + # order the dicom tags + for data_element in dataset: + node_id = parent + "." + hex(id(data_element)) + if isinstance(data_element.value, unicode): + tree.hlist.add(node_id, text=unicode(data_element)) + else: + tree.hlist.add(node_id, text=str(data_element)) + if hide: + tree.hlist.hide_entry(node_id) + if data_element.VR == "SQ": # a sequence + for i, dataset in enumerate(data_element.value): + item_id = node_id + "." + str(i + 1) + sq_item_description = data_element.name.replace(" Sequence", "") # XXX not i18n + item_text = "{0:s} {1:d}".format(sq_item_description, i + 1) + tree.hlist.add(item_id, text=item_text) + tree.hlist.hide_entry(item_id) + recurse_tree(tree, dataset, item_id, hide=True) + +if __name__ == '__main__': + import sys + import dicom + if len(sys.argv) != 2: + print("Please supply a dicom file name:\n") + print(usage) + sys.exit(-1) + root = Tix.Tk() + root.geometry("{0:d}x{1:d}+{2:d}+{3:d}".format(800, 600, 0, 0)) + + RunTree(root, sys.argv[1]) + root.mainloop() diff -Nru pydicom-0.9.8/source/dicom/examples/__init__.py pydicom-0.9.9/source/dicom/examples/__init__.py --- pydicom-0.9.8/source/dicom/examples/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/__init__.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,2 @@ +# __init__.py +# Mark the folder as a python package diff -Nru pydicom-0.9.8/source/dicom/examples/interactive_session_downsize_image.txt pydicom-0.9.9/source/dicom/examples/interactive_session_downsize_image.txt --- pydicom-0.9.8/source/dicom/examples/interactive_session_downsize_image.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/interactive_session_downsize_image.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,96 @@ +Below is an example interactive session using pydicom to downsize an MR image +from 512x512 to 64x64 (taking central section, not averaging pixels), +and write it back to a file for pydicom unit tests +NOTE: This example requires that the Numpy library be installed +for manipulation of pixel data +Note: "" is inserted here to match doctest testing of this code. +If used in interactive session, you will simply see a blank line at those places. +Test in python: Anaconda 2.0.1 (64-bit) +>>> import dicom +>>> ds = dicom.read_file("mr1_unc.dcm") +>>> data = ds.pixel_array +>>> data.shape +(512L, 512L) +>>> data2 = data[256-32:256+32, 128-32:128+32] +>>> data2.shape +(64L, 64L) +>>> ds.PixelData = data2.tostring() +>>> ds.Rows = 64 +>>> ds.Columns = 64 +>>> ds +(0008, 0008) Image Type CS: ['DERIVED', 'SECONDARY', 'OTHER'] +(0008, 0012) Instance Creation Date DA: '20040119' +(0008, 0013) Instance Creation Time TM: '073057' +(0008, 0014) Instance Creator UID UI: 1.3.6.1.4.1.5962.3 +(0008, 0016) SOP Class UID UI: MR Image Storage +(0008, 0018) SOP Instance UID UI: 1.3.6.1.4.1.5962.1.1.4.1.1.20040119072730.12322 +(0008, 0020) Study Date DA: '20040119' +(0008, 0021) Series Date DA: '' +(0008, 0022) Acquisition Date DA: '' +(0008, 0030) Study Time TM: '072730' +(0008, 0031) Series Time TM: '' +(0008, 0032) Acquisition Time TM: '' +(0008, 0050) Accession Number SH: '' +(0008, 0060) Modality CS: 'MR' +(0008, 0070) Manufacturer LO: 'TOSHIBA_MEC' +(0008, 0080) Institution Name LO: 'TOSHIBA' +(0008, 0090) Referring Physician's Name PN: '' +(0008, 0201) Timezone Offset From UTC SH: '-0500' +(0008, 1010) Station Name SH: '000000000' +(0008, 1060) Name of Physician(s) Reading Study PN: '----' +(0008, 1070) Operators' Name PN: '----' +(0008, 1090) Manufacturer's Model Name LO: 'MRT50H1' +(0010, 0010) Patient's Name PN: 'CompressedSamples^MR1' +(0010, 0020) Patient ID LO: '4MR1' +(0010, 0030) Patient's Birth Date DA: '' +(0010, 0040) Patient's Sex CS: 'F' +(0010, 1020) Patient's Size DS: '' +(0010, 1030) Patient's Weight DS: '80.0000' +(0018, 0010) Contrast/Bolus Agent LO: '' +(0018, 0020) Scanning Sequence CS: 'SE' +(0018, 0021) Sequence Variant CS: 'NONE' +(0018, 0022) Scan Options CS: '' +(0018, 0023) MR Acquisition Type CS: '3D' +(0018, 0050) Slice Thickness DS: '0.8000' +(0018, 0080) Repetition Time DS: '4000.0000' +(0018, 0081) Echo Time DS: '240.0000' +(0018, 0083) Number of Averages DS: '1.0000' +(0018, 0084) Imaging Frequency DS: '63.92433900' +(0018, 0085) Imaged Nucleus SH: 'H' +(0018, 0086) Echo Number(s) IS: '1' +(0018, 0091) Echo Train Length IS: '' +(0018, 1000) Device Serial Number LO: '-0000200' +(0018, 1020) Software Version(s) LO: 'V3.51*P25' +(0018, 1314) Flip Angle DS: '90' +(0018, 5100) Patient Position CS: 'HFS' +(0020, 000d) Study Instance UID UI: 1.3.6.1.4.1.5962.1.2.4.20040119072730.12322 +(0020, 000e) Series Instance UID UI: 1.3.6.1.4.1.5962.1.3.4.1.20040119072730.12322 +(0020, 0010) Study ID SH: '4MR1' +(0020, 0011) Series Number IS: '1' +(0020, 0012) Acquisition Number IS: '0' +(0020, 0013) Instance Number IS: '1' +(0020, 0032) Image Position (Patient) DS: ['-83.9063', '-91.2000', '6.6406'] +(0020, 0037) Image Orientation (Patient) DS: ['1.0000', '0.0000', '0.0000', '0.0000', '1.0000', '0.0000'] +(0020, 0052) Frame of Reference UID UI: 1.3.6.1.4.1.5962.1.4.4.1.20040119072730.12322 +(0020, 0060) Laterality CS: '' +(0020, 1040) Position Reference Indicator LO: '' +(0020, 1041) Slice Location DS: '0.0000' +(0020, 4000) Image Comments LT: 'Uncompressed' +(0028, 0002) Samples per Pixel US: 1 +(0028, 0004) Photometric Interpretation CS: 'MONOCHROME2' +(0028, 0010) Rows US: 64 +(0028, 0011) Columns US: 64 +(0028, 0030) Pixel Spacing DS: ['0.3125', '0.3125'] +(0028, 0100) Bits Allocated US: 16 +(0028, 0101) Bits Stored US: 16 +(0028, 0102) High Bit US: 15 +(0028, 0103) Pixel Representation US: 1 +(0028, 0106) Smallest Image Pixel Value SS: 0 +(0028, 0107) Largest Image Pixel Value SS: 4000 +(0028, 1050) Window Center DS: '600' +(0028, 1051) Window Width DS: '1600' +(7fe0, 0010) Pixel Data OW: Array of 8192 bytes +(fffc, fffc) Data Set Trailing Padding OB: Array of 126 bytes +>>> ds.save_as("MR_small_test.dcm") +>>> ds2 = dicom.read_file("MR_small_test.dcm") # read back to make sure is ok +>>> \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/examples/interactive_session.txt pydicom-0.9.9/source/dicom/examples/interactive_session.txt --- pydicom-0.9.8/source/dicom/examples/interactive_session.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/interactive_session.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,81 @@ +Below is the captured text of a session at an interactive python prompt. +I've tidied up some wrapped lines. pixel_array requires the Numpy library +Assumed is started in the 'testfiles' directory +Note: "" is inserted here to match doctest testing of this code. +If used in interactive session, you will simply see a blank line at those places. +>>> import dicom +>>> ct = dicom.read_file("CT_small.dcm") +>>> ct.remove_private_tags() +>>> ct.dir("image") +['ImageComments', 'ImageOrientationPatient', 'ImagePositionPatient', 'ImageType'] +>>> ct.ImageType +['ORIGINAL', 'PRIMARY', 'AXIAL'] +>>> ct.Rows, ct.Columns +(128, 128) +>>> len(ct.PixelData) +32768 +>>> ct.pixel_array +array([[175, 180, 166, ..., 203, 207, 216], + [186, 183, 157, ..., 181, 190, 239], + [184, 180, 171, ..., 152, 164, 235], + ..., + [906, 910, 923, ..., 922, 929, 927], + [914, 954, 938, ..., 942, 925, 905], + [959, 955, 916, ..., 911, 904, 909]], dtype=int16) +>>> plan = dicom.read_file("rtplan.dcm") +>>> len(plan.BeamSequence) +1 +>>> beam = plan.BeamSequence[0] +>>> len(beam.ControlPointSequence) +2 +>>> cp0, cp1 = beam.ControlPointSequence +>>> cp0.GantryAngle +'0.0' +>>> cp0.GantryAngle = '90.0' # use string for Decimal (VR of DS) +>>> cp0 +(300a, 0112) Control Point Index IS: '0' +(300a, 0114) Nominal Beam Energy DS: '6.00000000000000' +(300a, 0115) Dose Rate Set DS: '650.000000000000' +(300a, 011a) Beam Limiting Device Position Sequence 2 item(s) ---- + (300a, 00b8) RT Beam Limiting Device Type CS: 'X' + (300a, 011c) Leaf/Jaw Positions DS: ['-100.00000000000', '100.000000000000'] + --------- + (300a, 00b8) RT Beam Limiting Device Type CS: 'Y' + (300a, 011c) Leaf/Jaw Positions DS: ['-100.00000000000', '100.000000000000'] + --------- +(300a, 011e) Gantry Angle DS: '90.0' +(300a, 011f) Gantry Rotation Direction CS: 'NONE' +(300a, 0120) Beam Limiting Device Angle DS: '0.0' +(300a, 0121) Beam Limiting Device Rotation Direc CS: 'NONE' +(300a, 0122) Patient Support Angle DS: '0.0' +(300a, 0123) Patient Support Rotation Direction CS: 'NONE' +(300a, 0125) Table Top Eccentric Angle DS: '0.0' +(300a, 0126) Table Top Eccentric Rotation Direct CS: 'NONE' +(300a, 0128) Table Top Vertical Position DS: '' +(300a, 0129) Table Top Longitudinal Position DS: '' +(300a, 012a) Table Top Lateral Position DS: '' +(300a, 012c) Isocenter Position DS: ['235.711172833292', '244.135437110782', '-724.97815409918'] +(300a, 0130) Source to Surface Distance DS: '898.429664831309' +(300a, 0134) Cumulative Meterset Weight DS: '0.0' +(300c, 0050) Referenced Dose Reference Sequence 2 item(s) ---- + (300a, 010c) Cumulative Dose Reference Coefficie DS: '0.0' + (300c, 0051) Referenced Dose Reference Number IS: '1' + --------- + (300a, 010c) Cumulative Dose Reference Coefficie DS: '0.0' + (300c, 0051) Referenced Dose Reference Number IS: '2' + --------- +>>> # NOTE: the lines below are for running this through doctest +>>> help(plan.save_as) +Help on method save_as in module dicom.dataset: + +save_as(self, filename, write_like_original=True) method of dicom.dataset.FileDataset instance + Write the dataset to a file. + + :param filename: full path and filename to save the file to + :write_like_original: see dicom.filewriter.write_file for info on this parameter. + +>>> plan.save_as("rtplan_gantry90.dcm") +>>> plan_g90 = dicom.read_file("rtplan_gantry90.dcm") +>>> plan_g90.BeamSequence[0].ControlPointSequence[0].GantryAngle +'90.0' +>>> \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/examples/ListBeams.py pydicom-0.9.9/source/dicom/examples/ListBeams.py --- pydicom-0.9.8/source/dicom/examples/ListBeams.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/ListBeams.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,34 @@ +# ListBeams.py +"""Given an RTPLAN DICOM file, list basic info for the beams in it +""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from __future__ import print_function +import dicom + +usage = """python ListBeams.py rtplan.dcm""" + + +def ListBeams(plan_dataset): + """Return a string summarizing the RTPLAN beam information in the dataset""" + lines = ["{name:^13s} {num:^8s} {gantry:^8s} {ssd:^11s}".format( + name="Beam name", num="Number", gantry="Gantry", ssd="SSD (cm)")] + for beam in plan_dataset.BeamSequence: + cp0 = beam.ControlPointSequence[0] + SSD = float(cp0.SourcetoSurfaceDistance / 10) + lines.append("{b.BeamName:^13s} {b.BeamNumber:8d} " + "{gantry:8.1f} {ssd:8.1f}".format(b=beam, + gantry=cp0.GantryAngle, ssd=SSD)) + return "\n".join(lines) + +if __name__ == "__main__": + import sys + if len(sys.argv) != 2: + print(usage) + sys.exit(-1) + + rtplan = dicom.read_file(sys.argv[1]) + print(ListBeams(rtplan)) diff -Nru pydicom-0.9.8/source/dicom/examples/myprint.py pydicom-0.9.9/source/dicom/examples/myprint.py --- pydicom-0.9.8/source/dicom/examples/myprint.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/myprint.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,46 @@ +# myprint.py +"""Example of printing a dataset in your own format""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from __future__ import print_function + + +def myprint(dataset, indent=0): + """Go through all items in the dataset and print them with custom format + + Modelled after Dataset._pretty_str() + """ + dont_print = ['Pixel Data', 'File Meta Information Version'] + + indent_string = " " * indent + next_indent_string = " " * (indent + 1) + + for data_element in dataset: + if data_element.VR == "SQ": # a sequence + print(indent_string, data_element.name) + for sequence_item in data_element.value: + myprint(sequence_item, indent + 1) + print(next_indent_string + "---------") + else: + if data_element.name in dont_print: + print("""""") + else: + repr_value = repr(data_element.value) + if len(repr_value) > 50: + repr_value = repr_value[:50] + "..." + print("{0:s} {1:s} = {2:s}".format(indent_string, + data_element.name, repr_value)) + +if __name__ == "__main__": + import dicom + import sys + usage = """Usage: myprint filename""" + if len(sys.argv) != 2: + print(usage) + sys.exit() + + ds = dicom.read_file(sys.argv[1]) + myprint(ds) diff -Nru pydicom-0.9.8/source/dicom/examples/show_charset_name.py pydicom-0.9.9/source/dicom/examples/show_charset_name.py --- pydicom-0.9.8/source/dicom/examples/show_charset_name.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/show_charset_name.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,33 @@ +# show_charset_name.py +"""Very simple app to display unicode person names""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import Tkinter +from dicom.valuerep import PersonNameUnicode + +default_encoding = 'iso8859' + +root = Tkinter.Tk() +# root.geometry("%dx%d%+d%+d" % (800, 600, 0, 0)) + +person_names = [ + PersonNameUnicode( + """Yamada^Tarou=\033$B;3ED\033(B^\033$BB@O:\033(B=\033$B$d$^$@\033(B^\033$B$?$m$&\033(B""", + [default_encoding, 'iso2022_jp']), # DICOM standard 2008-PS3.5 H.3 p 98 + PersonNameUnicode( + """Wang^XiaoDong=\xcd\xf5\x5e\xd0\xa1\xb6\xab=""", + [default_encoding, 'GB18030']), # DICOM standard 2008-PS3.5 J.3 p 105 + PersonNameUnicode( + """Wang^XiaoDong=\xe7\x8e\x8b\x5e\xe5\xb0\x8f\xe6\x9d\xb1=""", + [default_encoding, 'UTF-8']), # DICOM standard 2008-PS3.5 J.1 p 104 + PersonNameUnicode( + """Hong^Gildong=\033$)C\373\363^\033$)C\321\316\324\327=\033$)C\310\253^\033$)C\261\346\265\277""", + [default_encoding, 'euc_kr']), # DICOM standard 2008-PS3.5 I.2 p 101 +] +for person_name in person_names: + label = Tkinter.Label(text=person_name) + label.pack() +root.mainloop() diff -Nru pydicom-0.9.8/source/dicom/examples/show_dicomdir.py pydicom-0.9.9/source/dicom/examples/show_dicomdir.py --- pydicom-0.9.8/source/dicom/examples/show_dicomdir.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/show_dicomdir.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,82 @@ +# show_dicomdir.py +"""Example file to show use of read_dicomdir() +""" +# Copyright (c) 2013 Darcy Mason +# This file is part of pydicom, relased under an MIT-style license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + +import sys +import dicom +import os.path +from pprint import pprint +# dicom.debug() + + +if __name__ == "__main__": + print "------------------------------------------------------------" + print "Example program showing DICOMDIR contents, assuming standard" + print "Patient -> Study -> Series -> Images hierarchy" + print "------------------------------------------------------------" + print + if len(sys.argv) > 1: + filepath = sys.argv[1] + if os.path.isdir(filepath): # only gave directory, add standard name + filepath = os.path.join(filepath, "DICOMDIR") + dcmdir = dicom.read_dicomdir(filepath) + base_dir = os.path.dirname(filepath) + else: + # Read standard "DICOMDIR" filename from current directory + dcmdir = dicom.read_dicomdir() + base_dir = "." + + for patrec in dcmdir.patient_records: + print "Patient: {0.PatientID}: {0.PatientsName}".format(patrec) + studies = patrec.children + for study in studies: + print(" Study {0.StudyID}: {0.StudyDate}:" + " {0.StudyDescription}".format(study)) + all_series = study.children + for series in all_series: + image_count = len(series.children) + plural = ('', 's')[image_count > 1] + + # Write basic series info and image count + + # Put N/A in if no Series Description + if 'SeriesDescription' not in series: + series.SeriesDescription = "N/A" + print(" " * 8 + "Series {0.SeriesNumber}: {0.Modality}: {0.SeriesDescription}" + " ({1} image{2})".format(series, image_count, plural)) + + # Open and read something from each image, for demonstration purposes + # For simple quick overview of DICOMDIR, leave the following out + print " " * 12 + "Reading images..." + image_records = series.children + image_filenames = [os.path.join(base_dir, *image_rec.ReferencedFileID) + for image_rec in image_records] + + # slice_locations = [dicom.read_file(image_filename).SliceLocation + # for image_filename in image_filenames] + + datasets = [dicom.read_file(image_filename) + for image_filename in image_filenames] + + patient_names = set(ds.PatientName for ds in datasets) + patient_IDs = set(ds.PatientID for ds in datasets) + + # List the image filenames + print "\n" + " " * 12 + "Image filenames:" + print " " * 12, + pprint(image_filenames, indent=12) + + # Expect all images to have same patient name, id + # Show the set of all names, IDs found (should each have one) + print(" " * 12 + "Patient Names in images..: " + "{0:s}".format(patient_names)) + print(" " * 12 + "Patient IDs in images..:" + "{0:s}".format(patient_IDs)) + + # print (" " * 12 + "Slice Locations from " + # "{0} to {1}".format(min(slice_locations), max(slice_locations))) diff -Nru pydicom-0.9.8/source/dicom/examples/simple_interactive_example.txt pydicom-0.9.9/source/dicom/examples/simple_interactive_example.txt --- pydicom-0.9.8/source/dicom/examples/simple_interactive_example.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/simple_interactive_example.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,13 @@ +>>> import dicom +>>> plan=dicom.read_file("rtplan.dcm") +>>> plan.PatientName +'Last^First^mid^pre' +>>> plan.dir("setup") # get a list of tags with "setup" somewhere in the name +['PatientSetupSequence'] +>>> plan.PatientSetupSequence[0] +(0018, 5100) Patient Position CS: 'HFS' +(300a, 0182) Patient Setup Number IS: '1' +(300a, 01b2) Setup Technique Description ST: '' +>>> plan.PatientSetupSequence[0].PatientPosition = "HFP" +>>> plan.save_as("rtplan2.dcm") + diff -Nru pydicom-0.9.8/source/dicom/examples/user_guide_doctest.txt pydicom-0.9.9/source/dicom/examples/user_guide_doctest.txt --- pydicom-0.9.8/source/dicom/examples/user_guide_doctest.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/user_guide_doctest.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,55 @@ +>>> import dicom +>>> ds = dicom.read_file("rtplan.dcm") # (rtplan.dcm is in the testfiles directory) +>>> ds #doctest: +ELLIPSIS +(0008, 0012) Instance Creation Date DA: '20030903' +(0008, 0013) Instance Creation Time TM: '150031' +(0008, 0016) SOP Class UID UI: RT Plan Storage +(0008, 0018) SOP Instance UID UI: 1.2.777.777.77.7.7777.7777.20030903150023 +(0008, 0020) Study Date DA: '20030716' +(0008, 0030) Study Time TM: '153557' +(0008, 0050) Accession Number SH: '' +(0008, 0060) Modality CS: 'RTPLAN' +... + +>>> ds.PatientName +'Last^First^mid^pre' +>>> ds[0x10,0x10].value +'Last^First^mid^pre' +>>> ds.PatientID = "12345" +>>> ds.SeriesNumber = 5 +>>> ds[0x10,0x10].value = 'TestName' +>>> ds.BeamSequence[0].BeamName +'Field 1' +>>> # Same thing with tag numbers (not as pretty!): +>>> ds[0x300a,0xb0][0][0x300a,0xc2].value +'Field 1' +>>> # yet another way, using another variable +>>> beam1 = ds.BeamSequence[0] +>>> beam1.BeamName, beam1[0x300a,0xc2].value +('Field 1', 'Field 1') + +>>> ds.dir("pat") +['PatientBirthDate', 'PatientID', 'PatientName', 'PatientSetupSequence', 'PatientSex'] + +>>> data_element = ds.data_element("PatientName") # or data_element = ds[0x10,0x10] +>>> data_element.VR, data_element.value +('PN', 'TestName') + +>>> "PatientName" in ds +True + +>>> del ds.InstitutionName +>>> # OR del ds[0x0008,0x0080] + +>>> ds = dicom.read_file("CT_small.dcm") +>>> pixel_bytes = ds.PixelData +>>> pix = ds.pixel_array + +>>> from dicom.tag import Tag +>>> t1=Tag(0x00100010) # all of these are equivalent +>>> t2=Tag(0x10,0x10) +>>> t3=Tag((0x10, 0x10)) +>>> t1 +(0010, 0010) +>>> t1==t2, t1==t3 +(True, True) \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/examples/working_with_sequences_doctest.txt pydicom-0.9.9/source/dicom/examples/working_with_sequences_doctest.txt --- pydicom-0.9.8/source/dicom/examples/working_with_sequences_doctest.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/working_with_sequences_doctest.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,26 @@ +>>> from dicom.sequence import Sequence +>>> from dicom.dataset import Dataset + +>>> block_ds1 = Dataset() +>>> block_ds1.BlockType = "APERTURE" +>>> block_ds1.BlockName = "Block1" + +>>> block_ds2 = Dataset() +>>> block_ds2.BlockType = "APERTURE" +>>> block_ds2.BlockName = "Block2" + +>>> beam = Dataset() +>>> # ... add beam data elements like BeamName, etc; these are skipped in this example +>>> plan_ds = Dataset() # or read one in from a file, etc +>>> plan_ds.BeamSequence = Sequence([beam]) # starting from scratch here; will already exist if read from file +>>> plan_ds.BeamSequence[0].Blocks = Sequence([block_ds1, block_ds2]) +>>> plan_ds.BeamSequence[0].NumberOfBlocks = 2 + +>>> beam0 = plan_ds.BeamSequence[0] # just for less typing +>>> print len(beam0.BlockSequence) +2 +>>> block_ds3 = Dataset() # new Dataset +>>> # ... add data elements to it as above +>>> beam0.BlockSequence.append(block_ds3) # don't forget to update Number of Blocks data element + +>>> del plan_ds.BeamSequence[0].BlockSequence[1] \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/examples/write_new.py pydicom-0.9.9/source/dicom/examples/write_new.py --- pydicom-0.9.8/source/dicom/examples/write_new.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/examples/write_new.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,69 @@ +# write_new.py +"""Simple example of writing 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 +""" +# Copyright (c) 2010-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from __future__ import print_function + +import sys +import os.path +import dicom +from dicom.dataset import Dataset, FileDataset +import dicom.UID + +if __name__ == "__main__": + print("---------------------------- ") + print("write_new.py example program") + print("----------------------------") + print("Demonstration of writing a DICOM file using pydicom") + print("NOTE: this is only a demo. Writing a DICOM standards compliant file") + print("would require official UIDs, and checking the DICOM standard to ensure") + print("that all required data elements were present.") + print() + + if sys.platform.lower().startswith("win"): + filename = r"c:\temp\test.dcm" + filename2 = r"c:\temp\test-explBig.dcm" + else: + homedir = os.path.expanduser("~") + filename = os.path.join(homedir, "test.dcm") + filename2 = os.path.join(homedir, "test-explBig.dcm") + + print("Setting file meta information...") + # Populate required values for file meta information + file_meta = Dataset() + file_meta.MediaStorageSOPClassUID = '1.2.840.10008.5.1.4.1.1.2' # CT Image Storage + file_meta.MediaStorageSOPInstanceUID = "1.2.3" # !! Need valid UID here for real work + file_meta.ImplementationClassUID = "1.2.3.4" # !!! Need valid UIDs here + + print("Setting dataset values...") + + # Create the FileDataset instance (initially no data elements, but file_meta supplied) + ds = FileDataset(filename, {}, file_meta=file_meta, preamble="\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 + + print("Writing test file", filename) + ds.save_as(filename) + print("File saved.") + + # Write as a different transfer syntax + ds.file_meta.TransferSyntaxUID = dicom.UID.ExplicitVRBigEndian # XXX shouldn't need this but pydicom 0.9.5 bug not recognizing transfer syntax + ds.is_little_endian = False + ds.is_implicit_VR = False + + print("Writing test file as Big Endian Explicit VR", filename2) + ds.save_as(filename2) diff -Nru pydicom-0.9.8/source/dicom/filebase.py pydicom-0.9.9/source/dicom/filebase.py --- pydicom-0.9.8/source/dicom/filebase.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/filebase.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,166 @@ +# filebase.py +"""Hold DicomFile class, which does basic I/O for a dicom file.""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +from __future__ import absolute_import + +from dicom.tag import Tag +from struct import unpack, pack + +from io import BytesIO +import logging +logger = logging.getLogger('pydicom') + + +class DicomIO(object): + """File object which holds transfer syntax info and anything else we need.""" + + max_read_attempts = 3 # number of times to read if don't get requested bytes + defer_size = None # default + + def __init__(self, *args, **kwargs): + self._implicit_VR = True # start with this by default + + def __del__(self): + self.close() + + def read_le_tag(self): + """Read and return two unsigned shorts (little endian) from the file.""" + bytes_read = self.read(4) + if len(bytes_read) < 4: + raise EOFError # needed for reading "next" tag when at end of file + return unpack(b"HH", bytes_read) + + def write_tag(self, tag): + """Write a dicom tag (two unsigned shorts) to the file.""" + tag = Tag(tag) # make sure is an instance of class, not just a tuple or int + self.write_US(tag.group) + self.write_US(tag.element) + + def read_leUS(self): + """Return an unsigned short from the file with little endian byte order""" + return unpack(b"H", self.read(2))[0] + + def read_leUL(self): + """Return an unsigned long read with little endian byte order""" + return unpack(b"H", val)) + + def write_beUL(self, val): + """Write an unsigned long with big endian byte order""" + self.write(pack(b">L", val)) + + write_US = write_leUS # XXX should we default to this? + write_UL = write_leUL # XXX " + + def read_beUL(self): + """Return an unsigned long read with big endian byte order""" + return unpack(b">L", self.read(4))[0] + + # Set up properties is_little_endian and is_implicit_VR + # Big/Little Endian changes functions to read unsigned short or long, e.g. length fields etc + @property + def is_little_endian(self): + return self._little_endian + + @is_little_endian.setter + def is_little_endian(self, value): + self._little_endian = value + if value: # Little Endian + self.read_US = self.read_leUS + self.read_UL = self.read_leUL + self.write_US = self.write_leUS + self.write_UL = self.write_leUL + self.read_tag = self.read_le_tag + else: # Big Endian + self.read_US = self.read_beUS + self.read_UL = self.read_beUL + self.write_US = self.write_beUS + self.write_UL = self.write_beUL + self.read_tag = self.read_be_tag + + @property + def is_implicit_VR(self): + return self._implicit_VR + + @is_implicit_VR.setter + def is_implicit_VR(self, value): + self._implicit_VR = value + + +class DicomFileLike(DicomIO): + + def __init__(self, file_like_obj): + self.parent = file_like_obj + self.parent_read = getattr(file_like_obj, "read", self.no_read) + self.write = getattr(file_like_obj, "write", self.no_write) + self.seek = getattr(file_like_obj, "seek", self.no_seek) + self.tell = file_like_obj.tell + self.close = file_like_obj.close + self.name = getattr(file_like_obj, 'name', '') + + def no_write(self, bytes_read): + """Used for file-like objects where no write is available""" + raise IOError("This DicomFileLike object has no write() method") + + def no_read(self, bytes_read): + """Used for file-like objects where no read is available""" + raise IOError("This DicomFileLike object has no read() method") + + def no_seek(offset, from_what): + """Used for file-like objects where no seek is available""" + raise IOError("This DicomFileLike object has no seek() method") + + +def DicomFile(*args, **kwargs): + return DicomFileLike(open(*args, **kwargs)) + + +def DicomBytesIO(*args, **kwargs): + return DicomFileLike(BytesIO(*args, **kwargs)) \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/filereader.py pydicom-0.9.9/source/dicom/filereader.py --- pydicom-0.9.8/source/dicom/filereader.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/filereader.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,692 @@ +# filereader.py +"""Read a dicom media file""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +from __future__ import absolute_import +# Need zlib and io.BytesIO for deflate-compressed file +import os.path +import warnings +import zlib +from io import BytesIO +import logging +from dicom.tag import TupleTag +from dicom.dataelem import RawDataElement +from dicom.util.hexutil import bytes2hex +from dicom.valuerep import extra_length_VRs +from dicom.charset import default_encoding, convert_encodings +from dicom import in_py3 + +logger = logging.getLogger('pydicom') + +stat_available = True +try: + from os import stat +except: + stat_available = False + +from dicom.errors import InvalidDicomError +import dicom.UID # for Implicit/Explicit/Little/Big Endian transfer syntax UIDs +from dicom.filebase import DicomFile +from dicom.dataset import Dataset, FileDataset +from dicom.dicomdir import DicomDir +from dicom.datadict import dictionaryVR +from dicom.dataelem import DataElement +from dicom.tag import ItemTag, SequenceDelimiterTag +from dicom.sequence import Sequence +from dicom.fileutil import read_undefined_length_value +from struct import Struct, unpack +from sys import byteorder +sys_is_little_endian = (byteorder == 'little') + + +class DicomIter(object): + """Iterator over DICOM data elements created from a file-like object + """ + def __init__(self, fp, stop_when=None, force=False): + """Read the preamble and meta info, prepare iterator for remainder + + fp -- an open DicomFileLike object, at start of file + + Adds flags to fp: Big/Little-endian and Implicit/Explicit VR + """ + self.fp = fp + self.stop_when = stop_when + self.preamble = preamble = read_preamble(fp, force) + self.has_header = has_header = (preamble is not None) + self.file_meta_info = Dataset() + if has_header: + self.file_meta_info = file_meta_info = _read_file_meta_info(fp) + transfer_syntax = file_meta_info.TransferSyntaxUID + if transfer_syntax == dicom.UID.ExplicitVRLittleEndian: + self._is_implicit_VR = False + self._is_little_endian = True + elif transfer_syntax == dicom.UID.ImplicitVRLittleEndian: + self._is_implicit_VR = True + self._is_little_endian = True + elif transfer_syntax == dicom.UID.ExplicitVRBigEndian: + self._is_implicit_VR = False + self._is_little_endian = False + elif transfer_syntax == dicom.UID.DeflatedExplicitVRLittleEndian: + # See PS3.6-2008 A.5 (p 71) -- when written, the entire dataset + # following the file metadata was prepared the normal way, + # then "deflate" compression applied. + # All that is needed here is to decompress and then + # use as normal in a file-like object + zipped = fp.read() + # -MAX_WBITS part is from comp.lang.python answer: + # groups.google.com/group/comp.lang.python/msg/e95b3b38a71e6799 + unzipped = zlib.decompress(zipped, -zlib.MAX_WBITS) + fp = BytesIO(unzipped) # a file-like object + self.fp = fp # point to new object + self._is_implicit_VR = False + self._is_little_endian = True + else: + # Any other syntax should be Explicit VR Little Endian, + # e.g. all Encapsulated (JPEG etc) are ExplVR-LE + # by Standard PS 3.5-2008 A.4 (p63) + self._is_implicit_VR = False + self._is_little_endian = True + else: # no header -- make assumptions + fp.TransferSyntaxUID = dicom.UID.ImplicitVRLittleEndian + self._is_little_endian = True + self._is_implicit_VR = True + + impl_expl = ("Explicit", "Implicit")[self._is_implicit_VR] + big_little = ("Big", "Little")[self._is_little_endian] + logger.debug("Using {0:s} VR, {1:s} Endian transfer syntax".format( + impl_expl, big_little)) + + def __iter__(self): + tags = sorted(self.file_meta_info.keys()) + for tag in tags: + yield self.file_meta_info[tag] + + for data_element in data_element_generator(self.fp, + self._is_implicit_VR, self._is_little_endian, + stop_when=self.stop_when): + yield data_element + + +def data_element_generator(fp, is_implicit_VR, is_little_endian, + stop_when=None, defer_size=None, encoding=default_encoding): + """Create a generator to efficiently return the raw data elements + Returns (VR, length, raw_bytes, value_tell, is_little_endian), + where: + VR -- None if implicit VR, otherwise the VR read from the file + length -- the length as in the DICOM data element (could be + DICOM "undefined length" 0xffffffffL), + value_bytes -- the raw bytes from the DICOM file + (not parsed into python types) + is_little_endian -- True if transfer syntax is little endian; else False + """ + # Summary of DICOM standard PS3.5-2008 chapter 7: + # If Implicit VR, data element is: + # tag, 4-byte length, value. + # The 4-byte length can be FFFFFFFF (undefined length)* + # If Explicit VR: + # if OB, OW, OF, SQ, UN, or UT: + # tag, VR, 2-bytes reserved (both zero), 4-byte length, value + # For all but UT, the length can be FFFFFFFF (undefined length)* + # else: (any other VR) + # tag, VR, (2 byte length), value + # * for undefined length, a Sequence Delimitation Item marks the end + # of the Value Field. + # Note, except for the special_VRs, both impl and expl VR use 8 bytes; + # the special VRs follow the 8 bytes with a 4-byte length + + # With a generator, state is stored, so we can break down + # into the individual cases, and not have to check them again for each + # data element + + if is_little_endian: + endian_chr = "<" + else: + endian_chr = ">" + if is_implicit_VR: + element_struct = Struct(endian_chr + "HHL") + else: # Explicit VR + # tag, VR, 2-byte length (or 0 if special VRs) + element_struct = Struct(endian_chr + "HH2sH") + extra_length_struct = Struct(endian_chr + "L") # for special VRs + extra_length_unpack = extra_length_struct.unpack # for lookup speed + + # Make local variables so have faster lookup + fp_read = fp.read + fp_tell = fp.tell + logger_debug = logger.debug + debugging = dicom.debugging + element_struct_unpack = element_struct.unpack + + while True: + # Read tag, VR, length, get ready to read value + bytes_read = fp_read(8) + if len(bytes_read) < 8: + raise StopIteration # at end of file + if debugging: + debug_msg = "{0:08x}: {1}".format(fp.tell() - 8, + bytes2hex(bytes_read)) + + if is_implicit_VR: + # must reset VR each time; could have set last iteration (e.g. SQ) + VR = None + group, elem, length = element_struct_unpack(bytes_read) + else: # explicit VR + group, elem, VR, length = element_struct_unpack(bytes_read) + if in_py3: + VR = VR.decode(default_encoding) + if VR in extra_length_VRs: + bytes_read = fp_read(4) + length = extra_length_unpack(bytes_read)[0] + if debugging: + debug_msg += " " + bytes2hex(bytes_read) + if debugging: + debug_msg = "%-47s (%04x, %04x)" % (debug_msg, group, elem) + if not is_implicit_VR: + debug_msg += " %s " % VR + if length != 0xFFFFFFFFL: + debug_msg += "Length: %d" % length + else: + debug_msg += "Length: Undefined length (FFFFFFFF)" + logger_debug(debug_msg) + + # Positioned to read the value, but may not want to -- check stop_when + value_tell = fp_tell() + tag = TupleTag((group, elem)) + if stop_when is not None: + # XXX VR may be None here!! Should stop_when just take tag? + if stop_when(tag, VR, length): + if debugging: + logger_debug("Reading ended by stop_when callback. " + "Rewinding to start of data element.") + rewind_length = 8 + if not is_implicit_VR and VR in extra_length_VRs: + rewind_length += 4 + fp.seek(value_tell - rewind_length) + raise StopIteration + + # Reading the value + # First case (most common): reading a value with a defined length + if length != 0xFFFFFFFFL: + if defer_size is not None and length > defer_size: + # Flag as deferred by setting value to None, and skip bytes + value = None + logger_debug("Defer size exceeded. " + "Skipping forward to next data element.") + fp.seek(fp_tell() + length) + else: + value = fp_read(length) + if debugging: + dotdot = " " + if length > 12: + dotdot = "..." + logger_debug("%08x: %-34s %s %r %s" % (value_tell, + bytes2hex(value[:12]), dotdot, value[:12], dotdot)) + + # If the tag is (0008,0005) Specific Character Set, then store it + if tag == (0x08, 0x05): + from dicom.values import convert_string + encoding = convert_string(value, is_little_endian, encoding=default_encoding) + # Store the encoding value in the generator for use with future elements (SQs) + encoding = convert_encodings(encoding) + + yield RawDataElement(tag, VR, length, value, value_tell, + is_implicit_VR, is_little_endian) + + # Second case: undefined length - must seek to delimiter, + # unless is SQ type, in which case is easier to parse it, because + # undefined length SQs and items of undefined lengths can be nested + # and it would be error-prone to read to the correct outer delimiter + else: + # Try to look up type to see if is a SQ + # if private tag, won't be able to look it up in dictionary, + # in which case just ignore it and read the bytes unless it is + # identified as a Sequence + if VR is None: + try: + VR = dictionaryVR(tag) + except KeyError: + # Look ahead to see if it consists of items and is thus a SQ + next_tag = TupleTag(unpack(endian_chr + "HH", fp_read(4))) + # Rewind the file + fp.seek(fp_tell() - 4) + if next_tag == ItemTag: + VR = 'SQ' + + if VR == 'SQ': + if debugging: + msg = "{0:08x}: Reading/parsing undefined length sequence" + logger_debug(msg.format(fp_tell())) + seq = read_sequence(fp, is_implicit_VR, + is_little_endian, length, encoding) + yield DataElement(tag, VR, seq, value_tell, + is_undefined_length=True) + else: + delimiter = SequenceDelimiterTag + if debugging: + logger_debug("Reading undefined length data element") + value = read_undefined_length_value(fp, is_little_endian, + delimiter, defer_size) + + # If the tag is (0008,0005) Specific Character Set, then store it + if tag == (0x08, 0x05): + from dicom.values import convert_string + encoding = convert_string(value, is_little_endian, encoding=default_encoding) + # Store the encoding value in the generator for use with future elements (SQs) + encoding = convert_encodings(encoding) + + yield RawDataElement(tag, VR, length, value, value_tell, + is_implicit_VR, is_little_endian) + + +def read_dataset(fp, is_implicit_VR, is_little_endian, bytelength=None, + stop_when=None, defer_size=None, parent_encoding=default_encoding): + """Return a Dataset instance containing the next dataset in the file. + :param fp: an opened file object + :param is_implicit_VR: True if file transfer syntax is implicit VR + :param is_little_endian: True if file has little endian transfer syntax + :param bytelength: None to read until end of file or ItemDeliterTag, else + a fixed number of bytes to read + :param stop_when: optional call_back function which can terminate reading. + See help for data_element_generator for details + :param defer_size: optional size to avoid loading large elements in memory. + See help for data_element_generator for details + :param parent_encoding: optional encoding to use as a default in case + a Specific Character Set (0008,0005) isn't specified + :returns: a Dataset instance + """ + raw_data_elements = dict() + fpStart = fp.tell() + de_gen = data_element_generator(fp, is_implicit_VR, is_little_endian, + stop_when, defer_size, parent_encoding) + try: + while (bytelength is None) or (fp.tell() - fpStart < bytelength): + raw_data_element = next(de_gen) + # Read data elements. Stop on some errors, but return what was read + tag = raw_data_element.tag + # Check for ItemDelimiterTag --dataset is an item in a sequence + if tag == (0xFFFE, 0xE00D): + break + raw_data_elements[tag] = raw_data_element + except StopIteration: + pass + except EOFError as details: + # XXX is this error visible enough to user code with just logging? + logger.error(str(details) + " in file " + + getattr(fp, "name", "")) + except NotImplementedError as details: + logger.error(details) + + return Dataset(raw_data_elements) + + +def read_sequence(fp, is_implicit_VR, is_little_endian, bytelength, encoding, + offset=0): + """Read and return a Sequence -- i.e. a list of Datasets""" + + seq = [] # use builtin list to start for speed, convert to Sequence at end + is_undefined_length = False + if bytelength != 0: # SQ of length 0 possible (PS 3.5-2008 7.5.1a (p.40) + if bytelength == 0xffffffffL: + is_undefined_length = True + bytelength = None + fp_tell = fp.tell # for speed in loop + fpStart = fp_tell() + while (not bytelength) or (fp_tell() - fpStart < bytelength): + file_tell = fp.tell() + dataset = read_sequence_item(fp, is_implicit_VR, is_little_endian, + encoding, offset) + if dataset is None: # None is returned if hit Sequence Delimiter + break + dataset.file_tell = file_tell + offset + seq.append(dataset) + seq = Sequence(seq) + seq.is_undefined_length = is_undefined_length + return seq + + +def read_sequence_item(fp, is_implicit_VR, is_little_endian, encoding, offset=0): + """Read and return a single sequence item, i.e. a Dataset""" + seq_item_tell = fp.tell() + offset + if is_little_endian: + tag_length_format = "HH" + bytes_to_find = pack(bytes_format, delimiter_tag.group, delimiter_tag.elem) + + found = False + EOF = False + value_chunks = [] + byte_count = 0 # for defer_size checks + while not found: + chunk_start = fp.tell() + bytes_read = fp.read(read_size) + if len(bytes_read) < read_size: + # try again - if still don't get required amount, this is last block + new_bytes = fp.read(read_size - len(bytes_read)) + bytes_read += new_bytes + if len(bytes_read) < read_size: + EOF = True # but will still check whatever we did get + index = bytes_read.find(bytes_to_find) + if index != -1: + found = True + new_bytes = bytes_read[:index] + byte_count += len(new_bytes) + if defer_size is None or byte_count < defer_size: + value_chunks.append(bytes_read[:index]) + fp.seek(chunk_start + index + 4) # rewind to end of delimiter + length = fp.read(4) + if length != b"\0\0\0\0": + msg = "Expected 4 zero bytes after undefined length delimiter at pos {0:04x}" + logger.error(msg.format(fp.tell() - 4)) + elif EOF: + fp.seek(data_start) + raise EOFError("End of file reached before delimiter {0!r} found".format(delimiter_tag)) + else: + fp.seek(fp.tell() - search_rewind) # rewind a bit in case delimiter crossed read_size boundary + # accumulate the bytes read (not including the rewind) + new_bytes = bytes_read[:-search_rewind] + byte_count += len(new_bytes) + if defer_size is None or byte_count < defer_size: + value_chunks.append(new_bytes) + # if get here then have found the byte string + if defer_size is not None and defer_size >= defer_size: + return None + else: + return b"".join(value_chunks) + + +def find_delimiter(fp, delimiter, is_little_endian, read_size=128, rewind=True): + """Return file position where 4-byte delimiter is located. + + Return None if reach end of file without finding the delimiter. + On return, file position will be where it was before this function, + unless rewind argument is False. + + """ + struct_format = ".is_undefined_length_sequence_item -- for datasets that belong to a + sequence, write the undefined length delimiters if that is + what the original had + Set write_like_original = False to produce a "nicer" DICOM file for other readers, + where all lengths are explicit. + """ + + # Decide whether to write DICOM preamble. Should always do so unless trying to mimic the original file read in + preamble = getattr(dataset, "preamble", None) + if not preamble and not write_like_original: + preamble = b"\0" * 128 + file_meta = dataset.file_meta + if file_meta is None: + file_meta = Dataset() + if 'TransferSyntaxUID' not in file_meta: + if dataset.is_little_endian and dataset.is_implicit_VR: + file_meta.add_new((2, 0x10), 'UI', ImplicitVRLittleEndian) + elif dataset.is_little_endian and not dataset.is_implicit_VR: + file_meta.add_new((2, 0x10), 'UI', ExplicitVRLittleEndian) + elif not dataset.is_little_endian and not dataset.is_implicit_VR: + file_meta.add_new((2, 0x10), 'UI', ExplicitVRBigEndian) + else: + raise NotImplementedError("pydicom has not been verified for Big Endian with Implicit VR") + + caller_owns_file = True + # Open file if not already a file object + if isinstance(filename, basestring): + fp = DicomFile(filename, 'wb') + # caller provided a file name; we own the file handle + caller_owns_file = False + else: + fp = DicomFileLike(filename) + + try: + if preamble: + fp.write(preamble) # blank 128 byte preamble + _write_file_meta_info(fp, file_meta) + + # Set file VR, endian. MUST BE AFTER writing META INFO (which changes to Explicit LittleEndian) + fp.is_implicit_VR = dataset.is_implicit_VR + fp.is_little_endian = dataset.is_little_endian + + write_dataset(fp, dataset) + finally: + if not caller_owns_file: + fp.close() + +# Map each VR to a function which can write it +# for write_numbers, the Writer maps to a tuple (function, struct_format) +# (struct_format is python's struct module format) +writers = {'UL': (write_numbers, 'L'), + 'SL': (write_numbers, 'l'), + 'US': (write_numbers, 'H'), + 'SS': (write_numbers, 'h'), + 'FL': (write_numbers, 'f'), + 'FD': (write_numbers, 'd'), + 'OF': (write_numbers, 'f'), + 'OB': (write_OBvalue, None), + 'UI': (write_UI, None), + 'SH': (write_string, None), + 'DA': (write_string, None), + 'TM': (write_string, None), + 'CS': (write_string, None), + 'PN': (write_PN, None), + 'LO': (write_string, None), + 'IS': (write_number_string, None), + 'DS': (write_number_string, None), + 'AE': (write_string, None), + 'AS': (write_string, None), + 'LT': (write_string, None), + 'SQ': (write_sequence, None), + 'UN': (write_UN, None), + 'AT': (write_ATvalue, None), + 'ST': (write_string, None), + 'OW': (write_OWvalue, None), + 'US or SS': (write_OWvalue, None), + 'US or OW': (write_OWvalue, None), + 'US or SS or OW': (write_OWvalue, None), + 'OW/OB': (write_OBvalue, None), + 'OB/OW': (write_OBvalue, None), + 'OB or OW': (write_OBvalue, None), + 'OW or OB': (write_OBvalue, None), + 'DT': (write_string, None), + 'UT': (write_string, None), + } # note OW/OB depends on other items, which we don't know at write time diff -Nru pydicom-0.9.8/source/dicom/__init__.py pydicom-0.9.9/source/dicom/__init__.py --- pydicom-0.9.8/source/dicom/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/__init__.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,73 @@ +# __init__.py for Dicom package +"""pydicom package -- easily handle DICOM files. See Quick Start below. + +Copyright (c) 2008-2012 Darcy Mason +This file is part of pydicom, released under a modified MIT license. + See the file license.txt included with this distribution, also + available at http://pydicom.googlecode.com + +----------- +Quick Start +----------- +1. A simple program to read a dicom file, modify a value, and write to a new file:: + import dicom + dataset = dicom.read_file("file1.dcm") + dataset.PatientName = 'anonymous' + dataset.save_as("file2.dcm") + +2. See the files in the examples directory that came with this package for more +examples, including some interactive sessions. + +3. Learn the methods of the Dataset class; that is the one you will +work with most directly. + +4. Questions/comments etc can be directed to the pydicom google group at +http://groups.google.com/group/pydicom +""" + +import sys +if sys.version_info < (2, 6, 0): + raise ImportError("pydicom > 0.9.7 requires python 2.6 or later") +in_py3 = sys.version_info[0] > 2 + +# Set up logging system for the whole package. +# In each module, set logger=logging.getLogger('pydicom') and the same instance +# will be used by all +# At command line, turn on debugging for all pydicom functions with: +# import dicom +# dicom.debug() +# Turn off debugging with +# dicom.debug(False) +import logging + + +def debug(debug_on=True): + """Turn debugging of DICOM file reading and writing on or off. + When debugging is on, file location and details about the elements read at + that location are logged to the 'pydicom' logger using python's logging module. + + :param debug_on: True (default) to turn on debugging, False to turn off. + """ + global logger, debugging + if debug_on: + logger.setLevel(logging.DEBUG) + debugging = True + else: + logger.setLevel(logging.WARNING) + debugging = False + +logger = logging.getLogger('pydicom') +handler = logging.StreamHandler() +# formatter = logging.Formatter("%(asctime)s %(levelname)s: %(message)s", "%Y-%m-%d %H:%M") #'%(asctime)s %(levelname)s %(message)s' +formatter = logging.Formatter("%(message)s") +handler.setFormatter(formatter) +logger.addHandler(handler) +debug(False) # force level=WARNING, in case logging default is set differently (issue 102) + +# For convenience, import the read_file and write_file functions (most used) +# into the "dicom" namespace. +from dicom.filereader import read_file, read_dicomdir # noQA +from dicom.filewriter import write_file # noQA + +__version__ = "0.9.9" +__version_info__ = (0, 9, 9) diff -Nru pydicom-0.9.8/source/dicom/license.txt pydicom-0.9.9/source/dicom/license.txt --- pydicom-0.9.8/source/dicom/license.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/license.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,60 @@ +License file for pydicom, a pure-python DICOM library + +Copyright (c) 2008-2010 Darcy Mason and pydicom contributors + +Except for portions outlined below, pydicom is released under an MIT license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +Portions of pydicom (private dictionary file(s)) were generated from the +private dictionary of the GDCM library, released under the following license: + + Program: GDCM (Grassroots DICOM). A DICOM library + Module: http://gdcm.sourceforge.net/Copyright.html + +Copyright (c) 2006-2010 Mathieu Malaterre +Copyright (c) 1993-2005 CREATIS +(CREATIS = Centre de Recherche et d'Applications en Traitement de l'Image) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither name of Mathieu Malaterre, or CREATIS, nor the names of any + contributors (CNRS, INSERM, UCB, Universite Lyon I), may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -Nru pydicom-0.9.8/source/dicom/misc.py pydicom-0.9.9/source/dicom/misc.py --- pydicom-0.9.8/source/dicom/misc.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/misc.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,22 @@ +# misc.py +"""Miscellaneous helper functions""" +# Copyright (c) 2009 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +_size_factors = dict(KB=1024, MB=1024 * 1024, GB=1024 * 1024 * 1024) + + +def size_in_bytes(expr): + """Return the number of bytes for a defer_size argument to read_file() + """ + try: + return int(expr) + except ValueError: + unit = expr[-2:].upper() + if unit in _size_factors.keys(): + val = float(expr[:-2]) * _size_factors[unit] + return val + else: + raise ValueError("Unable to parse length with unit '{0:s}'".format(unit)) diff -Nru pydicom-0.9.8/source/dicom/multival.py pydicom-0.9.9/source/dicom/multival.py --- pydicom-0.9.8/source/dicom/multival.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/multival.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,64 @@ +# multival.py +"""Code for multi-value data elements values, or any list of items that +must all be the same type. +""" +# Copyright (c) 2009-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT-style license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + + +class MultiValue(list): + """Class to hold any multi-valued DICOM value, or any list of items + that are all of the same type. + + This class enforces that any items added to the list are of the correct type, + by calling the constructor on any items that are added. Therefore, the + constructor must behave nicely if passed an object that is already its type. + The constructor should raise TypeError if the item cannot be converted. + + Note, however, that DS and IS types can be a blank string '' rather + than an instance of their classes. + """ + + def __init__(self, type_constructor, iterable): + """Initialize the list of values + + :param type_constructor: a constructor for the required type for all list + items. Could be the class, or a factory function. + For DICOM mult-value data elements, this will be the + class or type corresponding to the VR. + :param iterable: an iterable (e.g. list, tuple) of items to initialize + the MultiValue list + """ + from dicom.valuerep import DSfloat, DSdecimal, IS + self.type_constructor = type_constructor + if isinstance(type_constructor, (DSfloat, IS, DSdecimal)): + converted_list = [type_constructor(x) if x != '' + else x for x in iterable] + else: + converted_list = [type_constructor(x) for x in iterable] + super(MultiValue, self).__init__(converted_list) + + def append(self, val): + super(MultiValue, self).append(self.type_constructor(val)) + + def extend(self, list_of_vals): + super(MultiValue, self).extend((self.type_constructor(x) for x in list_of_vals)) + + def insert(self, position, val): + super(MultiValue, self).insert(position, self.type_constructor(val)) + + def __setitem__(self, i, val): + """Set an item of the list, making sure it is of the right VR type""" + if isinstance(i, slice): + val = [self.type_constructor(x) for x in val] + else: + val = self.type_constructor(val) + super(MultiValue, self).__setitem__(i, val) + + def __str__(self): + lines = [str(x) for x in self] + return "['" + "', '".join(lines) + "']" + __repr__ = __str__ diff -Nru pydicom-0.9.8/source/dicom/_private_dict.py pydicom-0.9.9/source/dicom/_private_dict.py --- pydicom-0.9.8/source/dicom/_private_dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/_private_dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,9332 @@ +# _private_dict.py +# This file was autogenerated by "make_private_dict.py", +# (then reformatted by reindent_private.py) +# from private elements list maintained by the GDCM project +# See the license.txt file for license information on pydicom, and GDCM. + +# This is a dictionary of DICOM dictionaries. +# The outer dictionary key is the Private Creator name ("owner"), +# the inner dictionary is a map of DICOM tag to +# (VR, VM, name, is_retired) +private_dictionaries = { + '1.2.840.113663.1': { + '0029xx00': ('US', '1', 'Unknown', ''), + '0029xx01': ('US', '1', 'Unknown', ''), + }, + '1.2.840.113681': { + '0019xx10': ('ST', '1', 'CR Image Params Common', ''), + '0019xx11': ('ST', '1', 'CR Image IP Params Single', ''), + '0019xx12': ('ST', '1', 'CR Image IP Params Left', ''), + '0019xx13': ('ST', '1', 'CR Image IP Params Right', ''), + }, + '1.2.840.113708.794.1.1.2.0': { + '0087xx10': ('CS', '1', 'Media Type', ''), + '0087xx20': ('CS', '1', 'Media Location', ''), + '0087xx30': ('ST', '1', 'Storage File ID', ''), + '0087xx40': ('DS', '1', 'Study or Image Size in MB', ''), + '0087xx50': ('IS', '1', 'Estimated Retrieve Time', ''), + }, + '2.16.840.1.114059.1.1.6.1.50.1': { + '0029xx20': ('LT', '1', 'Description', ''), + '0029xx21': ('ST', '1', 'Orientation', ''), + '0029xx22': ('ST', '1', 'Parameter 1', ''), + '0029xx23': ('ST', '1', 'Parameter 2', ''), + '0029xx24': ('LO', '1', 'Teeth', ''), + '0029xx25': ('LO', '1', 'Jaw', ''), + '0029xx26': ('LO', '1', 'Quadrant', ''), + '0029xx27': ('LO', '1', 'CRC', ''), + }, + 'A.L.I. Technologies, Inc.': { + '3711xx01': ('LO', '1', 'Filename', ''), + '3711xx02': ('OB', '1', 'Data Blob of a Visit', ''), + '3711xx03': ('US', '1', 'Revision Number', ''), + '3711xx04': ('UL', '1', 'Unix Timestamp', ''), + '3711xx05': ('IS', '1', 'Bag ID', ''), + '3711xx0c': ('UI', '1', 'Original Study UID', ''), + '3711xx0d': ('US', '1', 'Overlay Grayscale Value', ''), + '3711xx0e': ('CS', '1', 'Anonymization Status', ''), + }, + 'ACUSON': { + '0009xx00': ('IS', '1', 'Unknown', ''), + '0009xx01': ('IS', '1', 'Unknown', ''), + '0009xx02': ('UN', '1', 'Unknown', ''), + '0009xx03': ('UN', '1', 'Unknown', ''), + '0009xx04': ('UN', '1', 'Unknown', ''), + '0009xx05': ('UN', '1', 'Unknown', ''), + '0009xx06': ('UN', '1', 'Unknown', ''), + '0009xx07': ('UN', '1', 'Unknown', ''), + '0009xx08': ('LT', '1', 'Unknown', ''), + '0009xx09': ('LT', '1', 'Unknown', ''), + '0009xx0a': ('IS', '1', 'Unknown', ''), + '0009xx0b': ('IS', '1', 'Unknown', ''), + '0009xx0c': ('IS', '1', 'Unknown', ''), + '0009xx0d': ('IS', '1', 'Unknown', ''), + '0009xx0e': ('IS', '1', 'Unknown', ''), + '0009xx0f': ('UN', '1', 'Unknown', ''), + '0009xx10': ('IS', '1', 'Unknown', ''), + '0009xx11': ('UN', '1', 'Unknown', ''), + '0009xx12': ('IS', '1', 'Unknown', ''), + '0009xx13': ('IS', '1', 'Unknown', ''), + '0009xx14': ('LT', '1', 'Unknown', ''), + '0009xx15': ('UN', '1', 'Unknown', ''), + }, + 'ACUSON: 1.2.840.11386.1.0': { + '7fdfxx00': ('IS', '1', 'Lossy Compression Ratio', ''), + '7fdfxx01': ('US', '1', 'Image Format', ''), + '7fdfxx02': ('US', '1', 'Acuson Region Type', ''), + '7fdfxx0b': ('UL', '1', 'Acuson Image Apex X', ''), + '7fdfxx0c': ('UL', '1', 'Acuson Image Apex Y', ''), + '7fdfxx0d': ('IS', '1', 'B-Color-On Flag', ''), + }, + 'ACUSON:1.2.840.113680.1.0:0921': { + '0009xx20': ('UN', '1', 'View Name', ''), + '0009xx2a': ('UN', '1', 'View List', ''), + }, + 'ACUSON:1.2.840.113680.1.0:7f10': { + '7fdfxx00': ('UN', '1', 'Lossy Compression Ratio', ''), + '7fdfxx01': ('UN', '1', 'Image Format', ''), + '7fdfxx02': ('UN', '1', 'Acuson Region Type', ''), + '7fdfxx0b': ('UN', '1', 'Acuson Image Apex X', ''), + '7fdfxx0c': ('UN', '1', 'Acuson Image Apex Y', ''), + '7fdfxx0d': ('UN', '1', 'B-Color-On Flag', ''), + '7fdfxx0e': ('UN', '1', 'Acuson Mechanical Apex X', ''), + '7fdfxx0f': ('UN', '1', 'Acuson Mechanical Apex Y', ''), + '7fdfxx10': ('UN', '1', 'Acquisition Type:', ''), + '7fdfxx18': ('UN', '1', 'Transformation Matrix Sequence', ''), + '7fdfxx20': ('UN', '1', 'Left angle', ''), + '7fdfxx22': ('UN', '1', 'Right angle', ''), + '7fdfxx24': ('UN', '1', 'Color Map Family', ''), + '7fdfxx25': ('UN', '1', 'Full Colormap.', ''), + '7fdfxx26': ('UN', '1', 'Color Invert', ''), + '7fdfxx27': ('UN', '1', 'Color Baseline', ''), + '7fdfxx28': ('UN', '1', 'CD Color Mix Points X1', ''), + '7fdfxx29': ('UN', '1', 'CD Color Mix Points Y1', ''), + '7fdfxx2a': ('UN', '1', 'CD Color Mix Points X2', ''), + '7fdfxx2b': ('UN', '1', 'CD Color Mix Points Y2', ''), + '7fdfxx2c': ('UN', '1', 'Color Accent', ''), + '7fdfxx30': ('UN', '1', 'Persistence SQ', ''), + '7fdfxx31': ('UN', '1', 'Persistence Mode', ''), + '7fdfxx32': ('UN', '1', 'Persistence Coefficient Mode', ''), + '7fdfxx33': ('UN', '1', 'Alpha coefficient', ''), + '7fdfxx34': ('UN', '1', 'Gamma coefficient', ''), + '7fdfxx35': ('UN', '1', 'Persistence Time Flag', ''), + '7fdfxx36': ('UN', '1', 'Persistence adaptive flag', ''), + '7fdfxx37': ('UN', '1', 'Persistence Frame Rate', ''), + '7fdfxx38': ('UN', '1', 'Persistence ID', ''), + '7fdfxx40': ('UN', '1', 'Observation Date Time SQ', ''), + '7fdfxx50': ('UN', '1', 'Capture Type Name', ''), + '7fdfxx52': ('UN', '1', 'Capture Type Number', ''), + '7fdfxx54': ('UN', '1', 'Number of Capture Types', ''), + '7fdfxx60': ('UN', '1', 'CD Steering Angle', ''), + '7fdfxx61': ('UN', '1', 'CD PRI', ''), + '7fdfxx62': ('UN', '1', 'CD Dynamic Range', ''), + '7fdfxx63': ('UN', '1', 'CD Velocity Scale Min', ''), + '7fdfxx64': ('UN', '1', 'CD Velocity Scale Max', ''), + '7fdfxx65': ('UN', '1', 'CD Color Mode', ''), + '7fdfxx66': ('UN', '1', 'CD Frequency', ''), + '7fdfxx67': ('UN', '1', 'CD Balance', ''), + '7fdfxx68': ('UN', '1', 'CD Delta', ''), + '7fdfxx69': ('UN', '1', 'CD Pan Box Min X0', ''), + '7fdfxx6a': ('UN', '1', 'CD Pan Box Min Y0', ''), + '7fdfxx6b': ('UN', '1', 'CD Pan Box Min X1', ''), + '7fdfxx6c': ('UN', '1', 'CD Pan Box Min Y1', ''), + '7fdfxx6d': ('UN', '1', 'CPS Map Type', ''), + '7fdfxx6e': ('UN', '1', 'CPS Map Data', ''), + '7fdfxx6f': ('UN', '1', 'CPS Balance Setting', ''), + '7fdfxx70': ('UN', '1', '3DCard Step Angle', ''), + '7fdfxx71': ('UN', '1', '3DCard Xdcr Angle', ''), + '7fdfxx72': ('UN', '1', 'B-mode Frequency', ''), + '7fdfxx73': ('UN', '1', 'B-mode Dynamic Range', ''), + '7fdfxx74': ('UN', '1', 'B-mode Frame Rate', ''), + '7fdfxx75': ('UN', '1', 'B-mode Space Time', ''), + '7fdfxx76': ('UN', '1', 'B-mode Persistence', ''), + '7fdfxx77': ('UN', '1', 'B-mode Display Depth Start', ''), + '7fdfxx78': ('UN', '1', 'B-mode Display Depth End', ''), + '7fdfxx79': ('UN', '1', 'B-mode Res Mode', ''), + '7fdfxx7a': ('UN', '1', 'B-mode Preset Application', ''), + '7fdfxx7b': ('UN', '1', 'Image Spec Name', ''), + '7fdfxx7c': ('UN', '1', 'B Preset Image Look', ''), + '7fdfxx7d': ('UN', '1', 'B-mode Post Processing', ''), + '7fdfxx7e': ('UN', '1', 'B Edge', ''), + '7fdfxx7f': ('UN', '1', 'B Delta', ''), + '7fdfxx80': ('UN', '1', 'B-mode 1D Post Processing Curve', ''), + '7fdfxx81': ('UN', '1', 'B-mode Delta (ECRI) Map Diagonal', ''), + '7fdfxx82': ('UN', '1', 'Bytes Per Timestamp', ''), + '7fdfxx83': ('UN', '1', 'Microseconds in unit timestamp', ''), + '7fdfxx84': ('UN', '1', 'Start Stopwatch Timestamp', ''), + '7fdfxx85': ('UN', '1', 'Acoustic Frame Timestamp', ''), + '7fdfxx86': ('UN', '1', 'R-Wave Timestamp', ''), + '7fdfxx87': ('UN', '1', 'Last Destruction Timestamp', ''), + '7fdfxx88': ('UN', '1', 'Pixels Per Second', ''), + '7fdfxx89': ('UN', '1', 'ECG Reference Timestamp', ''), + '7fdfxx8a': ('UN', '1', 'ECG Sampling Interval (milliseconds)', ''), + '7fdfxx8b': ('UN', '1', 'ECG Sample Count', ''), + '7fdfxx8c': ('UN', '1', 'ECG Sample Size', ''), + '7fdfxx8d': ('UN', '1', 'ECG Data Value', ''), + '7fdfxx8e': ('UN', '1', 'Contrast/Active Image Indicator', ''), + '7fdfxx8f': ('UN', '1', 'Live Dual Mode Indicator', ''), + '7fdfxx90': ('UN', '1', '3DCard Clipset ID', ''), + '7fdfxx91': ('UN', '1', '3DCard HRWave Min', ''), + '7fdfxx92': ('UN', '1', '3DCard HRWave Max', ''), + '7fdfxx93': ('UN', '1', 'Perspective Capture Type', ''), + '7fdfxxf1': ('UN', '1', 'Trigger Mask.', ''), + '7fdfxxf2': ('UN', '1', 'Study Directory', ''), + '7fdfxxf3': ('UN', '1', 'Last Modify Date', ''), + '7fdfxxf4': ('UN', '1', 'Last Modify Time', ''), + '7fdfxxf5': ('UN', '1', 'Teaching Study', ''), + '7fdfxxf6': ('UN', '1', 'Series Base UID', ''), + }, + 'ACUSON:1.2.840.113680.1.0:7ffe': { + '7fdfxx00': ('UN', '1', 'Data Padding', ''), + }, + 'ADAC_IMG': { + '0019xx02': ('IS', '1', 'Ver200 ADAC Pegasys File Size', ''), + '0019xx10': ('LO', '2', 'ADAC Header Signature', ''), + '0019xx11': ('US', '1', 'Number of ADAC Headers', ''), + '0019xx12': ('IS', '1-n', 'ADAC Header/Image Sizes', ''), + '0019xx20': ('OB', '1', 'ADAC Pegasys Headers', ''), + '0019xx21': ('US', '1', 'Ver200 Number of ADAC Headers', ''), + '0019xx41': ('IS', '1-n', 'Ver200 ADAC Header/Image Size', ''), + '0019xx61': ('OB', '1', 'Ver200 ADAC Pegasys Headers', ''), + '7043xx00': ('SH', '1', 'Cardiac Stress State', ''), + '7043xx10': ('LO', '1', 'Philips NM Private Group', ''), + }, + 'AEGIS_DICOM_2.00': { + '0003xx00': ('US', '1-n', 'Unknown', ''), + '0005xx00': ('US', '1-n', 'Unknown', ''), + '0009xx00': ('US', '1-n', 'Unknown', ''), + '0019xx00': ('US', '1-n', 'Unknown', ''), + '0029xx00': ('US', '1-n', 'Unknown', ''), + '1369xx00': ('US', '1-n', 'Unknown', ''), + }, + 'AGFA': { + '0009xx10': ('LO', '1', 'Unknown', ''), + '0009xx11': ('LO', '1', 'Unknown', ''), + '0009xx13': ('LO', '1', 'Unknown', ''), + '0009xx14': ('LO', '1', 'Unknown', ''), + '0009xx15': ('LO', '1', 'Unknown', ''), + '0019xx10': ('SH', '1', 'Private Identification Code', ''), + '0019xx11': ('LO', '3', 'Identification Data (Note 2)', ''), + '0019xx13': ('LO', '1', 'Sensitometry Name', ''), + '0019xx14': ('ST', '3', 'Window/Level List (Note 3)', ''), + '0019xx15': ('LO', '1', 'Dose Monitoring List', ''), + '0019xx16': ('LO', '3', 'Other Info (Note 5)', ''), + '0019xx1a': ('LO', '1', 'Clipped Exposure Deviation', ''), + '0019xx1b': ('LO', '1', 'Logarithmic PLT Full Scale', ''), + '0019xx60': ('US', '1', 'Total number of series', ''), + '0019xx61': ('SH', '1', 'Session Number', ''), + '0019xx62': ('SH', '1', 'ID Station name', ''), + '0019xx65': ('US', '1', 'Number of images in study to be transmitted (only sent with autoverify: on)', ''), + '0019xx70': ('US', '1', 'Total number of images', ''), + '0019xx80': ('ST', '1', 'Geometrical Transformations', ''), + '0019xx81': ('ST', '1', 'Roam Origin', ''), + '0019xx82': ('US', '1', 'Zoom factor', ''), + '0019xx93': ('CS', '1', 'Status', ''), + }, + 'AGFA PACS Archive Mirroring 1.0': { + '0031xx00': ('CS', '1', 'Unknown', ''), + '0031xx01': ('UL', '1', 'Unknown', ''), + }, + 'AGFA-AG_HPState': { + '0071xx18': ('SQ', '1', 'Unknown', ''), + '0071xx19': ('SQ', '1', 'Unknown', ''), + '0071xx1a': ('SQ', '1', 'Unknown', ''), + '0071xx1c': ('SQ', '1', 'Unknown', ''), + '0071xx1e': ('SQ', '1', 'Unknown', ''), + '0071xx20': ('FL', '1-n', 'Unknown', ''), + '0071xx21': ('FD', '1-n', 'Unknown', ''), + '0071xx22': ('FD', '1-n', 'Unknown', ''), + '0071xx23': ('FD', '1-n', 'Unknown', ''), + '0071xx24': ('FD', '1', 'Unknown', ''), + '0073xx23': ('SH', '1', 'Unknown', ''), + '0073xx24': ('SQ', '1', 'Unknown', ''), + '0073xx28': ('SQ', '1', 'Unknown', ''), + '0073xx80': ('FL', '1', 'Unknown', ''), + '0075xx10': ('LO', '1', 'Unknown', ''), + '0087xx01': ('LO', '1', 'Unknown', ''), + '0087xx02': ('LO', '1', 'Unknown', ''), + }, + 'AGFA_ADC_Compact': { + '0019xx05': ('ST', '1', 'Data stream from cassette', ''), + '0019xx10': ('LO', '1', 'Private Identification Code', ''), + '0019xx30': ('ST', '1', 'Set of destination types', ''), + '0019xx40': ('ST', '1', 'Set of destination Ids', ''), + '0019xx50': ('ST', '1', 'Set of processing codes', ''), + '0019xx60': ('US', '1', 'Number of series in study', ''), + '0019xx61': ('US', '1', 'Session Number', ''), + '0019xx62': ('SH', '1', 'ID station name', ''), + '0019xx70': ('US', '1', 'Number of images in series', ''), + '0019xx71': ('US', '1', 'Break condition', ''), + '0019xx72': ('US', '1', 'Wait (or Hold) flag', ''), + '0019xx73': ('US', '1', 'ScanRes flag', ''), + '0019xx74': ('SH', '1', 'Operation code', ''), + '0019xx95': ('CS', '1', 'Image quality', ''), + }, + 'ALOKA:1.2.392.200039.103.2': { + '0009xx00': ('SH', '1', 'Unknown', ''), + '0009xx04': ('US', '1-n', 'Unknown', ''), + '0009xx06': ('US', '1-n', 'Unknown', ''), + '0009xx0a': ('SH', '1', 'Unknown', ''), + '0009xx20': ('CS', '1', 'Unknown', ''), + '0009xx22': ('CS', '1', 'Unknown', ''), + '0009xx24': ('CS', '1', 'Unknown', ''), + '0009xx26': ('IS', '1', 'Unknown', ''), + '0009xx28': ('IS', '1', 'Unknown', ''), + '0009xx2a': ('DS', '1', 'Unknown', ''), + '0009xx30': ('FD', '1', 'Unknown', ''), + '0009xx32': ('DS', '1', 'Unknown', ''), + '0009xx34': ('CS', '1', 'Unknown', ''), + '0019xx08': ('FD', '1', 'Unknown', ''), + '0019xx0c': ('CS', '1', 'Unknown', ''), + '0019xx0e': ('DS', '1', 'Unknown', ''), + '0019xx18': ('SL', '1', 'Unknown', ''), + '0019xx1a': ('SL', '1', 'Unknown', ''), + '0019xx40': ('SS', '1', 'Unknown', ''), + '0019xx46': ('US', '1', 'Unknown', ''), + '0019xx50': ('SL', '1', 'Unknown', ''), + '0019xx52': ('DS', '1', 'Unknown', ''), + '0019xx54': ('DS', '1', 'Unknown', ''), + '0019xx56': ('FD', '1', 'Unknown', ''), + }, + 'AMI Annotations_01': { + '3101xx10': ('SQ', '1', 'AMI Annotation Sequence (RET)', ''), + }, + 'AMI Annotations_02': { + '3101xx20': ('SQ', '1', 'AMI Annotation Sequence (RET)', ''), + }, + 'AMI ImageContextExt_01': { + '3107xxa0': ('CS', '1', 'AMI Window Function (RET)', ''), + '3107xxb0': ('DS', '1', 'AMI Window Slope (RET)', ''), + }, + 'AMI ImageContext_01': { + '3109xx10': ('CS', '1', 'AMI Window Invert (RET)', ''), + '3109xx20': ('IS', '1', 'AMI Window Center (RET)', ''), + '3109xx30': ('IS', '1', 'AMI Window Widith (RET)', ''), + '3109xx40': ('CS', '1', 'AMI Pixel Aspect Ratio Swap (RET)', ''), + '3109xx50': ('CS', '1', 'AMI Enable Averaging (RET)', ''), + '3109xx60': ('CS', '1', 'AMI Quality (RET)', ''), + '3109xx70': ('CS', '1', 'AMI Viewport Annotation Level (RET)', ''), + '3109xx80': ('CS', '1', 'AMI Show Image Annotation (RET)', ''), + '3109xx90': ('CS', '1', 'AMI Show Image Overlay (RET)', ''), + }, + 'AMI ImageTransform_01': { + '3107xx10': ('DS', '1', 'AMI Transformation Matrix (RET)', ''), + '3107xx20': ('DS', '1', 'AMI Center Offset (RET)', ''), + '3107xx30': ('DS', '1', 'AMI Magnification (RET)', ''), + '3107xx40': ('CS', '1', 'AMI Magnification Type (RET)', ''), + '3107xx50': ('DS', '1', 'AMI Displayed Area (RET)', ''), + '3107xx60': ('DS', '1', 'AMI Calibration Factor (RET)', ''), + }, + 'AMI Sequence AnnotElements_01': { + '3105xx10': ('DS', '1', 'AMI Annotation Element Position', ''), + '3105xx20': ('LT', '1', 'AMI Annotation Element Text', ''), + }, + 'AMI Sequence Annotations_01': { + '3103xx10': ('CS', '1', 'AMI Annotation Sequence (RET)', ''), + '3103xx20': ('UI', '1', 'AMI Annotation UID (RET)', ''), + '3103xx30': ('US', '1', 'AMI Annotation Color (RET)', ''), + '3103xx40': ('FD', '1', 'FontSize', ''), + '3103xx50': ('CS', '1', 'AMI Annotation Line Style (RET)', ''), + '3103xx60': ('SQ', '1', 'AMI Annotation Elements (RET)', ''), + '3103xx70': ('SH', '1', 'AMI Annotation Label (RET)', ''), + '3103xx80': ('PN', '1', 'AMI Annotation Creator (RET)', ''), + '3103xx90': ('PN', '1', 'AMI Annotation Modifiers (RET)', ''), + '3103xxa0': ('DA', '1', 'AMI Annotation Creation Date (RET)', ''), + '3103xxb0': ('TM', '1', 'AMI Annotation Creation Time (RET)', ''), + '3103xxc0': ('DA', '1', 'AMI Annotation Modification Dates (RET)', ''), + '3103xxd0': ('TM', '1', 'AMI Annotation Mofification Times (RET)', ''), + '3103xxe0': ('US', '1', 'AMI Annotation Frame Number (RET)', ''), + }, + 'AMI Sequence Annotations_02': { + '3103xx10': ('CS', '1', 'AMI Annotation Sequence (RET)', ''), + '3103xx20': ('UI', '1', 'AMI Annotation UID (RET)', ''), + '3103xx30': ('US', '1', 'AMI Annotation Color (RET)', ''), + '3103xx50': ('CS', '1', 'AMI Annotation Line Style (RET)', ''), + '3103xx60': ('SQ', '1', 'AMI Annotation Elements (RET)', ''), + '3103xx70': ('SH', '1', 'AMI Annotation Label (RET)', ''), + '3103xx80': ('PN', '1', 'AMI Annotation Creator (RET)', ''), + '3103xx90': ('PN', '1', 'AMI Annotation Modifiers (RET)', ''), + '3103xxa0': ('DA', '1', 'AMI Annotation Creation Date (RET)', ''), + '3103xxb0': ('TM', '1', 'AMI Annotation Creation Time (RET)', ''), + '3103xxc0': ('DA', '1', 'AMI Annotation Modification Dates (RET)', ''), + '3103xxd0': ('TM', '1', 'AMI Annotation Modification Times (RET)', ''), + '3103xxe0': ('US', '1', 'AMI Annotation Frame Number (RET)', ''), + }, + 'AMI StudyExtensions_01': { + '3111xx01': ('UL', '1', 'AMI Last Released Annot Label (RET)', ''), + }, + 'AMICAS0': { + '0023xx01': ('UI', '1', '', ''), + '0023xx08': ('US', '1', '', ''), + '0023xx10': ('US', '1', '', ''), + '0023xx16': ('SL', '1', '', ''), + }, + 'APEX_PRIVATE': { + '0027xx10': ('LO', '1', 'Private Creator', ''), + '0027xx11': ('DS', '1', 'Bed Position', ''), + }, + 'ATL HDI V1.0': { + '0009xx00': ('UN', '1', 'Private', ''), + '0009xx10': ('UN', '1', 'Private', ''), + '0009xx20': ('UN', '1', 'Private', ''), + '0009xx30': ('UN', '1', 'Private', ''), + '0009xx40': ('UN', '1', 'Private', ''), + '0009xx50': ('UN', '1', 'Private', ''), + '0009xx60': ('UN', '1', 'Private', ''), + '0009xx70': ('UN', '1', 'Private', ''), + '0009xx80': ('UN', '1', 'Private', ''), + '0009xx90': ('UN', '1', 'Private', ''), + '0009xx91': ('UN', '1', 'Private', ''), + '0029xx30': ('UN', '1', 'Loop Mode', ''), + '0029xx31': ('UN', '1', 'Trigger mode', ''), + '0029xx32': ('UN', '1', 'Number of Loops', ''), + '0029xx33': ('UN', '1', 'Loop Indexes', ''), + '0029xx34': ('UN', '1', 'Loop Heart Rates', ''), + '0029xx35': ('UN', '1', 'Medications', ''), + }, + 'ATL PRIVATE TAGS': { + '0029xx30': ('UL', '1', 'Loop Mode', ''), + '0029xx31': ('UL', '1', 'Trigger mode', ''), + '0029xx32': ('UL', '1', 'Number of Loops', ''), + '0029xx33': ('DS', '1-n', 'Loop Indexes', ''), + '0029xx34': ('DS', '1-n', 'Loop Heart Rates', ''), + '0029xx35': ('LO', '1', 'Medications', ''), + }, + 'Acuson X500': { + '0009xx20': ('UN', '1', '(a)View Name', ''), + '0009xx2a': ('UN', '1', 'View List', ''), + '0011xx10': ('UN', '1', 'Siemens Medical', ''), + '0011xx11': ('UN', '1', 'DIMAQ Software', ''), + '0011xx20': ('UN', '1', 'Private Data', ''), + '0011xx21': ('UN', '1', 'Private Data', ''), + '0013xx10': ('UN', '1', 'Siemens Medical', ''), + '0013xx11': ('UN', '1', 'DIMAQ Software', ''), + '0013xx20': ('UN', '1', 'Private Data', ''), + '0015xx10': ('UN', '1', 'Siemens Medical', ''), + '0015xx11': ('UN', '1', 'DIMAQ Software', ''), + '0015xx20': ('UN', '1', 'Private Data', ''), + '0017xx10': ('UN', '1', 'Siemens Medical', ''), + '0017xx11': ('UN', '1', 'DIMAQ Software', ''), + '0017xx20': ('UN', '1', 'Private Data', ''), + '0019xx20': ('UN', '1', 'Import Structured', ''), + }, + 'Agfa ADC NX': { + '0019xx09': ('SQ', '1', 'Unknown', ''), + '0019xxf5': ('CS', '1', 'Cassette Orientation', ''), + '0019xxf6': ('DS', '1', 'Plate Sensitivity', ''), + '0019xxf7': ('DS', '1', 'Plate Erasability', ''), + '0019xxf8': ('IS', '1', 'Unknown', ''), + '0019xxfe': ('CS', '1', 'Unknown', ''), + }, + 'AgilityRuntime': { + '0029xx11': ('CS', '1', 'Unknown', ''), + '0029xx12': ('US', '1', 'Unknown', ''), + '0029xx13': ('US', '1', 'Unknown', ''), + '0029xx14': ('US', '1', 'Unknown', ''), + '0029xx1f': ('US', '1', 'Unknown', ''), + }, + 'Applicare/Centricity Radiology Web/Version 1.0': { + '4109xx01': ('SH', '1', 'Mammography Laterality', ''), + '4109xx02': ('SH', '1', 'Mammography View Name', ''), + '4109xx03': ('SH', '1', 'Mammography View Modifier', ''), + }, + 'Applicare/Centricity Radiology Web/Version 2.0': { + '4111xx01': ('CS', '1', 'Secondary Spine Label', ''), + '4111xx02': ('IS', '1', 'Additional tags for Presentation State', ''), + }, + 'Applicare/Print/Version 5.1': { + '4101xx01': ('UL', '1', '=3). +# NOTE: This must be not be stored as a tuple internally, as some code logic +# (e.g. in write_AT of filewriter) checks if a value is a multi-value element +# So, represent as a single number and separate to (group, element) when necessary. + + +def Tag(arg, arg2=None): + """General function for creating a Tag in any of the standard forms: + e.g. Tag(0x00100010), Tag(0x10,0x10), Tag((0x10, 0x10)) + """ + if arg2 is not None: + arg = (arg, arg2) # act as if was passed a single tuple + if isinstance(arg, (tuple, list)): + if len(arg) != 2: + raise ValueError("Tag must be an int or a 2-tuple") + if isinstance(arg[0], (str, unicode)): # py2to3: unicode not needed in py3 + if not isinstance(arg[1], (str, unicode)): # py3: ditto + raise ValueError("Both arguments must be hex strings if one is") + arg = (int(arg[0], 16), int(arg[1], 16)) + if arg[0] > 0xFFFF or arg[1] > 0xFFFF: + raise OverflowError("Groups and elements of tags must each be <=2 byte integers") + long_value = (arg[0] << 16) | arg[1] + elif isinstance(arg, (str, unicode)): # py2to3: unicode not needed in pure py3 + raise ValueError("Tags cannot be instantiated from a single string") + else: # given a single number to use as a tag, as if (group, elem) already joined to a long + long_value = arg + if long_value > 0xFFFFFFFFL: + raise OverflowError("Tags are limited to 32-bit length; tag {0!r}".format(arg)) + return BaseTag(long_value) + +# py2to3: for some reason, the BaseTag class derived directly from long below +# was not converted by 2to3, but conversion does work with this next line +BaseTag_base_class = long # converted to "int" by 2to3 + + +class BaseTag(BaseTag_base_class): + """Class for storing the dicom (group, element) tag""" + # Override comparisons so can convert "other" to Tag as necessary + # See Ordering Comparisons at http://docs.python.org/dev/3.0/whatsnew/3.0.html + + def __lt__(self, other): + # Check if comparing with another Tag object; if not, create a temp one + if not isinstance(other, BaseTag): + try: + other = Tag(other) + except: + raise TypeError("Cannot compare Tag with non-Tag item") + return long(self) < long(other) + + def __eq__(self, other): + # Check if comparing with another Tag object; if not, create a temp one + if not isinstance(other, BaseTag): + try: + other = Tag(other) + except: + raise TypeError("Cannot compare Tag with non-Tag item") + return long(self) == long(other) + + def __ne__(self, other): + # Check if comparing with another Tag object; if not, create a temp one + if not isinstance(other, BaseTag): + try: + other = Tag(other) + except: + raise TypeError("Cannot compare Tag with non-Tag item") + return long(self) != long(other) + + # For python 3, any override of __cmp__ or __eq__ immutable requires + # explicit redirect of hash function to the parent class + # See http://docs.python.org/dev/3.0/reference/datamodel.html#object.__hash__ + __hash__ = long.__hash__ + + def __str__(self): + """String of tag value as (gggg, eeee)""" + return "({0:04x}, {1:04x})".format(self.group, self.element) + + __repr__ = __str__ + + @property + def group(self): + return self >> 16 + + @property + def element(self): + """Return the element part of the (group,element) tag""" + return self & 0xffff + elem = element # alternate syntax + + @property + def is_private(self): + """Return a boolean to indicate whether the tag is a private tag (odd group number)""" + return self.group % 2 == 1 + + +def TupleTag(group_elem): + """Fast factory for BaseTag object with known safe (group, element) tuple""" + long_value = group_elem[0] << 16 | group_elem[1] + return BaseTag(long_value) + +# Define some special tags: +# See PS 3.5-2008 section 7.5 (p.40) +ItemTag = TupleTag((0xFFFE, 0xE000)) # start of Sequence Item +ItemDelimiterTag = TupleTag((0xFFFE, 0xE00D)) # end of Sequence Item +SequenceDelimiterTag = TupleTag((0xFFFE, 0xE0DD)) # end of Sequence of undefined length diff -Nru pydicom-0.9.8/source/dicom/tagtools.py pydicom-0.9.9/source/dicom/tagtools.py --- pydicom-0.9.8/source/dicom/tagtools.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/tagtools.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,21 @@ +""" Tools to wrap dataset tag operations + +Usage: + + for tag in ds.keys(): + with valid_tag(tag): + # Anything that goes wrong here is annotated + """ + +from contextlib import contextmanager + + +@contextmanager +def tag_in_exception(tag): + """ Perform a protected read on the tag """ + try: + yield + except Exception as e: + err = 'Invalid tag {0}: {1}' + err = err.format(tag, str(e)) + raise type(e)(err) diff -Nru pydicom-0.9.8/source/dicom/test/all.bat pydicom-0.9.9/source/dicom/test/all.bat --- pydicom-0.9.8/source/dicom/test/all.bat 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/all.bat 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,16 @@ +echo OFF +echo all.bat +echo run pydicom test suite on all supported python versions +echo ------- python 2.6 ------------ +c:\python26\python run_tests.py +echo ------- python 2.7 ------------ +c:\python27\python run_tests.py + +REM Check location for each version -- to make sure are not running old pydicom versions +echo - +echo ----------------- +echo Check locations, make sure not pointing to old pydicom code: +echo Python 2.6 +c:\python26\python -c "import dicom; print dicom.__file__" +echo Python 2.7 +c:\python27\python -c "import dicom; print dicom.__file__" \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/test/__init__.py pydicom-0.9.9/source/dicom/test/__init__.py --- pydicom-0.9.8/source/dicom/test/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/__init__.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1 @@ +# __init__.py diff -Nru pydicom-0.9.8/source/dicom/test/performance/__init__.py pydicom-0.9.9/source/dicom/test/performance/__init__.py --- pydicom-0.9.8/source/dicom/test/performance/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/performance/__init__.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,2 @@ +# __init__.py +# Mark the folder as a python package diff -Nru pydicom-0.9.8/source/dicom/test/performance/raw_convert_test.py pydicom-0.9.9/source/dicom/test/performance/raw_convert_test.py --- pydicom-0.9.8/source/dicom/test/performance/raw_convert_test.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/performance/raw_convert_test.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,58 @@ +# raw_convert_test.py +"""Try reading a large RTSTRUCT file, profiling how much time it takes""" +# Copyright (c) 2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +# EDIT THIS SECTION -------------------------- +# to point to local temp directory + +tempfile = "/tmp/pydicom_stats" +read_filename = r"/Users/darcy/hg/pydicom/source/dicom/testfiles/RStest.dcm" +write_filename = "/tmp/write_test.dcm" + +import dicom +import cProfile +import pstats + + +def test_full_read(filename): + dataset = dicom.read_file(filename) + return dataset + + +def walkval(dataset, dataelem): + dataelem.value + + +def test_convert_from_raw(dataset): + # s = str(dataset) + dataset.walk(walkval) + + +def test_write_file(dataset, write_filename): + dataset.save_as(write_filename) + + +if __name__ == "__main__": + runs = ['ds=test_full_read(read_filename)', + 'test_convert_from_raw(ds)', + 'test_write_file(ds, write_filename)', + ] + for testrun in runs: + cProfile.run(testrun, tempfile) + p = pstats.Stats(tempfile) + print("---------------") + print(testrun) + print("---------------") + p.strip_dirs().sort_stats('time').print_stats(12) + + # Clear disk cache for next run? +# import sys +# if not on_windows: +# prompt= "Run purge command (linux/Mac OS X) to clear disk cache?(N):" +# answer = raw_input(prompt) +# if answer.lower() == "y": +# print "Running 'purge'. Please wait..." +# os.system("purge") diff -Nru pydicom-0.9.8/source/dicom/test/performance/time_test.py pydicom-0.9.9/source/dicom/test/performance/time_test.py --- pydicom-0.9.8/source/dicom/test/performance/time_test.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/performance/time_test.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,125 @@ +# time_test.py +"""Try reading large sets of files, profiling how much time it takes""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import os.path +import os +import sys +on_windows = sys.platform.startswith("win") + +# EDIT THIS SECTION -------------------------- +# to point to local temp directory, and to a set of >400 DICOM files of same size to work on +# I used images freely available from http://pcir.org +if on_windows: + tempfile = "c:/temp/pydicom_stats" + location_base = r"z:/testdicom/" +else: + tempfile = "/tmp/pydicom_stats" + location_base = r"/Users/darcy/testdicom/" + # location_base = r"/Volumes/Disk 1/testdicom/" # Network disk location +locations = [ + "77654033_19950903/77654033/19950903/CT2/", + "98890234_20010101/98890234/20010101/CT5/", + "98890234_20010101/98890234/20010101/CT6/", + "98890234_20010101/98890234/20010101/CT7/", +] +locations = [os.path.join(location_base, location) for location in locations] +# ------------------------------------------------------- +import glob +import dicom +from dicom.filereader import read_partial, _at_pixel_data +from io import BytesIO + +import cProfile +import pstats +import sys +import random + +rp = read_partial +filenames = [] +for location in locations: + loc_list = glob.glob(os.path.join(location, "*")) + filenames.extend((x for x in loc_list if not x.startswith("."))) + +assert len(filenames) >= 400, "Need at least 400 files" # unless change slices below + + +print() +random.shuffle(filenames) # to make sure no bias for any particular file + + +print("Sampling from %d files. Each test gets 100 distinct files" % len(filenames)) +print("Test order is randomized too...") + +# Give each test it's own set of files, to avoid reading something in cache from previous test +filenames1 = filenames[:100] # keep the time to a reasonable amount (~2-25 sec) +filenames2 = filenames[100:200] +filenames3 = filenames[200:300] +filenames4 = filenames[300:400] + + +def test_full_read(): + rf = dicom.read_file + datasets = [rf(fn) for fn in filenames1] + return datasets + + +def test_partial(): + rp = read_partial + [rp(open(fn, 'rb'), stop_when=_at_pixel_data) for fn in filenames2] + + +def test_mem_read_full(): + rf = dicom.read_file + str_io = BytesIO + memory_files = (str_io(open(fn, 'rb').read()) for fn in filenames3) + [rf(memory_file) for memory_file in memory_files] + + +def test_mem_read_small(): + rf = dicom.read_file + str_io = BytesIO # avoid global lookup, make local instead + memory_files = (str_io(open(fn, 'rb').read(4000)) for fn in filenames4) + [rf(memory_file) for memory_file in memory_files] + + +def test_python_read_files(): + [open(fn, 'rb').read() for fn in filenames4] + + +if __name__ == "__main__": + runs = ['datasets=test_full_read()', + # 'test_partial()', + # 'test_mem_read_full()', + # 'test_mem_read_small()', + 'test_python_read_files()', + ] + random.shuffle(runs) + for testrun in runs: + cProfile.run(testrun, tempfile) + p = pstats.Stats(tempfile) + print("---------------") + print(testrun) + print("---------------") + p.strip_dirs().sort_stats('time').print_stats(5) + print("Confirming file read worked -- check for data elements near end") + try: + image_sizes = [len(ds.PixelData) for ds in datasets] # NOQA + except Exception as e: + print("Failed to access dataset data for all files\nError:" + str(e)) + else: + print("Reads checked ok.") + + # Clear disk cache for next run? + if not on_windows: + prompt = "Run purge command (linux/Mac OS X) to clear disk cache?...(N):" + if sys.version_info[0] > 2: + answer = input(prompt) + else: + answer = raw_input(prompt) + if answer.lower() == "y": + print("Running 'purge'. Please wait...") + os.system("purge") diff -Nru pydicom-0.9.8/source/dicom/test/run_tests.py pydicom-0.9.9/source/dicom/test/run_tests.py --- pydicom-0.9.8/source/dicom/test/run_tests.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/run_tests.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,56 @@ +# run_tests.py +"""Call all the unit test files in the test directory starting with 'test'""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import os +import os.path +import sys +import unittest + +# Get the directory test_dir where the test scripts are +from pkg_resources import Requirement, resource_filename +test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/test") + + +class MyTestLoader(object): + def loadTestsFromNames(self, *args): + # Simplest to change to directory where test_xxx.py files are + save_dir = os.getcwd() + if test_dir: + os.chdir(test_dir) + filenames = os.listdir(".") + module_names = [f[:-3] for f in filenames + if f.startswith("test") and f.endswith(".py")] + + # Load all the tests + suite = unittest.TestSuite() + for module_name in module_names: + module_dotted_name = "dicom.test." + module_name + test = unittest.defaultTestLoader.loadTestsFromName( + module_dotted_name) + suite.addTest(test) + os.chdir(save_dir) + return suite + +if __name__ == "__main__": + # Get the tests -- in format used by Distribute library + # to run under 'python setup.py test' + suite = MyTestLoader().loadTestsFromNames() + + # Run the tests + verbosity = 1 + args = sys.argv + if len(args) > 1 and (args[1] == "-v" or args[1] == "--verbose"): + verbosity = 2 + runner = unittest.TextTestRunner(verbosity=verbosity) + + # Switch directories to test DICOM files, used by many of the tests + save_dir = os.getcwd() + testfiles_dir = resource_filename(Requirement.parse("pydicom"), + "dicom/testfiles") + os.chdir(testfiles_dir) + runner.run(suite) + os.chdir(save_dir) diff -Nru pydicom-0.9.8/source/dicom/test/shell_all pydicom-0.9.9/source/dicom/test/shell_all --- pydicom-0.9.8/source/dicom/test/shell_all 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/shell_all 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,17 @@ +#!/bin/bash +# all.sh +echo shell_all +echo run pydicom test suite on all supported python versions +echo ------- python 2.6 ------------ +python2.6 run_tests.py +echo ------- python 2.7 ------------ +python2.7 run_tests.py + +# Check location for each version -- to make sure are not running old pydicom versions +echo - +echo ----------------- +echo Check locations, make sure not pointing to old pydicom code: +echo Python 2.6 +python2.6 -c "import dicom;print dicom.__file__" +echo Python 2.7 +python2.7 -c "import dicom;print dicom.__file__" diff -Nru pydicom-0.9.8/source/dicom/test/test_charset.py pydicom-0.9.9/source/dicom/test/test_charset.py --- pydicom-0.9.8/source/dicom/test/test_charset.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_charset.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,73 @@ +# -*- coding: latin_1 -*- +# test_charset.py +"""unittest cases for dicom.charset module""" +# Copyright (c) 2008 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +import dicom +import os.path + +from pkg_resources import Requirement, resource_filename +testcharset_dir = resource_filename(Requirement.parse("pydicom"), + "dicom/testcharsetfiles") + +latin1_file = os.path.join(testcharset_dir, "chrFren.dcm") +jp_file = os.path.join(testcharset_dir, "chrH31.dcm") +multiPN_file = os.path.join(testcharset_dir, "chrFrenMulti.dcm") +sq_encoding_file = os.path.join(testcharset_dir, "chrSQEncoding.dcm") + +test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/testfiles") +normal_file = os.path.join(test_dir, "CT_small.dcm") + + +class charsetTests(unittest.TestCase): + def testLatin1(self): + """charset: can read and decode latin_1 file........................""" + ds = dicom.read_file(latin1_file) + ds.decode() + # Make sure don't get unicode encode error on converting to string + expected = u'Buc^J\xe9r\xf4me' + got = ds.PatientName + self.assertEqual(expected, got, + "Expected %r, got %r" % (expected, got)) + + def testNestedCharacterSets(self): + """charset: can read and decode SQ with different encodings.........""" + ds = dicom.read_file(sq_encoding_file) + ds.decode() + # These datasets inside of the SQ cannot be decoded with default_encoding + # OR UTF-8 (the parent dataset's encoding). Instead, we make sure that it + # is decoded using the (0008,0005) tag of the dataset + expected = u'\uff94\uff8f\uff80\uff9e^\uff80\uff9b\uff73=\u5c71\u7530^\u592a\u90ce=\u3084\u307e\u3060^\u305f\u308d\u3046' + got = ds[0x32, 0x1064][0].PatientName + self.assertEqual(expected, got, + "Expected %r, got %r" % (expected, got)) + + def testStandardFile(self): + """charset: can read and decode standard file without special char..""" + ds = dicom.read_file(normal_file) + ds.decode() + + def testMultiPN(self): + """charset: can decode file with multi-valued data elements.........""" + ds = dicom.read_file(multiPN_file) + ds.decode() + + +if __name__ == "__main__": + # This is called if run alone, but not if loaded through run_tests.py + # If not run from the directory where the sample images are, + # then need to switch there + import sys + import os + import os.path + dir_name = os.path.dirname(sys.argv[0]) + save_dir = os.getcwd() + if dir_name: + os.chdir(dir_name) + os.chdir("../testfiles") + unittest.main() + os.chdir(save_dir) diff -Nru pydicom-0.9.8/source/dicom/test/test_dataelem.py pydicom-0.9.9/source/dicom/test/test_dataelem.py --- pydicom-0.9.8/source/dicom/test/test_dataelem.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_dataelem.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,68 @@ +# test_dataelem.py +"""unittest cases for dicom.dataelem module""" +# Copyright (c) 2008 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +# Many tests of DataElement class are implied in test_dataset also + +import unittest +from dicom.dataelem import DataElement +from dicom.dataelem import RawDataElement, DataElement_from_raw +from dicom.tag import Tag +from dicom.dataset import Dataset +from dicom.UID import UID + + +class DataElementTests(unittest.TestCase): + def setUp(self): + self.data_elementSH = DataElement((1, 2), "SH", "hello") + self.data_elementIS = DataElement((1, 2), "IS", "42") + self.data_elementDS = DataElement((1, 2), "DS", "42.00001") + self.data_elementMulti = DataElement((1, 2), "DS", + ['42.1', '42.2', '42.3']) + + def testVM1(self): + """DataElement: return correct value multiplicity for VM > 1........""" + VM = self.data_elementMulti.VM + self.assertEqual(VM, 3, + "Wrong Value Multiplicity, expected 3, got %i" % VM) + + def testVM2(self): + """DataElement: return correct value multiplicity for VM = 1........""" + VM = self.data_elementIS.VM + self.assertEqual(VM, 1, + "Wrong Value Multiplicity, expected 1, got %i" % VM) + + def testBackslash(self): + """DataElement: String with '\\' sets multi-valued data_element.""" + data_element = DataElement((1, 2), "DS", r"42.1\42.2\42.3") + self.assertEqual(data_element.VM, 3, "Did not get a mult-valued value") + + def testUID(self): + """DataElement: setting or changing UID results in UID type.........""" + ds = Dataset() + ds.TransferSyntaxUID = "1.2.3" + self.assertTrue(isinstance(ds.TransferSyntaxUID, UID), + "Assignment to UID did not create UID class") + ds.TransferSyntaxUID += ".4.5.6" + self.assertTrue(isinstance(ds.TransferSyntaxUID, UID), + "+= to UID did not keep as UID class") + + +class RawDataElementTests(unittest.TestCase): + def setUp(self): + # raw data element -> tag VR length value + # value_tell is_implicit_VR is_little_endian' + # Unknown (not in DICOM dict), non-private, non-group 0 for this test + self.raw1 = RawDataElement(Tag(0x88880002), None, 4, 0x1111, + 0, True, True) + + def testKeyError(self): + """RawDataElement: conversion of unknown tag throws KeyError........""" + self.assertRaises(KeyError, DataElement_from_raw, self.raw1) + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_dataset.py pydicom-0.9.9/source/dicom/test/test_dataset.py --- pydicom-0.9.8/source/dicom/test/test_dataset.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_dataset.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,318 @@ +# test_dataset.py +"""unittest cases for dicom.dataset module""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom.dataset import Dataset, PropertyError +from dicom.dataelem import DataElement, RawDataElement +from dicom.tag import Tag +from dicom.sequence import Sequence +from dicom import in_py3 + + +class DatasetTests(unittest.TestCase): + def failUnlessRaises(self, excClass, callableObj, *args, **kwargs): + """Redefine unittest Exception test to return the exception object""" + # from http://stackoverflow.com/questions/88325/ + # how-do-i-unit-test-an-init-method-of-a-python-class-with-assertraises + try: + callableObj(*args, **kwargs) + except excClass as excObj: + return excObj # Actually return the exception object + else: + if hasattr(excClass, '__name__'): + excName = excClass.__name__ + else: + excName = str(excClass) + raise self.failureException("{0:s} not raised".format(excName)) + + def failUnlessExceptionArgs(self, start_args, excClass, callableObj): + """Check the expected args were returned from an exception + start_args -- a string with the start of the expected message + """ + if in_py3: + with self.assertRaises(excClass) as cm: + callableObj() + + excObj = cm.exception + else: + excObj = self.failUnlessRaises(excClass, callableObj) + + msg = "\nExpected Exception message:\n" + start_args + msg += "\nGot:\n" + excObj.args[0] + self.assertTrue(excObj.args[0].startswith(start_args), msg) + + def testAttributeErrorInProperty(self): + """Dataset: AttributeError in property raises actual error message..""" + # This comes from bug fix for issue 42 + # First, fake enough to try the pixel_array property + ds = Dataset() + ds.file_meta = Dataset() + ds.PixelData = 'xyzlmnop' + + def callable_pixel_array(): + ds.pixel_array + + attribute_error_msg = "AttributeError in pixel_array property: " + \ + "Dataset does not have attribute 'TransferSyntaxUID'" + self.failUnlessExceptionArgs(attribute_error_msg, + PropertyError, callable_pixel_array) + + def testTagExceptionPrint(self): + # When printing datasets, a tag number should appear in error + # messages + ds = Dataset() + ds.PatientID = "123456" # Valid value + ds.SmallestImagePixelValue = 0 # Invalid value + + expected_msg = "Invalid tag (0028, 0106): object of type 'int' has no len()" + + self.failUnlessExceptionArgs(expected_msg, TypeError, lambda: str(ds)) + + def testTagExceptionWalk(self): + # When recursing through dataset, a tag number should appear in + # error messages + ds = Dataset() + ds.PatientID = "123456" # Valid value + ds.SmallestImagePixelValue = 0 # Invalid value + + expected_msg = "Invalid tag (0028, 0106): object of type 'int' has no len()" + + callback = lambda dataset, data_element: str(data_element) + func = lambda: ds.walk(callback) + + self.failUnlessExceptionArgs(expected_msg, TypeError, func) + + def dummy_dataset(self): + # This dataset is used by many of the tests + ds = Dataset() + ds.add_new((0x300a, 0x00b2), "SH", "unit001") # TreatmentMachineName + return ds + + def testSetNewDataElementByName(self): + """Dataset: set new data_element by name............................""" + ds = Dataset() + ds.TreatmentMachineName = "unit #1" + data_element = ds[0x300a, 0x00b2] + self.assertEqual(data_element.value, "unit #1", + "Unable to set data_element by name") + self.assertEqual(data_element.VR, "SH", + "data_element not the expected VR") + + def testSetExistingDataElementByName(self): + """Dataset: set existing data_element by name.......................""" + ds = self.dummy_dataset() + ds.TreatmentMachineName = "unit999" # change existing value + self.assertEqual(ds[0x300a, 0x00b2].value, "unit999") + + def testSetNonDicom(self): + """Dataset: can set class instance property (non-dicom).............""" + ds = Dataset() + ds.SomeVariableName = 42 + has_it = hasattr(ds, 'SomeVariableName') + self.assertTrue(has_it, "Variable did not get created") + if has_it: + self.assertEqual(ds.SomeVariableName, 42, "There, but wrong value") + + def testMembership(self): + """Dataset: can test if item present by 'if in dataset'......""" + ds = self.dummy_dataset() + self.assertTrue('TreatmentMachineName' in ds, "membership test failed") + self.assertTrue('Dummyname' not in ds, "non-member tested as member") + + def testContains(self): + """Dataset: can test if item present by 'if in dataset'.......""" + ds = self.dummy_dataset() + self.assertTrue((0x300a, 0xb2) in ds, "membership test failed") + self.assertTrue([0x300a, 0xb2] in ds, + "membership test failed when list used") + self.assertTrue(0x300a00b2 in ds, "membership test failed") + self.assertTrue(not (0x10, 0x5f) in ds, "non-member tested as member") + + def testGetExists1(self): + """Dataset: dataset.get() returns an existing item by name..........""" + ds = self.dummy_dataset() + unit = ds.get('TreatmentMachineName', None) + self.assertEqual(unit, 'unit001', + "dataset.get() did not return existing member by name") + + def testGetExists2(self): + """Dataset: dataset.get() returns an existing item by long tag......""" + ds = self.dummy_dataset() + unit = ds.get(0x300A00B2, None).value + self.assertEqual(unit, 'unit001', + "dataset.get() did not return existing member by long tag") + + def testGetExists3(self): + """Dataset: dataset.get() returns an existing item by tuple tag.....""" + ds = self.dummy_dataset() + unit = ds.get((0x300A, 0x00B2), None).value + self.assertEqual(unit, 'unit001', + "dataset.get() did not return existing member by tuple tag") + + def testGetExists4(self): + """Dataset: dataset.get() returns an existing item by Tag...........""" + ds = self.dummy_dataset() + unit = ds.get(Tag(0x300A00B2), None).value + self.assertEqual(unit, 'unit001', + "dataset.get() did not return existing member by tuple tag") + + def testGetDefault1(self): + """Dataset: dataset.get() returns default for non-existing name ....""" + ds = self.dummy_dataset() + not_there = ds.get('NotAMember', "not-there") + msg = ("dataset.get() did not return default value " + "for non-member by name") + + self.assertEqual(not_there, "not-there", msg) + + def testGetDefault2(self): + """Dataset: dataset.get() returns default for non-existing tuple tag""" + ds = self.dummy_dataset() + not_there = ds.get((0x9999, 0x9999), "not-there") + msg = ("dataset.get() did not return default value" + " for non-member by tuple tag") + self.assertEqual(not_there, "not-there", msg) + + def testGetDefault3(self): + """Dataset: dataset.get() returns default for non-existing long tag.""" + ds = self.dummy_dataset() + not_there = ds.get(0x99999999, "not-there") + msg = ("dataset.get() did not return default value" + " for non-member by long tag") + self.assertEqual(not_there, "not-there", msg) + + def testGetDefault4(self): + """Dataset: dataset.get() returns default for non-existing Tag......""" + ds = self.dummy_dataset() + not_there = ds.get(Tag(0x99999999), "not-there") + msg = ("dataset.get() did not return default value" + " for non-member by Tag") + self.assertEqual(not_there, "not-there", msg) + + def testGetFromRaw(self): + """Dataset: get(tag) returns same object as ds[tag] for raw element.""" + # This came from issue 88, where get(tag#) returned a RawDataElement, + # while get(name) converted to a true DataElement + test_tag = 0x100010 + test_elem = RawDataElement(Tag(test_tag), 'PN', 4, b'test', + 0, True, True) + ds = Dataset({Tag(test_tag): test_elem}) + by_get = ds.get(test_tag) + by_item = ds[test_tag] + + msg = ("Dataset.get() returned different objects for ds.get(tag) " + "and ds[tag]:\nBy get():%r\nBy ds[tag]:%r\n") + self.assertEqual(by_get, by_item, msg % (by_get, by_item)) + + def test__setitem__(self): + """Dataset: if set an item, it must be a DataElement instance.......""" + def callSet(): + # common error - set data_element instead of data_element.value + ds[0x300a, 0xb2] = "unit1" + + ds = Dataset() + self.assertRaises(TypeError, callSet) + + def test_matching_tags(self): + """Dataset: key and data_element.tag mismatch raises ValueError.....""" + def set_wrong_tag(): + ds[0x10, 0x10] = data_element + ds = Dataset() + data_element = DataElement((0x300a, 0x00b2), "SH", "unit001") + self.assertRaises(ValueError, set_wrong_tag) + + def test_NamedMemberUpdated(self): + """Dataset: if set data_element by tag, name also reflects change...""" + ds = self.dummy_dataset() + ds[0x300a, 0xb2].value = "moon_unit" + self.assertEqual(ds.TreatmentMachineName, 'moon_unit', + "Member not updated") + + def testUpdate(self): + """Dataset: update() method works with tag or name..................""" + ds = self.dummy_dataset() + pat_data_element = DataElement((0x10, 0x12), 'PN', 'Johnny') + ds.update({'PatientName': 'John', (0x10, 0x12): pat_data_element}) + self.assertEqual(ds[0x10, 0x10].value, 'John', + "named data_element not set") + self.assertEqual(ds[0x10, 0x12].value, 'Johnny', "set by tag failed") + + def testDir(self): + """Dataset: dir() returns sorted list of named data_elements........""" + ds = self.dummy_dataset() + ds.PatientName = "name" + ds.PatientID = "id" + ds.NonDicomVariable = "junk" + ds.add_new((0x18, 0x1151), "IS", 150) # X-ray Tube Current + ds.add_new((0x1111, 0x123), "DS", "42.0") # private - no name in dir() + expected = ['PatientID', 'PatientName', 'TreatmentMachineName', + 'XRayTubeCurrent'] + self.assertEqual(ds.dir(), expected, + "dir() returned %s, expected %s" % (str(ds.dir()), str(expected))) + + def testDeleteDicomAttr(self): + """Dataset: delete DICOM attribute by name..........................""" + def testAttribute(): + ds.TreatmentMachineName + + ds = self.dummy_dataset() + del ds.TreatmentMachineName + self.assertRaises(AttributeError, testAttribute) + + def testDeleteOtherAttr(self): + """Dataset: delete non-DICOM attribute by name......................""" + ds = self.dummy_dataset() + ds.meaningoflife = 42 + del ds.meaningoflife + + def testDeleteDicomAttrWeDontHave(self): + """Dataset: try delete of missing DICOM attribute...................""" + def try_delete(): + del ds.PatientName + ds = self.dummy_dataset() + self.assertRaises(AttributeError, try_delete) + + def testDeleteItemLong(self): + """Dataset: delete item by tag number (long)...................""" + ds = self.dummy_dataset() + del ds[0x300a00b2] + + def testDeleteItemTuple(self): + """Dataset: delete item by tag number (tuple)..................""" + ds = self.dummy_dataset() + del ds[0x300a, 0x00b2] + + def testDeleteNonExistingItem(self): + """Dataset: raise KeyError for non-existing item delete........""" + ds = self.dummy_dataset() + + def try_delete(): + del ds[0x10, 0x10] + self.assertRaises(KeyError, try_delete) + + +class DatasetElementsTests(unittest.TestCase): + """Test valid assignments of data elements""" + def setUp(self): + self.ds = Dataset() + self.sub_ds1 = Dataset() + self.sub_ds2 = Dataset() + + def testSequenceAssignment(self): + """Assignment to SQ works only if valid Sequence assigned......""" + def try_non_Sequence(): + self.ds.ConceptCodeSequence = [1, 2, 3] + msg = "Assigning non-sequence to SQ data element did not raise error" + self.assertRaises(TypeError, try_non_Sequence, msg=msg) + # check also that assigning proper sequence *does* work + self.ds.ConceptCodeSequence = [self.sub_ds1, self.sub_ds2] + self.assertTrue(isinstance(self.ds.ConceptCodeSequence, Sequence), + "Sequence assignment did not result in Sequence type") + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_dictionary.py pydicom-0.9.9/source/dicom/test/test_dictionary.py --- pydicom-0.9.8/source/dicom/test/test_dictionary.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_dictionary.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,46 @@ +# test_dictionary.py +"""Test suite for dicom_dictionary.py""" +# Copyright (c) 2008 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom.tag import Tag +from dicom.datadict import CleanName, all_names_for_tag, dictionary_description + + +class DictTests(unittest.TestCase): + def testCleanName(self): + """dicom_dictionary: CleanName returns correct strings.............""" + self.assertTrue(CleanName(0x00100010) == "PatientsName") + self.assertTrue(CleanName(Tag((0x0010, 0x0010))) == "PatientsName") + + def testTagNotFound(self): + """dicom_dictionary: CleanName returns blank string for unknown tag""" + self.assertTrue(CleanName(0x99991111) == "") + + def testNameFinding(self): + """dicom_dictionary: get long and short names for a data_element name""" + names = all_names_for_tag(Tag(0x300a00b2)) # Treatment Machine Name + expected = ['TreatmentMachineName'] + self.assertEqual(names, expected, "Expected %s, got %s" % (expected, names)) + names = all_names_for_tag(Tag(0x300A0120)) + expected = ['BeamLimitingDeviceAngle', 'BLDAngle'] + self.assertEqual(names, expected, "Expected %s, got %s" % (expected, names)) + + def testRepeaters(self): + """dicom_dictionary: Tags with "x" return correct dict info........""" + self.assertEqual(dictionary_description(0x280400), 'Transform Label') + self.assertEqual(dictionary_description(0x280410), 'Rows For Nth Order Coefficients') + + +class PrivateDictTests(unittest.TestCase): + def testPrivate1(self): + """private dict: """ + self.assertTrue(CleanName(0x00100010) == "PatientsName") + self.assertTrue(CleanName(Tag((0x0010, 0x0010))) == "PatientsName") + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_filereader.py pydicom-0.9.9/source/dicom/test/test_filereader.py --- pydicom-0.9.8/source/dicom/test/test_filereader.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_filereader.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,443 @@ +# test_filereader.py +"""unittest tests for dicom.filereader module""" +# Copyright (c) 2010-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import sys +import os +import os.path +import unittest +from io import BytesIO + +import shutil +# os.stat is only available on Unix and Windows XXX Mac? +# Not sure if on other platforms the import fails, or the call to it?? +stat_available = True +try: + from os import stat # NOQA +except: + stat_available = False + +have_numpy = True +try: + import numpy # NOQA +except: + have_numpy = False +from dicom.filereader import read_file +from dicom.errors import InvalidDicomError +from dicom.tag import Tag, TupleTag +import dicom.valuerep +import gzip + +from dicom.test.warncheck import assertWarns + +from pkg_resources import Requirement, resource_filename +test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/testfiles") + +rtplan_name = os.path.join(test_dir, "rtplan.dcm") +rtdose_name = os.path.join(test_dir, "rtdose.dcm") +ct_name = os.path.join(test_dir, "CT_small.dcm") +mr_name = os.path.join(test_dir, "MR_small.dcm") +jpeg2000_name = os.path.join(test_dir, "JPEG2000.dcm") +jpeg_lossy_name = os.path.join(test_dir, "JPEG-lossy.dcm") +jpeg_lossless_name = os.path.join(test_dir, "JPEG-LL.dcm") +deflate_name = os.path.join(test_dir, "image_dfl.dcm") +rtstruct_name = os.path.join(test_dir, "rtstruct.dcm") +priv_SQ_name = os.path.join(test_dir, "priv_SQ.dcm") +nested_priv_SQ_name = os.path.join(test_dir, "nested_priv_SQ.dcm") +no_meta_group_length = os.path.join(test_dir, "no_meta_group_length.dcm") +gzip_name = os.path.join(test_dir, "zipMR.gz") + +dir_name = os.path.dirname(sys.argv[0]) +save_dir = os.getcwd() + + +def isClose(a, b, epsilon=0.000001): + """Compare within some tolerance, to avoid machine roundoff differences""" + try: + a.append # see if is a list + except: # (is not) + return abs(a - b) < epsilon + else: + if len(a) != len(b): + return False + for ai, bi in zip(a, b): + if abs(ai - bi) > epsilon: + return False + return True + + +class ReaderTests(unittest.TestCase): + def testRTPlan(self): + """Returns correct values for sample data elements in test RT Plan file""" + plan = read_file(rtplan_name) + beam = plan.BeamSequence[0] + cp0, cp1 = beam.ControlPointSequence # if not two controlpoints, then this would raise exception + + self.assertEqual(beam.TreatmentMachineName, "unit001", "Incorrect unit name") + self.assertEqual(beam.TreatmentMachineName, beam[0x300a, 0x00b2].value, + "beam TreatmentMachineName does not match the value accessed by tag number") + + got = cp1.ReferencedDoseReferenceSequence[0].CumulativeDoseReferenceCoefficient + DS = dicom.valuerep.DS + expected = DS('0.9990268') + self.assertTrue(got == expected, + "Cum Dose Ref Coeff not the expected value (CP1, Ref'd Dose Ref") + got = cp0.BeamLimitingDevicePositionSequence[0].LeafJawPositions + self.assertTrue(got[0] == DS('-100') and got[1] == DS('100.0'), + "X jaws not as expected (control point 0)") + + def testRTDose(self): + """Returns correct values for sample data elements in test RT Dose file""" + dose = read_file(rtdose_name) + self.assertEqual(dose.FrameIncrementPointer, Tag((0x3004, 0x000c)), + "Frame Increment Pointer not the expected value") + self.assertEqual(dose.FrameIncrementPointer, dose[0x28, 9].value, + "FrameIncrementPointer does not match the value accessed by tag number") + + # try a value that is nested the deepest (so deep I break it into two steps!) + fract = dose.ReferencedRTPlanSequence[0].ReferencedFractionGroupSequence[0] + beamnum = fract.ReferencedBeamSequence[0].ReferencedBeamNumber + self.assertEqual(beamnum, 1, "Beam number not the expected value") + + def testCT(self): + """Returns correct values for sample data elements in test CT file....""" + ct = read_file(ct_name) + self.assertEqual(ct.file_meta.ImplementationClassUID, '1.3.6.1.4.1.5962.2', + "ImplementationClassUID not the expected value") + self.assertEqual(ct.file_meta.ImplementationClassUID, + ct.file_meta[0x2, 0x12].value, + "ImplementationClassUID does not match the value accessed by tag number") + # (0020, 0032) Image Position (Patient) [-158.13580300000001, -179.035797, -75.699996999999996] + got = ct.ImagePositionPatient + DS = dicom.valuerep.DS + expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] + self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected." + "got {0}, expected {1}".format(got, expected)) + + self.assertEqual(ct.Rows, 128, "Rows not 128") + self.assertEqual(ct.Columns, 128, "Columns not 128") + self.assertEqual(ct.BitsStored, 16, "Bits Stored not 16") + self.assertEqual(len(ct.PixelData), 128 * 128 * 2, "Pixel data not expected length") + + # Also test private elements name can be resolved: + expected = "[Duration of X-ray on]" + got = ct[(0x0043, 0x104e)].name + msg = "Mismatch in private tag name, expected '%s', got '%s'" + self.assertEqual(expected, got, msg % (expected, got)) + + # Check that can read pixels - get last one in array + if have_numpy: + expected = 909 + got = ct.pixel_array[-1][-1] + msg = "Did not get correct value for last pixel: expected %d, got %r" % (expected, got) + self.assertEqual(expected, got, msg) + else: + print "**Numpy not available -- pixel array test skipped**" + + def testNoForce(self): + """Raises exception if missing DICOM header and force==False...........""" + self.assertRaises(InvalidDicomError, read_file, rtstruct_name) + + def testRTstruct(self): + """Returns correct values for sample elements in test RTSTRUCT file....""" + # RTSTRUCT test file has complex nested sequences -- see rtstruct.dump file + # Also has no DICOM header ... so tests 'force' argument of read_file + + rtss = read_file(rtstruct_name, force=True) + expected = '1.2.840.10008.1.2' # implVR little endian + got = rtss.file_meta.TransferSyntaxUID + msg = "Expected transfer syntax %r, got %r" % (expected, got) + self.assertEqual(expected, got, msg) + frame_of_ref = rtss.ReferencedFrameOfReferenceSequence[0] + study = frame_of_ref.RTReferencedStudySequence[0] + uid = study.RTReferencedSeriesSequence[0].SeriesInstanceUID + expected = "1.2.826.0.1.3680043.8.498.2010020400001.2.1.1" + msg = "Expected Reference Series UID '%s', got '%s'" % (expected, uid) + self.assertEqual(expected, uid, msg) + + got = rtss.ROIContourSequence[0].ContourSequence[2].ContourNumber + expected = 3 + msg = "Expected Contour Number %d, got %r" % (expected, got) + self.assertEqual(expected, got, msg) + + obs_seq0 = rtss.RTROIObservationsSequence[0] + got = obs_seq0.ROIPhysicalPropertiesSequence[0].ROIPhysicalProperty + expected = 'REL_ELEC_DENSITY' + msg = "Expected Physical Property '%s', got %r" % (expected, got) + self.assertEqual(expected, got, msg) + + def testDir(self): + """Returns correct dir attributes for both Dataset and DICOM names (python >= 2.6)..""" + # Only python >= 2.6 calls __dir__ for dir() call + rtss = read_file(rtstruct_name, force=True) + # sample some expected 'dir' values + got_dir = dir(rtss) + expect_in_dir = ['pixel_array', 'add_new', 'ROIContourSequence', + 'StructureSetDate', '__sizeof__'] + expect_not_in_dir = ['RemovePrivateTags', 'AddNew', 'GroupDataset'] # remove in v1.0 + for name in expect_in_dir: + self.assertTrue(name in got_dir, "Expected name '%s' in dir()" % name) + for name in expect_not_in_dir: + self.assertTrue(name not in got_dir, "Unexpected name '%s' in dir()" % name) + # Now check for some items in dir() of a nested item + roi0 = rtss.ROIContourSequence[0] + got_dir = dir(roi0) + expect_in_dir = ['pixel_array', 'add_new', 'ReferencedROINumber', + 'ROIDisplayColor', '__sizeof__'] + for name in expect_in_dir: + self.assertTrue(name in got_dir, "Expected name '%s' in dir()" % name) + + def testMR(self): + """Returns correct values for sample data elements in test MR file.....""" + mr = read_file(mr_name) + # (0010, 0010) Patient's Name 'CompressedSamples^MR1' + mr.decode() + self.assertEqual(mr.PatientName, 'CompressedSamples^MR1', "Wrong patient name") + self.assertEqual(mr.PatientName, mr[0x10, 0x10].value, + "Name does not match value found when accessed by tag number") + got = mr.PixelSpacing + DS = dicom.valuerep.DS + expected = [DS('0.3125'), DS('0.3125')] + self.assertTrue(got == expected, "Wrong pixel spacing") + + def testDeflate(self): + """Returns correct values for sample data elements in test compressed (zlib deflate) file""" + # Everything after group 2 is compressed. If we can read anything else, the decompression must have been ok. + ds = read_file(deflate_name) + got = ds.ConversionType + expected = "WSD" + self.assertEqual(got, expected, "Attempted to read deflated file data element Conversion Type, expected '%s', got '%s'" % (expected, got)) + + def testNoPixelsRead(self): + """Returns all data elements before pixels using stop_before_pixels=False""" + # Just check the tags, and a couple of values + ctpartial = read_file(ct_name, stop_before_pixels=True) + ctpartial_tags = sorted(ctpartial.keys()) + ctfull = read_file(ct_name) + ctfull_tags = sorted(ctfull.keys()) + msg = "Tag list of partial CT read (except pixel tag and padding) did not match full read" + msg += "\nExpected: %r\nGot %r" % (ctfull_tags[:-2], ctpartial_tags) + missing = [Tag(0x7fe0, 0x10), Tag(0xfffc, 0xfffc)] + self.assertEqual(ctfull_tags, ctpartial_tags + missing, msg) + + def testPrivateSQ(self): + """Can read private undefined length SQ without error....................""" + # From issues 91, 97, 98. Bug introduced by fast reading, due to VR=None + # in raw data elements, then an undefined length private item VR is looked up, + # and there is no such tag, generating an exception + + # Simply read the file, in 0.9.5 this generated an exception + read_file(priv_SQ_name) + + def testNestedPrivateSQ(self): + """Can successfully read a private SQ which contains additional SQ's.....""" + # From issue 113. When a private SQ of undefined length is used, the + # sequence is read in and the length of the SQ is determined upon + # identification of the SQ termination sequence. When using nested + # Sequences, the first termination sequence encountered actually + # belongs to the nested Sequence not the parent, therefore the + # remainder of the file is not read in properly + ds = read_file(nested_priv_SQ_name) + + # Make sure that the entire dataset was read in + pixel_data_tag = TupleTag((0x7fe0, 0x10)) + self.assertTrue(pixel_data_tag in ds, + "Entire dataset was not parsed properly. PixelData is not present") + + # Check that the DataElement is indeed a Sequence + tag = TupleTag((0x01, 0x01)) + seq0 = ds[tag] + self.assertEqual(seq0.VR, 'SQ', + "First level sequence not parsed properly") + + # Now verify the presence of the nested private SQ + seq1 = seq0[0][tag] + self.assertEqual(seq1.VR, 'SQ', + "Second level sequence not parsed properly") + + # Now make sure the values that are parsed are correct + got = seq1[0][tag].value + expected = b'Double Nested SQ' + self.assertEqual(got, expected, + "Expected a value of %s, got %s'" % (expected, got)) + + got = seq0[0][0x01, 0x02].value + expected = b'Nested SQ' + self.assertEqual(got, expected, + "Expected a value of %s, got %s'" % (expected, got)) + + def testNoMetaGroupLength(self): + """Read file with no group length in file meta...........................""" + # Issue 108 -- iView example file with no group length (0002,0002) + # Originally crashed, now check no exception, but also check one item + # in file_meta, and second one in followinsg dataset + ds = read_file(no_meta_group_length) + got = ds.InstanceCreationDate + expected = "20111130" + self.assertEqual(got, expected, "Sample data element after file meta with no group length failed, expected '%s', got '%s'" % (expected, got)) + + +class JPEG2000Tests(unittest.TestCase): + def setUp(self): + self.jpeg = read_file(jpeg2000_name) + + def testJPEG2000(self): + """JPEG2000: Returns correct values for sample data elements............""" + expected = [Tag(0x0054, 0x0010), Tag(0x0054, 0x0020)] # XX also tests multiple-valued AT data element + got = self.jpeg.FrameIncrementPointer + self.assertEqual(got, expected, "JPEG2000 file, Frame Increment Pointer: expected %s, got %s" % (expected, got)) + + got = self.jpeg.DerivationCodeSequence[0].CodeMeaning + expected = 'Lossy Compression' + self.assertEqual(got, expected, "JPEG200 file, Code Meaning got %s, expected %s" % (got, expected)) + + def testJPEG2000PixelArray(self): + """JPEG2000: Fails gracefully when uncompressed data is asked for.......""" + self.assertRaises(NotImplementedError, self.jpeg._get_pixel_array) + + +class JPEGlossyTests(unittest.TestCase): + + def setUp(self): + self.jpeg = read_file(jpeg_lossy_name) + + def testJPEGlossy(self): + """JPEG-lossy: Returns correct values for sample data elements..........""" + got = self.jpeg.DerivationCodeSequence[0].CodeMeaning + expected = 'Lossy Compression' + self.assertEqual(got, expected, "JPEG-lossy file, Code Meaning got %s, expected %s" % (got, expected)) + + def testJPEGlossyPixelArray(self): + """JPEG-lossy: Fails gracefully when uncompressed data is asked for.....""" + self.assertRaises(NotImplementedError, self.jpeg._get_pixel_array) + + +class JPEGlosslessTests(unittest.TestCase): + def setUp(self): + self.jpeg = read_file(jpeg_lossless_name) + + def testJPEGlossless(self): + """JPEGlossless: Returns correct values for sample data elements........""" + got = self.jpeg.SourceImageSequence[0].PurposeOfReferenceCodeSequence[0].CodeMeaning + expected = 'Uncompressed predecessor' + self.assertEqual(got, expected, "JPEG-lossless file, Code Meaning got %s, expected %s" % (got, expected)) + + def testJPEGlosslessPixelArray(self): + """JPEGlossless: Fails gracefully when uncompressed data is asked for...""" + self.assertRaises(NotImplementedError, self.jpeg._get_pixel_array) + + # create an in-memory fragment + + +class DeferredReadTests(unittest.TestCase): + """Test that deferred data element reading (for large size) + works as expected + """ + # Copy one of test files and use temporarily, then later remove. + def setUp(self): + self.testfile_name = ct_name + ".tmp" + shutil.copyfile(ct_name, self.testfile_name) + + def testTimeCheck(self): + """Deferred read warns if file has been modified...........""" + if stat_available: + ds = read_file(self.testfile_name, defer_size=2000) + from time import sleep + sleep(1) + with open(self.testfile_name, "r+") as f: + f.write('\0') # "touch" the file + warning_start = "Deferred read warning -- file modification time " + + def read_value(): + ds.PixelData + + assertWarns(self, warning_start, read_value) + + def testFileExists(self): + """Deferred read raises error if file no longer exists.....""" + ds = read_file(self.testfile_name, defer_size=2000) + os.remove(self.testfile_name) + + def read_value(): + ds.PixelData + + self.assertRaises(IOError, read_value) + + def testValuesIdentical(self): + """Deferred values exactly matches normal read...............""" + ds_norm = read_file(self.testfile_name) + ds_defer = read_file(self.testfile_name, defer_size=2000) + for data_elem in ds_norm: + tag = data_elem.tag + self.assertEqual(data_elem.value, ds_defer[tag].value, "Mismatched value for tag %r" % tag) + + def testZippedDeferred(self): + """Deferred values from a gzipped file works..............""" + # Arose from issue 103 "Error for defer_size read of gzip file object" + fobj = gzip.open(gzip_name) + ds = read_file(fobj, defer_size=1) + fobj.close() + # before the fix, this threw an error as file reading was not in right place, + # it was re-opened as a normal file, not zip file + ds.InstanceNumber + + def tearDown(self): + if os.path.exists(self.testfile_name): + os.remove(self.testfile_name) + + +class FileLikeTests(unittest.TestCase): + """Test that can read DICOM files with file-like object rather than filename""" + def testReadFileGivenFileObject(self): + """filereader: can read using already opened file............""" + f = open(ct_name, 'rb') + ct = read_file(f) + # Tests here simply repeat testCT -- perhaps should collapse the code together? + got = ct.ImagePositionPatient + DS = dicom.valuerep.DS + expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] + self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected") + self.assertEqual(ct.file_meta.ImplementationClassUID, '1.3.6.1.4.1.5962.2', + "ImplementationClassUID not the expected value") + self.assertEqual(ct.file_meta.ImplementationClassUID, + ct.file_meta[0x2, 0x12].value, + "ImplementationClassUID does not match the value accessed by tag number") + # (0020, 0032) Image Position (Patient) [-158.13580300000001, -179.035797, -75.699996999999996] + got = ct.ImagePositionPatient + expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] + self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected") + self.assertEqual(ct.Rows, 128, "Rows not 128") + self.assertEqual(ct.Columns, 128, "Columns not 128") + self.assertEqual(ct.BitsStored, 16, "Bits Stored not 16") + self.assertEqual(len(ct.PixelData), 128 * 128 * 2, "Pixel data not expected length") + # Should also be able to close the file ourselves without exception raised: + f.close() + + def testReadFileGivenFileLikeObject(self): + """filereader: can read using a file-like (BytesIO) file....""" + with open(ct_name, 'rb') as f: + file_like = BytesIO(f.read()) + ct = read_file(file_like) + # Tests here simply repeat some of testCT test + got = ct.ImagePositionPatient + DS = dicom.valuerep.DS + expected = [DS('-158.135803'), DS('-179.035797'), DS('-75.699997')] + self.assertTrue(got == expected, "ImagePosition(Patient) values not as expected") + self.assertEqual(len(ct.PixelData), 128 * 128 * 2, "Pixel data not expected length") + # Should also be able to close the file ourselves without exception raised: + file_like.close() + + +if __name__ == "__main__": + # This is called if run alone, but not if loaded through run_tests.py + # If not run from the directory where the sample images are, then need to switch there + dir_name = os.path.dirname(sys.argv[0]) + save_dir = os.getcwd() + if dir_name: + os.chdir(dir_name) + os.chdir("../testfiles") + unittest.main() + os.chdir(save_dir) diff -Nru pydicom-0.9.8/source/dicom/test/test_filewriter.py pydicom-0.9.9/source/dicom/test/test_filewriter.py --- pydicom-0.9.8/source/dicom/test/test_filewriter.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_filewriter.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,220 @@ +# test_filewriter.py +"""unittest cases for dicom.filewriter module""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import sys +import os.path +import os +import unittest +from dicom.filereader import read_file +from dicom.filewriter import write_data_element +from dicom.dataset import Dataset, FileDataset +from dicom.sequence import Sequence +from dicom.util.hexutil import hex2bytes, bytes2hex + +# from io import BytesIO +from dicom.filebase import DicomBytesIO +from dicom.dataelem import DataElement + +from pkg_resources import Requirement, resource_filename +test_dir = resource_filename(Requirement.parse("pydicom"), "dicom/testfiles") +testcharset_dir = resource_filename(Requirement.parse("pydicom"), + "dicom/testcharsetfiles") + +rtplan_name = os.path.join(test_dir, "rtplan.dcm") +rtdose_name = os.path.join(test_dir, "rtdose.dcm") +ct_name = os.path.join(test_dir, "CT_small.dcm") +mr_name = os.path.join(test_dir, "MR_small.dcm") +jpeg_name = os.path.join(test_dir, "JPEG2000.dcm") + +unicode_name = os.path.join(testcharset_dir, "chrH31.dcm") +multiPN_name = os.path.join(testcharset_dir, "chrFrenMulti.dcm") + +# Set up rtplan_out, rtdose_out etc. Filenames as above, with '2' appended +rtplan_out = rtplan_name + '2' +rtdose_out = rtdose_name + '2' +ct_out = ct_name + '2' +mr_out = mr_name + '2' +jpeg_out = jpeg_name + '2' +unicode_out = unicode_name + '2' +multiPN_out = multiPN_name + '2' + + +def files_identical(a, b): + """Return a tuple (file a == file b, index of first difference)""" + with open(a, "rb") as A: + with open(b, "rb") as B: + a_bytes = A.read() + b_bytes = B.read() + + return bytes_identical(a_bytes, b_bytes) + + +def bytes_identical(a_bytes, b_bytes): + """Return a tuple (bytes a == bytes b, index of first difference)""" + if a_bytes == b_bytes: + return True, 0 # True, dummy argument + else: + pos = 0 + while a_bytes[pos] == b_bytes[pos]: + pos += 1 + return False, pos # False if not identical, position of 1st diff + + +class WriteFileTests(unittest.TestCase): + def compare(self, in_filename, out_filename, decode=False): + """Read file1, write file2, then compare. + Return value as for files_identical. + """ + dataset = read_file(in_filename) + if decode: + dataset.decode() + + dataset.save_as(out_filename) + same, pos = files_identical(in_filename, out_filename) + self.assertTrue(same, + "Files are not identical - first difference at 0x%x" % pos) + if os.path.exists(out_filename): + os.remove(out_filename) # get rid of the file + + def testRTPlan(self): + """Input file, write back and verify them identical (RT Plan file)""" + self.compare(rtplan_name, rtplan_out) + + def testRTDose(self): + """Input file, write back and verify them identical (RT Dose file)""" + self.compare(rtdose_name, rtdose_out) + + def testCT(self): + """Input file, write back and verify them identical (CT file).....""" + self.compare(ct_name, ct_out) + + def testMR(self): + """Input file, write back and verify them identical (MR file).....""" + self.compare(mr_name, mr_out) + + def testUnicode(self): + """Ensure decoded string DataElements are written to file properly""" + self.compare(unicode_name, unicode_out, decode=True) + + def testMultiPN(self): + """Ensure multiple Person Names are written to the file correctly.""" + self.compare(multiPN_name, multiPN_out, decode=True) + + def testJPEG2000(self): + """Input file, write back and verify them identical (JPEG2K file).""" + self.compare(jpeg_name, jpeg_out) + + def testListItemWriteBack(self): + """Change item in a list and confirm it is written to file ..""" + DS_expected = 0 + CS_expected = "new" + SS_expected = 999 + ds = read_file(ct_name) + ds.ImagePositionPatient[2] = DS_expected + ds.ImageType[1] = CS_expected + ds[(0x0043, 0x1012)].value[0] = SS_expected + ds.save_as(ct_out) + # Now read it back in and check that the values were changed + ds = read_file(ct_out) + self.assertTrue(ds.ImageType[1] == CS_expected, + "Item in a list not written correctly to file (VR=CS)") + self.assertTrue(ds[0x00431012].value[0] == SS_expected, + "Item in a list not written correctly to file (VR=SS)") + self.assertTrue(ds.ImagePositionPatient[2] == DS_expected, + "Item in a list not written correctly to file (VR=DS)") + if os.path.exists(ct_out): + os.remove(ct_out) + + +class WriteDataElementTests(unittest.TestCase): + """Attempt to write data elements has the expected behaviour""" + def setUp(self): + # Create a dummy (in memory) file to write to + self.f1 = DicomBytesIO() + self.f1.is_little_endian = True + self.f1.is_implicit_VR = True + + def test_empty_AT(self): + """Write empty AT correctly..........""" + # Was issue 74 + data_elem = DataElement(0x00280009, "AT", []) + expected = hex2bytes(( + " 28 00 09 00" # (0028,0009) Frame Increment Pointer + " 00 00 00 00" # length 0 + )) + write_data_element(self.f1, data_elem) + got = self.f1.parent.getvalue() + msg = ("Did not write zero-length AT value correctly. " + "Expected %r, got %r") % (bytes2hex(expected), bytes2hex(got)) + msg = "%r %r" % (type(expected), type(got)) + msg = "'%r' '%r'" % (expected, got) + self.assertEqual(expected, got, msg) + + +class ScratchWriteTests(unittest.TestCase): + """Simple dataset from scratch, written in all endian/VR combinations""" + def setUp(self): + # Create simple dataset for all tests + ds = Dataset() + ds.PatientName = "Name^Patient" + + # Set up a simple nested sequence + # first, the innermost sequence + subitem1 = Dataset() + subitem1.ContourNumber = 1 + subitem1.ContourData = ['2', '4', '8', '16'] + subitem2 = Dataset() + subitem2.ContourNumber = 2 + subitem2.ContourData = ['32', '64', '128', '196'] + + sub_ds = Dataset() + sub_ds.ContourSequence = Sequence((subitem1, subitem2)) + + # Now the top-level sequence + ds.ROIContourSequence = Sequence((sub_ds,)) # Comma to make one-tuple + + # Store so each test can use it + self.ds = ds + + def compare_write(self, hex_std, file_ds): + """Write file and compare with expected byte string + + :arg hex_std: the bytes which should be written, as space separated hex + :arg file_ds: a FileDataset instance containing the dataset to write + """ + out_filename = "scratch.dcm" + file_ds.save_as(out_filename) + std = hex2bytes(hex_std) + with open(out_filename, 'rb') as f: + bytes_written = f.read() + # print "std :", bytes2hex(std) + # print "written:", bytes2hex(bytes_written) + same, pos = bytes_identical(std, bytes_written) + self.assertTrue(same, + "Writing from scratch unexpected result - 1st diff at 0x%x" % pos) + if os.path.exists(out_filename): + os.remove(out_filename) # get rid of the file + + def testImpl_LE_deflen_write(self): + """Scratch Write for implicit VR little endian, defined length SQ's""" + from dicom.test._write_stds import impl_LE_deflen_std_hex as std + + file_ds = FileDataset("test", self.ds) + self.compare_write(std, file_ds) + + +if __name__ == "__main__": + # This is called if run alone, but not if loaded through run_tests.py + # If not run from the directory where the sample images are, + # then need to switch there + dir_name = os.path.dirname(sys.argv[0]) + save_dir = os.getcwd() + if dir_name: + os.chdir(dir_name) + os.chdir("../testfiles") + unittest.main() + os.chdir(save_dir) diff -Nru pydicom-0.9.8/source/dicom/test/test_multival.py pydicom-0.9.9/source/dicom/test/test_multival.py --- pydicom-0.9.8/source/dicom/test/test_multival.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_multival.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,64 @@ +# test_multival.py +"""Test suite for MultiValue class""" +# Copyright (c) 2012 Darcy Mason +# This file is part of pydicom, relased under an MIT-style license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom.multival import MultiValue +from dicom.valuerep import DS, DSfloat, DSdecimal, IS +import dicom.config + +import sys +python_version = sys.version_info + + +class MultiValuetests(unittest.TestCase): + def testMultiDS(self): + """MultiValue: Multi-valued data elements can be created........""" + multival = MultiValue(DS, ['11.1', '22.2', '33.3']) + for val in multival: + self.assertTrue(isinstance(val, (DSfloat, DSdecimal)), + "Multi-value DS item not converted to DS") + + def testLimits(self): + """MultiValue: Raise error if any item outside DICOM limits....""" + original_flag = dicom.config.enforce_valid_values + dicom.config.enforce_valid_values = True + self.assertRaises(OverflowError, MultiValue, IS, [1, -2 ** 31 - 1]) # Overflow error not raised for IS out of DICOM valid range + dicom.config.enforce_valid_values = original_flag + + def testAppend(self): + """MultiValue: Append of item converts it to required type...""" + multival = MultiValue(IS, [1, 5, 10]) + multival.append('5') + self.assertTrue(isinstance(multival[-1], IS)) + self.assertEqual(multival[-1], 5, "Item set by append is not correct value") + + def testSetIndex(self): + """MultiValue: Setting list item converts it to required type""" + multival = MultiValue(IS, [1, 5, 10]) + multival[1] = '7' + self.assertTrue(isinstance(multival[1], IS)) + self.assertEqual(multival[1], 7, "Item set by index is not correct value") + + def testExtend(self): + """MultiValue: Extending a list converts all to required type""" + multival = MultiValue(IS, [1, 5, 10]) + multival.extend(['7', 42]) + self.assertTrue(isinstance(multival[-2], IS)) + self.assertTrue(isinstance(multival[-1], IS)) + self.assertEqual(multival[-2], 7, "Item set by extend not correct value") + + def testSlice(self): + """MultiValue: Setting slice converts items to required type.""" + multival = MultiValue(IS, range(7)) + multival[2:7:2] = [4, 16, 36] + for val in multival: + self.assertTrue(isinstance(val, IS), "Slice IS value not correct type") + self.assertEqual(multival[4], 16, "Set by slice failed for item 4 of list") + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_rawread.py pydicom-0.9.9/source/dicom/test/test_rawread.py --- pydicom-0.9.8/source/dicom/test/test_rawread.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_rawread.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,274 @@ +# test_rawread.py +"""unittest tests for dicom.filereader module -- simple raw data elements""" +# Copyright (c) 2010-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from io import BytesIO +import unittest +from dicom.filereader import data_element_generator +from dicom.values import convert_value +from dicom.sequence import Sequence +from dicom.util.hexutil import hex2bytes + + +class RawReaderExplVRTests(unittest.TestCase): + # See comments in data_element_generator -- summary of DICOM data element formats + # Here we are trying to test all those variations + + def testExplVRLittleEndianLongLength(self): + """Raw read: Explicit VR Little Endian long length......................""" + # (0002,0001) OB 2-byte-reserved 4-byte-length, value 0x00 0x01 + infile = BytesIO(hex2bytes("02 00 01 00 4f 42 00 00 02 00 00 00 00 01")) + expected = ((2, 1), 'OB', 2, b'\00\01', 0xc, False, True) + de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) + got = next(de_gen) + msg_loc = "in read of Explicit VR='OB' data element (long length format)" + self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) + # (0002,0002) OB 2-byte-reserved 4-byte-length, value 0x00 0x01 + + def testExplVRLittleEndianShortLength(self): + """Raw read: Explicit VR Little Endian short length.....................""" + # (0008,212a) IS 2-byte-length, value '1 ' + infile = BytesIO(hex2bytes("08 00 2a 21 49 53 02 00 31 20")) + # XXX Assumes that a RawDataElement doesn't convert the value based + # upon the VR value, thus it will remain a byte string since that is + # the input + expected = ((8, 0x212a), 'IS', 2, b'1 ', 0x8, False, True) + de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) + got = next(de_gen) + msg_loc = "in read of Explicit VR='IS' data element (short length format)" + self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) + + def testExplVRLittleEndianUndefLength(self): + """Raw read: Expl VR Little Endian with undefined length................""" + # (7fe0,0010), OB, 2-byte reserved, 4-byte-length (UNDEFINED) + hexstr1 = "e0 7f 10 00 4f 42 00 00 ff ff ff ff" + hexstr2 = " 41 42 43 44 45 46 47 48 49 4a" # 'content' + hexstr3 = " fe ff dd e0 00 00 00 00" # Sequence Delimiter + hexstr = hexstr1 + hexstr2 + hexstr3 + infile = BytesIO(hex2bytes(hexstr)) + expected = ((0x7fe0, 0x10), 'OB', 0xffffffffL, b'ABCDEFGHIJ', 0xc, False, True) + de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) + got = next(de_gen) + msg_loc = "in read of undefined length Explicit VR ='OB' short value)" + self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) + + # Test again such that delimiter crosses default 128-byte read "chunks", etc + for multiplier in (116, 117, 118, 120): + multiplier = 116 + hexstr2b = hexstr2 + " 00" * multiplier + hexstr = hexstr1 + hexstr2b + hexstr3 + infile = BytesIO(hex2bytes(hexstr)) + expected = len('ABCDEFGHIJ' + '\0' * multiplier) + de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=True) + got = next(de_gen) + got_len = len(got.value) + msg_loc = "in read of undefined length Explicit VR ='OB' with 'multiplier' %d" % multiplier + self.assertEqual(expected, got_len, "Expected value length %d, got %d in %s" % (expected, got_len, msg_loc)) + msg = "Unexpected value start with multiplier %d on Expl VR undefined length" % multiplier + self.assertTrue(got.value.startswith(b'ABCDEFGHIJ\0'), msg) + + +class RawReaderImplVRTests(unittest.TestCase): + # See comments in data_element_generator -- summary of DICOM data element formats + # Here we are trying to test all those variations + + def testImplVRLittleEndian(self): + """Raw read: Implicit VR Little Endian..................................""" + # (0008,212a) {IS} 4-byte-length, value '1 ' + infile = BytesIO(hex2bytes("08 00 2a 21 02 00 00 00 31 20")) + expected = ((8, 0x212a), None, 2, b'1 ', 0x8, True, True) + de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) + got = next(de_gen) + msg_loc = "in read of Implicit VR='IS' data element (short length format)" + self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) + + def testImplVRLittleEndianUndefLength(self): + """Raw read: Impl VR Little Endian with undefined length................""" + # (7fe0,0010), OB, 2-byte reserved, 4-byte-length (UNDEFINED) + hexstr1 = "e0 7f 10 00 ff ff ff ff" + hexstr2 = " 41 42 43 44 45 46 47 48 49 4a" # 'content' + hexstr3 = " fe ff dd e0 00 00 00 00" # Sequence Delimiter + hexstr = hexstr1 + hexstr2 + hexstr3 + infile = BytesIO(hex2bytes(hexstr)) + expected = ((0x7fe0, 0x10), 'OB or OW', 0xffffffffL, b'ABCDEFGHIJ', 0x8, True, True) + de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) + got = next(de_gen) + msg_loc = "in read of undefined length Implicit VR ='OB' short value)" + self.assertEqual(got, expected, "Expected: %r, got %r in %s" % (expected, got, msg_loc)) + + # Test again such that delimiter crosses default 128-byte read "chunks", etc + for multiplier in (116, 117, 118, 120): + multiplier = 116 + hexstr2b = hexstr2 + " 00" * multiplier + hexstr = hexstr1 + hexstr2b + hexstr3 + infile = BytesIO(hex2bytes(hexstr)) + expected = len('ABCDEFGHIJ' + '\0' * multiplier) + de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) + got = next(de_gen) + got_len = len(got.value) + msg_loc = "in read of undefined length Implicit VR with 'multiplier' %d" % multiplier + self.assertEqual(expected, got_len, "Expected value length %d, got %d in %s" % (expected, got_len, msg_loc)) + msg = "Unexpected value start with multiplier %d on Implicit VR undefined length" % multiplier + self.assertTrue(got.value.startswith(b'ABCDEFGHIJ\0'), msg) + + +class RawSequenceTests(unittest.TestCase): + # See DICOM standard PS3.5-2008 section 7.5 for sequence syntax + def testEmptyItem(self): + """Read sequence with a single empty item...............................""" + # This is fix for issue 27 + hexstr = ( + "08 00 32 10" # (0008, 1032) SQ "Procedure Code Sequence" + " 08 00 00 00" # length 8 + " fe ff 00 e0" # (fffe, e000) Item Tag + " 00 00 00 00" # length = 0 + ) + ( # --------------- end of Sequence + " 08 00 3e 10" # (0008, 103e) LO "Series Description" nopep8 + " 0c 00 00 00" # length nopep8 + " 52 20 41 44 44 20 56 49 45 57 53 20" # value nopep8 + ) + # "\x08\x00\x32\x10\x08\x00\x00\x00\xfe\xff\x00\xe0\x00\x00\x00\x00" # from issue 27, procedure code sequence (0008,1032) + # hexstr += "\x08\x00\x3e\x10\x0c\x00\x00\x00\x52\x20\x41\x44\x44\x20\x56\x49\x45\x57\x53\x20" # data element following + + fp = BytesIO(hex2bytes(hexstr)) + gen = data_element_generator(fp, is_implicit_VR=True, is_little_endian=True) + raw_seq = next(gen) + seq = convert_value("SQ", raw_seq) + + self.assertTrue(isinstance(seq, Sequence), "Did not get Sequence, got type {0}".format(str(type(seq)))) + self.assertTrue(len(seq) == 1, "Expected Sequence with single (empty) item, got {0:d} item(s)".format(len(seq))) + self.assertTrue(len(seq[0]) == 0, "Expected the sequence item (dataset) to be empty") + elem2 = next(gen) + self.assertEqual(elem2.tag, 0x0008103e, "Expected a data element after empty sequence item") + + def testImplVRLittleEndian_ExplicitLengthSeq(self): + """Raw read: ImplVR Little Endian SQ with explicit lengths..............""" + # Create a fictional sequence with bytes directly, + # similar to PS 3.5-2008 Table 7.5-1 p42 + hexstr = ( + "0a 30 B0 00" # (300a, 00b0) Beam Sequence + " 40 00 00 00" # length + " fe ff 00 e0" # (fffe, e000) Item Tag + " 18 00 00 00" # Item (dataset) Length + " 0a 30 c0 00" # (300A, 00C0) Beam Number + " 02 00 00 00" # length + " 31 20" # value '1 ' + " 0a 30 c2 00" # (300A, 00C2) Beam Name + " 06 00 00 00" # length + " 42 65 61 6d 20 31" # value 'Beam 1' + # ------------- + " fe ff 00 e0" # (fffe, e000) Item Tag + " 18 00 00 00" # Item (dataset) Length + " 0a 30 c0 00" # (300A, 00C0) Beam Number + " 02 00 00 00" # length + " 32 20" # value '2 ' + " 0a 30 c2 00" # (300A, 00C2) Beam Name + " 06 00 00 00" # length + " 42 65 61 6d 20 32" # value 'Beam 2' + ) + + infile = BytesIO(hex2bytes(hexstr)) + de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=True) + raw_seq = next(de_gen) + seq = convert_value("SQ", raw_seq) + + # The sequence is parsed, but only into raw data elements. + # They will be converted when asked for. Check some: + got = seq[0].BeamNumber + self.assertTrue(got == 1, "Expected Beam Number 1, got {0!r}".format(got)) + got = seq[1].BeamName + self.assertTrue(got == 'Beam 2', "Expected Beam Name 'Beam 2', got {0:s}".format(got)) + + def testImplVRBigEndian_ExplicitLengthSeq(self): + """Raw read: ImplVR BigEndian SQ with explicit lengths..................""" + # Create a fictional sequence with bytes directly, + # similar to PS 3.5-2008 Table 7.5-1 p42 + hexstr = ( + "30 0a 00 B0" # (300a, 00b0) Beam Sequence + " 00 00 00 40" # length + " ff fe e0 00" # (fffe, e000) Item Tag + " 00 00 00 18" # Item (dataset) Length + " 30 0a 00 c0" # (300A, 00C0) Beam Number + " 00 00 00 02" # length + " 31 20" # value '1 ' + " 30 0a 00 c2" # (300A, 00C2) Beam Name + " 00 00 00 06" # length + " 42 65 61 6d 20 31" # value 'Beam 1' + # ------------- + " ff fe e0 00" # (fffe, e000) Item Tag + " 00 00 00 18" # Item (dataset) Length + " 30 0a 00 c0" # (300A, 00C0) Beam Number + " 00 00 00 02" # length + " 32 20" # value '2 ' + " 30 0a 00 c2" # (300A, 00C2) Beam Name + " 00 00 00 06" # length + " 42 65 61 6d 20 32" # value 'Beam 2' + ) + + infile = BytesIO(hex2bytes(hexstr)) + de_gen = data_element_generator(infile, is_implicit_VR=True, is_little_endian=False) + raw_seq = next(de_gen) + seq = convert_value("SQ", raw_seq) + + # The sequence is parsed, but only into raw data elements. + # They will be converted when asked for. Check some: + got = seq[0].BeamNumber + self.assertTrue(got == 1, "Expected Beam Number 1, got {0!r}".format(got)) + got = seq[1].BeamName + self.assertTrue(got == 'Beam 2', "Expected Beam Name 'Beam 2', got {0:s}".format(got)) + + def testExplVRBigEndian_UndefinedLengthSeq(self): + """Raw read: ExplVR BigEndian Undefined Length SQ.......................""" + # Create a fictional sequence with bytes directly, + # similar to PS 3.5-2008 Table 7.5-2 p42 + hexstr = ( + "30 0a 00 B0" # (300a, 00b0) Beam Sequence + " 53 51" # SQ + " 00 00" # reserved + " ff ff ff ff" # undefined length + " ff fe e0 00" # (fffe, e000) Item Tag + " 00 00 00 18" # Item (dataset) Length + " 30 0a 00 c0" # (300A, 00C0) Beam Number + " 49 53" # IS + " 00 02" # length + " 31 20" # value '1 ' + " 30 0a 00 c2" # (300A, 00C2) Beam Name + " 4c 4F" # LO + " 00 06" # length + " 42 65 61 6d 20 31" # value 'Beam 1' + # ------------- + " ff fe e0 00" # (fffe, e000) Item Tag + " 00 00 00 18" # Item (dataset) Length + " 30 0a 00 c0" # (300A, 00C0) Beam Number + " 49 53" # IS + " 00 02" # length + " 32 20" # value '2 ' + " 30 0a 00 c2" # (300A, 00C2) Beam Name + " 4C 4F" # LO + " 00 06" # length + " 42 65 61 6d 20 32" # value 'Beam 2' + " ff fe E0 dd" # SQ delimiter + " 00 00 00 00" # zero length + ) + + infile = BytesIO(hex2bytes(hexstr)) + de_gen = data_element_generator(infile, is_implicit_VR=False, is_little_endian=False) + seq = next(de_gen) + # Note seq itself is not a raw data element. + # The parser does parse undefined length SQ + + # The sequence is parsed, but only into raw data elements. + # They will be converted when asked for. Check some: + got = seq[0].BeamNumber + self.assertTrue(got == 1, "Expected Beam Number 1, got {0!r}".format(got)) + got = seq[1].BeamName + self.assertTrue(got == 'Beam 2', "Expected Beam Name 'Beam 2', got {0:s}".format(got)) + + +if __name__ == "__main__": + # import dicom + # dicom.debug() + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_sequence.py pydicom-0.9.9/source/dicom/test/test_sequence.py --- pydicom-0.9.8/source/dicom/test/test_sequence.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_sequence.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,60 @@ +# test_sequence.py +"""unittest cases for Sequence class""" +# Copyright (c) 2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom.dataset import Dataset +from dicom.sequence import Sequence + + +class SequenceTests(unittest.TestCase): + def testDefaultInitialization(self): + """Sequence: Ensure a valid Sequence is created""" + empty = Sequence() + self.assertTrue(len(empty) == 0, "Non-empty Sequence created") + + def testValidInitialization(self): + """Sequence: Ensure valid creation of Sequences using Dataset inputs""" + inputs = {'PatientPosition': 'HFS', + 'PatientSetupNumber': '1', + 'SetupTechniqueDescription': ''} + patientSetups = Dataset() + patientSetups.update(inputs) + + # Construct the sequence + seq = Sequence((patientSetups,)) + self.assertTrue(isinstance(seq[0], Dataset), + "Dataset modified during Sequence creation") + + def testInvalidInitialization(self): + """Sequence: Raise error if inputs are not iterables or Datasets""" + # Error on construction with single Dataset + self.assertRaises(TypeError, Sequence, Dataset()) + # Test for non-iterable + self.assertRaises(TypeError, Sequence, 1) + # Test for invalid iterable contents + self.assertRaises(TypeError, Sequence, [1, 2]) + + def testInvalidAssignment(self): + """Sequence: validate exception for invalid assignment""" + seq = Sequence([Dataset(), ]) + # Attempt to assign an integer to the first element + self.assertRaises(TypeError, seq.__setitem__, 0, 1) + + def testValidAssignment(self): + """Sequence: ensure ability to assign a Dataset to a Sequence item""" + ds = Dataset() + ds.add_new((1, 1), 'IS', 1) + + # Create a single element Sequence first + seq = Sequence([Dataset(), ]) + seq[0] = ds + + self.assertEqual(seq[0], ds, "Dataset modified during assignment") + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_tag.py pydicom-0.9.9/source/dicom/test/test_tag.py --- pydicom-0.9.8/source/dicom/test/test_tag.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_tag.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,93 @@ +"""Test suite for Tag.py""" +# Copyright (c) 2008 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom.tag import Tag, TupleTag + + +class Values(unittest.TestCase): + def testGoodInts(self): + """Tags can be constructed with 4-byte integers..............""" + Tag(0x300a00b0) + Tag(0xFFFFFFEE) + + def testGoodTuple(self): + """Tags can be constructed with two-tuple of 2-byte integers.""" + TupleTag((0xFFFF, 0xFFee)) + tag = TupleTag((0x300a, 0x00b0)) + self.assertEqual(tag.group, 0x300a, "Expected tag.group 0x300a, got %r" % tag.group) + + def testAnyUnpack(self): + """Tags can be constructed from list.........................""" + Tag([2, 0]) + + def testBadTuple(self): + """Tags: if a tuple, must be a 2-tuple.......................""" + self.assertRaises(ValueError, Tag, (1, 2, 3, 4)) + + def testNonNumber(self): + """Tags cannot be instantiated from a non-hex string.........""" + self.assertRaises(ValueError, Tag, "hello") + + def testHexString(self): + """Tags can be instantiated from hex strings.................""" + tag = Tag('0010', '0002') + self.assertEqual(tag.group, 16) + self.assertEqual(tag.elem, 2) + + def testStr(self): + """Tags have (gggg, eeee) string rep.........................""" + self.assertTrue(str(Tag(0x300a00b0)) == "(300a, 00b0)") + + def testGroup(self): + """Tags' group and elem portions extracted properly..........""" + tag = Tag(0x300a00b0) + self.assertTrue(tag.group == 0x300a) + self.assertTrue(tag.elem == 0xb0) + self.assertTrue(tag.element == 0xb0) + + def testZeroElem(self): + """Tags with arg2=0 ok (was issue 47)........................""" + tag = Tag(2, 0) + self.assertTrue(tag.group == 2 and tag.elem == 0) + + def testBadInts(self): + """Tags constructed with > 8 bytes gives OverflowError.......""" + self.assertRaises(OverflowError, Tag, 0x123456789) + + +class Comparisons(unittest.TestCase): + def setUp(self): + self.int1 = 0x300a00b0 + self.tup1 = (0x300a, 0xb0) + self.tup3 = (0xFFFE, 0xFFFC) + self.t1 = Tag(self.int1) + self.t2 = Tag(self.tup1) + self.t3 = Tag(self.tup3) + + def testCmpEq(self): + """Tags compare correctly (==)...............................""" + self.assertTrue(self.t1 == self.int1, "tag t1 was not equal to int1") + self.assertTrue(self.t1 == self.t2, "tag t1 did not equal other tag") + self.assertTrue(self.t1 == self.tup1, "tag t1 did not equal its tuple") + + def testCmpNotEq(self): + self.assertTrue(self.t1 != self.t3, "Not equal comparison failed") + + def testCmpLT(self): + """Tags compare correctly (<, >).............................""" + self.assertTrue(self.t1 < self.int1 + 1, "tag < failed") + self.assertTrue(self.int1 + 1 > self.t1, "int > tag failed") + self.assertTrue(self.t3 > self.t1, "'negative' int tag > other tag failed") + + def testHash(self): + """Tags hash the same as an int..............................""" + self.assertTrue(hash(self.t1) == hash(self.int1)) + self.assertTrue(hash(self.t2) == hash(self.int1)) + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_UID.py pydicom-0.9.9/source/dicom/test/test_UID.py --- pydicom-0.9.8/source/dicom/test/test_UID.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_UID.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,90 @@ +# test_UID.py +"""Test suite for UID.py""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom.UID import UID, generate_uid, pydicom_root_UID, InvalidUID + + +class UIDtests(unittest.TestCase): + def testKnownUID(self): + """UID: Known UID properties accessed.....................""" + + msg = "UID: expected '{1:s}', got '{2:s}' for UID {0:s}" + + uid = UID('1.2.840.10008.1.2') # Implicit VR Little Endian + expected = 'Implicit VR Little Endian' + got = uid.name + self.assertEqual(got, expected, msg.format("name", expected, got)) + + expected = 'Transfer Syntax' + got = uid.type + self.assertEqual(got, expected, msg.format("type", expected, got)) + + expected = 'Default Transfer Syntax for DICOM' + got = uid.info + self.assertEqual(got, expected, msg.format("info", expected, got)) + + expected = False + got = uid.is_retired + self.assertEqual(got, expected, + msg.format("is_retired", str(expected), str(got))) + + def testComparison(self): + """UID: can compare by number or by name..................""" + uid = UID('1.2.840.10008.1.2') + self.assertEqual(uid, 'Implicit VR Little Endian', + "UID equality failed on name") + self.assertEqual(uid, '1.2.840.10008.1.2', + "UID equality failed on number string") + + def testCompareNumber(self): + """UID: comparing against a number give False.............""" + # From issue 96 + uid = UID('1.2.3') + self.assertNotEqual(uid, 3, "Comparison to a number returned True") + + def testCompareNotEqualByName(self): + """UID: comparing not equal by name.......................""" + # from Issue 121 + ct_image_storage = UID('1.2.840.10008.5.1.4.1.1.2') + msg = "UID not equal comparison by name was not correct" + self.assertFalse(ct_image_storage != 'CT Image Storage', msg) + + def testCompareNone(self): + """UID: comparing against None give False.................""" + # From issue 96 + uid = UID('1.2.3') + self.assertNotEqual(uid, None, "Comparison to a number returned True") + + def testTransferSyntaxes(self): + pass + + def testGenerateUID(self): + ''' + Test UID generator + ''' + # Test standard UID generation with pydicom prefix + uid = generate_uid() + self.assertEqual(uid[:26], pydicom_root_UID) + + # Test standard UID generation with no prefix + uid = generate_uid(None) + self.assertEqual(uid[:5], '2.25.') + + # Test invalid UID truncation (trailing dot) + invalid_prefix = \ + '1.2.33333333333333333333333333333333333333333333333333333333333.333.' + self.assertRaises(InvalidUID, + lambda: generate_uid(prefix=invalid_prefix, truncate=True)) + + # Test standard UID with truncate=True + prefix = '1.2.3.444444' + uid = generate_uid(prefix=prefix, truncate=True) + self.assertEqual(uid[:12], prefix) + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_unicode.py pydicom-0.9.9/source/dicom/test/test_unicode.py --- pydicom-0.9.8/source/dicom/test/test_unicode.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_unicode.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,22 @@ +# test_unicode.py +# -*- coding: utf-8 -*- + +import dicom +import unittest + + +class UnicodeFilenames(unittest.TestCase): + def testRead(self): + """Unicode: Can read a file with unicode characters in name................""" + uni_name = u'test°' + try: + dicom.read_file(uni_name) + except UnicodeEncodeError: + self.fail("UnicodeEncodeError generated for unicode name") + # ignore file doesn't exist error + except IOError: + pass + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/test_valuerep.py pydicom-0.9.9/source/dicom/test/test_valuerep.py --- pydicom-0.9.8/source/dicom/test/test_valuerep.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/test_valuerep.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,117 @@ +# test_valuerep.py +"""Test suite for valuerep.py""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import unittest +from dicom import in_py3 +import dicom.config + +if in_py3: + from dicom.valuerep import PersonName3 as PersonNameUnicode + PersonName = PersonNameUnicode +else: + from dicom.valuerep import PersonName, PersonNameUnicode + + +default_encoding = 'iso8859' + + +class DecimalStringtests(unittest.TestCase): + """Unit tests unique to the use of DS class derived from python Decimal""" + + def setUp(self): + dicom.config.DS_decimal(True) + + def tearDown(self): + dicom.config.DS_decimal(False) + + def testValidDecimalStrings(self): + # Ensures that decimal.Decimal doesn't cause a valid string to become + # invalid + valid_str = '-9.81338674e-006' + ds = dicom.valuerep.DS(valid_str) + L = len(str(ds)) + self.assertTrue(L <= 16, "DS: expected a string of length 16 but got %d" % (L,)) + + # Now the input string is too long but decimal.Decimal can convert it + # to a valid 16-character string + long_str = '-0.000000981338674' + ds = dicom.valuerep.DS(long_str) + L = len(str(ds)) + self.assertTrue(L <= 16, "DS: expected a string of length 16 but got %d" % (L,)) + + def testInvalidDecimalStrings(self): + # Now the input string truly is invalid + invalid_string = '-9.813386743e-006' + self.assertRaises(OverflowError, dicom.valuerep.DS, invalid_string) + + +class PersonNametests(unittest.TestCase): + def testLastFirst(self): + """PN: Simple Family-name^Given-name works...............................""" + pn = PersonName("Family^Given") + expected = "Family" + got = pn.family_name + self.assertEqual(got, expected, "PN: expected '%s', got '%s' for family name" % (expected, got)) + + expected = 'Given' + got = pn.given_name + self.assertEqual(got, expected, "PN: expected '%s', got '%s' for given name" % (expected, got)) + + expected = '' + got = pn.name_suffix + self.assertEqual(got, expected, "PN: expected '%s', got '%s' for name_suffix" % (expected, got)) + + expected = '' + got = pn.phonetic + self.assertEqual(got, expected, "PN: expected '%s', got '%s' for phonetic component" % (expected, got)) + + def testThreeComponent(self): + """PN: 3component (single-byte, ideographic, phonetic characters) works..""" + # Example name from PS3.5-2008 section I.2 p. 108 + pn = PersonName("""Hong^Gildong=\033$)C\373\363^\033$)C\321\316\324\327=\033$)C\310\253^\033$)C\261\346\265\277""") + expected = ("Hong", "Gildong") + got = (pn.family_name, pn.given_name) + self.assertEqual(got, expected, "PN: Expected single_byte name '%s', got '%s'" % (expected, got)) + + def testFormatting(self): + """PN: Formatting works..................................................""" + pn = PersonName("Family^Given") + expected = "Family, Given" + got = pn.family_comma_given() + self.assertEqual(got, expected, "PN: expected '%s', got '%s' for formatted Family, Given" % (expected, got)) + + def testUnicodeKr(self): + """PN: 3component in unicode works (Korean)..............................""" + # Example name from PS3.5-2008 section I.2 p. 101 + pn = PersonNameUnicode( + """Hong^Gildong=\033$)C\373\363^\033$)C\321\316\324\327=\033$)C\310\253^\033$)C\261\346\265\277""", + [default_encoding, 'euc_kr']) + expected = ("Hong", "Gildong") + got = (pn.family_name, pn.given_name) + self.assertEqual(got, expected, "PN: Expected single_byte name '{0!s}', got '{1!s}'".format(expected, got)) + + def testUnicodeJp(self): + """PN: 3component in unicode works (Japanese)............................""" + # Example name from PS3.5-2008 section H p. 98 + pn = PersonNameUnicode( + """Yamada^Tarou=\033$B;3ED\033(B^\033$BB@O:\033(B=\033$B$d$^$@\033(B^\033$B$?$m$&\033(B""", + [default_encoding, 'iso2022_jp']) + expected = ("Yamada", "Tarou") + got = (pn.family_name, pn.given_name) + self.assertEqual(got, expected, "PN: Expected single_byte name '{0!s}', got '{1!s}'".format(expected, got)) + + def testNotEqual(self): + """PN3: Not equal works correctly (issue 121)...........................""" + # Meant to only be used in python 3 but doing simple check here + from dicom.valuerep import PersonName3 + pn = PersonName3("John^Doe") + msg = "PersonName3 not equal comparison did not work correctly" + self.assertFalse(pn != "John^Doe", msg) + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/version_dep.py pydicom-0.9.9/source/dicom/test/version_dep.py --- pydicom-0.9.8/source/dicom/test/version_dep.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/version_dep.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,18 @@ +# version_dep.py +"""Holds test code that is dependent on certain python versions""" +# Copyright (c) 2009-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import warnings + + +def capture_warnings(function, *func_args, **func_kwargs): + """Capture function result and warnings. + """ + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + result = function(*func_args, **func_kwargs) + all_warnings = w + return result, [str(warning.message) for warning in all_warnings] diff -Nru pydicom-0.9.8/source/dicom/test/warncheck.py pydicom-0.9.9/source/dicom/test/warncheck.py --- pydicom-0.9.8/source/dicom/test/warncheck.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/warncheck.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,43 @@ +# warncheck.py +# +import warnings +import unittest +from dicom.test.version_dep import capture_warnings + + +def assertWarns(self, warn_msg, function, *func_args, **func_kwargs): + """ + Check that the function generates the expected warning + with the arguments given. + + warn_msg -- part of the warning string, any warnings should contain this + function -- the function to call (expected to issue a warning) + func_args -- positional arguments to the function + func_kwargs -- keyword arguments to the function + + Return the function return value. + """ + result, all_warnings = capture_warnings(function, *func_args, + **func_kwargs) + + msg = "Expected one warning; got {0:d}" + self.assertTrue(len(all_warnings) == 1, msg.format(len(all_warnings))) + msg = "Expected warning message '{0:s}...'; got '{1:s}'" + self.assertTrue(warn_msg in all_warnings[0], + msg.format(warn_msg, all_warnings[0])) + return result + + +def test_warning(the_warning): + if the_warning: + warnings.warn(the_warning) + + +class WarnTests(unittest.TestCase): + def testWarn(self): + """Test that assertWarns works as expected""" + assertWarns(self, "Look", test_warning, "Look out") + + +if __name__ == "__main__": + unittest.main() diff -Nru pydicom-0.9.8/source/dicom/test/_write_stds.py pydicom-0.9.9/source/dicom/test/_write_stds.py --- pydicom-0.9.8/source/dicom/test/_write_stds.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/test/_write_stds.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,68 @@ +# _write_stds.py +"""Snippets for what a particular dataset (including nested sequences) +should look like after writing in different expl/impl Vr and endian combos, +as well as undefined length sequences and items +""" + +# Implicit VR, little endian, SQ's with defined lengths +impl_LE_deflen_std_hex = ( + "10 00 10 00 " # (0010, 0010) Patient's Name + "0c 00 00 00 " # length 12 + "4e 61 6d 65 5e 50 61 74 69 65 6e 74 " # "Name^Patient" + "06 30 39 00 " # (3006, 0039) ROI Contour Sequence + "5a 00 00 00 " # length 90 + "fe ff 00 e0 " # (fffe, e000) Item Tag + "52 00 00 00 " # length 82 + "06 30 40 00 " # (3006, 0040) Contour Sequence + "4a 00 00 00 " # length 74 + "fe ff 00 e0 " # (fffe, e000) Item Tag + "1a 00 00 00 " # length 26 + "06 30 48 00 " # (3006, 0048) Contour Number + "02 00 00 00 " # length 2 + "31 20 " # "1 " + "06 30 50 00 " # (3006, 0050) Contour Data + "08 00 00 00 " # length 8 + "32 5c 34 5c 38 5c 31 36 " # "2\4\8\16" + "fe ff 00 e0 " # (fffe, e000) Item Tag + "20 00 00 00 " # length 32 + "06 30 48 00 " # (3006, 0048) Contour Number + "02 00 00 00 " # length 2 + "32 20 " # "2 " + "06 30 50 00 " # (3006, 0050) Contour Data + "0e 00 00 00 " # length 14 + "33 32 5c 36 34 5c 31 32 38 5c 31 39 36 20 " + # "32\64\128\196 " +) + +# Implicit VR, big endian, SQ's with defined lengths +# Realized after coding this that there is no Impl VR big endian in DICOM std; +# however, it seems to exist as a GE private transfer syntax. +# Will leave this here for now. +impl_BE_deflen_std_hex = ( + "00 10 00 10 " # (0010, 0010) Patient's Name + "00 00 00 0c " # length 12 + "4e 61 6d 65 5e 50 61 74 69 65 6e 74 " # "Name^Patient" + "30 06 00 39 " # (3006, 0039) ROI Contour Sequence + "00 00 00 5a " # length 90 + "ff fe e0 00 " # (fffe, e000) Item Tag + "00 00 00 52 " # length 82 + "30 06 00 40 " # (3006, 0040) Contour Sequence + "00 00 00 4a " # length 74 + "ff fe e0 00 " # (fffe, e000) Item Tag + "00 00 00 1a " # length 26 + "30 06 00 48 " # (3006, 0048) Contour Number + "00 00 00 02 " # length 2 + "31 20 " # "1 " + "30 06 00 50 " # (3006, 0050) Contour Data + "00 00 00 08 " # length 8 + "32 5c 34 5c 38 5c 31 36 " # "2\4\8\16" + "ff fe e0 00 " # (fffe, e000) Item Tag + "20 00 00 00 " # length 32 + "30 06 00 48 " # (3006, 0048) Contour Number + "00 00 00 02 " # length 2 + "32 20 " # "2 " + "30 06 00 50 " # (3006, 0050) Contour Data + "00 00 00 0e " # length 14 + "33 32 5c 36 34 5c 31 32 38 5c 31 39 36 20 " + # "32\64\128\196 " +) diff -Nru pydicom-0.9.8/source/dicom/testcharsetfiles/charlist.py pydicom-0.9.9/source/dicom/testcharsetfiles/charlist.py --- pydicom-0.9.8/source/dicom/testcharsetfiles/charlist.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/testcharsetfiles/charlist.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,38 @@ +# charlist.py +"""List summary info for the test files in the charset directory""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import logging +logging.basicConfig(level=logging.INFO, + format='%(message)s') + +if __name__ == "__main__": + from glob import glob + import dicom + + # Get list of all DICOM files + names = glob("*.dcm") + + # Collect summary information from the files + files_info = [] + for name in names: + ds = dicom.read_file(name) + ds.decode() + files_info.append((name, ds.SpecificCharacterSet, ds.PatientsName)) + + # Show the information + format = "%-16s %-40s %s" + logging.info(format % ("Filename", "Character Sets", "Patient's Name")) + logging.info(format % ("--------", "--------------", "--------------")) + for file_info in files_info: + logging.info(format % file_info) + + if "chrFrenMulti.dcm" in names: + logging.info("\nOther\n=====") + logging.info( + "chrFrenMulti.dcm is a modified version of chrFren.dcm" + " with multi-valued PN and LO for testing decoding" + ) Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrArab.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrArab.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrFren.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrFren.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrFrenMulti.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrFrenMulti.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrGerm.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrGerm.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrGreek.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrGreek.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrH31.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrH31.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrH32.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrH32.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrHbrw.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrHbrw.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrI2.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrI2.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrJapMulti.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrJapMulti.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrKoreanMulti.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrKoreanMulti.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrRuss.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrRuss.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrSQEncoding.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrSQEncoding.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrX1.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrX1.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testcharsetfiles/chrX2.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testcharsetfiles/chrX2.dcm differ diff -Nru pydicom-0.9.8/source/dicom/testcharsetfiles/FileInfo.txt pydicom-0.9.9/source/dicom/testcharsetfiles/FileInfo.txt --- pydicom-0.9.8/source/dicom/testcharsetfiles/FileInfo.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/testcharsetfiles/FileInfo.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,18 @@ +Filename Character Sets "Patient's Name" +-------- -------------- '--------------' +chrArab.dcm ISO_IR 127 '\xe2\xc8\xc7\xe6\xea^\xe4\xe6\xd2\xc7\xd1' +chrFren.dcm ISO_IR 100 'Buc^J\xe9r\xf4me' +chrFrenMulti.dcm ISO_IR 100 'Buc^J\xe9r\xf4me' +chrGerm.dcm ISO_IR 100 '\xc4neas^R\xfcdiger' +chrGreek.dcm ISO_IR 126 '\xc4\xe9\xef\xed\xf5\xf3\xe9\xef\xf2' +chrH31.dcm ['', 'ISO 2022 IR 87'] 'Yamada^Tarou=\x1b$B;3ED\x1b(B^\x1b$BB@O:\x1b(B=\x1b$B$d$^$@\x1b(B^\x1b$B$?$m$&\x1b(B' +chrH32.dcm ['ISO 2022 IR 13', 'ISO 2022 IR 87'] '\xd4\xcf\xc0\xde^\xc0\xdb\xb3=\x1b$B;3ED\x1b(J^\x1b$BB@O:\x1b(J=\x1b$B$d$^$@\x1b(J^\x1b$B$?$m$&\x1b(J' +chrHbrw.dcm ISO_IR 138 '\xf9\xf8\xe5\xef^\xe3\xe1\xe5\xf8\xe4' +chrI2.dcm ['', 'ISO 2022 IR 149'] 'Hong^Gildong=\x1b$)C\xfb\xf3^\x1b$)C\xd1\xce\xd4\xd7=\x1b$)C\xc8\xab^\x1b$)C\xb1\xe6\xb5\xbf' +chrRuss.dcm ISO_IR 144 '\xbb\xee\xdace\xdc\xd1yp\xd3' +chrX1.dcm ISO_IR 192 'Wang^XiaoDong=\xe7\x8e\x8b^\xe5\xb0\x8f\xe6\x9d\xb1=' +chrX2.dcm GB18030 'Wang^XiaoDong=\xcd\xf5^\xd0\xa1\xb6\xab=' + +Other +===== +chrFrenMulti.dcm is a modified version of chrFren.dcm with multi-valued PN and LO for testing decoding Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/CT_small.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/CT_small.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CR1/6154 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CR1/6154 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CR2/6247 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CR2/6247 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CR3/6278 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CR3/6278 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CT2/17106 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CT2/17106 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CT2/17136 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CT2/17136 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CT2/17166 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CT2/17166 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/77654033/CT2/17196 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/77654033/CT2/17196 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT2N/6293 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT2N/6293 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT2N/6924 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT2N/6924 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT5N/2062 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT5N/2062 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT5N/2392 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT5N/2392 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT5N/2693 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT5N/2693 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT5N/3023 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT5N/3023 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892001/CT5N/3353 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892001/CT5N/3353 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR1/15820 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR1/15820 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR1/4919 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR1/4919 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR1/5641 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR1/5641 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/15970 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/15970 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/4950 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/4950 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/4981 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/4981 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/5011 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/5011 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/6273 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/6273 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/6605 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/6605 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR2/6935 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR2/6935 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4467 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4467 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4528 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4528 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4558 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4558 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4588 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4588 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4618 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4618 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4648 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4648 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/98892003/MR700/4678 and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/98892003/MR700/4678 differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/dicomdirtests/DICOMDIR and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/dicomdirtests/DICOMDIR differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/ExplVR_BigEnd.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/ExplVR_BigEnd.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/image_dfl.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/image_dfl.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/JPEG2000.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/JPEG2000.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/JPEG-LL.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/JPEG-LL.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/JPEG-lossy.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/JPEG-lossy.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/MR_small.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/MR_small.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/nested_priv_SQ.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/nested_priv_SQ.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/no_meta_group_length.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/no_meta_group_length.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/priv_SQ.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/priv_SQ.dcm differ diff -Nru pydicom-0.9.8/source/dicom/testfiles/README.txt pydicom-0.9.9/source/dicom/testfiles/README.txt --- pydicom-0.9.8/source/dicom/testfiles/README.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/testfiles/README.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,133 @@ +Test Files used for testing pydicom +----------------------------------- +I obtained images to test the pydicom code, and revised them as follow: + * images were often downsized to keep the total file size quite small (typically <50K-ish). I wanted unittests for the code where I could run a number of tests quickly, and with files I could include in the source (and binary) distributions without bloating them too much + * In some cases, the original files have been binary edited to replace anything that looks like a real patient name + +I believe there is no restriction on using any of these files in this manner. + +CT_small.dcm + * CT image, Explicit VR, LittleEndian + * Downsized to 128x128 from 'CT1_UNC', ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ + +MR_small.dcm + * MR image, Explicit VR, LittleEndian + * Downsized to 64x64 from 'MR1_UNC', ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ + +JPEG2000.dcm + * JPEG 2000 small image + * to test JPEG transfer syntax, eventually JPEG decompression + * Edited 'NM1_J2KI' from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04 + +image_dfl.dcm + * Compressed (using "deflate" zlib compression) after FileMeta + * 'image_dfl' from http://www.dclunie.com/images/compressed/ + +ExplVR_BigEnd.dcm + * Big Endian test image + * Also is Samples Per Pixel of 3 (RGB) + * Downsized to 60x80 from 'US-RGB-8-epicard' at http://www.barre.nom.fr/medical/samples/ + +JPEG-LL.dcm + * NM1_JPLL from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ + * Transfer Syntax 1.2.840.10008.1.2.4.70: JPEG Lossless Default Process 14 [Selection Value 1] + +JPEG-lossy.dcm + * NM1_JPLY from ftp://medical.nema.org/MEDICAL/Dicom/DataSets/WG04/ + * 1.2.840.10008.1.2.4.51 Default Transfer Syntax for Lossy JPEG 12-bit + +Created by a commercial radiotherapy treatment planning system and modified: +rtplan.dcm Implicit VR, Little Endian +rtdose.dcm Implicit VR, Little Endian + + +chr*.dcm + * Character set files for testing (0008,0005) Specific Character Set + * from http://www.dclunie.com/images/charset/SCS* + * downsized to 32x32 since pixel data is irrelevant for these (test pattern only) + +test_SR.dcm + * from ftp://ftp.dcmtk.org/pub/dicom/offis/software/dscope/dscope360/support/srdoc103.zip, file "test.dcm" + * Structured Reporting example, many levels of nesting + +priv_SQ.dcm + * a file with an undefined length SQ item in a private tag. + * minimal data elements kept from example files in issues 91, 97, 98 + +zipMR.gz + * a gzipped version of MR_small.dcm + * used for checking that deferred read reopens as zip again (issue 103) + +== DICOMDIR tests == + +dicomdirtests files were from http://www.pcir.org, freely available image sets. +They were downsized to 16x16 images to keep them very small so they +could be added to the source distribution without bloating it. For the +same reason, many were removed, leaving only samples of the studies, +series, and images. + +For the subdirectories ending in "N" (e.g. CT2N, CT5N), the name indicates +the number of images inside the folder, i.e. CT2N has two images, +CT5N has five. This was a memory-aid for use in unit tests. + +Below is the hierarchy of Patient, Study, Series, Images that comes from a +straight read of the dicomdirtests DICOMDIR file. The DICOMDIR file itself +was created using the dcmtk program dcmgpdir. It complained about different +Specific Character Set in some of the files, so some with 2022 IR6 were set +to ISO_IR 100. + + +Patient: 77654033: Doe^Archibald + Study 2: 20010101: XR C Spine Comp Min 4 Views + Series 1: CR: (1 image) + ['./77654033/CR1/6154'] + Series 2: CR: (1 image) + ['./77654033/CR2/6247'] + Series 3: CR: (1 image) + ['./77654033/CR3/6278'] + Study 2: 19950903: CT, HEAD/BRAIN WO CONTRAST + Series 2: CT: (4 images) + ['./77654033/CT2/17106', + './77654033/CT2/17136', + './77654033/CT2/17166', + './77654033/CT2/17196'] + +Patient: 98890234: Doe^Peter + Study 2: 20010101: + Series 4: CT: (2 images) + ['./98892001/CT2N/6293', + './98892001/CT2N/6924'] + Series 5: CT: (5 images) + ['./98892001/CT5N/2062', + './98892001/CT5N/2392', + './98892001/CT5N/2693', + './98892001/CT5N/3023', + './98892001/CT5N/3353'] + Study 428: 20030505: Carotids + Series 1: MR: (1 image) + ['./98892003/MR1/15820'] + Series 2: MR: (1 image) + ['./98892003/MR2/15970'] + Study 134: 20030505: Brain + Series 1: MR: (1 image) + ['./98892003/MR1/4919'] + Series 2: MR: (3 images) + ['./98892003/MR2/4950', + './98892003/MR2/5011', + './98892003/MR2/4981'] + Study 2: 20030505: Brain-MRA + Series 1: MR: (1 image) + ['./98892003/MR1/5641'] + Series 2: MR: (3 images) + ['./98892003/MR2/6935', + './98892003/MR2/6605', + './98892003/MR2/6273'] + Series 700: MR: (7 images) + ['./98892003/MR700/4558', + './98892003/MR700/4528', + './98892003/MR700/4588', + './98892003/MR700/4467', + './98892003/MR700/4618', + './98892003/MR700/4678', + './98892003/MR700/4648'] + Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/reportsi.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/reportsi.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/rtdose.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/rtdose.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/rtplan.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/rtplan.dcm differ diff -Nru pydicom-0.9.8/source/dicom/testfiles/rtplan.dump pydicom-0.9.9/source/dicom/testfiles/rtplan.dump --- pydicom-0.9.8/source/dicom/testfiles/rtplan.dump 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/testfiles/rtplan.dump 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,250 @@ +0000 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +... +0070 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +0080 : 44 49 43 4d DICOM prefix 'DICM' +------------ File meta information ------------------------------------- +(Always Explicit VR, Little Endian) +0084 : 02 00 00 00 (0002,0000) +0088 : 55 4c UL +008A : 04 00 value length 4 bytes +008C : 9c 00 00 00 value = 156 + +0090 : 02 00 01 00 (0002, 0001) +0094 : 4f 42 Explicit VR 'OB' +0096 : 00 00 2-byte reserved +0098 : 02 00 00 00 value length = 2 +009c : 00 01 + +009e : 02 00 02 00 (0002, 0002) Media Storage SOP Class UID +00a2 : 55 49 Explicit VR 'UI' +00a4 : 1e 00 value length 30 bytes +00a6 : 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 1.2.840.10008.5. +00b6 : 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 1.4.1.1.481.5 +00c3 00 pad to even length + +00c4 : 02 00 03 00 (0002, 0003) +00c8 : 55 49 Explicit VR 'UI' +00ca : 2a 00 Value length 42 bytes +00cc : 31 2e 32 2e 39 39 39 2e 39 39 39 2e 39 39 2e 39 1.2.999.999.99.9 +00dc : 2e 39 39 39 39 2e 39 39 39 39 2e 32 30 30 33 30 .9999.9999.20030 +00ec : 39 30 33 31 35 30 30 32 33 903150023 +00f5 : 00 pad to even length + +00f6 : 02 00 10 00 55 49 12 00 31 2e .....UI..1. +0100 : 32 2e 38 34 30 2e 31 30 30 30 38 2e 31 2e 32 00 2.840.10008.1.2. +0110 : 02 00 12 00 55 49 14 00 31 2e 32 2e 38 38 38 2e ....UI..1.2.888. +0120 : 38 38 38 2e 38 38 2e 38 2e 38 2e 38 08 00 + 12 00 888.88.8.8.8.... +0130 : 08 00 00 00 32 30 30 33 30 39 30 33 08 00 13 00 ....20030903.... +0140 : 06 00 00 00 31 35 30 30 33 31 08 00 16 00 1e 00 ....150031...... +0150 : 00 00 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e ..1.2.840.10008. +0160 : 35 2e 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 00 5.1.4.1.1.481.5. +0170 : 08 00 18 00 2a 00 00 00 31 2e 32 2e 37 37 37 2e ....*...1.2.777. +0180 : 37 37 37 2e 37 37 2e 37 2e 37 37 37 37 2e 37 37 777.77.7.7777.77 +0190 : 37 37 2e 32 30 30 33 30 39 30 33 31 35 30 30 32 77.2003090315002 +01a0 : 33 00 08 00 20 00 08 00 00 00 32 30 30 33 30 37 3... .....200307 +01b0 : 31 36 08 00 30 00 06 00 00 00 31 35 33 35 35 37 16..0.....153557 +01c0 : 08 00 50 00 00 00 00 00 08 00 60 00 06 00 00 00 ..P.......`..... +01d0 : 52 54 50 4c 41 4e 08 00 70 00 16 00 00 00 4d 61 RTPLAN..p.....Ma +01e0 : 6e 75 66 61 63 74 75 72 65 72 20 6e 61 6d 65 20 nufacturer name +01f0 : 68 65 72 65 08 00 80 00 04 00 00 00 48 65 72 65 here........Here +0200 : 08 00 90 00 00 00 00 00 08 00 10 10 0c 00 00 00 ................ +0210 : 43 4f 4d 50 55 54 45 52 30 30 32 20 08 00 40 10 COMPUTER002 ..@. +0220 : 10 00 00 00 52 61 64 69 61 74 69 6f 6e 20 54 68 ....Radiation Th +0230 : 65 72 61 70 08 00 70 10 08 00 00 00 6f 70 65 72 erap..p.....oper +0240 : 61 74 6f 72 08 00 90 10 24 00 00 00 54 72 65 61 ator....$...Trea +0250 : 74 6d 65 6e 74 20 50 6c 61 6e 6e 69 6e 67 20 53 tment Planning S +0260 : 79 73 74 65 6d 20 6e 61 6d 65 20 68 65 72 65 20 ystem name here +0270 : 10 00 10 00 12 00 00 00 4c 61 73 74 5e 46 69 72 ........Last^Fir +0280 : 73 74 5e 6d 69 64 5e 70 72 65 10 00 20 00 08 00 st^mid^pre.. ... +0290 : 00 00 69 64 30 30 30 30 31 20 10 00 30 00 00 00 ..id00001 ..0... +02a0 : 00 00 10 00 40 00 02 00 00 00 4f 20 18 00 20 10 ....@.....O .. . +02b0 : 0a 00 00 00 73 6f 66 74 77 61 72 65 56 31 20 00 ....softwareV1 . +02c0 : 0d 00 30 00 00 00 31 2e 32 32 2e 33 33 33 2e 34 ..0...1.22.333.4 +02d0 : 2e 35 35 35 35 35 35 2e 36 2e 37 37 37 37 37 37 .555555.6.777777 +02e0 : 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777 +02f0 : 37 37 37 37 37 37 20 00 0e 00 1a 00 00 00 31 2e 777777 .......1. +0300 : 32 2e 33 33 33 2e 34 34 34 2e 35 35 2e 36 2e 37 2.333.444.55.6.7 +0310 : 37 37 37 2e 38 38 38 38 20 00 10 00 06 00 00 00 777.8888 ....... +0320 : 73 74 75 64 79 31 20 00 11 00 02 00 00 00 32 20 study1 .......2 +0330 : 0a 30 02 00 06 00 00 00 50 6c 61 6e 31 20 0a 30 .0......Plan1 .0 +0340 : 03 00 06 00 00 00 50 6c 61 6e 31 20 0a 30 06 00 ......Plan1 .0.. +0350 : 08 00 00 00 32 30 30 33 30 39 30 33 0a 30 07 00 ....20030903.0.. +0360 : 06 00 00 00 31 35 30 30 32 33 0a 30 0c 00 08 00 ....150023.0.... +0370 : 00 00 50 41 54 49 45 4e 54 20 0a 30 10 00 44 01 ..PATIENT .0..D. +0380 : 00 00 fe ff 00 e0 aa 00 00 00 0a 30 12 00 02 00 ...........0.... +0390 : 00 00 31 20 0a 30 14 00 0c 00 00 00 43 4f 4f 52 ..1 .0......COOR +03a0 : 44 49 4e 41 54 45 53 20 0a 30 16 00 04 00 00 00 DINATES .0...... +03b0 : 69 73 6f 20 0a 30 18 00 32 00 00 00 32 33 39 2e iso .0..2...239. +03c0 : 35 33 31 32 35 30 30 30 30 30 30 30 5c 32 33 39 531250000000.239 +03d0 : 2e 35 33 31 32 35 30 30 30 30 30 30 30 5c 2d 37 .531250000000.-7 +03e0 : 34 31 2e 38 37 30 30 30 30 30 30 30 30 30 0a 30 41.87000000000.0 +03f0 : 20 00 0e 00 00 00 4f 52 47 41 4e 5f 41 54 5f 52 .....ORGAN_AT_R +0400 : 49 53 4b 20 0a 30 23 00 10 00 00 00 37 35 2e 30 ISK .0#.....75.0 +0410 : 30 30 30 30 30 30 30 30 30 30 30 30 0a 30 2c 00 000000000000.0,. +0420 : 10 00 00 00 37 35 2e 30 30 30 30 30 30 30 30 30 ....75.000000000 +0430 : 30 30 30 30 fe ff 00 e0 8a 00 00 00 0a 30 12 00 0000.........0.. +0440 : 02 00 00 00 32 20 0a 30 14 00 0c 00 00 00 43 4f ....2 .0......CO +0450 : 4f 52 44 49 4e 41 54 45 53 20 0a 30 16 00 04 00 ORDINATES .0.... +0460 : 00 00 50 54 56 20 0a 30 18 00 32 00 00 00 32 33 ..PTV .0..2...23 +0470 : 39 2e 35 33 31 32 35 30 30 30 30 30 30 30 5c 32 9.531250000000.2 +0480 : 33 39 2e 35 33 31 32 35 30 30 30 30 30 30 30 5c 39.531250000000. +0490 : 2d 37 35 31 2e 38 37 30 30 30 30 30 30 30 30 30 -751.87000000000 +04a0 : 0a 30 20 00 06 00 00 00 54 41 52 47 45 54 0a 30 .0 .....TARGET.0 +04b0 : 26 00 10 00 00 00 33 30 2e 38 32 36 32 30 33 30 &.....30.8262030 +04c0 : 30 30 30 30 30 30 0a 30 70 00 b4 00 00 00 fe ff 000000.0p....... +04d0 : 00 e0 ac 00 00 00 0a 30 71 00 02 00 00 00 31 20 .......0q.....1 +04e0 : 0a 30 78 00 02 00 00 00 33 30 0a 30 80 00 02 00 .0x.....30.0.... +04f0 : 00 00 31 20 0a 30 a0 00 02 00 00 00 30 20 0c 30 ..1 .0......0 .0 +0500 : 04 00 7c 00 00 00 fe ff 00 e0 74 00 00 00 0a 30 ..|.......t....0 +0510 : 82 00 32 00 00 00 32 33 39 2e 35 33 31 32 35 30 ..2...239.531250 +0520 : 30 30 30 30 30 30 5c 32 33 39 2e 35 33 31 32 35 000000.239.53125 +0530 : 30 30 30 30 30 30 30 5c 2d 37 35 31 2e 38 37 30 0000000.-751.870 +0540 : 30 30 30 30 30 30 30 30 0a 30 84 00 10 00 00 00 00000000.0...... +0550 : 31 2e 30 32 37 35 34 30 31 30 30 30 30 30 30 30 1.02754010000000 +0560 : 0a 30 86 00 10 00 00 00 31 31 36 2e 30 30 33 36 .0......116.0036 +0570 : 36 39 37 30 30 30 30 30 0c 30 06 00 02 00 00 00 69700000.0...... +0580 : 31 20 +0582 : 0a 30 b0 00 (300a, 00b0) Beam Sequence + Implicit VR 'SQ' +0586 : d0 03 00 00 length 976 bytes + 058a : fe ff 00 e0 Item tag (FFFE, E000) + 058e : c8 03 00 00 Item length 968 bytes + + 0592 : 08 00 70 00 (0008, 0070) Manufacturer + Implicit VR 'LO' + 0596 : 0a 00 00 00 Value length 10 bytes + 059a : 4c 69 6e 61 63 20 63 6f 2e Linac co. + 05a3 : 20 pad to even length with blank + + 05a4 : 08 00 80 00 (0008, 0080) Institution Name + 04 00 00 00 Value length 4 + 48 65 72 65 value 'Here' + + 05b0 : 08 00 40 10 (0008, 1040) Institutional Department Name + 10 00 00 00 value length 16 + 52 61 64 69 61 74 69 6f 6e 20 54 68 65 72 61 70 value 'Radiation Therap' + 05c8 : 08 00 90 10 (0008, 1090) Manufacturer's Model Name + 0a 00 00 00 value length 10 + 05d0 : 5a 61 70 70 65 72 39 30 30 30 value 'Zapper9000' + + 18 00 00 10 (0018, 1000) Device Serial Number + 04 00 00 00 value length 4 + 05e2 : 39 39 39 39 value '9999' + + 0a 30 b2 00 (300a, 00b2) Treatment Machine Name + 08 00 00 00 value length 8 + 75 6e 69 74 30 30 31 20 value 'unit001 " + + 05f5 : 0a 30 b3 00 (300a, 00b3) Primary Dosimeter Unit + 02 00 00 00 value length 2 + 4d 55 value 'MU' + 0600 : 0a 30 b4 00 (300a, 00b4) Source-Axis Distance + 10 00 00 00 value length 16 + 31 30 30 30 2e 30 30 30 30 30 30 30 30 30 30 30 value '1000.00000000000' + + 0608: 0a 30 b6 00 (300a, 00b6) Beam Limiting Device Sequence + 38 00 00 00 length 56 + 0620 : fe ff 00 e0 Item tag (FFFE, E000) + 14 00 00 00 Item length 20 + + 0a 30 b8 00 (300a, 00b8) RT Beam Limiting Device Type + 02 00 00 00 value length 2 + 58 20 value 'X ' + + 0a 30 bc 00 (300a, 00bc) Number of Leaf/Jaw Pairs + 02 00 00 00 value length 2 + 31 20 value '1 ' + fe ff 00 e0 Item tag (FFFE, E000) + 14 00 00 00 Item length 20 + 0a 30 b8 00 (300a, 00b8) RT Beam Limiting Device Type + 02 00 00 00 value length 2 + 59 20 value 'Y ' + 0a 30 bc 00 (300a, 00bc) Number of Leaf/Jaw Pairs + + 0652 : 02 00 00 00 value length 2 + 31 20 value '1 ' + 0a 30 c0 00 (300a, 00c0) Beam Number + 02 00 00 00 value length 2 + 0660 : 31 20 value '1 ' + 0a 30 c2 00 (300a, 00c2) Beam Name + 08 00 00 00 value length 8 + 46 69 65 6c 64 20 31 20 'Field 1 ' +0672 : 0a 30 c4 00 06 00 00 00 53 54 41 54 49 43 1 .0......STATIC +0680 : 0a 30 c6 00 06 00 00 00 50 48 4f 54 4f 4e 0a 30 .0......PHOTON.0 +0690 : ce 00 0a 00 00 00 54 52 45 41 54 4d 45 4e 54 20 ......TREATMENT +06a0 : 0a 30 d0 00 02 00 00 00 30 20 0a 30 e0 00 02 00 .0......0 .0.... +06b0 : 00 00 30 20 0a 30 ed 00 02 00 00 00 30 20 0a 30 ..0 .0......0 .0 +06c0 : f0 00 02 00 00 00 30 20 0a 30 0e 01 10 00 00 00 ......0 .0...... +06d0 : 31 2e 30 30 30 30 30 30 30 30 30 30 30 30 30 30 1.00000000000000 +06e0 : 0a 30 10 01 02 00 00 00 32 20 0a 30 11 01 5e 02 .0......2 .0..^. +06f0 : 00 00 fe ff 00 e0 d4 01 00 00 0a 30 12 01 02 00 ...........0.... +0700 : 00 00 30 20 0a 30 14 01 10 00 00 00 36 2e 30 30 ..0 .0......6.00 +0710 : 30 30 30 30 30 30 30 30 30 30 30 30 0a 30 15 01 000000000000.0.. +0720 : 10 00 00 00 36 35 30 2e 30 30 30 30 30 30 30 30 ....650.00000000 +0730 : 30 30 30 30 0a 30 1a 01 78 00 00 00 fe ff 00 e0 0000.0..x....... +0740 : 34 00 00 00 0a 30 b8 00 02 00 00 00 58 20 0a 30 4....0......X .0 +0750 : 1c 01 22 00 00 00 2d 31 30 30 2e 30 30 30 30 30 .."...-100.00000 +0760 : 30 30 30 30 30 30 5c 31 30 30 2e 30 30 30 30 30 000000.100.00000 +0770 : 30 30 30 30 30 30 30 20 fe ff 00 e0 34 00 00 00 0000000 ....4... +0780 : 0a 30 b8 00 02 00 00 00 59 20 0a 30 1c 01 22 00 .0......Y .0..". +0790 : 00 00 2d 31 30 30 2e 30 30 30 30 30 30 30 30 30 ..-100.000000000 +07a0 : 30 30 5c 31 30 30 2e 30 30 30 30 30 30 30 30 30 00.100.000000000 +07b0 : 30 30 30 20 0a 30 1e 01 04 00 00 00 30 2e 30 20 000 .0......0.0 +07c0 : 0a 30 1f 01 04 00 00 00 4e 4f 4e 45 0a 30 20 01 .0......NONE.0 . +07d0 : 04 00 00 00 30 2e 30 20 0a 30 21 01 04 00 00 00 ....0.0 .0!..... +07e0 : 4e 4f 4e 45 0a 30 22 01 04 00 00 00 30 2e 30 20 NONE.0".....0.0 +07f0 : 0a 30 23 01 04 00 00 00 4e 4f 4e 45 0a 30 25 01 .0#.....NONE.0%. +0800 : 04 00 00 00 30 2e 30 20 0a 30 26 01 04 00 00 00 ....0.0 .0&..... +0810 : 4e 4f 4e 45 0a 30 28 01 00 00 00 00 0a 30 29 01 NONE.0(......0). +0820 : 00 00 00 00 0a 30 2a 01 00 00 00 00 0a 30 2c 01 .....0*......0,. +0830 : 32 00 00 00 32 33 35 2e 37 31 31 31 37 32 38 33 2...235.71117283 +0840 : 33 32 39 32 5c 32 34 34 2e 31 33 35 34 33 37 31 3292.244.1354371 +0850 : 31 30 37 38 32 5c 2d 37 32 34 2e 39 37 38 31 35 10782.-724.97815 +0860 : 34 30 39 39 31 38 0a 30 30 01 10 00 00 00 38 39 409918.00.....89 +0870 : 38 2e 34 32 39 36 36 34 38 33 31 33 30 39 0a 30 8.429664831309.0 +0880 : 34 01 04 00 00 00 30 2e 30 20 0c 30 50 00 3c 00 4.....0.0 .0P.<. +0890 : 00 00 +fe ff 00 e0 +16 00 00 00 0a 30 0c 01 04 00 ...........0.... +08a0 : 00 00 30 2e 30 20 0c 30 51 00 02 00 00 00 31 20 ..0.0 .0Q.....1 +08b0 : fe ff 00 e0 16 00 00 00 0a 30 0c 01 04 00 00 00 .........0...... +08c0 : 30 2e 30 20 0c 30 51 00 02 00 00 00 32 20 fe ff 0.0 .0Q.....2 .. +08d0 : 00 e0 7a 00 00 00 0a 30 12 01 02 00 00 00 31 20 ..z....0......1 +08e0 : 0a 30 34 01 10 00 00 00 31 2e 30 30 30 30 30 30 .04.....1.000000 +08f0 : 30 30 30 30 30 30 30 30 0c 30 50 00 50 00 00 00 00000000.0P.P... +0900 : fe ff 00 e0 1e 00 00 00 0a 30 0c 01 0c 00 00 00 .........0...... +0910 : 39 2e 39 39 30 32 36 38 30 65 2d 31 0c 30 51 00 9.9902680e-1.0Q. +0920 : 02 00 00 00 31 20 fe ff 00 e0 22 00 00 00 0a 30 ....1 ...."....0 +0930 : 0c 01 10 00 00 00 31 2e 30 30 30 30 30 30 30 30 ......1.00000000 +0940 : 30 30 30 30 30 30 0c 30 51 00 02 00 00 00 32 20 000000.0Q.....2 +0950 : 0c 30 6a 00 02 00 00 00 31 20 +===== ??? end of SQ????? +095a : 0a 30 80 01 (300a, 0180) Patient Setup Sequence + Implicit VR 'SQ' +095e : 26 00 00 00 Length 38 bytes +0962 : fe ff 00 e0 (fffe, e000) Item Tag +0966 : 1e 00 00 00 Item length 30 bytes +096a : 18 00 00 51 (0018, 5100) Patient Position + Implicit VR 'CS' +096e : 04 00 00 00 Value length 4 bytes +0973 : 48 46 53 HFS +0975 : 20 pad to even length +0976 : 0a 30 82 01 (300a, 0182) + 02 00 00 00 31 20 ..HFS .0......1 +0980 : 0a 30 b2 01 00 00 00 00 0c 30 02 00 74 00 00 00 .0.......0..t... +0990 : fe ff 00 e0 6c 00 00 00 08 00 50 11 1e 00 00 00 ....l.....P..... +09a0 : 31 2e 32 2e 38 34 30 2e 31 30 30 30 38 2e 35 2e 1.2.840.10008.5. +09b0 : 31 2e 34 2e 31 2e 31 2e 34 38 31 2e 35 00 08 00 1.4.1.1.481.5... +09c0 : 55 11 2a 00 00 00 31 2e 39 2e 39 39 39 2e 39 39 U.*...1.9.999.99 +09d0 : 39 2e 39 39 2e 39 2e 39 39 39 39 2e 39 39 39 39 9.99.9.9999.9999 +09e0 : 2e 32 30 30 33 30 39 30 33 31 34 35 31 32 38 00 .20030903145128. +09f0 : 0a 30 55 00 0c 00 00 00 50 52 45 44 45 43 45 53 .0U.....PREDECES +0a00 : 53 4f 52 20 0c 30 60 00 52 00 00 00 fe ff 00 e0 SOR .0`.R....... +0a10 : 4a 00 00 00 08 00 50 11 1e 00 00 00 31 2e 32 2e J.....P.....1.2. +0a20 : 38 34 30 2e 31 30 30 30 38 2e 35 2e 31 2e 34 2e 840.10008.5.1.4. +0a30 : 31 2e 31 2e 34 38 31 2e 33 00 08 00 55 11 1c 00 1.1.481.3...U... +0a40 : 00 00 31 2e 32 2e 33 33 33 2e 34 34 34 2e 35 35 ..1.2.333.444.55 +0a50 : 2e 36 2e 37 37 37 37 2e 38 38 38 38 38 00 0e 30 .6.7777.88888..0 +0a60 : 02 00 0a 00 00 00 55 4e 41 50 50 52 4f 56 45 44 ......UNAPPROVED +0a70 : Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/rtplan_truncated.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/rtplan_truncated.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/rtstruct.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/rtstruct.dcm differ diff -Nru pydicom-0.9.8/source/dicom/testfiles/rtstruct.dump pydicom-0.9.9/source/dicom/testfiles/rtstruct.dump --- pydicom-0.9.8/source/dicom/testfiles/rtstruct.dump 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/testfiles/rtstruct.dump 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,124 @@ +(0008, 0005) Specific Character Set CS: 'ISO_IR 100' +(0008, 0012) Instance Creation Date DA: '20091223' +(0008, 0013) Instance Creation Time TM: '123840' +(0008, 0014) Instance Creator UID UI: 1.2.826.0.1.3680043.8.498 +(0008, 0016) SOP Class UID UI: RT Structure Set Storage +(0008, 0018) SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001 +(0008, 0020) Study Date DA: '' +(0008, 0030) Study Time TM: '' +(0008, 0050) Accession Number SH: '1' +(0008, 0060) Modality CS: 'RTSTRUCT' +(0008, 0070) Manufacturer LO: 'pydicom' +(0008, 0090) Referring Physician's Name PN: '' +(0008, 1010) Station Name SH: 'station1' +(0008, 1070) Operators' Name PN: 'dmason' +(0008, 1090) Manufacturer's Model Name LO: 'TPS' +(0010, 0010) Patient's Name PN: 'Test^Phantom30sep' +(0010, 0020) Patient ID LO: 'tPhantom30sep' +(0010, 0030) Patient's Birth Date DA: '19691231' +(0010, 0040) Patient's Sex CS: 'M' +(0018, 1020) Software Version(s) LO: '0.9.3' +(0018, 5100) Patient Position CS: 'HFS' +(0020, 000d) Study Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.1 +(0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.1.1 +(0020, 0010) Study ID SH: 'sep30' +(0020, 0011) Series Number IS: '1' +(0020, 0013) Instance Number IS: '1' +(3006, 0002) Structure Set Label SH: 'sep30' +(3006, 0004) Structure Set Name LO: 'sep30' +(3006, 0008) Structure Set Date DA: '20091223' +(3006, 0009) Structure Set Time TM: '122507' +(3006, 0010) Referenced Frame of Reference Sequence 1 item(s) ---- + (0020, 0052) Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 + (3006, 0012) RT Referenced Study Sequence 1 item(s) ---- + (0008, 1150) Referenced SOP Class UID UI: Detached Study Management SOP Class + (0008, 1155) Referenced SOP Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2.1 + (3006, 0014) RT Referenced Series Sequence 1 item(s) ---- + (0020, 000e) Series Instance UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2.1.1 + --------- + --------- + --------- +(3006, 0020) Structure Set ROI Sequence 3 item(s) ---- + (3006, 0022) ROI Number IS: '1' + (3006, 0024) Referenced Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 + (3006, 0026) ROI Name LO: 'patient' + (3006, 0028) ROI Description ST: 'patient' + (3006, 002c) ROI Volume DS: '49200.0' + (3006, 0036) ROI Generation Algorithm CS: 'MANUAL' + --------- + (3006, 0022) ROI Number IS: '2' + (3006, 0024) Referenced Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 + (3006, 0026) ROI Name LO: 'Isocenter 1' + (3006, 0028) ROI Description ST: 'Isocenter Beam 1' + (3006, 0036) ROI Generation Algorithm CS: 'MANUAL' + --------- + (3006, 0022) ROI Number IS: '3' + (3006, 0024) Referenced Frame of Reference UID UI: 1.2.826.0.1.3680043.8.498.2010020400001.2 + (3006, 0026) ROI Name LO: 'Isocenter 2' + (3006, 0028) ROI Description ST: 'Isocenter Beam 2' + (3006, 0036) ROI Generation Algorithm CS: 'MANUAL' + --------- +(3006, 0039) ROI Contour Sequence 3 item(s) ---- + (3006, 002a) ROI Display Color IS: ['220', '160', '120'] + (3006, 0040) Contour Sequence 3 item(s) ---- + (3006, 0042) Contour Geometric Type CS: 'CLOSED_PLANAR' + (3006, 0046) Number of Contour Points IS: '5' + (3006, 0048) Contour Number IS: '1' + (3006, 0050) Contour Data DS: ['-200.0', '150.0', '-200.0', '-200.0', '-150.0', '-200.0', '200.0', '-150.0', '-200.0', '200.0', '150.0', '-200.0', '-200.0', '150.0', '-200.0'] + --------- + (3006, 0042) Contour Geometric Type CS: 'CLOSED_PLANAR' + (3006, 0046) Number of Contour Points IS: '6' + (3006, 0048) Contour Number IS: '2' + (3006, 0050) Contour Data DS: ['200.0', '-0.0', '-190.0', '200.0', '-150.0', '-190.0', '-200.0', '-150.0', '-190.0', '-200.0', '150.0', '-190.0', '200.0', '150.0', '-190.0', '200.0', '-0.0', '-190.0'] + --------- + (3006, 0042) Contour Geometric Type CS: 'CLOSED_PLANAR' + (3006, 0046) Number of Contour Points IS: '6' + (3006, 0048) Contour Number IS: '3' + (3006, 0050) Contour Data DS: ['200.0', '-0.0', '-180.0', '200.0', '-150.0', '-180.0', '-200.0', '-150.0', '-180.0', '-200.0', '150.0', '-180.0', '200.0', '150.0', '-180.0', '200.0', '-0.0', '-180.0'] + --------- + (3006, 0084) Referenced ROI Number IS: '1' + --------- + (3006, 002a) ROI Display Color IS: ['255', '64', '255'] + (3006, 0040) Contour Sequence 1 item(s) ---- + (3006, 0042) Contour Geometric Type CS: 'POINT' + (3006, 0046) Number of Contour Points IS: '1' + (3006, 0048) Contour Number IS: '1' + (3006, 0050) Contour Data DS: ['0.0', '-0.0', '0.0'] + --------- + (3006, 0084) Referenced ROI Number IS: '2' + --------- + (3006, 002a) ROI Display Color IS: ['255', '64', '255'] + (3006, 0040) Contour Sequence 1 item(s) ---- + (3006, 0042) Contour Geometric Type CS: 'POINT' + (3006, 0046) Number of Contour Points IS: '1' + (3006, 0048) Contour Number IS: '1' + (3006, 0050) Contour Data DS: ['0.0', '-0.0', '0.0'] + --------- + (3006, 0084) Referenced ROI Number IS: '3' + --------- +(3006, 0080) RT ROI Observations Sequence 3 item(s) ---- + (3006, 0082) Observation Number IS: '1' + (3006, 0084) Referenced ROI Number IS: '1' + (3006, 0085) ROI Observation Label SH: 'patient' + (3006, 0088) ROI Observation Description ST: 'patient' + (3006, 00a4) RT ROI Interpreted Type CS: 'EXTERNAL' + (3006, 00a6) ROI Interpreter PN: '' + (3006, 00b0) ROI Physical Properties Sequence 1 item(s) ---- + (3006, 00b2) ROI Physical Property CS: 'REL_ELEC_DENSITY' + (3006, 00b4) ROI Physical Property Value DS: '1.000' + --------- + --------- + (3006, 0082) Observation Number IS: '2' + (3006, 0084) Referenced ROI Number IS: '2' + (3006, 0085) ROI Observation Label SH: 'Isocenter 1' + (3006, 0088) ROI Observation Description ST: 'Isocenter Beam 1' + (3006, 00a4) RT ROI Interpreted Type CS: 'ISOCENTER' + (3006, 00a6) ROI Interpreter PN: '' + --------- + (3006, 0082) Observation Number IS: '3' + (3006, 0084) Referenced ROI Number IS: '3' + (3006, 0085) ROI Observation Label SH: 'Isocenter 2' + (3006, 0088) ROI Observation Description ST: 'Isocenter Beam 2' + (3006, 00a4) RT ROI Interpreted Type CS: 'ISOCENTER' + (3006, 00a6) ROI Interpreter PN: '' + --------- \ No newline at end of file diff -Nru pydicom-0.9.8/source/dicom/testfiles/test.py pydicom-0.9.9/source/dicom/testfiles/test.py --- pydicom-0.9.8/source/dicom/testfiles/test.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/testfiles/test.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,28 @@ +# test.py +"""Temporary test file for pydicom development; will change over revisions +as test various things +""" +# Copyright (c) 2013 Darcy Mason +# This file is part of pydicom, relased under an MIT-style license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com +# + +import dicom +# dicom.debug() + + +if __name__ == "__main__": + dcmdir = dicom.read_dicomdir() + for patrec in dcmdir.patient_records: + print("Patient: {0.PatientID}: {0.PatientsName}".format(patrec)) + studies = patrec.children + for study in studies: + print(" Study {0.StudyID}: {0.StudyDate}:" + " {0.StudyDescription}".format(study)) + all_series = study.children + for series in all_series: + image_count = len(series.children) + plural = ('', 's')[image_count > 1] + print(" " * 8 + "Series {0.SeriesNumber}: {0.SeriesDescription}" + " ({1} image{2})".format(series, image_count, plural)) Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/test-SR.dcm and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/test-SR.dcm differ Binary files /tmp/eCFqvS1Eph/pydicom-0.9.8/source/dicom/testfiles/zipMR.gz and /tmp/faEYoMsZHk/pydicom-0.9.9/source/dicom/testfiles/zipMR.gz differ diff -Nru pydicom-0.9.8/source/dicom/_UID_dict.py pydicom-0.9.9/source/dicom/_UID_dict.py --- pydicom-0.9.8/source/dicom/_UID_dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/_UID_dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,356 @@ +# _UID_dict.py +""" +Dictionary of UID: (name, type, name_info, is_retired) + +""" +# Auto-generated by docbook_to_uiddict2013.py (in Rickard Holmberg's clone) + +UID_dictionary = { + '1.2.840.10008.1.1': ('Verification SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.1.2': ('Implicit VR Little Endian', 'Transfer Syntax', 'Default Transfer Syntax for DICOM', ''), + '1.2.840.10008.1.2.1': ('Explicit VR Little Endian', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.1.99': ('Deflated Explicit VR Little Endian', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.2': ('Explicit VR Big Endian', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.50': ('JPEG Baseline (Process 1)', 'Transfer Syntax', 'Default Transfer Syntax for Lossy JPEG 8 Bit Image Compression', ''), + '1.2.840.10008.1.2.4.51': ('JPEG Extended (Process 2 and 4)', 'Transfer Syntax', 'Default Transfer Syntax for Lossy JPEG 12 Bit Image Compression (Process 4 only)', ''), + '1.2.840.10008.1.2.4.52': ('JPEG Extended (Process 3 and 5)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.53': ('JPEG Spectral Selection, Non-Hierarchical (Process 6 and 8)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.54': ('JPEG Spectral Selection, Non-Hierarchical (Process 7 and 9)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.55': ('JPEG Full Progression, Non-Hierarchical (Process 10 and 12)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.56': ('JPEG Full Progression, Non-Hierarchical (Process 11 and 13)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.57': ('JPEG Lossless, Non-Hierarchical (Process 14)', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.58': ('JPEG Lossless, Non-Hierarchical (Process 15)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.59': ('JPEG Extended, Hierarchical (Process 16 and 18)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.60': ('JPEG Extended, Hierarchical (Process 17 and 19)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.61': ('JPEG Spectral Selection, Hierarchical (Process 20 and 22)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.62': ('JPEG Spectral Selection, Hierarchical (Process 21 and 23)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.63': ('JPEG Full Progression, Hierarchical (Process 24 and 26)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.64': ('JPEG Full Progression, Hierarchical (Process 25 and 27)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.65': ('JPEG Lossless, Hierarchical (Process 28)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.66': ('JPEG Lossless, Hierarchical (Process 29)', 'Transfer Syntax', '', 'Retired'), + '1.2.840.10008.1.2.4.70': ('JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1])', 'Transfer Syntax', 'Default Transfer Syntax for Lossless JPEG Image Compression', ''), + '1.2.840.10008.1.2.4.80': ('JPEG-LS Lossless Image Compression', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.81': ('JPEG-LS Lossy (Near-Lossless) Image Compression', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.90': ('JPEG 2000 Image Compression (Lossless Only)', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.91': ('JPEG 2000 Image Compression', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.92': ('JPEG 2000 Part 2 Multi-component Image Compression (Lossless Only)', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.93': ('JPEG 2000 Part 2 Multi-component Image Compression', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.94': ('JPIP Referenced', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.95': ('JPIP Referenced Deflate', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.100': ('MPEG2 Main Profile @ Main Level', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.101': ('MPEG2 Main Profile @ High Level', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.102': ('MPEG-4 AVC/H.264 High Profile / Level 4.1', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.4.103': ('MPEG-4 AVC/H.264 BD-compatible High Profile / Level 4.1', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.5': ('RLE Lossless', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.6.1': ('RFC 2557 MIME encapsulation', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.2.6.2': ('XML Encoding', 'Transfer Syntax', '', ''), + '1.2.840.10008.1.3.10': ('Media Storage Directory Storage', 'SOP Class', '', ''), + '1.2.840.10008.1.4.1.1': ('Talairach Brain Atlas Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.2': ('SPM2 T1 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.3': ('SPM2 T2 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.4': ('SPM2 PD Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.5': ('SPM2 EPI Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.6': ('SPM2 FIL T1 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.7': ('SPM2 PET Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.8': ('SPM2 TRANSM Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.9': ('SPM2 SPECT Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.10': ('SPM2 GRAY Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.11': ('SPM2 WHITE Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.12': ('SPM2 CSF Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.13': ('SPM2 BRAINMASK Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.14': ('SPM2 AVG305T1 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.15': ('SPM2 AVG152T1 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.16': ('SPM2 AVG152T2 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.17': ('SPM2 AVG152PD Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.1.18': ('SPM2 SINGLESUBJT1 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.2.1': ('ICBM 452 T1 Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.4.2.2': ('ICBM Single Subject MRI Frame of Reference', 'Well-known frame of reference', '', ''), + '1.2.840.10008.1.5.1': ('Hot Iron Color Palette SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.1.5.2': ('PET Color Palette SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.1.5.3': ('Hot Metal Blue Color Palette SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.1.5.4': ('PET 20 Step Color Palette SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.1.9': ('Basic Study Content Notification SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.1.20.1': ('Storage Commitment Push Model SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.1.20.1.1': ('Storage Commitment Push Model SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.1.20.2': ('Storage Commitment Pull Model SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.1.20.2.1': ('Storage Commitment Pull Model SOP Instance', 'Well-known SOP Instance', '', 'Retired'), + '1.2.840.10008.1.40': ('Procedural Event Logging SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.1.40.1': ('Procedural Event Logging SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.1.42': ('Substance Administration Logging SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.1.42.1': ('Substance Administration Logging SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.2.6.1': ('DICOM UID Registry', 'DICOM UIDs as a Coding Scheme', '', ''), + '1.2.840.10008.2.16.4': ('DICOM Controlled Terminology', 'Coding Scheme', '', ''), + '1.2.840.10008.3.1.1.1': ('DICOM Application Context Name', 'Application Context Name', '', ''), + '1.2.840.10008.3.1.2.1.1': ('Detached Patient Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.1.4': ('Detached Patient Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.2.1': ('Detached Visit Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.3.1': ('Detached Study Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.3.2': ('Study Component Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.3.3': ('Modality Performed Procedure Step SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.3.1.2.3.4': ('Modality Performed Procedure Step Retrieve SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.3.1.2.3.5': ('Modality Performed Procedure Step Notification SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.3.1.2.5.1': ('Detached Results Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.5.4': ('Detached Results Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.5.5': ('Detached Study Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.3.1.2.6.1': ('Detached Interpretation Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.4.2': ('Storage Service Class', 'Service Class', '', ''), + '1.2.840.10008.5.1.1.1': ('Basic Film Session SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.2': ('Basic Film Box SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.4': ('Basic Grayscale Image Box SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.4.1': ('Basic Color Image Box SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.4.2': ('Referenced Image Box SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.9': ('Basic Grayscale Print Management Meta SOP Class', 'Meta SOP Class', '', ''), + '1.2.840.10008.5.1.1.9.1': ('Referenced Grayscale Print Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.14': ('Print Job SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.15': ('Basic Annotation Box SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.16': ('Printer SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.16.376': ('Printer Configuration Retrieval SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.17': ('Printer SOP Instance', 'Well-known Printer SOP Instance', '', ''), + '1.2.840.10008.5.1.1.17.376': ('Printer Configuration Retrieval SOP Instance', 'Well-known Printer SOP Instance', '', ''), + '1.2.840.10008.5.1.1.18': ('Basic Color Print Management Meta SOP Class', 'Meta SOP Class', '', ''), + '1.2.840.10008.5.1.1.18.1': ('Referenced Color Print Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.22': ('VOI LUT Box SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.23': ('Presentation LUT SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.1.24': ('Image Overlay Box SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.24.1': ('Basic Print Image Overlay Box SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.25': ('Print Queue SOP Instance', 'Well-known Print Queue SOP Instance', '', 'Retired'), + '1.2.840.10008.5.1.1.26': ('Print Queue Management SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.27': ('Stored Print Storage SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.29': ('Hardcopy Grayscale Image Storage SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.30': ('Hardcopy Color Image Storage SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.31': ('Pull Print Request SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.32': ('Pull Stored Print Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.1.33': ('Media Creation Management SOP Class UID', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1': ('Computed Radiography Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1.1': ('Digital X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1.1.1': ('Digital X-Ray Image Storage - For Processing', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1.2': ('Digital Mammography X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1.2.1': ('Digital Mammography X-Ray Image Storage - For Processing', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1.3': ('Digital Intra-Oral X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.1.3.1': ('Digital Intra-Oral X-Ray Image Storage - For Processing', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.2': ('CT Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.2.1': ('Enhanced CT Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.2.2': ('Legacy Converted Enhanced CT Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.3': ('Ultrasound Multi-frame Image Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.3.1': ('Ultrasound Multi-frame Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.4': ('MR Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.4.1': ('Enhanced MR Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.4.2': ('MR Spectroscopy Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.4.3': ('Enhanced MR Color Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.4.4': ('Legacy Converted Enhanced MR Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.5': ('Nuclear Medicine Image Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.6': ('Ultrasound Image Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.6.1': ('Ultrasound Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.6.2': ('Enhanced US Volume Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.7': ('Secondary Capture Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.7.1': ('Multi-frame Single Bit Secondary Capture Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.7.2': ('Multi-frame Grayscale Byte Secondary Capture Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.7.3': ('Multi-frame Grayscale Word Secondary Capture Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.7.4': ('Multi-frame True Color Secondary Capture Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.8': ('Standalone Overlay Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.9': ('Standalone Curve Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.9.1': ('Waveform Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.9.1.1': ('12-lead ECG Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.1.2': ('General ECG Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.1.3': ('Ambulatory ECG Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.2.1': ('Hemodynamic Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.3.1': ('Cardiac Electrophysiology Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.4.1': ('Basic Voice Audio Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.4.2': ('General Audio Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.5.1': ('Arterial Pulse Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.9.6.1': ('Respiratory Waveform Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.10': ('Standalone Modality LUT Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.11': ('Standalone VOI LUT Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.11.1': ('Grayscale Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.11.2': ('Color Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.11.3': ('Pseudo-Color Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.11.4': ('Blending Softcopy Presentation State Storage SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.11.5': ('XA/XRF Grayscale Softcopy Presentation State Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.12.1': ('X-Ray Angiographic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.12.1.1': ('Enhanced XA Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.12.2': ('X-Ray Radiofluoroscopic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.12.2.1': ('Enhanced XRF Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.12.3': ('X-Ray Angiographic Bi-Plane Image Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.13.1.1': ('X-Ray 3D Angiographic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.13.1.2': ('X-Ray 3D Craniofacial Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.13.1.3': ('Breast Tomosynthesis Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.14.1': ('Intravascular Optical Coherence Tomography Image Storage - For Presentation', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.14.2': ('Intravascular Optical Coherence Tomography Image Storage - For Processing', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.20': ('Nuclear Medicine Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.66': ('Raw Data Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.66.1': ('Spatial Registration Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.66.2': ('Spatial Fiducials Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.66.3': ('Deformable Spatial Registration Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.66.4': ('Segmentation Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.66.5': ('Surface Segmentation Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.67': ('Real World Value Mapping Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.68.1': ('Surface Scan Mesh Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.68.2': ('Surface Scan Point Cloud Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1': ('VL Image Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.77.2': ('VL Multi-frame Image Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.77.1.1': ('VL Endoscopic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.1.1': ('Video Endoscopic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.2': ('VL Microscopic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.2.1': ('Video Microscopic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.3': ('VL Slide-Coordinates Microscopic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.4': ('VL Photographic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.4.1': ('Video Photographic Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.5.1': ('Ophthalmic Photography 8 Bit Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.5.2': ('Ophthalmic Photography 16 Bit Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.5.3': ('Stereometric Relationship Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.5.4': ('Ophthalmic Tomography Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.77.1.6': ('VL Whole Slide Microscopy Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.1': ('Lensometry Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.2': ('Autorefraction Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.3': ('Keratometry Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.4': ('Subjective Refraction Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.5': ('Visual Acuity Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.6': ('Spectacle Prescription Report Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.7': ('Ophthalmic Axial Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.78.8': ('Intraocular Lens Calculations Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.79.1': ('Macular Grid Thickness and Volume Report Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.80.1': ('Ophthalmic Visual Field Static Perimetry Measurements Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.81.1': ('Ophthalmic Thickness Map Storage', 'SOP Class', '', ''), + '11.2.840.10008.5.1.4.1.1.82.1': ('Corneal Topography Map Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.1': ('Text SR Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.88.2': ('Audio SR Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.88.3': ('Detail SR Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.88.4': ('Comprehensive SR Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.88.11': ('Basic Text SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.22': ('Enhanced SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.33': ('Comprehensive SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.34': ('Comprehensive 3D SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.40': ('Procedure Log Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.50': ('Mammography CAD SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.59': ('Key Object Selection Document Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.65': ('Chest CAD SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.67': ('X-Ray Radiation Dose SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.69': ('Colon CAD SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.88.70': ('Implantation Plan SR Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.104.1': ('Encapsulated PDF Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.104.2': ('Encapsulated CDA Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.128': ('Positron Emission Tomography Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.128.1': ('Legacy Converted Enhanced PET Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.129': ('Standalone PET Curve Storage', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.1.130': ('Enhanced PET Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.131': ('Basic Structured Display Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.1': ('RT Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.2': ('RT Dose Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.3': ('RT Structure Set Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.4': ('RT Beams Treatment Record Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.5': ('RT Plan Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.6': ('RT Brachy Treatment Record Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.7': ('RT Treatment Summary Record Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.8': ('RT Ion Plan Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.481.9': ('RT Ion Beams Treatment Record Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.1': ('DICOS CT Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.2.1': ('DICOS Digital X-Ray Image Storage - For Presentation', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.2.2': ('DICOS Digital X-Ray Image Storage - For Processing', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.3': ('DICOS Threat Detection Report Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.4': ('DICOS 2D AIT Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.5': ('DICOS 3D AIT Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.501.6': ('DICOS Quadrupole Resonance (QR) Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.601.1': ('Eddy Current Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.1.601.2': ('Eddy Current Multi-frame Image Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.1.1': ('Patient Root Query/Retrieve Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.1.2': ('Patient Root Query/Retrieve Information Model - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.1.3': ('Patient Root Query/Retrieve Information Model - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.2.1': ('Study Root Query/Retrieve Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.2.2': ('Study Root Query/Retrieve Information Model - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.2.3': ('Study Root Query/Retrieve Information Model - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.3.1': ('Patient/Study Only Query/Retrieve Information Model - FIND', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.2.3.2': ('Patient/Study Only Query/Retrieve Information Model - MOVE', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.2.3.3': ('Patient/Study Only Query/Retrieve Information Model - GET', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.1.2.4.2': ('Composite Instance Root Retrieve - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.4.3': ('Composite Instance Root Retrieve - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.1.2.5.3': ('Composite Instance Retrieve Without Bulk Data - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.31': ('Modality Worklist Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.32.1': ('General Purpose Worklist Information Model - FIND', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.32.2': ('General Purpose Scheduled Procedure Step SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.32.3': ('General Purpose Performed Procedure Step SOP Class', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.32': ('General Purpose Worklist Management Meta SOP Class', 'Meta SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.33': ('Instance Availability Notification SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.1': ('RT Beams Delivery Instruction Storage - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.2': ('RT Conventional Machine Verification - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.3': ('RT Ion Machine Verification - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.4': ('Unified Worklist and Procedure Step Service Class - Trial', 'Service Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.4.1': ('Unified Procedure Step - Push SOP Class - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.4.2': ('Unified Procedure Step - Watch SOP Class - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.4.3': ('Unified Procedure Step - Pull SOP Class - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.4.4': ('Unified Procedure Step - Event SOP Class - Trial', 'SOP Class', '', 'Retired'), + '1.2.840.10008.5.1.4.34.5': ('Unified Worklist and Procedure Step SOP Instance', 'Well-known SOP Instance', '', ''), + '1.2.840.10008.5.1.4.34.6': ('Unified Worklist and Procedure Step Service Class', 'Service Class', '', ''), + '1.2.840.10008.5.1.4.34.6.1': ('Unified Procedure Step - Push SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.6.2': ('Unified Procedure Step - Watch SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.6.3': ('Unified Procedure Step - Pull SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.6.4': ('Unified Procedure Step - Event SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.7': ('RT Beams Delivery Instruction Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.8': ('RT Conventional Machine Verification', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.34.9': ('RT Ion Machine Verification', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.37.1': ('General Relevant Patient Information Query', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.37.2': ('Breast Imaging Relevant Patient Information Query', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.37.3': ('Cardiac Relevant Patient Information Query', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.38.1': ('Hanging Protocol Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.38.2': ('Hanging Protocol Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.38.3': ('Hanging Protocol Information Model - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.38.4': ('Hanging Protocol Information Model - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.39.1': ('Color Palette Storage', 'Transfer', '', ''), + '1.2.840.10008.5.1.4.39.2': ('Color Palette Information Model - FIND', 'Query/Retrieve', '', ''), + '1.2.840.10008.5.1.4.39.3': ('Color Palette Information Model - MOVE', 'Query/Retrieve', '', ''), + '1.2.840.10008.5.1.4.39.4': ('Color Palette Information Model - GET', 'Query/Retrieve', '', ''), + '1.2.840.10008.5.1.4.41': ('Product Characteristics Query SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.42': ('Substance Approval Query SOP Class', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.43.1': ('Generic Implant Template Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.43.2': ('Generic Implant Template Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.43.3': ('Generic Implant Template Information Model - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.43.4': ('Generic Implant Template Information Model - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.44.1': ('Implant Assembly Template Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.44.2': ('Implant Assembly Template Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.44.3': ('Implant Assembly Template Information Model - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.44.4': ('Implant Assembly Template Information Model - GET', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.45.1': ('Implant Template Group Storage', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.45.2': ('Implant Template Group Information Model - FIND', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.45.3': ('Implant Template Group Information Model - MOVE', 'SOP Class', '', ''), + '1.2.840.10008.5.1.4.45.4': ('Implant Template Group Information Model - GET', 'SOP Class', '', ''), + '1.2.840.10008.7.1.1': ('Native DICOM Model', 'Application Hosting Model', '', ''), + '1.2.840.10008.7.1.2': ('Abstract Multi-Dimensional Image Model', 'Application Hosting Model', '', ''), + '1.2.840.10008.15.0.3.1': ('dicomDeviceName', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.2': ('dicomDescription', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.3': ('dicomManufacturer', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.4': ('dicomManufacturerModelName', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.5': ('dicomSoftwareVersion', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.6': ('dicomVendorData', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.7': ('dicomAETitle', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.8': ('dicomNetworkConnectionReference', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.9': ('dicomApplicationCluster', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.10': ('dicomAssociationInitiator', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.11': ('dicomAssociationAcceptor', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.12': ('dicomHostname', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.13': ('dicomPort', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.14': ('dicomSOPClass', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.15': ('dicomTransferRole', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.16': ('dicomTransferSyntax', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.17': ('dicomPrimaryDeviceType', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.18': ('dicomRelatedDeviceReference', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.19': ('dicomPreferredCalledAETitle', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.20': ('dicomTLSCyphersuite', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.21': ('dicomAuthorizedNodeCertificateReference', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.22': ('dicomThisNodeCertificateReference', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.23': ('dicomInstalled', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.24': ('dicomStationName', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.25': ('dicomDeviceSerialNumber', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.26': ('dicomInstitutionName', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.27': ('dicomInstitutionAddress', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.28': ('dicomInstitutionDepartmentName', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.29': ('dicomIssuerOfPatientID', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.30': ('dicomPreferredCallingAETitle', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.3.31': ('dicomSupportedCharacterSet', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.1': ('dicomConfigurationRoot', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.2': ('dicomDevicesRoot', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.3': ('dicomUniqueAETitlesRegistryRoot', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.4': ('dicomDevice', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.5': ('dicomNetworkAE', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.6': ('dicomNetworkConnection', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.7': ('dicomUniqueAETitle', 'LDAP OID', '', ''), + '1.2.840.10008.15.0.4.8': ('dicomTransferCapability', 'LDAP OID', '', ''), + '1.2.840.10008.15.1.1': ('Universal Coordinated Time', 'Synchronization Frame of Reference', '', '')} diff -Nru pydicom-0.9.8/source/dicom/UID.py pydicom-0.9.9/source/dicom/UID.py --- pydicom-0.9.8/source/dicom/UID.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/UID.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,192 @@ +# UID.py +"""Dicom Unique identifiers""" +# Copyright (c) 2008 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +import os +import uuid +import datetime +from math import fabs + +from _UID_dict import UID_dictionary + + +class InvalidUID(Exception): + ''' + Throw when DICOM UID is invalid + + Example of invalid UID:: + + >>> uid = '1.2.123.' + ''' + def __init__(self, value): + self.value = value + + def __str__(self): + return repr(self.value) + + +class UID(str): + """Subclass python string so have human-friendly UIDs + + Use like: + uid = UID('1.2.840.10008.1.2.4.50') + then + uid.name, uid.type, uid.info, and uid.is_retired all return + values from the UID_dictionary + + String representation (__str__) will be the name, + __repr__ will be the full 1.2.840.... + """ + def __new__(cls, val): + """Set up new instance of the class""" + # Don't repeat if already a UID class -- then may get the name + # that str(uid) gives rather than the dotted number + if isinstance(val, UID): + return val + else: + if isinstance(val, basestring): + return super(UID, cls).__new__(cls, val.strip()) + else: + raise TypeError("UID must be a string") + + def __init__(self, val): + """Initialize the UID properties + + Sets name, type, info, is_retired, and is_transfer_syntax. + If UID is a transfer syntax, also sets is_little_endian, + is_implicit_VR, and is_deflated boolean values. + """ + # Note normally use __new__ on subclassing an immutable, but here we + # just want to do some pre-processing against the UID dictionary. + # "My" string can never change (it is a python immutable), so is safe + if self in UID_dictionary: + self.name, self.type, self.info, retired = UID_dictionary[self] + self.is_retired = bool(retired) + else: + self.name = str.__str__(self) + self.type, self.info, self.is_retired = (None, None, None) + + # If the UID represents a transfer syntax, store info about that syntax + self.is_transfer_syntax = (self.type == "Transfer Syntax") + if self.is_transfer_syntax: + # Assume a transfer syntax, correct it as necessary + self.is_implicit_VR = True + self.is_little_endian = True + self.is_deflated = False + + if val == '1.2.840.10008.1.2': # implicit VR little endian + pass + elif val == '1.2.840.10008.1.2.1': # ExplicitVRLittleEndian + self.is_implicit_VR = False + elif val == '1.2.840.10008.1.2.2': # ExplicitVRBigEndian + self.is_implicit_VR = False + self.is_little_endian = False + elif val == '1.2.840.10008.1.2.1.99': # DeflatedExplicitVRLittleEndian: + self.is_deflated = True + self.is_implicit_VR = False + else: + # Any other syntax should be Explicit VR Little Endian, + # e.g. all Encapsulated (JPEG etc) are ExplVR-LE by Standard PS 3.5-2008 A.4 (p63) + self.is_implicit_VR = False + + def __str__(self): + """Return the human-friendly name for this UID""" + return self.name + + def __eq__(self, other): + """Override string equality so either name or UID number match passes""" + if str.__eq__(self, other) is True: # 'is True' needed (issue 96) + return True + if str.__eq__(self.name, other) is True: # 'is True' needed (issue 96) + return True + return False + + def __ne__(self, other): + return not self == other + + def is_valid(self): + ''' + Raise an exception is the UID is invalid + + Usage example:: + + >>> invalid_uid = dicom.UID.UID('1.2.345.') + >>> invalid_uid.is_valid(invalid_uid) + InvalidUID: 'Trailing dot at the end of the UID' + >>> valid_uid = dicom.UID.UID('1.2.123') + + ''' + if self[-1] == '.': + raise InvalidUID('Trailing dot at the end of the UID') + + # For python 3, any override of __cmp__ or __eq__ immutable requires + # explicit redirect of hash function to the parent class + # See http://docs.python.org/dev/3.0/reference/datamodel.html#object.__hash__ + + def __hash__(self): + return super(UID, self).__hash__() + +ExplicitVRLittleEndian = UID('1.2.840.10008.1.2.1') +ImplicitVRLittleEndian = UID('1.2.840.10008.1.2') +DeflatedExplicitVRLittleEndian = UID('1.2.840.10008.1.2.1.99') +ExplicitVRBigEndian = UID('1.2.840.10008.1.2.2') + +NotCompressedPixelTransferSyntaxes = [ExplicitVRLittleEndian, + ImplicitVRLittleEndian, + DeflatedExplicitVRLittleEndian, + ExplicitVRBigEndian] + +# Many thanks to the Medical Connections for offering free valid UIDs (http://www.medicalconnections.co.uk/FreeUID.html) +# Their service was used to obtain the following root UID for pydicom: +pydicom_root_UID = '1.2.826.0.1.3680043.8.498.' +pydicom_UIDs = { + pydicom_root_UID + '1': 'ImplementationClassUID', +} + + +def generate_uid(prefix=pydicom_root_UID, truncate=False): + ''' + Generate a dicom unique identifier based on host id, process id and current + time. The max lenght of the generated UID is 64 caracters. + + If the given prefix is ``None``, the UID is generated following the method + described on `David Clunie website + `_ + + Usage example:: + + >>> dicom.UID.generate_uid() + 1.2.826.0.1.3680043.8.498.2913212949509824014974371514 + >>> dicom.UID.generate_uid(None) + 2.25.31215762025423160614120088028604965760 + + This method is inspired from the work of `DCMTK + `_. + + :param prefix: The site root UID. Default to pydicom root UID. + ''' + max_uid_len = 64 + + if prefix is None: + dicom_uid = '2.25.{0}'.format(uuid.uuid1().int) + else: + uid_info = [uuid.getnode(), + fabs(os.getpid()), + datetime.datetime.today().second, + datetime.datetime.today().microsecond] # nopep8 + + suffix = ''.join([str(long(x)) for x in uid_info]) + dicom_uid = ''.join([prefix, suffix]) + + if truncate: + dicom_uid = dicom_uid[:max_uid_len] + + dicom_uid = UID(dicom_uid) + + # This will raise an exception if the UID is invalid + dicom_uid.is_valid() + + return dicom_uid diff -Nru pydicom-0.9.8/source/dicom/util/codify.py pydicom-0.9.9/source/dicom/util/codify.py --- pydicom-0.9.8/source/dicom/util/codify.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/util/codify.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,317 @@ +# codify.py +"""Produce runnable python code which can recreate DICOM objects or files. + +Can run as a script to produce code for an entire file, +or import and use specific functions to provide code for pydicom DICOM classes + +""" +# Copyright (c) 2013 Darcy Mason +# This file is part of pydicom, released under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +# Run this from the same directory as a "base" dicom file and +# this code will output to screen the dicom parameters like: +# ds.PatientName = 'TEST' +# etc for all parameters in the file. +# This can then be pasted into a python file and parameters edited as necessary +# to create a DICOM file from scratch + +import sys +import dicom +from dicom.datadict import dictionary_keyword + +import re + +line_term = "\n" + +# Helper functions first + +# Precompiled search patterns for camel_to_underscore() +first_cap_re = re.compile('(.)([A-Z][a-z]+)') +all_cap_re = re.compile('([a-z0-9])([A-Z])') + +byte_VRs = ['OB', 'OW', 'OW/OB', 'OW or OB', 'OB or OW', + 'US or SS or OW', 'US or SS'] + + +def camel_to_underscore(name): + """Convert name from CamelCase to lower_case_with_underscores""" + # From http://stackoverflow.com/questions/1175208 + s1 = first_cap_re.sub(r'\1_\2', name) + return all_cap_re.sub(r'\1_\2', s1).lower() + + +def tag_repr(tag): + """String of tag value as (0xgggg, 0xeeee)""" + return "(0x{group:04x}, 0x{elem:04x})".format(group=tag.group, + elem=tag.element) + + +def default_name_filter(name): + """Callable to reduce some names in code to more readable short form + + :arg name: a sequence variable name or sequence item name + :return: a shorter version of name if a known conversion, + else return original name + + """ + name = camel_to_underscore(name) + name = name.replace("control_point", "cp") + name = name.replace("reference", "ref") + name = name.replace("fraction_group", "frxn_gp") + return name + + +# Functions to produce python code +def code_imports(): + """Code the import statements needed by other codify results + + :return: a string of import statement lines + + """ + line1 = "import dicom" + line2 = "from dicom.dataset import Dataset" + line3 = "from dicom.sequence import Sequence" + return line_term.join((line1, line2, line3)) + + +def code_dataelem(dataelem, dataset_name="ds", exclude_size=None, + include_private=False): + """Code lines for a single DICOM data element + + :arg dataelem: the DataElement instance to turn into code + :arg dataset_name: variable name of the Dataset containing dataelem + :arg exclude_size: if specified, values longer than this (in bytes) + will only have a commented string for a value, + causing a syntax error when the code is run, + and thus prompting the user to remove or fix that line. + :return: a string containing code to recreate the data element + If the data element is a sequence, calls code_sequence + + """ + + if dataelem.VR == "SQ": + return code_sequence(dataelem, dataset_name, exclude_size, + include_private) + + # If in DICOM dictionary, set using the keyword + # If not (e.g. is private element), set using add_new method + have_keyword = True + try: + keyword = dictionary_keyword(dataelem.tag) + except KeyError: + have_keyword = False + + valuerep = repr(dataelem.value) + if exclude_size: + if dataelem.VR in byte_VRs and len(dataelem.value) > exclude_size: + valuerep = "# XXX Array of %d bytes excluded" % len(dataelem.value) + + if have_keyword: + format_str = "{ds_name}.{keyword} = {valuerep}" + line = format_str.format(ds_name=dataset_name, + keyword=keyword, + valuerep=valuerep) + else: + format_str = "{ds_name}.add_new({tag}, '{VR}', {valuerep})" + line = format_str.format(ds_name=dataset_name, + tag=tag_repr(dataelem.tag), + VR=dataelem.VR, + valuerep=valuerep) + return line + + +def code_sequence(dataelem, dataset_name="ds", + exclude_size=None, include_private=False, + name_filter=default_name_filter): + """Code lines for recreating a Sequence data element + + :arg dataelem: the DataElement instance of the Sequence + :arg dataset_name: variable name of the dataset containing the Sequence + :arg exclude_size: if specified, values longer than this (in bytes) + will only have a commented string for a value, + causing a syntax error when the code is run, + and thus prompting the user to remove or fix that line. + :arg include_private: If True, private data elements will be coded. + If False, private elements are skipped + :arg name_filter: a callable taking a sequence name or sequence item name, + and returning a shorter name for easier code reading + :return: a string containing code lines to recreate a DICOM sequence + + """ + lines = [] + seq = dataelem.value + seq_name = dataelem.name + seq_item_name = seq_name.replace(' Sequence', '') + seq_keyword = dictionary_keyword(dataelem.tag) + + # Create comment line to document the start of Sequence + lines.append('') + lines.append("# " + seq_name) + + # Code line to create a new Sequence object + if name_filter: + seq_var = name_filter(seq_keyword) + lines.append(seq_var + " = Sequence()") + + # Code line to add the sequence to its parent + lines.append(dataset_name + "." + seq_keyword + " = " + seq_var) + + # Code lines to add sequence items to the Sequence + for i, ds in enumerate(seq): + # Determine index to use. If seq item has a data element with 'Index', + # use that; if one with 'Number', use that, else start at 1 + index_keyword = seq_keyword.replace("Sequence", "") + "Index" + number_keyword = seq_keyword.replace("Sequence", "") + "Number" + if index_keyword in ds: + index_str = str(getattr(ds, index_keyword)) + elif number_keyword in ds: + index_str = str(getattr(ds, number_keyword)) + else: + index_str = str(i + 1) + + # Code comment line to mark start of sequence item + lines.append('') + lines.append("# " + seq_name + ": " + seq_item_name + " " + index_str) + + # Determine the variable name to use for the sequence item (dataset) + ds_name = seq_var.replace("_sequence", "") + index_str + + # Code the sequence item + code_item = code_dataset(ds, ds_name, exclude_size, include_private) + lines.append(code_item) + + # Code the line to append the item to its parent sequence + lines.append(seq_var + ".append(" + ds_name + ")") + + # Join the lines and return a single string + return line_term.join(lines) + + +def code_dataset(ds, dataset_name="ds", exclude_size=None, + include_private=False): + """Return python code lines for import statements needed by other code + + :arg exclude_size: if specified, values longer than this (in bytes) + will only have a commented string for a value, + causing a syntax error when the code is run, + and thus prompting the user to remove or fix that line. + :arg include_private: If True, private data elements will be coded. + If False, private elements are skipped + :return: a list of code lines containing import statements + + """ + lines = [] + lines.append(dataset_name + " = Dataset()") + for dataelem in ds: + # If a private data element and flag says so, skip it and go to next + if not include_private and dataelem.tag.is_private: + continue + # Otherwise code the line and add it to the lines list + code_line = code_dataelem(dataelem, dataset_name, exclude_size, + include_private) + lines.append(code_line) + # Add blank line if just coded a sequence + if dataelem.VR == "SQ": + lines.append('') + # If sequence was end of this dataset, remove the extra blank line + if len(lines) and lines[-1] == '': + lines.pop() + # Join all the code lines and return them + return line_term.join(lines) + + +def code_file(filename, exclude_size=None, include_private=False): + """Write a complete source code file to recreate a DICOM file + + :arg filename: complete path and filename of a DICOM file to convert + :arg exclude_size: if specified, values longer than this (in bytes) + will only have a commented string for a value, + causing a syntax error when the code is run, + and thus prompting the user to remove or fix that line. + :arg include_private: If True, private data elements will be coded. + If False, private elements are skipped + :return: a string containing code lines to recreate entire file + + """ + lines = [] + + ds = dicom.read_file(filename, force=True) + + # Code a nice header for the python file + lines.append("# Coded version of DICOM file '{0}'".format(filename)) + lines.append("# Produced by pydicom codify utility script") + + # Code the necessary imports + lines.append(code_imports()) + lines.append('') + + # Code the file_meta information + lines.append("# File meta info data elements") + code_meta = code_dataset(ds.file_meta, "file_meta", exclude_size, include_private) + lines.append(code_meta) + lines.append('') + + # Code the main dataset + lines.append("# Main data elements") + code_ds = code_dataset(ds, exclude_size=exclude_size, + include_private=include_private) + lines.append(code_ds) + lines.append('') + + # Add the file meta to the dataset, and set transfer syntax + lines.append("ds.file_meta = file_meta") + lines.append("ds.is_implicit_VR = " + str(ds.is_implicit_VR)) + lines.append("ds.is_little_endian = " + str(ds.is_little_endian)) + + # Return the complete code string + return line_term.join(lines) + + +if __name__ == "__main__": + default_exclude_size = 100 # bytes + + try: + import argparse + except ImportError: + print "The argparse module is required to run this script" + print "argparse is standard in python >= 2.7," + print " or can be installed with 'pip install argparse'" + sys.exit(-1) + + parser = argparse.ArgumentParser( + description="Produce python/pydicom code from a DICOM file", + epilog="Binary data (e.g. pixels) larger than --exclude-size " + "(default %d bytes) is not included. A dummy line with a syntax " + "error is produced. " + "Private data elements are not included " + "by default." % default_exclude_size) + parser.add_argument('filename', + help="DICOM file from which to produce code lines") + parser.add_argument('outfile', nargs='?', type=argparse.FileType('wb'), + help="Filename to write python code to. " + "If not specified, code is written to stdout", + default=sys.stdout) + parser.add_argument('-e', '--exclude-size', type=long, + default=default_exclude_size, + help='Exclude binary data larger than specified (bytes)' + '. Default is %d bytes' % default_exclude_size) + parser.add_argument('-p', '--include-private', action="store_true", + help='Include private data elements ' + '(default is to exclude them)') + parser.add_argument('-s', '--save-as', + help="End the code with a ds.save_as(save_filename)") + + args = parser.parse_args() + # Read the requested file and convert to python/pydicom code lines + filename = args.filename + code_lines = code_file(filename, args.exclude_size, args.include_private) + + # If requested, write a code line to save the dataset + if args.save_as: + save_line = "\nds.save_as('{filename}')".format(filename=args.save_as) + code_lines += save_line + + # Write the code lines to specified file or to standard output + args.outfile.write(code_lines) diff -Nru pydicom-0.9.8/source/dicom/util/dump.py pydicom-0.9.9/source/dicom/util/dump.py --- pydicom-0.9.8/source/dicom/util/dump.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/util/dump.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,98 @@ +# dump.py +"""Utility functions used in debugging writing and reading""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from __future__ import print_function +from io import BytesIO + + +def print_character(ordchr): + """Return a printable character, or '.' for non-printable ones.""" + if 31 < ordchr < 126 and ordchr != 92: + return chr(ordchr) + else: + return '.' + + +def filedump(filename, start_address=0, stop_address=None): + """Dump out the contents of a file to a standard hex dump 16 bytes wide""" + fp = file(filename, 'rb') + return hexdump(fp, start_address, stop_address) + + +def datadump(data): + stop_address = len(data) + 1 + fp = BytesIO(data) + print(hexdump(fp, 0, stop_address)) + + +def hexdump(file_in, start_address=0, stop_address=None, showAddress=True): + """Return a formatted string of hex bytes and characters in data. + + This is a utility function for debugging file writing. + + file_in -- a file-like object to get the bytes to show from""" + + str_out = BytesIO() + byteslen = 16 * 3 - 1 # space taken up if row has a full 16 bytes + blanks = ' ' * byteslen + + file_in.seek(start_address) + data = True # dummy to start the loop + while data: + if stop_address and file_in.tell() > stop_address: + break + if showAddress: + str_out.write("%04x : " % file_in.tell()) # address at start of line + data = file_in.read(16) + if not data: + break + row = [ord(x) for x in data] # need ord twice below so convert once + byte_string = ' '.join(["%02x" % x for x in row]) # string of two digit hex bytes + str_out.write(byte_string) + str_out.write(blanks[:byteslen - len(byte_string)]) # if not 16, pad + str_out.write(' ') + str_out.write(''.join([print_character(x) for x in row])) # character rep of bytes + str_out.write("\n") + + return str_out.getvalue() + + +def pretty_print(ds, indent=0, indent_chars=" "): + """Print a dataset directly, with indented levels. + + This is just like Dataset._pretty_str, but more useful for debugging as it + prints each item immediately rather than composing a string, making it + easier to immediately see where an error in processing a dataset starts. + + """ + + indentStr = indent_chars * indent + nextIndentStr = indent_chars * (indent + 1) + for data_element in ds: + if data_element.VR == "SQ": # a sequence + fmt_str = "{0:s}{1:s} {2:s} {3:d} item(s) ---" + new_str = fmt_str.format(indentStr, str(data_element.tag), + data_element.name, len(data_element.value)) + print(new_str) + for dataset in data_element.value: + pretty_print(dataset, indent + 1) + print(nextIndentStr + "---------") + else: + print(indentStr + repr(data_element)) + + +if __name__ == "__main__": + import sys + filename = sys.argv[1] + start_address = 0 + stop_address = None + if len(sys.argv) > 2: # then have start address + start_address = eval(sys.argv[2]) + if len(sys.argv) > 3: + stop_address = eval(sys.argv[3]) + + print(filedump(filename, start_address, stop_address)) diff -Nru pydicom-0.9.8/source/dicom/util/hexutil.py pydicom-0.9.9/source/dicom/util/hexutil.py --- pydicom-0.9.8/source/dicom/util/hexutil.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/util/hexutil.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,40 @@ +# hexutil.py +"""Miscellaneous utility routines relating to hex and byte strings""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from binascii import a2b_hex, b2a_hex +from dicom import in_py3 +from dicom.charset import default_encoding + + +def hex2bytes(hexstring): + """Return bytestring for a string of hex bytes separated by whitespace + + This is useful for creating specific byte sequences for testing, using + python's implied concatenation for strings with comments allowed. + Example: + hex_string = ( + "08 00 32 10" # (0008, 1032) SQ "Procedure Code Sequence" + " 08 00 00 00" # length 8 + " fe ff 00 e0" # (fffe, e000) Item Tag + ) + byte_string = hex2bytes(hex_string) + Note in the example that all lines except the first must start with a space, + alternatively the space could end the previous line. + """ + # This works in both 3.x and 2.x because the first conditional evaluates to + # true in 2.x so the difference in bytes constructor doesn't matter + if isinstance(hexstring, bytes): + return a2b_hex(hexstring.replace(b" ", b"")) + else: + return a2b_hex(bytes(hexstring.replace(" ", ""), default_encoding)) + + +def bytes2hex(byte_string): + s = b2a_hex(byte_string) + if in_py3: + s = s.decode() + return " ".join(s[i:i + 2] for i in range(0, len(s), 2)) diff -Nru pydicom-0.9.8/source/dicom/util/__init__.py pydicom-0.9.9/source/dicom/util/__init__.py --- pydicom-0.9.8/source/dicom/util/__init__.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/util/__init__.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1 @@ +# __init__.py diff -Nru pydicom-0.9.8/source/dicom/valuerep.py pydicom-0.9.9/source/dicom/valuerep.py --- pydicom-0.9.8/source/dicom/valuerep.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/valuerep.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,442 @@ +# valuerep.py +"""Special classes for DICOM value representations (VR)""" +# Copyright (c) 2008-2012 Darcy Mason +# This file is part of pydicom, released under a modified MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from decimal import Decimal +import dicom.config +from dicom.multival import MultiValue +from dicom import in_py3 + +import logging +logger = logging.getLogger('pydicom') + +default_encoding = "iso8859" # can't import from charset or get circular import + +# For reading/writing data elements, these ones have longer explicit VR format +extra_length_VRs = ('OB', 'OW', 'OF', 'SQ', 'UN', 'UT') + +# VRs that can be affected by character repertoire in (0008,0005) Specific Character Set +# See PS-3.5 (2011), section 6.1.2 Graphic Characters +text_VRs = ('SH', 'LO', 'ST', 'LT', 'UT') # and PN, but it is handled separately. + +import re + +match_string = b''.join([ + b'(?P', + b'(?P[^=\^]*)', + b'\^?(?P[^=\^]*)', + b'\^?(?P[^=\^]*)', + b'\^?(?P[^=\^]*)', + b'\^?(?P[^=\^]*)', + b')', + b'=?(?P[^=]*)', + b'=?(?P[^=]*)$']) + +match_string_uni = re.compile(match_string.decode('iso8859')) +match_string_bytes = re.compile(match_string) + + +class DSfloat(float): + """Store values for DICOM VR of DS (Decimal String) as a float. + + If constructed from an empty string, return the empty string, + not an instance of this class. + + """ + __slots__ = 'original_string' + + def __init__(self, val): + """Store the original string if one given, for exact write-out of same + value later. + """ + # ... also if user changes a data element value, then will get + # a different object, becuase float is immutable. + + if isinstance(val, (str, unicode)): + self.original_string = val + elif isinstance(val, (DSfloat, DSdecimal)) and hasattr(val, 'original_string'): + self.original_string = val.original_string + + def __str__(self): + if hasattr(self, 'original_string'): + return self.original_string + else: + return super(DSfloat, self).__str__() + + def __repr__(self): + return "'" + str(self) + "'" + + +class DSdecimal(Decimal): + """Store values for DICOM VR of DS (Decimal String). + Note: if constructed by an empty string, returns the empty string, + not an instance of this class. + """ + __slots__ = 'original_string' + + def __new__(cls, val): + """Create an instance of DS object, or return a blank string if one is + passed in, e.g. from a type 2 DICOM blank value. + + :param val: val must be a string or a number type which can be + converted to a decimal + """ + # Store this value here so that if the input string is actually a valid + # string but decimal.Decimal transforms it to an invalid string it will + # still be initialized properly + enforce_length = dicom.config.enforce_valid_values + # DICOM allows spaces around the string, but python doesn't, so clean it + if isinstance(val, (str, unicode)): + val = val.strip() + # If the input string is actually invalid that we relax the valid + # value constraint for this particular instance + if len(val) <= 16: + enforce_length = False + if val == '': + return val + if isinstance(val, float) and not dicom.config.allow_DS_float: + msg = ("DS cannot be instantiated with a float value, unless " + "config.allow_DS_float is set to True. It is recommended to " + "convert to a string instead, with the desired number of digits, " + "or use Decimal.quantize and pass a Decimal instance.") + raise TypeError(msg) + if not isinstance(val, Decimal): + val = super(DSdecimal, cls).__new__(cls, val) + if len(str(val)) > 16 and enforce_length: + msg = ("DS value representation must be <= 16 characters by DICOM " + "standard. Initialize with a smaller string, or set config.enforce_valid_values " + "to False to override, " + "or use Decimal.quantize() and initialize with a Decimal instance.") + raise OverflowError(msg) + return val + + def __init__(self, val): + """Store the original string if one given, for exact write-out of same + value later. E.g. if set '1.23e2', Decimal would write '123', but DS + will use the original + """ + # ... also if user changes a data element value, then will get + # a different Decimal, as Decimal is immutable. + if isinstance(val, (str, unicode)): + self.original_string = val + elif isinstance(val, (DSfloat, DSdecimal)) and hasattr(val, 'original_string'): + self.original_string = val.original_string + + def __str__(self): + if hasattr(self, 'original_string') and len(self.original_string) <= 16: + return self.original_string + else: + return super(DSdecimal, self).__str__() + + def __repr__(self): + return "'" + str(self) + "'" + +# CHOOSE TYPE OF DS +if dicom.config.use_DS_decimal: + DSclass = DSdecimal +else: + DSclass = DSfloat + + +def DS(val): + """Factory function for creating DS class instances. + Checks for blank string; if so, return that. Else calls DSfloat or DSdecimal + to create the class instance. This avoids overriding __new__ in DSfloat + (which carries a time penalty for large arrays of DS). + Similarly the string clean and check can be avoided and DSfloat called + directly if a string has already been processed. + """ + if isinstance(val, (str, unicode)): + val = val.strip() + if val == '': + return val + return DSclass(val) + + +class IS(int): + """Derived class of int. Stores original integer string for exact rewriting + of the string originally read or stored. + """ + if not in_py3: + __slots__ = 'original_string' + # Unlikely that str(int) will not be the same as the original, but could happen + # with leading zeros. + + def __new__(cls, val): + """Create instance if new integer string""" + if isinstance(val, (str, unicode)) and val.strip() == '': + return '' + newval = super(IS, cls).__new__(cls, val) + # check if a float or Decimal passed in, then could have lost info, + # and will raise error. E.g. IS(Decimal('1')) is ok, but not IS(1.23) + if isinstance(val, (float, Decimal)) and newval != val: + raise TypeError("Could not convert value to integer without loss") + # Checks in case underlying int is >32 bits, DICOM does not allow this + if (newval < -2 ** 31 or newval >= 2 ** 31) and dicom.config.enforce_valid_values: + message = "Value exceeds DICOM limits of -2**31 to (2**31 - 1) for IS" + raise OverflowError(message) + return newval + + def __init__(self, val): + # If a string passed, then store it + if isinstance(val, (str, unicode)): + self.original_string = val + elif isinstance(val, IS) and hasattr(val, 'original_string'): + self.original_string = val.original_string + + def __repr__(self): + if hasattr(self, 'original_string'): + return "'" + self.original_string + "'" + else: + return "'" + int.__str__(self) + "'" + + +def MultiString(val, valtype=str): + """Split a bytestring by delimiters if there are any + + val -- DICOM bytestring to split up + valtype -- default str, but can be e.g. UID to overwrite to a specific type + """ + # Remove trailing blank used to pad to even length + # 2005.05.25: also check for trailing 0, error made in PET files we are converting + + if val and (val.endswith(' ') or val.endswith('\x00')): + val = val[:-1] + splitup = val.split("\\") + + if len(splitup) == 1: + val = splitup[0] + return valtype(val) if val else val + else: + return MultiValue(valtype, splitup) + + +class PersonName3(object): + def __init__(self, val, encodings=default_encoding): + if isinstance(val, PersonName3): + val = val.original_string + + self.original_string = val + + self.encodings = self._verify_encodings(encodings) + self.parse(val) + + def parse(self, val): + if isinstance(val, bytes): + matchstr = match_string_bytes + else: + matchstr = match_string_uni + + matchobj = re.match(matchstr, val) + + self.__dict__.update(matchobj.groupdict()) + + groups = matchobj.groups() + self.components = [groups[i] for i in (0, -2, -1)] + + def __eq__(self, other): + return self.original_string == other + + def __ne__(self, other): + return not self == other + + def __str__(self): + return self.original_string.__str__() + + def __repr__(self): + return self.original_string.__repr__() + + def decode(self, encodings=None): + encodings = self._verify_encodings(encodings) + + from dicom.charset import clean_escseq + if not isinstance(self.components[0], bytes): + comps = self.components + else: + comps = [clean_escseq(comp.decode(enc), encodings) + for comp, enc in zip(self.components, encodings)] + + while len(comps) and not comps[-1]: + comps.pop() + + return PersonName3('='.join(comps), encodings) + + def encode(self, encodings=None): + encodings = self._verify_encodings(encodings) + + if isinstance(self.components[0], bytes): + comps = self.components + else: + comps = [C.encode(enc) for C, enc in zip(self.components, encodings)] + + # Remove empty elements from the end + while len(comps) and not comps[-1]: + comps.pop() + + return b'='.join(comps) + + def family_comma_given(self): + return self.formatted('%(family_name)s, %(given_name)s') + + def formatted(self, format_str): + if isinstance(self.original_string, bytes): + return format_str % self.decode(default_encoding).__dict__ + else: + return format_str % self.__dict__ + + def _verify_encodings(self, encodings): + if encodings is None: + return self.encodings + + if not isinstance(encodings, list): + encodings = [encodings] * 3 + + if len(encodings) == 2: + encodings.append(encodings[1]) + + return encodings + + +class PersonNameBase(object): + """Base class for Person Name classes""" + + def __init__(self, val): + """Initialize the PN properties""" + # Note normally use __new__ on subclassing an immutable, but here we just want + # to do some pre-processing for properties + # PS 3.5-2008 section 6.2 (p.28) and 6.2.1 describes PN. Briefly: + # single-byte-characters=ideographic characters=phonetic-characters + # (each with?): + # family-name-complex^Given-name-complex^Middle-name^name-prefix^name-suffix + self.parse() + + def formatted(self, format_str): + """Return a formatted string according to the format pattern + + Use "...%(property)...%(property)..." where property is one of + family_name, given_name, middle_name, name_prefix, name_suffix + """ + return format_str % self.__dict__ + + def parse(self): + """Break down the components and name parts""" + self.components = self.split("=") + nComponents = len(self.components) + self.single_byte = self.components[0] + self.ideographic = '' + self.phonetic = '' + if nComponents > 1: + self.ideographic = self.components[1] + if nComponents > 2: + self.phonetic = self.components[2] + + if self.single_byte: + name_string = self.single_byte + "^^^^" # in case missing trailing items are left out + parts = name_string.split("^")[:5] + self.family_name, self.given_name, self.middle_name = parts[:3] + self.name_prefix, self.name_suffix = parts[3:] + else: + (self.family_name, self.given_name, self.middle_name, + self.name_prefix, self.name_suffix) = ('', '', '', '', '') + + +class PersonName(PersonNameBase, bytes): + """Human-friendly class to hold VR of Person Name (PN) + + Name is parsed into the following properties: + single-byte, ideographic, and phonetic components (PS3.5-2008 6.2.1) + family_name, + given_name, + middle_name, + name_prefix, + name_suffix + + """ + def __new__(cls, val): + """Return instance of the new class""" + # Check if trying to convert a string that has already been converted + if isinstance(val, PersonName): + return val + return super(PersonName, cls).__new__(cls, val) + + def encode(self, *args): + """Dummy method to mimic py2 str behavior in py3 bytes subclass""" + # This greatly simplifies the write process so all objects have the + # "encode" method + return self + + def family_comma_given(self): + """Return name as 'Family-name, Given-name'""" + return self.formatted("%(family_name)s, %(given_name)s") + # def __str__(self): + # return str(self.byte_string) + # XXX need to process the ideographic or phonetic components? + # def __len__(self): + # return len(self.byte_string) + + +class PersonNameUnicode(PersonNameBase, unicode): + """Unicode version of Person Name""" + + def __new__(cls, val, encodings): + """Return unicode string after conversion of each part + val -- the PN value to store + encodings -- a list of python encodings, generally found + from dicom.charset.python_encodings mapping + of values in DICOM data element (0008,0005). + """ + from dicom.charset import clean_escseq # in here to avoid circular import + + # Make the possible three character encodings explicit: + if not isinstance(encodings, list): + encodings = [encodings] * 3 + if len(encodings) == 2: + encodings.append(encodings[1]) + components = val.split(b"=") + # Remove the first encoding if only one component is present + if (len(components) == 1): + del encodings[0] + + comps = [clean_escseq(C.decode(enc), encodings) + for C, enc in zip(components, encodings)] + new_val = u"=".join(comps) + + return unicode.__new__(cls, new_val) + + def __init__(self, val, encodings): + self.encodings = self._verify_encodings(encodings) + PersonNameBase.__init__(self, val) + + def _verify_encodings(self, encodings): + """Checks the encoding to ensure proper format""" + if encodings is None: + return self.encodings + + if not isinstance(encodings, list): + encodings = [encodings] * 3 + + if len(encodings) == 2: + encodings.append(encodings[1]) + + return encodings + + def encode(self, encodings): + """Encode the unicode using the specified encoding""" + encodings = self._verify_encodings(encodings) + + components = self.split('=') + + comps = [C.encode(enc) for C, enc in zip(components, encodings)] + + # Remove empty elements from the end + while len(comps) and not comps[-1]: + comps.pop() + + return '='.join(comps) + + def family_comma_given(self): + """Return name as 'Family-name, Given-name'""" + return self.formatted("%(family_name)u, %(given_name)u") diff -Nru pydicom-0.9.8/source/dicom/values.py pydicom-0.9.9/source/dicom/values.py --- pydicom-0.9.8/source/dicom/values.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/dicom/values.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,242 @@ +# values.py +"""Functions for converting values of DICOM data elements to proper python types +""" +# Copyright (c) 2010-2012 Darcy Mason +# This file is part of pydicom, relased under an MIT license. +# See the file license.txt included with this distribution, also +# available at http://pydicom.googlecode.com + +from dicom import in_py3 +from struct import unpack, calcsize +import logging +logger = logging.getLogger('pydicom') + +# Because DS can be based on float or decimal, import whole module, not DS +# directly, so it can be changed in user code and be updated here also +import dicom.valuerep +from dicom.valuerep import MultiString + +if in_py3: + from dicom.valuerep import PersonName3 as PersonName +else: + from dicom.valuerep import PersonName # NOQA + +from dicom.multival import MultiValue +import dicom.UID +from dicom.tag import Tag, TupleTag +from dicom.filereader import read_sequence +from io import BytesIO +from dicom.charset import default_encoding, text_VRs + + +def convert_tag(byte_string, is_little_endian, offset=0): + if is_little_endian: + struct_format = " 4 + if length % 4 != 0: + logger.warn("Expected length to be multiple of 4 for VR 'AT', " + "got length %d", length) + return MultiValue(Tag, [convert_tag(byte_string, is_little_endian, offset=x) + for x in range(0, length, 4)]) + + +def convert_DS_string(byte_string, is_little_endian, struct_format=None): + """Read and return a DS value or list of values""" + if in_py3: + byte_string = byte_string.decode(default_encoding) + # Below, go directly to DS class instance rather than factory DS, + # but need to ensure last string doesn't have blank padding (use strip()) + return MultiString(byte_string.strip(), valtype=dicom.valuerep.DSclass) + + +def convert_IS_string(byte_string, is_little_endian, struct_format=None): + """Read and return an IS value or list of values""" + if in_py3: + byte_string = byte_string.decode(default_encoding) + return MultiString(byte_string, valtype=dicom.valuerep.IS) + + +def convert_numbers(byte_string, is_little_endian, struct_format): + """Read a "value" of type struct_format from the dicom file. "Value" can be more than one number""" + endianChar = '><'[is_little_endian] + bytes_per_value = calcsize("=" + struct_format) # "=" means use 'standard' size, needed on 64-bit systems. + length = len(byte_string) + if length % bytes_per_value != 0: + logger.warn("Expected length to be even multiple of number size") + format_string = "%c%u%c" % (endianChar, length // bytes_per_value, struct_format) + value = unpack(format_string, byte_string) + if len(value) == 1: + return value[0] + else: + return list(value) # convert from tuple to a list so can modify if need to + + +def convert_OBvalue(byte_string, is_little_endian, struct_format=None): + """Return the raw bytes from reading an OB value""" + return byte_string + + +def convert_OWvalue(byte_string, is_little_endian, struct_format=None): + """Return the raw bytes from reading an OW value rep + + Note: pydicom does NOT do byte swapping, except in + dataset.pixel_array function + """ + return convert_OBvalue(byte_string, is_little_endian) # for now, Maybe later will have own routine + + +def convert_PN(byte_string, is_little_endian, struct_format=None, encoding=None): + """Read and return string(s) as PersonName instance(s)""" + + # XXX - We have to replicate MultiString functionality here because we can't decode + # easily here since that is performed in PersonNameUnicode + if byte_string and (byte_string.endswith(b' ') or byte_string.endswith(b'\x00')): + byte_string = byte_string[:-1] + + splitup = byte_string.split(b"\\") + + if encoding and in_py3: + args = (encoding,) + else: + args = () + + # We would like to return string literals + if in_py3: + valtype = lambda x: PersonName(x, *args).decode() + else: + valtype = lambda x: PersonName(x, *args) + + if len(splitup) == 1: + return valtype(splitup[0]) + else: + return MultiValue(valtype, splitup) + + +def convert_string(byte_string, is_little_endian, struct_format=None, encoding=default_encoding): + """Read and return a string or strings""" + if in_py3: + byte_string = byte_string.decode(encoding) + return MultiString(byte_string) + + +def convert_single_string(byte_string, is_little_endian, struct_format=None, + encoding=default_encoding): + """Read and return a single string (backslash character does not split)""" + if in_py3: + byte_string = byte_string.decode(encoding) + if byte_string and byte_string.endswith(' '): + byte_string = byte_string[:-1] + return byte_string + + +def convert_SQ(byte_string, is_implicit_VR, is_little_endian, + encoding=default_encoding, offset=0): + """Convert a sequence that has been read as bytes but not yet parsed.""" + fp = BytesIO(byte_string) + seq = read_sequence(fp, is_implicit_VR, is_little_endian, len(byte_string), + encoding, offset) + return seq + + +def convert_UI(byte_string, is_little_endian, struct_format=None): + """Read and return a UI values or values""" + # Strip off 0-byte padding for even length (if there) + if in_py3: + byte_string = byte_string.decode(default_encoding) + if byte_string and byte_string.endswith('\0'): + byte_string = byte_string[:-1] + return MultiString(byte_string, dicom.UID.UID) + + +def convert_UN(byte_string, is_little_endian, struct_format=None): + """Return a byte string for a VR of 'UN' (unknown)""" + return byte_string + + +def convert_value(VR, raw_data_element, encoding=default_encoding): + """Return the converted value (from raw bytes) for the given VR""" + if VR not in converters: + raise NotImplementedError("Unknown Value Representation '{0}'".format(VR)) + + # Look up the function to convert that VR + # Dispatch two cases: a plain converter, or a number one which needs a format string + if isinstance(converters[VR], tuple): + converter, num_format = converters[VR] + else: + converter = converters[VR] + num_format = None + + # Ensure that encoding is in the proper 3-element format + if isinstance(encoding, basestring): + encoding = [encoding, ] * 3 + + byte_string = raw_data_element.value + is_little_endian = raw_data_element.is_little_endian + is_implicit_VR = raw_data_element.is_implicit_VR + + # Not only two cases. Also need extra info if is a raw sequence + # Pass the encoding to the converter if it is a specific VR + if VR == 'PN': + value = converter(byte_string, is_little_endian, encoding=encoding) + elif VR in text_VRs: + # Text VRs use the 2nd specified encoding + value = converter(byte_string, is_little_endian, encoding=encoding[1]) + elif VR != "SQ": + value = converter(byte_string, is_little_endian, num_format) + else: + value = convert_SQ(byte_string, is_implicit_VR, is_little_endian, + encoding, raw_data_element.value_tell) + return value + +# converters map a VR to the function to read the value(s). +# for convert_numbers, the converter maps to a tuple (function, struct_format) +# (struct_format in python struct module style) +converters = { + 'UL': (convert_numbers, 'L'), + 'SL': (convert_numbers, 'l'), + 'US': (convert_numbers, 'H'), + 'SS': (convert_numbers, 'h'), + 'FL': (convert_numbers, 'f'), + 'FD': (convert_numbers, 'd'), + 'OF': (convert_numbers, 'f'), + 'OB': convert_OBvalue, + 'UI': convert_UI, + 'SH': convert_string, + 'DA': convert_string, + 'TM': convert_string, + 'CS': convert_string, + 'PN': convert_PN, + 'LO': convert_string, + 'IS': convert_IS_string, + 'DS': convert_DS_string, + 'AE': convert_string, + 'AS': convert_string, + 'LT': convert_single_string, + 'SQ': convert_SQ, + 'UN': convert_UN, + 'AT': convert_ATvalue, + 'ST': convert_string, + 'OW': convert_OWvalue, + 'OW/OB': convert_OBvalue, # note OW/OB depends on other items, which we don't know at read time + 'OB/OW': convert_OBvalue, + 'OW or OB': convert_OBvalue, + 'OB or OW': convert_OBvalue, + 'US or SS': convert_OWvalue, + 'US or OW': convert_OWvalue, + 'US or SS or OW': convert_OWvalue, + 'US\\US or SS\\US': convert_OWvalue, + 'DT': convert_string, + 'UT': convert_single_string, +} +if __name__ == "__main__": + pass diff -Nru pydicom-0.9.8/source/distribute_setup.py pydicom-0.9.9/source/distribute_setup.py --- pydicom-0.9.8/source/distribute_setup.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/distribute_setup.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,477 @@ +#!python +"""Bootstrap distribute installation + +If you want to use setuptools in your package's setup.py, just include this +file in the same directory with it, and add this to the top of your setup.py:: + + from distribute_setup import use_setuptools + use_setuptools() + +If you want to require a specific version of setuptools, set a download +mirror, or use an alternate download directory, you can do so by supplying +the appropriate options to ``use_setuptools()``. + +This file can also be run as a script to install or upgrade setuptools. +""" +import os +import sys +import time +import fnmatch +import tempfile +import tarfile +from distutils import log + +try: + from site import USER_SITE +except ImportError: + USER_SITE = None + +try: + import subprocess + + def _python_cmd(*args): + args = (sys.executable,) + args + return subprocess.call(args) == 0 + +except ImportError: + # will be used for python 2.3 + def _python_cmd(*args): + args = (sys.executable,) + args + # quoting arguments if windows + if sys.platform == 'win32': + def quote(arg): + if ' ' in arg: + return '"%s"' % arg + return arg + args = [quote(arg) for arg in args] + return os.spawnl(os.P_WAIT, sys.executable, *args) == 0 + +DEFAULT_VERSION = "0.6.10" +DEFAULT_URL = "http://pypi.python.org/packages/source/d/distribute/" +SETUPTOOLS_FAKED_VERSION = "0.6c11" + +SETUPTOOLS_PKG_INFO = """\ +Metadata-Version: 1.0 +Name: setuptools +Version: %s +Summary: xxxx +Home-page: xxx +Author: xxx +Author-email: xxx +License: xxx +Description: xxx +""" % SETUPTOOLS_FAKED_VERSION + + +def _install(tarball): + # extracting the tarball + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in %s', tmpdir) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + tar = tarfile.open(tarball) + _extractall(tar) + tar.close() + + # going in the directory + subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) + os.chdir(subdir) + log.warn('Now working in %s', subdir) + + # installing + log.warn('Installing Distribute') + if not _python_cmd('setup.py', 'install'): + log.warn('Something went wrong during the installation.') + log.warn('See the error message above.') + finally: + os.chdir(old_wd) + + +def _build_egg(egg, tarball, to_dir): + # extracting the tarball + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in %s', tmpdir) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + tar = tarfile.open(tarball) + _extractall(tar) + tar.close() + + # going in the directory + subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) + os.chdir(subdir) + log.warn('Now working in %s', subdir) + + # building an egg + log.warn('Building a Distribute egg in %s', to_dir) + _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + + finally: + os.chdir(old_wd) + # returning the result + log.warn(egg) + if not os.path.exists(egg): + raise IOError('Could not build the egg.') + + +def _do_download(version, download_base, to_dir, download_delay): + egg = os.path.join(to_dir, 'distribute-%s-py%d.%d.egg' + % (version, sys.version_info[0], sys.version_info[1])) + if not os.path.exists(egg): + tarball = download_setuptools(version, download_base, + to_dir, download_delay) + _build_egg(egg, tarball, to_dir) + sys.path.insert(0, egg) + import setuptools + setuptools.bootstrap_install_from = egg + + +def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, download_delay=15, no_fake=True): + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + was_imported = 'pkg_resources' in sys.modules or \ + 'setuptools' in sys.modules + try: + try: + import pkg_resources + if not hasattr(pkg_resources, '_distribute'): + if not no_fake: + _fake_setuptools() + raise ImportError + except ImportError: + return _do_download(version, download_base, to_dir, download_delay) + try: + pkg_resources.require("distribute>="+version) + return + except pkg_resources.VersionConflict: + e = sys.exc_info()[1] + if was_imported: + sys.stderr.write( + "The required version of distribute (>=%s) is not available,\n" + "and can't be installed while this script is running. Please\n" + "install a more recent version first, using\n" + "'easy_install -U distribute'." + "\n\n(Currently using %r)\n" % (version, e.args[0])) + sys.exit(2) + else: + del pkg_resources, sys.modules['pkg_resources'] # reload ok + return _do_download(version, download_base, to_dir, + download_delay) + except pkg_resources.DistributionNotFound: + return _do_download(version, download_base, to_dir, + download_delay) + finally: + if not no_fake: + _create_fake_setuptools_pkg_info(to_dir) + +def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, delay=15): + """Download distribute from a specified location and return its filename + + `version` should be a valid distribute version number that is available + as an egg for download under the `download_base` URL (which should end + with a '/'). `to_dir` is the directory where the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download + attempt. + """ + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + try: + from urllib.request import urlopen + except ImportError: + from urllib2 import urlopen + tgz_name = "distribute-%s.tar.gz" % version + url = download_base + tgz_name + saveto = os.path.join(to_dir, tgz_name) + src = dst = None + if not os.path.exists(saveto): # Avoid repeated downloads + try: + log.warn("Downloading %s", url) + src = urlopen(url) + # Read/write all in one block, so we don't create a corrupt file + # if the download is interrupted. + data = src.read() + dst = open(saveto, "wb") + dst.write(data) + finally: + if src: + src.close() + if dst: + dst.close() + return os.path.realpath(saveto) + + +def _patch_file(path, content): + """Will backup the file then patch it""" + existing_content = open(path).read() + if existing_content == content: + # already patched + log.warn('Already patched.') + return False + log.warn('Patching...') + _rename_path(path) + f = open(path, 'w') + try: + f.write(content) + finally: + f.close() + return True + + +def _same_content(path, content): + return open(path).read() == content + +def _no_sandbox(function): + def __no_sandbox(*args, **kw): + try: + from setuptools.sandbox import DirectorySandbox + def violation(*args): + pass + DirectorySandbox._old = DirectorySandbox._violation + DirectorySandbox._violation = violation + patched = True + except ImportError: + patched = False + + try: + return function(*args, **kw) + finally: + if patched: + DirectorySandbox._violation = DirectorySandbox._old + del DirectorySandbox._old + + return __no_sandbox + +@_no_sandbox +def _rename_path(path): + new_name = path + '.OLD.%s' % time.time() + log.warn('Renaming %s into %s', path, new_name) + os.rename(path, new_name) + return new_name + +def _remove_flat_installation(placeholder): + if not os.path.isdir(placeholder): + log.warn('Unkown installation at %s', placeholder) + return False + found = False + for file in os.listdir(placeholder): + if fnmatch.fnmatch(file, 'setuptools*.egg-info'): + found = True + break + if not found: + log.warn('Could not locate setuptools*.egg-info') + return + + log.warn('Removing elements out of the way...') + pkg_info = os.path.join(placeholder, file) + if os.path.isdir(pkg_info): + patched = _patch_egg_dir(pkg_info) + else: + patched = _patch_file(pkg_info, SETUPTOOLS_PKG_INFO) + + if not patched: + log.warn('%s already patched.', pkg_info) + return False + # now let's move the files out of the way + for element in ('setuptools', 'pkg_resources.py', 'site.py'): + element = os.path.join(placeholder, element) + if os.path.exists(element): + _rename_path(element) + else: + log.warn('Could not find the %s element of the ' + 'Setuptools distribution', element) + return True + + +def _after_install(dist): + log.warn('After install bootstrap.') + placeholder = dist.get_command_obj('install').install_purelib + _create_fake_setuptools_pkg_info(placeholder) + +@_no_sandbox +def _create_fake_setuptools_pkg_info(placeholder): + if not placeholder or not os.path.exists(placeholder): + log.warn('Could not find the install location') + return + pyver = '%s.%s' % (sys.version_info[0], sys.version_info[1]) + setuptools_file = 'setuptools-%s-py%s.egg-info' % \ + (SETUPTOOLS_FAKED_VERSION, pyver) + pkg_info = os.path.join(placeholder, setuptools_file) + if os.path.exists(pkg_info): + log.warn('%s already exists', pkg_info) + return + + log.warn('Creating %s', pkg_info) + f = open(pkg_info, 'w') + try: + f.write(SETUPTOOLS_PKG_INFO) + finally: + f.close() + + pth_file = os.path.join(placeholder, 'setuptools.pth') + log.warn('Creating %s', pth_file) + f = open(pth_file, 'w') + try: + f.write(os.path.join(os.curdir, setuptools_file)) + finally: + f.close() + +def _patch_egg_dir(path): + # let's check if it's already patched + pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') + if os.path.exists(pkg_info): + if _same_content(pkg_info, SETUPTOOLS_PKG_INFO): + log.warn('%s already patched.', pkg_info) + return False + _rename_path(path) + os.mkdir(path) + os.mkdir(os.path.join(path, 'EGG-INFO')) + pkg_info = os.path.join(path, 'EGG-INFO', 'PKG-INFO') + f = open(pkg_info, 'w') + try: + f.write(SETUPTOOLS_PKG_INFO) + finally: + f.close() + return True + + +def _before_install(): + log.warn('Before install bootstrap.') + _fake_setuptools() + + +def _under_prefix(location): + if 'install' not in sys.argv: + return True + args = sys.argv[sys.argv.index('install')+1:] + for index, arg in enumerate(args): + for option in ('--root', '--prefix'): + if arg.startswith('%s=' % option): + top_dir = arg.split('root=')[-1] + return location.startswith(top_dir) + elif arg == option: + if len(args) > index: + top_dir = args[index+1] + return location.startswith(top_dir) + elif option == '--user' and USER_SITE is not None: + return location.startswith(USER_SITE) + return True + + +def _fake_setuptools(): + log.warn('Scanning installed packages') + try: + import pkg_resources + except ImportError: + # we're cool + log.warn('Setuptools or Distribute does not seem to be installed.') + return + ws = pkg_resources.working_set + try: + setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools', + replacement=False)) + except TypeError: + # old distribute API + setuptools_dist = ws.find(pkg_resources.Requirement.parse('setuptools')) + + if setuptools_dist is None: + log.warn('No setuptools distribution found') + return + # detecting if it was already faked + setuptools_location = setuptools_dist.location + log.warn('Setuptools installation detected at %s', setuptools_location) + + # if --root or --preix was provided, and if + # setuptools is not located in them, we don't patch it + if not _under_prefix(setuptools_location): + log.warn('Not patching, --root or --prefix is installing Distribute' + ' in another location') + return + + # let's see if its an egg + if not setuptools_location.endswith('.egg'): + log.warn('Non-egg installation') + res = _remove_flat_installation(setuptools_location) + if not res: + return + else: + log.warn('Egg installation') + pkg_info = os.path.join(setuptools_location, 'EGG-INFO', 'PKG-INFO') + if (os.path.exists(pkg_info) and + _same_content(pkg_info, SETUPTOOLS_PKG_INFO)): + log.warn('Already patched.') + return + log.warn('Patching...') + # let's create a fake egg replacing setuptools one + res = _patch_egg_dir(setuptools_location) + if not res: + return + log.warn('Patched done.') + _relaunch() + + +def _relaunch(): + log.warn('Relaunching...') + # we have to relaunch the process + args = [sys.executable] + sys.argv + sys.exit(subprocess.call(args)) + + +def _extractall(self, path=".", members=None): + """Extract all members from the archive to the current working + directory and set owner, modification time and permissions on + directories afterwards. `path' specifies a different directory + to extract to. `members' is optional and must be a subset of the + list returned by getmembers(). + """ + import copy + import operator + from tarfile import ExtractError + directories = [] + + if members is None: + members = self + + for tarinfo in members: + if tarinfo.isdir(): + # Extract directories with a safe mode. + directories.append(tarinfo) + tarinfo = copy.copy(tarinfo) + tarinfo.mode = 448 # decimal for oct 0700 + self.extract(tarinfo, path) + + # Reverse sort directories. + if sys.version_info < (2, 4): + def sorter(dir1, dir2): + return cmp(dir1.name, dir2.name) + directories.sort(sorter) + directories.reverse() + else: + directories.sort(key=operator.attrgetter('name'), reverse=True) + + # Set correct owner, mtime and filemode on directories. + for tarinfo in directories: + dirpath = os.path.join(path, tarinfo.name) + try: + self.chown(tarinfo, dirpath) + self.utime(tarinfo, dirpath) + self.chmod(tarinfo, dirpath) + except ExtractError: + e = sys.exc_info()[1] + if self.errorlevel > 1: + raise + else: + self._dbg(1, "tarfile: %s" % e) + + +def main(argv, version=DEFAULT_VERSION): + """Install or upgrade setuptools and EasyInstall""" + tarball = download_setuptools() + _install(tarball) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff -Nru pydicom-0.9.8/source/ez_setup.py pydicom-0.9.9/source/ez_setup.py --- pydicom-0.9.8/source/ez_setup.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/ez_setup.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,332 @@ +#!/usr/bin/env python +"""Bootstrap setuptools installation + +To use setuptools in your package's setup.py, include this +file in the same directory and add this to the top of your setup.py:: + + from ez_setup import use_setuptools + use_setuptools() + +To require a specific version of setuptools, set a download +mirror, or use an alternate download directory, simply supply +the appropriate options to ``use_setuptools()``. + +This file can also be run as a script to install or upgrade setuptools. +""" +import os +import shutil +import sys +import tempfile +import zipfile +import optparse +import subprocess +import platform +import textwrap +import contextlib + +from distutils import log + +try: + from urllib.request import urlopen +except ImportError: + from urllib2 import urlopen + +try: + from site import USER_SITE +except ImportError: + USER_SITE = None + +DEFAULT_VERSION = "7.0" +DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" + +def _python_cmd(*args): + """ + Return True if the command succeeded. + """ + args = (sys.executable,) + args + return subprocess.call(args) == 0 + + +def _install(archive_filename, install_args=()): + with archive_context(archive_filename): + # installing + log.warn('Installing Setuptools') + if not _python_cmd('setup.py', 'install', *install_args): + log.warn('Something went wrong during the installation.') + log.warn('See the error message above.') + # exitcode will be 2 + return 2 + + +def _build_egg(egg, archive_filename, to_dir): + with archive_context(archive_filename): + # building an egg + log.warn('Building a Setuptools egg in %s', to_dir) + _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) + # returning the result + log.warn(egg) + if not os.path.exists(egg): + raise IOError('Could not build the egg.') + + +class ContextualZipFile(zipfile.ZipFile): + """ + Supplement ZipFile class to support context manager for Python 2.6 + """ + + def __enter__(self): + return self + + def __exit__(self, type, value, traceback): + self.close() + + def __new__(cls, *args, **kwargs): + """ + Construct a ZipFile or ContextualZipFile as appropriate + """ + if hasattr(zipfile.ZipFile, '__exit__'): + return zipfile.ZipFile(*args, **kwargs) + return super(ContextualZipFile, cls).__new__(cls) + + +@contextlib.contextmanager +def archive_context(filename): + # extracting the archive + tmpdir = tempfile.mkdtemp() + log.warn('Extracting in %s', tmpdir) + old_wd = os.getcwd() + try: + os.chdir(tmpdir) + with ContextualZipFile(filename) as archive: + archive.extractall() + + # going in the directory + subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) + os.chdir(subdir) + log.warn('Now working in %s', subdir) + yield + + finally: + os.chdir(old_wd) + shutil.rmtree(tmpdir) + + +def _do_download(version, download_base, to_dir, download_delay): + egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' + % (version, sys.version_info[0], sys.version_info[1])) + if not os.path.exists(egg): + archive = download_setuptools(version, download_base, + to_dir, download_delay) + _build_egg(egg, archive, to_dir) + sys.path.insert(0, egg) + + # Remove previously-imported pkg_resources if present (see + # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). + if 'pkg_resources' in sys.modules: + del sys.modules['pkg_resources'] + + import setuptools + setuptools.bootstrap_install_from = egg + + +def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, download_delay=15): + to_dir = os.path.abspath(to_dir) + rep_modules = 'pkg_resources', 'setuptools' + imported = set(sys.modules).intersection(rep_modules) + try: + import pkg_resources + except ImportError: + return _do_download(version, download_base, to_dir, download_delay) + try: + pkg_resources.require("setuptools>=" + version) + return + except pkg_resources.DistributionNotFound: + return _do_download(version, download_base, to_dir, download_delay) + except pkg_resources.VersionConflict as VC_err: + if imported: + msg = textwrap.dedent(""" + The required version of setuptools (>={version}) is not available, + and can't be installed while this script is running. Please + install a more recent version first, using + 'easy_install -U setuptools'. + + (Currently using {VC_err.args[0]!r}) + """).format(VC_err=VC_err, version=version) + sys.stderr.write(msg) + sys.exit(2) + + # otherwise, reload ok + del pkg_resources, sys.modules['pkg_resources'] + return _do_download(version, download_base, to_dir, download_delay) + +def _clean_check(cmd, target): + """ + Run the command to download target. If the command fails, clean up before + re-raising the error. + """ + try: + subprocess.check_call(cmd) + except subprocess.CalledProcessError: + if os.access(target, os.F_OK): + os.unlink(target) + raise + +def download_file_powershell(url, target): + """ + Download the file at url to target using Powershell (which will validate + trust). Raise an exception if the command cannot complete. + """ + target = os.path.abspath(target) + ps_cmd = ( + "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " + "[System.Net.CredentialCache]::DefaultCredentials; " + "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" + % vars() + ) + cmd = [ + 'powershell', + '-Command', + ps_cmd, + ] + _clean_check(cmd, target) + +def has_powershell(): + if platform.system() != 'Windows': + return False + cmd = ['powershell', '-Command', 'echo test'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True + +download_file_powershell.viable = has_powershell + +def download_file_curl(url, target): + cmd = ['curl', url, '--silent', '--output', target] + _clean_check(cmd, target) + +def has_curl(): + cmd = ['curl', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True + +download_file_curl.viable = has_curl + +def download_file_wget(url, target): + cmd = ['wget', url, '--quiet', '--output-document', target] + _clean_check(cmd, target) + +def has_wget(): + cmd = ['wget', '--version'] + with open(os.path.devnull, 'wb') as devnull: + try: + subprocess.check_call(cmd, stdout=devnull, stderr=devnull) + except Exception: + return False + return True + +download_file_wget.viable = has_wget + +def download_file_insecure(url, target): + """ + Use Python to download the file, even though it cannot authenticate the + connection. + """ + src = urlopen(url) + try: + # Read all the data in one block. + data = src.read() + finally: + src.close() + + # Write all the data in one block to avoid creating a partial file. + with open(target, "wb") as dst: + dst.write(data) + +download_file_insecure.viable = lambda: True + +def get_best_downloader(): + downloaders = ( + download_file_powershell, + download_file_curl, + download_file_wget, + download_file_insecure, + ) + viable_downloaders = (dl for dl in downloaders if dl.viable()) + return next(viable_downloaders, None) + +def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, + to_dir=os.curdir, delay=15, downloader_factory=get_best_downloader): + """ + Download setuptools from a specified location and return its filename + + `version` should be a valid setuptools version number that is available + as an sdist for download under the `download_base` URL (which should end + with a '/'). `to_dir` is the directory where the egg will be downloaded. + `delay` is the number of seconds to pause before an actual download + attempt. + + ``downloader_factory`` should be a function taking no arguments and + returning a function for downloading a URL to a target. + """ + # making sure we use the absolute path + to_dir = os.path.abspath(to_dir) + zip_name = "setuptools-%s.zip" % version + url = download_base + zip_name + saveto = os.path.join(to_dir, zip_name) + if not os.path.exists(saveto): # Avoid repeated downloads + log.warn("Downloading %s", url) + downloader = downloader_factory() + downloader(url, saveto) + return os.path.realpath(saveto) + +def _build_install_args(options): + """ + Build the arguments to 'python setup.py install' on the setuptools package + """ + return ['--user'] if options.user_install else [] + +def _parse_args(): + """ + Parse the command line for options + """ + parser = optparse.OptionParser() + parser.add_option( + '--user', dest='user_install', action='store_true', default=False, + help='install in user site package (requires Python 2.6 or later)') + parser.add_option( + '--download-base', dest='download_base', metavar="URL", + default=DEFAULT_URL, + help='alternative URL from where to download the setuptools package') + parser.add_option( + '--insecure', dest='downloader_factory', action='store_const', + const=lambda: download_file_insecure, default=get_best_downloader, + help='Use internal, non-validating downloader' + ) + parser.add_option( + '--version', help="Specify which version to download", + default=DEFAULT_VERSION, + ) + options, args = parser.parse_args() + # positional arguments are ignored + return options + +def main(): + """Install or upgrade setuptools and EasyInstall""" + options = _parse_args() + archive = download_setuptools( + version=options.version, + download_base=options.download_base, + downloader_factory=options.downloader_factory, + ) + return _install(archive, _build_install_args(options)) + +if __name__ == '__main__': + sys.exit(main()) diff -Nru pydicom-0.9.8/source/fabfile.py pydicom-0.9.9/source/fabfile.py --- pydicom-0.9.8/source/fabfile.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/fabfile.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,32 @@ +# fabfile.py +"""Instructions for automated testing, building of pydicom using Fabric""" + +from fabric.api import local, settings, abort +from fabric.contrib.console import confirm + +import os.path +import dicom +pydicompath = dicom.__path__[0] +tox_ini = os.path.join(pydicompath, "../tox.ini") + + +def syntax(): + local("reindent -r " + pydicompath) + with settings(warn_only=True): + result = local("flake8 --ignore=E501 " + pydicompath) + if result.failed and not confirm("Continue?"): + abort("Aborted due to user request") + + +def test(): + local("python setup.py --quiet test") + + +def fulltest(): + local("tox -c" + tox_ini) + + +def commit(): + local("hg stat") +ci = commit + diff -Nru pydicom-0.9.8/source/generate_dict/csv2dict2011.py pydicom-0.9.9/source/generate_dict/csv2dict2011.py --- pydicom-0.9.8/source/generate_dict/csv2dict2011.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/csv2dict2011.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,95 @@ +# csv2dict2011.py +# -*- coding: utf-8 -*- +"""Reformat a dicom dictionary csv file (from e.g. standards docs) to Python syntax + + Write the DICOM dictionary elements as: + tag: (VR, VM, description, keyword, is_retired) + in python format + + Also write the repeating groups or elements (e.g. group "50xx") + as masks that can be tested later for tag lookups that didn't work +""" +# +# Copyright 2011-2012, Darcy Mason +# This file is part of pydicom, released under an MIT licence. +# See license.txt file for more details. + +csv_filename = "dict_2011.csv" +pydict_filename = "_dicom_dict.py" +main_dict_name = "DicomDictionary" +mask_dict_name = "RepeatersDictionary" + +def write_dict(f, dict_name, attributes, tagIsString): + if tagIsString: + entry_format = """'%s': ('%s', '%s', "%s", '%s', '%s')""" + else: + entry_format = """%s: ('%s', '%s', "%s", '%s', '%s')""" + f.write("\n%s = {\n " % dict_name) + f.write(",\n ".join(entry_format % attribute for attribute in attributes)) + f.write("\n}\n") + +if __name__ == "__main__": + import csv # comma-separated value module + import os + + csv_reader = csv.reader(file(csv_filename, 'rb')) + + main_attributes = [] + mask_attributes = [] + for row in csv_reader: + tag, description, keyword, VR, VM, is_retired = row + if tag == '' or tag == "Tag": + continue + tag = tag.strip() # at least one item has extra blank on end + VR = VR.strip() # similarly, some VRs have extra blank + keyword = keyword.strip() # just in case + group, elem = tag[1:-1].split(",") + if is_retired.strip() == 'RET': + is_retired = 'Retired' + if VR == "see note": # used with some delimiter tags + VR = "NONE" # to be same as '08 dict in pydicom + + # Handle one case "(0020,3100 to 31FF)" by converting to mask + # Do in general way in case others like this come in future standards + if " to " in elem: + from_elem, to_elem = elem.split(" to ") + if from_elem.endswith("00") and to_elem.endswith("FF"): + elem = from_elem[:2] + "xx" + else: + raise NotImplementedError, "Cannot mask '%s'" % elem + + if description.endswith(" "): + description = description.rstrip() + + description = description.replace("’", "'") # non-ascii apostrophe + description = description.replace("‑", "-") # non-ascii dash used, shows in utf-8 as this a character + description = description.replace("µ", "u") # replace micro symbol + + # If blank (e.g. (0018,9445) and (0028,0020)), then add dummy vals + if VR == '' and VM == '' and is_retired: + VR = 'OB' + VM = '1' + description = "Retired-blank" + + # One odd tag in '11 standard (0028,3006) + if VR == 'US or OW': # extra space + VR = 'US or OW' + # Handle retired "repeating group" tags e.g. group "50xx" + if "x" in group or "x" in elem: + tag = group + elem # simple concatenation + mask_attributes.append((tag, VR, VM, description, is_retired, keyword)) + else: + tag = "0x%s%s" % (group, elem) + main_attributes.append((tag, VR, VM, description, is_retired, keyword)) + + py_file = file(pydict_filename, "w") + py_file.write("# %s\n" % pydict_filename) + py_file.write('"""DICOM data dictionary auto-generated by %s"""\n' % os.path.basename(__file__)) + py_file.write('from __future__ import absolute_import\n') + write_dict(py_file, main_dict_name, main_attributes, tagIsString=False) + write_dict(py_file, mask_dict_name, mask_attributes, tagIsString=True) + + py_file.close() + + print "Finished creating python file %s containing the dicom dictionary" % pydict_filename + print "Wrote %d tags" % (len(main_attributes)+len(mask_attributes)) diff -Nru pydicom-0.9.8/source/generate_dict/csv2dict.py pydicom-0.9.9/source/generate_dict/csv2dict.py --- pydicom-0.9.8/source/generate_dict/csv2dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/csv2dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,77 @@ +# csv2dict.py +"""Reformat a dicom dictionary csv file (from e.g. standards docs) to Python syntax + + Write the DICOM dictionary elements as: + tag: (VR, VM, description, is_retired) + in python format + + Also write the repeating groups or elements (e.g. group "50xx") + as masks that can be tested later for tag lookups that didn't work +""" +# +# Copyright 2008-2012, Darcy Mason +# This file is part of pydicom. +# See the license.txt file + +csv_filename = "DICOM_dictionary_2008.csv" +pydict_filename = "_dicom_dict.py" +main_dict_name = "DicomDictionary" +mask_dict_name = "RepeatersDictionary" + +def write_dict(f, dict_name, attributes, tagIsString): + if tagIsString: + entry_format = """'%s': ('%s', '%s', "%s", '%s')""" + else: + entry_format = """%s: ('%s', '%s', "%s", '%s')""" + f.write("\n%s = {\n" % dict_name) + f.write(",\n".join(entry_format % attribute for attribute in attributes)) + f.write("}\n") + +if __name__ == "__main__": + import csv # comma-separated value module + + csv_reader = csv.reader(file(csv_filename, 'rb')) + + main_attributes = [] + mask_attributes = [] + for row in csv_reader: + tag, description, VR, VM, is_retired = row + tag = tag.strip() # at least one item has extra blank on end + group, elem = tag[1:-1].split(",") + + # Handle one case "(0020,3100 to 31FF)" by converting to mask + # Do in general way in case others like this come in future standards + if " to " in elem: + from_elem, to_elem = elem.split(" to ") + if from_elem.endswith("00") and to_elem.endswith("FF"): + elem = from_elem[:2] + "xx" + else: + raise NotImplementedError, "Cannot mask '%s'" % elem + + description = description.replace("\x92", "'") # non-ascii apostrophe used + description = description.replace("\x96", "-") # non-ascii dash used + + # If blank (e.g. (0018,9445) and (0028,0020)), then add dummy vals + if VR == '' and VM == '' and is_retired: + VR = 'OB' + VM = '1' + description = "Retired-blank" + + # Handle retired "repeating group" tags e.g. group "50xx" + if "x" in group or "x" in elem: + tag = group + elem # simple concatenation + mask_attributes.append((tag, VR, VM, description, is_retired)) + else: + tag = "0x%s%s" % (group, elem) + main_attributes.append((tag, VR, VM, description, is_retired)) + + py_file = file(pydict_filename, "wb") + py_file.write("# %s\n" % pydict_filename) + py_file.write('"""DICOM data dictionary auto-generated by %s"""\n' % __file__) + write_dict(py_file, main_dict_name, main_attributes, tagIsString=False) + write_dict(py_file, mask_dict_name, mask_attributes, tagIsString=True) + + py_file.close() + + print "Finished creating python file %s containing the dicom dictionary" % pydict_filename + print "Wrote %d tags" % (len(main_attributes)+len(mask_attributes)) diff -Nru pydicom-0.9.8/source/generate_dict/_dicom_dict.py pydicom-0.9.9/source/generate_dict/_dicom_dict.py --- pydicom-0.9.8/source/generate_dict/_dicom_dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/_dicom_dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,3656 @@ +# _dicom_dict.py +"""DICOM data dictionary auto-generated by csv2dict2011.py""" +from __future__ import absolute_import + +DicomDictionary = { + 0x00000000: ('UL', '1', "Command Group Length", '', 'CommandGroupLength'), + 0x00000001: ('UL', '1', "Command Length to End", 'Retired', 'CommandLengthToEnd'), + 0x00000002: ('UI', '1', "Affected SOP Class UID", '', 'AffectedSOPClassUID'), + 0x00000003: ('UI', '1', "Requested SOP Class UID", '', 'RequestedSOPClassUID'), + 0x00000010: ('SH', '1', "Command Recognition Code", 'Retired', 'CommandRecognitionCode'), + 0x00000100: ('US', '1', "Command Field", '', 'CommandField'), + 0x00000110: ('US', '1', "Message ID", '', 'MessageID'), + 0x00000120: ('US', '1', "Message ID Being Responded To", '', 'MessageIDBeingRespondedTo'), + 0x00000200: ('AE', '1', "Initiator", 'Retired', 'Initiator'), + 0x00000300: ('AE', '1', "Receiver", 'Retired', 'Receiver'), + 0x00000400: ('AE', '1', "Find Location", 'Retired', 'FindLocation'), + 0x00000600: ('AE', '1', "Move Destination", '', 'MoveDestination'), + 0x00000700: ('US', '1', "Priority", '', 'Priority'), + 0x00000800: ('US', '1', "Command Data Set Type", '', 'CommandDataSetType'), + 0x00000850: ('US', '1', "Number of Matches", 'Retired', 'NumberOfMatches'), + 0x00000860: ('US', '1', "Response Sequence Number", 'Retired', 'ResponseSequenceNumber'), + 0x00000900: ('US', '1', "Status", '', 'Status'), + 0x00000901: ('AT', '1-n', "Offending Element", '', 'OffendingElement'), + 0x00000902: ('LO', '1', "Error Comment", '', 'ErrorComment'), + 0x00000903: ('US', '1', "Error ID", '', 'ErrorID'), + 0x00001000: ('UI', '1', "Affected SOP Instance UID", '', 'AffectedSOPInstanceUID'), + 0x00001001: ('UI', '1', "Requested SOP Instance UID", '', 'RequestedSOPInstanceUID'), + 0x00001002: ('US', '1', "Event Type ID", '', 'EventTypeID'), + 0x00001005: ('AT', '1-n', "Attribute Identifier List", '', 'AttributeIdentifierList'), + 0x00001008: ('US', '1', "Action Type ID", '', 'ActionTypeID'), + 0x00001020: ('US', '1', "Number of Remaining Sub-operations", '', 'NumberOfRemainingSuboperations'), + 0x00001021: ('US', '1', "Number of Completed Sub-operations", '', 'NumberOfCompletedSuboperations'), + 0x00001022: ('US', '1', "Number of Failed Sub-operations", '', 'NumberOfFailedSuboperations'), + 0x00001023: ('US', '1', "Number of Warning Sub-operations", '', 'NumberOfWarningSuboperations'), + 0x00001030: ('AE', '1', "Move Originator Application Entity Title", '', 'MoveOriginatorApplicationEntityTitle'), + 0x00001031: ('US', '1', "Move Originator Message ID", '', 'MoveOriginatorMessageID'), + 0x00004000: ('LT', '1', "Dialog Receiver", 'Retired', 'DialogReceiver'), + 0x00004010: ('LT', '1', "Terminal Type", 'Retired', 'TerminalType'), + 0x00005010: ('SH', '1', "Message Set ID", 'Retired', 'MessageSetID'), + 0x00005020: ('SH', '1', "End Message ID", 'Retired', 'EndMessageID'), + 0x00005110: ('LT', '1', "Display Format", 'Retired', 'DisplayFormat'), + 0x00005120: ('LT', '1', "Page Position ID", 'Retired', 'PagePositionID'), + 0x00005130: ('CS', '1', "Text Format ID", 'Retired', 'TextFormatID'), + 0x00005140: ('CS', '1', "Normal/Reverse", 'Retired', 'NormalReverse'), + 0x00005150: ('CS', '1', "Add Gray Scale", 'Retired', 'AddGrayScale'), + 0x00005160: ('CS', '1', "Borders", 'Retired', 'Borders'), + 0x00005170: ('IS', '1', "Copies", 'Retired', 'Copies'), + 0x00005180: ('CS', '1', "Command Magnification Type", 'Retired', 'CommandMagnificationType'), + 0x00005190: ('CS', '1', "Erase", 'Retired', 'Erase'), + 0x000051A0: ('CS', '1', "Print", 'Retired', 'Print'), + 0x000051B0: ('US', '1-n', "Overlays", 'Retired', 'Overlays'), + 0x00020000: ('UL', '1', "File Meta Information Group Length", '', 'FileMetaInformationGroupLength'), + 0x00020001: ('OB', '1', "File Meta Information Version", '', 'FileMetaInformationVersion'), + 0x00020002: ('UI', '1', "Media Storage SOP Class UID", '', 'MediaStorageSOPClassUID'), + 0x00020003: ('UI', '1', "Media Storage SOP Instance UID", '', 'MediaStorageSOPInstanceUID'), + 0x00020010: ('UI', '1', "Transfer Syntax UID", '', 'TransferSyntaxUID'), + 0x00020012: ('UI', '1', "Implementation Class UID", '', 'ImplementationClassUID'), + 0x00020013: ('SH', '1', "Implementation Version Name", '', 'ImplementationVersionName'), + 0x00020016: ('AE', '1', "Source Application Entity Title", '', 'SourceApplicationEntityTitle'), + 0x00020100: ('UI', '1', "Private Information Creator UID", '', 'PrivateInformationCreatorUID'), + 0x00020102: ('OB', '1', "Private Information", '', 'PrivateInformation'), + 0x00041130: ('CS', '1', "File-set ID", '', 'FileSetID'), + 0x00041141: ('CS', '1-8', "File-set Descriptor File ID", '', 'FileSetDescriptorFileID'), + 0x00041142: ('CS', '1', "Specific Character Set of File-set Descriptor File", '', 'SpecificCharacterSetOfFileSetDescriptorFile'), + 0x00041200: ('UL', '1', "Offset of the First Directory Record of the Root Directory Entity", '', 'OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity'), + 0x00041202: ('UL', '1', "Offset of the Last Directory Record of the Root Directory Entity", '', 'OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity'), + 0x00041212: ('US', '1', "File-set Consistency Flag", '', 'FileSetConsistencyFlag'), + 0x00041220: ('SQ', '1', "Directory Record Sequence", '', 'DirectoryRecordSequence'), + 0x00041400: ('UL', '1', "Offset of the Next Directory Record", '', 'OffsetOfTheNextDirectoryRecord'), + 0x00041410: ('US', '1', "Record In-use Flag", '', 'RecordInUseFlag'), + 0x00041420: ('UL', '1', "Offset of Referenced Lower-Level Directory Entity", '', 'OffsetOfReferencedLowerLevelDirectoryEntity'), + 0x00041430: ('CS', '1', "Directory Record Type", '', 'DirectoryRecordType'), + 0x00041432: ('UI', '1', "Private Record UID", '', 'PrivateRecordUID'), + 0x00041500: ('CS', '1-8', "Referenced File ID", '', 'ReferencedFileID'), + 0x00041504: ('UL', '1', "MRDR Directory Record Offset", 'Retired', 'MRDRDirectoryRecordOffset'), + 0x00041510: ('UI', '1', "Referenced SOP Class UID in File", '', 'ReferencedSOPClassUIDInFile'), + 0x00041511: ('UI', '1', "Referenced SOP Instance UID in File", '', 'ReferencedSOPInstanceUIDInFile'), + 0x00041512: ('UI', '1', "Referenced Transfer Syntax UID in File", '', 'ReferencedTransferSyntaxUIDInFile'), + 0x0004151A: ('UI', '1-n', "Referenced Related General SOP Class UID in File", '', 'ReferencedRelatedGeneralSOPClassUIDInFile'), + 0x00041600: ('UL', '1', "Number of References", 'Retired', 'NumberOfReferences'), + 0x00080001: ('UL', '1', "Length to End", 'Retired', 'LengthToEnd'), + 0x00080005: ('CS', '1-n', "Specific Character Set", '', 'SpecificCharacterSet'), + 0x00080006: ('SQ', '1', "Language Code Sequence", '', 'LanguageCodeSequence'), + 0x00080008: ('CS', '2-n', "Image Type", '', 'ImageType'), + 0x00080010: ('SH', '1', "Recognition Code", 'Retired', 'RecognitionCode'), + 0x00080012: ('DA', '1', "Instance Creation Date", '', 'InstanceCreationDate'), + 0x00080013: ('TM', '1', "Instance Creation Time", '', 'InstanceCreationTime'), + 0x00080014: ('UI', '1', "Instance Creator UID", '', 'InstanceCreatorUID'), + 0x00080016: ('UI', '1', "SOP Class UID", '', 'SOPClassUID'), + 0x00080018: ('UI', '1', "SOP Instance UID", '', 'SOPInstanceUID'), + 0x0008001A: ('UI', '1-n', "Related General SOP Class UID", '', 'RelatedGeneralSOPClassUID'), + 0x0008001B: ('UI', '1', "Original Specialized SOP Class UID", '', 'OriginalSpecializedSOPClassUID'), + 0x00080020: ('DA', '1', "Study Date", '', 'StudyDate'), + 0x00080021: ('DA', '1', "Series Date", '', 'SeriesDate'), + 0x00080022: ('DA', '1', "Acquisition Date", '', 'AcquisitionDate'), + 0x00080023: ('DA', '1', "Content Date", '', 'ContentDate'), + 0x00080024: ('DA', '1', "Overlay Date", 'Retired', 'OverlayDate'), + 0x00080025: ('DA', '1', "Curve Date", 'Retired', 'CurveDate'), + 0x0008002A: ('DT', '1', "Acquisition DateTime", '', 'AcquisitionDateTime'), + 0x00080030: ('TM', '1', "Study Time", '', 'StudyTime'), + 0x00080031: ('TM', '1', "Series Time", '', 'SeriesTime'), + 0x00080032: ('TM', '1', "Acquisition Time", '', 'AcquisitionTime'), + 0x00080033: ('TM', '1', "Content Time", '', 'ContentTime'), + 0x00080034: ('TM', '1', "Overlay Time", 'Retired', 'OverlayTime'), + 0x00080035: ('TM', '1', "Curve Time", 'Retired', 'CurveTime'), + 0x00080040: ('US', '1', "Data Set Type", 'Retired', 'DataSetType'), + 0x00080041: ('LO', '1', "Data Set Subtype", 'Retired', 'DataSetSubtype'), + 0x00080042: ('CS', '1', "Nuclear Medicine Series Type", 'Retired', 'NuclearMedicineSeriesType'), + 0x00080050: ('SH', '1', "Accession Number", '', 'AccessionNumber'), + 0x00080051: ('SQ', '1', "Issuer of Accession Number Sequence", '', 'IssuerOfAccessionNumberSequence'), + 0x00080052: ('CS', '1', "Query/Retrieve Level", '', 'QueryRetrieveLevel'), + 0x00080054: ('AE', '1-n', "Retrieve AE Title", '', 'RetrieveAETitle'), + 0x00080056: ('CS', '1', "Instance Availability", '', 'InstanceAvailability'), + 0x00080058: ('UI', '1-n', "Failed SOP Instance UID List", '', 'FailedSOPInstanceUIDList'), + 0x00080060: ('CS', '1', "Modality", '', 'Modality'), + 0x00080061: ('CS', '1-n', "Modalities in Study", '', 'ModalitiesInStudy'), + 0x00080062: ('UI', '1-n', "SOP Classes in Study", '', 'SOPClassesInStudy'), + 0x00080064: ('CS', '1', "Conversion Type", '', 'ConversionType'), + 0x00080068: ('CS', '1', "Presentation Intent Type", '', 'PresentationIntentType'), + 0x00080070: ('LO', '1', "Manufacturer", '', 'Manufacturer'), + 0x00080080: ('LO', '1', "Institution Name", '', 'InstitutionName'), + 0x00080081: ('ST', '1', "Institution Address", '', 'InstitutionAddress'), + 0x00080082: ('SQ', '1', "Institution Code Sequence", '', 'InstitutionCodeSequence'), + 0x00080090: ('PN', '1', "Referring Physician's Name", '', 'ReferringPhysicianName'), + 0x00080092: ('ST', '1', "Referring Physician's Address", '', 'ReferringPhysicianAddress'), + 0x00080094: ('SH', '1-n', "Referring Physician's Telephone Numbers", '', 'ReferringPhysicianTelephoneNumbers'), + 0x00080096: ('SQ', '1', "Referring Physician Identification Sequence", '', 'ReferringPhysicianIdentificationSequence'), + 0x00080100: ('SH', '1', "Code Value", '', 'CodeValue'), + 0x00080102: ('SH', '1', "Coding Scheme Designator", '', 'CodingSchemeDesignator'), + 0x00080103: ('SH', '1', "Coding Scheme Version", '', 'CodingSchemeVersion'), + 0x00080104: ('LO', '1', "Code Meaning", '', 'CodeMeaning'), + 0x00080105: ('CS', '1', "Mapping Resource", '', 'MappingResource'), + 0x00080106: ('DT', '1', "Context Group Version", '', 'ContextGroupVersion'), + 0x00080107: ('DT', '1', "Context Group Local Version", '', 'ContextGroupLocalVersion'), + 0x0008010B: ('CS', '1', "Context Group Extension Flag", '', 'ContextGroupExtensionFlag'), + 0x0008010C: ('UI', '1', "Coding Scheme UID", '', 'CodingSchemeUID'), + 0x0008010D: ('UI', '1', "Context Group Extension Creator UID", '', 'ContextGroupExtensionCreatorUID'), + 0x0008010F: ('CS', '1', "Context Identifier", '', 'ContextIdentifier'), + 0x00080110: ('SQ', '1', "Coding Scheme Identification Sequence", '', 'CodingSchemeIdentificationSequence'), + 0x00080112: ('LO', '1', "Coding Scheme Registry", '', 'CodingSchemeRegistry'), + 0x00080114: ('ST', '1', "Coding Scheme External ID", '', 'CodingSchemeExternalID'), + 0x00080115: ('ST', '1', "Coding Scheme Name", '', 'CodingSchemeName'), + 0x00080116: ('ST', '1', "Coding Scheme Responsible Organization", '', 'CodingSchemeResponsibleOrganization'), + 0x00080117: ('UI', '1', "Context UID", '', 'ContextUID'), + 0x00080201: ('SH', '1', "Timezone Offset From UTC", '', 'TimezoneOffsetFromUTC'), + 0x00081000: ('AE', '1', "Network ID", 'Retired', 'NetworkID'), + 0x00081010: ('SH', '1', "Station Name", '', 'StationName'), + 0x00081030: ('LO', '1', "Study Description", '', 'StudyDescription'), + 0x00081032: ('SQ', '1', "Procedure Code Sequence", '', 'ProcedureCodeSequence'), + 0x0008103E: ('LO', '1', "Series Description", '', 'SeriesDescription'), + 0x0008103F: ('SQ', '1', "Series Description Code Sequence", '', 'SeriesDescriptionCodeSequence'), + 0x00081040: ('LO', '1', "Institutional Department Name", '', 'InstitutionalDepartmentName'), + 0x00081048: ('PN', '1-n', "Physician(s) of Record", '', 'PhysiciansOfRecord'), + 0x00081049: ('SQ', '1', "Physician(s) of Record Identification Sequence", '', 'PhysiciansOfRecordIdentificationSequence'), + 0x00081050: ('PN', '1-n', "Performing Physician's Name", '', 'PerformingPhysicianName'), + 0x00081052: ('SQ', '1', "Performing Physician Identification Sequence", '', 'PerformingPhysicianIdentificationSequence'), + 0x00081060: ('PN', '1-n', "Name of Physician(s) Reading Study", '', 'NameOfPhysiciansReadingStudy'), + 0x00081062: ('SQ', '1', "Physician(s) Reading Study Identification Sequence", '', 'PhysiciansReadingStudyIdentificationSequence'), + 0x00081070: ('PN', '1-n', "Operators' Name", '', 'OperatorsName'), + 0x00081072: ('SQ', '1', "Operator Identification Sequence", '', 'OperatorIdentificationSequence'), + 0x00081080: ('LO', '1-n', "Admitting Diagnoses Description", '', 'AdmittingDiagnosesDescription'), + 0x00081084: ('SQ', '1', "Admitting Diagnoses Code Sequence", '', 'AdmittingDiagnosesCodeSequence'), + 0x00081090: ('LO', '1', "Manufacturer's Model Name", '', 'ManufacturerModelName'), + 0x00081100: ('SQ', '1', "Referenced Results Sequence", 'Retired', 'ReferencedResultsSequence'), + 0x00081110: ('SQ', '1', "Referenced Study Sequence", '', 'ReferencedStudySequence'), + 0x00081111: ('SQ', '1', "Referenced Performed Procedure Step Sequence", '', 'ReferencedPerformedProcedureStepSequence'), + 0x00081115: ('SQ', '1', "Referenced Series Sequence", '', 'ReferencedSeriesSequence'), + 0x00081120: ('SQ', '1', "Referenced Patient Sequence", '', 'ReferencedPatientSequence'), + 0x00081125: ('SQ', '1', "Referenced Visit Sequence", '', 'ReferencedVisitSequence'), + 0x00081130: ('SQ', '1', "Referenced Overlay Sequence", 'Retired', 'ReferencedOverlaySequence'), + 0x00081134: ('SQ', '1', "Referenced Stereometric Instance Sequence", '', 'ReferencedStereometricInstanceSequence'), + 0x0008113A: ('SQ', '1', "Referenced Waveform Sequence", '', 'ReferencedWaveformSequence'), + 0x00081140: ('SQ', '1', "Referenced Image Sequence", '', 'ReferencedImageSequence'), + 0x00081145: ('SQ', '1', "Referenced Curve Sequence", 'Retired', 'ReferencedCurveSequence'), + 0x0008114A: ('SQ', '1', "Referenced Instance Sequence", '', 'ReferencedInstanceSequence'), + 0x0008114B: ('SQ', '1', "Referenced Real World Value Mapping Instance Sequence", '', 'ReferencedRealWorldValueMappingInstanceSequence'), + 0x00081150: ('UI', '1', "Referenced SOP Class UID", '', 'ReferencedSOPClassUID'), + 0x00081155: ('UI', '1', "Referenced SOP Instance UID", '', 'ReferencedSOPInstanceUID'), + 0x0008115A: ('UI', '1-n', "SOP Classes Supported", '', 'SOPClassesSupported'), + 0x00081160: ('IS', '1-n', "Referenced Frame Number", '', 'ReferencedFrameNumber'), + 0x00081161: ('UL', '1-n', "Simple Frame List", '', 'SimpleFrameList'), + 0x00081162: ('UL', '3-3n', "Calculated Frame List", '', 'CalculatedFrameList'), + 0x00081163: ('FD', '2', "Time Range", '', 'TimeRange'), + 0x00081164: ('SQ', '1', "Frame Extraction Sequence", '', 'FrameExtractionSequence'), + 0x00081167: ('UI', '1', "Multi-Frame Source SOP Instance UID", '', 'MultiFrameSourceSOPInstanceUID'), + 0x00081195: ('UI', '1', "Transaction UID", '', 'TransactionUID'), + 0x00081197: ('US', '1', "Failure Reason", '', 'FailureReason'), + 0x00081198: ('SQ', '1', "Failed SOP Sequence", '', 'FailedSOPSequence'), + 0x00081199: ('SQ', '1', "Referenced SOP Sequence", '', 'ReferencedSOPSequence'), + 0x00081200: ('SQ', '1', "Studies Containing Other Referenced Instances Sequence", '', 'StudiesContainingOtherReferencedInstancesSequence'), + 0x00081250: ('SQ', '1', "Related Series Sequence", '', 'RelatedSeriesSequence'), + 0x00082110: ('CS', '1', "Lossy Image Compression (Retired)", 'Retired', 'LossyImageCompressionRetired'), + 0x00082111: ('ST', '1', "Derivation Description", '', 'DerivationDescription'), + 0x00082112: ('SQ', '1', "Source Image Sequence", '', 'SourceImageSequence'), + 0x00082120: ('SH', '1', "Stage Name", '', 'StageName'), + 0x00082122: ('IS', '1', "Stage Number", '', 'StageNumber'), + 0x00082124: ('IS', '1', "Number of Stages", '', 'NumberOfStages'), + 0x00082127: ('SH', '1', "View Name", '', 'ViewName'), + 0x00082128: ('IS', '1', "View Number", '', 'ViewNumber'), + 0x00082129: ('IS', '1', "Number of Event Timers", '', 'NumberOfEventTimers'), + 0x0008212A: ('IS', '1', "Number of Views in Stage", '', 'NumberOfViewsInStage'), + 0x00082130: ('DS', '1-n', "Event Elapsed Time(s)", '', 'EventElapsedTimes'), + 0x00082132: ('LO', '1-n', "Event Timer Name(s)", '', 'EventTimerNames'), + 0x00082133: ('SQ', '1', "Event Timer Sequence", '', 'EventTimerSequence'), + 0x00082134: ('FD', '1', "Event Time Offset", '', 'EventTimeOffset'), + 0x00082135: ('SQ', '1', "Event Code Sequence", '', 'EventCodeSequence'), + 0x00082142: ('IS', '1', "Start Trim", '', 'StartTrim'), + 0x00082143: ('IS', '1', "Stop Trim", '', 'StopTrim'), + 0x00082144: ('IS', '1', "Recommended Display Frame Rate", '', 'RecommendedDisplayFrameRate'), + 0x00082200: ('CS', '1', "Transducer Position", 'Retired', 'TransducerPosition'), + 0x00082204: ('CS', '1', "Transducer Orientation", 'Retired', 'TransducerOrientation'), + 0x00082208: ('CS', '1', "Anatomic Structure", 'Retired', 'AnatomicStructure'), + 0x00082218: ('SQ', '1', "Anatomic Region Sequence", '', 'AnatomicRegionSequence'), + 0x00082220: ('SQ', '1', "Anatomic Region Modifier Sequence", '', 'AnatomicRegionModifierSequence'), + 0x00082228: ('SQ', '1', "Primary Anatomic Structure Sequence", '', 'PrimaryAnatomicStructureSequence'), + 0x00082229: ('SQ', '1', "Anatomic Structure, Space or Region Sequence", '', 'AnatomicStructureSpaceOrRegionSequence'), + 0x00082230: ('SQ', '1', "Primary Anatomic Structure Modifier Sequence", '', 'PrimaryAnatomicStructureModifierSequence'), + 0x00082240: ('SQ', '1', "Transducer Position Sequence", 'Retired', 'TransducerPositionSequence'), + 0x00082242: ('SQ', '1', "Transducer Position Modifier Sequence", 'Retired', 'TransducerPositionModifierSequence'), + 0x00082244: ('SQ', '1', "Transducer Orientation Sequence", 'Retired', 'TransducerOrientationSequence'), + 0x00082246: ('SQ', '1', "Transducer Orientation Modifier Sequence", 'Retired', 'TransducerOrientationModifierSequence'), + 0x00082251: ('SQ', '1', "Anatomic Structure Space Or Region Code Sequence (Trial)", 'Retired', 'AnatomicStructureSpaceOrRegionCodeSequenceTrial'), + 0x00082253: ('SQ', '1', "Anatomic Portal Of Entrance Code Sequence (Trial)", 'Retired', 'AnatomicPortalOfEntranceCodeSequenceTrial'), + 0x00082255: ('SQ', '1', "Anatomic Approach Direction Code Sequence (Trial)", 'Retired', 'AnatomicApproachDirectionCodeSequenceTrial'), + 0x00082256: ('ST', '1', "Anatomic Perspective Description (Trial)", 'Retired', 'AnatomicPerspectiveDescriptionTrial'), + 0x00082257: ('SQ', '1', "Anatomic Perspective Code Sequence (Trial)", 'Retired', 'AnatomicPerspectiveCodeSequenceTrial'), + 0x00082258: ('ST', '1', "Anatomic Location Of Examining Instrument Description (Trial)", 'Retired', 'AnatomicLocationOfExaminingInstrumentDescriptionTrial'), + 0x00082259: ('SQ', '1', "Anatomic Location Of Examining Instrument Code Sequence (Trial)", 'Retired', 'AnatomicLocationOfExaminingInstrumentCodeSequenceTrial'), + 0x0008225A: ('SQ', '1', "Anatomic Structure Space Or Region Modifier Code Sequence (Trial)", 'Retired', 'AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial'), + 0x0008225C: ('SQ', '1', "OnAxis Background Anatomic Structure Code Sequence (Trial)", 'Retired', 'OnAxisBackgroundAnatomicStructureCodeSequenceTrial'), + 0x00083001: ('SQ', '1', "Alternate Representation Sequence", '', 'AlternateRepresentationSequence'), + 0x00083010: ('UI', '1', "Irradiation Event UID", '', 'IrradiationEventUID'), + 0x00084000: ('LT', '1', "Identifying Comments", 'Retired', 'IdentifyingComments'), + 0x00089007: ('CS', '4', "Frame Type", '', 'FrameType'), + 0x00089092: ('SQ', '1', "Referenced Image Evidence Sequence", '', 'ReferencedImageEvidenceSequence'), + 0x00089121: ('SQ', '1', "Referenced Raw Data Sequence", '', 'ReferencedRawDataSequence'), + 0x00089123: ('UI', '1', "Creator-Version UID", '', 'CreatorVersionUID'), + 0x00089124: ('SQ', '1', "Derivation Image Sequence", '', 'DerivationImageSequence'), + 0x00089154: ('SQ', '1', "Source Image Evidence Sequence", '', 'SourceImageEvidenceSequence'), + 0x00089205: ('CS', '1', "Pixel Presentation", '', 'PixelPresentation'), + 0x00089206: ('CS', '1', "Volumetric Properties", '', 'VolumetricProperties'), + 0x00089207: ('CS', '1', "Volume Based Calculation Technique", '', 'VolumeBasedCalculationTechnique'), + 0x00089208: ('CS', '1', "Complex Image Component", '', 'ComplexImageComponent'), + 0x00089209: ('CS', '1', "Acquisition Contrast", '', 'AcquisitionContrast'), + 0x00089215: ('SQ', '1', "Derivation Code Sequence", '', 'DerivationCodeSequence'), + 0x00089237: ('SQ', '1', "Referenced Presentation State Sequence", '', 'ReferencedPresentationStateSequence'), + 0x00089410: ('SQ', '1', "Referenced Other Plane Sequence", '', 'ReferencedOtherPlaneSequence'), + 0x00089458: ('SQ', '1', "Frame Display Sequence", '', 'FrameDisplaySequence'), + 0x00089459: ('FL', '1', "Recommended Display Frame Rate in Float", '', 'RecommendedDisplayFrameRateInFloat'), + 0x00089460: ('CS', '1', "Skip Frame Range Flag", '', 'SkipFrameRangeFlag'), + 0x00100010: ('PN', '1', "Patient's Name", '', 'PatientName'), + 0x00100020: ('LO', '1', "Patient ID", '', 'PatientID'), + 0x00100021: ('LO', '1', "Issuer of Patient ID", '', 'IssuerOfPatientID'), + 0x00100022: ('CS', '1', "Type of Patient ID", '', 'TypeOfPatientID'), + 0x00100024: ('SQ', '1', "Issuer of Patient ID Qualifiers Sequence", '', 'IssuerOfPatientIDQualifiersSequence'), + 0x00100030: ('DA', '1', "Patient's Birth Date", '', 'PatientBirthDate'), + 0x00100032: ('TM', '1', "Patient's Birth Time", '', 'PatientBirthTime'), + 0x00100040: ('CS', '1', "Patient's Sex", '', 'PatientSex'), + 0x00100050: ('SQ', '1', "Patient's Insurance Plan Code Sequence", '', 'PatientInsurancePlanCodeSequence'), + 0x00100101: ('SQ', '1', "Patient's Primary Language Code Sequence", '', 'PatientPrimaryLanguageCodeSequence'), + 0x00100102: ('SQ', '1', "Patient's Primary Language Modifier Code Sequence", '', 'PatientPrimaryLanguageModifierCodeSequence'), + 0x00101000: ('LO', '1-n', "Other Patient IDs", '', 'OtherPatientIDs'), + 0x00101001: ('PN', '1-n', "Other Patient Names", '', 'OtherPatientNames'), + 0x00101002: ('SQ', '1', "Other Patient IDs Sequence", '', 'OtherPatientIDsSequence'), + 0x00101005: ('PN', '1', "Patient's Birth Name", '', 'PatientBirthName'), + 0x00101010: ('AS', '1', "Patient's Age", '', 'PatientAge'), + 0x00101020: ('DS', '1', "Patient's Size", '', 'PatientSize'), + 0x00101021: ('SQ', '1', "Patient'Size Code Sequence", '', 'PatientSizeCodeSequence'), + 0x00101030: ('DS', '1', "Patient's Weight", '', 'PatientWeight'), + 0x00101040: ('LO', '1', "Patient's Address", '', 'PatientAddress'), + 0x00101050: ('LO', '1-n', "Insurance Plan Identification", 'Retired', 'InsurancePlanIdentification'), + 0x00101060: ('PN', '1', "Patient's Mother's Birth Name", '', 'PatientMotherBirthName'), + 0x00101080: ('LO', '1', "Military Rank", '', 'MilitaryRank'), + 0x00101081: ('LO', '1', "Branch of Service", '', 'BranchOfService'), + 0x00101090: ('LO', '1', "Medical Record Locator", '', 'MedicalRecordLocator'), + 0x00102000: ('LO', '1-n', "Medical Alerts", '', 'MedicalAlerts'), + 0x00102110: ('LO', '1-n', "Allergies", '', 'Allergies'), + 0x00102150: ('LO', '1', "Country of Residence", '', 'CountryOfResidence'), + 0x00102152: ('LO', '1', "Region of Residence", '', 'RegionOfResidence'), + 0x00102154: ('SH', '1-n', "Patient's Telephone Numbers", '', 'PatientTelephoneNumbers'), + 0x00102160: ('SH', '1', "Ethnic Group", '', 'EthnicGroup'), + 0x00102180: ('SH', '1', "Occupation", '', 'Occupation'), + 0x001021A0: ('CS', '1', "Smoking Status", '', 'SmokingStatus'), + 0x001021B0: ('LT', '1', "Additional Patient History", '', 'AdditionalPatientHistory'), + 0x001021C0: ('US', '1', "Pregnancy Status", '', 'PregnancyStatus'), + 0x001021D0: ('DA', '1', "Last Menstrual Date", '', 'LastMenstrualDate'), + 0x001021F0: ('LO', '1', "Patient's Religious Preference", '', 'PatientReligiousPreference'), + 0x00102201: ('LO', '1', "Patient Species Description", '', 'PatientSpeciesDescription'), + 0x00102202: ('SQ', '1', "Patient Species Code Sequence", '', 'PatientSpeciesCodeSequence'), + 0x00102203: ('CS', '1', "Patient's Sex Neutered", '', 'PatientSexNeutered'), + 0x00102210: ('CS', '1', "Anatomical Orientation Type", '', 'AnatomicalOrientationType'), + 0x00102292: ('LO', '1', "Patient Breed Description", '', 'PatientBreedDescription'), + 0x00102293: ('SQ', '1', "Patient Breed Code Sequence", '', 'PatientBreedCodeSequence'), + 0x00102294: ('SQ', '1', "Breed Registration Sequence", '', 'BreedRegistrationSequence'), + 0x00102295: ('LO', '1', "Breed Registration Number", '', 'BreedRegistrationNumber'), + 0x00102296: ('SQ', '1', "Breed Registry Code Sequence", '', 'BreedRegistryCodeSequence'), + 0x00102297: ('PN', '1', "Responsible Person", '', 'ResponsiblePerson'), + 0x00102298: ('CS', '1', "Responsible Person Role", '', 'ResponsiblePersonRole'), + 0x00102299: ('LO', '1', "Responsible Organization", '', 'ResponsibleOrganization'), + 0x00104000: ('LT', '1', "Patient Comments", '', 'PatientComments'), + 0x00109431: ('FL', '1', "Examined Body Thickness", '', 'ExaminedBodyThickness'), + 0x00120010: ('LO', '1', "Clinical Trial Sponsor Name", '', 'ClinicalTrialSponsorName'), + 0x00120020: ('LO', '1', "Clinical Trial Protocol ID", '', 'ClinicalTrialProtocolID'), + 0x00120021: ('LO', '1', "Clinical Trial Protocol Name", '', 'ClinicalTrialProtocolName'), + 0x00120030: ('LO', '1', "Clinical Trial Site ID", '', 'ClinicalTrialSiteID'), + 0x00120031: ('LO', '1', "Clinical Trial Site Name", '', 'ClinicalTrialSiteName'), + 0x00120040: ('LO', '1', "Clinical Trial Subject ID", '', 'ClinicalTrialSubjectID'), + 0x00120042: ('LO', '1', "Clinical Trial Subject Reading ID", '', 'ClinicalTrialSubjectReadingID'), + 0x00120050: ('LO', '1', "Clinical Trial Time Point ID", '', 'ClinicalTrialTimePointID'), + 0x00120051: ('ST', '1', "Clinical Trial Time Point Description", '', 'ClinicalTrialTimePointDescription'), + 0x00120060: ('LO', '1', "Clinical Trial Coordinating Center Name", '', 'ClinicalTrialCoordinatingCenterName'), + 0x00120062: ('CS', '1', "Patient Identity Removed", '', 'PatientIdentityRemoved'), + 0x00120063: ('LO', '1-n', "De-identification Method", '', 'DeidentificationMethod'), + 0x00120064: ('SQ', '1', "De-identification Method Code Sequence", '', 'DeidentificationMethodCodeSequence'), + 0x00120071: ('LO', '1', "Clinical Trial Series ID", '', 'ClinicalTrialSeriesID'), + 0x00120072: ('LO', '1', "Clinical Trial Series Description", '', 'ClinicalTrialSeriesDescription'), + 0x00120081: ('LO', '1', "Clinical Trial Protocol Ethics Committee Name", '', 'ClinicalTrialProtocolEthicsCommitteeName'), + 0x00120082: ('LO', '1', "Clinical Trial Protocol Ethics Committee Approval Number", '', 'ClinicalTrialProtocolEthicsCommitteeApprovalNumber'), + 0x00120083: ('SQ', '1', "Consent for Clinical Trial Use Sequence", '', 'ConsentForClinicalTrialUseSequence'), + 0x00120084: ('CS', '1', "Distribution Type", '', 'DistributionType'), + 0x00120085: ('CS', '1', "Consent for Distribution Flag", '', 'ConsentForDistributionFlag'), + 0x00140023: ('ST', '1-n', "CAD File Format", '', 'CADFileFormat'), + 0x00140024: ('ST', '1-n', "Component Reference System", '', 'ComponentReferenceSystem'), + 0x00140025: ('ST', '1-n', "Component Manufacturing Procedure", '', 'ComponentManufacturingProcedure'), + 0x00140028: ('ST', '1-n', "Component Manufacturer", '', 'ComponentManufacturer'), + 0x00140030: ('DS', '1-n', "Material Thickness", '', 'MaterialThickness'), + 0x00140032: ('DS', '1-n', "Material Pipe Diameter", '', 'MaterialPipeDiameter'), + 0x00140034: ('DS', '1-n', "Material Isolation Diameter", '', 'MaterialIsolationDiameter'), + 0x00140042: ('ST', '1-n', "Material Grade", '', 'MaterialGrade'), + 0x00140044: ('ST', '1-n', "Material Properties File ID", '', 'MaterialPropertiesFileID'), + 0x00140045: ('ST', '1-n', "Material Properties File Format", '', 'MaterialPropertiesFileFormat'), + 0x00140046: ('LT', '1', "Material Notes", '', 'MaterialNotes'), + 0x00140050: ('CS', '1', "Component Shape", '', 'ComponentShape'), + 0x00140052: ('CS', '1', "Curvature Type", '', 'CurvatureType'), + 0x00140054: ('DS', '1', "Outer Diameter", '', 'OuterDiameter'), + 0x00140056: ('DS', '1', "Inner Diameter", '', 'InnerDiameter'), + 0x00141010: ('ST', '1', "Actual Environmental Conditions", '', 'ActualEnvironmentalConditions'), + 0x00141020: ('DA', '1', "Expiry Date", '', 'ExpiryDate'), + 0x00141040: ('ST', '1', "Environmental Conditions", '', 'EnvironmentalConditions'), + 0x00142002: ('SQ', '1', "Evaluator Sequence", '', 'EvaluatorSequence'), + 0x00142004: ('IS', '1', "Evaluator Number", '', 'EvaluatorNumber'), + 0x00142006: ('PN', '1', "Evaluator Name", '', 'EvaluatorName'), + 0x00142008: ('IS', '1', "Evaluation Attempt", '', 'EvaluationAttempt'), + 0x00142012: ('SQ', '1', "Indication Sequence", '', 'IndicationSequence'), + 0x00142014: ('IS', '1', "Indication Number", '', 'IndicationNumber'), + 0x00142016: ('SH', '1', "Indication Label", '', 'IndicationLabel'), + 0x00142018: ('ST', '1', "Indication Description", '', 'IndicationDescription'), + 0x0014201A: ('CS', '1-n', "Indication Type", '', 'IndicationType'), + 0x0014201C: ('CS', '1', "Indication Disposition", '', 'IndicationDisposition'), + 0x0014201E: ('SQ', '1', "Indication ROI Sequence", '', 'IndicationROISequence'), + 0x00142030: ('SQ', '1', "Indication Physical Property Sequence", '', 'IndicationPhysicalPropertySequence'), + 0x00142032: ('SH', '1', "Property Label", '', 'PropertyLabel'), + 0x00142202: ('IS', '1', "Coordinate System Number of Axes", '', 'CoordinateSystemNumberOfAxes'), + 0x00142204: ('SQ', '1', "Coordinate System Axes Sequence", '', 'CoordinateSystemAxesSequence'), + 0x00142206: ('ST', '1', "Coordinate System Axis Description", '', 'CoordinateSystemAxisDescription'), + 0x00142208: ('CS', '1', "Coordinate System Data Set Mapping", '', 'CoordinateSystemDataSetMapping'), + 0x0014220A: ('IS', '1', "Coordinate System Axis Number", '', 'CoordinateSystemAxisNumber'), + 0x0014220C: ('CS', '1', "Coordinate System Axis Type", '', 'CoordinateSystemAxisType'), + 0x0014220E: ('CS', '1', "Coordinate System Axis Units", '', 'CoordinateSystemAxisUnits'), + 0x00142210: ('OB', '1', "Coordinate System Axis Values", '', 'CoordinateSystemAxisValues'), + 0x00142220: ('SQ', '1', "Coordinate System Transform Sequence", '', 'CoordinateSystemTransformSequence'), + 0x00142222: ('ST', '1', "Transform Description", '', 'TransformDescription'), + 0x00142224: ('IS', '1', "Transform Number of Axes", '', 'TransformNumberOfAxes'), + 0x00142226: ('IS', '1-n', "Transform Order of Axes", '', 'TransformOrderOfAxes'), + 0x00142228: ('CS', '1', "Transformed Axis Units", '', 'TransformedAxisUnits'), + 0x0014222A: ('DS', '1-n', "Coordinate System Transform Rotation and Scale Matrix", '', 'CoordinateSystemTransformRotationAndScaleMatrix'), + 0x0014222C: ('DS', '1-n', "Coordinate System Transform Translation Matrix", '', 'CoordinateSystemTransformTranslationMatrix'), + 0x00143011: ('DS', '1', "Internal Detector Frame Time", '', 'InternalDetectorFrameTime'), + 0x00143012: ('DS', '1', "Number of Frames Integrated", '', 'NumberOfFramesIntegrated'), + 0x00143020: ('SQ', '1', "Detector Temperature Sequence", '', 'DetectorTemperatureSequence'), + 0x00143022: ('DS', '1', "Sensor Name", '', 'SensorName'), + 0x00143024: ('DS', '1', "Horizontal Offset of Sensor", '', 'HorizontalOffsetOfSensor'), + 0x00143026: ('DS', '1', "Vertical Offset of Sensor", '', 'VerticalOffsetOfSensor'), + 0x00143028: ('DS', '1', "Sensor Temperature", '', 'SensorTemperature'), + 0x00143040: ('SQ', '1', "Dark Current Sequence", '', 'DarkCurrentSequence'), + 0x00143050: ('OB or OW', '1', "Dark Current Counts", '', 'DarkCurrentCounts'), + 0x00143060: ('SQ', '1', "Gain Correction Reference Sequence", '', 'GainCorrectionReferenceSequence'), + 0x00143070: ('OB or OW', '1', "Air Counts", '', 'AirCounts'), + 0x00143071: ('DS', '1', "KV Used in Gain Calibration", '', 'KVUsedInGainCalibration'), + 0x00143072: ('DS', '1', "MA Used in Gain Calibration", '', 'MAUsedInGainCalibration'), + 0x00143073: ('DS', '1', "Number of Frames Used for Integration", '', 'NumberOfFramesUsedForIntegration'), + 0x00143074: ('LO', '1', "Filter Material Used in Gain Calibration", '', 'FilterMaterialUsedInGainCalibration'), + 0x00143075: ('DS', '1', "Filter Thickness Used in Gain Calibration", '', 'FilterThicknessUsedInGainCalibration'), + 0x00143076: ('DA', '1', "Date of Gain Calibration", '', 'DateOfGainCalibration'), + 0x00143077: ('TM', '1', "Time of Gain Calibration", '', 'TimeOfGainCalibration'), + 0x00143080: ('OB', '1', "Bad Pixel Image", '', 'BadPixelImage'), + 0x00143099: ('LT', '1', "Calibration Notes", '', 'CalibrationNotes'), + 0x00144002: ('SQ', '1', "Pulser Equipment Sequence", '', 'PulserEquipmentSequence'), + 0x00144004: ('CS', '1', "Pulser Type", '', 'PulserType'), + 0x00144006: ('LT', '1', "Pulser Notes", '', 'PulserNotes'), + 0x00144008: ('SQ', '1', "Receiver Equipment Sequence", '', 'ReceiverEquipmentSequence'), + 0x0014400A: ('CS', '1', "Amplifier Type", '', 'AmplifierType'), + 0x0014400C: ('LT', '1', "Receiver Notes", '', 'ReceiverNotes'), + 0x0014400E: ('SQ', '1', "Pre-Amplifier Equipment Sequence", '', 'PreAmplifierEquipmentSequence'), + 0x0014400F: ('LT', '1', "Pre-Amplifier Notes", '', 'PreAmplifierNotes'), + 0x00144010: ('SQ', '1', "Transmit Transducer Sequence", '', 'TransmitTransducerSequence'), + 0x00144011: ('SQ', '1', "Receive Transducer Sequence", '', 'ReceiveTransducerSequence'), + 0x00144012: ('US', '1', "Number of Elements", '', 'NumberOfElements'), + 0x00144013: ('CS', '1', "Element Shape", '', 'ElementShape'), + 0x00144014: ('DS', '1', "Element Dimension A", '', 'ElementDimensionA'), + 0x00144015: ('DS', '1', "Element Dimension B", '', 'ElementDimensionB'), + 0x00144016: ('DS', '1', "Element Pitch", '', 'ElementPitch'), + 0x00144017: ('DS', '1', "Measured Beam Dimension A", '', 'MeasuredBeamDimensionA'), + 0x00144018: ('DS', '1', "Measured Beam Dimension B", '', 'MeasuredBeamDimensionB'), + 0x00144019: ('DS', '1', "Location of Measured Beam Diameter", '', 'LocationOfMeasuredBeamDiameter'), + 0x0014401A: ('DS', '1', "Nominal Frequency", '', 'NominalFrequency'), + 0x0014401B: ('DS', '1', "Measured Center Frequency", '', 'MeasuredCenterFrequency'), + 0x0014401C: ('DS', '1', "Measured Bandwidth", '', 'MeasuredBandwidth'), + 0x00144020: ('SQ', '1', "Pulser Settings Sequence", '', 'PulserSettingsSequence'), + 0x00144022: ('DS', '1', "Pulse Width", '', 'PulseWidth'), + 0x00144024: ('DS', '1', "Excitation Frequency", '', 'ExcitationFrequency'), + 0x00144026: ('CS', '1', "Modulation Type", '', 'ModulationType'), + 0x00144028: ('DS', '1', "Damping", '', 'Damping'), + 0x00144030: ('SQ', '1', "Receiver Settings Sequence", '', 'ReceiverSettingsSequence'), + 0x00144031: ('DS', '1', "Acquired Soundpath Length", '', 'AcquiredSoundpathLength'), + 0x00144032: ('CS', '1', "Acquisition Compression Type", '', 'AcquisitionCompressionType'), + 0x00144033: ('IS', '1', "Acquisition Sample Size", '', 'AcquisitionSampleSize'), + 0x00144034: ('DS', '1', "Rectifier Smoothing", '', 'RectifierSmoothing'), + 0x00144035: ('SQ', '1', "DAC Sequence", '', 'DACSequence'), + 0x00144036: ('CS', '1', "DAC Type", '', 'DACType'), + 0x00144038: ('DS', '1-n', "DAC Gain Points", '', 'DACGainPoints'), + 0x0014403A: ('DS', '1-n', "DAC Time Points", '', 'DACTimePoints'), + 0x0014403C: ('DS', '1-n', "DAC Amplitude", '', 'DACAmplitude'), + 0x00144040: ('SQ', '1', "Pre-Amplifier Settings Sequence", '', 'PreAmplifierSettingsSequence'), + 0x00144050: ('SQ', '1', "Transmit Transducer Settings Sequence", '', 'TransmitTransducerSettingsSequence'), + 0x00144051: ('SQ', '1', "Receive Transducer Settings Sequence", '', 'ReceiveTransducerSettingsSequence'), + 0x00144052: ('DS', '1', "Incident Angle", '', 'IncidentAngle'), + 0x00144054: ('ST', '1', "Coupling Technique", '', 'CouplingTechnique'), + 0x00144056: ('ST', '1', "Coupling Medium", '', 'CouplingMedium'), + 0x00144057: ('DS', '1', "Coupling Velocity", '', 'CouplingVelocity'), + 0x00144058: ('DS', '1', "Crystal Center Location X", '', 'CrystalCenterLocationX'), + 0x00144059: ('DS', '1', "Crystal Center Location Z", '', 'CrystalCenterLocationZ'), + 0x0014405A: ('DS', '1', "Sound Path Length", '', 'SoundPathLength'), + 0x0014405C: ('ST', '1', "Delay Law Identifier", '', 'DelayLawIdentifier'), + 0x00144060: ('SQ', '1', "Gate Settings Sequence", '', 'GateSettingsSequence'), + 0x00144062: ('DS', '1', "Gate Threshold", '', 'GateThreshold'), + 0x00144064: ('DS', '1', "Velocity of Sound", '', 'VelocityOfSound'), + 0x00144070: ('SQ', '1', "Calibration Settings Sequence", '', 'CalibrationSettingsSequence'), + 0x00144072: ('ST', '1', "Calibration Procedure", '', 'CalibrationProcedure'), + 0x00144074: ('SH', '1', "Procedure Version", '', 'ProcedureVersion'), + 0x00144076: ('DA', '1', "Procedure Creation Date", '', 'ProcedureCreationDate'), + 0x00144078: ('DA', '1', "Procedure Expiration Date", '', 'ProcedureExpirationDate'), + 0x0014407A: ('DA', '1', "Procedure Last Modified Date", '', 'ProcedureLastModifiedDate'), + 0x0014407C: ('TM', '1-n', "Calibration Time", '', 'CalibrationTime'), + 0x0014407E: ('DA', '1-n', "Calibration Date", '', 'CalibrationDate'), + 0x00145002: ('IS', '1', "LINAC Energy", '', 'LINACEnergy'), + 0x00145004: ('IS', '1', "LINAC Output", '', 'LINACOutput'), + 0x00180010: ('LO', '1', "Contrast/Bolus Agent", '', 'ContrastBolusAgent'), + 0x00180012: ('SQ', '1', "Contrast/Bolus Agent Sequence", '', 'ContrastBolusAgentSequence'), + 0x00180014: ('SQ', '1', "Contrast/Bolus Administration Route Sequence", '', 'ContrastBolusAdministrationRouteSequence'), + 0x00180015: ('CS', '1', "Body Part Examined", '', 'BodyPartExamined'), + 0x00180020: ('CS', '1-n', "Scanning Sequence", '', 'ScanningSequence'), + 0x00180021: ('CS', '1-n', "Sequence Variant", '', 'SequenceVariant'), + 0x00180022: ('CS', '1-n', "Scan Options", '', 'ScanOptions'), + 0x00180023: ('CS', '1', "MR Acquisition Type", '', 'MRAcquisitionType'), + 0x00180024: ('SH', '1', "Sequence Name", '', 'SequenceName'), + 0x00180025: ('CS', '1', "Angio Flag", '', 'AngioFlag'), + 0x00180026: ('SQ', '1', "Intervention Drug Information Sequence", '', 'InterventionDrugInformationSequence'), + 0x00180027: ('TM', '1', "Intervention Drug Stop Time", '', 'InterventionDrugStopTime'), + 0x00180028: ('DS', '1', "Intervention Drug Dose", '', 'InterventionDrugDose'), + 0x00180029: ('SQ', '1', "Intervention Drug Code Sequence", '', 'InterventionDrugCodeSequence'), + 0x0018002A: ('SQ', '1', "Additional Drug Sequence", '', 'AdditionalDrugSequence'), + 0x00180030: ('LO', '1-n', "Radionuclide", 'Retired', 'Radionuclide'), + 0x00180031: ('LO', '1', "Radiopharmaceutical", '', 'Radiopharmaceutical'), + 0x00180032: ('DS', '1', "Energy Window Centerline", 'Retired', 'EnergyWindowCenterline'), + 0x00180033: ('DS', '1-n', "Energy Window Total Width", 'Retired', 'EnergyWindowTotalWidth'), + 0x00180034: ('LO', '1', "Intervention Drug Name", '', 'InterventionDrugName'), + 0x00180035: ('TM', '1', "Intervention Drug Start Time", '', 'InterventionDrugStartTime'), + 0x00180036: ('SQ', '1', "Intervention Sequence", '', 'InterventionSequence'), + 0x00180037: ('CS', '1', "Therapy Type", 'Retired', 'TherapyType'), + 0x00180038: ('CS', '1', "Intervention Status", '', 'InterventionStatus'), + 0x00180039: ('CS', '1', "Therapy Description", 'Retired', 'TherapyDescription'), + 0x0018003A: ('ST', '1', "Intervention Description", '', 'InterventionDescription'), + 0x00180040: ('IS', '1', "Cine Rate", '', 'CineRate'), + 0x00180042: ('CS', '1', "Initial Cine Run State", '', 'InitialCineRunState'), + 0x00180050: ('DS', '1', "Slice Thickness", '', 'SliceThickness'), + 0x00180060: ('DS', '1', "KVP", '', 'KVP'), + 0x00180070: ('IS', '1', "Counts Accumulated", '', 'CountsAccumulated'), + 0x00180071: ('CS', '1', "Acquisition Termination Condition", '', 'AcquisitionTerminationCondition'), + 0x00180072: ('DS', '1', "Effective Duration", '', 'EffectiveDuration'), + 0x00180073: ('CS', '1', "Acquisition Start Condition", '', 'AcquisitionStartCondition'), + 0x00180074: ('IS', '1', "Acquisition Start Condition Data", '', 'AcquisitionStartConditionData'), + 0x00180075: ('IS', '1', "Acquisition Termination Condition Data", '', 'AcquisitionTerminationConditionData'), + 0x00180080: ('DS', '1', "Repetition Time", '', 'RepetitionTime'), + 0x00180081: ('DS', '1', "Echo Time", '', 'EchoTime'), + 0x00180082: ('DS', '1', "Inversion Time", '', 'InversionTime'), + 0x00180083: ('DS', '1', "Number of Averages", '', 'NumberOfAverages'), + 0x00180084: ('DS', '1', "Imaging Frequency", '', 'ImagingFrequency'), + 0x00180085: ('SH', '1', "Imaged Nucleus", '', 'ImagedNucleus'), + 0x00180086: ('IS', '1-n', "Echo Number(s)", '', 'EchoNumbers'), + 0x00180087: ('DS', '1', "Magnetic Field Strength", '', 'MagneticFieldStrength'), + 0x00180088: ('DS', '1', "Spacing Between Slices", '', 'SpacingBetweenSlices'), + 0x00180089: ('IS', '1', "Number of Phase Encoding Steps", '', 'NumberOfPhaseEncodingSteps'), + 0x00180090: ('DS', '1', "Data Collection Diameter", '', 'DataCollectionDiameter'), + 0x00180091: ('IS', '1', "Echo Train Length", '', 'EchoTrainLength'), + 0x00180093: ('DS', '1', "Percent Sampling", '', 'PercentSampling'), + 0x00180094: ('DS', '1', "Percent Phase Field of View", '', 'PercentPhaseFieldOfView'), + 0x00180095: ('DS', '1', "Pixel Bandwidth", '', 'PixelBandwidth'), + 0x00181000: ('LO', '1', "Device Serial Number", '', 'DeviceSerialNumber'), + 0x00181002: ('UI', '1', "Device UID", '', 'DeviceUID'), + 0x00181003: ('LO', '1', "Device ID", '', 'DeviceID'), + 0x00181004: ('LO', '1', "Plate ID", '', 'PlateID'), + 0x00181005: ('LO', '1', "Generator ID", '', 'GeneratorID'), + 0x00181006: ('LO', '1', "Grid ID", '', 'GridID'), + 0x00181007: ('LO', '1', "Cassette ID", '', 'CassetteID'), + 0x00181008: ('LO', '1', "Gantry ID", '', 'GantryID'), + 0x00181010: ('LO', '1', "Secondary Capture Device ID", '', 'SecondaryCaptureDeviceID'), + 0x00181011: ('LO', '1', "Hardcopy Creation Device ID", 'Retired', 'HardcopyCreationDeviceID'), + 0x00181012: ('DA', '1', "Date of Secondary Capture", '', 'DateOfSecondaryCapture'), + 0x00181014: ('TM', '1', "Time of Secondary Capture", '', 'TimeOfSecondaryCapture'), + 0x00181016: ('LO', '1', "Secondary Capture Device Manufacturer", '', 'SecondaryCaptureDeviceManufacturer'), + 0x00181017: ('LO', '1', "Hardcopy Device Manufacturer", 'Retired', 'HardcopyDeviceManufacturer'), + 0x00181018: ('LO', '1', "Secondary Capture Device Manufacturer's Model Name", '', 'SecondaryCaptureDeviceManufacturerModelName'), + 0x00181019: ('LO', '1-n', "Secondary Capture Device Software Versions", '', 'SecondaryCaptureDeviceSoftwareVersions'), + 0x0018101A: ('LO', '1-n', "Hardcopy Device Software Version", 'Retired', 'HardcopyDeviceSoftwareVersion'), + 0x0018101B: ('LO', '1', "Hardcopy Device Manufacturer's Model Name", 'Retired', 'HardcopyDeviceManufacturerModelName'), + 0x00181020: ('LO', '1-n', "Software Version(s)", '', 'SoftwareVersions'), + 0x00181022: ('SH', '1', "Video Image Format Acquired", '', 'VideoImageFormatAcquired'), + 0x00181023: ('LO', '1', "Digital Image Format Acquired", '', 'DigitalImageFormatAcquired'), + 0x00181030: ('LO', '1', "Protocol Name", '', 'ProtocolName'), + 0x00181040: ('LO', '1', "Contrast/Bolus Route", '', 'ContrastBolusRoute'), + 0x00181041: ('DS', '1', "Contrast/Bolus Volume", '', 'ContrastBolusVolume'), + 0x00181042: ('TM', '1', "Contrast/Bolus Start Time", '', 'ContrastBolusStartTime'), + 0x00181043: ('TM', '1', "Contrast/Bolus Stop Time", '', 'ContrastBolusStopTime'), + 0x00181044: ('DS', '1', "Contrast/Bolus Total Dose", '', 'ContrastBolusTotalDose'), + 0x00181045: ('IS', '1', "Syringe Counts", '', 'SyringeCounts'), + 0x00181046: ('DS', '1-n', "Contrast Flow Rate", '', 'ContrastFlowRate'), + 0x00181047: ('DS', '1-n', "Contrast Flow Duration", '', 'ContrastFlowDuration'), + 0x00181048: ('CS', '1', "Contrast/Bolus Ingredient", '', 'ContrastBolusIngredient'), + 0x00181049: ('DS', '1', "Contrast/Bolus Ingredient Concentration", '', 'ContrastBolusIngredientConcentration'), + 0x00181050: ('DS', '1', "Spatial Resolution", '', 'SpatialResolution'), + 0x00181060: ('DS', '1', "Trigger Time", '', 'TriggerTime'), + 0x00181061: ('LO', '1', "Trigger Source or Type", '', 'TriggerSourceOrType'), + 0x00181062: ('IS', '1', "Nominal Interval", '', 'NominalInterval'), + 0x00181063: ('DS', '1', "Frame Time", '', 'FrameTime'), + 0x00181064: ('LO', '1', "Cardiac Framing Type", '', 'CardiacFramingType'), + 0x00181065: ('DS', '1-n', "Frame Time Vector", '', 'FrameTimeVector'), + 0x00181066: ('DS', '1', "Frame Delay", '', 'FrameDelay'), + 0x00181067: ('DS', '1', "Image Trigger Delay", '', 'ImageTriggerDelay'), + 0x00181068: ('DS', '1', "Multiplex Group Time Offset", '', 'MultiplexGroupTimeOffset'), + 0x00181069: ('DS', '1', "Trigger Time Offset", '', 'TriggerTimeOffset'), + 0x0018106A: ('CS', '1', "Synchronization Trigger", '', 'SynchronizationTrigger'), + 0x0018106C: ('US', '2', "Synchronization Channel", '', 'SynchronizationChannel'), + 0x0018106E: ('UL', '1', "Trigger Sample Position", '', 'TriggerSamplePosition'), + 0x00181070: ('LO', '1', "Radiopharmaceutical Route", '', 'RadiopharmaceuticalRoute'), + 0x00181071: ('DS', '1', "Radiopharmaceutical Volume", '', 'RadiopharmaceuticalVolume'), + 0x00181072: ('TM', '1', "Radiopharmaceutical Start Time", '', 'RadiopharmaceuticalStartTime'), + 0x00181073: ('TM', '1', "Radiopharmaceutical Stop Time", '', 'RadiopharmaceuticalStopTime'), + 0x00181074: ('DS', '1', "Radionuclide Total Dose", '', 'RadionuclideTotalDose'), + 0x00181075: ('DS', '1', "Radionuclide Half Life", '', 'RadionuclideHalfLife'), + 0x00181076: ('DS', '1', "Radionuclide Positron Fraction", '', 'RadionuclidePositronFraction'), + 0x00181077: ('DS', '1', "Radiopharmaceutical Specific Activity", '', 'RadiopharmaceuticalSpecificActivity'), + 0x00181078: ('DT', '1', "Radiopharmaceutical Start DateTime", '', 'RadiopharmaceuticalStartDateTime'), + 0x00181079: ('DT', '1', "Radiopharmaceutical Stop DateTime", '', 'RadiopharmaceuticalStopDateTime'), + 0x00181080: ('CS', '1', "Beat Rejection Flag", '', 'BeatRejectionFlag'), + 0x00181081: ('IS', '1', "Low R-R Value", '', 'LowRRValue'), + 0x00181082: ('IS', '1', "High R-R Value", '', 'HighRRValue'), + 0x00181083: ('IS', '1', "Intervals Acquired", '', 'IntervalsAcquired'), + 0x00181084: ('IS', '1', "Intervals Rejected", '', 'IntervalsRejected'), + 0x00181085: ('LO', '1', "PVC Rejection", '', 'PVCRejection'), + 0x00181086: ('IS', '1', "Skip Beats", '', 'SkipBeats'), + 0x00181088: ('IS', '1', "Heart Rate", '', 'HeartRate'), + 0x00181090: ('IS', '1', "Cardiac Number of Images", '', 'CardiacNumberOfImages'), + 0x00181094: ('IS', '1', "Trigger Window", '', 'TriggerWindow'), + 0x00181100: ('DS', '1', "Reconstruction Diameter", '', 'ReconstructionDiameter'), + 0x00181110: ('DS', '1', "Distance Source to Detector", '', 'DistanceSourceToDetector'), + 0x00181111: ('DS', '1', "Distance Source to Patient", '', 'DistanceSourceToPatient'), + 0x00181114: ('DS', '1', "Estimated Radiographic Magnification Factor", '', 'EstimatedRadiographicMagnificationFactor'), + 0x00181120: ('DS', '1', "Gantry/Detector Tilt", '', 'GantryDetectorTilt'), + 0x00181121: ('DS', '1', "Gantry/Detector Slew", '', 'GantryDetectorSlew'), + 0x00181130: ('DS', '1', "Table Height", '', 'TableHeight'), + 0x00181131: ('DS', '1', "Table Traverse", '', 'TableTraverse'), + 0x00181134: ('CS', '1', "Table Motion", '', 'TableMotion'), + 0x00181135: ('DS', '1-n', "Table Vertical Increment", '', 'TableVerticalIncrement'), + 0x00181136: ('DS', '1-n', "Table Lateral Increment", '', 'TableLateralIncrement'), + 0x00181137: ('DS', '1-n', "Table Longitudinal Increment", '', 'TableLongitudinalIncrement'), + 0x00181138: ('DS', '1', "Table Angle", '', 'TableAngle'), + 0x0018113A: ('CS', '1', "Table Type", '', 'TableType'), + 0x00181140: ('CS', '1', "Rotation Direction", '', 'RotationDirection'), + 0x00181141: ('DS', '1', "Angular Position", 'Retired', 'AngularPosition'), + 0x00181142: ('DS', '1-n', "Radial Position", '', 'RadialPosition'), + 0x00181143: ('DS', '1', "Scan Arc", '', 'ScanArc'), + 0x00181144: ('DS', '1', "Angular Step", '', 'AngularStep'), + 0x00181145: ('DS', '1', "Center of Rotation Offset", '', 'CenterOfRotationOffset'), + 0x00181146: ('DS', '1-n', "Rotation Offset", 'Retired', 'RotationOffset'), + 0x00181147: ('CS', '1', "Field of View Shape", '', 'FieldOfViewShape'), + 0x00181149: ('IS', '1-2', "Field of View Dimension(s)", '', 'FieldOfViewDimensions'), + 0x00181150: ('IS', '1', "Exposure Time", '', 'ExposureTime'), + 0x00181151: ('IS', '1', "X-Ray Tube Current", '', 'XRayTubeCurrent'), + 0x00181152: ('IS', '1', "Exposure", '', 'Exposure'), + 0x00181153: ('IS', '1', "Exposure in uAs", '', 'ExposureInuAs'), + 0x00181154: ('DS', '1', "Average Pulse Width", '', 'AveragePulseWidth'), + 0x00181155: ('CS', '1', "Radiation Setting", '', 'RadiationSetting'), + 0x00181156: ('CS', '1', "Rectification Type", '', 'RectificationType'), + 0x0018115A: ('CS', '1', "Radiation Mode", '', 'RadiationMode'), + 0x0018115E: ('DS', '1', "Image and Fluoroscopy Area Dose Product", '', 'ImageAndFluoroscopyAreaDoseProduct'), + 0x00181160: ('SH', '1', "Filter Type", '', 'FilterType'), + 0x00181161: ('LO', '1-n', "Type of Filters", '', 'TypeOfFilters'), + 0x00181162: ('DS', '1', "Intensifier Size", '', 'IntensifierSize'), + 0x00181164: ('DS', '2', "Imager Pixel Spacing", '', 'ImagerPixelSpacing'), + 0x00181166: ('CS', '1-n', "Grid", '', 'Grid'), + 0x00181170: ('IS', '1', "Generator Power", '', 'GeneratorPower'), + 0x00181180: ('SH', '1', "Collimator/grid Name", '', 'CollimatorGridName'), + 0x00181181: ('CS', '1', "Collimator Type", '', 'CollimatorType'), + 0x00181182: ('IS', '1-2', "Focal Distance", '', 'FocalDistance'), + 0x00181183: ('DS', '1-2', "X Focus Center", '', 'XFocusCenter'), + 0x00181184: ('DS', '1-2', "Y Focus Center", '', 'YFocusCenter'), + 0x00181190: ('DS', '1-n', "Focal Spot(s)", '', 'FocalSpots'), + 0x00181191: ('CS', '1', "Anode Target Material", '', 'AnodeTargetMaterial'), + 0x001811A0: ('DS', '1', "Body Part Thickness", '', 'BodyPartThickness'), + 0x001811A2: ('DS', '1', "Compression Force", '', 'CompressionForce'), + 0x00181200: ('DA', '1-n', "Date of Last Calibration", '', 'DateOfLastCalibration'), + 0x00181201: ('TM', '1-n', "Time of Last Calibration", '', 'TimeOfLastCalibration'), + 0x00181210: ('SH', '1-n', "Convolution Kernel", '', 'ConvolutionKernel'), + 0x00181240: ('IS', '1-n', "Upper/Lower Pixel Values", 'Retired', 'UpperLowerPixelValues'), + 0x00181242: ('IS', '1', "Actual Frame Duration", '', 'ActualFrameDuration'), + 0x00181243: ('IS', '1', "Count Rate", '', 'CountRate'), + 0x00181244: ('US', '1', "Preferred Playback Sequencing", '', 'PreferredPlaybackSequencing'), + 0x00181250: ('SH', '1', "Receive Coil Name", '', 'ReceiveCoilName'), + 0x00181251: ('SH', '1', "Transmit Coil Name", '', 'TransmitCoilName'), + 0x00181260: ('SH', '1', "Plate Type", '', 'PlateType'), + 0x00181261: ('LO', '1', "Phosphor Type", '', 'PhosphorType'), + 0x00181300: ('DS', '1', "Scan Velocity", '', 'ScanVelocity'), + 0x00181301: ('CS', '1-n', "Whole Body Technique", '', 'WholeBodyTechnique'), + 0x00181302: ('IS', '1', "Scan Length", '', 'ScanLength'), + 0x00181310: ('US', '4', "Acquisition Matrix", '', 'AcquisitionMatrix'), + 0x00181312: ('CS', '1', "In-plane Phase Encoding Direction", '', 'InPlanePhaseEncodingDirection'), + 0x00181314: ('DS', '1', "Flip Angle", '', 'FlipAngle'), + 0x00181315: ('CS', '1', "Variable Flip Angle Flag", '', 'VariableFlipAngleFlag'), + 0x00181316: ('DS', '1', "SAR", '', 'SAR'), + 0x00181318: ('DS', '1', "dB/dt", '', 'dBdt'), + 0x00181400: ('LO', '1', "Acquisition Device Processing Description", '', 'AcquisitionDeviceProcessingDescription'), + 0x00181401: ('LO', '1', "Acquisition Device Processing Code", '', 'AcquisitionDeviceProcessingCode'), + 0x00181402: ('CS', '1', "Cassette Orientation", '', 'CassetteOrientation'), + 0x00181403: ('CS', '1', "Cassette Size", '', 'CassetteSize'), + 0x00181404: ('US', '1', "Exposures on Plate", '', 'ExposuresOnPlate'), + 0x00181405: ('IS', '1', "Relative X-Ray Exposure", '', 'RelativeXRayExposure'), + 0x00181411: ('DS', '1', "Exposure Index", '', 'ExposureIndex'), + 0x00181412: ('DS', '1', "Target Exposure Index", '', 'TargetExposureIndex'), + 0x00181413: ('DS', '1', "Deviation Index", '', 'DeviationIndex'), + 0x00181450: ('DS', '1', "Column Angulation", '', 'ColumnAngulation'), + 0x00181460: ('DS', '1', "Tomo Layer Height", '', 'TomoLayerHeight'), + 0x00181470: ('DS', '1', "Tomo Angle", '', 'TomoAngle'), + 0x00181480: ('DS', '1', "Tomo Time", '', 'TomoTime'), + 0x00181490: ('CS', '1', "Tomo Type", '', 'TomoType'), + 0x00181491: ('CS', '1', "Tomo Class", '', 'TomoClass'), + 0x00181495: ('IS', '1', "Number of Tomosynthesis Source Images", '', 'NumberOfTomosynthesisSourceImages'), + 0x00181500: ('CS', '1', "Positioner Motion", '', 'PositionerMotion'), + 0x00181508: ('CS', '1', "Positioner Type", '', 'PositionerType'), + 0x00181510: ('DS', '1', "Positioner Primary Angle", '', 'PositionerPrimaryAngle'), + 0x00181511: ('DS', '1', "Positioner Secondary Angle", '', 'PositionerSecondaryAngle'), + 0x00181520: ('DS', '1-n', "Positioner Primary Angle Increment", '', 'PositionerPrimaryAngleIncrement'), + 0x00181521: ('DS', '1-n', "Positioner Secondary Angle Increment", '', 'PositionerSecondaryAngleIncrement'), + 0x00181530: ('DS', '1', "Detector Primary Angle", '', 'DetectorPrimaryAngle'), + 0x00181531: ('DS', '1', "Detector Secondary Angle", '', 'DetectorSecondaryAngle'), + 0x00181600: ('CS', '1-3', "Shutter Shape", '', 'ShutterShape'), + 0x00181602: ('IS', '1', "Shutter Left Vertical Edge", '', 'ShutterLeftVerticalEdge'), + 0x00181604: ('IS', '1', "Shutter Right Vertical Edge", '', 'ShutterRightVerticalEdge'), + 0x00181606: ('IS', '1', "Shutter Upper Horizontal Edge", '', 'ShutterUpperHorizontalEdge'), + 0x00181608: ('IS', '1', "Shutter Lower Horizontal Edge", '', 'ShutterLowerHorizontalEdge'), + 0x00181610: ('IS', '2', "Center of Circular Shutter", '', 'CenterOfCircularShutter'), + 0x00181612: ('IS', '1', "Radius of Circular Shutter", '', 'RadiusOfCircularShutter'), + 0x00181620: ('IS', '2-2n', "Vertices of the Polygonal Shutter", '', 'VerticesOfThePolygonalShutter'), + 0x00181622: ('US', '1', "Shutter Presentation Value", '', 'ShutterPresentationValue'), + 0x00181623: ('US', '1', "Shutter Overlay Group", '', 'ShutterOverlayGroup'), + 0x00181624: ('US', '3', "Shutter Presentation Color CIELab Value", '', 'ShutterPresentationColorCIELabValue'), + 0x00181700: ('CS', '1-3', "Collimator Shape", '', 'CollimatorShape'), + 0x00181702: ('IS', '1', "Collimator Left Vertical Edge", '', 'CollimatorLeftVerticalEdge'), + 0x00181704: ('IS', '1', "Collimator Right Vertical Edge", '', 'CollimatorRightVerticalEdge'), + 0x00181706: ('IS', '1', "Collimator Upper Horizontal Edge", '', 'CollimatorUpperHorizontalEdge'), + 0x00181708: ('IS', '1', "Collimator Lower Horizontal Edge", '', 'CollimatorLowerHorizontalEdge'), + 0x00181710: ('IS', '2', "Center of Circular Collimator", '', 'CenterOfCircularCollimator'), + 0x00181712: ('IS', '1', "Radius of Circular Collimator", '', 'RadiusOfCircularCollimator'), + 0x00181720: ('IS', '2-2n', "Vertices of the Polygonal Collimator", '', 'VerticesOfThePolygonalCollimator'), + 0x00181800: ('CS', '1', "Acquisition Time Synchronized", '', 'AcquisitionTimeSynchronized'), + 0x00181801: ('SH', '1', "Time Source", '', 'TimeSource'), + 0x00181802: ('CS', '1', "Time Distribution Protocol", '', 'TimeDistributionProtocol'), + 0x00181803: ('LO', '1', "NTP Source Address", '', 'NTPSourceAddress'), + 0x00182001: ('IS', '1-n', "Page Number Vector", '', 'PageNumberVector'), + 0x00182002: ('SH', '1-n', "Frame Label Vector", '', 'FrameLabelVector'), + 0x00182003: ('DS', '1-n', "Frame Primary Angle Vector", '', 'FramePrimaryAngleVector'), + 0x00182004: ('DS', '1-n', "Frame Secondary Angle Vector", '', 'FrameSecondaryAngleVector'), + 0x00182005: ('DS', '1-n', "Slice Location Vector", '', 'SliceLocationVector'), + 0x00182006: ('SH', '1-n', "Display Window Label Vector", '', 'DisplayWindowLabelVector'), + 0x00182010: ('DS', '2', "Nominal Scanned Pixel Spacing", '', 'NominalScannedPixelSpacing'), + 0x00182020: ('CS', '1', "Digitizing Device Transport Direction", '', 'DigitizingDeviceTransportDirection'), + 0x00182030: ('DS', '1', "Rotation of Scanned Film", '', 'RotationOfScannedFilm'), + 0x00183100: ('CS', '1', "IVUS Acquisition", '', 'IVUSAcquisition'), + 0x00183101: ('DS', '1', "IVUS Pullback Rate", '', 'IVUSPullbackRate'), + 0x00183102: ('DS', '1', "IVUS Gated Rate", '', 'IVUSGatedRate'), + 0x00183103: ('IS', '1', "IVUS Pullback Start Frame Number", '', 'IVUSPullbackStartFrameNumber'), + 0x00183104: ('IS', '1', "IVUS Pullback Stop Frame Number", '', 'IVUSPullbackStopFrameNumber'), + 0x00183105: ('IS', '1-n', "Lesion Number", '', 'LesionNumber'), + 0x00184000: ('LT', '1', "Acquisition Comments", 'Retired', 'AcquisitionComments'), + 0x00185000: ('SH', '1-n', "Output Power", '', 'OutputPower'), + 0x00185010: ('LO', '1-n', "Transducer Data", '', 'TransducerData'), + 0x00185012: ('DS', '1', "Focus Depth", '', 'FocusDepth'), + 0x00185020: ('LO', '1', "Processing Function", '', 'ProcessingFunction'), + 0x00185021: ('LO', '1', "Postprocessing Function", 'Retired', 'PostprocessingFunction'), + 0x00185022: ('DS', '1', "Mechanical Index", '', 'MechanicalIndex'), + 0x00185024: ('DS', '1', "Bone Thermal Index", '', 'BoneThermalIndex'), + 0x00185026: ('DS', '1', "Cranial Thermal Index", '', 'CranialThermalIndex'), + 0x00185027: ('DS', '1', "Soft Tissue Thermal Index", '', 'SoftTissueThermalIndex'), + 0x00185028: ('DS', '1', "Soft Tissue-focus Thermal Index", '', 'SoftTissueFocusThermalIndex'), + 0x00185029: ('DS', '1', "Soft Tissue-surface Thermal Index", '', 'SoftTissueSurfaceThermalIndex'), + 0x00185030: ('DS', '1', "Dynamic Range", 'Retired', 'DynamicRange'), + 0x00185040: ('DS', '1', "Total Gain", 'Retired', 'TotalGain'), + 0x00185050: ('IS', '1', "Depth of Scan Field", '', 'DepthOfScanField'), + 0x00185100: ('CS', '1', "Patient Position", '', 'PatientPosition'), + 0x00185101: ('CS', '1', "View Position", '', 'ViewPosition'), + 0x00185104: ('SQ', '1', "Projection Eponymous Name Code Sequence", '', 'ProjectionEponymousNameCodeSequence'), + 0x00185210: ('DS', '6', "Image Transformation Matrix", 'Retired', 'ImageTransformationMatrix'), + 0x00185212: ('DS', '3', "Image Translation Vector", 'Retired', 'ImageTranslationVector'), + 0x00186000: ('DS', '1', "Sensitivity", '', 'Sensitivity'), + 0x00186011: ('SQ', '1', "Sequence of Ultrasound Regions", '', 'SequenceOfUltrasoundRegions'), + 0x00186012: ('US', '1', "Region Spatial Format", '', 'RegionSpatialFormat'), + 0x00186014: ('US', '1', "Region Data Type", '', 'RegionDataType'), + 0x00186016: ('UL', '1', "Region Flags", '', 'RegionFlags'), + 0x00186018: ('UL', '1', "Region Location Min X0", '', 'RegionLocationMinX0'), + 0x0018601A: ('UL', '1', "Region Location Min Y0", '', 'RegionLocationMinY0'), + 0x0018601C: ('UL', '1', "Region Location Max X1", '', 'RegionLocationMaxX1'), + 0x0018601E: ('UL', '1', "Region Location Max Y1", '', 'RegionLocationMaxY1'), + 0x00186020: ('SL', '1', "Reference Pixel X0", '', 'ReferencePixelX0'), + 0x00186022: ('SL', '1', "Reference Pixel Y0", '', 'ReferencePixelY0'), + 0x00186024: ('US', '1', "Physical Units X Direction", '', 'PhysicalUnitsXDirection'), + 0x00186026: ('US', '1', "Physical Units Y Direction", '', 'PhysicalUnitsYDirection'), + 0x00186028: ('FD', '1', "Reference Pixel Physical Value X", '', 'ReferencePixelPhysicalValueX'), + 0x0018602A: ('FD', '1', "Reference Pixel Physical Value Y", '', 'ReferencePixelPhysicalValueY'), + 0x0018602C: ('FD', '1', "Physical Delta X", '', 'PhysicalDeltaX'), + 0x0018602E: ('FD', '1', "Physical Delta Y", '', 'PhysicalDeltaY'), + 0x00186030: ('UL', '1', "Transducer Frequency", '', 'TransducerFrequency'), + 0x00186031: ('CS', '1', "Transducer Type", '', 'TransducerType'), + 0x00186032: ('UL', '1', "Pulse Repetition Frequency", '', 'PulseRepetitionFrequency'), + 0x00186034: ('FD', '1', "Doppler Correction Angle", '', 'DopplerCorrectionAngle'), + 0x00186036: ('FD', '1', "Steering Angle", '', 'SteeringAngle'), + 0x00186038: ('UL', '1', "Doppler Sample Volume X Position (Retired)", 'Retired', 'DopplerSampleVolumeXPositionRetired'), + 0x00186039: ('SL', '1', "Doppler Sample Volume X Position", '', 'DopplerSampleVolumeXPosition'), + 0x0018603A: ('UL', '1', "Doppler Sample Volume Y Position (Retired)", 'Retired', 'DopplerSampleVolumeYPositionRetired'), + 0x0018603B: ('SL', '1', "Doppler Sample Volume Y Position", '', 'DopplerSampleVolumeYPosition'), + 0x0018603C: ('UL', '1', "TM-Line Position X0 (Retired)", 'Retired', 'TMLinePositionX0Retired'), + 0x0018603D: ('SL', '1', "TM-Line Position X0", '', 'TMLinePositionX0'), + 0x0018603E: ('UL', '1', "TM-Line Position Y0 (Retired)", 'Retired', 'TMLinePositionY0Retired'), + 0x0018603F: ('SL', '1', "TM-Line Position Y0", '', 'TMLinePositionY0'), + 0x00186040: ('UL', '1', "TM-Line Position X1 (Retired)", 'Retired', 'TMLinePositionX1Retired'), + 0x00186041: ('SL', '1', "TM-Line Position X1", '', 'TMLinePositionX1'), + 0x00186042: ('UL', '1', "TM-Line Position Y1 (Retired)", 'Retired', 'TMLinePositionY1Retired'), + 0x00186043: ('SL', '1', "TM-Line Position Y1", '', 'TMLinePositionY1'), + 0x00186044: ('US', '1', "Pixel Component Organization", '', 'PixelComponentOrganization'), + 0x00186046: ('UL', '1', "Pixel Component Mask", '', 'PixelComponentMask'), + 0x00186048: ('UL', '1', "Pixel Component Range Start", '', 'PixelComponentRangeStart'), + 0x0018604A: ('UL', '1', "Pixel Component Range Stop", '', 'PixelComponentRangeStop'), + 0x0018604C: ('US', '1', "Pixel Component Physical Units", '', 'PixelComponentPhysicalUnits'), + 0x0018604E: ('US', '1', "Pixel Component Data Type", '', 'PixelComponentDataType'), + 0x00186050: ('UL', '1', "Number of Table Break Points", '', 'NumberOfTableBreakPoints'), + 0x00186052: ('UL', '1-n', "Table of X Break Points", '', 'TableOfXBreakPoints'), + 0x00186054: ('FD', '1-n', "Table of Y Break Points", '', 'TableOfYBreakPoints'), + 0x00186056: ('UL', '1', "Number of Table Entries", '', 'NumberOfTableEntries'), + 0x00186058: ('UL', '1-n', "Table of Pixel Values", '', 'TableOfPixelValues'), + 0x0018605A: ('FL', '1-n', "Table of Parameter Values", '', 'TableOfParameterValues'), + 0x00186060: ('FL', '1-n', "R Wave Time Vector", '', 'RWaveTimeVector'), + 0x00187000: ('CS', '1', "Detector Conditions Nominal Flag", '', 'DetectorConditionsNominalFlag'), + 0x00187001: ('DS', '1', "Detector Temperature", '', 'DetectorTemperature'), + 0x00187004: ('CS', '1', "Detector Type", '', 'DetectorType'), + 0x00187005: ('CS', '1', "Detector Configuration", '', 'DetectorConfiguration'), + 0x00187006: ('LT', '1', "Detector Description", '', 'DetectorDescription'), + 0x00187008: ('LT', '1', "Detector Mode", '', 'DetectorMode'), + 0x0018700A: ('SH', '1', "Detector ID", '', 'DetectorID'), + 0x0018700C: ('DA', '1', "Date of Last Detector Calibration", '', 'DateOfLastDetectorCalibration'), + 0x0018700E: ('TM', '1', "Time of Last Detector Calibration", '', 'TimeOfLastDetectorCalibration'), + 0x00187010: ('IS', '1', "Exposures on Detector Since Last Calibration", '', 'ExposuresOnDetectorSinceLastCalibration'), + 0x00187011: ('IS', '1', "Exposures on Detector Since Manufactured", '', 'ExposuresOnDetectorSinceManufactured'), + 0x00187012: ('DS', '1', "Detector Time Since Last Exposure", '', 'DetectorTimeSinceLastExposure'), + 0x00187014: ('DS', '1', "Detector Active Time", '', 'DetectorActiveTime'), + 0x00187016: ('DS', '1', "Detector Activation Offset From Exposure", '', 'DetectorActivationOffsetFromExposure'), + 0x0018701A: ('DS', '2', "Detector Binning", '', 'DetectorBinning'), + 0x00187020: ('DS', '2', "Detector Element Physical Size", '', 'DetectorElementPhysicalSize'), + 0x00187022: ('DS', '2', "Detector Element Spacing", '', 'DetectorElementSpacing'), + 0x00187024: ('CS', '1', "Detector Active Shape", '', 'DetectorActiveShape'), + 0x00187026: ('DS', '1-2', "Detector Active Dimension(s)", '', 'DetectorActiveDimensions'), + 0x00187028: ('DS', '2', "Detector Active Origin", '', 'DetectorActiveOrigin'), + 0x0018702A: ('LO', '1', "Detector Manufacturer Name", '', 'DetectorManufacturerName'), + 0x0018702B: ('LO', '1', "Detector Manufacturer's Model Name", '', 'DetectorManufacturerModelName'), + 0x00187030: ('DS', '2', "Field of View Origin", '', 'FieldOfViewOrigin'), + 0x00187032: ('DS', '1', "Field of View Rotation", '', 'FieldOfViewRotation'), + 0x00187034: ('CS', '1', "Field of View Horizontal Flip", '', 'FieldOfViewHorizontalFlip'), + 0x00187036: ('FL', '2', "Pixel Data Area Origin Relative To FOV", '', 'PixelDataAreaOriginRelativeToFOV'), + 0x00187038: ('FL', '1', "Pixel Data Area Rotation Angle Relative To FOV", '', 'PixelDataAreaRotationAngleRelativeToFOV'), + 0x00187040: ('LT', '1', "Grid Absorbing Material", '', 'GridAbsorbingMaterial'), + 0x00187041: ('LT', '1', "Grid Spacing Material", '', 'GridSpacingMaterial'), + 0x00187042: ('DS', '1', "Grid Thickness", '', 'GridThickness'), + 0x00187044: ('DS', '1', "Grid Pitch", '', 'GridPitch'), + 0x00187046: ('IS', '2', "Grid Aspect Ratio", '', 'GridAspectRatio'), + 0x00187048: ('DS', '1', "Grid Period", '', 'GridPeriod'), + 0x0018704C: ('DS', '1', "Grid Focal Distance", '', 'GridFocalDistance'), + 0x00187050: ('CS', '1-n', "Filter Material", '', 'FilterMaterial'), + 0x00187052: ('DS', '1-n', "Filter Thickness Minimum", '', 'FilterThicknessMinimum'), + 0x00187054: ('DS', '1-n', "Filter Thickness Maximum", '', 'FilterThicknessMaximum'), + 0x00187056: ('FL', '1-n', "Filter Beam Path Length Minimum", '', 'FilterBeamPathLengthMinimum'), + 0x00187058: ('FL', '1-n', "Filter Beam Path Length Maximum", '', 'FilterBeamPathLengthMaximum'), + 0x00187060: ('CS', '1', "Exposure Control Mode", '', 'ExposureControlMode'), + 0x00187062: ('LT', '1', "Exposure Control Mode Description", '', 'ExposureControlModeDescription'), + 0x00187064: ('CS', '1', "Exposure Status", '', 'ExposureStatus'), + 0x00187065: ('DS', '1', "Phototimer Setting", '', 'PhototimerSetting'), + 0x00188150: ('DS', '1', "Exposure Time in uS", '', 'ExposureTimeInuS'), + 0x00188151: ('DS', '1', "X-Ray Tube Current in uA", '', 'XRayTubeCurrentInuA'), + 0x00189004: ('CS', '1', "Content Qualification", '', 'ContentQualification'), + 0x00189005: ('SH', '1', "Pulse Sequence Name", '', 'PulseSequenceName'), + 0x00189006: ('SQ', '1', "MR Imaging Modifier Sequence", '', 'MRImagingModifierSequence'), + 0x00189008: ('CS', '1', "Echo Pulse Sequence", '', 'EchoPulseSequence'), + 0x00189009: ('CS', '1', "Inversion Recovery", '', 'InversionRecovery'), + 0x00189010: ('CS', '1', "Flow Compensation", '', 'FlowCompensation'), + 0x00189011: ('CS', '1', "Multiple Spin Echo", '', 'MultipleSpinEcho'), + 0x00189012: ('CS', '1', "Multi-planar Excitation", '', 'MultiPlanarExcitation'), + 0x00189014: ('CS', '1', "Phase Contrast", '', 'PhaseContrast'), + 0x00189015: ('CS', '1', "Time of Flight Contrast", '', 'TimeOfFlightContrast'), + 0x00189016: ('CS', '1', "Spoiling", '', 'Spoiling'), + 0x00189017: ('CS', '1', "Steady State Pulse Sequence", '', 'SteadyStatePulseSequence'), + 0x00189018: ('CS', '1', "Echo Planar Pulse Sequence", '', 'EchoPlanarPulseSequence'), + 0x00189019: ('FD', '1', "Tag Angle First Axis", '', 'TagAngleFirstAxis'), + 0x00189020: ('CS', '1', "Magnetization Transfer", '', 'MagnetizationTransfer'), + 0x00189021: ('CS', '1', "T2 Preparation", '', 'T2Preparation'), + 0x00189022: ('CS', '1', "Blood Signal Nulling", '', 'BloodSignalNulling'), + 0x00189024: ('CS', '1', "Saturation Recovery", '', 'SaturationRecovery'), + 0x00189025: ('CS', '1', "Spectrally Selected Suppression", '', 'SpectrallySelectedSuppression'), + 0x00189026: ('CS', '1', "Spectrally Selected Excitation", '', 'SpectrallySelectedExcitation'), + 0x00189027: ('CS', '1', "Spatial Pre-saturation", '', 'SpatialPresaturation'), + 0x00189028: ('CS', '1', "Tagging", '', 'Tagging'), + 0x00189029: ('CS', '1', "Oversampling Phase", '', 'OversamplingPhase'), + 0x00189030: ('FD', '1', "Tag Spacing First Dimension", '', 'TagSpacingFirstDimension'), + 0x00189032: ('CS', '1', "Geometry of k-Space Traversal", '', 'GeometryOfKSpaceTraversal'), + 0x00189033: ('CS', '1', "Segmented k-Space Traversal", '', 'SegmentedKSpaceTraversal'), + 0x00189034: ('CS', '1', "Rectilinear Phase Encode Reordering", '', 'RectilinearPhaseEncodeReordering'), + 0x00189035: ('FD', '1', "Tag Thickness", '', 'TagThickness'), + 0x00189036: ('CS', '1', "Partial Fourier Direction", '', 'PartialFourierDirection'), + 0x00189037: ('CS', '1', "Cardiac Synchronization Technique", '', 'CardiacSynchronizationTechnique'), + 0x00189041: ('LO', '1', "Receive Coil Manufacturer Name", '', 'ReceiveCoilManufacturerName'), + 0x00189042: ('SQ', '1', "MR Receive Coil Sequence", '', 'MRReceiveCoilSequence'), + 0x00189043: ('CS', '1', "Receive Coil Type", '', 'ReceiveCoilType'), + 0x00189044: ('CS', '1', "Quadrature Receive Coil", '', 'QuadratureReceiveCoil'), + 0x00189045: ('SQ', '1', "Multi-Coil Definition Sequence", '', 'MultiCoilDefinitionSequence'), + 0x00189046: ('LO', '1', "Multi-Coil Configuration", '', 'MultiCoilConfiguration'), + 0x00189047: ('SH', '1', "Multi-Coil Element Name", '', 'MultiCoilElementName'), + 0x00189048: ('CS', '1', "Multi-Coil Element Used", '', 'MultiCoilElementUsed'), + 0x00189049: ('SQ', '1', "MR Transmit Coil Sequence", '', 'MRTransmitCoilSequence'), + 0x00189050: ('LO', '1', "Transmit Coil Manufacturer Name", '', 'TransmitCoilManufacturerName'), + 0x00189051: ('CS', '1', "Transmit Coil Type", '', 'TransmitCoilType'), + 0x00189052: ('FD', '1-2', "Spectral Width", '', 'SpectralWidth'), + 0x00189053: ('FD', '1-2', "Chemical Shift Reference", '', 'ChemicalShiftReference'), + 0x00189054: ('CS', '1', "Volume Localization Technique", '', 'VolumeLocalizationTechnique'), + 0x00189058: ('US', '1', "MR Acquisition Frequency Encoding Steps", '', 'MRAcquisitionFrequencyEncodingSteps'), + 0x00189059: ('CS', '1', "De-coupling", '', 'Decoupling'), + 0x00189060: ('CS', '1-2', "De-coupled Nucleus", '', 'DecoupledNucleus'), + 0x00189061: ('FD', '1-2', "De-coupling Frequency", '', 'DecouplingFrequency'), + 0x00189062: ('CS', '1', "De-coupling Method", '', 'DecouplingMethod'), + 0x00189063: ('FD', '1-2', "De-coupling Chemical Shift Reference", '', 'DecouplingChemicalShiftReference'), + 0x00189064: ('CS', '1', "k-space Filtering", '', 'KSpaceFiltering'), + 0x00189065: ('CS', '1-2', "Time Domain Filtering", '', 'TimeDomainFiltering'), + 0x00189066: ('US', '1-2', "Number of Zero Fills", '', 'NumberOfZeroFills'), + 0x00189067: ('CS', '1', "Baseline Correction", '', 'BaselineCorrection'), + 0x00189069: ('FD', '1', "Parallel Reduction Factor In-plane", '', 'ParallelReductionFactorInPlane'), + 0x00189070: ('FD', '1', "Cardiac R-R Interval Specified", '', 'CardiacRRIntervalSpecified'), + 0x00189073: ('FD', '1', "Acquisition Duration", '', 'AcquisitionDuration'), + 0x00189074: ('DT', '1', "Frame Acquisition DateTime", '', 'FrameAcquisitionDateTime'), + 0x00189075: ('CS', '1', "Diffusion Directionality", '', 'DiffusionDirectionality'), + 0x00189076: ('SQ', '1', "Diffusion Gradient Direction Sequence", '', 'DiffusionGradientDirectionSequence'), + 0x00189077: ('CS', '1', "Parallel Acquisition", '', 'ParallelAcquisition'), + 0x00189078: ('CS', '1', "Parallel Acquisition Technique", '', 'ParallelAcquisitionTechnique'), + 0x00189079: ('FD', '1-n', "Inversion Times", '', 'InversionTimes'), + 0x00189080: ('ST', '1', "Metabolite Map Description", '', 'MetaboliteMapDescription'), + 0x00189081: ('CS', '1', "Partial Fourier", '', 'PartialFourier'), + 0x00189082: ('FD', '1', "Effective Echo Time", '', 'EffectiveEchoTime'), + 0x00189083: ('SQ', '1', "Metabolite Map Code Sequence", '', 'MetaboliteMapCodeSequence'), + 0x00189084: ('SQ', '1', "Chemical Shift Sequence", '', 'ChemicalShiftSequence'), + 0x00189085: ('CS', '1', "Cardiac Signal Source", '', 'CardiacSignalSource'), + 0x00189087: ('FD', '1', "Diffusion b-value", '', 'DiffusionBValue'), + 0x00189089: ('FD', '3', "Diffusion Gradient Orientation", '', 'DiffusionGradientOrientation'), + 0x00189090: ('FD', '3', "Velocity Encoding Direction", '', 'VelocityEncodingDirection'), + 0x00189091: ('FD', '1', "Velocity Encoding Minimum Value", '', 'VelocityEncodingMinimumValue'), + 0x00189092: ('SQ', '1', "Velocity Encoding Acquisition Sequence", '', 'VelocityEncodingAcquisitionSequence'), + 0x00189093: ('US', '1', "Number of k-Space Trajectories", '', 'NumberOfKSpaceTrajectories'), + 0x00189094: ('CS', '1', "Coverage of k-Space", '', 'CoverageOfKSpace'), + 0x00189095: ('UL', '1', "Spectroscopy Acquisition Phase Rows", '', 'SpectroscopyAcquisitionPhaseRows'), + 0x00189096: ('FD', '1', "Parallel Reduction Factor In-plane (Retired)", 'Retired', 'ParallelReductionFactorInPlaneRetired'), + 0x00189098: ('FD', '1-2', "Transmitter Frequency", '', 'TransmitterFrequency'), + 0x00189100: ('CS', '1-2', "Resonant Nucleus", '', 'ResonantNucleus'), + 0x00189101: ('CS', '1', "Frequency Correction", '', 'FrequencyCorrection'), + 0x00189103: ('SQ', '1', "MR Spectroscopy FOV/Geometry Sequence", '', 'MRSpectroscopyFOVGeometrySequence'), + 0x00189104: ('FD', '1', "Slab Thickness", '', 'SlabThickness'), + 0x00189105: ('FD', '3', "Slab Orientation", '', 'SlabOrientation'), + 0x00189106: ('FD', '3', "Mid Slab Position", '', 'MidSlabPosition'), + 0x00189107: ('SQ', '1', "MR Spatial Saturation Sequence", '', 'MRSpatialSaturationSequence'), + 0x00189112: ('SQ', '1', "MR Timing and Related Parameters Sequence", '', 'MRTimingAndRelatedParametersSequence'), + 0x00189114: ('SQ', '1', "MR Echo Sequence", '', 'MREchoSequence'), + 0x00189115: ('SQ', '1', "MR Modifier Sequence", '', 'MRModifierSequence'), + 0x00189117: ('SQ', '1', "MR Diffusion Sequence", '', 'MRDiffusionSequence'), + 0x00189118: ('SQ', '1', "Cardiac Synchronization", '', 'CardiacSynchronization'), + 0x00189119: ('SQ', '1', "MR Averages Sequence", '', 'MRAveragesSequence'), + 0x00189125: ('SQ', '1', "MR FOV/Geometry Sequence", '', 'MRFOVGeometrySequence'), + 0x00189126: ('SQ', '1', "Volume Localization Sequence", '', 'VolumeLocalizationSequence'), + 0x00189127: ('UL', '1', "Spectroscopy Acquisition Data Columns", '', 'SpectroscopyAcquisitionDataColumns'), + 0x00189147: ('CS', '1', "Diffusion Anisotropy Type", '', 'DiffusionAnisotropyType'), + 0x00189151: ('DT', '1', "Frame Reference DateTime", '', 'FrameReferenceDateTime'), + 0x00189152: ('SQ', '1', "MR Metabolite Map Sequence", '', 'MRMetaboliteMapSequence'), + 0x00189155: ('FD', '1', "Parallel Reduction Factor out-of-plane", '', 'ParallelReductionFactorOutOfPlane'), + 0x00189159: ('UL', '1', "Spectroscopy Acquisition Out-of-plane Phase Steps", '', 'SpectroscopyAcquisitionOutOfPlanePhaseSteps'), + 0x00189166: ('CS', '1', "Bulk Motion Status", 'Retired', 'BulkMotionStatus'), + 0x00189168: ('FD', '1', "Parallel Reduction Factor Second In-plane", '', 'ParallelReductionFactorSecondInPlane'), + 0x00189169: ('CS', '1', "Cardiac Beat Rejection Technique", '', 'CardiacBeatRejectionTechnique'), + 0x00189170: ('CS', '1', "Respiratory Motion Compensation Technique", '', 'RespiratoryMotionCompensationTechnique'), + 0x00189171: ('CS', '1', "Respiratory Signal Source", '', 'RespiratorySignalSource'), + 0x00189172: ('CS', '1', "Bulk Motion Compensation Technique", '', 'BulkMotionCompensationTechnique'), + 0x00189173: ('CS', '1', "Bulk Motion Signal Source", '', 'BulkMotionSignalSource'), + 0x00189174: ('CS', '1', "Applicable Safety Standard Agency", '', 'ApplicableSafetyStandardAgency'), + 0x00189175: ('LO', '1', "Applicable Safety Standard Description", '', 'ApplicableSafetyStandardDescription'), + 0x00189176: ('SQ', '1', "Operating Mode Sequence", '', 'OperatingModeSequence'), + 0x00189177: ('CS', '1', "Operating Mode Type", '', 'OperatingModeType'), + 0x00189178: ('CS', '1', "Operating Mode", '', 'OperatingMode'), + 0x00189179: ('CS', '1', "Specific Absorption Rate Definition", '', 'SpecificAbsorptionRateDefinition'), + 0x00189180: ('CS', '1', "Gradient Output Type", '', 'GradientOutputType'), + 0x00189181: ('FD', '1', "Specific Absorption Rate Value", '', 'SpecificAbsorptionRateValue'), + 0x00189182: ('FD', '1', "Gradient Output", '', 'GradientOutput'), + 0x00189183: ('CS', '1', "Flow Compensation Direction", '', 'FlowCompensationDirection'), + 0x00189184: ('FD', '1', "Tagging Delay", '', 'TaggingDelay'), + 0x00189185: ('ST', '1', "Respiratory Motion Compensation Technique Description", '', 'RespiratoryMotionCompensationTechniqueDescription'), + 0x00189186: ('SH', '1', "Respiratory Signal Source ID", '', 'RespiratorySignalSourceID'), + 0x00189195: ('FD', '1', "Chemical Shift Minimum Integration Limit in Hz", 'Retired', 'ChemicalShiftMinimumIntegrationLimitInHz'), + 0x00189196: ('FD', '1', "Chemical Shift Maximum Integration Limit in Hz", 'Retired', 'ChemicalShiftMaximumIntegrationLimitInHz'), + 0x00189197: ('SQ', '1', "MR Velocity Encoding Sequence", '', 'MRVelocityEncodingSequence'), + 0x00189198: ('CS', '1', "First Order Phase Correction", '', 'FirstOrderPhaseCorrection'), + 0x00189199: ('CS', '1', "Water Referenced Phase Correction", '', 'WaterReferencedPhaseCorrection'), + 0x00189200: ('CS', '1', "MR Spectroscopy Acquisition Type", '', 'MRSpectroscopyAcquisitionType'), + 0x00189214: ('CS', '1', "Respiratory Cycle Position", '', 'RespiratoryCyclePosition'), + 0x00189217: ('FD', '1', "Velocity Encoding Maximum Value", '', 'VelocityEncodingMaximumValue'), + 0x00189218: ('FD', '1', "Tag Spacing Second Dimension", '', 'TagSpacingSecondDimension'), + 0x00189219: ('SS', '1', "Tag Angle Second Axis", '', 'TagAngleSecondAxis'), + 0x00189220: ('FD', '1', "Frame Acquisition Duration", '', 'FrameAcquisitionDuration'), + 0x00189226: ('SQ', '1', "MR Image Frame Type Sequence", '', 'MRImageFrameTypeSequence'), + 0x00189227: ('SQ', '1', "MR Spectroscopy Frame Type Sequence", '', 'MRSpectroscopyFrameTypeSequence'), + 0x00189231: ('US', '1', "MR Acquisition Phase Encoding Steps in-plane", '', 'MRAcquisitionPhaseEncodingStepsInPlane'), + 0x00189232: ('US', '1', "MR Acquisition Phase Encoding Steps out-of-plane", '', 'MRAcquisitionPhaseEncodingStepsOutOfPlane'), + 0x00189234: ('UL', '1', "Spectroscopy Acquisition Phase Columns", '', 'SpectroscopyAcquisitionPhaseColumns'), + 0x00189236: ('CS', '1', "Cardiac Cycle Position", '', 'CardiacCyclePosition'), + 0x00189239: ('SQ', '1', "Specific Absorption Rate Sequence", '', 'SpecificAbsorptionRateSequence'), + 0x00189240: ('US', '1', "RF Echo Train Length", '', 'RFEchoTrainLength'), + 0x00189241: ('US', '1', "Gradient Echo Train Length", '', 'GradientEchoTrainLength'), + 0x00189250: ('CS', '1', "Arterial Spin Labeling Contrast", '', 'ArterialSpinLabelingContrast'), + 0x00189251: ('SQ', '1', "MR Arterial Spin Labeling Sequence", '', 'MRArterialSpinLabeling'), + 0x00189252: ('LO', '1', "ASL Technique Description", '', 'ASLTechniqueDescription'), + 0x00189253: ('US', '1', "ASL Slab Number", '', 'ASLSlabNumber'), + 0x00189254: ('FD', '1', "ASL Slab Thickness", '', 'ASLSlabThickness'), + 0x00189255: ('FD', '3', "ASL Slab Orientation", '', 'ASLSlabOrientation'), + 0x00189256: ('FD', '3', "ASL Mid Slab Position", '', 'ASLMidSlabPosition'), + 0x00189257: ('CS', '1', "ASL Context", '', 'ASLContext'), + 0x00189258: ('UL', '1', "ASL Pulse Train Duration", '', 'ASLPulseTrainDuration'), + 0x00189259: ('CS', '1', "ASL Crusher Flag", '', 'ASLCrusherFlag'), + 0x0018925A: ('FD', '1', "ASL Crusher Flow", '', 'ASLCrusherFlow'), + 0x0018925B: ('LO', '1', "ASL Crusher Description", '', 'ASLCrusherDescription'), + 0x0018925C: ('CS', '1', "ASL Bolus Cut-off Flag", '', 'ASLBolusCutoffFlag'), + 0x0018925D: ('SQ', '1', "ASL Bolus Cut-off Timing Sequence", '', 'ASLBolusCutoffTimingSequence'), + 0x0018925E: ('LO', '1', "ASL Bolus Cut-off Technique", '', 'ASLBolusCutoffTechnique'), + 0x0018925F: ('UL', '1', "ASL Bolus Cut-off Delay Time", '', 'ASLBolusCutoffDelayTime'), + 0x00189260: ('SQ', '1', "ASL Slab Sequence", '', 'ASLSlabSequence'), + 0x00189295: ('FD', '1', "Chemical Shift Minimum Integration Limit in ppm", '', 'ChemicalShiftMinimumIntegrationLimitInppm'), + 0x00189296: ('FD', '1', "Chemical Shift Maximum Integration Limit in ppm", '', 'ChemicalShiftMaximumIntegrationLimitInppm'), + 0x00189301: ('SQ', '1', "CT Acquisition Type Sequence", '', 'CTAcquisitionTypeSequence'), + 0x00189302: ('CS', '1', "Acquisition Type", '', 'AcquisitionType'), + 0x00189303: ('FD', '1', "Tube Angle", '', 'TubeAngle'), + 0x00189304: ('SQ', '1', "CT Acquisition Details Sequence", '', 'CTAcquisitionDetailsSequence'), + 0x00189305: ('FD', '1', "Revolution Time", '', 'RevolutionTime'), + 0x00189306: ('FD', '1', "Single Collimation Width", '', 'SingleCollimationWidth'), + 0x00189307: ('FD', '1', "Total Collimation Width", '', 'TotalCollimationWidth'), + 0x00189308: ('SQ', '1', "CT Table Dynamics Sequence", '', 'CTTableDynamicsSequence'), + 0x00189309: ('FD', '1', "Table Speed", '', 'TableSpeed'), + 0x00189310: ('FD', '1', "Table Feed per Rotation", '', 'TableFeedPerRotation'), + 0x00189311: ('FD', '1', "Spiral Pitch Factor", '', 'SpiralPitchFactor'), + 0x00189312: ('SQ', '1', "CT Geometry Sequence", '', 'CTGeometrySequence'), + 0x00189313: ('FD', '3', "Data Collection Center (Patient)", '', 'DataCollectionCenterPatient'), + 0x00189314: ('SQ', '1', "CT Reconstruction Sequence", '', 'CTReconstructionSequence'), + 0x00189315: ('CS', '1', "Reconstruction Algorithm", '', 'ReconstructionAlgorithm'), + 0x00189316: ('CS', '1', "Convolution Kernel Group", '', 'ConvolutionKernelGroup'), + 0x00189317: ('FD', '2', "Reconstruction Field of View", '', 'ReconstructionFieldOfView'), + 0x00189318: ('FD', '3', "Reconstruction Target Center (Patient)", '', 'ReconstructionTargetCenterPatient'), + 0x00189319: ('FD', '1', "Reconstruction Angle", '', 'ReconstructionAngle'), + 0x00189320: ('SH', '1', "Image Filter", '', 'ImageFilter'), + 0x00189321: ('SQ', '1', "CT Exposure Sequence", '', 'CTExposureSequence'), + 0x00189322: ('FD', '2', "Reconstruction Pixel Spacing", '', 'ReconstructionPixelSpacing'), + 0x00189323: ('CS', '1', "Exposure Modulation Type", '', 'ExposureModulationType'), + 0x00189324: ('FD', '1', "Estimated Dose Saving", '', 'EstimatedDoseSaving'), + 0x00189325: ('SQ', '1', "CT X-Ray Details Sequence", '', 'CTXRayDetailsSequence'), + 0x00189326: ('SQ', '1', "CT Position Sequence", '', 'CTPositionSequence'), + 0x00189327: ('FD', '1', "Table Position", '', 'TablePosition'), + 0x00189328: ('FD', '1', "Exposure Time in ms", '', 'ExposureTimeInms'), + 0x00189329: ('SQ', '1', "CT Image Frame Type Sequence", '', 'CTImageFrameTypeSequence'), + 0x00189330: ('FD', '1', "X-Ray Tube Current in mA", '', 'XRayTubeCurrentInmA'), + 0x00189332: ('FD', '1', "Exposure in mAs", '', 'ExposureInmAs'), + 0x00189333: ('CS', '1', "Constant Volume Flag", '', 'ConstantVolumeFlag'), + 0x00189334: ('CS', '1', "Fluoroscopy Flag", '', 'FluoroscopyFlag'), + 0x00189335: ('FD', '1', "Distance Source to Data Collection Center", '', 'DistanceSourceToDataCollectionCenter'), + 0x00189337: ('US', '1', "Contrast/Bolus Agent Number", '', 'ContrastBolusAgentNumber'), + 0x00189338: ('SQ', '1', "Contrast/Bolus Ingredient Code Sequence", '', 'ContrastBolusIngredientCodeSequence'), + 0x00189340: ('SQ', '1', "Contrast Administration Profile Sequence", '', 'ContrastAdministrationProfileSequence'), + 0x00189341: ('SQ', '1', "Contrast/Bolus Usage Sequence", '', 'ContrastBolusUsageSequence'), + 0x00189342: ('CS', '1', "Contrast/Bolus Agent Administered", '', 'ContrastBolusAgentAdministered'), + 0x00189343: ('CS', '1', "Contrast/Bolus Agent Detected", '', 'ContrastBolusAgentDetected'), + 0x00189344: ('CS', '1', "Contrast/Bolus Agent Phase", '', 'ContrastBolusAgentPhase'), + 0x00189345: ('FD', '1', "CTDIvol", '', 'CTDIvol'), + 0x00189346: ('SQ', '1', "CTDI Phantom Type Code Sequence", '', 'CTDIPhantomTypeCodeSequence'), + 0x00189351: ('FL', '1', "Calcium Scoring Mass Factor Patient", '', 'CalciumScoringMassFactorPatient'), + 0x00189352: ('FL', '3', "Calcium Scoring Mass Factor Device", '', 'CalciumScoringMassFactorDevice'), + 0x00189353: ('FL', '1', "Energy Weighting Factor", '', 'EnergyWeightingFactor'), + 0x00189360: ('SQ', '1', "CT Additional X-Ray Source Sequence", '', 'CTAdditionalXRaySourceSequence'), + 0x00189401: ('SQ', '1', "Projection Pixel Calibration Sequence", '', 'ProjectionPixelCalibrationSequence'), + 0x00189402: ('FL', '1', "Distance Source to Isocenter", '', 'DistanceSourceToIsocenter'), + 0x00189403: ('FL', '1', "Distance Object to Table Top", '', 'DistanceObjectToTableTop'), + 0x00189404: ('FL', '2', "Object Pixel Spacing in Center of Beam", '', 'ObjectPixelSpacingInCenterOfBeam'), + 0x00189405: ('SQ', '1', "Positioner Position Sequence", '', 'PositionerPositionSequence'), + 0x00189406: ('SQ', '1', "Table Position Sequence", '', 'TablePositionSequence'), + 0x00189407: ('SQ', '1', "Collimator Shape Sequence", '', 'CollimatorShapeSequence'), + 0x00189410: ('CS', '1', "Planes in Acquisition", '', 'PlanesInAcquisition'), + 0x00189412: ('SQ', '1', "XA/XRF Frame Characteristics Sequence", '', 'XAXRFFrameCharacteristicsSequence'), + 0x00189417: ('SQ', '1', "Frame Acquisition Sequence", '', 'FrameAcquisitionSequence'), + 0x00189420: ('CS', '1', "X-Ray Receptor Type", '', 'XRayReceptorType'), + 0x00189423: ('LO', '1', "Acquisition Protocol Name", '', 'AcquisitionProtocolName'), + 0x00189424: ('LT', '1', "Acquisition Protocol Description", '', 'AcquisitionProtocolDescription'), + 0x00189425: ('CS', '1', "Contrast/Bolus Ingredient Opaque", '', 'ContrastBolusIngredientOpaque'), + 0x00189426: ('FL', '1', "Distance Receptor Plane to Detector Housing", '', 'DistanceReceptorPlaneToDetectorHousing'), + 0x00189427: ('CS', '1', "Intensifier Active Shape", '', 'IntensifierActiveShape'), + 0x00189428: ('FL', '1-2', "Intensifier Active Dimension(s)", '', 'IntensifierActiveDimensions'), + 0x00189429: ('FL', '2', "Physical Detector Size", '', 'PhysicalDetectorSize'), + 0x00189430: ('FL', '2', "Position of Isocenter Projection", '', 'PositionOfIsocenterProjection'), + 0x00189432: ('SQ', '1', "Field of View Sequence", '', 'FieldOfViewSequence'), + 0x00189433: ('LO', '1', "Field of View Description", '', 'FieldOfViewDescription'), + 0x00189434: ('SQ', '1', "Exposure Control Sensing Regions Sequence", '', 'ExposureControlSensingRegionsSequence'), + 0x00189435: ('CS', '1', "Exposure Control Sensing Region Shape", '', 'ExposureControlSensingRegionShape'), + 0x00189436: ('SS', '1', "Exposure Control Sensing Region Left Vertical Edge", '', 'ExposureControlSensingRegionLeftVerticalEdge'), + 0x00189437: ('SS', '1', "Exposure Control Sensing Region Right Vertical Edge", '', 'ExposureControlSensingRegionRightVerticalEdge'), + 0x00189438: ('SS', '1', "Exposure Control Sensing Region Upper Horizontal Edge", '', 'ExposureControlSensingRegionUpperHorizontalEdge'), + 0x00189439: ('SS', '1', "Exposure Control Sensing Region Lower Horizontal Edge", '', 'ExposureControlSensingRegionLowerHorizontalEdge'), + 0x00189440: ('SS', '2', "Center of Circular Exposure Control Sensing Region", '', 'CenterOfCircularExposureControlSensingRegion'), + 0x00189441: ('US', '1', "Radius of Circular Exposure Control Sensing Region", '', 'RadiusOfCircularExposureControlSensingRegion'), + 0x00189442: ('SS', '2-n', "Vertices of the Polygonal Exposure Control Sensing Region", '', 'VerticesOfThePolygonalExposureControlSensingRegion'), + 0x00189445: ('OB', '1', "Retired-blank", 'Retired', ''), + 0x00189447: ('FL', '1', "Column Angulation (Patient)", '', 'ColumnAngulationPatient'), + 0x00189449: ('FL', '1', "Beam Angle", '', 'BeamAngle'), + 0x00189451: ('SQ', '1', "Frame Detector Parameters Sequence", '', 'FrameDetectorParametersSequence'), + 0x00189452: ('FL', '1', "Calculated Anatomy Thickness", '', 'CalculatedAnatomyThickness'), + 0x00189455: ('SQ', '1', "Calibration Sequence", '', 'CalibrationSequence'), + 0x00189456: ('SQ', '1', "Object Thickness Sequence", '', 'ObjectThicknessSequence'), + 0x00189457: ('CS', '1', "Plane Identification", '', 'PlaneIdentification'), + 0x00189461: ('FL', '1-2', "Field of View Dimension(s) in Float", '', 'FieldOfViewDimensionsInFloat'), + 0x00189462: ('SQ', '1', "Isocenter Reference System Sequence", '', 'IsocenterReferenceSystemSequence'), + 0x00189463: ('FL', '1', "Positioner Isocenter Primary Angle", '', 'PositionerIsocenterPrimaryAngle'), + 0x00189464: ('FL', '1', "Positioner Isocenter Secondary Angle", '', 'PositionerIsocenterSecondaryAngle'), + 0x00189465: ('FL', '1', "Positioner Isocenter Detector Rotation Angle", '', 'PositionerIsocenterDetectorRotationAngle'), + 0x00189466: ('FL', '1', "Table X Position to Isocenter", '', 'TableXPositionToIsocenter'), + 0x00189467: ('FL', '1', "Table Y Position to Isocenter", '', 'TableYPositionToIsocenter'), + 0x00189468: ('FL', '1', "Table Z Position to Isocenter", '', 'TableZPositionToIsocenter'), + 0x00189469: ('FL', '1', "Table Horizontal Rotation Angle", '', 'TableHorizontalRotationAngle'), + 0x00189470: ('FL', '1', "Table Head Tilt Angle", '', 'TableHeadTiltAngle'), + 0x00189471: ('FL', '1', "Table Cradle Tilt Angle", '', 'TableCradleTiltAngle'), + 0x00189472: ('SQ', '1', "Frame Display Shutter Sequence", '', 'FrameDisplayShutterSequence'), + 0x00189473: ('FL', '1', "Acquired Image Area Dose Product", '', 'AcquiredImageAreaDoseProduct'), + 0x00189474: ('CS', '1', "C-arm Positioner Tabletop Relationship", '', 'CArmPositionerTabletopRelationship'), + 0x00189476: ('SQ', '1', "X-Ray Geometry Sequence", '', 'XRayGeometrySequence'), + 0x00189477: ('SQ', '1', "Irradiation Event Identification Sequence", '', 'IrradiationEventIdentificationSequence'), + 0x00189504: ('SQ', '1', "X-Ray 3D Frame Type Sequence", '', 'XRay3DFrameTypeSequence'), + 0x00189506: ('SQ', '1', "Contributing Sources Sequence", '', 'ContributingSourcesSequence'), + 0x00189507: ('SQ', '1', "X-Ray 3D Acquisition Sequence", '', 'XRay3DAcquisitionSequence'), + 0x00189508: ('FL', '1', "Primary Positioner Scan Arc", '', 'PrimaryPositionerScanArc'), + 0x00189509: ('FL', '1', "Secondary Positioner Scan Arc", '', 'SecondaryPositionerScanArc'), + 0x00189510: ('FL', '1', "Primary Positioner Scan Start Angle", '', 'PrimaryPositionerScanStartAngle'), + 0x00189511: ('FL', '1', "Secondary Positioner Scan Start Angle", '', 'SecondaryPositionerScanStartAngle'), + 0x00189514: ('FL', '1', "Primary Positioner Increment", '', 'PrimaryPositionerIncrement'), + 0x00189515: ('FL', '1', "Secondary Positioner Increment", '', 'SecondaryPositionerIncrement'), + 0x00189516: ('DT', '1', "Start Acquisition DateTime", '', 'StartAcquisitionDateTime'), + 0x00189517: ('DT', '1', "End Acquisition DateTime", '', 'EndAcquisitionDateTime'), + 0x00189524: ('LO', '1', "Application Name", '', 'ApplicationName'), + 0x00189525: ('LO', '1', "Application Version", '', 'ApplicationVersion'), + 0x00189526: ('LO', '1', "Application Manufacturer", '', 'ApplicationManufacturer'), + 0x00189527: ('CS', '1', "Algorithm Type", '', 'AlgorithmType'), + 0x00189528: ('LO', '1', "Algorithm Description", '', 'AlgorithmDescription'), + 0x00189530: ('SQ', '1', "X-Ray 3D Reconstruction Sequence", '', 'XRay3DReconstructionSequence'), + 0x00189531: ('LO', '1', "Reconstruction Description", '', 'ReconstructionDescription'), + 0x00189538: ('SQ', '1', "Per Projection Acquisition Sequence", '', 'PerProjectionAcquisitionSequence'), + 0x00189601: ('SQ', '1', "Diffusion b-matrix Sequence", '', 'DiffusionBMatrixSequence'), + 0x00189602: ('FD', '1', "Diffusion b-value XX", '', 'DiffusionBValueXX'), + 0x00189603: ('FD', '1', "Diffusion b-value XY", '', 'DiffusionBValueXY'), + 0x00189604: ('FD', '1', "Diffusion b-value XZ", '', 'DiffusionBValueXZ'), + 0x00189605: ('FD', '1', "Diffusion b-value YY", '', 'DiffusionBValueYY'), + 0x00189606: ('FD', '1', "Diffusion b-value YZ", '', 'DiffusionBValueYZ'), + 0x00189607: ('FD', '1', "Diffusion b-value ZZ", '', 'DiffusionBValueZZ'), + 0x00189701: ('DT', '1', "Decay Correction DateTime", '', 'DecayCorrectionDateTime'), + 0x00189715: ('FD', '1', "Start Density Threshold", '', 'StartDensityThreshold'), + 0x00189716: ('FD', '1', "Start Relative Density Difference Threshold", '', 'StartRelativeDensityDifferenceThreshold'), + 0x00189717: ('FD', '1', "Start Cardiac Trigger Count Threshold", '', 'StartCardiacTriggerCountThreshold'), + 0x00189718: ('FD', '1', "Start Respiratory Trigger Count Threshold", '', 'StartRespiratoryTriggerCountThreshold'), + 0x00189719: ('FD', '1', "Termination Counts Threshold", '', 'TerminationCountsThreshold'), + 0x00189720: ('FD', '1', "Termination Density Threshold", '', 'TerminationDensityThreshold'), + 0x00189721: ('FD', '1', "Termination Relative Density Threshold", '', 'TerminationRelativeDensityThreshold'), + 0x00189722: ('FD', '1', "Termination Time Threshold", '', 'TerminationTimeThreshold'), + 0x00189723: ('FD', '1', "Termination Cardiac Trigger Count Threshold", '', 'TerminationCardiacTriggerCountThreshold'), + 0x00189724: ('FD', '1', "Termination Respiratory Trigger Count Threshold", '', 'TerminationRespiratoryTriggerCountThreshold'), + 0x00189725: ('CS', '1', "Detector Geometry", '', 'DetectorGeometry'), + 0x00189726: ('FD', '1', "Transverse Detector Separation", '', 'TransverseDetectorSeparation'), + 0x00189727: ('FD', '1', "Axial Detector Dimension", '', 'AxialDetectorDimension'), + 0x00189729: ('US', '1', "Radiopharmaceutical Agent Number", '', 'RadiopharmaceuticalAgentNumber'), + 0x00189732: ('SQ', '1', "PET Frame Acquisition Sequence", '', 'PETFrameAcquisitionSequence'), + 0x00189733: ('SQ', '1', "PET Detector Motion Details Sequence", '', 'PETDetectorMotionDetailsSequence'), + 0x00189734: ('SQ', '1', "PET Table Dynamics Sequence", '', 'PETTableDynamicsSequence'), + 0x00189735: ('SQ', '1', "PET Position Sequence", '', 'PETPositionSequence'), + 0x00189736: ('SQ', '1', "PET Frame Correction Factors Sequence", '', 'PETFrameCorrectionFactorsSequence'), + 0x00189737: ('SQ', '1', "Radiopharmaceutical Usage Sequence", '', 'RadiopharmaceuticalUsageSequence'), + 0x00189738: ('CS', '1', "Attenuation Correction Source", '', 'AttenuationCorrectionSource'), + 0x00189739: ('US', '1', "Number of Iterations", '', 'NumberOfIterations'), + 0x00189740: ('US', '1', "Number of Subsets", '', 'NumberOfSubsets'), + 0x00189749: ('SQ', '1', "PET Reconstruction Sequence", '', 'PETReconstructionSequence'), + 0x00189751: ('SQ', '1', "PET Frame Type Sequence", '', 'PETFrameTypeSequence'), + 0x00189755: ('CS', '1', "Time of Flight Information Used", '', 'TimeOfFlightInformationUsed'), + 0x00189756: ('CS', '1', "Reconstruction Type", '', 'ReconstructionType'), + 0x00189758: ('CS', '1', "Decay Corrected", '', 'DecayCorrected'), + 0x00189759: ('CS', '1', "Attenuation Corrected", '', 'AttenuationCorrected'), + 0x00189760: ('CS', '1', "Scatter Corrected", '', 'ScatterCorrected'), + 0x00189761: ('CS', '1', "Dead Time Corrected", '', 'DeadTimeCorrected'), + 0x00189762: ('CS', '1', "Gantry Motion Corrected", '', 'GantryMotionCorrected'), + 0x00189763: ('CS', '1', "Patient Motion Corrected", '', 'PatientMotionCorrected'), + 0x00189764: ('CS', '1', "Count Loss Normalization Corrected", '', 'CountLossNormalizationCorrected'), + 0x00189765: ('CS', '1', "Randoms Corrected", '', 'RandomsCorrected'), + 0x00189766: ('CS', '1', "Non-uniform Radial Sampling Corrected", '', 'NonUniformRadialSamplingCorrected'), + 0x00189767: ('CS', '1', "Sensitivity Calibrated", '', 'SensitivityCalibrated'), + 0x00189768: ('CS', '1', "Detector Normalization Correction", '', 'DetectorNormalizationCorrection'), + 0x00189769: ('CS', '1', "Iterative Reconstruction Method", '', 'IterativeReconstructionMethod'), + 0x00189770: ('CS', '1', "Attenuation Correction Temporal Relationship", '', 'AttenuationCorrectionTemporalRelationship'), + 0x00189771: ('SQ', '1', "Patient Physiological State Sequence", '', 'PatientPhysiologicalStateSequence'), + 0x00189772: ('SQ', '1', "Patient Physiological State Code Sequence", '', 'PatientPhysiologicalStateCodeSequence'), + 0x00189801: ('FD', '1-n', "Depth(s) of Focus", '', 'DepthsOfFocus'), + 0x00189803: ('SQ', '1', "Excluded Intervals Sequence", '', 'ExcludedIntervalsSequence'), + 0x00189804: ('DT', '1', "Exclusion Start Datetime", '', 'ExclusionStartDatetime'), + 0x00189805: ('FD', '1', "Exclusion Duration", '', 'ExclusionDuration'), + 0x00189806: ('SQ', '1', "US Image Description Sequence", '', 'USImageDescriptionSequence'), + 0x00189807: ('SQ', '1', "Image Data Type Sequence", '', 'ImageDataTypeSequence'), + 0x00189808: ('CS', '1', "Data Type", '', 'DataType'), + 0x00189809: ('SQ', '1', "Transducer Scan Pattern Code Sequence", '', 'TransducerScanPatternCodeSequence'), + 0x0018980B: ('CS', '1', "Aliased Data Type", '', 'AliasedDataType'), + 0x0018980C: ('CS', '1', "Position Measuring Device Used", '', 'PositionMeasuringDeviceUsed'), + 0x0018980D: ('SQ', '1', "Transducer Geometry Code Sequence", '', 'TransducerGeometryCodeSequence'), + 0x0018980E: ('SQ', '1', "Transducer Beam Steering Code Sequence", '', 'TransducerBeamSteeringCodeSequence'), + 0x0018980F: ('SQ', '1', "Transducer Application Code Sequence", '', 'TransducerApplicationCodeSequence'), + 0x0018A001: ('SQ', '1', "Contributing Equipment Sequence", '', 'ContributingEquipmentSequence'), + 0x0018A002: ('DT', '1', "Contribution Date Time", '', 'ContributionDateTime'), + 0x0018A003: ('ST', '1', "Contribution Description", '', 'ContributionDescription'), + 0x0020000D: ('UI', '1', "Study Instance UID", '', 'StudyInstanceUID'), + 0x0020000E: ('UI', '1', "Series Instance UID", '', 'SeriesInstanceUID'), + 0x00200010: ('SH', '1', "Study ID", '', 'StudyID'), + 0x00200011: ('IS', '1', "Series Number", '', 'SeriesNumber'), + 0x00200012: ('IS', '1', "Acquisition Number", '', 'AcquisitionNumber'), + 0x00200013: ('IS', '1', "Instance Number", '', 'InstanceNumber'), + 0x00200014: ('IS', '1', "Isotope Number", 'Retired', 'IsotopeNumber'), + 0x00200015: ('IS', '1', "Phase Number", 'Retired', 'PhaseNumber'), + 0x00200016: ('IS', '1', "Interval Number", 'Retired', 'IntervalNumber'), + 0x00200017: ('IS', '1', "Time Slot Number", 'Retired', 'TimeSlotNumber'), + 0x00200018: ('IS', '1', "Angle Number", 'Retired', 'AngleNumber'), + 0x00200019: ('IS', '1', "Item Number", '', 'ItemNumber'), + 0x00200020: ('CS', '2', "Patient Orientation", '', 'PatientOrientation'), + 0x00200022: ('IS', '1', "Overlay Number", 'Retired', 'OverlayNumber'), + 0x00200024: ('IS', '1', "Curve Number", 'Retired', 'CurveNumber'), + 0x00200026: ('IS', '1', "LUT Number", 'Retired', 'LUTNumber'), + 0x00200030: ('DS', '3', "Image Position", 'Retired', 'ImagePosition'), + 0x00200032: ('DS', '3', "Image Position (Patient)", '', 'ImagePositionPatient'), + 0x00200035: ('DS', '6', "Image Orientation", 'Retired', 'ImageOrientation'), + 0x00200037: ('DS', '6', "Image Orientation (Patient)", '', 'ImageOrientationPatient'), + 0x00200050: ('DS', '1', "Location", 'Retired', 'Location'), + 0x00200052: ('UI', '1', "Frame of Reference UID", '', 'FrameOfReferenceUID'), + 0x00200060: ('CS', '1', "Laterality", '', 'Laterality'), + 0x00200062: ('CS', '1', "Image Laterality", '', 'ImageLaterality'), + 0x00200070: ('LO', '1', "Image Geometry Type", 'Retired', 'ImageGeometryType'), + 0x00200080: ('CS', '1-n', "Masking Image", 'Retired', 'MaskingImage'), + 0x002000AA: ('IS', '1', "Report Number", 'Retired', 'ReportNumber'), + 0x00200100: ('IS', '1', "Temporal Position Identifier", '', 'TemporalPositionIdentifier'), + 0x00200105: ('IS', '1', "Number of Temporal Positions", '', 'NumberOfTemporalPositions'), + 0x00200110: ('DS', '1', "Temporal Resolution", '', 'TemporalResolution'), + 0x00200200: ('UI', '1', "Synchronization Frame of Reference UID", '', 'SynchronizationFrameOfReferenceUID'), + 0x00200242: ('UI', '1', "SOP Instance UID of Concatenation Source", '', 'SOPInstanceUIDOfConcatenationSource'), + 0x00201000: ('IS', '1', "Series in Study", 'Retired', 'SeriesInStudy'), + 0x00201001: ('IS', '1', "Acquisitions in Series", 'Retired', 'AcquisitionsInSeries'), + 0x00201002: ('IS', '1', "Images in Acquisition", '', 'ImagesInAcquisition'), + 0x00201003: ('IS', '1', "Images in Series", 'Retired', 'ImagesInSeries'), + 0x00201004: ('IS', '1', "Acquisitions in Study", 'Retired', 'AcquisitionsInStudy'), + 0x00201005: ('IS', '1', "Images in Study", 'Retired', 'ImagesInStudy'), + 0x00201020: ('LO', '1-n', "Reference", 'Retired', 'Reference'), + 0x00201040: ('LO', '1', "Position Reference Indicator", '', 'PositionReferenceIndicator'), + 0x00201041: ('DS', '1', "Slice Location", '', 'SliceLocation'), + 0x00201070: ('IS', '1-n', "Other Study Numbers", 'Retired', 'OtherStudyNumbers'), + 0x00201200: ('IS', '1', "Number of Patient Related Studies", '', 'NumberOfPatientRelatedStudies'), + 0x00201202: ('IS', '1', "Number of Patient Related Series", '', 'NumberOfPatientRelatedSeries'), + 0x00201204: ('IS', '1', "Number of Patient Related Instances", '', 'NumberOfPatientRelatedInstances'), + 0x00201206: ('IS', '1', "Number of Study Related Series", '', 'NumberOfStudyRelatedSeries'), + 0x00201208: ('IS', '1', "Number of Study Related Instances", '', 'NumberOfStudyRelatedInstances'), + 0x00201209: ('IS', '1', "Number of Series Related Instances", '', 'NumberOfSeriesRelatedInstances'), + 0x00203401: ('CS', '1', "Modifying Device ID", 'Retired', 'ModifyingDeviceID'), + 0x00203402: ('CS', '1', "Modified Image ID", 'Retired', 'ModifiedImageID'), + 0x00203403: ('DA', '1', "Modified Image Date", 'Retired', 'ModifiedImageDate'), + 0x00203404: ('LO', '1', "Modifying Device Manufacturer", 'Retired', 'ModifyingDeviceManufacturer'), + 0x00203405: ('TM', '1', "Modified Image Time", 'Retired', 'ModifiedImageTime'), + 0x00203406: ('LO', '1', "Modified Image Description", 'Retired', 'ModifiedImageDescription'), + 0x00204000: ('LT', '1', "Image Comments", '', 'ImageComments'), + 0x00205000: ('AT', '1-n', "Original Image Identification", 'Retired', 'OriginalImageIdentification'), + 0x00205002: ('LO', '1-n', "Original Image Identification Nomenclature", 'Retired', 'OriginalImageIdentificationNomenclature'), + 0x00209056: ('SH', '1', "Stack ID", '', 'StackID'), + 0x00209057: ('UL', '1', "In-Stack Position Number", '', 'InStackPositionNumber'), + 0x00209071: ('SQ', '1', "Frame Anatomy Sequence", '', 'FrameAnatomySequence'), + 0x00209072: ('CS', '1', "Frame Laterality", '', 'FrameLaterality'), + 0x00209111: ('SQ', '1', "Frame Content Sequence", '', 'FrameContentSequence'), + 0x00209113: ('SQ', '1', "Plane Position Sequence", '', 'PlanePositionSequence'), + 0x00209116: ('SQ', '1', "Plane Orientation Sequence", '', 'PlaneOrientationSequence'), + 0x00209128: ('UL', '1', "Temporal Position Index", '', 'TemporalPositionIndex'), + 0x00209153: ('FD', '1', "Nominal Cardiac Trigger Delay Time", '', 'NominalCardiacTriggerDelayTime'), + 0x00209154: ('FL', '1', "Nominal Cardiac Trigger Time Prior To R-Peak", '', 'NominalCardiacTriggerTimePriorToRPeak'), + 0x00209155: ('FL', '1', "Actual Cardiac Trigger Time Prior To R-Peak", '', 'ActualCardiacTriggerTimePriorToRPeak'), + 0x00209156: ('US', '1', "Frame Acquisition Number", '', 'FrameAcquisitionNumber'), + 0x00209157: ('UL', '1-n', "Dimension Index Values", '', 'DimensionIndexValues'), + 0x00209158: ('LT', '1', "Frame Comments", '', 'FrameComments'), + 0x00209161: ('UI', '1', "Concatenation UID", '', 'ConcatenationUID'), + 0x00209162: ('US', '1', "In-concatenation Number", '', 'InConcatenationNumber'), + 0x00209163: ('US', '1', "In-concatenation Total Number", '', 'InConcatenationTotalNumber'), + 0x00209164: ('UI', '1', "Dimension Organization UID", '', 'DimensionOrganizationUID'), + 0x00209165: ('AT', '1', "Dimension Index Pointer", '', 'DimensionIndexPointer'), + 0x00209167: ('AT', '1', "Functional Group Pointer", '', 'FunctionalGroupPointer'), + 0x00209213: ('LO', '1', "Dimension Index Private Creator", '', 'DimensionIndexPrivateCreator'), + 0x00209221: ('SQ', '1', "Dimension Organization Sequence", '', 'DimensionOrganizationSequence'), + 0x00209222: ('SQ', '1', "Dimension Index Sequence", '', 'DimensionIndexSequence'), + 0x00209228: ('UL', '1', "Concatenation Frame Offset Number", '', 'ConcatenationFrameOffsetNumber'), + 0x00209238: ('LO', '1', "Functional Group Private Creator", '', 'FunctionalGroupPrivateCreator'), + 0x00209241: ('FL', '1', "Nominal Percentage of Cardiac Phase", '', 'NominalPercentageOfCardiacPhase'), + 0x00209245: ('FL', '1', "Nominal Percentage of Respiratory Phase", '', 'NominalPercentageOfRespiratoryPhase'), + 0x00209246: ('FL', '1', "Starting Respiratory Amplitude", '', 'StartingRespiratoryAmplitude'), + 0x00209247: ('CS', '1', "Starting Respiratory Phase", '', 'StartingRespiratoryPhase'), + 0x00209248: ('FL', '1', "Ending Respiratory Amplitude", '', 'EndingRespiratoryAmplitude'), + 0x00209249: ('CS', '1', "Ending Respiratory Phase", '', 'EndingRespiratoryPhase'), + 0x00209250: ('CS', '1', "Respiratory Trigger Type", '', 'RespiratoryTriggerType'), + 0x00209251: ('FD', '1', "R-R Interval Time Nominal", '', 'RRIntervalTimeNominal'), + 0x00209252: ('FD', '1', "Actual Cardiac Trigger Delay Time", '', 'ActualCardiacTriggerDelayTime'), + 0x00209253: ('SQ', '1', "Respiratory Synchronization Sequence", '', 'RespiratorySynchronizationSequence'), + 0x00209254: ('FD', '1', "Respiratory Interval Time", '', 'RespiratoryIntervalTime'), + 0x00209255: ('FD', '1', "Nominal Respiratory Trigger Delay Time", '', 'NominalRespiratoryTriggerDelayTime'), + 0x00209256: ('FD', '1', "Respiratory Trigger Delay Threshold", '', 'RespiratoryTriggerDelayThreshold'), + 0x00209257: ('FD', '1', "Actual Respiratory Trigger Delay Time", '', 'ActualRespiratoryTriggerDelayTime'), + 0x00209301: ('FD', '3', "Image Position (Volume)", '', 'ImagePositionVolume'), + 0x00209302: ('FD', '6', "Image Orientation (Volume)", '', 'ImageOrientationVolume'), + 0x00209307: ('CS', '1', "Ultrasound Acquisition Geometry", '', 'UltrasoundAcquisitionGeometry'), + 0x00209308: ('FD', '3', "Apex Position", '', 'ApexPosition'), + 0x00209309: ('FD', '16', "Volume to Transducer Mapping Matrix", '', 'VolumeToTransducerMappingMatrix'), + 0x0020930A: ('FD', '16', "Volume to Table Mapping Matrix", '', 'VolumeToTableMappingMatrix'), + 0x0020930C: ('CS', '1', "Patient Frame of Reference Source", '', 'PatientFrameOfReferenceSource'), + 0x0020930D: ('FD', '1', "Temporal Position Time Offset", '', 'TemporalPositionTimeOffset'), + 0x0020930E: ('SQ', '1', "Plane Position (Volume) Sequence", '', 'PlanePositionVolumeSequence'), + 0x0020930F: ('SQ', '1', "Plane Orientation (Volume) Sequence", '', 'PlaneOrientationVolumeSequence'), + 0x00209310: ('SQ', '1', "Temporal Position Sequence", '', 'TemporalPositionSequence'), + 0x00209311: ('CS', '1', "Dimension Organization Type", '', 'DimensionOrganizationType'), + 0x00209312: ('UI', '1', "Volume Frame of Reference UID", '', 'VolumeFrameOfReferenceUID'), + 0x00209313: ('UI', '1', "Table Frame of Reference UID", '', 'TableFrameOfReferenceUID'), + 0x00209421: ('LO', '1', "Dimension Description Label", '', 'DimensionDescriptionLabel'), + 0x00209450: ('SQ', '1', "Patient Orientation in Frame Sequence", '', 'PatientOrientationInFrameSequence'), + 0x00209453: ('LO', '1', "Frame Label", '', 'FrameLabel'), + 0x00209518: ('US', '1-n', "Acquisition Index", '', 'AcquisitionIndex'), + 0x00209529: ('SQ', '1', "Contributing SOP Instances Reference Sequence", '', 'ContributingSOPInstancesReferenceSequence'), + 0x00209536: ('US', '1', "Reconstruction Index", '', 'ReconstructionIndex'), + 0x00220001: ('US', '1', "Light Path Filter Pass-Through Wavelength", '', 'LightPathFilterPassThroughWavelength'), + 0x00220002: ('US', '2', "Light Path Filter Pass Band", '', 'LightPathFilterPassBand'), + 0x00220003: ('US', '1', "Image Path Filter Pass-Through Wavelength", '', 'ImagePathFilterPassThroughWavelength'), + 0x00220004: ('US', '2', "Image Path Filter Pass Band", '', 'ImagePathFilterPassBand'), + 0x00220005: ('CS', '1', "Patient Eye Movement Commanded", '', 'PatientEyeMovementCommanded'), + 0x00220006: ('SQ', '1', "Patient Eye Movement Command Code Sequence", '', 'PatientEyeMovementCommandCodeSequence'), + 0x00220007: ('FL', '1', "Spherical Lens Power", '', 'SphericalLensPower'), + 0x00220008: ('FL', '1', "Cylinder Lens Power", '', 'CylinderLensPower'), + 0x00220009: ('FL', '1', "Cylinder Axis", '', 'CylinderAxis'), + 0x0022000A: ('FL', '1', "Emmetropic Magnification", '', 'EmmetropicMagnification'), + 0x0022000B: ('FL', '1', "Intra Ocular Pressure", '', 'IntraOcularPressure'), + 0x0022000C: ('FL', '1', "Horizontal Field of View", '', 'HorizontalFieldOfView'), + 0x0022000D: ('CS', '1', "Pupil Dilated", '', 'PupilDilated'), + 0x0022000E: ('FL', '1', "Degree of Dilation", '', 'DegreeOfDilation'), + 0x00220010: ('FL', '1', "Stereo Baseline Angle", '', 'StereoBaselineAngle'), + 0x00220011: ('FL', '1', "Stereo Baseline Displacement", '', 'StereoBaselineDisplacement'), + 0x00220012: ('FL', '1', "Stereo Horizontal Pixel Offset", '', 'StereoHorizontalPixelOffset'), + 0x00220013: ('FL', '1', "Stereo Vertical Pixel Offset", '', 'StereoVerticalPixelOffset'), + 0x00220014: ('FL', '1', "Stereo Rotation", '', 'StereoRotation'), + 0x00220015: ('SQ', '1', "Acquisition Device Type Code Sequence", '', 'AcquisitionDeviceTypeCodeSequence'), + 0x00220016: ('SQ', '1', "Illumination Type Code Sequence", '', 'IlluminationTypeCodeSequence'), + 0x00220017: ('SQ', '1', "Light Path Filter Type Stack Code Sequence", '', 'LightPathFilterTypeStackCodeSequence'), + 0x00220018: ('SQ', '1', "Image Path Filter Type Stack Code Sequence", '', 'ImagePathFilterTypeStackCodeSequence'), + 0x00220019: ('SQ', '1', "Lenses Code Sequence", '', 'LensesCodeSequence'), + 0x0022001A: ('SQ', '1', "Channel Description Code Sequence", '', 'ChannelDescriptionCodeSequence'), + 0x0022001B: ('SQ', '1', "Refractive State Sequence", '', 'RefractiveStateSequence'), + 0x0022001C: ('SQ', '1', "Mydriatic Agent Code Sequence", '', 'MydriaticAgentCodeSequence'), + 0x0022001D: ('SQ', '1', "Relative Image Position Code Sequence", '', 'RelativeImagePositionCodeSequence'), + 0x0022001E: ('FL', '1', "Camera Angle of View", '', 'CameraAngleOfView'), + 0x00220020: ('SQ', '1', "Stereo Pairs Sequence", '', 'StereoPairsSequence'), + 0x00220021: ('SQ', '1', "Left Image Sequence", '', 'LeftImageSequence'), + 0x00220022: ('SQ', '1', "Right Image Sequence", '', 'RightImageSequence'), + 0x00220030: ('FL', '1', "Axial Length of the Eye", '', 'AxialLengthOfTheEye'), + 0x00220031: ('SQ', '1', "Ophthalmic Frame Location Sequence", '', 'OphthalmicFrameLocationSequence'), + 0x00220032: ('FL', '2-2n', "Reference Coordinates", '', 'ReferenceCoordinates'), + 0x00220035: ('FL', '1', "Depth Spatial Resolution", '', 'DepthSpatialResolution'), + 0x00220036: ('FL', '1', "Maximum Depth Distortion", '', 'MaximumDepthDistortion'), + 0x00220037: ('FL', '1', "Along-scan Spatial Resolution", '', 'AlongScanSpatialResolution'), + 0x00220038: ('FL', '1', "Maximum Along-scan Distortion", '', 'MaximumAlongScanDistortion'), + 0x00220039: ('CS', '1', "Ophthalmic Image Orientation", '', 'OphthalmicImageOrientation'), + 0x00220041: ('FL', '1', "Depth of Transverse Image", '', 'DepthOfTransverseImage'), + 0x00220042: ('SQ', '1', "Mydriatic Agent Concentration Units Sequence", '', 'MydriaticAgentConcentrationUnitsSequence'), + 0x00220048: ('FL', '1', "Across-scan Spatial Resolution", '', 'AcrossScanSpatialResolution'), + 0x00220049: ('FL', '1', "Maximum Across-scan Distortion", '', 'MaximumAcrossScanDistortion'), + 0x0022004E: ('DS', '1', "Mydriatic Agent Concentration", '', 'MydriaticAgentConcentration'), + 0x00220055: ('FL', '1', "Illumination Wave Length", '', 'IlluminationWaveLength'), + 0x00220056: ('FL', '1', "Illumination Power", '', 'IlluminationPower'), + 0x00220057: ('FL', '1', "Illumination Bandwidth", '', 'IlluminationBandwidth'), + 0x00220058: ('SQ', '1', "Mydriatic Agent Sequence", '', 'MydriaticAgentSequence'), + 0x00221007: ('SQ', '1', "Ophthalmic Axial Measurements Right Eye Sequence", '', 'OphthalmicAxialMeasurementsRightEyeSequence'), + 0x00221008: ('SQ', '1', "Ophthalmic Axial Measurements Left Eye Sequence", '', 'OphthalmicAxialMeasurementsLeftEyeSequence'), + 0x00221010: ('CS', '1', "Ophthalmic Axial Length Measurements Type", '', 'OphthalmicAxialLengthMeasurementsType'), + 0x00221019: ('FL', '1', "Ophthalmic Axial Length", '', 'OphthalmicAxialLength'), + 0x00221024: ('SQ', '1', "Lens Status Code Sequence", '', 'LensStatusCodeSequence'), + 0x00221025: ('SQ', '1', "Vitreous Status Code Sequence", '', 'VitreousStatusCodeSequence'), + 0x00221028: ('SQ', '1', "IOL Formula Code Sequence", '', 'IOLFormulaCodeSequence'), + 0x00221029: ('LO', '1', "IOL Formula Detail", '', 'IOLFormulaDetail'), + 0x00221033: ('FL', '1', "Keratometer Index", '', 'KeratometerIndex'), + 0x00221035: ('SQ', '1', "Source of Ophthalmic Axial Length Code Sequence", '', 'SourceOfOphthalmicAxialLengthCodeSequence'), + 0x00221037: ('FL', '1', "Target Refraction", '', 'TargetRefraction'), + 0x00221039: ('CS', '1', "Refractive Procedure Occurred", '', 'RefractiveProcedureOccurred'), + 0x00221040: ('SQ', '1', "Refractive Surgery Type Code Sequence", '', 'RefractiveSurgeryTypeCodeSequence'), + 0x00221044: ('SQ', '1', "Ophthalmic Ultrasound Axial Measurements Type Code Sequence", '', 'OphthalmicUltrasoundAxialMeasurementsTypeCodeSequence'), + 0x00221050: ('SQ', '1', "Ophthalmic Axial Length Measurements Sequence", '', 'OphthalmicAxialLengthMeasurementsSequence'), + 0x00221053: ('FL', '1', "IOL Power", '', 'IOLPower'), + 0x00221054: ('FL', '1', "Predicted Refractive Error", '', 'PredictedRefractiveError'), + 0x00221059: ('FL', '1', "Ophthalmic Axial Length Velocity", '', 'OphthalmicAxialLengthVelocity'), + 0x00221065: ('LO', '1', "Lens Status Description", '', 'LensStatusDescription'), + 0x00221066: ('LO', '1', "Vitreous Status Description", '', 'VitreousStatusDescription'), + 0x00221090: ('SQ', '1', "IOL Power Sequence", '', 'IOLPowerSequence'), + 0x00221092: ('SQ', '1', "Lens Constant Sequence", '', 'LensConstantSequence'), + 0x00221093: ('LO', '1', "IOL Manufacturer", '', 'IOLManufacturer'), + 0x00221094: ('LO', '1', "Lens Constant Description", '', 'LensConstantDescription'), + 0x00221096: ('SQ', '1', "Keratometry Measurement Type Code Sequence", '', 'KeratometryMeasurementTypeCodeSequence'), + 0x00221100: ('SQ', '1', "Referenced Ophthalmic Axial Measurements Sequence", '', 'ReferencedOphthalmicAxialMeasurementsSequence'), + 0x00221101: ('SQ', '1', "Ophthalmic Axial Length Measurements Segment Name Code Sequence", '', 'OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence'), + 0x00221103: ('SQ', '1', "Refractive Error Before Refractive Surgery Code Sequence", '', 'RefractiveErrorBeforeRefractiveSurgeryCodeSequence'), + 0x00221121: ('FL', '1', "IOL Power For Exact Emmetropia", '', 'IOLPowerForExactEmmetropia'), + 0x00221122: ('FL', '1', "IOL Power For Exact Target Refraction", '', 'IOLPowerForExactTargetRefraction'), + 0x00221125: ('SQ', '1', "Anterior Chamber Depth Definition Code Sequence", '', 'AnteriorChamberDepthDefinitionCodeSequence'), + 0x00221130: ('FL', '1', "Lens Thickness", '', 'LensThickness'), + 0x00221131: ('FL', '1', "Anterior Chamber Depth", '', 'AnteriorChamberDepth'), + 0x00221132: ('SQ', '1', "Source of Lens Thickness Data Code Sequence", '', 'SourceOfLensThicknessDataCodeSequence'), + 0x00221133: ('SQ', '1', "Source of Anterior Chamber Depth Data Code Sequence", '', 'SourceOfAnteriorChamberDepthDataCodeSequence'), + 0x00221135: ('SQ', '1', "Source of Refractive Error Data Code Sequence", '', 'SourceOfRefractiveErrorDataCodeSequence'), + 0x00221140: ('CS', '1', "Ophthalmic Axial Length Measurement Modified", '', 'OphthalmicAxialLengthMeasurementModified'), + 0x00221150: ('SQ', '1', "Ophthalmic Axial Length Data Source Code Sequence", '', 'OphthalmicAxialLengthDataSourceCodeSequence'), + 0x00221153: ('SQ', '1', "Ophthalmic Axial Length Acquisition Method Code Sequence", '', 'OphthalmicAxialLengthAcquisitionMethodCodeSequence'), + 0x00221155: ('FL', '1', "Signal to Noise Ratio", '', 'SignalToNoiseRatio'), + 0x00221159: ('LO', '1', "Ophthalmic Axial Length Data Source Description", '', 'OphthalmicAxialLengthDataSourceDescription'), + 0x00221210: ('SQ', '1', "Ophthalmic Axial Length Measurements Total Length Sequence", '', 'OphthalmicAxialLengthMeasurementsTotalLengthSequence'), + 0x00221211: ('SQ', '1', "Ophthalmic Axial Length Measurements Segmental Length Sequence", '', 'OphthalmicAxialLengthMeasurementsSegmentalLengthSequence'), + 0x00221212: ('SQ', '1', "Ophthalmic Axial Length Measurements Length Summation Sequence", '', 'OphthalmicAxialLengthMeasurementsLengthSummationSequence'), + 0x00221220: ('SQ', '1', "Ultrasound Ophthalmic Axial Length Measurements Sequence", '', 'UltrasoundOphthalmicAxialLengthMeasurementsSequence'), + 0x00221225: ('SQ', '1', "Optical Ophthalmic Axial Length Measurements Sequence", '', 'OpticalOphthalmicAxialLengthMeasurementsSequence'), + 0x00221230: ('SQ', '1', "Ultrasound Selected Ophthalmic Axial Length Sequence", '', 'UltrasoundSelectedOphthalmicAxialLengthSequence'), + 0x00221250: ('SQ', '1', "Ophthalmic Axial Length Selection Method Code Sequence", '', 'OphthalmicAxialLengthSelectionMethodCodeSequence'), + 0x00221255: ('SQ', '1', "Optical Selected Ophthalmic Axial Length Sequence", '', 'OpticalSelectedOphthalmicAxialLengthSequence'), + 0x00221257: ('SQ', '1', "Selected Segmental Ophthalmic Axial Length Sequence", '', 'SelectedSegmentalOphthalmicAxialLengthSequence'), + 0x00221260: ('SQ', '1', "Selected Total Ophthalmic Axial Length Sequence", '', 'SelectedTotalOphthalmicAxialLengthSequence'), + 0x00221262: ('SQ', '1', "Ophthalmic Axial Length Quality Metric Sequence", '', 'OphthalmicAxialLengthQualityMetricSequence'), + 0x00221273: ('LO', '1', "Ophthalmic Axial Length Quality Metric Type Description", '', 'OphthalmicAxialLengthQualityMetricTypeDescription'), + 0x00221300: ('SQ', '1', "Intraocular Lens Calculations Right Eye Sequence", '', 'IntraocularLensCalculationsRightEyeSequence'), + 0x00221310: ('SQ', '1', "Intraocular Lens Calculations Left Eye Sequence", '', 'IntraocularLensCalculationsLeftEyeSequence'), + 0x00221330: ('SQ', '1', "Referenced Ophthalmic Axial Length Measurement QC ImageSequence", '', 'ReferencedOphthalmicAxialLengthMeasurementQCImage'), + 0x00240010: ('FL', '1', "Visual Field Horizontal Extent", '', 'VisualFieldHorizontalExtent'), + 0x00240011: ('FL', '1', "Visual Field Vertical Extent", '', 'VisualFieldVerticalExtent'), + 0x00240012: ('CS', '1', "Visual Field Shape", '', 'VisualFieldShape'), + 0x00240016: ('SQ', '1', "Screening Test Mode Code Sequence", '', 'ScreeningTestModeCodeSequence'), + 0x00240018: ('FL', '1', "Maximum Stimulus Luminance", '', 'MaximumStimulusLuminance'), + 0x00240020: ('FL', '1', "Background Luminance", '', 'BackgroundLuminance'), + 0x00240021: ('SQ', '1', "Stimulus Color Code Sequence", '', 'StimulusColorCodeSequence'), + 0x00240024: ('SQ', '1', "Background Illumination Color Code Sequence", '', 'BackgroundIlluminationColorCodeSequence'), + 0x00240025: ('FL', '1', "Stimulus Area", '', 'StimulusArea'), + 0x00240028: ('FL', '1', "Stimulus Presentation Time", '', 'StimulusPresentationTime'), + 0x00240032: ('SQ', '1', "Fixation Sequence", '', 'FixationSequence'), + 0x00240033: ('SQ', '1', "Fixation Monitoring Code Sequence", '', 'FixationMonitoringCodeSequence'), + 0x00240034: ('SQ', '1', "Visual Field Catch Trial Sequence", '', 'VisualFieldCatchTrialSequence'), + 0x00240035: ('US', '1', "Fixation Checked Quantity", '', 'FixationCheckedQuantity'), + 0x00240036: ('US', '1', "Patient Not Properly Fixated Quantity", '', 'PatientNotProperlyFixatedQuantity'), + 0x00240037: ('CS', '1', "Presented Stimuli Data Flag", '', 'PresentedDataFlag'), + 0x00240038: ('US', '1', "Number of Visual Stimuli", '', 'NumberOfVisualStimuli'), + 0x00240039: ('CS', '1', "Excessive Fixation Losses Data Flag", '', 'ExcessiveFixationLossesDataFlag'), + 0x00240040: ('CS', '1', "Excessive Fixation Losses", '', 'ExcessiveFixationLosses'), + 0x00240042: ('US', '1', "Stimuli Retesting", '', 'StimuliRetesting'), + 0x00240044: ('LT', '1', "Comments on Patient's Performance of Visual Field", '', 'CommentsOnPatientPerformanceOfVisualField'), + 0x00240045: ('CS', '1', "False Negatives Estimate Flag", '', 'FalseNegativesEstimateFlag'), + 0x00240046: ('FL', '1', "False Negatives Estimate", '', 'FalseNegativesEstimate'), + 0x00240048: ('US', '1', "Negative Catch Trials", '', 'NegativeCatchTrials'), + 0x00240050: ('US', '1', "False Negatives", '', 'FalseNegatives'), + 0x00240051: ('CS', '1', "Excessive False Negatives Data Flag", '', 'ExcessiveFalseNegativesDataFlag'), + 0x00240052: ('CS', '1', "Excessive False Negatives", '', 'ExcessiveFalseNegatives'), + 0x00240053: ('CS', '1', "False Positives Estimate Flag", '', 'FalsePositivesEstimateFlag'), + 0x00240054: ('FL', '1', "False Positives Estimate", '', 'FalsePositivesEstimate'), + 0x00240055: ('CS', '1', "Catch Trials Data Flag", '', 'CatchTrialsDataFlag'), + 0x00240056: ('US', '1', "Positive Catch Trials", '', 'PositiveCatchTrials'), + 0x00240057: ('CS', '1', "Test Point Normals Data Flag", '', 'TestPointNormalsDataFlag'), + 0x00240058: ('SQ', '1', "Test Point Normals Sequence", '', 'TestPointNormalsSequence'), + 0x00240059: ('CS', '1', "Global Deviation Probability Normals Flag", '', 'GlobalDeviationProbabilityNormalsFlag'), + 0x00240060: ('US', '1', "False Positives", '', 'FalsePositives'), + 0x00240061: ('CS', '1', "Excessive False Positives Data Flag", '', 'ExcessiveFalsePositivesDataFlag'), + 0x00240062: ('CS', '1', "Excessive False Positives", '', 'ExcessiveFalsePositives'), + 0x00240063: ('CS', '1', "Visual Field Test Normals Flag", '', 'VisualFieldTestNormalsFlag'), + 0x00240064: ('SQ', '1', "Results Normals Sequence", '', 'ResultsNormalsSequence'), + 0x00240065: ('SQ', '1', "Age Corrected Sensitivity Deviation Algorithm Sequence", '', 'AgeCorrectedSensitivityDeviationAlgorithmSequence'), + 0x00240066: ('FL', '1', "Global Deviation From Normal", '', 'GlobalDeviationFromNormal'), + 0x00240067: ('SQ', '1', "Generalized Defect Sensitivity Deviation Algorithm Sequence", '', 'GeneralizedDefectSensitivityDeviationAlgorithmSequence'), + 0x00240068: ('FL', '1', "Localized Deviation from Normal", '', 'LocalizedDeviationfromNormal'), + 0x00240069: ('LO', '1', "Patient Reliability Indicator", '', 'PatientReliabilityIndicator'), + 0x00240070: ('FL', '1', "Visual Field Mean Sensitivity", '', 'VisualFieldMeanSensitivity'), + 0x00240071: ('FL', '1', "Global Deviation Probability", '', 'GlobalDeviationProbability'), + 0x00240072: ('CS', '1', "Local Deviation Probability Normals Flag", '', 'LocalDeviationProbabilityNormalsFlag'), + 0x00240073: ('FL', '1', "Localized Deviation Probability", '', 'LocalizedDeviationProbability'), + 0x00240074: ('CS', '1', "Short Term Fluctuation Calculated", '', 'ShortTermFluctuationCalculated'), + 0x00240075: ('FL', '1', "Short Term Fluctuation", '', 'ShortTermFluctuation'), + 0x00240076: ('CS', '1', "Short Term Fluctuation Probability Calculated", '', 'ShortTermFluctuationProbabilityCalculated'), + 0x00240077: ('FL', '1', "Short Term Fluctuation Probability", '', 'ShortTermFluctuationProbability'), + 0x00240078: ('CS', '1', "Corrected Localized Deviation From Normal Calculated", '', 'CorrectedLocalizedDeviationFromNormalCalculated'), + 0x00240079: ('FL', '1', "Corrected Localized Deviation From Normal", '', 'CorrectedLocalizedDeviationFromNormal'), + 0x00240080: ('CS', '1', "Corrected Localized Deviation From Normal Probability Calculated", '', 'CorrectedLocalizedDeviationFromNormalProbabilityCalculated'), + 0x00240081: ('FL', '1', "Corrected Localized Deviation From Normal Probability", '', 'CorrectedLocalizedDeviationFromNormalProbability'), + 0x00240083: ('SQ', '1', "Global Deviation Sequence", '', 'GlobalDeviation'), + 0x00240085: ('SQ', '1', "Localized Deviation Sequence", '', 'LocalizedDeviation'), + 0x00240086: ('CS', '1', "Foveal Sensitivity Measured", '', 'FovealSensitivityMeasured'), + 0x00240087: ('FL', '1', "Foveal Sensitivity", '', 'FovealSensitivity'), + 0x00240088: ('FL', '1', "Visual Field Test Duration", '', 'VisualFieldTestDuration'), + 0x00240089: ('SQ', '1', "Visual Field Test Point Sequence", '', 'VisualFieldTestPointSequence'), + 0x00240090: ('FL', '1', "Visual Field Test Point X-Coordinate", '', 'VisualFieldTestPointXCoordinate'), + 0x00240091: ('FL', '1', "Visual Field Test Point Y-Coordinate", '', 'VisualFieldTestPointYCoordinate'), + 0x00240092: ('FL', '1', "Age Corrected Sensitivity Deviation Value", '', 'AgeCorrectedSensitivityDeviationValue'), + 0x00240093: ('CS', '1', "Stimulus Results", '', 'StimulusResults'), + 0x00240094: ('FL', '1', "Sensitivity Value", '', 'SensitivityValue'), + 0x00240095: ('CS', '1', "Retest Stimulus Seen", '', 'RetestStimulusSeen'), + 0x00240096: ('FL', '1', "Retest Sensitivity Value", '', 'RetestSensitivityValue'), + 0x00240097: ('SQ', '1', "Visual Field Test Point Normals Sequence", '', 'VisualFieldTestPointNormalsSequence'), + 0x00240098: ('FL', '1', "Quantified Defect", '', 'QuantifiedDefect'), + 0x00240100: ('FL', '1', "Age Corrected Sensitivity Deviation Probability Value", '', 'AgeCorrectedSensitivityDeviationProbabilityValue'), + 0x00240102: ('CS', '1', "Generalized Defect Corrected Sensitivity Deviation Flag", '', 'GeneralizedDefectCorrectedSensitivityDeviationFlag'), + 0x00240103: ('FL', '1', "Generalized Defect Corrected Sensitivity Deviation Value", '', 'GeneralizedDefectCorrectedSensitivityDeviationValue'), + 0x00240104: ('FL', '1', "Generalized Defect Corrected Sensitivity Deviation Probability Value", '', 'GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue'), + 0x00240105: ('FL', '1', "Minimum Sensitivity Value", '', 'MinimumSensitivityValue'), + 0x00240106: ('CS', '1', "Blind Spot Localized", '', 'BlindSpotLocalized'), + 0x00240107: ('FL', '1', "Blind Spot X-Coordinate", '', 'BlindSpotXCoordinate'), + 0x00240108: ('FL', '1', "Blind Spot Y-Coordinate", '', 'BlindSpotYCoordinate'), + 0x00240110: ('SQ', '1', "Visual Acuity Measurement Sequence", '', 'VisualAcuityMeasurementSequence'), + 0x00240112: ('SQ', '1', "Refractive Parameters Used on Patient Sequence", '', 'RefractiveParametersUsedOnPatientSequence'), + 0x00240113: ('CS', '1', "Measurement Laterality", '', 'MeasurementLaterality'), + 0x00240114: ('SQ', '1', "Ophthalmic Patient Clinical Information Left Eye Sequence", '', 'OphthalmicPatientClinicalInformationLeftEyeSequence'), + 0x00240115: ('SQ', '1', "Ophthalmic Patient Clinical Information Right Eye Sequence", '', 'OphthalmicPatientClinicalInformationRightEyeSequence'), + 0x00240117: ('CS', '1', "Foveal Point Normative Data Flag", '', 'FovealPointNormativeDataFlag'), + 0x00240118: ('FL', '1', "Foveal Point Probability Value", '', 'FovealPointProbabilityValue'), + 0x00240120: ('CS', '1', "Screening Baseline Measured", '', 'ScreeningBaselineMeasured'), + 0x00240122: ('SQ', '1', "Screening Baseline Measured Sequence", '', 'ScreeningBaselineMeasuredSequence'), + 0x00240124: ('CS', '1', "Screening Baseline Type", '', 'ScreeningBaselineType'), + 0x00240126: ('FL', '1', "Screening Baseline Value", '', 'ScreeningBaselineValue'), + 0x00240202: ('LO', '1', "Algorithm Source", '', 'AlgorithmSource'), + 0x00240306: ('LO', '1', "Data Set Name", '', 'DataSetName'), + 0x00240307: ('LO', '1', "Data Set Version", '', 'DataSetVersion'), + 0x00240308: ('LO', '1', "Data Set Source", '', 'DataSetSource'), + 0x00240309: ('LO', '1', "Data Set Description", '', 'DataSetDescription'), + 0x00240317: ('SQ', '1', "Visual Field Test Reliability Global Index Sequence", '', 'VisualFieldTestReliabilityGlobalIndexSequence'), + 0x00240320: ('SQ', '1', "Visual Field Global Results Index Sequence", '', 'VisualFieldGlobalResultsIndexSequence'), + 0x00240325: ('SQ', '1', "Data Observation Sequence", '', 'DataObservationSequence'), + 0x00240338: ('CS', '1', "Index Normals Flag", '', 'IndexNormalsFlag'), + 0x00240341: ('FL', '1', "Index Probability", '', 'IndexProbability'), + 0x00240344: ('SQ', '1', "Index Probability Sequence", '', 'IndexProbabilitySequence'), + 0x00280002: ('US', '1', "Samples per Pixel", '', 'SamplesPerPixel'), + 0x00280003: ('US', '1', "Samples per Pixel Used", '', 'SamplesPerPixelUsed'), + 0x00280004: ('CS', '1', "Photometric Interpretation", '', 'PhotometricInterpretation'), + 0x00280005: ('US', '1', "Image Dimensions", 'Retired', 'ImageDimensions'), + 0x00280006: ('US', '1', "Planar Configuration", '', 'PlanarConfiguration'), + 0x00280008: ('IS', '1', "Number of Frames", '', 'NumberOfFrames'), + 0x00280009: ('AT', '1-n', "Frame Increment Pointer", '', 'FrameIncrementPointer'), + 0x0028000A: ('AT', '1-n', "Frame Dimension Pointer", '', 'FrameDimensionPointer'), + 0x00280010: ('US', '1', "Rows", '', 'Rows'), + 0x00280011: ('US', '1', "Columns", '', 'Columns'), + 0x00280012: ('US', '1', "Planes", 'Retired', 'Planes'), + 0x00280014: ('US', '1', "Ultrasound Color Data Present", '', 'UltrasoundColorDataPresent'), + 0x00280020: ('OB', '1', "Retired-blank", 'Retired', ''), + 0x00280030: ('DS', '2', "Pixel Spacing", '', 'PixelSpacing'), + 0x00280031: ('DS', '2', "Zoom Factor", '', 'ZoomFactor'), + 0x00280032: ('DS', '2', "Zoom Center", '', 'ZoomCenter'), + 0x00280034: ('IS', '2', "Pixel Aspect Ratio", '', 'PixelAspectRatio'), + 0x00280040: ('CS', '1', "Image Format", 'Retired', 'ImageFormat'), + 0x00280050: ('LO', '1-n', "Manipulated Image", 'Retired', 'ManipulatedImage'), + 0x00280051: ('CS', '1-n', "Corrected Image", '', 'CorrectedImage'), + 0x0028005F: ('LO', '1', "Compression Recognition Code", 'Retired', 'CompressionRecognitionCode'), + 0x00280060: ('CS', '1', "Compression Code", 'Retired', 'CompressionCode'), + 0x00280061: ('SH', '1', "Compression Originator", 'Retired', 'CompressionOriginator'), + 0x00280062: ('LO', '1', "Compression Label", 'Retired', 'CompressionLabel'), + 0x00280063: ('SH', '1', "Compression Description", 'Retired', 'CompressionDescription'), + 0x00280065: ('CS', '1-n', "Compression Sequence", 'Retired', 'CompressionSequence'), + 0x00280066: ('AT', '1-n', "Compression Step Pointers", 'Retired', 'CompressionStepPointers'), + 0x00280068: ('US', '1', "Repeat Interval", 'Retired', 'RepeatInterval'), + 0x00280069: ('US', '1', "Bits Grouped", 'Retired', 'BitsGrouped'), + 0x00280070: ('US', '1-n', "Perimeter Table", 'Retired', 'PerimeterTable'), + 0x00280071: ('US or SS', '1', "Perimeter Value", 'Retired', 'PerimeterValue'), + 0x00280080: ('US', '1', "Predictor Rows", 'Retired', 'PredictorRows'), + 0x00280081: ('US', '1', "Predictor Columns", 'Retired', 'PredictorColumns'), + 0x00280082: ('US', '1-n', "Predictor Constants", 'Retired', 'PredictorConstants'), + 0x00280090: ('CS', '1', "Blocked Pixels", 'Retired', 'BlockedPixels'), + 0x00280091: ('US', '1', "Block Rows", 'Retired', 'BlockRows'), + 0x00280092: ('US', '1', "Block Columns", 'Retired', 'BlockColumns'), + 0x00280093: ('US', '1', "Row Overlap", 'Retired', 'RowOverlap'), + 0x00280094: ('US', '1', "Column Overlap", 'Retired', 'ColumnOverlap'), + 0x00280100: ('US', '1', "Bits Allocated", '', 'BitsAllocated'), + 0x00280101: ('US', '1', "Bits Stored", '', 'BitsStored'), + 0x00280102: ('US', '1', "High Bit", '', 'HighBit'), + 0x00280103: ('US', '1', "Pixel Representation", '', 'PixelRepresentation'), + 0x00280104: ('US or SS', '1', "Smallest Valid Pixel Value", 'Retired', 'SmallestValidPixelValue'), + 0x00280105: ('US or SS', '1', "Largest Valid Pixel Value", 'Retired', 'LargestValidPixelValue'), + 0x00280106: ('US or SS', '1', "Smallest Image Pixel Value", '', 'SmallestImagePixelValue'), + 0x00280107: ('US or SS', '1', "Largest Image Pixel Value", '', 'LargestImagePixelValue'), + 0x00280108: ('US or SS', '1', "Smallest Pixel Value in Series", '', 'SmallestPixelValueInSeries'), + 0x00280109: ('US or SS', '1', "Largest Pixel Value in Series", '', 'LargestPixelValueInSeries'), + 0x00280110: ('US or SS', '1', "Smallest Image Pixel Value in Plane", 'Retired', 'SmallestImagePixelValueInPlane'), + 0x00280111: ('US or SS', '1', "Largest Image Pixel Value in Plane", 'Retired', 'LargestImagePixelValueInPlane'), + 0x00280120: ('US or SS', '1', "Pixel Padding Value", '', 'PixelPaddingValue'), + 0x00280121: ('US or SS', '1', "Pixel Padding Range Limit", '', 'PixelPaddingRangeLimit'), + 0x00280200: ('US', '1', "Image Location", 'Retired', 'ImageLocation'), + 0x00280300: ('CS', '1', "Quality Control Image", '', 'QualityControlImage'), + 0x00280301: ('CS', '1', "Burned In Annotation", '', 'BurnedInAnnotation'), + 0x00280302: ('CS', '1', "Recognizable Visual Features", '', 'RecognizableVisualFeatures'), + 0x00280303: ('CS', '1', "Longitudinal Temporal Information Modified", '', 'LongitudinalTemporalInformationModified'), + 0x00280400: ('LO', '1', "Transform Label", 'Retired', 'TransformLabel'), + 0x00280401: ('LO', '1', "Transform Version Number", 'Retired', 'TransformVersionNumber'), + 0x00280402: ('US', '1', "Number of Transform Steps", 'Retired', 'NumberOfTransformSteps'), + 0x00280403: ('LO', '1-n', "Sequence of Compressed Data", 'Retired', 'SequenceOfCompressedData'), + 0x00280404: ('AT', '1-n', "Details of Coefficients", 'Retired', 'DetailsOfCoefficients'), + 0x00280700: ('LO', '1', "DCT Label", 'Retired', 'DCTLabel'), + 0x00280701: ('CS', '1-n', "Data Block Description", 'Retired', 'DataBlockDescription'), + 0x00280702: ('AT', '1-n', "Data Block", 'Retired', 'DataBlock'), + 0x00280710: ('US', '1', "Normalization Factor Format", 'Retired', 'NormalizationFactorFormat'), + 0x00280720: ('US', '1', "Zonal Map Number Format", 'Retired', 'ZonalMapNumberFormat'), + 0x00280721: ('AT', '1-n', "Zonal Map Location", 'Retired', 'ZonalMapLocation'), + 0x00280722: ('US', '1', "Zonal Map Format", 'Retired', 'ZonalMapFormat'), + 0x00280730: ('US', '1', "Adaptive Map Format", 'Retired', 'AdaptiveMapFormat'), + 0x00280740: ('US', '1', "Code Number Format", 'Retired', 'CodeNumberFormat'), + 0x00280A02: ('CS', '1', "Pixel Spacing Calibration Type", '', 'PixelSpacingCalibrationType'), + 0x00280A04: ('LO', '1', "Pixel Spacing Calibration Description", '', 'PixelSpacingCalibrationDescription'), + 0x00281040: ('CS', '1', "Pixel Intensity Relationship", '', 'PixelIntensityRelationship'), + 0x00281041: ('SS', '1', "Pixel Intensity Relationship Sign", '', 'PixelIntensityRelationshipSign'), + 0x00281050: ('DS', '1-n', "Window Center", '', 'WindowCenter'), + 0x00281051: ('DS', '1-n', "Window Width", '', 'WindowWidth'), + 0x00281052: ('DS', '1', "Rescale Intercept", '', 'RescaleIntercept'), + 0x00281053: ('DS', '1', "Rescale Slope", '', 'RescaleSlope'), + 0x00281054: ('LO', '1', "Rescale Type", '', 'RescaleType'), + 0x00281055: ('LO', '1-n', "Window Center & Width Explanation", '', 'WindowCenterWidthExplanation'), + 0x00281056: ('CS', '1', "VOI LUT Function", '', 'VOILUTFunction'), + 0x00281080: ('CS', '1', "Gray Scale", 'Retired', 'GrayScale'), + 0x00281090: ('CS', '1', "Recommended Viewing Mode", '', 'RecommendedViewingMode'), + 0x00281100: ('US or SS', '3', "Gray Lookup Table Descriptor", 'Retired', 'GrayLookupTableDescriptor'), + 0x00281101: ('US or SS', '3', "Red Palette Color Lookup Table Descriptor", '', 'RedPaletteColorLookupTableDescriptor'), + 0x00281102: ('US or SS', '3', "Green Palette Color Lookup Table Descriptor", '', 'GreenPaletteColorLookupTableDescriptor'), + 0x00281103: ('US or SS', '3', "Blue Palette Color Lookup Table Descriptor", '', 'BluePaletteColorLookupTableDescriptor'), + 0x00281104: ('US', '3', "Alpha Palette Color Lookup Table Descriptor", '', 'AlphaPaletteColorLookupTableDescriptor'), + 0x00281111: ('US or SS', '4', "Large Red Palette Color Lookup Table Descriptor", 'Retired', 'LargeRedPaletteColorLookupTableDescriptor'), + 0x00281112: ('US or SS', '4', "Large Green Palette Color Lookup Table Descriptor", 'Retired', 'LargeGreenPaletteColorLookupTableDescriptor'), + 0x00281113: ('US or SS', '4', "Large Blue Palette Color Lookup Table Descriptor", 'Retired', 'LargeBluePaletteColorLookupTableDescriptor'), + 0x00281199: ('UI', '1', "Palette Color Lookup Table UID", '', 'PaletteColorLookupTableUID'), + 0x00281200: ('US or SS or OW', '1-n 1', "Gray Lookup Table Data", 'Retired', 'GrayLookupTableData'), + 0x00281201: ('OW', '1', "Red Palette Color Lookup Table Data", '', 'RedPaletteColorLookupTableData'), + 0x00281202: ('OW', '1', "Green Palette Color Lookup Table Data", '', 'GreenPaletteColorLookupTableData'), + 0x00281203: ('OW', '1', "Blue Palette Color Lookup Table Data", '', 'BluePaletteColorLookupTableData'), + 0x00281204: ('OW', '1', "Alpha Palette Color Lookup Table Data", '', 'AlphaPaletteColorLookupTableData'), + 0x00281211: ('OW', '1', "Large Red Palette Color Lookup Table Data", 'Retired', 'LargeRedPaletteColorLookupTableData'), + 0x00281212: ('OW', '1', "Large Green Palette Color Lookup Table Data", 'Retired', 'LargeGreenPaletteColorLookupTableData'), + 0x00281213: ('OW', '1', "Large Blue Palette Color Lookup Table Data", 'Retired', 'LargeBluePaletteColorLookupTableData'), + 0x00281214: ('UI', '1', "Large Palette Color Lookup Table UID", 'Retired', 'LargePaletteColorLookupTableUID'), + 0x00281221: ('OW', '1', "Segmented Red Palette Color Lookup Table Data", '', 'SegmentedRedPaletteColorLookupTableData'), + 0x00281222: ('OW', '1', "Segmented Green Palette Color Lookup Table Data", '', 'SegmentedGreenPaletteColorLookupTableData'), + 0x00281223: ('OW', '1', "Segmented Blue Palette Color Lookup Table Data", '', 'SegmentedBluePaletteColorLookupTableData'), + 0x00281300: ('CS', '1', "Breast Implant Present", '', 'BreastImplantPresent'), + 0x00281350: ('CS', '1', "Partial View", '', 'PartialView'), + 0x00281351: ('ST', '1', "Partial View Description", '', 'PartialViewDescription'), + 0x00281352: ('SQ', '1', "Partial View Code Sequence", '', 'PartialViewCodeSequence'), + 0x0028135A: ('CS', '1', "Spatial Locations Preserved", '', 'SpatialLocationsPreserved'), + 0x00281401: ('SQ', '1', "Data Frame Assignment Sequence", '', 'DataFrameAssignmentSequence'), + 0x00281402: ('CS', '1', "Data Path Assignment", '', 'DataPathAssignment'), + 0x00281403: ('US', '1', "Bits Mapped to Color Lookup Table", '', 'BitsMappedToColorLookupTable'), + 0x00281404: ('SQ', '1', "Blending LUT 1 Sequence", '', 'BlendingLUT1Sequence'), + 0x00281405: ('CS', '1', "Blending LUT 1 Transfer Function", '', 'BlendingLUT1TransferFunction'), + 0x00281406: ('FD', '1', "Blending Weight Constant", '', 'BlendingWeightConstant'), + 0x00281407: ('US', '3', "Blending Lookup Table Descriptor", '', 'BlendingLookupTableDescriptor'), + 0x00281408: ('OW', '1', "Blending Lookup Table Data", '', 'BlendingLookupTableData'), + 0x0028140B: ('SQ', '1', "Enhanced Palette Color Lookup Table Sequence", '', 'EnhancedPaletteColorLookupTableSequence'), + 0x0028140C: ('SQ', '1', "Blending LUT 2 Sequence", '', 'BlendingLUT2Sequence'), + 0x0028140D: ('CS', '1', "Blending LUT 2 Transfer Function", '', 'BlendingLUT2TransferFunction'), + 0x0028140E: ('CS', '1', "Data Path ID", '', 'DataPathID'), + 0x0028140F: ('CS', '1', "RGB LUT Transfer Function", '', 'RGBLUTTransferFunction'), + 0x00281410: ('CS', '1', "Alpha LUT Transfer Function", '', 'AlphaLUTTransferFunction'), + 0x00282000: ('OB', '1', "ICC Profile", '', 'ICCProfile'), + 0x00282110: ('CS', '1', "Lossy Image Compression", '', 'LossyImageCompression'), + 0x00282112: ('DS', '1-n', "Lossy Image Compression Ratio", '', 'LossyImageCompressionRatio'), + 0x00282114: ('CS', '1-n', "Lossy Image Compression Method", '', 'LossyImageCompressionMethod'), + 0x00283000: ('SQ', '1', "Modality LUT Sequence", '', 'ModalityLUTSequence'), + 0x00283002: ('US or SS', '3', "LUT Descriptor", '', 'LUTDescriptor'), + 0x00283003: ('LO', '1', "LUT Explanation", '', 'LUTExplanation'), + 0x00283004: ('LO', '1', "Modality LUT Type", '', 'ModalityLUTType'), + 0x00283006: ('US or OW', '1-n 1', "LUT Data", '', 'LUTData'), + 0x00283010: ('SQ', '1', "VOI LUT Sequence", '', 'VOILUTSequence'), + 0x00283110: ('SQ', '1', "Softcopy VOI LUT Sequence", '', 'SoftcopyVOILUTSequence'), + 0x00284000: ('LT', '1', "Image Presentation Comments", 'Retired', 'ImagePresentationComments'), + 0x00285000: ('SQ', '1', "Bi-Plane Acquisition Sequence", 'Retired', 'BiPlaneAcquisitionSequence'), + 0x00286010: ('US', '1', "Representative Frame Number", '', 'RepresentativeFrameNumber'), + 0x00286020: ('US', '1-n', "Frame Numbers of Interest (FOI)", '', 'FrameNumbersOfInterest'), + 0x00286022: ('LO', '1-n', "Frame of Interest Description", '', 'FrameOfInterestDescription'), + 0x00286023: ('CS', '1-n', "Frame of Interest Type", '', 'FrameOfInterestType'), + 0x00286030: ('US', '1-n', "Mask Pointer(s)", 'Retired', 'MaskPointers'), + 0x00286040: ('US', '1-n', "R Wave Pointer", '', 'RWavePointer'), + 0x00286100: ('SQ', '1', "Mask Subtraction Sequence", '', 'MaskSubtractionSequence'), + 0x00286101: ('CS', '1', "Mask Operation", '', 'MaskOperation'), + 0x00286102: ('US', '2-2n', "Applicable Frame Range", '', 'ApplicableFrameRange'), + 0x00286110: ('US', '1-n', "Mask Frame Numbers", '', 'MaskFrameNumbers'), + 0x00286112: ('US', '1', "Contrast Frame Averaging", '', 'ContrastFrameAveraging'), + 0x00286114: ('FL', '2', "Mask Sub-pixel Shift", '', 'MaskSubPixelShift'), + 0x00286120: ('SS', '1', "TID Offset", '', 'TIDOffset'), + 0x00286190: ('ST', '1', "Mask Operation Explanation", '', 'MaskOperationExplanation'), + 0x00287FE0: ('UT', '1', "Pixel Data Provider URL", '', 'PixelDataProviderURL'), + 0x00289001: ('UL', '1', "Data Point Rows", '', 'DataPointRows'), + 0x00289002: ('UL', '1', "Data Point Columns", '', 'DataPointColumns'), + 0x00289003: ('CS', '1', "Signal Domain Columns", '', 'SignalDomainColumns'), + 0x00289099: ('US', '1', "Largest Monochrome Pixel Value", 'Retired', 'LargestMonochromePixelValue'), + 0x00289108: ('CS', '1', "Data Representation", '', 'DataRepresentation'), + 0x00289110: ('SQ', '1', "Pixel Measures Sequence", '', 'PixelMeasuresSequence'), + 0x00289132: ('SQ', '1', "Frame VOI LUT Sequence", '', 'FrameVOILUTSequence'), + 0x00289145: ('SQ', '1', "Pixel Value Transformation Sequence", '', 'PixelValueTransformationSequence'), + 0x00289235: ('CS', '1', "Signal Domain Rows", '', 'SignalDomainRows'), + 0x00289411: ('FL', '1', "Display Filter Percentage", '', 'DisplayFilterPercentage'), + 0x00289415: ('SQ', '1', "Frame Pixel Shift Sequence", '', 'FramePixelShiftSequence'), + 0x00289416: ('US', '1', "Subtraction Item ID", '', 'SubtractionItemID'), + 0x00289422: ('SQ', '1', "Pixel Intensity Relationship LUT Sequence", '', 'PixelIntensityRelationshipLUTSequence'), + 0x00289443: ('SQ', '1', "Frame Pixel Data Properties Sequence", '', 'FramePixelDataPropertiesSequence'), + 0x00289444: ('CS', '1', "Geometrical Properties", '', 'GeometricalProperties'), + 0x00289445: ('FL', '1', "Geometric Maximum Distortion", '', 'GeometricMaximumDistortion'), + 0x00289446: ('CS', '1-n', "Image Processing Applied", '', 'ImageProcessingApplied'), + 0x00289454: ('CS', '1', "Mask Selection Mode", '', 'MaskSelectionMode'), + 0x00289474: ('CS', '1', "LUT Function", '', 'LUTFunction'), + 0x00289478: ('FL', '1', "Mask Visibility Percentage", '', 'MaskVisibilityPercentage'), + 0x00289501: ('SQ', '1', "Pixel Shift Sequence", '', 'PixelShiftSequence'), + 0x00289502: ('SQ', '1', "Region Pixel Shift Sequence", '', 'RegionPixelShiftSequence'), + 0x00289503: ('SS', '2-2n', "Vertices of the Region", '', 'VerticesOfTheRegion'), + 0x00289505: ('SQ', '1', "Multi-frame Presentation Sequence", '', 'MultiFramePresentationSequence'), + 0x00289506: ('US', '2-2n', "Pixel Shift Frame Range", '', 'PixelShiftFrameRange'), + 0x00289507: ('US', '2-2n', "LUT Frame Range", '', 'LUTFrameRange'), + 0x00289520: ('DS', '16', "Image to Equipment Mapping Matrix", '', 'ImageToEquipmentMappingMatrix'), + 0x00289537: ('CS', '1', "Equipment Coordinate System Identification", '', 'EquipmentCoordinateSystemIdentification'), + 0x0032000A: ('CS', '1', "Study Status ID", 'Retired', 'StudyStatusID'), + 0x0032000C: ('CS', '1', "Study Priority ID", 'Retired', 'StudyPriorityID'), + 0x00320012: ('LO', '1', "Study ID Issuer", 'Retired', 'StudyIDIssuer'), + 0x00320032: ('DA', '1', "Study Verified Date", 'Retired', 'StudyVerifiedDate'), + 0x00320033: ('TM', '1', "Study Verified Time", 'Retired', 'StudyVerifiedTime'), + 0x00320034: ('DA', '1', "Study Read Date", 'Retired', 'StudyReadDate'), + 0x00320035: ('TM', '1', "Study Read Time", 'Retired', 'StudyReadTime'), + 0x00321000: ('DA', '1', "Scheduled Study Start Date", 'Retired', 'ScheduledStudyStartDate'), + 0x00321001: ('TM', '1', "Scheduled Study Start Time", 'Retired', 'ScheduledStudyStartTime'), + 0x00321010: ('DA', '1', "Scheduled Study Stop Date", 'Retired', 'ScheduledStudyStopDate'), + 0x00321011: ('TM', '1', "Scheduled Study Stop Time", 'Retired', 'ScheduledStudyStopTime'), + 0x00321020: ('LO', '1', "Scheduled Study Location", 'Retired', 'ScheduledStudyLocation'), + 0x00321021: ('AE', '1-n', "Scheduled Study Location AE Title", 'Retired', 'ScheduledStudyLocationAETitle'), + 0x00321030: ('LO', '1', "Reason for Study", 'Retired', 'ReasonForStudy'), + 0x00321031: ('SQ', '1', "Requesting Physician Identification Sequence", '', 'RequestingPhysicianIdentificationSequence'), + 0x00321032: ('PN', '1', "Requesting Physician", '', 'RequestingPhysician'), + 0x00321033: ('LO', '1', "Requesting Service", '', 'RequestingService'), + 0x00321034: ('SQ', '1', "Requesting Service Code Sequence", '', 'RequestingServiceCodeSequence'), + 0x00321040: ('DA', '1', "Study Arrival Date", 'Retired', 'StudyArrivalDate'), + 0x00321041: ('TM', '1', "Study Arrival Time", 'Retired', 'StudyArrivalTime'), + 0x00321050: ('DA', '1', "Study Completion Date", 'Retired', 'StudyCompletionDate'), + 0x00321051: ('TM', '1', "Study Completion Time", 'Retired', 'StudyCompletionTime'), + 0x00321055: ('CS', '1', "Study Component Status ID", 'Retired', 'StudyComponentStatusID'), + 0x00321060: ('LO', '1', "Requested Procedure Description", '', 'RequestedProcedureDescription'), + 0x00321064: ('SQ', '1', "Requested Procedure Code Sequence", '', 'RequestedProcedureCodeSequence'), + 0x00321070: ('LO', '1', "Requested Contrast Agent", '', 'RequestedContrastAgent'), + 0x00324000: ('LT', '1', "Study Comments", 'Retired', 'StudyComments'), + 0x00380004: ('SQ', '1', "Referenced Patient Alias Sequence", '', 'ReferencedPatientAliasSequence'), + 0x00380008: ('CS', '1', "Visit Status ID", '', 'VisitStatusID'), + 0x00380010: ('LO', '1', "Admission ID", '', 'AdmissionID'), + 0x00380011: ('LO', '1', "Issuer of Admission ID", 'Retired', 'IssuerOfAdmissionID'), + 0x00380014: ('SQ', '1', "Issuer of Admission ID Sequence", '', 'IssuerOfAdmissionIDSequence'), + 0x00380016: ('LO', '1', "Route of Admissions", '', 'RouteOfAdmissions'), + 0x0038001A: ('DA', '1', "Scheduled Admission Date", 'Retired', 'ScheduledAdmissionDate'), + 0x0038001B: ('TM', '1', "Scheduled Admission Time", 'Retired', 'ScheduledAdmissionTime'), + 0x0038001C: ('DA', '1', "Scheduled Discharge Date", 'Retired', 'ScheduledDischargeDate'), + 0x0038001D: ('TM', '1', "Scheduled Discharge Time", 'Retired', 'ScheduledDischargeTime'), + 0x0038001E: ('LO', '1', "Scheduled Patient Institution Residence", 'Retired', 'ScheduledPatientInstitutionResidence'), + 0x00380020: ('DA', '1', "Admitting Date", '', 'AdmittingDate'), + 0x00380021: ('TM', '1', "Admitting Time", '', 'AdmittingTime'), + 0x00380030: ('DA', '1', "Discharge Date", 'Retired', 'DischargeDate'), + 0x00380032: ('TM', '1', "Discharge Time", 'Retired', 'DischargeTime'), + 0x00380040: ('LO', '1', "Discharge Diagnosis Description", 'Retired', 'DischargeDiagnosisDescription'), + 0x00380044: ('SQ', '1', "Discharge Diagnosis Code Sequence", 'Retired', 'DischargeDiagnosisCodeSequence'), + 0x00380050: ('LO', '1', "Special Needs", '', 'SpecialNeeds'), + 0x00380060: ('LO', '1', "Service Episode ID", '', 'ServiceEpisodeID'), + 0x00380061: ('LO', '1', "Issuer of Service Episode ID", 'Retired', 'IssuerOfServiceEpisodeID'), + 0x00380062: ('LO', '1', "Service Episode Description", '', 'ServiceEpisodeDescription'), + 0x00380064: ('SQ', '1', "Issuer of Service Episode ID Sequence", '', 'IssuerOfServiceEpisodeIDSequence'), + 0x00380100: ('SQ', '1', "Pertinent Documents Sequence", '', 'PertinentDocumentsSequence'), + 0x00380300: ('LO', '1', "Current Patient Location", '', 'CurrentPatientLocation'), + 0x00380400: ('LO', '1', "Patient's Institution Residence", '', 'PatientInstitutionResidence'), + 0x00380500: ('LO', '1', "Patient State", '', 'PatientState'), + 0x00380502: ('SQ', '1', "Patient Clinical Trial Participation Sequence", '', 'PatientClinicalTrialParticipationSequence'), + 0x00384000: ('LT', '1', "Visit Comments", '', 'VisitComments'), + 0x003A0004: ('CS', '1', "Waveform Originality", '', 'WaveformOriginality'), + 0x003A0005: ('US', '1', "Number of Waveform Channels", '', 'NumberOfWaveformChannels'), + 0x003A0010: ('UL', '1', "Number of Waveform Samples", '', 'NumberOfWaveformSamples'), + 0x003A001A: ('DS', '1', "Sampling Frequency", '', 'SamplingFrequency'), + 0x003A0020: ('SH', '1', "Multiplex Group Label", '', 'MultiplexGroupLabel'), + 0x003A0200: ('SQ', '1', "Channel Definition Sequence", '', 'ChannelDefinitionSequence'), + 0x003A0202: ('IS', '1', "Waveform Channel Number", '', 'WaveformChannelNumber'), + 0x003A0203: ('SH', '1', "Channel Label", '', 'ChannelLabel'), + 0x003A0205: ('CS', '1-n', "Channel Status", '', 'ChannelStatus'), + 0x003A0208: ('SQ', '1', "Channel Source Sequence", '', 'ChannelSourceSequence'), + 0x003A0209: ('SQ', '1', "Channel Source Modifiers Sequence", '', 'ChannelSourceModifiersSequence'), + 0x003A020A: ('SQ', '1', "Source Waveform Sequence", '', 'SourceWaveformSequence'), + 0x003A020C: ('LO', '1', "Channel Derivation Description", '', 'ChannelDerivationDescription'), + 0x003A0210: ('DS', '1', "Channel Sensitivity", '', 'ChannelSensitivity'), + 0x003A0211: ('SQ', '1', "Channel Sensitivity Units Sequence", '', 'ChannelSensitivityUnitsSequence'), + 0x003A0212: ('DS', '1', "Channel Sensitivity Correction Factor", '', 'ChannelSensitivityCorrectionFactor'), + 0x003A0213: ('DS', '1', "Channel Baseline", '', 'ChannelBaseline'), + 0x003A0214: ('DS', '1', "Channel Time Skew", '', 'ChannelTimeSkew'), + 0x003A0215: ('DS', '1', "Channel Sample Skew", '', 'ChannelSampleSkew'), + 0x003A0218: ('DS', '1', "Channel Offset", '', 'ChannelOffset'), + 0x003A021A: ('US', '1', "Waveform Bits Stored", '', 'WaveformBitsStored'), + 0x003A0220: ('DS', '1', "Filter Low Frequency", '', 'FilterLowFrequency'), + 0x003A0221: ('DS', '1', "Filter High Frequency", '', 'FilterHighFrequency'), + 0x003A0222: ('DS', '1', "Notch Filter Frequency", '', 'NotchFilterFrequency'), + 0x003A0223: ('DS', '1', "Notch Filter Bandwidth", '', 'NotchFilterBandwidth'), + 0x003A0230: ('FL', '1', "Waveform Data Display Scale", '', 'WaveformDataDisplayScale'), + 0x003A0231: ('US', '3', "Waveform Display Background CIELab Value", '', 'WaveformDisplayBackgroundCIELabValue'), + 0x003A0240: ('SQ', '1', "Waveform Presentation Group Sequence", '', 'WaveformPresentationGroupSequence'), + 0x003A0241: ('US', '1', "Presentation Group Number", '', 'PresentationGroupNumber'), + 0x003A0242: ('SQ', '1', "Channel Display Sequence", '', 'ChannelDisplaySequence'), + 0x003A0244: ('US', '3', "Channel Recommended Display CIELab Value", '', 'ChannelRecommendedDisplayCIELabValue'), + 0x003A0245: ('FL', '1', "Channel Position", '', 'ChannelPosition'), + 0x003A0246: ('CS', '1', "Display Shading Flag", '', 'DisplayShadingFlag'), + 0x003A0247: ('FL', '1', "Fractional Channel Display Scale", '', 'FractionalChannelDisplayScale'), + 0x003A0248: ('FL', '1', "Absolute Channel Display Scale", '', 'AbsoluteChannelDisplayScale'), + 0x003A0300: ('SQ', '1', "Multiplexed Audio Channels Description Code Sequence", '', 'MultiplexedAudioChannelsDescriptionCodeSequence'), + 0x003A0301: ('IS', '1', "Channel Identification Code", '', 'ChannelIdentificationCode'), + 0x003A0302: ('CS', '1', "Channel Mode", '', 'ChannelMode'), + 0x00400001: ('AE', '1-n', "Scheduled Station AE Title", '', 'ScheduledStationAETitle'), + 0x00400002: ('DA', '1', "Scheduled Procedure Step Start Date", '', 'ScheduledProcedureStepStartDate'), + 0x00400003: ('TM', '1', "Scheduled Procedure Step Start Time", '', 'ScheduledProcedureStepStartTime'), + 0x00400004: ('DA', '1', "Scheduled Procedure Step End Date", '', 'ScheduledProcedureStepEndDate'), + 0x00400005: ('TM', '1', "Scheduled Procedure Step End Time", '', 'ScheduledProcedureStepEndTime'), + 0x00400006: ('PN', '1', "Scheduled Performing Physician's Name", '', 'ScheduledPerformingPhysicianName'), + 0x00400007: ('LO', '1', "Scheduled Procedure Step Description", '', 'ScheduledProcedureStepDescription'), + 0x00400008: ('SQ', '1', "Scheduled Protocol Code Sequence", '', 'ScheduledProtocolCodeSequence'), + 0x00400009: ('SH', '1', "Scheduled Procedure Step ID", '', 'ScheduledProcedureStepID'), + 0x0040000A: ('SQ', '1', "Stage Code Sequence", '', 'StageCodeSequence'), + 0x0040000B: ('SQ', '1', "Scheduled Performing Physician Identification Sequence", '', 'ScheduledPerformingPhysicianIdentificationSequence'), + 0x00400010: ('SH', '1-n', "Scheduled Station Name", '', 'ScheduledStationName'), + 0x00400011: ('SH', '1', "Scheduled Procedure Step Location", '', 'ScheduledProcedureStepLocation'), + 0x00400012: ('LO', '1', "Pre-Medication", '', 'PreMedication'), + 0x00400020: ('CS', '1', "Scheduled Procedure Step Status", '', 'ScheduledProcedureStepStatus'), + 0x00400026: ('SQ', '1', "Order Placer Identifier Sequence", '', 'OrderPlacerIdentifierSequence'), + 0x00400027: ('SQ', '1', "Order Filler Identifier Sequence", '', 'OrderFillerIdentifierSequence'), + 0x00400031: ('UT', '1', "Local Namespace Entity ID", '', 'LocalNamespaceEntityID'), + 0x00400032: ('UT', '1', "Universal Entity ID", '', 'UniversalEntityID'), + 0x00400033: ('CS', '1', "Universal Entity ID Type", '', 'UniversalEntityIDType'), + 0x00400035: ('CS', '1', "Identifier Type Code", '', 'IdentifierTypeCode'), + 0x00400036: ('SQ', '1', "Assigning Facility Sequence", '', 'AssigningFacilitySequence'), + 0x00400039: ('SQ', '1', "Assigning Jurisdiction Code Sequence", '', 'AssigningJurisdictionCodeSequence'), + 0x0040003A: ('SQ', '1', "Assigning Agency or Department Code Sequence", '', 'AssigningAgencyOrDepartmentCodeSequence'), + 0x00400100: ('SQ', '1', "Scheduled Procedure Step Sequence", '', 'ScheduledProcedureStepSequence'), + 0x00400220: ('SQ', '1', "Referenced Non-Image Composite SOP Instance Sequence", '', 'ReferencedNonImageCompositeSOPInstanceSequence'), + 0x00400241: ('AE', '1', "Performed Station AE Title", '', 'PerformedStationAETitle'), + 0x00400242: ('SH', '1', "Performed Station Name", '', 'PerformedStationName'), + 0x00400243: ('SH', '1', "Performed Location", '', 'PerformedLocation'), + 0x00400244: ('DA', '1', "Performed Procedure Step Start Date", '', 'PerformedProcedureStepStartDate'), + 0x00400245: ('TM', '1', "Performed Procedure Step Start Time", '', 'PerformedProcedureStepStartTime'), + 0x00400250: ('DA', '1', "Performed Procedure Step End Date", '', 'PerformedProcedureStepEndDate'), + 0x00400251: ('TM', '1', "Performed Procedure Step End Time", '', 'PerformedProcedureStepEndTime'), + 0x00400252: ('CS', '1', "Performed Procedure Step Status", '', 'PerformedProcedureStepStatus'), + 0x00400253: ('SH', '1', "Performed Procedure Step ID", '', 'PerformedProcedureStepID'), + 0x00400254: ('LO', '1', "Performed Procedure Step Description", '', 'PerformedProcedureStepDescription'), + 0x00400255: ('LO', '1', "Performed Procedure Type Description", '', 'PerformedProcedureTypeDescription'), + 0x00400260: ('SQ', '1', "Performed Protocol Code Sequence", '', 'PerformedProtocolCodeSequence'), + 0x00400261: ('CS', '1', "Performed Protocol Type", '', 'PerformedProtocolType'), + 0x00400270: ('SQ', '1', "Scheduled Step Attributes Sequence", '', 'ScheduledStepAttributesSequence'), + 0x00400275: ('SQ', '1', "Request Attributes Sequence", '', 'RequestAttributesSequence'), + 0x00400280: ('ST', '1', "Comments on the Performed Procedure Step", '', 'CommentsOnThePerformedProcedureStep'), + 0x00400281: ('SQ', '1', "Performed Procedure Step Discontinuation Reason Code Sequence", '', 'PerformedProcedureStepDiscontinuationReasonCodeSequence'), + 0x00400293: ('SQ', '1', "Quantity Sequence", '', 'QuantitySequence'), + 0x00400294: ('DS', '1', "Quantity", '', 'Quantity'), + 0x00400295: ('SQ', '1', "Measuring Units Sequence", '', 'MeasuringUnitsSequence'), + 0x00400296: ('SQ', '1', "Billing Item Sequence", '', 'BillingItemSequence'), + 0x00400300: ('US', '1', "Total Time of Fluoroscopy", '', 'TotalTimeOfFluoroscopy'), + 0x00400301: ('US', '1', "Total Number of Exposures", '', 'TotalNumberOfExposures'), + 0x00400302: ('US', '1', "Entrance Dose", '', 'EntranceDose'), + 0x00400303: ('US', '1-2', "Exposed Area", '', 'ExposedArea'), + 0x00400306: ('DS', '1', "Distance Source to Entrance", '', 'DistanceSourceToEntrance'), + 0x00400307: ('DS', '1', "Distance Source to Support", 'Retired', 'DistanceSourceToSupport'), + 0x0040030E: ('SQ', '1', "Exposure Dose Sequence", '', 'ExposureDoseSequence'), + 0x00400310: ('ST', '1', "Comments on Radiation Dose", '', 'CommentsOnRadiationDose'), + 0x00400312: ('DS', '1', "X-Ray Output", '', 'XRayOutput'), + 0x00400314: ('DS', '1', "Half Value Layer", '', 'HalfValueLayer'), + 0x00400316: ('DS', '1', "Organ Dose", '', 'OrganDose'), + 0x00400318: ('CS', '1', "Organ Exposed", '', 'OrganExposed'), + 0x00400320: ('SQ', '1', "Billing Procedure Step Sequence", '', 'BillingProcedureStepSequence'), + 0x00400321: ('SQ', '1', "Film Consumption Sequence", '', 'FilmConsumptionSequence'), + 0x00400324: ('SQ', '1', "Billing Supplies and Devices Sequence", '', 'BillingSuppliesAndDevicesSequence'), + 0x00400330: ('SQ', '1', "Referenced Procedure Step Sequence", 'Retired', 'ReferencedProcedureStepSequence'), + 0x00400340: ('SQ', '1', "Performed Series Sequence", '', 'PerformedSeriesSequence'), + 0x00400400: ('LT', '1', "Comments on the Scheduled Procedure Step", '', 'CommentsOnTheScheduledProcedureStep'), + 0x00400440: ('SQ', '1', "Protocol Context Sequence", '', 'ProtocolContextSequence'), + 0x00400441: ('SQ', '1', "Content Item Modifier Sequence", '', 'ContentItemModifierSequence'), + 0x00400500: ('SQ', '1', "Scheduled Specimen Sequence", '', 'ScheduledSpecimenSequence'), + 0x0040050A: ('LO', '1', "Specimen Accession Number", 'Retired', 'SpecimenAccessionNumber'), + 0x00400512: ('LO', '1', "Container Identifier", '', 'ContainerIdentifier'), + 0x00400513: ('SQ', '1', "Issuer of the Container Identifier Sequence", '', 'IssuerOfTheContainerIdentifierSequence'), + 0x00400515: ('SQ', '1', "Alternate Container Identifier Sequence", '', 'AlternateContainerIdentifierSequence'), + 0x00400518: ('SQ', '1', "Container Type Sequence", '', 'ContainerTypeCodeSequence'), + 0x0040051A: ('LO', '1', "Container Description", '', 'ContainerDescription'), + 0x00400520: ('SQ', '1', "Container Component Sequence", '', 'ContainerComponentSequence'), + 0x00400550: ('SQ', '1', "Specimen Sequence", 'Retired', 'SpecimenSequence'), + 0x00400551: ('LO', '1', "Specimen Identifier", '', 'SpecimenIdentifier'), + 0x00400552: ('SQ', '1', "Specimen Description Sequence (Trial)", 'Retired', 'SpecimenDescriptionSequenceTrial'), + 0x00400553: ('ST', '1', "Specimen Description (Trial)", 'Retired', 'SpecimenDescriptionTrial'), + 0x00400554: ('UI', '1', "Specimen UID", '', 'SpecimenUID'), + 0x00400555: ('SQ', '1', "Acquisition Context Sequence", '', 'AcquisitionContextSequence'), + 0x00400556: ('ST', '1', "Acquisition Context Description", '', 'AcquisitionContextDescription'), + 0x0040059A: ('SQ', '1', "Specimen Type Code Sequence", '', 'SpecimenTypeCodeSequence'), + 0x00400560: ('SQ', '1', "Specimen Description Sequence", '', 'SpecimenDescriptionSequence'), + 0x00400562: ('SQ', '1', "Issuer of the Specimen Identifier Sequence", '', 'IssuerOfTheSpecimenIdentifierSequence'), + 0x00400600: ('LO', '1', "Specimen Short Description", '', 'SpecimenShortDescription'), + 0x00400602: ('UT', '1', "Specimen Detailed Description", '', 'SpecimenDetailedDescription'), + 0x00400610: ('SQ', '1', "Specimen Preparation Sequence", '', 'SpecimenPreparationSequence'), + 0x00400612: ('SQ', '1', "Specimen Preparation Step Content Item Sequence", '', 'SpecimenPreparationStepContentItemSequence'), + 0x00400620: ('SQ', '1', "Specimen Localization Content Item Sequence", '', 'SpecimenLocalizationContentItemSequence'), + 0x004006FA: ('LO', '1', "Slide Identifier", 'Retired', 'SlideIdentifier'), + 0x0040071A: ('SQ', '1', "Image Center Point Coordinates Sequence", '', 'ImageCenterPointCoordinatesSequence'), + 0x0040072A: ('DS', '1', "X Offset in Slide Coordinate System", '', 'XOffsetInSlideCoordinateSystem'), + 0x0040073A: ('DS', '1', "Y Offset in Slide Coordinate System", '', 'YOffsetInSlideCoordinateSystem'), + 0x0040074A: ('DS', '1', "Z Offset in Slide Coordinate System", '', 'ZOffsetInSlideCoordinateSystem'), + 0x004008D8: ('SQ', '1', "Pixel Spacing Sequence", 'Retired', 'PixelSpacingSequence'), + 0x004008DA: ('SQ', '1', "Coordinate System Axis Code Sequence", 'Retired', 'CoordinateSystemAxisCodeSequence'), + 0x004008EA: ('SQ', '1', "Measurement Units Code Sequence", '', 'MeasurementUnitsCodeSequence'), + 0x004009F8: ('SQ', '1', "Vital Stain Code Sequence (Trial)", 'Retired', 'VitalStainCodeSequenceTrial'), + 0x00401001: ('SH', '1', "Requested Procedure ID", '', 'RequestedProcedureID'), + 0x00401002: ('LO', '1', "Reason for the Requested Procedure", '', 'ReasonForTheRequestedProcedure'), + 0x00401003: ('SH', '1', "Requested Procedure Priority", '', 'RequestedProcedurePriority'), + 0x00401004: ('LO', '1', "Patient Transport Arrangements", '', 'PatientTransportArrangements'), + 0x00401005: ('LO', '1', "Requested Procedure Location", '', 'RequestedProcedureLocation'), + 0x00401006: ('SH', '1', "Placer Order Number / Procedure", 'Retired', 'PlacerOrderNumberProcedure'), + 0x00401007: ('SH', '1', "Filler Order Number / Procedure", 'Retired', 'FillerOrderNumberProcedure'), + 0x00401008: ('LO', '1', "Confidentiality Code", '', 'ConfidentialityCode'), + 0x00401009: ('SH', '1', "Reporting Priority", '', 'ReportingPriority'), + 0x0040100A: ('SQ', '1', "Reason for Requested Procedure Code Sequence", '', 'ReasonForRequestedProcedureCodeSequence'), + 0x00401010: ('PN', '1-n', "Names of Intended Recipients of Results", '', 'NamesOfIntendedRecipientsOfResults'), + 0x00401011: ('SQ', '1', "Intended Recipients of Results Identification Sequence", '', 'IntendedRecipientsOfResultsIdentificationSequence'), + 0x00401012: ('SQ', '1', "Reason For Performed Procedure Code Sequence", '', 'ReasonForPerformedProcedureCodeSequence'), + 0x00401060: ('LO', '1', "Requested Procedure Description (Trial)", 'Retired', 'RequestedProcedureDescriptionTrial'), + 0x00401101: ('SQ', '1', "Person Identification Code Sequence", '', 'PersonIdentificationCodeSequence'), + 0x00401102: ('ST', '1', "Person's Address", '', 'PersonAddress'), + 0x00401103: ('LO', '1-n', "Person's Telephone Numbers", '', 'PersonTelephoneNumbers'), + 0x00401400: ('LT', '1', "Requested Procedure Comments", '', 'RequestedProcedureComments'), + 0x00402001: ('LO', '1', "Reason for the Imaging Service Request", 'Retired', 'ReasonForTheImagingServiceRequest'), + 0x00402004: ('DA', '1', "Issue Date of Imaging Service Request", '', 'IssueDateOfImagingServiceRequest'), + 0x00402005: ('TM', '1', "Issue Time of Imaging Service Request", '', 'IssueTimeOfImagingServiceRequest'), + 0x00402006: ('SH', '1', "Placer Order Number / Imaging Service Request (Retired)", 'Retired', 'PlacerOrderNumberImagingServiceRequestRetired'), + 0x00402007: ('SH', '1', "Filler Order Number / Imaging Service Request (Retired)", 'Retired', 'FillerOrderNumberImagingServiceRequestRetired'), + 0x00402008: ('PN', '1', "Order Entered By", '', 'OrderEnteredBy'), + 0x00402009: ('SH', '1', "Order Enterer's Location", '', 'OrderEntererLocation'), + 0x00402010: ('SH', '1', "Order Callback Phone Number", '', 'OrderCallbackPhoneNumber'), + 0x00402016: ('LO', '1', "Placer Order Number / Imaging Service Request", '', 'PlacerOrderNumberImagingServiceRequest'), + 0x00402017: ('LO', '1', "Filler Order Number / Imaging Service Request", '', 'FillerOrderNumberImagingServiceRequest'), + 0x00402400: ('LT', '1', "Imaging Service Request Comments", '', 'ImagingServiceRequestComments'), + 0x00403001: ('LO', '1', "Confidentiality Constraint on Patient Data Description", '', 'ConfidentialityConstraintOnPatientDataDescription'), + 0x00404001: ('CS', '1', "General Purpose Scheduled Procedure Step Status", '', 'GeneralPurposeScheduledProcedureStepStatus'), + 0x00404002: ('CS', '1', "General Purpose Performed Procedure Step Status", '', 'GeneralPurposePerformedProcedureStepStatus'), + 0x00404003: ('CS', '1', "General Purpose Scheduled Procedure Step Priority", '', 'GeneralPurposeScheduledProcedureStepPriority'), + 0x00404004: ('SQ', '1', "Scheduled Processing Applications Code Sequence", '', 'ScheduledProcessingApplicationsCodeSequence'), + 0x00404005: ('DT', '1', "Scheduled Procedure Step Start DateTime", '', 'ScheduledProcedureStepStartDateTime'), + 0x00404006: ('CS', '1', "Multiple Copies Flag", '', 'MultipleCopiesFlag'), + 0x00404007: ('SQ', '1', "Performed Processing Applications Code Sequence", '', 'PerformedProcessingApplicationsCodeSequence'), + 0x00404009: ('SQ', '1', "Human Performer Code Sequence", '', 'HumanPerformerCodeSequence'), + 0x00404010: ('DT', '1', "Scheduled Procedure Step Modification Date Time", '', 'ScheduledProcedureStepModificationDateTime'), + 0x00404011: ('DT', '1', "Expected Completion Date Time", '', 'ExpectedCompletionDateTime'), + 0x00404015: ('SQ', '1', "Resulting General Purpose Performed Procedure Steps Sequence", '', 'ResultingGeneralPurposePerformedProcedureStepsSequence'), + 0x00404016: ('SQ', '1', "Referenced General Purpose Scheduled Procedure Step Sequence", '', 'ReferencedGeneralPurposeScheduledProcedureStepSequence'), + 0x00404018: ('SQ', '1', "Scheduled Workitem Code Sequence", '', 'ScheduledWorkitemCodeSequence'), + 0x00404019: ('SQ', '1', "Performed Workitem Code Sequence", '', 'PerformedWorkitemCodeSequence'), + 0x00404020: ('CS', '1', "Input Availability Flag", '', 'InputAvailabilityFlag'), + 0x00404021: ('SQ', '1', "Input Information Sequence", '', 'InputInformationSequence'), + 0x00404022: ('SQ', '1', "Relevant Information Sequence", '', 'RelevantInformationSequence'), + 0x00404023: ('UI', '1', "Referenced General Purpose Scheduled Procedure Step Transaction UID", '', 'ReferencedGeneralPurposeScheduledProcedureStepTransactionUID'), + 0x00404025: ('SQ', '1', "Scheduled Station Name Code Sequence", '', 'ScheduledStationNameCodeSequence'), + 0x00404026: ('SQ', '1', "Scheduled Station Class Code Sequence", '', 'ScheduledStationClassCodeSequence'), + 0x00404027: ('SQ', '1', "Scheduled Station Geographic Location Code Sequence", '', 'ScheduledStationGeographicLocationCodeSequence'), + 0x00404028: ('SQ', '1', "Performed Station Name Code Sequence", '', 'PerformedStationNameCodeSequence'), + 0x00404029: ('SQ', '1', "Performed Station Class Code Sequence", '', 'PerformedStationClassCodeSequence'), + 0x00404030: ('SQ', '1', "Performed Station Geographic Location Code Sequence", '', 'PerformedStationGeographicLocationCodeSequence'), + 0x00404031: ('SQ', '1', "Requested Subsequent Workitem Code Sequence", '', 'RequestedSubsequentWorkitemCodeSequence'), + 0x00404032: ('SQ', '1', "Non-DICOM Output Code Sequence", '', 'NonDICOMOutputCodeSequence'), + 0x00404033: ('SQ', '1', "Output Information Sequence", '', 'OutputInformationSequence'), + 0x00404034: ('SQ', '1', "Scheduled Human Performers Sequence", '', 'ScheduledHumanPerformersSequence'), + 0x00404035: ('SQ', '1', "Actual Human Performers Sequence", '', 'ActualHumanPerformersSequence'), + 0x00404036: ('LO', '1', "Human Performer's Organization", '', 'HumanPerformerOrganization'), + 0x00404037: ('PN', '1', "Human Performer's Name", '', 'HumanPerformerName'), + 0x00404040: ('CS', '1', "Raw Data Handling", '', 'RawDataHandling'), + 0x00404041: ('CS', '1', "Input Readiness State", '', 'InputReadinessState'), + 0x00404050: ('DT', '1', "Performed Procedure Step Start DateTime", '', 'PerformedProcedureStepStartDateTime'), + 0x00404051: ('DT', '1', "Performed Procedure Step End DateTime", '', 'PerformedProcedureStepEndDateTime'), + 0x00404052: ('DT', '1', "Procedure Step Cancellation DateTime", '', 'ProcedureStepCancellationDateTime'), + 0x00408302: ('DS', '1', "Entrance Dose in mGy", '', 'EntranceDoseInmGy'), + 0x00409094: ('SQ', '1', "Referenced Image Real World Value Mapping Sequence", '', 'ReferencedImageRealWorldValueMappingSequence'), + 0x00409096: ('SQ', '1', "Real World Value Mapping Sequence", '', 'RealWorldValueMappingSequence'), + 0x00409098: ('SQ', '1', "Pixel Value Mapping Code Sequence", '', 'PixelValueMappingCodeSequence'), + 0x00409210: ('SH', '1', "LUT Label", '', 'LUTLabel'), + 0x00409211: ('US or SS', '1', "Real World Value Last Value Mapped", '', 'RealWorldValueLastValueMapped'), + 0x00409212: ('FD', '1-n', "Real World Value LUT Data", '', 'RealWorldValueLUTData'), + 0x00409216: ('US or SS', '1', "Real World Value First Value Mapped", '', 'RealWorldValueFirstValueMapped'), + 0x00409224: ('FD', '1', "Real World Value Intercept", '', 'RealWorldValueIntercept'), + 0x00409225: ('FD', '1', "Real World Value Slope", '', 'RealWorldValueSlope'), + 0x0040A007: ('CS', '1', "Findings Flag (Trial)", 'Retired', 'FindingsFlagTrial'), + 0x0040A010: ('CS', '1', "Relationship Type", '', 'RelationshipType'), + 0x0040A020: ('SQ', '1', "Findings Sequence (Trial)", 'Retired', 'FindingsSequenceTrial'), + 0x0040A021: ('UI', '1', "Findings Group UID (Trial)", 'Retired', 'FindingsGroupUIDTrial'), + 0x0040A022: ('UI', '1', "Referenced Findings Group UID (Trial)", 'Retired', 'ReferencedFindingsGroupUIDTrial'), + 0x0040A023: ('DA', '1', "Findings Group Recording Date (Trial)", 'Retired', 'FindingsGroupRecordingDateTrial'), + 0x0040A024: ('TM', '1', "Findings Group Recording Time (Trial)", 'Retired', 'FindingsGroupRecordingTimeTrial'), + 0x0040A026: ('SQ', '1', "Findings Source Category Code Sequence (Trial)", 'Retired', 'FindingsSourceCategoryCodeSequenceTrial'), + 0x0040A027: ('LO', '1', "Verifying Organization", '', 'VerifyingOrganization'), + 0x0040A028: ('SQ', '1', "Documenting Organization Identifier Code Sequence (Trial)", 'Retired', 'DocumentingOrganizationIdentifierCodeSequenceTrial'), + 0x0040A030: ('DT', '1', "Verification Date Time", '', 'VerificationDateTime'), + 0x0040A032: ('DT', '1', "Observation Date Time", '', 'ObservationDateTime'), + 0x0040A040: ('CS', '1', "Value Type", '', 'ValueType'), + 0x0040A043: ('SQ', '1', "Concept Name Code Sequence", '', 'ConceptNameCodeSequence'), + 0x0040A047: ('LO', '1', "Measurement Precision Description (Trial)", 'Retired', 'MeasurementPrecisionDescriptionTrial'), + 0x0040A050: ('CS', '1', "Continuity Of Content", '', 'ContinuityOfContent'), + 0x0040A057: ('CS', '1-n', "Urgency or Priority Alerts (Trial)", 'Retired', 'UrgencyOrPriorityAlertsTrial'), + 0x0040A060: ('LO', '1', "Sequencing Indicator (Trial)", 'Retired', 'SequencingIndicatorTrial'), + 0x0040A066: ('SQ', '1', "Document Identifier Code Sequence (Trial)", 'Retired', 'DocumentIdentifierCodeSequenceTrial'), + 0x0040A067: ('PN', '1', "Document Author (Trial)", 'Retired', 'DocumentAuthorTrial'), + 0x0040A068: ('SQ', '1', "Document Author Identifier Code Sequence (Trial)", 'Retired', 'DocumentAuthorIdentifierCodeSequenceTrial'), + 0x0040A070: ('SQ', '1', "Identifier Code Sequence (Trial)", 'Retired', 'IdentifierCodeSequenceTrial'), + 0x0040A073: ('SQ', '1', "Verifying Observer Sequence", '', 'VerifyingObserverSequence'), + 0x0040A074: ('OB', '1', "Object Binary Identifier (Trial)", 'Retired', 'ObjectBinaryIdentifierTrial'), + 0x0040A075: ('PN', '1', "Verifying Observer Name", '', 'VerifyingObserverName'), + 0x0040A076: ('SQ', '1', "Documenting Observer Identifier Code Sequence (Trial)", 'Retired', 'DocumentingObserverIdentifierCodeSequenceTrial'), + 0x0040A078: ('SQ', '1', "Author Observer Sequence", '', 'AuthorObserverSequence'), + 0x0040A07A: ('SQ', '1', "Participant Sequence", '', 'ParticipantSequence'), + 0x0040A07C: ('SQ', '1', "Custodial Organization Sequence", '', 'CustodialOrganizationSequence'), + 0x0040A080: ('CS', '1', "Participation Type", '', 'ParticipationType'), + 0x0040A082: ('DT', '1', "Participation DateTime", '', 'ParticipationDateTime'), + 0x0040A084: ('CS', '1', "Observer Type", '', 'ObserverType'), + 0x0040A085: ('SQ', '1', "Procedure Identifier Code Sequence (Trial)", 'Retired', 'ProcedureIdentifierCodeSequenceTrial'), + 0x0040A088: ('SQ', '1', "Verifying Observer Identification Code Sequence", '', 'VerifyingObserverIdentificationCodeSequence'), + 0x0040A089: ('OB', '1', "Object Directory Binary Identifier (Trial)", 'Retired', 'ObjectDirectoryBinaryIdentifierTrial'), + 0x0040A090: ('SQ', '1', "Equivalent CDA Document Sequence", 'Retired', 'EquivalentCDADocumentSequence'), + 0x0040A0B0: ('US', '2-2n', "Referenced Waveform Channels", '', 'ReferencedWaveformChannels'), + 0x0040A110: ('DA', '1', "Date of Document or Verbal Transaction (Trial)", 'Retired', 'DateOfDocumentOrVerbalTransactionTrial'), + 0x0040A112: ('TM', '1', "Time of Document Creation or Verbal Transaction (Trial)", 'Retired', 'TimeOfDocumentCreationOrVerbalTransactionTrial'), + 0x0040A120: ('DT', '1', "DateTime", '', 'DateTime'), + 0x0040A121: ('DA', '1', "Date", '', 'Date'), + 0x0040A122: ('TM', '1', "Time", '', 'Time'), + 0x0040A123: ('PN', '1', "Person Name", '', 'PersonName'), + 0x0040A124: ('UI', '1', "UID", '', 'UID'), + 0x0040A125: ('CS', '2', "Report Status ID (Trial)", 'Retired', 'ReportStatusIDTrial'), + 0x0040A130: ('CS', '1', "Temporal Range Type", '', 'TemporalRangeType'), + 0x0040A132: ('UL', '1-n', "Referenced Sample Positions", '', 'ReferencedSamplePositions'), + 0x0040A136: ('US', '1-n', "Referenced Frame Numbers", '', 'ReferencedFrameNumbers'), + 0x0040A138: ('DS', '1-n', "Referenced Time Offsets", '', 'ReferencedTimeOffsets'), + 0x0040A13A: ('DT', '1-n', "Referenced DateTime", '', 'ReferencedDateTime'), + 0x0040A160: ('UT', '1', "Text Value", '', 'TextValue'), + 0x0040A167: ('SQ', '1', "Observation Category Code Sequence (Trial)", 'Retired', 'ObservationCategoryCodeSequenceTrial'), + 0x0040A168: ('SQ', '1', "Concept Code Sequence", '', 'ConceptCodeSequence'), + 0x0040A16A: ('ST', '1', "Bibliographic Citation (Trial)", 'Retired', 'BibliographicCitationTrial'), + 0x0040A170: ('SQ', '1', "Purpose of Reference Code Sequence", '', 'PurposeOfReferenceCodeSequence'), + 0x0040A171: ('UI', '1', "Observation UID (Trial)", 'Retired', 'ObservationUIDTrial'), + 0x0040A172: ('UI', '1', "Referenced Observation UID (Trial)", 'Retired', 'ReferencedObservationUIDTrial'), + 0x0040A173: ('CS', '1', "Referenced Observation Class (Trial)", 'Retired', 'ReferencedObservationClassTrial'), + 0x0040A174: ('CS', '1', "Referenced Object Observation Class (Trial)", 'Retired', 'ReferencedObjectObservationClassTrial'), + 0x0040A180: ('US', '1', "Annotation Group Number", '', 'AnnotationGroupNumber'), + 0x0040A192: ('DA', '1', "Observation Date (Trial)", 'Retired', 'ObservationDateTrial'), + 0x0040A193: ('TM', '1', "Observation Time (Trial)", 'Retired', 'ObservationTimeTrial'), + 0x0040A194: ('CS', '1', "Measurement Automation (Trial)", 'Retired', 'MeasurementAutomationTrial'), + 0x0040A195: ('SQ', '1', "Modifier Code Sequence", '', 'ModifierCodeSequence'), + 0x0040A224: ('ST', '1', "Identification Description (Trial)", 'Retired', 'IdentificationDescriptionTrial'), + 0x0040A290: ('CS', '1', "Coordinates Set Geometric Type (Trial)", 'Retired', 'CoordinatesSetGeometricTypeTrial'), + 0x0040A296: ('SQ', '1', "Algorithm Code Sequence (Trial)", 'Retired', 'AlgorithmCodeSequenceTrial'), + 0x0040A297: ('ST', '1', "Algorithm Description (Trial)", 'Retired', 'AlgorithmDescriptionTrial'), + 0x0040A29A: ('SL', '2-2n', "Pixel Coordinates Set (Trial)", 'Retired', 'PixelCoordinatesSetTrial'), + 0x0040A300: ('SQ', '1', "Measured Value Sequence", '', 'MeasuredValueSequence'), + 0x0040A301: ('SQ', '1', "Numeric Value Qualifier Code Sequence", '', 'NumericValueQualifierCodeSequence'), + 0x0040A307: ('PN', '1', "Current Observer (Trial)", 'Retired', 'CurrentObserverTrial'), + 0x0040A30A: ('DS', '1-n', "Numeric Value", '', 'NumericValue'), + 0x0040A313: ('SQ', '1', "Referenced Accession Sequence (Trial)", 'Retired', 'ReferencedAccessionSequenceTrial'), + 0x0040A33A: ('ST', '1', "Report Status Comment (Trial)", 'Retired', 'ReportStatusCommentTrial'), + 0x0040A340: ('SQ', '1', "Procedure Context Sequence (Trial)", 'Retired', 'ProcedureContextSequenceTrial'), + 0x0040A352: ('PN', '1', "Verbal Source (Trial)", 'Retired', 'VerbalSourceTrial'), + 0x0040A353: ('ST', '1', "Address (Trial)", 'Retired', 'AddressTrial'), + 0x0040A354: ('LO', '1', "Telephone Number (Trial)", 'Retired', 'TelephoneNumberTrial'), + 0x0040A358: ('SQ', '1', "Verbal Source Identifier Code Sequence (Trial)", 'Retired', 'VerbalSourceIdentifierCodeSequenceTrial'), + 0x0040A360: ('SQ', '1', "Predecessor Documents Sequence", '', 'PredecessorDocumentsSequence'), + 0x0040A370: ('SQ', '1', "Referenced Request Sequence", '', 'ReferencedRequestSequence'), + 0x0040A372: ('SQ', '1', "Performed Procedure Code Sequence", '', 'PerformedProcedureCodeSequence'), + 0x0040A375: ('SQ', '1', "Current Requested Procedure Evidence Sequence", '', 'CurrentRequestedProcedureEvidenceSequence'), + 0x0040A380: ('SQ', '1', "Report Detail Sequence (Trial)", 'Retired', 'ReportDetailSequenceTrial'), + 0x0040A385: ('SQ', '1', "Pertinent Other Evidence Sequence", '', 'PertinentOtherEvidenceSequence'), + 0x0040A390: ('SQ', '1', "HL7 Structured Document Reference Sequence", '', 'HL7StructuredDocumentReferenceSequence'), + 0x0040A402: ('UI', '1', "Observation Subject UID (Trial)", 'Retired', 'ObservationSubjectUIDTrial'), + 0x0040A403: ('CS', '1', "Observation Subject Class (Trial)", 'Retired', 'ObservationSubjectClassTrial'), + 0x0040A404: ('SQ', '1', "Observation Subject Type Code Sequence (Trial)", 'Retired', 'ObservationSubjectTypeCodeSequenceTrial'), + 0x0040A491: ('CS', '1', "Completion Flag", '', 'CompletionFlag'), + 0x0040A492: ('LO', '1', "Completion Flag Description", '', 'CompletionFlagDescription'), + 0x0040A493: ('CS', '1', "Verification Flag", '', 'VerificationFlag'), + 0x0040A494: ('CS', '1', "Archive Requested", '', 'ArchiveRequested'), + 0x0040A496: ('CS', '1', "Preliminary Flag", '', 'PreliminaryFlag'), + 0x0040A504: ('SQ', '1', "Content Template Sequence", '', 'ContentTemplateSequence'), + 0x0040A525: ('SQ', '1', "Identical Documents Sequence", '', 'IdenticalDocumentsSequence'), + 0x0040A600: ('CS', '1', "Observation Subject Context Flag (Trial)", 'Retired', 'ObservationSubjectContextFlagTrial'), + 0x0040A601: ('CS', '1', "Observer Context Flag (Trial)", 'Retired', 'ObserverContextFlagTrial'), + 0x0040A603: ('CS', '1', "Procedure Context Flag (Trial)", 'Retired', 'ProcedureContextFlagTrial'), + 0x0040A730: ('SQ', '1', "Content Sequence", '', 'ContentSequence'), + 0x0040A731: ('SQ', '1', "Relationship Sequence (Trial)", 'Retired', 'RelationshipSequenceTrial'), + 0x0040A732: ('SQ', '1', "Relationship Type Code Sequence (Trial)", 'Retired', 'RelationshipTypeCodeSequenceTrial'), + 0x0040A744: ('SQ', '1', "Language Code Sequence (Trial)", 'Retired', 'LanguageCodeSequenceTrial'), + 0x0040A992: ('ST', '1', "Uniform Resource Locator (Trial)", 'Retired', 'UniformResourceLocatorTrial'), + 0x0040B020: ('SQ', '1', "Waveform Annotation Sequence", '', 'WaveformAnnotationSequence'), + 0x0040DB00: ('CS', '1', "Template Identifier", '', 'TemplateIdentifier'), + 0x0040DB06: ('DT', '1', "Template Version", 'Retired', 'TemplateVersion'), + 0x0040DB07: ('DT', '1', "Template Local Version", 'Retired', 'TemplateLocalVersion'), + 0x0040DB0B: ('CS', '1', "Template Extension Flag", 'Retired', 'TemplateExtensionFlag'), + 0x0040DB0C: ('UI', '1', "Template Extension Organization UID", 'Retired', 'TemplateExtensionOrganizationUID'), + 0x0040DB0D: ('UI', '1', "Template Extension Creator UID", 'Retired', 'TemplateExtensionCreatorUID'), + 0x0040DB73: ('UL', '1-n', "Referenced Content Item Identifier", '', 'ReferencedContentItemIdentifier'), + 0x0040E001: ('ST', '1', "HL7 Instance Identifier", '', 'HL7InstanceIdentifier'), + 0x0040E004: ('DT', '1', "HL7 Document Effective Time", '', 'HL7DocumentEffectiveTime'), + 0x0040E006: ('SQ', '1', "HL7 Document Type Code Sequence", '', 'HL7DocumentTypeCodeSequence'), + 0x0040E008: ('SQ', '1', "Document Class Code Sequence", '', 'DocumentClassCodeSequence'), + 0x0040E010: ('UT', '1', "Retrieve URI", '', 'RetrieveURI'), + 0x0040E011: ('UI', '1', "Retrieve Location UID", '', 'RetrieveLocationUID'), + 0x0040E020: ('CS', '1', "Type of Instances", '', 'TypeOfInstances'), + 0x0040E021: ('SQ', '1', "DICOM Retrieval Sequence", '', 'DICOMRetrievalSequence'), + 0x0040E022: ('SQ', '1', "DICOM Media Retrieval Sequence", '', 'DICOMMediaRetrievalSequence'), + 0x0040E023: ('SQ', '1', "WADO Retrieval Sequence", '', 'WADORetrievalSequence'), + 0x0040E024: ('SQ', '1', "XDS Retrieval Sequence", '', 'XDSRetrievalSequence'), + 0x0040E030: ('UI', '1', "Repository Unique ID", '', 'RepositoryUniqueID'), + 0x0040E031: ('UI', '1', "Home Community ID", '', 'HomeCommunityID'), + 0x00420010: ('ST', '1', "Document Title", '', 'DocumentTitle'), + 0x00420011: ('OB', '1', "Encapsulated Document", '', 'EncapsulatedDocument'), + 0x00420012: ('LO', '1', "MIME Type of Encapsulated Document", '', 'MIMETypeOfEncapsulatedDocument'), + 0x00420013: ('SQ', '1', "Source Instance Sequence", '', 'SourceInstanceSequence'), + 0x00420014: ('LO', '1-n', "List of MIME Types", '', 'ListOfMIMETypes'), + 0x00440001: ('ST', '1', "Product Package Identifier", '', 'ProductPackageIdentifier'), + 0x00440002: ('CS', '1', "Substance Administration Approval", '', 'SubstanceAdministrationApproval'), + 0x00440003: ('LT', '1', "Approval Status Further Description", '', 'ApprovalStatusFurtherDescription'), + 0x00440004: ('DT', '1', "Approval Status DateTime", '', 'ApprovalStatusDateTime'), + 0x00440007: ('SQ', '1', "Product Type Code Sequence", '', 'ProductTypeCodeSequence'), + 0x00440008: ('LO', '1-n', "Product Name", '', 'ProductName'), + 0x00440009: ('LT', '1', "Product Description", '', 'ProductDescription'), + 0x0044000A: ('LO', '1', "Product Lot Identifier", '', 'ProductLotIdentifier'), + 0x0044000B: ('DT', '1', "Product Expiration DateTime", '', 'ProductExpirationDateTime'), + 0x00440010: ('DT', '1', "Substance Administration DateTime", '', 'SubstanceAdministrationDateTime'), + 0x00440011: ('LO', '1', "Substance Administration Notes", '', 'SubstanceAdministrationNotes'), + 0x00440012: ('LO', '1', "Substance Administration Device ID", '', 'SubstanceAdministrationDeviceID'), + 0x00440013: ('SQ', '1', "Product Parameter Sequence", '', 'ProductParameterSequence'), + 0x00440019: ('SQ', '1', "Substance Administration Parameter Sequence", '', 'SubstanceAdministrationParameterSequence'), + 0x00460012: ('LO', '1', "Lens Description", '', 'LensDescription'), + 0x00460014: ('SQ', '1', "Right Lens Sequence", '', 'RightLensSequence'), + 0x00460015: ('SQ', '1', "Left Lens Sequence", '', 'LeftLensSequence'), + 0x00460016: ('SQ', '1', "Unspecified Laterality Lens Sequence", '', 'UnspecifiedLateralityLensSequence'), + 0x00460018: ('SQ', '1', "Cylinder Sequence", '', 'CylinderSequence'), + 0x00460028: ('SQ', '1', "Prism Sequence", '', 'PrismSequence'), + 0x00460030: ('FD', '1', "Horizontal Prism Power", '', 'HorizontalPrismPower'), + 0x00460032: ('CS', '1', "Horizontal Prism Base", '', 'HorizontalPrismBase'), + 0x00460034: ('FD', '1', "Vertical Prism Power", '', 'VerticalPrismPower'), + 0x00460036: ('CS', '1', "Vertical Prism Base", '', 'VerticalPrismBase'), + 0x00460038: ('CS', '1', "Lens Segment Type", '', 'LensSegmentType'), + 0x00460040: ('FD', '1', "Optical Transmittance", '', 'OpticalTransmittance'), + 0x00460042: ('FD', '1', "Channel Width", '', 'ChannelWidth'), + 0x00460044: ('FD', '1', "Pupil Size", '', 'PupilSize'), + 0x00460046: ('FD', '1', "Corneal Size", '', 'CornealSize'), + 0x00460050: ('SQ', '1', "Autorefraction Right Eye Sequence", '', 'AutorefractionRightEyeSequence'), + 0x00460052: ('SQ', '1', "Autorefraction Left Eye Sequence", '', 'AutorefractionLeftEyeSequence'), + 0x00460060: ('FD', '1', "Distance Pupillary Distance", '', 'DistancePupillaryDistance'), + 0x00460062: ('FD', '1', "Near Pupillary Distance", '', 'NearPupillaryDistance'), + 0x00460063: ('FD', '1', "Intermediate Pupillary Distance", '', 'IntermediatePupillaryDistance'), + 0x00460064: ('FD', '1', "Other Pupillary Distance", '', 'OtherPupillaryDistance'), + 0x00460070: ('SQ', '1', "Keratometry Right Eye Sequence", '', 'KeratometryRightEyeSequence'), + 0x00460071: ('SQ', '1', "Keratometry Left Eye Sequence", '', 'KeratometryLeftEyeSequence'), + 0x00460074: ('SQ', '1', "Steep Keratometric Axis Sequence", '', 'SteepKeratometricAxisSequence'), + 0x00460075: ('FD', '1', "Radius of Curvature", '', 'RadiusOfCurvature'), + 0x00460076: ('FD', '1', "Keratometric Power", '', 'KeratometricPower'), + 0x00460077: ('FD', '1', "Keratometric Axis", '', 'KeratometricAxis'), + 0x00460080: ('SQ', '1', "Flat Keratometric Axis Sequence", '', 'FlatKeratometricAxisSequence'), + 0x00460092: ('CS', '1', "Background Color", '', 'BackgroundColor'), + 0x00460094: ('CS', '1', "Optotype", '', 'Optotype'), + 0x00460095: ('CS', '1', "Optotype Presentation", '', 'OptotypePresentation'), + 0x00460097: ('SQ', '1', "Subjective Refraction Right Eye Sequence", '', 'SubjectiveRefractionRightEyeSequence'), + 0x00460098: ('SQ', '1', "Subjective Refraction Left Eye Sequence", '', 'SubjectiveRefractionLeftEyeSequence'), + 0x00460100: ('SQ', '1', "Add Near Sequence", '', 'AddNearSequence'), + 0x00460101: ('SQ', '1', "Add Intermediate Sequence", '', 'AddIntermediateSequence'), + 0x00460102: ('SQ', '1', "Add Other Sequence", '', 'AddOtherSequence'), + 0x00460104: ('FD', '1', "Add Power", '', 'AddPower'), + 0x00460106: ('FD', '1', "Viewing Distance", '', 'ViewingDistance'), + 0x00460121: ('SQ', '1', "Visual Acuity Type Code Sequence", '', 'VisualAcuityTypeCodeSequence'), + 0x00460122: ('SQ', '1', "Visual Acuity Right Eye Sequence", '', 'VisualAcuityRightEyeSequence'), + 0x00460123: ('SQ', '1', "Visual Acuity Left Eye Sequence", '', 'VisualAcuityLeftEyeSequence'), + 0x00460124: ('SQ', '1', "Visual Acuity Both Eyes Open Sequence", '', 'VisualAcuityBothEyesOpenSequence'), + 0x00460125: ('CS', '1', "Viewing Distance Type", '', 'ViewingDistanceType'), + 0x00460135: ('SS', '2', "Visual Acuity Modifiers", '', 'VisualAcuityModifiers'), + 0x00460137: ('FD', '1', "Decimal Visual Acuity", '', 'DecimalVisualAcuity'), + 0x00460139: ('LO', '1', "Optotype Detailed Definition", '', 'OptotypeDetailedDefinition'), + 0x00460145: ('SQ', '1', "Referenced Refractive Measurements Sequence", '', 'ReferencedRefractiveMeasurementsSequence'), + 0x00460146: ('FD', '1', "Sphere Power", '', 'SpherePower'), + 0x00460147: ('FD', '1', "Cylinder Power", '', 'CylinderPower'), + 0x00480001: ('FL', '1', "Imaged Volume Width", '', 'ImagedVolumeWidth'), + 0x00480002: ('FL', '1', "Imaged Volume Height", '', 'ImagedVolumeHeight'), + 0x00480003: ('FL', '1', "Imaged Volume Depth", '', 'ImagedVolumeDepth'), + 0x00480006: ('UL', '1', "Total Pixel Matrix Columns", '', 'TotalPixelMatrixColumns'), + 0x00480007: ('UL', '1', "Total Pixel Matrix Rows", '', 'TotalPixelMatrixRows'), + 0x00480008: ('SQ', '1', "Total Pixel Matrix Origin Sequence", '', 'TotalPixelMatrixOriginSequence'), + 0x00480010: ('CS', '1', "Specimen Label in Image", '', 'SpecimenLabelInImage'), + 0x00480011: ('CS', '1', "Focus Method", '', 'FocusMethod'), + 0x00480012: ('CS', '1', "Extended Depth of Field", '', 'ExtendedDepthOfField'), + 0x00480013: ('US', '1', "Number of Focal Planes", '', 'NumberOfFocalPlanes'), + 0x00480014: ('FL', '1', "Distance Between Focal Planes", '', 'DistanceBetweenFocalPlanes'), + 0x00480015: ('US', '3', "Recommended Absent Pixel CIELab Value", '', 'RecommendedAbsentPixelCIELabValue'), + 0x00480100: ('SQ', '1', "Illuminator Type Code Sequence", '', 'IlluminatorTypeCodeSequence'), + 0x00480102: ('DS', '6', "Image Orientation (Slide)", '', 'ImageOrientationSlide'), + 0x00480105: ('SQ', '1', "Optical Path Sequence", '', 'OpticalPathSequence'), + 0x00480106: ('SH', '1', "Optical Path Identifier", '', 'OpticalPathIdentifier'), + 0x00480107: ('ST', '1', "Optical Path Description", '', 'OpticalPathDescription'), + 0x00480108: ('SQ', '1', "Illumination Color Code Sequence", '', 'IlluminationColorCodeSequence'), + 0x00480110: ('SQ', '1', "Specimen Reference Sequence", '', 'SpecimenReferenceSequence'), + 0x00480111: ('DS', '1', "Condenser Lens Power", '', 'CondenserLensPower'), + 0x00480112: ('DS', '1', "Objective Lens Power", '', 'ObjectiveLensPower'), + 0x00480113: ('DS', '1', "Objective Lens Numerical Aperture", '', 'ObjectiveLensNumericalAperture'), + 0x00480120: ('SQ', '1', "Palette Color Lookup Table Sequence", '', 'PaletteColorLookupTableSequence'), + 0x00480200: ('SQ', '1', "Referenced Image Navigation Sequence", '', 'ReferencedImageNavigationSequence'), + 0x00480201: ('US', '2', "Top Left Hand Corner of Localizer Area", '', 'TopLeftHandCornerOfLocalizerArea'), + 0x00480202: ('US', '2', "Bottom Right Hand Corner of Localizer Area", '', 'BottomRightHandCornerOfLocalizerArea'), + 0x00480207: ('SQ', '1', "Optical Path Identification Sequence", '', 'OpticalPathIdentificationSequence'), + 0x0048021A: ('SQ', '1', "Plane Position (Slide) Sequence", '', 'PlanePositionSlideSequence'), + 0x0048021E: ('SL', '1', "Row Position In Total Image Pixel Matrix", '', 'RowPositionInTotalImagePixelMatrix'), + 0x0048021F: ('SL', '1', "Column Position In Total Image Pixel Matrix", '', 'ColumnPositionInTotalImagePixelMatrix'), + 0x00480301: ('CS', '1', "Pixel Origin Interpretation", '', 'PixelOriginInterpretation'), + 0x00500004: ('CS', '1', "Calibration Image", '', 'CalibrationImage'), + 0x00500010: ('SQ', '1', "Device Sequence", '', 'DeviceSequence'), + 0x00500012: ('SQ', '1', "Container Component Type Code Sequence", '', 'ContainerComponentTypeCodeSequence'), + 0x00500013: ('FD', '1', "Container Component Thickness", '', 'ContainerComponentThickness'), + 0x00500014: ('DS', '1', "Device Length", '', 'DeviceLength'), + 0x00500015: ('FD', '1', "Container Component Width", '', 'ContainerComponentWidth'), + 0x00500016: ('DS', '1', "Device Diameter", '', 'DeviceDiameter'), + 0x00500017: ('CS', '1', "Device Diameter Units", '', 'DeviceDiameterUnits'), + 0x00500018: ('DS', '1', "Device Volume", '', 'DeviceVolume'), + 0x00500019: ('DS', '1', "Inter-Marker Distance", '', 'InterMarkerDistance'), + 0x0050001A: ('CS', '1', "Container Component Material", '', 'ContainerComponentMaterial'), + 0x0050001B: ('LO', '1', "Container Component ID", '', 'ContainerComponentID'), + 0x0050001C: ('FD', '1', "Container Component Length", '', 'ContainerComponentLength'), + 0x0050001D: ('FD', '1', "Container Component Diameter", '', 'ContainerComponentDiameter'), + 0x0050001E: ('LO', '1', "Container Component Description", '', 'ContainerComponentDescription'), + 0x00500020: ('LO', '1', "Device Description", '', 'DeviceDescription'), + 0x00520001: ('FL', '1', "Contrast/Bolus Ingredient Percent by Volume", '', 'ContrastBolusIngredientPercentByVolume'), + 0x00520002: ('FD', '1', "OCT Focal Distance", '', 'OCTFocalDistance'), + 0x00520003: ('FD', '1', "Beam Spot Size", '', 'BeamSpotSize'), + 0x00520004: ('FD', '1', "Effective Refractive Index", '', 'EffectiveRefractiveIndex'), + 0x00520006: ('CS', '1', "OCT Acquisition Domain", '', 'OCTAcquisitionDomain'), + 0x00520007: ('FD', '1', "OCT Optical Center Wavelength", '', 'OCTOpticalCenterWavelength'), + 0x00520008: ('FD', '1', "Axial Resolution", '', 'AxialResolution'), + 0x00520009: ('FD', '1', "Ranging Depth", '', 'RangingDepth'), + 0x00520011: ('FD', '1', "A-line Rate", '', 'ALineRate'), + 0x00520012: ('US', '1', "A-lines Per Frame", '', 'ALinesPerFrame'), + 0x00520013: ('FD', '1', "Catheter Rotational Rate", '', 'CatheterRotationalRate'), + 0x00520014: ('FD', '1', "A-line Pixel Spacing", '', 'ALinePixelSpacing'), + 0x00520016: ('SQ', '1', "Mode of Percutaneous Access Sequence", '', 'ModeOfPercutaneousAccessSequence'), + 0x00520025: ('SQ', '1', "Intravascular OCT Frame Type Sequence", '', 'IntravascularOCTFrameTypeSequence'), + 0x00520026: ('CS', '1', "OCT Z Offset Applied", '', 'OCTZOffsetApplied'), + 0x00520027: ('SQ', '1', "Intravascular Frame Content Sequence", '', 'IntravascularFrameContentSequence'), + 0x00520028: ('FD', '1', "Intravascular Longitudinal Distance", '', 'IntravascularLongitudinalDistance'), + 0x00520029: ('SQ', '1', "Intravascular OCT Frame Content Sequence", '', 'IntravascularOCTFrameContentSequence'), + 0x00520030: ('SS', '1', "OCT Z Offset Correction", '', 'OCTZOffsetCorrection'), + 0x00520031: ('CS', '1', "Catheter Direction of Rotation", '', 'CatheterDirectionOfRotation'), + 0x00520033: ('FD', '1', "Seam Line Location", '', 'SeamLineLocation'), + 0x00520034: ('FD', '1', "First A-line Location", '', 'FirstALineLocation'), + 0x00520036: ('US', '1', "Seam Line Index", '', 'SeamLineIndex'), + 0x00520038: ('US', '1', "Number of Padded A-lines", '', 'NumberOfPaddedAlines'), + 0x00520039: ('CS', '1', "Interpolation Type", '', 'InterpolationType'), + 0x0052003A: ('CS', '1', "Refractive Index Applied", '', 'RefractiveIndexApplied'), + 0x00540010: ('US', '1-n', "Energy Window Vector", '', 'EnergyWindowVector'), + 0x00540011: ('US', '1', "Number of Energy Windows", '', 'NumberOfEnergyWindows'), + 0x00540012: ('SQ', '1', "Energy Window Information Sequence", '', 'EnergyWindowInformationSequence'), + 0x00540013: ('SQ', '1', "Energy Window Range Sequence", '', 'EnergyWindowRangeSequence'), + 0x00540014: ('DS', '1', "Energy Window Lower Limit", '', 'EnergyWindowLowerLimit'), + 0x00540015: ('DS', '1', "Energy Window Upper Limit", '', 'EnergyWindowUpperLimit'), + 0x00540016: ('SQ', '1', "Radiopharmaceutical Information Sequence", '', 'RadiopharmaceuticalInformationSequence'), + 0x00540017: ('IS', '1', "Residual Syringe Counts", '', 'ResidualSyringeCounts'), + 0x00540018: ('SH', '1', "Energy Window Name", '', 'EnergyWindowName'), + 0x00540020: ('US', '1-n', "Detector Vector", '', 'DetectorVector'), + 0x00540021: ('US', '1', "Number of Detectors", '', 'NumberOfDetectors'), + 0x00540022: ('SQ', '1', "Detector Information Sequence", '', 'DetectorInformationSequence'), + 0x00540030: ('US', '1-n', "Phase Vector", '', 'PhaseVector'), + 0x00540031: ('US', '1', "Number of Phases", '', 'NumberOfPhases'), + 0x00540032: ('SQ', '1', "Phase Information Sequence", '', 'PhaseInformationSequence'), + 0x00540033: ('US', '1', "Number of Frames in Phase", '', 'NumberOfFramesInPhase'), + 0x00540036: ('IS', '1', "Phase Delay", '', 'PhaseDelay'), + 0x00540038: ('IS', '1', "Pause Between Frames", '', 'PauseBetweenFrames'), + 0x00540039: ('CS', '1', "Phase Description", '', 'PhaseDescription'), + 0x00540050: ('US', '1-n', "Rotation Vector", '', 'RotationVector'), + 0x00540051: ('US', '1', "Number of Rotations", '', 'NumberOfRotations'), + 0x00540052: ('SQ', '1', "Rotation Information Sequence", '', 'RotationInformationSequence'), + 0x00540053: ('US', '1', "Number of Frames in Rotation", '', 'NumberOfFramesInRotation'), + 0x00540060: ('US', '1-n', "R-R Interval Vector", '', 'RRIntervalVector'), + 0x00540061: ('US', '1', "Number of R-R Intervals", '', 'NumberOfRRIntervals'), + 0x00540062: ('SQ', '1', "Gated Information Sequence", '', 'GatedInformationSequence'), + 0x00540063: ('SQ', '1', "Data Information Sequence", '', 'DataInformationSequence'), + 0x00540070: ('US', '1-n', "Time Slot Vector", '', 'TimeSlotVector'), + 0x00540071: ('US', '1', "Number of Time Slots", '', 'NumberOfTimeSlots'), + 0x00540072: ('SQ', '1', "Time Slot Information Sequence", '', 'TimeSlotInformationSequence'), + 0x00540073: ('DS', '1', "Time Slot Time", '', 'TimeSlotTime'), + 0x00540080: ('US', '1-n', "Slice Vector", '', 'SliceVector'), + 0x00540081: ('US', '1', "Number of Slices", '', 'NumberOfSlices'), + 0x00540090: ('US', '1-n', "Angular View Vector", '', 'AngularViewVector'), + 0x00540100: ('US', '1-n', "Time Slice Vector", '', 'TimeSliceVector'), + 0x00540101: ('US', '1', "Number of Time Slices", '', 'NumberOfTimeSlices'), + 0x00540200: ('DS', '1', "Start Angle", '', 'StartAngle'), + 0x00540202: ('CS', '1', "Type of Detector Motion", '', 'TypeOfDetectorMotion'), + 0x00540210: ('IS', '1-n', "Trigger Vector", '', 'TriggerVector'), + 0x00540211: ('US', '1', "Number of Triggers in Phase", '', 'NumberOfTriggersInPhase'), + 0x00540220: ('SQ', '1', "View Code Sequence", '', 'ViewCodeSequence'), + 0x00540222: ('SQ', '1', "View Modifier Code Sequence", '', 'ViewModifierCodeSequence'), + 0x00540300: ('SQ', '1', "Radionuclide Code Sequence", '', 'RadionuclideCodeSequence'), + 0x00540302: ('SQ', '1', "Administration Route Code Sequence", '', 'AdministrationRouteCodeSequence'), + 0x00540304: ('SQ', '1', "Radiopharmaceutical Code Sequence", '', 'RadiopharmaceuticalCodeSequence'), + 0x00540306: ('SQ', '1', "Calibration Data Sequence", '', 'CalibrationDataSequence'), + 0x00540308: ('US', '1', "Energy Window Number", '', 'EnergyWindowNumber'), + 0x00540400: ('SH', '1', "Image ID", '', 'ImageID'), + 0x00540410: ('SQ', '1', "Patient Orientation Code Sequence", '', 'PatientOrientationCodeSequence'), + 0x00540412: ('SQ', '1', "Patient Orientation Modifier Code Sequence", '', 'PatientOrientationModifierCodeSequence'), + 0x00540414: ('SQ', '1', "Patient Gantry Relationship Code Sequence", '', 'PatientGantryRelationshipCodeSequence'), + 0x00540500: ('CS', '1', "Slice Progression Direction", '', 'SliceProgressionDirection'), + 0x00541000: ('CS', '2', "Series Type", '', 'SeriesType'), + 0x00541001: ('CS', '1', "Units", '', 'Units'), + 0x00541002: ('CS', '1', "Counts Source", '', 'CountsSource'), + 0x00541004: ('CS', '1', "Reprojection Method", '', 'ReprojectionMethod'), + 0x00541006: ('CS', '1', "SUV Type", '', 'SUVType'), + 0x00541100: ('CS', '1', "Randoms Correction Method", '', 'RandomsCorrectionMethod'), + 0x00541101: ('LO', '1', "Attenuation Correction Method", '', 'AttenuationCorrectionMethod'), + 0x00541102: ('CS', '1', "Decay Correction", '', 'DecayCorrection'), + 0x00541103: ('LO', '1', "Reconstruction Method", '', 'ReconstructionMethod'), + 0x00541104: ('LO', '1', "Detector Lines of Response Used", '', 'DetectorLinesOfResponseUsed'), + 0x00541105: ('LO', '1', "Scatter Correction Method", '', 'ScatterCorrectionMethod'), + 0x00541200: ('DS', '1', "Axial Acceptance", '', 'AxialAcceptance'), + 0x00541201: ('IS', '2', "Axial Mash", '', 'AxialMash'), + 0x00541202: ('IS', '1', "Transverse Mash", '', 'TransverseMash'), + 0x00541203: ('DS', '2', "Detector Element Size", '', 'DetectorElementSize'), + 0x00541210: ('DS', '1', "Coincidence Window Width", '', 'CoincidenceWindowWidth'), + 0x00541220: ('CS', '1-n', "Secondary Counts Type", '', 'SecondaryCountsType'), + 0x00541300: ('DS', '1', "Frame Reference Time", '', 'FrameReferenceTime'), + 0x00541310: ('IS', '1', "Primary (Prompts) Counts Accumulated", '', 'PrimaryPromptsCountsAccumulated'), + 0x00541311: ('IS', '1-n', "Secondary Counts Accumulated", '', 'SecondaryCountsAccumulated'), + 0x00541320: ('DS', '1', "Slice Sensitivity Factor", '', 'SliceSensitivityFactor'), + 0x00541321: ('DS', '1', "Decay Factor", '', 'DecayFactor'), + 0x00541322: ('DS', '1', "Dose Calibration Factor", '', 'DoseCalibrationFactor'), + 0x00541323: ('DS', '1', "Scatter Fraction Factor", '', 'ScatterFractionFactor'), + 0x00541324: ('DS', '1', "Dead Time Factor", '', 'DeadTimeFactor'), + 0x00541330: ('US', '1', "Image Index", '', 'ImageIndex'), + 0x00541400: ('CS', '1-n', "Counts Included", 'Retired', 'CountsIncluded'), + 0x00541401: ('CS', '1', "Dead Time Correction Flag", 'Retired', 'DeadTimeCorrectionFlag'), + 0x00603000: ('SQ', '1', "Histogram Sequence", '', 'HistogramSequence'), + 0x00603002: ('US', '1', "Histogram Number of Bins", '', 'HistogramNumberOfBins'), + 0x00603004: ('US or SS', '1', "Histogram First Bin Value", '', 'HistogramFirstBinValue'), + 0x00603006: ('US or SS', '1', "Histogram Last Bin Value", '', 'HistogramLastBinValue'), + 0x00603008: ('US', '1', "Histogram Bin Width", '', 'HistogramBinWidth'), + 0x00603010: ('LO', '1', "Histogram Explanation", '', 'HistogramExplanation'), + 0x00603020: ('UL', '1-n', "Histogram Data", '', 'HistogramData'), + 0x00620001: ('CS', '1', "Segmentation Type", '', 'SegmentationType'), + 0x00620002: ('SQ', '1', "Segment Sequence", '', 'SegmentSequence'), + 0x00620003: ('SQ', '1', "Segmented Property Category Code Sequence", '', 'SegmentedPropertyCategoryCodeSequence'), + 0x00620004: ('US', '1', "Segment Number", '', 'SegmentNumber'), + 0x00620005: ('LO', '1', "Segment Label", '', 'SegmentLabel'), + 0x00620006: ('ST', '1', "Segment Description", '', 'SegmentDescription'), + 0x00620008: ('CS', '1', "Segment Algorithm Type", '', 'SegmentAlgorithmType'), + 0x00620009: ('LO', '1', "Segment Algorithm Name", '', 'SegmentAlgorithmName'), + 0x0062000A: ('SQ', '1', "Segment Identification Sequence", '', 'SegmentIdentificationSequence'), + 0x0062000B: ('US', '1-n', "Referenced Segment Number", '', 'ReferencedSegmentNumber'), + 0x0062000C: ('US', '1', "Recommended Display Grayscale Value", '', 'RecommendedDisplayGrayscaleValue'), + 0x0062000D: ('US', '3', "Recommended Display CIELab Value", '', 'RecommendedDisplayCIELabValue'), + 0x0062000E: ('US', '1', "Maximum Fractional Value", '', 'MaximumFractionalValue'), + 0x0062000F: ('SQ', '1', "Segmented Property Type Code Sequence", '', 'SegmentedPropertyTypeCodeSequence'), + 0x00620010: ('CS', '1', "Segmentation Fractional Type", '', 'SegmentationFractionalType'), + 0x00640002: ('SQ', '1', "Deformable Registration Sequence", '', 'DeformableRegistrationSequence'), + 0x00640003: ('UI', '1', "Source Frame of Reference UID", '', 'SourceFrameOfReferenceUID'), + 0x00640005: ('SQ', '1', "Deformable Registration Grid Sequence", '', 'DeformableRegistrationGridSequence'), + 0x00640007: ('UL', '3', "Grid Dimensions", '', 'GridDimensions'), + 0x00640008: ('FD', '3', "Grid Resolution", '', 'GridResolution'), + 0x00640009: ('OF', '1', "Vector Grid Data", '', 'VectorGridData'), + 0x0064000F: ('SQ', '1', "Pre Deformation Matrix Registration Sequence", '', 'PreDeformationMatrixRegistrationSequence'), + 0x00640010: ('SQ', '1', "Post Deformation Matrix Registration Sequence", '', 'PostDeformationMatrixRegistrationSequence'), + 0x00660001: ('UL', '1', "Number of Surfaces", '', 'NumberOfSurfaces'), + 0x00660002: ('SQ', '1', "Surface Sequence", '', 'SurfaceSequence'), + 0x00660003: ('UL', '1', "Surface Number", '', 'SurfaceNumber'), + 0x00660004: ('LT', '1', "Surface Comments", '', 'SurfaceComments'), + 0x00660009: ('CS', '1', "Surface Processing", '', 'SurfaceProcessing'), + 0x0066000A: ('FL', '1', "Surface Processing Ratio", '', 'SurfaceProcessingRatio'), + 0x0066000B: ('LO', '1', "Surface Processing Description", '', 'SurfaceProcessingDescription'), + 0x0066000C: ('FL', '1', "Recommended Presentation Opacity", '', 'RecommendedPresentationOpacity'), + 0x0066000D: ('CS', '1', "Recommended Presentation Type", '', 'RecommendedPresentationType'), + 0x0066000E: ('CS', '1', "Finite Volume", '', 'FiniteVolume'), + 0x00660010: ('CS', '1', "Manifold", '', 'Manifold'), + 0x00660011: ('SQ', '1', "Surface Points Sequence", '', 'SurfacePointsSequence'), + 0x00660012: ('SQ', '1', "Surface Points Normals Sequence", '', 'SurfacePointsNormalsSequence'), + 0x00660013: ('SQ', '1', "Surface Mesh Primitives Sequence", '', 'SurfaceMeshPrimitivesSequence'), + 0x00660015: ('UL', '1', "Number of Surface Points", '', 'NumberOfSurfacePoints'), + 0x00660016: ('OF', '1', "Point Coordinates Data", '', 'PointCoordinatesData'), + 0x00660017: ('FL', '3', "Point Position Accuracy", '', 'PointPositionAccuracy'), + 0x00660018: ('FL', '1', "Mean Point Distance", '', 'MeanPointDistance'), + 0x00660019: ('FL', '1', "Maximum Point Distance", '', 'MaximumPointDistance'), + 0x0066001A: ('FL', '6', "Points Bounding Box Coordinates", '', 'PointsBoundingBoxCoordinates'), + 0x0066001B: ('FL', '3', "Axis of Rotation", '', 'AxisOfRotation'), + 0x0066001C: ('FL', '3', "Center of Rotation", '', 'CenterOfRotation'), + 0x0066001E: ('UL', '1', "Number of Vectors", '', 'NumberOfVectors'), + 0x0066001F: ('US', '1', "Vector Dimensionality", '', 'VectorDimensionality'), + 0x00660020: ('FL', '1-n', "Vector Accuracy", '', 'VectorAccuracy'), + 0x00660021: ('OF', '1', "Vector Coordinate Data", '', 'VectorCoordinateData'), + 0x00660023: ('OW', '1', "Triangle Point Index List", '', 'TrianglePointIndexList'), + 0x00660024: ('OW', '1', "Edge Point Index List", '', 'EdgePointIndexList'), + 0x00660025: ('OW', '1', "Vertex Point Index List", '', 'VertexPointIndexList'), + 0x00660026: ('SQ', '1', "Triangle Strip Sequence", '', 'TriangleStripSequence'), + 0x00660027: ('SQ', '1', "Triangle Fan Sequence", '', 'TriangleFanSequence'), + 0x00660028: ('SQ', '1', "Line Sequence", '', 'LineSequence'), + 0x00660029: ('OW', '1', "Primitive Point Index List", '', 'PrimitivePointIndexList'), + 0x0066002A: ('UL', '1', "Surface Count", '', 'SurfaceCount'), + 0x0066002B: ('SQ', '1', "Referenced Surface Sequence", '', 'ReferencedSurfaceSequence'), + 0x0066002C: ('UL', '1', "Referenced Surface Number", '', 'ReferencedSurfaceNumber'), + 0x0066002D: ('SQ', '1', "Segment Surface Generation Algorithm Identification Sequence", '', 'SegmentSurfaceGenerationAlgorithmIdentificationSequence'), + 0x0066002E: ('SQ', '1', "Segment Surface Source Instance Sequence", '', 'SegmentSurfaceSourceInstanceSequence'), + 0x0066002F: ('SQ', '1', "Algorithm Family Code Sequence", '', 'AlgorithmFamilyCodeSequence'), + 0x00660030: ('SQ', '1', "Algorithm Name Code Sequence", '', 'AlgorithmNameCodeSequence'), + 0x00660031: ('LO', '1', "Algorithm Version", '', 'AlgorithmVersion'), + 0x00660032: ('LT', '1', "Algorithm Parameters", '', 'AlgorithmParameters'), + 0x00660034: ('SQ', '1', "Facet Sequence", '', 'FacetSequence'), + 0x00660035: ('SQ', '1', "Surface Processing Algorithm Identification Sequence", '', 'SurfaceProcessingAlgorithmIdentificationSequence'), + 0x00660036: ('LO', '1', "Algorithm Name", '', 'AlgorithmName'), + 0x00686210: ('LO', '1', "Implant Size", '', 'ImplantSize'), + 0x00686221: ('LO', '1', "Implant Template Version", '', 'ImplantTemplateVersion'), + 0x00686222: ('SQ', '1', "Replaced Implant Template Sequence", '', 'ReplacedImplantTemplateSequence'), + 0x00686223: ('CS', '1', "Implant Type", '', 'ImplantType'), + 0x00686224: ('SQ', '1', "Derivation Implant Template Sequence", '', 'DerivationImplantTemplateSequence'), + 0x00686225: ('SQ', '1', "Original Implant Template Sequence", '', 'OriginalImplantTemplateSequence'), + 0x00686226: ('DT', '1', "Effective DateTime", '', 'EffectiveDateTime'), + 0x00686230: ('SQ', '1', "Implant Target Anatomy Sequence", '', 'ImplantTargetAnatomySequence'), + 0x00686260: ('SQ', '1', "Information From Manufacturer Sequence", '', 'InformationFromManufacturerSequence'), + 0x00686265: ('SQ', '1', "Notification From Manufacturer Sequence", '', 'NotificationFromManufacturerSequence'), + 0x00686270: ('DT', '1', "Information Issue DateTime", '', 'InformationIssueDateTime'), + 0x00686280: ('ST', '1', "Information Summary", '', 'InformationSummary'), + 0x006862A0: ('SQ', '1', "Implant Regulatory Disapproval Code Sequence", '', 'ImplantRegulatoryDisapprovalCodeSequence'), + 0x006862A5: ('FD', '1', "Overall Template Spatial Tolerance", '', 'OverallTemplateSpatialTolerance'), + 0x006862C0: ('SQ', '1', "HPGL Document Sequence", '', 'HPGLDocumentSequence'), + 0x006862D0: ('US', '1', "HPGL Document ID", '', 'HPGLDocumentID'), + 0x006862D5: ('LO', '1', "HPGL Document Label", '', 'HPGLDocumentLabel'), + 0x006862E0: ('SQ', '1', "View Orientation Code Sequence", '', 'ViewOrientationCodeSequence'), + 0x006862F0: ('FD', '9', "View Orientation Modifier", '', 'ViewOrientationModifier'), + 0x006862F2: ('FD', '1', "HPGL Document Scaling", '', 'HPGLDocumentScaling'), + 0x00686300: ('OB', '1', "HPGL Document", '', 'HPGLDocument'), + 0x00686310: ('US', '1', "HPGL Contour Pen Number", '', 'HPGLContourPenNumber'), + 0x00686320: ('SQ', '1', "HPGL Pen Sequence", '', 'HPGLPenSequence'), + 0x00686330: ('US', '1', "HPGL Pen Number", '', 'HPGLPenNumber'), + 0x00686340: ('LO', '1', "HPGL Pen Label", '', 'HPGLPenLabel'), + 0x00686345: ('ST', '1', "HPGL Pen Description", '', 'HPGLPenDescription'), + 0x00686346: ('FD', '2', "Recommended Rotation Point", '', 'RecommendedRotationPoint'), + 0x00686347: ('FD', '4', "Bounding Rectangle", '', 'BoundingRectangle'), + 0x00686350: ('US', '1-n', "Implant Template 3D Model Surface Number", '', 'ImplantTemplate3DModelSurfaceNumber'), + 0x00686360: ('SQ', '1', "Surface Model Description Sequence", '', 'SurfaceModelDescriptionSequence'), + 0x00686380: ('LO', '1', "Surface Model Label", '', 'SurfaceModelLabel'), + 0x00686390: ('FD', '1', "Surface Model Scaling Factor", '', 'SurfaceModelScalingFactor'), + 0x006863A0: ('SQ', '1', "Materials Code Sequence", '', 'MaterialsCodeSequence'), + 0x006863A4: ('SQ', '1', "Coating Materials Code Sequence", '', 'CoatingMaterialsCodeSequence'), + 0x006863A8: ('SQ', '1', "Implant Type Code Sequence", '', 'ImplantTypeCodeSequence'), + 0x006863AC: ('SQ', '1', "Fixation Method Code Sequence", '', 'FixationMethodCodeSequence'), + 0x006863B0: ('SQ', '1', "Mating Feature Sets Sequence", '', 'MatingFeatureSetsSequence'), + 0x006863C0: ('US', '1', "Mating Feature Set ID", '', 'MatingFeatureSetID'), + 0x006863D0: ('LO', '1', "Mating Feature Set Label", '', 'MatingFeatureSetLabel'), + 0x006863E0: ('SQ', '1', "Mating Feature Sequence", '', 'MatingFeatureSequence'), + 0x006863F0: ('US', '1', "Mating Feature ID", '', 'MatingFeatureID'), + 0x00686400: ('SQ', '1', "Mating Feature Degree of Freedom Sequence", '', 'MatingFeatureDegreeOfFreedomSequence'), + 0x00686410: ('US', '1', "Degree of Freedom ID", '', 'DegreeOfFreedomID'), + 0x00686420: ('CS', '1', "Degree of Freedom Type", '', 'DegreeOfFreedomType'), + 0x00686430: ('SQ', '1', "2D Mating Feature Coordinates Sequence", '', 'TwoDMatingFeatureCoordinatesSequence'), + 0x00686440: ('US', '1', "Referenced HPGL Document ID", '', 'ReferencedHPGLDocumentID'), + 0x00686450: ('FD', '2', "2D Mating Point", '', 'TwoDMatingPoint'), + 0x00686460: ('FD', '4', "2D Mating Axes", '', 'TwoDMatingAxes'), + 0x00686470: ('SQ', '1', "2D Degree of Freedom Sequence", '', 'TwoDDegreeOfFreedomSequence'), + 0x00686490: ('FD', '3', "3D Degree of Freedom Axis", '', 'ThreeDDegreeOfFreedomAxis'), + 0x006864A0: ('FD', '2', "Range of Freedom", '', 'RangeOfFreedom'), + 0x006864C0: ('FD', '3', "3D Mating Point", '', 'ThreeDMatingPoint'), + 0x006864D0: ('FD', '9', "3D Mating Axes", '', 'ThreeDMatingAxes'), + 0x006864F0: ('FD', '3', "2D Degree of Freedom Axis", '', 'TwoDDegreeOfFreedomAxis'), + 0x00686500: ('SQ', '1', "Planning Landmark Point Sequence", '', 'PlanningLandmarkPointSequence'), + 0x00686510: ('SQ', '1', "Planning Landmark Line Sequence", '', 'PlanningLandmarkLineSequence'), + 0x00686520: ('SQ', '1', "Planning Landmark Plane Sequence", '', 'PlanningLandmarkPlaneSequence'), + 0x00686530: ('US', '1', "Planning Landmark ID", '', 'PlanningLandmarkID'), + 0x00686540: ('LO', '1', "Planning Landmark Description", '', 'PlanningLandmarkDescription'), + 0x00686545: ('SQ', '1', "Planning Landmark Identification Code Sequence", '', 'PlanningLandmarkIdentificationCodeSequence'), + 0x00686550: ('SQ', '1', "2D Point Coordinates Sequence", '', 'TwoDPointCoordinatesSequence'), + 0x00686560: ('FD', '2', "2D Point Coordinates", '', 'TwoDPointCoordinates'), + 0x00686590: ('FD', '3', "3D Point Coordinates", '', 'ThreeDPointCoordinates'), + 0x006865A0: ('SQ', '1', "2D Line Coordinates Sequence", '', 'TwoDLineCoordinatesSequence'), + 0x006865B0: ('FD', '4', "2D Line Coordinates", '', 'TwoDLineCoordinates'), + 0x006865D0: ('FD', '6', "3D Line Coordinates", '', 'ThreeDLineCoordinates'), + 0x006865E0: ('SQ', '1', "2D Plane Coordinates Sequence", '', 'TwoDPlaneCoordinatesSequence'), + 0x006865F0: ('FD', '4', "2D Plane Intersection", '', 'TwoDPlaneIntersection'), + 0x00686610: ('FD', '3', "3D Plane Origin", '', 'ThreeDPlaneOrigin'), + 0x00686620: ('FD', '3', "3D Plane Normal", '', 'ThreeDPlaneNormal'), + 0x00700001: ('SQ', '1', "Graphic Annotation Sequence", '', 'GraphicAnnotationSequence'), + 0x00700002: ('CS', '1', "Graphic Layer", '', 'GraphicLayer'), + 0x00700003: ('CS', '1', "Bounding Box Annotation Units", '', 'BoundingBoxAnnotationUnits'), + 0x00700004: ('CS', '1', "Anchor Point Annotation Units", '', 'AnchorPointAnnotationUnits'), + 0x00700005: ('CS', '1', "Graphic Annotation Units", '', 'GraphicAnnotationUnits'), + 0x00700006: ('ST', '1', "Unformatted Text Value", '', 'UnformattedTextValue'), + 0x00700008: ('SQ', '1', "Text Object Sequence", '', 'TextObjectSequence'), + 0x00700009: ('SQ', '1', "Graphic Object Sequence", '', 'GraphicObjectSequence'), + 0x00700010: ('FL', '2', "Bounding Box Top Left Hand Corner", '', 'BoundingBoxTopLeftHandCorner'), + 0x00700011: ('FL', '2', "Bounding Box Bottom Right Hand Corner", '', 'BoundingBoxBottomRightHandCorner'), + 0x00700012: ('CS', '1', "Bounding Box Text Horizontal Justification", '', 'BoundingBoxTextHorizontalJustification'), + 0x00700014: ('FL', '2', "Anchor Point", '', 'AnchorPoint'), + 0x00700015: ('CS', '1', "Anchor Point Visibility", '', 'AnchorPointVisibility'), + 0x00700020: ('US', '1', "Graphic Dimensions", '', 'GraphicDimensions'), + 0x00700021: ('US', '1', "Number of Graphic Points", '', 'NumberOfGraphicPoints'), + 0x00700022: ('FL', '2-n', "Graphic Data", '', 'GraphicData'), + 0x00700023: ('CS', '1', "Graphic Type", '', 'GraphicType'), + 0x00700024: ('CS', '1', "Graphic Filled", '', 'GraphicFilled'), + 0x00700040: ('IS', '1', "Image Rotation (Retired)", 'Retired', 'ImageRotationRetired'), + 0x00700041: ('CS', '1', "Image Horizontal Flip", '', 'ImageHorizontalFlip'), + 0x00700042: ('US', '1', "Image Rotation", '', 'ImageRotation'), + 0x00700050: ('US', '2', "Displayed Area Top Left Hand Corner (Trial)", 'Retired', 'DisplayedAreaTopLeftHandCornerTrial'), + 0x00700051: ('US', '2', "Displayed Area Bottom Right Hand Corner (Trial)", 'Retired', 'DisplayedAreaBottomRightHandCornerTrial'), + 0x00700052: ('SL', '2', "Displayed Area Top Left Hand Corner", '', 'DisplayedAreaTopLeftHandCorner'), + 0x00700053: ('SL', '2', "Displayed Area Bottom Right Hand Corner", '', 'DisplayedAreaBottomRightHandCorner'), + 0x0070005A: ('SQ', '1', "Displayed Area Selection Sequence", '', 'DisplayedAreaSelectionSequence'), + 0x00700060: ('SQ', '1', "Graphic Layer Sequence", '', 'GraphicLayerSequence'), + 0x00700062: ('IS', '1', "Graphic Layer Order", '', 'GraphicLayerOrder'), + 0x00700066: ('US', '1', "Graphic Layer Recommended Display Grayscale Value", '', 'GraphicLayerRecommendedDisplayGrayscaleValue'), + 0x00700067: ('US', '3', "Graphic Layer Recommended Display RGB Value", 'Retired', 'GraphicLayerRecommendedDisplayRGBValue'), + 0x00700068: ('LO', '1', "Graphic Layer Description", '', 'GraphicLayerDescription'), + 0x00700080: ('CS', '1', "Content Label", '', 'ContentLabel'), + 0x00700081: ('LO', '1', "Content Description", '', 'ContentDescription'), + 0x00700082: ('DA', '1', "Presentation Creation Date", '', 'PresentationCreationDate'), + 0x00700083: ('TM', '1', "Presentation Creation Time", '', 'PresentationCreationTime'), + 0x00700084: ('PN', '1', "Content Creator's Name", '', 'ContentCreatorName'), + 0x00700086: ('SQ', '1', "Content Creator's Identification Code Sequence", '', 'ContentCreatorIdentificationCodeSequence'), + 0x00700087: ('SQ', '1', "Alternate Content Description Sequence", '', 'AlternateContentDescriptionSequence'), + 0x00700100: ('CS', '1', "Presentation Size Mode", '', 'PresentationSizeMode'), + 0x00700101: ('DS', '2', "Presentation Pixel Spacing", '', 'PresentationPixelSpacing'), + 0x00700102: ('IS', '2', "Presentation Pixel Aspect Ratio", '', 'PresentationPixelAspectRatio'), + 0x00700103: ('FL', '1', "Presentation Pixel Magnification Ratio", '', 'PresentationPixelMagnificationRatio'), + 0x00700207: ('LO', '1', "Graphic Group Label", '', 'GraphicGroupLabel'), + 0x00700208: ('ST', '1', "Graphic Group Description", '', 'GraphicGroupDescription'), + 0x00700209: ('SQ', '1', "Compound Graphic Sequence", '', 'CompoundGraphicSequence'), + 0x00700226: ('UL', '1', "Compound Graphic Instance ID", '', 'CompoundGraphicInstanceID'), + 0x00700227: ('LO', '1', "Font Name", '', 'FontName'), + 0x00700228: ('CS', '1', "Font Name Type", '', 'FontNameType'), + 0x00700229: ('LO', '1', "CSS Font Name", '', 'CSSFontName'), + 0x00700230: ('FD', '1', "Rotation Angle", '', 'RotationAngle'), + 0x00700231: ('SQ', '1', "Text Style Sequence", '', 'TextStyleSequence'), + 0x00700232: ('SQ', '1', "Line Style Sequence", '', 'LineStyleSequence'), + 0x00700233: ('SQ', '1', "Fill Style Sequence", '', 'FillStyleSequence'), + 0x00700234: ('SQ', '1', "Graphic Group Sequence", '', 'GraphicGroupSequence'), + 0x00700241: ('US', '3', "Text Color CIELab Value", '', 'TextColorCIELabValue'), + 0x00700242: ('CS', '1', "Horizontal Alignment", '', 'HorizontalAlignment'), + 0x00700243: ('CS', '1', "Vertical Alignment", '', 'VerticalAlignment'), + 0x00700244: ('CS', '1', "Shadow Style", '', 'ShadowStyle'), + 0x00700245: ('FL', '1', "Shadow Offset X", '', 'ShadowOffsetX'), + 0x00700246: ('FL', '1', "Shadow Offset Y", '', 'ShadowOffsetY'), + 0x00700247: ('US', '3', "Shadow Color CIELab Value", '', 'ShadowColorCIELabValue'), + 0x00700248: ('CS', '1', "Underlined", '', 'Underlined'), + 0x00700249: ('CS', '1', "Bold", '', 'Bold'), + 0x00700250: ('CS', '1', "Italic", '', 'Italic'), + 0x00700251: ('US', '3', "Pattern On Color CIELab Value", '', 'PatternOnColorCIELabValue'), + 0x00700252: ('US', '3', "Pattern Off Color CIELab Value", '', 'PatternOffColorCIELabValue'), + 0x00700253: ('FL', '1', "Line Thickness", '', 'LineThickness'), + 0x00700254: ('CS', '1', "Line Dashing Style", '', 'LineDashingStyle'), + 0x00700255: ('UL', '1', "Line Pattern", '', 'LinePattern'), + 0x00700256: ('OB', '1', "Fill Pattern", '', 'FillPattern'), + 0x00700257: ('CS', '1', "Fill Mode", '', 'FillMode'), + 0x00700258: ('FL', '1', "Shadow Opacity", '', 'ShadowOpacity'), + 0x00700261: ('FL', '1', "Gap Length", '', 'GapLength'), + 0x00700262: ('FL', '1', "Diameter of Visibility", '', 'DiameterOfVisibility'), + 0x00700273: ('FL', '2', "Rotation Point", '', 'RotationPoint'), + 0x00700274: ('CS', '1', "Tick Alignment", '', 'TickAlignment'), + 0x00700278: ('CS', '1', "Show Tick Label", '', 'ShowTickLabel'), + 0x00700279: ('CS', '1', "Tick Label Alignment", '', 'TickLabelAlignment'), + 0x00700282: ('CS', '1', "Compound Graphic Units", '', 'CompoundGraphicUnits'), + 0x00700284: ('FL', '1', "Pattern On Opacity", '', 'PatternOnOpacity'), + 0x00700285: ('FL', '1', "Pattern Off Opacity", '', 'PatternOffOpacity'), + 0x00700287: ('SQ', '1', "Major Ticks Sequence", '', 'MajorTicksSequence'), + 0x00700288: ('FL', '1', "Tick Position", '', 'TickPosition'), + 0x00700289: ('SH', '1', "Tick Label", '', 'TickLabel'), + 0x00700294: ('CS', '1', "Compound Graphic Type", '', 'CompoundGraphicType'), + 0x00700295: ('UL', '1', "Graphic Group ID", '', 'GraphicGroupID'), + 0x00700306: ('CS', '1', "Shape Type", '', 'ShapeType'), + 0x00700308: ('SQ', '1', "Registration Sequence", '', 'RegistrationSequence'), + 0x00700309: ('SQ', '1', "Matrix Registration Sequence", '', 'MatrixRegistrationSequence'), + 0x0070030A: ('SQ', '1', "Matrix Sequence", '', 'MatrixSequence'), + 0x0070030C: ('CS', '1', "Frame of Reference Transformation Matrix Type", '', 'FrameOfReferenceTransformationMatrixType'), + 0x0070030D: ('SQ', '1', "Registration Type Code Sequence", '', 'RegistrationTypeCodeSequence'), + 0x0070030F: ('ST', '1', "Fiducial Description", '', 'FiducialDescription'), + 0x00700310: ('SH', '1', "Fiducial Identifier", '', 'FiducialIdentifier'), + 0x00700311: ('SQ', '1', "Fiducial Identifier Code Sequence", '', 'FiducialIdentifierCodeSequence'), + 0x00700312: ('FD', '1', "Contour Uncertainty Radius", '', 'ContourUncertaintyRadius'), + 0x00700314: ('SQ', '1', "Used Fiducials Sequence", '', 'UsedFiducialsSequence'), + 0x00700318: ('SQ', '1', "Graphic Coordinates Data Sequence", '', 'GraphicCoordinatesDataSequence'), + 0x0070031A: ('UI', '1', "Fiducial UID", '', 'FiducialUID'), + 0x0070031C: ('SQ', '1', "Fiducial Set Sequence", '', 'FiducialSetSequence'), + 0x0070031E: ('SQ', '1', "Fiducial Sequence", '', 'FiducialSequence'), + 0x00700401: ('US', '3', "Graphic Layer Recommended Display CIELab Value", '', 'GraphicLayerRecommendedDisplayCIELabValue'), + 0x00700402: ('SQ', '1', "Blending Sequence", '', 'BlendingSequence'), + 0x00700403: ('FL', '1', "Relative Opacity", '', 'RelativeOpacity'), + 0x00700404: ('SQ', '1', "Referenced Spatial Registration Sequence", '', 'ReferencedSpatialRegistrationSequence'), + 0x00700405: ('CS', '1', "Blending Position", '', 'BlendingPosition'), + 0x00720002: ('SH', '1', "Hanging Protocol Name", '', 'HangingProtocolName'), + 0x00720004: ('LO', '1', "Hanging Protocol Description", '', 'HangingProtocolDescription'), + 0x00720006: ('CS', '1', "Hanging Protocol Level", '', 'HangingProtocolLevel'), + 0x00720008: ('LO', '1', "Hanging Protocol Creator", '', 'HangingProtocolCreator'), + 0x0072000A: ('DT', '1', "Hanging Protocol Creation DateTime", '', 'HangingProtocolCreationDateTime'), + 0x0072000C: ('SQ', '1', "Hanging Protocol Definition Sequence", '', 'HangingProtocolDefinitionSequence'), + 0x0072000E: ('SQ', '1', "Hanging Protocol User Identification Code Sequence", '', 'HangingProtocolUserIdentificationCodeSequence'), + 0x00720010: ('LO', '1', "Hanging Protocol User Group Name", '', 'HangingProtocolUserGroupName'), + 0x00720012: ('SQ', '1', "Source Hanging Protocol Sequence", '', 'SourceHangingProtocolSequence'), + 0x00720014: ('US', '1', "Number of Priors Referenced", '', 'NumberOfPriorsReferenced'), + 0x00720020: ('SQ', '1', "Image Sets Sequence", '', 'ImageSetsSequence'), + 0x00720022: ('SQ', '1', "Image Set Selector Sequence", '', 'ImageSetSelectorSequence'), + 0x00720024: ('CS', '1', "Image Set Selector Usage Flag", '', 'ImageSetSelectorUsageFlag'), + 0x00720026: ('AT', '1', "Selector Attribute", '', 'SelectorAttribute'), + 0x00720028: ('US', '1', "Selector Value Number", '', 'SelectorValueNumber'), + 0x00720030: ('SQ', '1', "Time Based Image Sets Sequence", '', 'TimeBasedImageSetsSequence'), + 0x00720032: ('US', '1', "Image Set Number", '', 'ImageSetNumber'), + 0x00720034: ('CS', '1', "Image Set Selector Category", '', 'ImageSetSelectorCategory'), + 0x00720038: ('US', '2', "Relative Time", '', 'RelativeTime'), + 0x0072003A: ('CS', '1', "Relative Time Units", '', 'RelativeTimeUnits'), + 0x0072003C: ('SS', '2', "Abstract Prior Value", '', 'AbstractPriorValue'), + 0x0072003E: ('SQ', '1', "Abstract Prior Code Sequence", '', 'AbstractPriorCodeSequence'), + 0x00720040: ('LO', '1', "Image Set Label", '', 'ImageSetLabel'), + 0x00720050: ('CS', '1', "Selector Attribute VR", '', 'SelectorAttributeVR'), + 0x00720052: ('AT', '1-n', "Selector Sequence Pointer", '', 'SelectorSequencePointer'), + 0x00720054: ('LO', '1-n', "Selector Sequence Pointer Private Creator", '', 'SelectorSequencePointerPrivateCreator'), + 0x00720056: ('LO', '1', "Selector Attribute Private Creator", '', 'SelectorAttributePrivateCreator'), + 0x00720060: ('AT', '1-n', "Selector AT Value", '', 'SelectorATValue'), + 0x00720062: ('CS', '1-n', "Selector CS Value", '', 'SelectorCSValue'), + 0x00720064: ('IS', '1-n', "Selector IS Value", '', 'SelectorISValue'), + 0x00720066: ('LO', '1-n', "Selector LO Value", '', 'SelectorLOValue'), + 0x00720068: ('LT', '1', "Selector LT Value", '', 'SelectorLTValue'), + 0x0072006A: ('PN', '1-n', "Selector PN Value", '', 'SelectorPNValue'), + 0x0072006C: ('SH', '1-n', "Selector SH Value", '', 'SelectorSHValue'), + 0x0072006E: ('ST', '1', "Selector ST Value", '', 'SelectorSTValue'), + 0x00720070: ('UT', '1', "Selector UT Value", '', 'SelectorUTValue'), + 0x00720072: ('DS', '1-n', "Selector DS Value", '', 'SelectorDSValue'), + 0x00720074: ('FD', '1-n', "Selector FD Value", '', 'SelectorFDValue'), + 0x00720076: ('FL', '1-n', "Selector FL Value", '', 'SelectorFLValue'), + 0x00720078: ('UL', '1-n', "Selector UL Value", '', 'SelectorULValue'), + 0x0072007A: ('US', '1-n', "Selector US Value", '', 'SelectorUSValue'), + 0x0072007C: ('SL', '1-n', "Selector SL Value", '', 'SelectorSLValue'), + 0x0072007E: ('SS', '1-n', "Selector SS Value", '', 'SelectorSSValue'), + 0x00720080: ('SQ', '1', "Selector Code Sequence Value", '', 'SelectorCodeSequenceValue'), + 0x00720100: ('US', '1', "Number of Screens", '', 'NumberOfScreens'), + 0x00720102: ('SQ', '1', "Nominal Screen Definition Sequence", '', 'NominalScreenDefinitionSequence'), + 0x00720104: ('US', '1', "Number of Vertical Pixels", '', 'NumberOfVerticalPixels'), + 0x00720106: ('US', '1', "Number of Horizontal Pixels", '', 'NumberOfHorizontalPixels'), + 0x00720108: ('FD', '4', "Display Environment Spatial Position", '', 'DisplayEnvironmentSpatialPosition'), + 0x0072010A: ('US', '1', "Screen Minimum Grayscale Bit Depth", '', 'ScreenMinimumGrayscaleBitDepth'), + 0x0072010C: ('US', '1', "Screen Minimum Color Bit Depth", '', 'ScreenMinimumColorBitDepth'), + 0x0072010E: ('US', '1', "Application Maximum Repaint Time", '', 'ApplicationMaximumRepaintTime'), + 0x00720200: ('SQ', '1', "Display Sets Sequence", '', 'DisplaySetsSequence'), + 0x00720202: ('US', '1', "Display Set Number", '', 'DisplaySetNumber'), + 0x00720203: ('LO', '1', "Display Set Label", '', 'DisplaySetLabel'), + 0x00720204: ('US', '1', "Display Set Presentation Group", '', 'DisplaySetPresentationGroup'), + 0x00720206: ('LO', '1', "Display Set Presentation Group Description", '', 'DisplaySetPresentationGroupDescription'), + 0x00720208: ('CS', '1', "Partial Data Display Handling", '', 'PartialDataDisplayHandling'), + 0x00720210: ('SQ', '1', "Synchronized Scrolling Sequence", '', 'SynchronizedScrollingSequence'), + 0x00720212: ('US', '2-n', "Display Set Scrolling Group", '', 'DisplaySetScrollingGroup'), + 0x00720214: ('SQ', '1', "Navigation Indicator Sequence", '', 'NavigationIndicatorSequence'), + 0x00720216: ('US', '1', "Navigation Display Set", '', 'NavigationDisplaySet'), + 0x00720218: ('US', '1-n', "Reference Display Sets", '', 'ReferenceDisplaySets'), + 0x00720300: ('SQ', '1', "Image Boxes Sequence", '', 'ImageBoxesSequence'), + 0x00720302: ('US', '1', "Image Box Number", '', 'ImageBoxNumber'), + 0x00720304: ('CS', '1', "Image Box Layout Type", '', 'ImageBoxLayoutType'), + 0x00720306: ('US', '1', "Image Box Tile Horizontal Dimension", '', 'ImageBoxTileHorizontalDimension'), + 0x00720308: ('US', '1', "Image Box Tile Vertical Dimension", '', 'ImageBoxTileVerticalDimension'), + 0x00720310: ('CS', '1', "Image Box Scroll Direction", '', 'ImageBoxScrollDirection'), + 0x00720312: ('CS', '1', "Image Box Small Scroll Type", '', 'ImageBoxSmallScrollType'), + 0x00720314: ('US', '1', "Image Box Small Scroll Amount", '', 'ImageBoxSmallScrollAmount'), + 0x00720316: ('CS', '1', "Image Box Large Scroll Type", '', 'ImageBoxLargeScrollType'), + 0x00720318: ('US', '1', "Image Box Large Scroll Amount", '', 'ImageBoxLargeScrollAmount'), + 0x00720320: ('US', '1', "Image Box Overlap Priority", '', 'ImageBoxOverlapPriority'), + 0x00720330: ('FD', '1', "Cine Relative to Real-Time", '', 'CineRelativeToRealTime'), + 0x00720400: ('SQ', '1', "Filter Operations Sequence", '', 'FilterOperationsSequence'), + 0x00720402: ('CS', '1', "Filter-by Category", '', 'FilterByCategory'), + 0x00720404: ('CS', '1', "Filter-by Attribute Presence", '', 'FilterByAttributePresence'), + 0x00720406: ('CS', '1', "Filter-by Operator", '', 'FilterByOperator'), + 0x00720420: ('US', '3', "Structured Display Background CIELab Value", '', 'StructuredDisplayBackgroundCIELabValue'), + 0x00720421: ('US', '3', "Empty Image Box CIELab Value", '', 'EmptyImageBoxCIELabValue'), + 0x00720422: ('SQ', '1', "Structured Display Image Box Sequence", '', 'StructuredDisplayImageBoxSequence'), + 0x00720424: ('SQ', '1', "Structured Display Text Box Sequence", '', 'StructuredDisplayTextBoxSequence'), + 0x00720427: ('SQ', '1', "Referenced First Frame Sequence", '', 'ReferencedFirstFrameSequence'), + 0x00720430: ('SQ', '1', "Image Box Synchronization Sequence", '', 'ImageBoxSynchronizationSequence'), + 0x00720432: ('US', '2-n', "Synchronized Image Box List", '', 'SynchronizedImageBoxList'), + 0x00720434: ('CS', '1', "Type of Synchronization", '', 'TypeOfSynchronization'), + 0x00720500: ('CS', '1', "Blending Operation Type", '', 'BlendingOperationType'), + 0x00720510: ('CS', '1', "Reformatting Operation Type", '', 'ReformattingOperationType'), + 0x00720512: ('FD', '1', "Reformatting Thickness", '', 'ReformattingThickness'), + 0x00720514: ('FD', '1', "Reformatting Interval", '', 'ReformattingInterval'), + 0x00720516: ('CS', '1', "Reformatting Operation Initial View Direction", '', 'ReformattingOperationInitialViewDirection'), + 0x00720520: ('CS', '1-n', "3D Rendering Type", '', 'ThreeDRenderingType'), + 0x00720600: ('SQ', '1', "Sorting Operations Sequence", '', 'SortingOperationsSequence'), + 0x00720602: ('CS', '1', "Sort-by Category", '', 'SortByCategory'), + 0x00720604: ('CS', '1', "Sorting Direction", '', 'SortingDirection'), + 0x00720700: ('CS', '2', "Display Set Patient Orientation", '', 'DisplaySetPatientOrientation'), + 0x00720702: ('CS', '1', "VOI Type", '', 'VOIType'), + 0x00720704: ('CS', '1', "Pseudo-Color Type", '', 'PseudoColorType'), + 0x00720705: ('SQ', '1', "Pseudo-Color Palette Instance Reference Sequence", '', 'PseudoColorPaletteInstanceReferenceSequence'), + 0x00720706: ('CS', '1', "Show Grayscale Inverted", '', 'ShowGrayscaleInverted'), + 0x00720710: ('CS', '1', "Show Image True Size Flag", '', 'ShowImageTrueSizeFlag'), + 0x00720712: ('CS', '1', "Show Graphic Annotation Flag", '', 'ShowGraphicAnnotationFlag'), + 0x00720714: ('CS', '1', "Show Patient Demographics Flag", '', 'ShowPatientDemographicsFlag'), + 0x00720716: ('CS', '1', "Show Acquisition Techniques Flag", '', 'ShowAcquisitionTechniquesFlag'), + 0x00720717: ('CS', '1', "Display Set Horizontal Justification", '', 'DisplaySetHorizontalJustification'), + 0x00720718: ('CS', '1', "Display Set Vertical Justification", '', 'DisplaySetVerticalJustification'), + 0x00740120: ('FD', '1', "Continuation Start Meterset", '', 'ContinuationStartMeterset'), + 0x00740121: ('FD', '1', "Continuation End Meterset", '', 'ContinuationEndMeterset'), + 0x00741000: ('CS', '1', "Procedure Step State", '', 'ProcedureStepState'), + 0x00741002: ('SQ', '1', "Procedure Step Progress Information Sequence", '', 'ProcedureStepProgressInformationSequence'), + 0x00741004: ('DS', '1', "Procedure Step Progress", '', 'ProcedureStepProgress'), + 0x00741006: ('ST', '1', "Procedure Step Progress Description", '', 'ProcedureStepProgressDescription'), + 0x00741008: ('SQ', '1', "Procedure Step Communications URI Sequence", '', 'ProcedureStepCommunicationsURISequence'), + 0x0074100a: ('ST', '1', "Contact URI", '', 'ContactURI'), + 0x0074100c: ('LO', '1', "Contact Display Name", '', 'ContactDisplayName'), + 0x0074100e: ('SQ', '1', "Procedure Step Discontinuation Reason Code Sequence", '', 'ProcedureStepDiscontinuationReasonCodeSequence'), + 0x00741020: ('SQ', '1', "Beam Task Sequence", '', 'BeamTaskSequence'), + 0x00741022: ('CS', '1', "Beam Task Type", '', 'BeamTaskType'), + 0x00741024: ('IS', '1', "Beam Order Index (Trial)", 'Retired', 'BeamOrderIndexTrial'), + 0x00741026: ('FD', '1', "Table Top Vertical Adjusted Position", '', 'TableTopVerticalAdjustedPosition'), + 0x00741027: ('FD', '1', "Table Top Longitudinal Adjusted Position", '', 'TableTopLongitudinalAdjustedPosition'), + 0x00741028: ('FD', '1', "Table Top Lateral Adjusted Position", '', 'TableTopLateralAdjustedPosition'), + 0x0074102A: ('FD', '1', "Patient Support Adjusted Angle", '', 'PatientSupportAdjustedAngle'), + 0x0074102B: ('FD', '1', "Table Top Eccentric Adjusted Angle", '', 'TableTopEccentricAdjustedAngle'), + 0x0074102C: ('FD', '1', "Table Top Pitch Adjusted Angle", '', 'TableTopPitchAdjustedAngle'), + 0x0074102D: ('FD', '1', "Table Top Roll Adjusted Angle", '', 'TableTopRollAdjustedAngle'), + 0x00741030: ('SQ', '1', "Delivery Verification Image Sequence", '', 'DeliveryVerificationImageSequence'), + 0x00741032: ('CS', '1', "Verification Image Timing", '', 'VerificationImageTiming'), + 0x00741034: ('CS', '1', "Double Exposure Flag", '', 'DoubleExposureFlag'), + 0x00741036: ('CS', '1', "Double Exposure Ordering", '', 'DoubleExposureOrdering'), + 0x00741038: ('DS', '1', "Double Exposure Meterset (Trial)", 'Retired', 'DoubleExposureMetersetTrial'), + 0x0074103A: ('DS', '4', "Double Exposure Field Delta (Trial)", 'Retired', 'DoubleExposureFieldDeltaTrial'), + 0x00741040: ('SQ', '1', "Related Reference RT Image Sequence", '', 'RelatedReferenceRTImageSequence'), + 0x00741042: ('SQ', '1', "General Machine Verification Sequence", '', 'GeneralMachineVerificationSequence'), + 0x00741044: ('SQ', '1', "Conventional Machine Verification Sequence", '', 'ConventionalMachineVerificationSequence'), + 0x00741046: ('SQ', '1', "Ion Machine Verification Sequence", '', 'IonMachineVerificationSequence'), + 0x00741048: ('SQ', '1', "Failed Attributes Sequence", '', 'FailedAttributesSequence'), + 0x0074104A: ('SQ', '1', "Overridden Attributes Sequence", '', 'OverriddenAttributesSequence'), + 0x0074104C: ('SQ', '1', "Conventional Control Point Verification Sequence", '', 'ConventionalControlPointVerificationSequence'), + 0x0074104E: ('SQ', '1', "Ion Control Point Verification Sequence", '', 'IonControlPointVerificationSequence'), + 0x00741050: ('SQ', '1', "Attribute Occurrence Sequence", '', 'AttributeOccurrenceSequence'), + 0x00741052: ('AT', '1', "Attribute Occurrence Pointer", '', 'AttributeOccurrencePointer'), + 0x00741054: ('UL', '1', "Attribute Item Selector", '', 'AttributeItemSelector'), + 0x00741056: ('LO', '1', "Attribute Occurrence Private Creator", '', 'AttributeOccurrencePrivateCreator'), + 0x00741057: ('IS', '1-n', "Selector Sequence Pointer Items", '', 'SelectorSequencePointerItems'), + 0x00741200: ('CS', '1', "Scheduled Procedure Step Priority", '', 'ScheduledProcedureStepPriority'), + 0x00741202: ('LO', '1', "Worklist Label", '', 'WorklistLabel'), + 0x00741204: ('LO', '1', "Procedure Step Label", '', 'ProcedureStepLabel'), + 0x00741210: ('SQ', '1', "Scheduled Processing Parameters Sequence", '', 'ScheduledProcessingParametersSequence'), + 0x00741212: ('SQ', '1', "Performed Processing Parameters Sequence", '', 'PerformedProcessingParametersSequence'), + 0x00741216: ('SQ', '1', "Unified Procedure Step Performed Procedure Sequence", '', 'UnifiedProcedureStepPerformedProcedureSequence'), + 0x00741220: ('SQ', '1', "Related Procedure Step Sequence", 'Retired', 'RelatedProcedureStepSequence'), + 0x00741222: ('LO', '1', "Procedure Step Relationship Type", 'Retired', 'ProcedureStepRelationshipType'), + 0x00741224: ('SQ', '1', "Replaced Procedure Step Sequence", '', 'ReplacedProcedureStepSequence'), + 0x00741230: ('LO', '1', "Deletion Lock", '', 'DeletionLock'), + 0x00741234: ('AE', '1', "Receiving AE", '', 'ReceivingAE'), + 0x00741236: ('AE', '1', "Requesting AE", '', 'RequestingAE'), + 0x00741238: ('LT', '1', "Reason for Cancellation", '', 'ReasonForCancellation'), + 0x00741242: ('CS', '1', "SCP Status", '', 'SCPStatus'), + 0x00741244: ('CS', '1', "Subscription List Status", '', 'SubscriptionListStatus'), + 0x00741246: ('CS', '1', "Unified Procedure Step List Status", '', 'UnifiedProcedureStepListStatus'), + 0x00741324: ('UL', '1', "Beam Order Index", '', 'BeamOrderIndex'), + 0x00741338: ('FD', '1', "Double Exposure Meterset", '', 'DoubleExposureMeterset'), + 0x0074133A: ('FD', '4', "Double Exposure Field Delta", '', 'DoubleExposureFieldDelta'), + 0x00760001: ('LO', '1', "Implant Assembly Template Name", '', 'ImplantAssemblyTemplateName'), + 0x00760003: ('LO', '1', "Implant Assembly Template Issuer", '', 'ImplantAssemblyTemplateIssuer'), + 0x00760006: ('LO', '1', "Implant Assembly Template Version", '', 'ImplantAssemblyTemplateVersion'), + 0x00760008: ('SQ', '1', "Replaced Implant Assembly Template Sequence", '', 'ReplacedImplantAssemblyTemplateSequence'), + 0x0076000A: ('CS', '1', "Implant Assembly Template Type", '', 'ImplantAssemblyTemplateType'), + 0x0076000C: ('SQ', '1', "Original Implant Assembly Template Sequence", '', 'OriginalImplantAssemblyTemplateSequence'), + 0x0076000E: ('SQ', '1', "Derivation Implant Assembly Template Sequence", '', 'DerivationImplantAssemblyTemplateSequence'), + 0x00760010: ('SQ', '1', "Implant Assembly Template Target Anatomy Sequence", '', 'ImplantAssemblyTemplateTargetAnatomySequence'), + 0x00760020: ('SQ', '1', "Procedure Type Code Sequence", '', 'ProcedureTypeCodeSequence'), + 0x00760030: ('LO', '1', "Surgical Technique", '', 'SurgicalTechnique'), + 0x00760032: ('SQ', '1', "Component Types Sequence", '', 'ComponentTypesSequence'), + 0x00760034: ('CS', '1', "Component Type Code Sequence", '', 'ComponentTypeCodeSequence'), + 0x00760036: ('CS', '1', "Exclusive Component Type", '', 'ExclusiveComponentType'), + 0x00760038: ('CS', '1', "Mandatory Component Type", '', 'MandatoryComponentType'), + 0x00760040: ('SQ', '1', "Component Sequence", '', 'ComponentSequence'), + 0x00760055: ('US', '1', "Component ID", '', 'ComponentID'), + 0x00760060: ('SQ', '1', "Component Assembly Sequence", '', 'ComponentAssemblySequence'), + 0x00760070: ('US', '1', "Component 1 Referenced ID", '', 'Component1ReferencedID'), + 0x00760080: ('US', '1', "Component 1 Referenced Mating Feature Set ID", '', 'Component1ReferencedMatingFeatureSetID'), + 0x00760090: ('US', '1', "Component 1 Referenced Mating Feature ID", '', 'Component1ReferencedMatingFeatureID'), + 0x007600A0: ('US', '1', "Component 2 Referenced ID", '', 'Component2ReferencedID'), + 0x007600B0: ('US', '1', "Component 2 Referenced Mating Feature Set ID", '', 'Component2ReferencedMatingFeatureSetID'), + 0x007600C0: ('US', '1', "Component 2 Referenced Mating Feature ID", '', 'Component2ReferencedMatingFeatureID'), + 0x00780001: ('LO', '1', "Implant Template Group Name", '', 'ImplantTemplateGroupName'), + 0x00780010: ('ST', '1', "Implant Template Group Description", '', 'ImplantTemplateGroupDescription'), + 0x00780020: ('LO', '1', "Implant Template Group Issuer", '', 'ImplantTemplateGroupIssuer'), + 0x00780024: ('LO', '1', "Implant Template Group Version", '', 'ImplantTemplateGroupVersion'), + 0x00780026: ('SQ', '1', "Replaced Implant Template Group Sequence", '', 'ReplacedImplantTemplateGroupSequence'), + 0x00780028: ('SQ', '1', "Implant Template Group Target Anatomy Sequence", '', 'ImplantTemplateGroupTargetAnatomySequence'), + 0x0078002A: ('SQ', '1', "Implant Template Group Members Sequence", '', 'ImplantTemplateGroupMembersSequence'), + 0x0078002E: ('US', '1', "Implant Template Group Member ID", '', 'ImplantTemplateGroupMemberID'), + 0x00780050: ('FD', '3', "3D Implant Template Group Member Matching Point", '', 'ThreeDImplantTemplateGroupMemberMatchingPoint'), + 0x00780060: ('FD', '9', "3D Implant Template Group Member Matching Axes", '', 'ThreeDImplantTemplateGroupMemberMatchingAxes'), + 0x00780070: ('SQ', '1', "Implant Template Group Member Matching 2D Coordinates Sequence", '', 'ImplantTemplateGroupMemberMatching2DCoordinatesSequence'), + 0x00780090: ('FD', '2', "2D Implant Template Group Member Matching Point", '', 'TwoDImplantTemplateGroupMemberMatchingPoint'), + 0x007800A0: ('FD', '4', "2D Implant Template Group Member Matching Axes", '', 'TwoDImplantTemplateGroupMemberMatchingAxes'), + 0x007800B0: ('SQ', '1', "Implant Template Group Variation Dimension Sequence", '', 'ImplantTemplateGroupVariationDimensionSequence'), + 0x007800B2: ('LO', '1', "Implant Template Group Variation Dimension Name", '', 'ImplantTemplateGroupVariationDimensionName'), + 0x007800B4: ('SQ', '1', "Implant Template Group Variation Dimension Rank Sequence", '', 'ImplantTemplateGroupVariationDimensionRankSequence'), + 0x007800B6: ('US', '1', "Referenced Implant Template Group Member ID", '', 'ReferencedImplantTemplateGroupMemberID'), + 0x007800B8: ('US', '1', "Implant Template Group Variation Dimension Rank", '', 'ImplantTemplateGroupVariationDimensionRank'), + 0x00880130: ('SH', '1', "Storage Media File-set ID", '', 'StorageMediaFileSetID'), + 0x00880140: ('UI', '1', "Storage Media File-set UID", '', 'StorageMediaFileSetUID'), + 0x00880200: ('SQ', '1', "Icon Image Sequence", '', 'IconImageSequence'), + 0x00880904: ('LO', '1', "Topic Title", 'Retired', 'TopicTitle'), + 0x00880906: ('ST', '1', "Topic Subject", 'Retired', 'TopicSubject'), + 0x00880910: ('LO', '1', "Topic Author", 'Retired', 'TopicAuthor'), + 0x00880912: ('LO', '1-32', "Topic Keywords", 'Retired', 'TopicKeywords'), + 0x01000410: ('CS', '1', "SOP Instance Status", '', 'SOPInstanceStatus'), + 0x01000420: ('DT', '1', "SOP Authorization DateTime", '', 'SOPAuthorizationDateTime'), + 0x01000424: ('LT', '1', "SOP Authorization Comment", '', 'SOPAuthorizationComment'), + 0x01000426: ('LO', '1', "Authorization Equipment Certification Number", '', 'AuthorizationEquipmentCertificationNumber'), + 0x04000005: ('US', '1', "MAC ID Number", '', 'MACIDNumber'), + 0x04000010: ('UI', '1', "MAC Calculation Transfer Syntax UID", '', 'MACCalculationTransferSyntaxUID'), + 0x04000015: ('CS', '1', "MAC Algorithm", '', 'MACAlgorithm'), + 0x04000020: ('AT', '1-n', "Data Elements Signed", '', 'DataElementsSigned'), + 0x04000100: ('UI', '1', "Digital Signature UID", '', 'DigitalSignatureUID'), + 0x04000105: ('DT', '1', "Digital Signature DateTime", '', 'DigitalSignatureDateTime'), + 0x04000110: ('CS', '1', "Certificate Type", '', 'CertificateType'), + 0x04000115: ('OB', '1', "Certificate of Signer", '', 'CertificateOfSigner'), + 0x04000120: ('OB', '1', "Signature", '', 'Signature'), + 0x04000305: ('CS', '1', "Certified Timestamp Type", '', 'CertifiedTimestampType'), + 0x04000310: ('OB', '1', "Certified Timestamp", '', 'CertifiedTimestamp'), + 0x04000401: ('SQ', '1', "Digital Signature Purpose Code Sequence", '', 'DigitalSignaturePurposeCodeSequence'), + 0x04000402: ('SQ', '1', "Referenced Digital Signature Sequence", '', 'ReferencedDigitalSignatureSequence'), + 0x04000403: ('SQ', '1', "Referenced SOP Instance MAC Sequence", '', 'ReferencedSOPInstanceMACSequence'), + 0x04000404: ('OB', '1', "MAC", '', 'MAC'), + 0x04000500: ('SQ', '1', "Encrypted Attributes Sequence", '', 'EncryptedAttributesSequence'), + 0x04000510: ('UI', '1', "Encrypted Content Transfer Syntax UID", '', 'EncryptedContentTransferSyntaxUID'), + 0x04000520: ('OB', '1', "Encrypted Content", '', 'EncryptedContent'), + 0x04000550: ('SQ', '1', "Modified Attributes Sequence", '', 'ModifiedAttributesSequence'), + 0x04000561: ('SQ', '1', "Original Attributes Sequence", '', 'OriginalAttributesSequence'), + 0x04000562: ('DT', '1', "Attribute Modification DateTime", '', 'AttributeModificationDateTime'), + 0x04000563: ('LO', '1', "Modifying System", '', 'ModifyingSystem'), + 0x04000564: ('LO', '1', "Source of Previous Values", '', 'SourceOfPreviousValues'), + 0x04000565: ('CS', '1', "Reason for the Attribute Modification", '', 'ReasonForTheAttributeModification'), + 0x20000010: ('IS', '1', "Number of Copies", '', 'NumberOfCopies'), + 0x2000001E: ('SQ', '1', "Printer Configuration Sequence", '', 'PrinterConfigurationSequence'), + 0x20000020: ('CS', '1', "Print Priority", '', 'PrintPriority'), + 0x20000030: ('CS', '1', "Medium Type", '', 'MediumType'), + 0x20000040: ('CS', '1', "Film Destination", '', 'FilmDestination'), + 0x20000050: ('LO', '1', "Film Session Label", '', 'FilmSessionLabel'), + 0x20000060: ('IS', '1', "Memory Allocation", '', 'MemoryAllocation'), + 0x20000061: ('IS', '1', "Maximum Memory Allocation", '', 'MaximumMemoryAllocation'), + 0x20000062: ('CS', '1', "Color Image Printing Flag", 'Retired', 'ColorImagePrintingFlag'), + 0x20000063: ('CS', '1', "Collation Flag", 'Retired', 'CollationFlag'), + 0x20000065: ('CS', '1', "Annotation Flag", 'Retired', 'AnnotationFlag'), + 0x20000067: ('CS', '1', "Image Overlay Flag", 'Retired', 'ImageOverlayFlag'), + 0x20000069: ('CS', '1', "Presentation LUT Flag", 'Retired', 'PresentationLUTFlag'), + 0x2000006A: ('CS', '1', "Image Box Presentation LUT Flag", 'Retired', 'ImageBoxPresentationLUTFlag'), + 0x200000A0: ('US', '1', "Memory Bit Depth", '', 'MemoryBitDepth'), + 0x200000A1: ('US', '1', "Printing Bit Depth", '', 'PrintingBitDepth'), + 0x200000A2: ('SQ', '1', "Media Installed Sequence", '', 'MediaInstalledSequence'), + 0x200000A4: ('SQ', '1', "Other Media Available Sequence", '', 'OtherMediaAvailableSequence'), + 0x200000A8: ('SQ', '1', "Supported Image Display Formats Sequence", '', 'SupportedImageDisplayFormatsSequence'), + 0x20000500: ('SQ', '1', "Referenced Film Box Sequence", '', 'ReferencedFilmBoxSequence'), + 0x20000510: ('SQ', '1', "Referenced Stored Print Sequence", 'Retired', 'ReferencedStoredPrintSequence'), + 0x20100010: ('ST', '1', "Image Display Format", '', 'ImageDisplayFormat'), + 0x20100030: ('CS', '1', "Annotation Display Format ID", '', 'AnnotationDisplayFormatID'), + 0x20100040: ('CS', '1', "Film Orientation", '', 'FilmOrientation'), + 0x20100050: ('CS', '1', "Film Size ID", '', 'FilmSizeID'), + 0x20100052: ('CS', '1', "Printer Resolution ID", '', 'PrinterResolutionID'), + 0x20100054: ('CS', '1', "Default Printer Resolution ID", '', 'DefaultPrinterResolutionID'), + 0x20100060: ('CS', '1', "Magnification Type", '', 'MagnificationType'), + 0x20100080: ('CS', '1', "Smoothing Type", '', 'SmoothingType'), + 0x201000A6: ('CS', '1', "Default Magnification Type", '', 'DefaultMagnificationType'), + 0x201000A7: ('CS', '1-n', "Other Magnification Types Available", '', 'OtherMagnificationTypesAvailable'), + 0x201000A8: ('CS', '1', "Default Smoothing Type", '', 'DefaultSmoothingType'), + 0x201000A9: ('CS', '1-n', "Other Smoothing Types Available", '', 'OtherSmoothingTypesAvailable'), + 0x20100100: ('CS', '1', "Border Density", '', 'BorderDensity'), + 0x20100110: ('CS', '1', "Empty Image Density", '', 'EmptyImageDensity'), + 0x20100120: ('US', '1', "Min Density", '', 'MinDensity'), + 0x20100130: ('US', '1', "Max Density", '', 'MaxDensity'), + 0x20100140: ('CS', '1', "Trim", '', 'Trim'), + 0x20100150: ('ST', '1', "Configuration Information", '', 'ConfigurationInformation'), + 0x20100152: ('LT', '1', "Configuration Information Description", '', 'ConfigurationInformationDescription'), + 0x20100154: ('IS', '1', "Maximum Collated Films", '', 'MaximumCollatedFilms'), + 0x2010015E: ('US', '1', "Illumination", '', 'Illumination'), + 0x20100160: ('US', '1', "Reflected Ambient Light", '', 'ReflectedAmbientLight'), + 0x20100376: ('DS', '2', "Printer Pixel Spacing", '', 'PrinterPixelSpacing'), + 0x20100500: ('SQ', '1', "Referenced Film Session Sequence", '', 'ReferencedFilmSessionSequence'), + 0x20100510: ('SQ', '1', "Referenced Image Box Sequence", '', 'ReferencedImageBoxSequence'), + 0x20100520: ('SQ', '1', "Referenced Basic Annotation Box Sequence", '', 'ReferencedBasicAnnotationBoxSequence'), + 0x20200010: ('US', '1', "Image Box Position", '', 'ImageBoxPosition'), + 0x20200020: ('CS', '1', "Polarity", '', 'Polarity'), + 0x20200030: ('DS', '1', "Requested Image Size", '', 'RequestedImageSize'), + 0x20200040: ('CS', '1', "Requested Decimate/Crop Behavior", '', 'RequestedDecimateCropBehavior'), + 0x20200050: ('CS', '1', "Requested Resolution ID", '', 'RequestedResolutionID'), + 0x202000A0: ('CS', '1', "Requested Image Size Flag", '', 'RequestedImageSizeFlag'), + 0x202000A2: ('CS', '1', "Decimate/Crop Result", '', 'DecimateCropResult'), + 0x20200110: ('SQ', '1', "Basic Grayscale Image Sequence", '', 'BasicGrayscaleImageSequence'), + 0x20200111: ('SQ', '1', "Basic Color Image Sequence", '', 'BasicColorImageSequence'), + 0x20200130: ('SQ', '1', "Referenced Image Overlay Box Sequence", 'Retired', 'ReferencedImageOverlayBoxSequence'), + 0x20200140: ('SQ', '1', "Referenced VOI LUT Box Sequence", 'Retired', 'ReferencedVOILUTBoxSequence'), + 0x20300010: ('US', '1', "Annotation Position", '', 'AnnotationPosition'), + 0x20300020: ('LO', '1', "Text String", '', 'TextString'), + 0x20400010: ('SQ', '1', "Referenced Overlay Plane Sequence", 'Retired', 'ReferencedOverlayPlaneSequence'), + 0x20400011: ('US', '1-99', "Referenced Overlay Plane Groups", 'Retired', 'ReferencedOverlayPlaneGroups'), + 0x20400020: ('SQ', '1', "Overlay Pixel Data Sequence", 'Retired', 'OverlayPixelDataSequence'), + 0x20400060: ('CS', '1', "Overlay Magnification Type", 'Retired', 'OverlayMagnificationType'), + 0x20400070: ('CS', '1', "Overlay Smoothing Type", 'Retired', 'OverlaySmoothingType'), + 0x20400072: ('CS', '1', "Overlay or Image Magnification", 'Retired', 'OverlayOrImageMagnification'), + 0x20400074: ('US', '1', "Magnify to Number of Columns", 'Retired', 'MagnifyToNumberOfColumns'), + 0x20400080: ('CS', '1', "Overlay Foreground Density", 'Retired', 'OverlayForegroundDensity'), + 0x20400082: ('CS', '1', "Overlay Background Density", 'Retired', 'OverlayBackgroundDensity'), + 0x20400090: ('CS', '1', "Overlay Mode", 'Retired', 'OverlayMode'), + 0x20400100: ('CS', '1', "Threshold Density", 'Retired', 'ThresholdDensity'), + 0x20400500: ('SQ', '1', "Referenced Image Box Sequence (Retired)", 'Retired', 'ReferencedImageBoxSequenceRetired'), + 0x20500010: ('SQ', '1', "Presentation LUT Sequence", '', 'PresentationLUTSequence'), + 0x20500020: ('CS', '1', "Presentation LUT Shape", '', 'PresentationLUTShape'), + 0x20500500: ('SQ', '1', "Referenced Presentation LUT Sequence", '', 'ReferencedPresentationLUTSequence'), + 0x21000010: ('SH', '1', "Print Job ID", 'Retired', 'PrintJobID'), + 0x21000020: ('CS', '1', "Execution Status", '', 'ExecutionStatus'), + 0x21000030: ('CS', '1', "Execution Status Info", '', 'ExecutionStatusInfo'), + 0x21000040: ('DA', '1', "Creation Date", '', 'CreationDate'), + 0x21000050: ('TM', '1', "Creation Time", '', 'CreationTime'), + 0x21000070: ('AE', '1', "Originator", '', 'Originator'), + 0x21000140: ('AE', '1', "Destination AE", 'Retired', 'DestinationAE'), + 0x21000160: ('SH', '1', "Owner ID", '', 'OwnerID'), + 0x21000170: ('IS', '1', "Number of Films", '', 'NumberOfFilms'), + 0x21000500: ('SQ', '1', "Referenced Print Job Sequence (Pull Stored Print)", 'Retired', 'ReferencedPrintJobSequencePullStoredPrint'), + 0x21100010: ('CS', '1', "Printer Status", '', 'PrinterStatus'), + 0x21100020: ('CS', '1', "Printer Status Info", '', 'PrinterStatusInfo'), + 0x21100030: ('LO', '1', "Printer Name", '', 'PrinterName'), + 0x21100099: ('SH', '1', "Print Queue ID", 'Retired', 'PrintQueueID'), + 0x21200010: ('CS', '1', "Queue Status", 'Retired', 'QueueStatus'), + 0x21200050: ('SQ', '1', "Print Job Description Sequence", 'Retired', 'PrintJobDescriptionSequence'), + 0x21200070: ('SQ', '1', "Referenced Print Job Sequence", 'Retired', 'ReferencedPrintJobSequence'), + 0x21300010: ('SQ', '1', "Print Management Capabilities Sequence", 'Retired', 'PrintManagementCapabilitiesSequence'), + 0x21300015: ('SQ', '1', "Printer Characteristics Sequence", 'Retired', 'PrinterCharacteristicsSequence'), + 0x21300030: ('SQ', '1', "Film Box Content Sequence", 'Retired', 'FilmBoxContentSequence'), + 0x21300040: ('SQ', '1', "Image Box Content Sequence", 'Retired', 'ImageBoxContentSequence'), + 0x21300050: ('SQ', '1', "Annotation Content Sequence", 'Retired', 'AnnotationContentSequence'), + 0x21300060: ('SQ', '1', "Image Overlay Box Content Sequence", 'Retired', 'ImageOverlayBoxContentSequence'), + 0x21300080: ('SQ', '1', "Presentation LUT Content Sequence", 'Retired', 'PresentationLUTContentSequence'), + 0x213000A0: ('SQ', '1', "Proposed Study Sequence", 'Retired', 'ProposedStudySequence'), + 0x213000C0: ('SQ', '1', "Original Image Sequence", 'Retired', 'OriginalImageSequence'), + 0x22000001: ('CS', '1', "Label Using Information Extracted From Instances", '', 'LabelUsingInformationExtractedFromInstances'), + 0x22000002: ('UT', '1', "Label Text", '', 'LabelText'), + 0x22000003: ('CS', '1', "Label Style Selection", '', 'LabelStyleSelection'), + 0x22000004: ('LT', '1', "Media Disposition", '', 'MediaDisposition'), + 0x22000005: ('LT', '1', "Barcode Value", '', 'BarcodeValue'), + 0x22000006: ('CS', '1', "Barcode Symbology", '', 'BarcodeSymbology'), + 0x22000007: ('CS', '1', "Allow Media Splitting", '', 'AllowMediaSplitting'), + 0x22000008: ('CS', '1', "Include Non-DICOM Objects", '', 'IncludeNonDICOMObjects'), + 0x22000009: ('CS', '1', "Include Display Application", '', 'IncludeDisplayApplication'), + 0x2200000A: ('CS', '1', "Preserve Composite Instances After Media Creation", '', 'PreserveCompositeInstancesAfterMediaCreation'), + 0x2200000B: ('US', '1', "Total Number of Pieces of Media Created", '', 'TotalNumberOfPiecesOfMediaCreated'), + 0x2200000C: ('LO', '1', "Requested Media Application Profile", '', 'RequestedMediaApplicationProfile'), + 0x2200000D: ('SQ', '1', "Referenced Storage Media Sequence", '', 'ReferencedStorageMediaSequence'), + 0x2200000E: ('AT', '1-n', "Failure Attributes", '', 'FailureAttributes'), + 0x2200000F: ('CS', '1', "Allow Lossy Compression", '', 'AllowLossyCompression'), + 0x22000020: ('CS', '1', "Request Priority", '', 'RequestPriority'), + 0x30020002: ('SH', '1', "RT Image Label", '', 'RTImageLabel'), + 0x30020003: ('LO', '1', "RT Image Name", '', 'RTImageName'), + 0x30020004: ('ST', '1', "RT Image Description", '', 'RTImageDescription'), + 0x3002000A: ('CS', '1', "Reported Values Origin", '', 'ReportedValuesOrigin'), + 0x3002000C: ('CS', '1', "RT Image Plane", '', 'RTImagePlane'), + 0x3002000D: ('DS', '3', "X-Ray Image Receptor Translation", '', 'XRayImageReceptorTranslation'), + 0x3002000E: ('DS', '1', "X-Ray Image Receptor Angle", '', 'XRayImageReceptorAngle'), + 0x30020010: ('DS', '6', "RT Image Orientation", '', 'RTImageOrientation'), + 0x30020011: ('DS', '2', "Image Plane Pixel Spacing", '', 'ImagePlanePixelSpacing'), + 0x30020012: ('DS', '2', "RT Image Position", '', 'RTImagePosition'), + 0x30020020: ('SH', '1', "Radiation Machine Name", '', 'RadiationMachineName'), + 0x30020022: ('DS', '1', "Radiation Machine SAD", '', 'RadiationMachineSAD'), + 0x30020024: ('DS', '1', "Radiation Machine SSD", '', 'RadiationMachineSSD'), + 0x30020026: ('DS', '1', "RT Image SID", '', 'RTImageSID'), + 0x30020028: ('DS', '1', "Source to Reference Object Distance", '', 'SourceToReferenceObjectDistance'), + 0x30020029: ('IS', '1', "Fraction Number", '', 'FractionNumber'), + 0x30020030: ('SQ', '1', "Exposure Sequence", '', 'ExposureSequence'), + 0x30020032: ('DS', '1', "Meterset Exposure", '', 'MetersetExposure'), + 0x30020034: ('DS', '4', "Diaphragm Position", '', 'DiaphragmPosition'), + 0x30020040: ('SQ', '1', "Fluence Map Sequence", '', 'FluenceMapSequence'), + 0x30020041: ('CS', '1', "Fluence Data Source", '', 'FluenceDataSource'), + 0x30020042: ('DS', '1', "Fluence Data Scale", '', 'FluenceDataScale'), + 0x30020050: ('SQ', '1', "Primary Fluence Mode Sequence", '', 'PrimaryFluenceModeSequence'), + 0x30020051: ('CS', '1', "Fluence Mode", '', 'FluenceMode'), + 0x30020052: ('SH', '1', "Fluence Mode ID", '', 'FluenceModeID'), + 0x30040001: ('CS', '1', "DVH Type", '', 'DVHType'), + 0x30040002: ('CS', '1', "Dose Units", '', 'DoseUnits'), + 0x30040004: ('CS', '1', "Dose Type", '', 'DoseType'), + 0x30040006: ('LO', '1', "Dose Comment", '', 'DoseComment'), + 0x30040008: ('DS', '3', "Normalization Point", '', 'NormalizationPoint'), + 0x3004000A: ('CS', '1', "Dose Summation Type", '', 'DoseSummationType'), + 0x3004000C: ('DS', '2-n', "Grid Frame Offset Vector", '', 'GridFrameOffsetVector'), + 0x3004000E: ('DS', '1', "Dose Grid Scaling", '', 'DoseGridScaling'), + 0x30040010: ('SQ', '1', "RT Dose ROI Sequence", '', 'RTDoseROISequence'), + 0x30040012: ('DS', '1', "Dose Value", '', 'DoseValue'), + 0x30040014: ('CS', '1-3', "Tissue Heterogeneity Correction", '', 'TissueHeterogeneityCorrection'), + 0x30040040: ('DS', '3', "DVH Normalization Point", '', 'DVHNormalizationPoint'), + 0x30040042: ('DS', '1', "DVH Normalization Dose Value", '', 'DVHNormalizationDoseValue'), + 0x30040050: ('SQ', '1', "DVH Sequence", '', 'DVHSequence'), + 0x30040052: ('DS', '1', "DVH Dose Scaling", '', 'DVHDoseScaling'), + 0x30040054: ('CS', '1', "DVH Volume Units", '', 'DVHVolumeUnits'), + 0x30040056: ('IS', '1', "DVH Number of Bins", '', 'DVHNumberOfBins'), + 0x30040058: ('DS', '2-2n', "DVH Data", '', 'DVHData'), + 0x30040060: ('SQ', '1', "DVH Referenced ROI Sequence", '', 'DVHReferencedROISequence'), + 0x30040062: ('CS', '1', "DVH ROI Contribution Type", '', 'DVHROIContributionType'), + 0x30040070: ('DS', '1', "DVH Minimum Dose", '', 'DVHMinimumDose'), + 0x30040072: ('DS', '1', "DVH Maximum Dose", '', 'DVHMaximumDose'), + 0x30040074: ('DS', '1', "DVH Mean Dose", '', 'DVHMeanDose'), + 0x30060002: ('SH', '1', "Structure Set Label", '', 'StructureSetLabel'), + 0x30060004: ('LO', '1', "Structure Set Name", '', 'StructureSetName'), + 0x30060006: ('ST', '1', "Structure Set Description", '', 'StructureSetDescription'), + 0x30060008: ('DA', '1', "Structure Set Date", '', 'StructureSetDate'), + 0x30060009: ('TM', '1', "Structure Set Time", '', 'StructureSetTime'), + 0x30060010: ('SQ', '1', "Referenced Frame of Reference Sequence", '', 'ReferencedFrameOfReferenceSequence'), + 0x30060012: ('SQ', '1', "RT Referenced Study Sequence", '', 'RTReferencedStudySequence'), + 0x30060014: ('SQ', '1', "RT Referenced Series Sequence", '', 'RTReferencedSeriesSequence'), + 0x30060016: ('SQ', '1', "Contour Image Sequence", '', 'ContourImageSequence'), + 0x30060020: ('SQ', '1', "Structure Set ROI Sequence", '', 'StructureSetROISequence'), + 0x30060022: ('IS', '1', "ROI Number", '', 'ROINumber'), + 0x30060024: ('UI', '1', "Referenced Frame of Reference UID", '', 'ReferencedFrameOfReferenceUID'), + 0x30060026: ('LO', '1', "ROI Name", '', 'ROIName'), + 0x30060028: ('ST', '1', "ROI Description", '', 'ROIDescription'), + 0x3006002A: ('IS', '3', "ROI Display Color", '', 'ROIDisplayColor'), + 0x3006002C: ('DS', '1', "ROI Volume", '', 'ROIVolume'), + 0x30060030: ('SQ', '1', "RT Related ROI Sequence", '', 'RTRelatedROISequence'), + 0x30060033: ('CS', '1', "RT ROI Relationship", '', 'RTROIRelationship'), + 0x30060036: ('CS', '1', "ROI Generation Algorithm", '', 'ROIGenerationAlgorithm'), + 0x30060038: ('LO', '1', "ROI Generation Description", '', 'ROIGenerationDescription'), + 0x30060039: ('SQ', '1', "ROI Contour Sequence", '', 'ROIContourSequence'), + 0x30060040: ('SQ', '1', "Contour Sequence", '', 'ContourSequence'), + 0x30060042: ('CS', '1', "Contour Geometric Type", '', 'ContourGeometricType'), + 0x30060044: ('DS', '1', "Contour Slab Thickness", '', 'ContourSlabThickness'), + 0x30060045: ('DS', '3', "Contour Offset Vector", '', 'ContourOffsetVector'), + 0x30060046: ('IS', '1', "Number of Contour Points", '', 'NumberOfContourPoints'), + 0x30060048: ('IS', '1', "Contour Number", '', 'ContourNumber'), + 0x30060049: ('IS', '1-n', "Attached Contours", '', 'AttachedContours'), + 0x30060050: ('DS', '3-3n', "Contour Data", '', 'ContourData'), + 0x30060080: ('SQ', '1', "RT ROI Observations Sequence", '', 'RTROIObservationsSequence'), + 0x30060082: ('IS', '1', "Observation Number", '', 'ObservationNumber'), + 0x30060084: ('IS', '1', "Referenced ROI Number", '', 'ReferencedROINumber'), + 0x30060085: ('SH', '1', "ROI Observation Label", '', 'ROIObservationLabel'), + 0x30060086: ('SQ', '1', "RT ROI Identification Code Sequence", '', 'RTROIIdentificationCodeSequence'), + 0x30060088: ('ST', '1', "ROI Observation Description", '', 'ROIObservationDescription'), + 0x300600A0: ('SQ', '1', "Related RT ROI Observations Sequence", '', 'RelatedRTROIObservationsSequence'), + 0x300600A4: ('CS', '1', "RT ROI Interpreted Type", '', 'RTROIInterpretedType'), + 0x300600A6: ('PN', '1', "ROI Interpreter", '', 'ROIInterpreter'), + 0x300600B0: ('SQ', '1', "ROI Physical Properties Sequence", '', 'ROIPhysicalPropertiesSequence'), + 0x300600B2: ('CS', '1', "ROI Physical Property", '', 'ROIPhysicalProperty'), + 0x300600B4: ('DS', '1', "ROI Physical Property Value", '', 'ROIPhysicalPropertyValue'), + 0x300600B6: ('SQ', '1', "ROI Elemental Composition Sequence", '', 'ROIElementalCompositionSequence'), + 0x300600B7: ('US', '1', "ROI Elemental Composition Atomic Number", '', 'ROIElementalCompositionAtomicNumber'), + 0x300600B8: ('FL', '1', "ROI Elemental Composition Atomic Mass Fraction", '', 'ROIElementalCompositionAtomicMassFraction'), + 0x300600C0: ('SQ', '1', "Frame of Reference Relationship Sequence", '', 'FrameOfReferenceRelationshipSequence'), + 0x300600C2: ('UI', '1', "Related Frame of Reference UID", '', 'RelatedFrameOfReferenceUID'), + 0x300600C4: ('CS', '1', "Frame of Reference Transformation Type", '', 'FrameOfReferenceTransformationType'), + 0x300600C6: ('DS', '16', "Frame of Reference Transformation Matrix", '', 'FrameOfReferenceTransformationMatrix'), + 0x300600C8: ('LO', '1', "Frame of Reference Transformation Comment", '', 'FrameOfReferenceTransformationComment'), + 0x30080010: ('SQ', '1', "Measured Dose Reference Sequence", '', 'MeasuredDoseReferenceSequence'), + 0x30080012: ('ST', '1', "Measured Dose Description", '', 'MeasuredDoseDescription'), + 0x30080014: ('CS', '1', "Measured Dose Type", '', 'MeasuredDoseType'), + 0x30080016: ('DS', '1', "Measured Dose Value", '', 'MeasuredDoseValue'), + 0x30080020: ('SQ', '1', "Treatment Session Beam Sequence", '', 'TreatmentSessionBeamSequence'), + 0x30080021: ('SQ', '1', "Treatment Session Ion Beam Sequence", '', 'TreatmentSessionIonBeamSequence'), + 0x30080022: ('IS', '1', "Current Fraction Number", '', 'CurrentFractionNumber'), + 0x30080024: ('DA', '1', "Treatment Control Point Date", '', 'TreatmentControlPointDate'), + 0x30080025: ('TM', '1', "Treatment Control Point Time", '', 'TreatmentControlPointTime'), + 0x3008002A: ('CS', '1', "Treatment Termination Status", '', 'TreatmentTerminationStatus'), + 0x3008002B: ('SH', '1', "Treatment Termination Code", '', 'TreatmentTerminationCode'), + 0x3008002C: ('CS', '1', "Treatment Verification Status", '', 'TreatmentVerificationStatus'), + 0x30080030: ('SQ', '1', "Referenced Treatment Record Sequence", '', 'ReferencedTreatmentRecordSequence'), + 0x30080032: ('DS', '1', "Specified Primary Meterset", '', 'SpecifiedPrimaryMeterset'), + 0x30080033: ('DS', '1', "Specified Secondary Meterset", '', 'SpecifiedSecondaryMeterset'), + 0x30080036: ('DS', '1', "Delivered Primary Meterset", '', 'DeliveredPrimaryMeterset'), + 0x30080037: ('DS', '1', "Delivered Secondary Meterset", '', 'DeliveredSecondaryMeterset'), + 0x3008003A: ('DS', '1', "Specified Treatment Time", '', 'SpecifiedTreatmentTime'), + 0x3008003B: ('DS', '1', "Delivered Treatment Time", '', 'DeliveredTreatmentTime'), + 0x30080040: ('SQ', '1', "Control Point Delivery Sequence", '', 'ControlPointDeliverySequence'), + 0x30080041: ('SQ', '1', "Ion Control Point Delivery Sequence", '', 'IonControlPointDeliverySequence'), + 0x30080042: ('DS', '1', "Specified Meterset", '', 'SpecifiedMeterset'), + 0x30080044: ('DS', '1', "Delivered Meterset", '', 'DeliveredMeterset'), + 0x30080045: ('FL', '1', "Meterset Rate Set", '', 'MetersetRateSet'), + 0x30080046: ('FL', '1', "Meterset Rate Delivered", '', 'MetersetRateDelivered'), + 0x30080047: ('FL', '1-n', "Scan Spot Metersets Delivered", '', 'ScanSpotMetersetsDelivered'), + 0x30080048: ('DS', '1', "Dose Rate Delivered", '', 'DoseRateDelivered'), + 0x30080050: ('SQ', '1', "Treatment Summary Calculated Dose Reference Sequence", '', 'TreatmentSummaryCalculatedDoseReferenceSequence'), + 0x30080052: ('DS', '1', "Cumulative Dose to Dose Reference", '', 'CumulativeDoseToDoseReference'), + 0x30080054: ('DA', '1', "First Treatment Date", '', 'FirstTreatmentDate'), + 0x30080056: ('DA', '1', "Most Recent Treatment Date", '', 'MostRecentTreatmentDate'), + 0x3008005A: ('IS', '1', "Number of Fractions Delivered", '', 'NumberOfFractionsDelivered'), + 0x30080060: ('SQ', '1', "Override Sequence", '', 'OverrideSequence'), + 0x30080061: ('AT', '1', "Parameter Sequence Pointer", '', 'ParameterSequencePointer'), + 0x30080062: ('AT', '1', "Override Parameter Pointer", '', 'OverrideParameterPointer'), + 0x30080063: ('IS', '1', "Parameter Item Index", '', 'ParameterItemIndex'), + 0x30080064: ('IS', '1', "Measured Dose Reference Number", '', 'MeasuredDoseReferenceNumber'), + 0x30080065: ('AT', '1', "Parameter Pointer", '', 'ParameterPointer'), + 0x30080066: ('ST', '1', "Override Reason", '', 'OverrideReason'), + 0x30080068: ('SQ', '1', "Corrected Parameter Sequence", '', 'CorrectedParameterSequence'), + 0x3008006A: ('FL', '1', "Correction Value", '', 'CorrectionValue'), + 0x30080070: ('SQ', '1', "Calculated Dose Reference Sequence", '', 'CalculatedDoseReferenceSequence'), + 0x30080072: ('IS', '1', "Calculated Dose Reference Number", '', 'CalculatedDoseReferenceNumber'), + 0x30080074: ('ST', '1', "Calculated Dose Reference Description", '', 'CalculatedDoseReferenceDescription'), + 0x30080076: ('DS', '1', "Calculated Dose Reference Dose Value", '', 'CalculatedDoseReferenceDoseValue'), + 0x30080078: ('DS', '1', "Start Meterset", '', 'StartMeterset'), + 0x3008007A: ('DS', '1', "End Meterset", '', 'EndMeterset'), + 0x30080080: ('SQ', '1', "Referenced Measured Dose Reference Sequence", '', 'ReferencedMeasuredDoseReferenceSequence'), + 0x30080082: ('IS', '1', "Referenced Measured Dose Reference Number", '', 'ReferencedMeasuredDoseReferenceNumber'), + 0x30080090: ('SQ', '1', "Referenced Calculated Dose Reference Sequence", '', 'ReferencedCalculatedDoseReferenceSequence'), + 0x30080092: ('IS', '1', "Referenced Calculated Dose Reference Number", '', 'ReferencedCalculatedDoseReferenceNumber'), + 0x300800A0: ('SQ', '1', "Beam Limiting Device Leaf Pairs Sequence", '', 'BeamLimitingDeviceLeafPairsSequence'), + 0x300800B0: ('SQ', '1', "Recorded Wedge Sequence", '', 'RecordedWedgeSequence'), + 0x300800C0: ('SQ', '1', "Recorded Compensator Sequence", '', 'RecordedCompensatorSequence'), + 0x300800D0: ('SQ', '1', "Recorded Block Sequence", '', 'RecordedBlockSequence'), + 0x300800E0: ('SQ', '1', "Treatment Summary Measured Dose Reference Sequence", '', 'TreatmentSummaryMeasuredDoseReferenceSequence'), + 0x300800F0: ('SQ', '1', "Recorded Snout Sequence", '', 'RecordedSnoutSequence'), + 0x300800F2: ('SQ', '1', "Recorded Range Shifter Sequence", '', 'RecordedRangeShifterSequence'), + 0x300800F4: ('SQ', '1', "Recorded Lateral Spreading Device Sequence", '', 'RecordedLateralSpreadingDeviceSequence'), + 0x300800F6: ('SQ', '1', "Recorded Range Modulator Sequence", '', 'RecordedRangeModulatorSequence'), + 0x30080100: ('SQ', '1', "Recorded Source Sequence", '', 'RecordedSourceSequence'), + 0x30080105: ('LO', '1', "Source Serial Number", '', 'SourceSerialNumber'), + 0x30080110: ('SQ', '1', "Treatment Session Application Setup Sequence", '', 'TreatmentSessionApplicationSetupSequence'), + 0x30080116: ('CS', '1', "Application Setup Check", '', 'ApplicationSetupCheck'), + 0x30080120: ('SQ', '1', "Recorded Brachy Accessory Device Sequence", '', 'RecordedBrachyAccessoryDeviceSequence'), + 0x30080122: ('IS', '1', "Referenced Brachy Accessory Device Number", '', 'ReferencedBrachyAccessoryDeviceNumber'), + 0x30080130: ('SQ', '1', "Recorded Channel Sequence", '', 'RecordedChannelSequence'), + 0x30080132: ('DS', '1', "Specified Channel Total Time", '', 'SpecifiedChannelTotalTime'), + 0x30080134: ('DS', '1', "Delivered Channel Total Time", '', 'DeliveredChannelTotalTime'), + 0x30080136: ('IS', '1', "Specified Number of Pulses", '', 'SpecifiedNumberOfPulses'), + 0x30080138: ('IS', '1', "Delivered Number of Pulses", '', 'DeliveredNumberOfPulses'), + 0x3008013A: ('DS', '1', "Specified Pulse Repetition Interval", '', 'SpecifiedPulseRepetitionInterval'), + 0x3008013C: ('DS', '1', "Delivered Pulse Repetition Interval", '', 'DeliveredPulseRepetitionInterval'), + 0x30080140: ('SQ', '1', "Recorded Source Applicator Sequence", '', 'RecordedSourceApplicatorSequence'), + 0x30080142: ('IS', '1', "Referenced Source Applicator Number", '', 'ReferencedSourceApplicatorNumber'), + 0x30080150: ('SQ', '1', "Recorded Channel Shield Sequence", '', 'RecordedChannelShieldSequence'), + 0x30080152: ('IS', '1', "Referenced Channel Shield Number", '', 'ReferencedChannelShieldNumber'), + 0x30080160: ('SQ', '1', "Brachy Control Point Delivered Sequence", '', 'BrachyControlPointDeliveredSequence'), + 0x30080162: ('DA', '1', "Safe Position Exit Date", '', 'SafePositionExitDate'), + 0x30080164: ('TM', '1', "Safe Position Exit Time", '', 'SafePositionExitTime'), + 0x30080166: ('DA', '1', "Safe Position Return Date", '', 'SafePositionReturnDate'), + 0x30080168: ('TM', '1', "Safe Position Return Time", '', 'SafePositionReturnTime'), + 0x30080200: ('CS', '1', "Current Treatment Status", '', 'CurrentTreatmentStatus'), + 0x30080202: ('ST', '1', "Treatment Status Comment", '', 'TreatmentStatusComment'), + 0x30080220: ('SQ', '1', "Fraction Group Summary Sequence", '', 'FractionGroupSummarySequence'), + 0x30080223: ('IS', '1', "Referenced Fraction Number", '', 'ReferencedFractionNumber'), + 0x30080224: ('CS', '1', "Fraction Group Type", '', 'FractionGroupType'), + 0x30080230: ('CS', '1', "Beam Stopper Position", '', 'BeamStopperPosition'), + 0x30080240: ('SQ', '1', "Fraction Status Summary Sequence", '', 'FractionStatusSummarySequence'), + 0x30080250: ('DA', '1', "Treatment Date", '', 'TreatmentDate'), + 0x30080251: ('TM', '1', "Treatment Time", '', 'TreatmentTime'), + 0x300A0002: ('SH', '1', "RT Plan Label", '', 'RTPlanLabel'), + 0x300A0003: ('LO', '1', "RT Plan Name", '', 'RTPlanName'), + 0x300A0004: ('ST', '1', "RT Plan Description", '', 'RTPlanDescription'), + 0x300A0006: ('DA', '1', "RT Plan Date", '', 'RTPlanDate'), + 0x300A0007: ('TM', '1', "RT Plan Time", '', 'RTPlanTime'), + 0x300A0009: ('LO', '1-n', "Treatment Protocols", '', 'TreatmentProtocols'), + 0x300A000A: ('CS', '1', "Plan Intent", '', 'PlanIntent'), + 0x300A000B: ('LO', '1-n', "Treatment Sites", '', 'TreatmentSites'), + 0x300A000C: ('CS', '1', "RT Plan Geometry", '', 'RTPlanGeometry'), + 0x300A000E: ('ST', '1', "Prescription Description", '', 'PrescriptionDescription'), + 0x300A0010: ('SQ', '1', "Dose Reference Sequence", '', 'DoseReferenceSequence'), + 0x300A0012: ('IS', '1', "Dose Reference Number", '', 'DoseReferenceNumber'), + 0x300A0013: ('UI', '1', "Dose Reference UID", '', 'DoseReferenceUID'), + 0x300A0014: ('CS', '1', "Dose Reference Structure Type", '', 'DoseReferenceStructureType'), + 0x300A0015: ('CS', '1', "Nominal Beam Energy Unit", '', 'NominalBeamEnergyUnit'), + 0x300A0016: ('LO', '1', "Dose Reference Description", '', 'DoseReferenceDescription'), + 0x300A0018: ('DS', '3', "Dose Reference Point Coordinates", '', 'DoseReferencePointCoordinates'), + 0x300A001A: ('DS', '1', "Nominal Prior Dose", '', 'NominalPriorDose'), + 0x300A0020: ('CS', '1', "Dose Reference Type", '', 'DoseReferenceType'), + 0x300A0021: ('DS', '1', "Constraint Weight", '', 'ConstraintWeight'), + 0x300A0022: ('DS', '1', "Delivery Warning Dose", '', 'DeliveryWarningDose'), + 0x300A0023: ('DS', '1', "Delivery Maximum Dose", '', 'DeliveryMaximumDose'), + 0x300A0025: ('DS', '1', "Target Minimum Dose", '', 'TargetMinimumDose'), + 0x300A0026: ('DS', '1', "Target Prescription Dose", '', 'TargetPrescriptionDose'), + 0x300A0027: ('DS', '1', "Target Maximum Dose", '', 'TargetMaximumDose'), + 0x300A0028: ('DS', '1', "Target Underdose Volume Fraction", '', 'TargetUnderdoseVolumeFraction'), + 0x300A002A: ('DS', '1', "Organ at Risk Full-volume Dose", '', 'OrganAtRiskFullVolumeDose'), + 0x300A002B: ('DS', '1', "Organ at Risk Limit Dose", '', 'OrganAtRiskLimitDose'), + 0x300A002C: ('DS', '1', "Organ at Risk Maximum Dose", '', 'OrganAtRiskMaximumDose'), + 0x300A002D: ('DS', '1', "Organ at Risk Overdose Volume Fraction", '', 'OrganAtRiskOverdoseVolumeFraction'), + 0x300A0040: ('SQ', '1', "Tolerance Table Sequence", '', 'ToleranceTableSequence'), + 0x300A0042: ('IS', '1', "Tolerance Table Number", '', 'ToleranceTableNumber'), + 0x300A0043: ('SH', '1', "Tolerance Table Label", '', 'ToleranceTableLabel'), + 0x300A0044: ('DS', '1', "Gantry Angle Tolerance", '', 'GantryAngleTolerance'), + 0x300A0046: ('DS', '1', "Beam Limiting Device Angle Tolerance", '', 'BeamLimitingDeviceAngleTolerance'), + 0x300A0048: ('SQ', '1', "Beam Limiting Device Tolerance Sequence", '', 'BeamLimitingDeviceToleranceSequence'), + 0x300A004A: ('DS', '1', "Beam Limiting Device Position Tolerance", '', 'BeamLimitingDevicePositionTolerance'), + 0x300A004B: ('FL', '1', "Snout Position Tolerance", '', 'SnoutPositionTolerance'), + 0x300A004C: ('DS', '1', "Patient Support Angle Tolerance", '', 'PatientSupportAngleTolerance'), + 0x300A004E: ('DS', '1', "Table Top Eccentric Angle Tolerance", '', 'TableTopEccentricAngleTolerance'), + 0x300A004F: ('FL', '1', "Table Top Pitch Angle Tolerance", '', 'TableTopPitchAngleTolerance'), + 0x300A0050: ('FL', '1', "Table Top Roll Angle Tolerance", '', 'TableTopRollAngleTolerance'), + 0x300A0051: ('DS', '1', "Table Top Vertical Position Tolerance", '', 'TableTopVerticalPositionTolerance'), + 0x300A0052: ('DS', '1', "Table Top Longitudinal Position Tolerance", '', 'TableTopLongitudinalPositionTolerance'), + 0x300A0053: ('DS', '1', "Table Top Lateral Position Tolerance", '', 'TableTopLateralPositionTolerance'), + 0x300A0055: ('CS', '1', "RT Plan Relationship", '', 'RTPlanRelationship'), + 0x300A0070: ('SQ', '1', "Fraction Group Sequence", '', 'FractionGroupSequence'), + 0x300A0071: ('IS', '1', "Fraction Group Number", '', 'FractionGroupNumber'), + 0x300A0072: ('LO', '1', "Fraction Group Description", '', 'FractionGroupDescription'), + 0x300A0078: ('IS', '1', "Number of Fractions Planned", '', 'NumberOfFractionsPlanned'), + 0x300A0079: ('IS', '1', "Number of Fraction Pattern Digits Per Day", '', 'NumberOfFractionPatternDigitsPerDay'), + 0x300A007A: ('IS', '1', "Repeat Fraction Cycle Length", '', 'RepeatFractionCycleLength'), + 0x300A007B: ('LT', '1', "Fraction Pattern", '', 'FractionPattern'), + 0x300A0080: ('IS', '1', "Number of Beams", '', 'NumberOfBeams'), + 0x300A0082: ('DS', '3', "Beam Dose Specification Point", '', 'BeamDoseSpecificationPoint'), + 0x300A0084: ('DS', '1', "Beam Dose", '', 'BeamDose'), + 0x300A0086: ('DS', '1', "Beam Meterset", '', 'BeamMeterset'), + 0x300A0088: ('FL', '1', "Beam Dose Point Depth", '', 'BeamDosePointDepth'), + 0x300A0089: ('FL', '1', "Beam Dose Point Equivalent Depth", '', 'BeamDosePointEquivalentDepth'), + 0x300A008A: ('FL', '1', "Beam Dose Point SSD", '', 'BeamDosePointSSD'), + 0x300A00A0: ('IS', '1', "Number of Brachy Application Setups", '', 'NumberOfBrachyApplicationSetups'), + 0x300A00A2: ('DS', '3', "Brachy Application Setup Dose Specification Point", '', 'BrachyApplicationSetupDoseSpecificationPoint'), + 0x300A00A4: ('DS', '1', "Brachy Application Setup Dose", '', 'BrachyApplicationSetupDose'), + 0x300A00B0: ('SQ', '1', "Beam Sequence", '', 'BeamSequence'), + 0x300A00B2: ('SH', '1', "Treatment Machine Name", '', 'TreatmentMachineName'), + 0x300A00B3: ('CS', '1', "Primary Dosimeter Unit", '', 'PrimaryDosimeterUnit'), + 0x300A00B4: ('DS', '1', "Source-Axis Distance", '', 'SourceAxisDistance'), + 0x300A00B6: ('SQ', '1', "Beam Limiting Device Sequence", '', 'BeamLimitingDeviceSequence'), + 0x300A00B8: ('CS', '1', "RT Beam Limiting Device Type", '', 'RTBeamLimitingDeviceType'), + 0x300A00BA: ('DS', '1', "Source to Beam Limiting Device Distance", '', 'SourceToBeamLimitingDeviceDistance'), + 0x300A00BB: ('FL', '1', "Isocenter to Beam Limiting Device Distance", '', 'IsocenterToBeamLimitingDeviceDistance'), + 0x300A00BC: ('IS', '1', "Number of Leaf/Jaw Pairs", '', 'NumberOfLeafJawPairs'), + 0x300A00BE: ('DS', '3-n', "Leaf Position Boundaries", '', 'LeafPositionBoundaries'), + 0x300A00C0: ('IS', '1', "Beam Number", '', 'BeamNumber'), + 0x300A00C2: ('LO', '1', "Beam Name", '', 'BeamName'), + 0x300A00C3: ('ST', '1', "Beam Description", '', 'BeamDescription'), + 0x300A00C4: ('CS', '1', "Beam Type", '', 'BeamType'), + 0x300A00C6: ('CS', '1', "Radiation Type", '', 'RadiationType'), + 0x300A00C7: ('CS', '1', "High-Dose Technique Type", '', 'HighDoseTechniqueType'), + 0x300A00C8: ('IS', '1', "Reference Image Number", '', 'ReferenceImageNumber'), + 0x300A00CA: ('SQ', '1', "Planned Verification Image Sequence", '', 'PlannedVerificationImageSequence'), + 0x300A00CC: ('LO', '1-n', "Imaging Device-Specific Acquisition Parameters", '', 'ImagingDeviceSpecificAcquisitionParameters'), + 0x300A00CE: ('CS', '1', "Treatment Delivery Type", '', 'TreatmentDeliveryType'), + 0x300A00D0: ('IS', '1', "Number of Wedges", '', 'NumberOfWedges'), + 0x300A00D1: ('SQ', '1', "Wedge Sequence", '', 'WedgeSequence'), + 0x300A00D2: ('IS', '1', "Wedge Number", '', 'WedgeNumber'), + 0x300A00D3: ('CS', '1', "Wedge Type", '', 'WedgeType'), + 0x300A00D4: ('SH', '1', "Wedge ID", '', 'WedgeID'), + 0x300A00D5: ('IS', '1', "Wedge Angle", '', 'WedgeAngle'), + 0x300A00D6: ('DS', '1', "Wedge Factor", '', 'WedgeFactor'), + 0x300A00D7: ('FL', '1', "Total Wedge Tray Water-Equivalent Thickness", '', 'TotalWedgeTrayWaterEquivalentThickness'), + 0x300A00D8: ('DS', '1', "Wedge Orientation", '', 'WedgeOrientation'), + 0x300A00D9: ('FL', '1', "Isocenter to Wedge Tray Distance", '', 'IsocenterToWedgeTrayDistance'), + 0x300A00DA: ('DS', '1', "Source to Wedge Tray Distance", '', 'SourceToWedgeTrayDistance'), + 0x300A00DB: ('FL', '1', "Wedge Thin Edge Position", '', 'WedgeThinEdgePosition'), + 0x300A00DC: ('SH', '1', "Bolus ID", '', 'BolusID'), + 0x300A00DD: ('ST', '1', "Bolus Description", '', 'BolusDescription'), + 0x300A00E0: ('IS', '1', "Number of Compensators", '', 'NumberOfCompensators'), + 0x300A00E1: ('SH', '1', "Material ID", '', 'MaterialID'), + 0x300A00E2: ('DS', '1', "Total Compensator Tray Factor", '', 'TotalCompensatorTrayFactor'), + 0x300A00E3: ('SQ', '1', "Compensator Sequence", '', 'CompensatorSequence'), + 0x300A00E4: ('IS', '1', "Compensator Number", '', 'CompensatorNumber'), + 0x300A00E5: ('SH', '1', "Compensator ID", '', 'CompensatorID'), + 0x300A00E6: ('DS', '1', "Source to Compensator Tray Distance", '', 'SourceToCompensatorTrayDistance'), + 0x300A00E7: ('IS', '1', "Compensator Rows", '', 'CompensatorRows'), + 0x300A00E8: ('IS', '1', "Compensator Columns", '', 'CompensatorColumns'), + 0x300A00E9: ('DS', '2', "Compensator Pixel Spacing", '', 'CompensatorPixelSpacing'), + 0x300A00EA: ('DS', '2', "Compensator Position", '', 'CompensatorPosition'), + 0x300A00EB: ('DS', '1-n', "Compensator Transmission Data", '', 'CompensatorTransmissionData'), + 0x300A00EC: ('DS', '1-n', "Compensator Thickness Data", '', 'CompensatorThicknessData'), + 0x300A00ED: ('IS', '1', "Number of Boli", '', 'NumberOfBoli'), + 0x300A00EE: ('CS', '1', "Compensator Type", '', 'CompensatorType'), + 0x300A00F0: ('IS', '1', "Number of Blocks", '', 'NumberOfBlocks'), + 0x300A00F2: ('DS', '1', "Total Block Tray Factor", '', 'TotalBlockTrayFactor'), + 0x300A00F3: ('FL', '1', "Total Block Tray Water-Equivalent Thickness", '', 'TotalBlockTrayWaterEquivalentThickness'), + 0x300A00F4: ('SQ', '1', "Block Sequence", '', 'BlockSequence'), + 0x300A00F5: ('SH', '1', "Block Tray ID", '', 'BlockTrayID'), + 0x300A00F6: ('DS', '1', "Source to Block Tray Distance", '', 'SourceToBlockTrayDistance'), + 0x300A00F7: ('FL', '1', "Isocenter to Block Tray Distance", '', 'IsocenterToBlockTrayDistance'), + 0x300A00F8: ('CS', '1', "Block Type", '', 'BlockType'), + 0x300A00F9: ('LO', '1', "Accessory Code", '', 'AccessoryCode'), + 0x300A00FA: ('CS', '1', "Block Divergence", '', 'BlockDivergence'), + 0x300A00FB: ('CS', '1', "Block Mounting Position", '', 'BlockMountingPosition'), + 0x300A00FC: ('IS', '1', "Block Number", '', 'BlockNumber'), + 0x300A00FE: ('LO', '1', "Block Name", '', 'BlockName'), + 0x300A0100: ('DS', '1', "Block Thickness", '', 'BlockThickness'), + 0x300A0102: ('DS', '1', "Block Transmission", '', 'BlockTransmission'), + 0x300A0104: ('IS', '1', "Block Number of Points", '', 'BlockNumberOfPoints'), + 0x300A0106: ('DS', '2-2n', "Block Data", '', 'BlockData'), + 0x300A0107: ('SQ', '1', "Applicator Sequence", '', 'ApplicatorSequence'), + 0x300A0108: ('SH', '1', "Applicator ID", '', 'ApplicatorID'), + 0x300A0109: ('CS', '1', "Applicator Type", '', 'ApplicatorType'), + 0x300A010A: ('LO', '1', "Applicator Description", '', 'ApplicatorDescription'), + 0x300A010C: ('DS', '1', "Cumulative Dose Reference Coefficient", '', 'CumulativeDoseReferenceCoefficient'), + 0x300A010E: ('DS', '1', "Final Cumulative Meterset Weight", '', 'FinalCumulativeMetersetWeight'), + 0x300A0110: ('IS', '1', "Number of Control Points", '', 'NumberOfControlPoints'), + 0x300A0111: ('SQ', '1', "Control Point Sequence", '', 'ControlPointSequence'), + 0x300A0112: ('IS', '1', "Control Point Index", '', 'ControlPointIndex'), + 0x300A0114: ('DS', '1', "Nominal Beam Energy", '', 'NominalBeamEnergy'), + 0x300A0115: ('DS', '1', "Dose Rate Set", '', 'DoseRateSet'), + 0x300A0116: ('SQ', '1', "Wedge Position Sequence", '', 'WedgePositionSequence'), + 0x300A0118: ('CS', '1', "Wedge Position", '', 'WedgePosition'), + 0x300A011A: ('SQ', '1', "Beam Limiting Device Position Sequence", '', 'BeamLimitingDevicePositionSequence'), + 0x300A011C: ('DS', '2-2n', "Leaf/Jaw Positions", '', 'LeafJawPositions'), + 0x300A011E: ('DS', '1', "Gantry Angle", '', 'GantryAngle'), + 0x300A011F: ('CS', '1', "Gantry Rotation Direction", '', 'GantryRotationDirection'), + 0x300A0120: ('DS', '1', "Beam Limiting Device Angle", '', 'BeamLimitingDeviceAngle'), + 0x300A0121: ('CS', '1', "Beam Limiting Device Rotation Direction", '', 'BeamLimitingDeviceRotationDirection'), + 0x300A0122: ('DS', '1', "Patient Support Angle", '', 'PatientSupportAngle'), + 0x300A0123: ('CS', '1', "Patient Support Rotation Direction", '', 'PatientSupportRotationDirection'), + 0x300A0124: ('DS', '1', "Table Top Eccentric Axis Distance", '', 'TableTopEccentricAxisDistance'), + 0x300A0125: ('DS', '1', "Table Top Eccentric Angle", '', 'TableTopEccentricAngle'), + 0x300A0126: ('CS', '1', "Table Top Eccentric Rotation Direction", '', 'TableTopEccentricRotationDirection'), + 0x300A0128: ('DS', '1', "Table Top Vertical Position", '', 'TableTopVerticalPosition'), + 0x300A0129: ('DS', '1', "Table Top Longitudinal Position", '', 'TableTopLongitudinalPosition'), + 0x300A012A: ('DS', '1', "Table Top Lateral Position", '', 'TableTopLateralPosition'), + 0x300A012C: ('DS', '3', "Isocenter Position", '', 'IsocenterPosition'), + 0x300A012E: ('DS', '3', "Surface Entry Point", '', 'SurfaceEntryPoint'), + 0x300A0130: ('DS', '1', "Source to Surface Distance", '', 'SourceToSurfaceDistance'), + 0x300A0134: ('DS', '1', "Cumulative Meterset Weight", '', 'CumulativeMetersetWeight'), + 0x300A0140: ('FL', '1', "Table Top Pitch Angle", '', 'TableTopPitchAngle'), + 0x300A0142: ('CS', '1', "Table Top Pitch Rotation Direction", '', 'TableTopPitchRotationDirection'), + 0x300A0144: ('FL', '1', "Table Top Roll Angle", '', 'TableTopRollAngle'), + 0x300A0146: ('CS', '1', "Table Top Roll Rotation Direction", '', 'TableTopRollRotationDirection'), + 0x300A0148: ('FL', '1', "Head Fixation Angle", '', 'HeadFixationAngle'), + 0x300A014A: ('FL', '1', "Gantry Pitch Angle", '', 'GantryPitchAngle'), + 0x300A014C: ('CS', '1', "Gantry Pitch Rotation Direction", '', 'GantryPitchRotationDirection'), + 0x300A014E: ('FL', '1', "Gantry Pitch Angle Tolerance", '', 'GantryPitchAngleTolerance'), + 0x300A0180: ('SQ', '1', "Patient Setup Sequence", '', 'PatientSetupSequence'), + 0x300A0182: ('IS', '1', "Patient Setup Number", '', 'PatientSetupNumber'), + 0x300A0183: ('LO', '1', "Patient Setup Label", '', 'PatientSetupLabel'), + 0x300A0184: ('LO', '1', "Patient Additional Position", '', 'PatientAdditionalPosition'), + 0x300A0190: ('SQ', '1', "Fixation Device Sequence", '', 'FixationDeviceSequence'), + 0x300A0192: ('CS', '1', "Fixation Device Type", '', 'FixationDeviceType'), + 0x300A0194: ('SH', '1', "Fixation Device Label", '', 'FixationDeviceLabel'), + 0x300A0196: ('ST', '1', "Fixation Device Description", '', 'FixationDeviceDescription'), + 0x300A0198: ('SH', '1', "Fixation Device Position", '', 'FixationDevicePosition'), + 0x300A0199: ('FL', '1', "Fixation Device Pitch Angle", '', 'FixationDevicePitchAngle'), + 0x300A019A: ('FL', '1', "Fixation Device Roll Angle", '', 'FixationDeviceRollAngle'), + 0x300A01A0: ('SQ', '1', "Shielding Device Sequence", '', 'ShieldingDeviceSequence'), + 0x300A01A2: ('CS', '1', "Shielding Device Type", '', 'ShieldingDeviceType'), + 0x300A01A4: ('SH', '1', "Shielding Device Label", '', 'ShieldingDeviceLabel'), + 0x300A01A6: ('ST', '1', "Shielding Device Description", '', 'ShieldingDeviceDescription'), + 0x300A01A8: ('SH', '1', "Shielding Device Position", '', 'ShieldingDevicePosition'), + 0x300A01B0: ('CS', '1', "Setup Technique", '', 'SetupTechnique'), + 0x300A01B2: ('ST', '1', "Setup Technique Description", '', 'SetupTechniqueDescription'), + 0x300A01B4: ('SQ', '1', "Setup Device Sequence", '', 'SetupDeviceSequence'), + 0x300A01B6: ('CS', '1', "Setup Device Type", '', 'SetupDeviceType'), + 0x300A01B8: ('SH', '1', "Setup Device Label", '', 'SetupDeviceLabel'), + 0x300A01BA: ('ST', '1', "Setup Device Description", '', 'SetupDeviceDescription'), + 0x300A01BC: ('DS', '1', "Setup Device Parameter", '', 'SetupDeviceParameter'), + 0x300A01D0: ('ST', '1', "Setup Reference Description", '', 'SetupReferenceDescription'), + 0x300A01D2: ('DS', '1', "Table Top Vertical Setup Displacement", '', 'TableTopVerticalSetupDisplacement'), + 0x300A01D4: ('DS', '1', "Table Top Longitudinal Setup Displacement", '', 'TableTopLongitudinalSetupDisplacement'), + 0x300A01D6: ('DS', '1', "Table Top Lateral Setup Displacement", '', 'TableTopLateralSetupDisplacement'), + 0x300A0200: ('CS', '1', "Brachy Treatment Technique", '', 'BrachyTreatmentTechnique'), + 0x300A0202: ('CS', '1', "Brachy Treatment Type", '', 'BrachyTreatmentType'), + 0x300A0206: ('SQ', '1', "Treatment Machine Sequence", '', 'TreatmentMachineSequence'), + 0x300A0210: ('SQ', '1', "Source Sequence", '', 'SourceSequence'), + 0x300A0212: ('IS', '1', "Source Number", '', 'SourceNumber'), + 0x300A0214: ('CS', '1', "Source Type", '', 'SourceType'), + 0x300A0216: ('LO', '1', "Source Manufacturer", '', 'SourceManufacturer'), + 0x300A0218: ('DS', '1', "Active Source Diameter", '', 'ActiveSourceDiameter'), + 0x300A021A: ('DS', '1', "Active Source Length", '', 'ActiveSourceLength'), + 0x300A0222: ('DS', '1', "Source Encapsulation Nominal Thickness", '', 'SourceEncapsulationNominalThickness'), + 0x300A0224: ('DS', '1', "Source Encapsulation Nominal Transmission", '', 'SourceEncapsulationNominalTransmission'), + 0x300A0226: ('LO', '1', "Source Isotope Name", '', 'SourceIsotopeName'), + 0x300A0228: ('DS', '1', "Source Isotope Half Life", '', 'SourceIsotopeHalfLife'), + 0x300A0229: ('CS', '1', "Source Strength Units", '', 'SourceStrengthUnits'), + 0x300A022A: ('DS', '1', "Reference Air Kerma Rate", '', 'ReferenceAirKermaRate'), + 0x300A022B: ('DS', '1', "Source Strength", '', 'SourceStrength'), + 0x300A022C: ('DA', '1', "Source Strength Reference Date", '', 'SourceStrengthReferenceDate'), + 0x300A022E: ('TM', '1', "Source Strength Reference Time", '', 'SourceStrengthReferenceTime'), + 0x300A0230: ('SQ', '1', "Application Setup Sequence", '', 'ApplicationSetupSequence'), + 0x300A0232: ('CS', '1', "Application Setup Type", '', 'ApplicationSetupType'), + 0x300A0234: ('IS', '1', "Application Setup Number", '', 'ApplicationSetupNumber'), + 0x300A0236: ('LO', '1', "Application Setup Name", '', 'ApplicationSetupName'), + 0x300A0238: ('LO', '1', "Application Setup Manufacturer", '', 'ApplicationSetupManufacturer'), + 0x300A0240: ('IS', '1', "Template Number", '', 'TemplateNumber'), + 0x300A0242: ('SH', '1', "Template Type", '', 'TemplateType'), + 0x300A0244: ('LO', '1', "Template Name", '', 'TemplateName'), + 0x300A0250: ('DS', '1', "Total Reference Air Kerma", '', 'TotalReferenceAirKerma'), + 0x300A0260: ('SQ', '1', "Brachy Accessory Device Sequence", '', 'BrachyAccessoryDeviceSequence'), + 0x300A0262: ('IS', '1', "Brachy Accessory Device Number", '', 'BrachyAccessoryDeviceNumber'), + 0x300A0263: ('SH', '1', "Brachy Accessory Device ID", '', 'BrachyAccessoryDeviceID'), + 0x300A0264: ('CS', '1', "Brachy Accessory Device Type", '', 'BrachyAccessoryDeviceType'), + 0x300A0266: ('LO', '1', "Brachy Accessory Device Name", '', 'BrachyAccessoryDeviceName'), + 0x300A026A: ('DS', '1', "Brachy Accessory Device Nominal Thickness", '', 'BrachyAccessoryDeviceNominalThickness'), + 0x300A026C: ('DS', '1', "Brachy Accessory Device Nominal Transmission", '', 'BrachyAccessoryDeviceNominalTransmission'), + 0x300A0280: ('SQ', '1', "Channel Sequence", '', 'ChannelSequence'), + 0x300A0282: ('IS', '1', "Channel Number", '', 'ChannelNumber'), + 0x300A0284: ('DS', '1', "Channel Length", '', 'ChannelLength'), + 0x300A0286: ('DS', '1', "Channel Total Time", '', 'ChannelTotalTime'), + 0x300A0288: ('CS', '1', "Source Movement Type", '', 'SourceMovementType'), + 0x300A028A: ('IS', '1', "Number of Pulses", '', 'NumberOfPulses'), + 0x300A028C: ('DS', '1', "Pulse Repetition Interval", '', 'PulseRepetitionInterval'), + 0x300A0290: ('IS', '1', "Source Applicator Number", '', 'SourceApplicatorNumber'), + 0x300A0291: ('SH', '1', "Source Applicator ID", '', 'SourceApplicatorID'), + 0x300A0292: ('CS', '1', "Source Applicator Type", '', 'SourceApplicatorType'), + 0x300A0294: ('LO', '1', "Source Applicator Name", '', 'SourceApplicatorName'), + 0x300A0296: ('DS', '1', "Source Applicator Length", '', 'SourceApplicatorLength'), + 0x300A0298: ('LO', '1', "Source Applicator Manufacturer", '', 'SourceApplicatorManufacturer'), + 0x300A029C: ('DS', '1', "Source Applicator Wall Nominal Thickness", '', 'SourceApplicatorWallNominalThickness'), + 0x300A029E: ('DS', '1', "Source Applicator Wall Nominal Transmission", '', 'SourceApplicatorWallNominalTransmission'), + 0x300A02A0: ('DS', '1', "Source Applicator Step Size", '', 'SourceApplicatorStepSize'), + 0x300A02A2: ('IS', '1', "Transfer Tube Number", '', 'TransferTubeNumber'), + 0x300A02A4: ('DS', '1', "Transfer Tube Length", '', 'TransferTubeLength'), + 0x300A02B0: ('SQ', '1', "Channel Shield Sequence", '', 'ChannelShieldSequence'), + 0x300A02B2: ('IS', '1', "Channel Shield Number", '', 'ChannelShieldNumber'), + 0x300A02B3: ('SH', '1', "Channel Shield ID", '', 'ChannelShieldID'), + 0x300A02B4: ('LO', '1', "Channel Shield Name", '', 'ChannelShieldName'), + 0x300A02B8: ('DS', '1', "Channel Shield Nominal Thickness", '', 'ChannelShieldNominalThickness'), + 0x300A02BA: ('DS', '1', "Channel Shield Nominal Transmission", '', 'ChannelShieldNominalTransmission'), + 0x300A02C8: ('DS', '1', "Final Cumulative Time Weight", '', 'FinalCumulativeTimeWeight'), + 0x300A02D0: ('SQ', '1', "Brachy Control Point Sequence", '', 'BrachyControlPointSequence'), + 0x300A02D2: ('DS', '1', "Control Point Relative Position", '', 'ControlPointRelativePosition'), + 0x300A02D4: ('DS', '3', "Control Point 3D Position", '', 'ControlPoint3DPosition'), + 0x300A02D6: ('DS', '1', "Cumulative Time Weight", '', 'CumulativeTimeWeight'), + 0x300A02E0: ('CS', '1', "Compensator Divergence", '', 'CompensatorDivergence'), + 0x300A02E1: ('CS', '1', "Compensator Mounting Position", '', 'CompensatorMountingPosition'), + 0x300A02E2: ('DS', '1-n', "Source to Compensator Distance", '', 'SourceToCompensatorDistance'), + 0x300A02E3: ('FL', '1', "Total Compensator Tray Water-Equivalent Thickness", '', 'TotalCompensatorTrayWaterEquivalentThickness'), + 0x300A02E4: ('FL', '1', "Isocenter to Compensator Tray Distance", '', 'IsocenterToCompensatorTrayDistance'), + 0x300A02E5: ('FL', '1', "Compensator Column Offset", '', 'CompensatorColumnOffset'), + 0x300A02E6: ('FL', '1-n', "Isocenter to Compensator Distances", '', 'IsocenterToCompensatorDistances'), + 0x300A02E7: ('FL', '1', "Compensator Relative Stopping Power Ratio", '', 'CompensatorRelativeStoppingPowerRatio'), + 0x300A02E8: ('FL', '1', "Compensator Milling Tool Diameter", '', 'CompensatorMillingToolDiameter'), + 0x300A02EA: ('SQ', '1', "Ion Range Compensator Sequence", '', 'IonRangeCompensatorSequence'), + 0x300A02EB: ('LT', '1', "Compensator Description", '', 'CompensatorDescription'), + 0x300A0302: ('IS', '1', "Radiation Mass Number", '', 'RadiationMassNumber'), + 0x300A0304: ('IS', '1', "Radiation Atomic Number", '', 'RadiationAtomicNumber'), + 0x300A0306: ('SS', '1', "Radiation Charge State", '', 'RadiationChargeState'), + 0x300A0308: ('CS', '1', "Scan Mode", '', 'ScanMode'), + 0x300A030A: ('FL', '2', "Virtual Source-Axis Distances", '', 'VirtualSourceAxisDistances'), + 0x300A030C: ('SQ', '1', "Snout Sequence", '', 'SnoutSequence'), + 0x300A030D: ('FL', '1', "Snout Position", '', 'SnoutPosition'), + 0x300A030F: ('SH', '1', "Snout ID", '', 'SnoutID'), + 0x300A0312: ('IS', '1', "Number of Range Shifters", '', 'NumberOfRangeShifters'), + 0x300A0314: ('SQ', '1', "Range Shifter Sequence", '', 'RangeShifterSequence'), + 0x300A0316: ('IS', '1', "Range Shifter Number", '', 'RangeShifterNumber'), + 0x300A0318: ('SH', '1', "Range Shifter ID", '', 'RangeShifterID'), + 0x300A0320: ('CS', '1', "Range Shifter Type", '', 'RangeShifterType'), + 0x300A0322: ('LO', '1', "Range Shifter Description", '', 'RangeShifterDescription'), + 0x300A0330: ('IS', '1', "Number of Lateral Spreading Devices", '', 'NumberOfLateralSpreadingDevices'), + 0x300A0332: ('SQ', '1', "Lateral Spreading Device Sequence", '', 'LateralSpreadingDeviceSequence'), + 0x300A0334: ('IS', '1', "Lateral Spreading Device Number", '', 'LateralSpreadingDeviceNumber'), + 0x300A0336: ('SH', '1', "Lateral Spreading Device ID", '', 'LateralSpreadingDeviceID'), + 0x300A0338: ('CS', '1', "Lateral Spreading Device Type", '', 'LateralSpreadingDeviceType'), + 0x300A033A: ('LO', '1', "Lateral Spreading Device Description", '', 'LateralSpreadingDeviceDescription'), + 0x300A033C: ('FL', '1', "Lateral Spreading Device Water Equivalent Thickness", '', 'LateralSpreadingDeviceWaterEquivalentThickness'), + 0x300A0340: ('IS', '1', "Number of Range Modulators", '', 'NumberOfRangeModulators'), + 0x300A0342: ('SQ', '1', "Range Modulator Sequence", '', 'RangeModulatorSequence'), + 0x300A0344: ('IS', '1', "Range Modulator Number", '', 'RangeModulatorNumber'), + 0x300A0346: ('SH', '1', "Range Modulator ID", '', 'RangeModulatorID'), + 0x300A0348: ('CS', '1', "Range Modulator Type", '', 'RangeModulatorType'), + 0x300A034A: ('LO', '1', "Range Modulator Description", '', 'RangeModulatorDescription'), + 0x300A034C: ('SH', '1', "Beam Current Modulation ID", '', 'BeamCurrentModulationID'), + 0x300A0350: ('CS', '1', "Patient Support Type", '', 'PatientSupportType'), + 0x300A0352: ('SH', '1', "Patient Support ID", '', 'PatientSupportID'), + 0x300A0354: ('LO', '1', "Patient Support Accessory Code", '', 'PatientSupportAccessoryCode'), + 0x300A0356: ('FL', '1', "Fixation Light Azimuthal Angle", '', 'FixationLightAzimuthalAngle'), + 0x300A0358: ('FL', '1', "Fixation Light Polar Angle", '', 'FixationLightPolarAngle'), + 0x300A035A: ('FL', '1', "Meterset Rate", '', 'MetersetRate'), + 0x300A0360: ('SQ', '1', "Range Shifter Settings Sequence", '', 'RangeShifterSettingsSequence'), + 0x300A0362: ('LO', '1', "Range Shifter Setting", '', 'RangeShifterSetting'), + 0x300A0364: ('FL', '1', "Isocenter to Range Shifter Distance", '', 'IsocenterToRangeShifterDistance'), + 0x300A0366: ('FL', '1', "Range Shifter Water Equivalent Thickness", '', 'RangeShifterWaterEquivalentThickness'), + 0x300A0370: ('SQ', '1', "Lateral Spreading Device Settings Sequence", '', 'LateralSpreadingDeviceSettingsSequence'), + 0x300A0372: ('LO', '1', "Lateral Spreading Device Setting", '', 'LateralSpreadingDeviceSetting'), + 0x300A0374: ('FL', '1', "Isocenter to Lateral Spreading Device Distance", '', 'IsocenterToLateralSpreadingDeviceDistance'), + 0x300A0380: ('SQ', '1', "Range Modulator Settings Sequence", '', 'RangeModulatorSettingsSequence'), + 0x300A0382: ('FL', '1', "Range Modulator Gating Start Value", '', 'RangeModulatorGatingStartValue'), + 0x300A0384: ('FL', '1', "Range Modulator Gating Stop Value", '', 'RangeModulatorGatingStopValue'), + 0x300A0386: ('FL', '1', "Range Modulator Gating Start Water Equivalent Thickness", '', 'RangeModulatorGatingStartWaterEquivalentThickness'), + 0x300A0388: ('FL', '1', "Range Modulator Gating Stop Water Equivalent Thickness", '', 'RangeModulatorGatingStopWaterEquivalentThickness'), + 0x300A038A: ('FL', '1', "Isocenter to Range Modulator Distance", '', 'IsocenterToRangeModulatorDistance'), + 0x300A0390: ('SH', '1', "Scan Spot Tune ID", '', 'ScanSpotTuneID'), + 0x300A0392: ('IS', '1', "Number of Scan Spot Positions", '', 'NumberOfScanSpotPositions'), + 0x300A0394: ('FL', '1-n', "Scan Spot Position Map", '', 'ScanSpotPositionMap'), + 0x300A0396: ('FL', '1-n', "Scan Spot Meterset Weights", '', 'ScanSpotMetersetWeights'), + 0x300A0398: ('FL', '2', "Scanning Spot Size", '', 'ScanningSpotSize'), + 0x300A039A: ('IS', '1', "Number of Paintings", '', 'NumberOfPaintings'), + 0x300A03A0: ('SQ', '1', "Ion Tolerance Table Sequence", '', 'IonToleranceTableSequence'), + 0x300A03A2: ('SQ', '1', "Ion Beam Sequence", '', 'IonBeamSequence'), + 0x300A03A4: ('SQ', '1', "Ion Beam Limiting Device Sequence", '', 'IonBeamLimitingDeviceSequence'), + 0x300A03A6: ('SQ', '1', "Ion Block Sequence", '', 'IonBlockSequence'), + 0x300A03A8: ('SQ', '1', "Ion Control Point Sequence", '', 'IonControlPointSequence'), + 0x300A03AA: ('SQ', '1', "Ion Wedge Sequence", '', 'IonWedgeSequence'), + 0x300A03AC: ('SQ', '1', "Ion Wedge Position Sequence", '', 'IonWedgePositionSequence'), + 0x300A0401: ('SQ', '1', "Referenced Setup Image Sequence", '', 'ReferencedSetupImageSequence'), + 0x300A0402: ('ST', '1', "Setup Image Comment", '', 'SetupImageComment'), + 0x300A0410: ('SQ', '1', "Motion Synchronization Sequence", '', 'MotionSynchronizationSequence'), + 0x300A0412: ('FL', '3', "Control Point Orientation", '', 'ControlPointOrientation'), + 0x300A0420: ('SQ', '1', "General Accessory Sequence", '', 'GeneralAccessorySequence'), + 0x300A0421: ('SH', '1', "General Accessory ID", '', 'GeneralAccessoryID'), + 0x300A0422: ('ST', '1', "General Accessory Description", '', 'GeneralAccessoryDescription'), + 0x300A0423: ('CS', '1', "General Accessory Type", '', 'GeneralAccessoryType'), + 0x300A0424: ('IS', '1', "General Accessory Number", '', 'GeneralAccessoryNumber'), + 0x300A0431: ('SQ', '1', "Applicator Geometry Sequence", '', 'ApplicatorGeometrySequence'), + 0x300A0432: ('CS', '1', "Applicator Aperture Shape", '', 'ApplicatorApertureShape'), + 0x300A0433: ('FL', '1', "Applicator Opening", '', 'ApplicatorOpening'), + 0x300A0434: ('FL', '1', "Applicator Opening X", '', 'ApplicatorOpeningX'), + 0x300A0435: ('FL', '1', "Applicator Opening Y", '', 'ApplicatorOpeningY'), + 0x300A0436: ('FL', '1', "Source to Applicator Mounting Position Distance", '', 'SourceToApplicatorMountingPositionDistance'), + 0x300C0002: ('SQ', '1', "Referenced RT Plan Sequence", '', 'ReferencedRTPlanSequence'), + 0x300C0004: ('SQ', '1', "Referenced Beam Sequence", '', 'ReferencedBeamSequence'), + 0x300C0006: ('IS', '1', "Referenced Beam Number", '', 'ReferencedBeamNumber'), + 0x300C0007: ('IS', '1', "Referenced Reference Image Number", '', 'ReferencedReferenceImageNumber'), + 0x300C0008: ('DS', '1', "Start Cumulative Meterset Weight", '', 'StartCumulativeMetersetWeight'), + 0x300C0009: ('DS', '1', "End Cumulative Meterset Weight", '', 'EndCumulativeMetersetWeight'), + 0x300C000A: ('SQ', '1', "Referenced Brachy Application Setup Sequence", '', 'ReferencedBrachyApplicationSetupSequence'), + 0x300C000C: ('IS', '1', "Referenced Brachy Application Setup Number", '', 'ReferencedBrachyApplicationSetupNumber'), + 0x300C000E: ('IS', '1', "Referenced Source Number", '', 'ReferencedSourceNumber'), + 0x300C0020: ('SQ', '1', "Referenced Fraction Group Sequence", '', 'ReferencedFractionGroupSequence'), + 0x300C0022: ('IS', '1', "Referenced Fraction Group Number", '', 'ReferencedFractionGroupNumber'), + 0x300C0040: ('SQ', '1', "Referenced Verification Image Sequence", '', 'ReferencedVerificationImageSequence'), + 0x300C0042: ('SQ', '1', "Referenced Reference Image Sequence", '', 'ReferencedReferenceImageSequence'), + 0x300C0050: ('SQ', '1', "Referenced Dose Reference Sequence", '', 'ReferencedDoseReferenceSequence'), + 0x300C0051: ('IS', '1', "Referenced Dose Reference Number", '', 'ReferencedDoseReferenceNumber'), + 0x300C0055: ('SQ', '1', "Brachy Referenced Dose Reference Sequence", '', 'BrachyReferencedDoseReferenceSequence'), + 0x300C0060: ('SQ', '1', "Referenced Structure Set Sequence", '', 'ReferencedStructureSetSequence'), + 0x300C006A: ('IS', '1', "Referenced Patient Setup Number", '', 'ReferencedPatientSetupNumber'), + 0x300C0080: ('SQ', '1', "Referenced Dose Sequence", '', 'ReferencedDoseSequence'), + 0x300C00A0: ('IS', '1', "Referenced Tolerance Table Number", '', 'ReferencedToleranceTableNumber'), + 0x300C00B0: ('SQ', '1', "Referenced Bolus Sequence", '', 'ReferencedBolusSequence'), + 0x300C00C0: ('IS', '1', "Referenced Wedge Number", '', 'ReferencedWedgeNumber'), + 0x300C00D0: ('IS', '1', "Referenced Compensator Number", '', 'ReferencedCompensatorNumber'), + 0x300C00E0: ('IS', '1', "Referenced Block Number", '', 'ReferencedBlockNumber'), + 0x300C00F0: ('IS', '1', "Referenced Control Point Index", '', 'ReferencedControlPointIndex'), + 0x300C00F2: ('SQ', '1', "Referenced Control Point Sequence", '', 'ReferencedControlPointSequence'), + 0x300C00F4: ('IS', '1', "Referenced Start Control Point Index", '', 'ReferencedStartControlPointIndex'), + 0x300C00F6: ('IS', '1', "Referenced Stop Control Point Index", '', 'ReferencedStopControlPointIndex'), + 0x300C0100: ('IS', '1', "Referenced Range Shifter Number", '', 'ReferencedRangeShifterNumber'), + 0x300C0102: ('IS', '1', "Referenced Lateral Spreading Device Number", '', 'ReferencedLateralSpreadingDeviceNumber'), + 0x300C0104: ('IS', '1', "Referenced Range Modulator Number", '', 'ReferencedRangeModulatorNumber'), + 0x300E0002: ('CS', '1', "Approval Status", '', 'ApprovalStatus'), + 0x300E0004: ('DA', '1', "Review Date", '', 'ReviewDate'), + 0x300E0005: ('TM', '1', "Review Time", '', 'ReviewTime'), + 0x300E0008: ('PN', '1', "Reviewer Name", '', 'ReviewerName'), + 0x40000010: ('LT', '1', "Arbitrary", 'Retired', 'Arbitrary'), + 0x40004000: ('LT', '1', "Text Comments", 'Retired', 'TextComments'), + 0x40080040: ('SH', '1', "Results ID", 'Retired', 'ResultsID'), + 0x40080042: ('LO', '1', "Results ID Issuer", 'Retired', 'ResultsIDIssuer'), + 0x40080050: ('SQ', '1', "Referenced Interpretation Sequence", 'Retired', 'ReferencedInterpretationSequence'), + 0x400800FF: ('CS', '1', "Report Production Status (Trial)", 'Retired', 'ReportProductionStatusTrial'), + 0x40080100: ('DA', '1', "Interpretation Recorded Date", 'Retired', 'InterpretationRecordedDate'), + 0x40080101: ('TM', '1', "Interpretation Recorded Time", 'Retired', 'InterpretationRecordedTime'), + 0x40080102: ('PN', '1', "Interpretation Recorder", 'Retired', 'InterpretationRecorder'), + 0x40080103: ('LO', '1', "Reference to Recorded Sound", 'Retired', 'ReferenceToRecordedSound'), + 0x40080108: ('DA', '1', "Interpretation Transcription Date", 'Retired', 'InterpretationTranscriptionDate'), + 0x40080109: ('TM', '1', "Interpretation Transcription Time", 'Retired', 'InterpretationTranscriptionTime'), + 0x4008010A: ('PN', '1', "Interpretation Transcriber", 'Retired', 'InterpretationTranscriber'), + 0x4008010B: ('ST', '1', "Interpretation Text", 'Retired', 'InterpretationText'), + 0x4008010C: ('PN', '1', "Interpretation Author", 'Retired', 'InterpretationAuthor'), + 0x40080111: ('SQ', '1', "Interpretation Approver Sequence", 'Retired', 'InterpretationApproverSequence'), + 0x40080112: ('DA', '1', "Interpretation Approval Date", 'Retired', 'InterpretationApprovalDate'), + 0x40080113: ('TM', '1', "Interpretation Approval Time", 'Retired', 'InterpretationApprovalTime'), + 0x40080114: ('PN', '1', "Physician Approving Interpretation", 'Retired', 'PhysicianApprovingInterpretation'), + 0x40080115: ('LT', '1', "Interpretation Diagnosis Description", 'Retired', 'InterpretationDiagnosisDescription'), + 0x40080117: ('SQ', '1', "Interpretation Diagnosis Code Sequence", 'Retired', 'InterpretationDiagnosisCodeSequence'), + 0x40080118: ('SQ', '1', "Results Distribution List Sequence", 'Retired', 'ResultsDistributionListSequence'), + 0x40080119: ('PN', '1', "Distribution Name", 'Retired', 'DistributionName'), + 0x4008011A: ('LO', '1', "Distribution Address", 'Retired', 'DistributionAddress'), + 0x40080200: ('SH', '1', "Interpretation ID", 'Retired', 'InterpretationID'), + 0x40080202: ('LO', '1', "Interpretation ID Issuer", 'Retired', 'InterpretationIDIssuer'), + 0x40080210: ('CS', '1', "Interpretation Type ID", 'Retired', 'InterpretationTypeID'), + 0x40080212: ('CS', '1', "Interpretation Status ID", 'Retired', 'InterpretationStatusID'), + 0x40080300: ('ST', '1', "Impressions", 'Retired', 'Impressions'), + 0x40084000: ('ST', '1', "Results Comments", 'Retired', 'ResultsComments'), + 0x40100001: ('CS', '1', "Low Energy Detectors", '', 'LowEnergyDetectors'), + 0x40100002: ('CS', '1', "High Energy Detectors", '', 'HighEnergyDetectors'), + 0x40100004: ('SQ', '1', "Detector Geometry Sequence", '', 'DetectorGeometrySequence'), + 0x40101001: ('SQ', '1', "Threat ROI Voxel Sequence", '', 'ThreatROIVoxelSequence'), + 0x40101004: ('FL', '3', "Threat ROI Base", '', 'ThreatROIBase'), + 0x40101005: ('FL', '3', "Threat ROI Extents", '', 'ThreatROIExtents'), + 0x40101006: ('OB', '1', "Threat ROI Bitmap", '', 'ThreatROIBitmap'), + 0x40101007: ('SH', '1', "Route Segment ID", '', 'RouteSegmentID'), + 0x40101008: ('CS', '1', "Gantry Type", '', 'GantryType'), + 0x40101009: ('CS', '1', "OOI Owner Type", '', 'OOIOwnerType'), + 0x4010100A: ('SQ', '1', "Route Segment Sequence", '', 'RouteSegmentSequence'), + 0x40101010: ('US', '1', "Potential Threat Object ID", '', 'PotentialThreatObjectID'), + 0x40101011: ('SQ', '1', "Threat Sequence", '', 'ThreatSequence'), + 0x40101012: ('CS', '1', "Threat Category", '', 'ThreatCategory'), + 0x40101013: ('LT', '1', "Threat Category Description", '', 'ThreatCategoryDescription'), + 0x40101014: ('CS', '1', "ATD Ability Assessment", '', 'ATDAbilityAssessment'), + 0x40101015: ('CS', '1', "ATD Assessment Flag", '', 'ATDAssessmentFlag'), + 0x40101016: ('FL', '1', "ATD Assessment Probability", '', 'ATDAssessmentProbability'), + 0x40101017: ('FL', '1', "Mass", '', 'Mass'), + 0x40101018: ('FL', '1', "Density", '', 'Density'), + 0x40101019: ('FL', '1', "Z Effective", '', 'ZEffective'), + 0x4010101A: ('SH', '1', "Boarding Pass ID", '', 'BoardingPassID'), + 0x4010101B: ('FL', '3', "Center of Mass", '', 'CenterOfMass'), + 0x4010101C: ('FL', '3', "Center of PTO", '', 'CenterOfPTO'), + 0x4010101D: ('FL', '6-n', "Bounding Polygon", '', 'BoundingPolygon'), + 0x4010101E: ('SH', '1', "Route Segment Start Location ID", '', 'RouteSegmentStartLocationID'), + 0x4010101F: ('SH', '1', "Route Segment End Location ID", '', 'RouteSegmentEndLocationID'), + 0x40101020: ('CS', '1', "Route Segment Location ID Type", '', 'RouteSegmentLocationIDType'), + 0x40101021: ('CS', '1-n', "Abort Reason", '', 'AbortReason'), + 0x40101023: ('FL', '1', "Volume of PTO", '', 'VolumeOfPTO'), + 0x40101024: ('CS', '1', "Abort Flag", '', 'AbortFlag'), + 0x40101025: ('DT', '1', "Route Segment Start Time", '', 'RouteSegmentStartTime'), + 0x40101026: ('DT', '1', "Route Segment End Time", '', 'RouteSegmentEndTime'), + 0x40101027: ('CS', '1', "TDR Type", '', 'TDRType'), + 0x40101028: ('CS', '1', "International Route Segment", '', 'InternationalRouteSegment'), + 0x40101029: ('LO', '1-n', "Threat Detection Algorithm and Version", '', 'ThreatDetectionAlgorithmandVersion'), + 0x4010102A: ('SH', '1', "Assigned Location", '', 'AssignedLocation'), + 0x4010102B: ('DT', '1', "Alarm Decision Time", '', 'AlarmDecisionTime'), + 0x40101031: ('CS', '1', "Alarm Decision", '', 'AlarmDecision'), + 0x40101033: ('US', '1', "Number of Total Objects", '', 'NumberOfTotalObjects'), + 0x40101034: ('US', '1', "Number of Alarm Objects", '', 'NumberOfAlarmObjects'), + 0x40101037: ('SQ', '1', "PTO Representation Sequence", '', 'PTORepresentationSequence'), + 0x40101038: ('SQ', '1', "ATD Assessment Sequence", '', 'ATDAssessmentSequence'), + 0x40101039: ('CS', '1', "TIP Type", '', 'TIPType'), + 0x4010103A: ('CS', '1', "DICOS Version", '', 'DICOSVersion'), + 0x40101041: ('DT', '1', "OOI Owner Creation Time", '', 'OOIOwnerCreationTime'), + 0x40101042: ('CS', '1', "OOI Type", '', 'OOIType'), + 0x40101043: ('FL', '3', "OOI Size", '', 'OOISize'), + 0x40101044: ('CS', '1', "Acquisition Status", '', 'AcquisitionStatus'), + 0x40101045: ('SQ', '1', "Basis Materials Code Sequence", '', 'BasisMaterialsCodeSequence'), + 0x40101046: ('CS', '1', "Phantom Type", '', 'PhantomType'), + 0x40101047: ('SQ', '1', "OOI Owner Sequence", '', 'OOIOwnerSequence'), + 0x40101048: ('CS', '1', "Scan Type", '', 'ScanType'), + 0x40101051: ('LO', '1', "Itinerary ID", '', 'ItineraryID'), + 0x40101052: ('SH', '1', "Itinerary ID Type", '', 'ItineraryIDType'), + 0x40101053: ('LO', '1', "Itinerary ID Assigning Authority", '', 'ItineraryIDAssigningAuthority'), + 0x40101054: ('SH', '1', "Route ID", '', 'RouteID'), + 0x40101055: ('SH', '1', "Route ID Assigning Authority", '', 'RouteIDAssigningAuthority'), + 0x40101056: ('CS', '1', "Inbound Arrival Type", '', 'InboundArrivalType'), + 0x40101058: ('SH', '1', "Carrier ID", '', 'CarrierID'), + 0x40101059: ('CS', '1', "Carrier ID Assigning Authority", '', 'CarrierIDAssigningAuthority'), + 0x40101060: ('FL', '3', "Source Orientation", '', 'SourceOrientation'), + 0x40101061: ('FL', '3', "Source Position", '', 'SourcePosition'), + 0x40101062: ('FL', '1', "Belt Height", '', 'BeltHeight'), + 0x40101064: ('SQ', '1', "Algorithm Routing Code Sequence", '', 'AlgorithmRoutingCodeSequence'), + 0x40101067: ('CS', '1', "Transport Classification", '', 'TransportClassification'), + 0x40101068: ('LT', '1', "OOI Type Descriptor", '', 'OOITypeDescriptor'), + 0x40101069: ('FL', '1', "Total Processing Time", '', 'TotalProcessingTime'), + 0x4010106C: ('OB', '1', "Detector Calibration Data", '', 'DetectorCalibrationData'), + 0x4FFE0001: ('SQ', '1', "MAC Parameters Sequence", '', 'MACParametersSequence'), + 0x52009229: ('SQ', '1', "Shared Functional Groups Sequence", '', 'SharedFunctionalGroupsSequence'), + 0x52009230: ('SQ', '1', "Per-frame Functional Groups Sequence", '', 'PerFrameFunctionalGroupsSequence'), + 0x54000100: ('SQ', '1', "Waveform Sequence", '', 'WaveformSequence'), + 0x54000110: ('OB or OW', '1', "Channel Minimum Value", '', 'ChannelMinimumValue'), + 0x54000112: ('OB or OW', '1', "Channel Maximum Value", '', 'ChannelMaximumValue'), + 0x54001004: ('US', '1', "Waveform Bits Allocated", '', 'WaveformBitsAllocated'), + 0x54001006: ('CS', '1', "Waveform Sample Interpretation", '', 'WaveformSampleInterpretation'), + 0x5400100A: ('OB or OW', '1', "Waveform Padding Value", '', 'WaveformPaddingValue'), + 0x54001010: ('OB or OW', '1', "Waveform Data", '', 'WaveformData'), + 0x56000010: ('OF', '1', "First Order Phase Correction Angle", '', 'FirstOrderPhaseCorrectionAngle'), + 0x56000020: ('OF', '1', "Spectroscopy Data", '', 'SpectroscopyData'), + 0x7FE00010: ('OW or OB', '1', "Pixel Data", '', 'PixelData'), + 0x7FE00020: ('OW', '1', "Coefficients SDVN", 'Retired', 'CoefficientsSDVN'), + 0x7FE00030: ('OW', '1', "Coefficients SDHN", 'Retired', 'CoefficientsSDHN'), + 0x7FE00040: ('OW', '1', "Coefficients SDDN", 'Retired', 'CoefficientsSDDN'), + 0xFFFAFFFA: ('SQ', '1', "Digital Signatures Sequence", '', 'DigitalSignaturesSequence'), + 0xFFFCFFFC: ('OB', '1', "Data Set Trailing Padding", '', 'DataSetTrailingPadding'), + 0xFFFEE000: ('NONE', '1', "Item", '', 'Item'), + 0xFFFEE00D: ('NONE', '1', "Item Delimitation Item", '', 'ItemDelimitationItem'), + 0xFFFEE0DD: ('NONE', '1', "Sequence Delimitation Item", '', 'SequenceDelimitationItem') +} + +RepeatersDictionary = { + '002031xx': ('CS', '1-n', "Source Image IDs", 'Retired', 'SourceImageIDs'), + '002804x0': ('US', '1', "Rows For Nth Order Coefficients", 'Retired', 'RowsForNthOrderCoefficients'), + '002804x1': ('US', '1', "Columns For Nth Order Coefficients", 'Retired', 'ColumnsForNthOrderCoefficients'), + '002804x2': ('LO', '1-n', "Coefficient Coding", 'Retired', 'CoefficientCoding'), + '002804x3': ('AT', '1-n', "Coefficient Coding Pointers", 'Retired', 'CoefficientCodingPointers'), + '002808x0': ('CS', '1-n', "Code Label", 'Retired', 'CodeLabel'), + '002808x2': ('US', '1', "Number of Tables", 'Retired', 'NumberOfTables'), + '002808x3': ('AT', '1-n', "Code Table Location", 'Retired', 'CodeTableLocation'), + '002808x4': ('US', '1', "Bits For Code Word", 'Retired', 'BitsForCodeWord'), + '002808x8': ('AT', '1-n', "Image Data Location", 'Retired', 'ImageDataLocation'), + '1000xxx0': ('US', '3', "Escape Triplet", 'Retired', 'EscapeTriplet'), + '1000xxx1': ('US', '3', "Run Length Triplet", 'Retired', 'RunLengthTriplet'), + '1000xxx2': ('US', '1', "Huffman Table Size", 'Retired', 'HuffmanTableSize'), + '1000xxx3': ('US', '3', "Huffman Table Triplet", 'Retired', 'HuffmanTableTriplet'), + '1000xxx4': ('US', '1', "Shift Table Size", 'Retired', 'ShiftTableSize'), + '1000xxx5': ('US', '3', "Shift Table Triplet", 'Retired', 'ShiftTableTriplet'), + '1010xxxx': ('US', '1-n', "Zonal Map", 'Retired', 'ZonalMap'), + '50xx0005': ('US', '1', "Curve Dimensions", 'Retired', 'CurveDimensions'), + '50xx0010': ('US', '1', "Number of Points", 'Retired', 'NumberOfPoints'), + '50xx0020': ('CS', '1', "Type of Data", 'Retired', 'TypeOfData'), + '50xx0022': ('LO', '1', "Curve Description", 'Retired', 'CurveDescription'), + '50xx0030': ('SH', '1-n', "Axis Units", 'Retired', 'AxisUnits'), + '50xx0040': ('SH', '1-n', "Axis Labels", 'Retired', 'AxisLabels'), + '50xx0103': ('US', '1', "Data Value Representation", 'Retired', 'DataValueRepresentation'), + '50xx0104': ('US', '1-n', "Minimum Coordinate Value", 'Retired', 'MinimumCoordinateValue'), + '50xx0105': ('US', '1-n', "Maximum Coordinate Value", 'Retired', 'MaximumCoordinateValue'), + '50xx0106': ('SH', '1-n', "Curve Range", 'Retired', 'CurveRange'), + '50xx0110': ('US', '1-n', "Curve Data Descriptor", 'Retired', 'CurveDataDescriptor'), + '50xx0112': ('US', '1-n', "Coordinate Start Value", 'Retired', 'CoordinateStartValue'), + '50xx0114': ('US', '1-n', "Coordinate Step Value", 'Retired', 'CoordinateStepValue'), + '50xx1001': ('CS', '1', "Curve Activation Layer", 'Retired', 'CurveActivationLayer'), + '50xx2000': ('US', '1', "Audio Type", 'Retired', 'AudioType'), + '50xx2002': ('US', '1', "Audio Sample Format", 'Retired', 'AudioSampleFormat'), + '50xx2004': ('US', '1', "Number of Channels", 'Retired', 'NumberOfChannels'), + '50xx2006': ('UL', '1', "Number of Samples", 'Retired', 'NumberOfSamples'), + '50xx2008': ('UL', '1', "Sample Rate", 'Retired', 'SampleRate'), + '50xx200A': ('UL', '1', "Total Time", 'Retired', 'TotalTime'), + '50xx200C': ('OW or OB', '1', "Audio Sample Data", 'Retired', 'AudioSampleData'), + '50xx200E': ('LT', '1', "Audio Comments", 'Retired', 'AudioComments'), + '50xx2500': ('LO', '1', "Curve Label", 'Retired', 'CurveLabel'), + '50xx2600': ('SQ', '1', "Curve Referenced Overlay Sequence", 'Retired', 'CurveReferencedOverlaySequence'), + '50xx2610': ('US', '1', "Curve Referenced Overlay Group", 'Retired', 'CurveReferencedOverlayGroup'), + '50xx3000': ('OW or OB', '1', "Curve Data", 'Retired', 'CurveData'), + '60xx0010': ('US', '1', "Overlay Rows", '', 'OverlayRows'), + '60xx0011': ('US', '1', "Overlay Columns", '', 'OverlayColumns'), + '60xx0012': ('US', '1', "Overlay Planes", 'Retired', 'OverlayPlanes'), + '60xx0015': ('IS', '1', "Number of Frames in Overlay", '', 'NumberOfFramesInOverlay'), + '60xx0022': ('LO', '1', "Overlay Description", '', 'OverlayDescription'), + '60xx0040': ('CS', '1', "Overlay Type", '', 'OverlayType'), + '60xx0045': ('LO', '1', "Overlay Subtype", '', 'OverlaySubtype'), + '60xx0050': ('SS', '2', "Overlay Origin", '', 'OverlayOrigin'), + '60xx0051': ('US', '1', "Image Frame Origin", '', 'ImageFrameOrigin'), + '60xx0052': ('US', '1', "Overlay Plane Origin", 'Retired', 'OverlayPlaneOrigin'), + '60xx0060': ('CS', '1', "Overlay Compression Code", 'Retired', 'OverlayCompressionCode'), + '60xx0061': ('SH', '1', "Overlay Compression Originator", 'Retired', 'OverlayCompressionOriginator'), + '60xx0062': ('SH', '1', "Overlay Compression Label", 'Retired', 'OverlayCompressionLabel'), + '60xx0063': ('CS', '1', "Overlay Compression Description", 'Retired', 'OverlayCompressionDescription'), + '60xx0066': ('AT', '1-n', "Overlay Compression Step Pointers", 'Retired', 'OverlayCompressionStepPointers'), + '60xx0068': ('US', '1', "Overlay Repeat Interval", 'Retired', 'OverlayRepeatInterval'), + '60xx0069': ('US', '1', "Overlay Bits Grouped", 'Retired', 'OverlayBitsGrouped'), + '60xx0100': ('US', '1', "Overlay Bits Allocated", '', 'OverlayBitsAllocated'), + '60xx0102': ('US', '1', "Overlay Bit Position", '', 'OverlayBitPosition'), + '60xx0110': ('CS', '1', "Overlay Format", 'Retired', 'OverlayFormat'), + '60xx0200': ('US', '1', "Overlay Location", 'Retired', 'OverlayLocation'), + '60xx0800': ('CS', '1-n', "Overlay Code Label", 'Retired', 'OverlayCodeLabel'), + '60xx0802': ('US', '1', "Overlay Number of Tables", 'Retired', 'OverlayNumberOfTables'), + '60xx0803': ('AT', '1-n', "Overlay Code Table Location", 'Retired', 'OverlayCodeTableLocation'), + '60xx0804': ('US', '1', "Overlay Bits For Code Word", 'Retired', 'OverlayBitsForCodeWord'), + '60xx1001': ('CS', '1', "Overlay Activation Layer", '', 'OverlayActivationLayer'), + '60xx1100': ('US', '1', "Overlay Descriptor - Gray", 'Retired', 'OverlayDescriptorGray'), + '60xx1101': ('US', '1', "Overlay Descriptor - Red", 'Retired', 'OverlayDescriptorRed'), + '60xx1102': ('US', '1', "Overlay Descriptor - Green", 'Retired', 'OverlayDescriptorGreen'), + '60xx1103': ('US', '1', "Overlay Descriptor - Blue", 'Retired', 'OverlayDescriptorBlue'), + '60xx1200': ('US', '1-n', "Overlays - Gray", 'Retired', 'OverlaysGray'), + '60xx1201': ('US', '1-n', "Overlays - Red", 'Retired', 'OverlaysRed'), + '60xx1202': ('US', '1-n', "Overlays - Green", 'Retired', 'OverlaysGreen'), + '60xx1203': ('US', '1-n', "Overlays - Blue", 'Retired', 'OverlaysBlue'), + '60xx1301': ('IS', '1', "ROI Area", '', 'ROIArea'), + '60xx1302': ('DS', '1', "ROI Mean", '', 'ROIMean'), + '60xx1303': ('DS', '1', "ROI Standard Deviation", '', 'ROIStandardDeviation'), + '60xx1500': ('LO', '1', "Overlay Label", '', 'OverlayLabel'), + '60xx3000': ('OB or OW', '1', "Overlay Data", '', 'OverlayData'), + '60xx4000': ('LT', '1', "Overlay Comments", 'Retired', 'OverlayComments'), + '7Fxx0010': ('OW or OB', '1', "Variable Pixel Data", 'Retired', 'VariablePixelData'), + '7Fxx0011': ('US', '1', "Variable Next Data Group", 'Retired', 'VariableNextDataGroup'), + '7Fxx0020': ('OW', '1', "Variable Coefficients SDVN", 'Retired', 'VariableCoefficientsSDVN'), + '7Fxx0030': ('OW', '1', "Variable Coefficients SDHN", 'Retired', 'VariableCoefficientsSDHN'), + '7Fxx0040': ('OW', '1', "Variable Coefficients SDDN", 'Retired', 'VariableCoefficientsSDDN') +} diff -Nru pydicom-0.9.8/source/generate_dict/dict_2011.csv pydicom-0.9.9/source/generate_dict/dict_2011.csv --- pydicom-0.9.8/source/generate_dict/dict_2011.csv 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/dict_2011.csv 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,3780 @@ +"Tag","Name","Keyword","VR","VM", +"(0000,0000)","Command Group Length","CommandGroupLength","UL",1, +"(0000,0001)","Command Length to End","CommandLengthToEnd","UL","1","RET" +"(0000,0002)","Affected SOP Class UID","AffectedSOPClassUID","UI",1, +"(0000,0003)","Requested SOP Class UID","RequestedSOPClassUID","UI",1, +"(0000,0010)","Command Recognition Code","CommandRecognitionCode","SH","1","RET" +"(0000,0100)","Command Field","CommandField","US",1, +"(0000,0110)","Message ID","MessageID","US",1, +"(0000,0120)","Message ID Being Responded To","MessageIDBeingRespondedTo","US",1, +"(0000,0200)","Initiator","Initiator","AE","1","RET" +"(0000,0300)","Receiver","Receiver","AE","1","RET" +"(0000,0400)","Find Location","FindLocation","AE","1","RET" +"(0000,0600)","Move Destination","MoveDestination","AE",1, +"(0000,0700)","Priority","Priority","US",1, +"(0000,0800)","Command Data Set Type","CommandDataSetType","US",1, +"(0000,0850)","Number of Matches","NumberOfMatches","US","1","RET" +"(0000,0860)","Response Sequence Number","ResponseSequenceNumber","US","1","RET" +"(0000,0900)","Status","Status","US",1, +"(0000,0901)","Offending Element","OffendingElement","AT","1-n", +"(0000,0902)","Error Comment","ErrorComment","LO",1, +"(0000,0903)","Error ID","ErrorID","US",1, +"(0000,1000)","Affected SOP Instance UID","AffectedSOPInstanceUID","UI",1, +"(0000,1001)","Requested SOP Instance UID","RequestedSOPInstanceUID","UI",1, +"(0000,1002)","Event Type ID","EventTypeID","US",1, +"(0000,1005)","Attribute Identifier List","AttributeIdentifierList","AT","1-n", +"(0000,1008)","Action Type ID","ActionTypeID","US",1, +"(0000,1020)","Number of Remaining Sub-operations","NumberOfRemainingSuboperations","US",1, +"(0000,1021)","Number of Completed Sub-operations","NumberOfCompletedSuboperations","US",1, +"(0000,1022)","Number of Failed Sub-operations","NumberOfFailedSuboperations","US",1, +"(0000,1023)","Number of Warning Sub-operations","NumberOfWarningSuboperations","US",1, +"(0000,1030)","Move Originator Application Entity Title","MoveOriginatorApplicationEntityTitle","AE",1, +"(0000,1031)","Move Originator Message ID","MoveOriginatorMessageID","US",1, +"(0000,4000)","Dialog Receiver","DialogReceiver","LT","1","RET" +"(0000,4010)","Terminal Type","TerminalType","LT","1","RET" +"(0000,5010)","Message Set ID","MessageSetID","SH","1","RET" +"(0000,5020)","End Message ID","EndMessageID","SH","1","RET" +"(0000,5110)","Display Format","DisplayFormat","LT","1","RET" +"(0000,5120)","Page Position ID","PagePositionID","LT","1","RET" +"(0000,5130)","Text Format ID","TextFormatID","CS","1","RET" +"(0000,5140)","Normal/Reverse","NormalReverse","CS","1","RET" +"(0000,5150)","Add Gray Scale","AddGrayScale","CS","1","RET" +"(0000,5160)","Borders","Borders","CS","1","RET" +"(0000,5170)","Copies","Copies","IS","1","RET" +"(0000,5180)","Command Magnification Type","CommandMagnificationType","CS","1","RET" +"(0000,5190)","Erase","Erase","CS","1","RET" +"(0000,51A0)","Print","Print","CS","1","RET" +"(0000,51B0)","Overlays","Overlays","US","1-n","RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0002,0000)","File Meta Information Group Length","FileMetaInformationGroupLength","UL",1, +"(0002,0001)","File Meta Information Version","FileMetaInformationVersion","OB",1, +"(0002,0002)","Media Storage SOP Class UID","MediaStorageSOPClassUID","UI",1, +"(0002,0003)","Media Storage SOP Instance UID","MediaStorageSOPInstanceUID","UI",1, +"(0002,0010)","Transfer Syntax UID","TransferSyntaxUID","UI",1, +"(0002,0012)","Implementation Class UID","ImplementationClassUID","UI",1, +"(0002,0013)","Implementation Version Name","ImplementationVersionName","SH",1, +"(0002,0016)","Source Application Entity Title","SourceApplicationEntityTitle","AE",1, +"(0002,0100)","Private Information Creator UID","PrivateInformationCreatorUID","UI",1, +"(0002,0102)","Private Information","PrivateInformation","OB",1, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(0004,1130)","File-set ID","FileSetID","CS",1, +"(0004,1141)","File-set Descriptor File ID","FileSetDescriptorFileID","CS","1-8", +"(0004,1142)","Specific Character Set of File-set Descriptor File","SpecificCharacterSetOfFileSetDescriptorFile","CS",1, +"(0004,1200)","Offset of the First Directory Record of the Root Directory Entity","OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity","UL",1, +"(0004,1202)","Offset of the Last Directory Record of the Root Directory Entity","OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity","UL",1, +"(0004,1212)","File-set Consistency Flag","FileSetConsistencyFlag","US",1, +"(0004,1220)","Directory Record Sequence","DirectoryRecordSequence","SQ",1, +"(0004,1400)","Offset of the Next Directory Record","OffsetOfTheNextDirectoryRecord","UL",1, +"(0004,1410)","Record In-use Flag","RecordInUseFlag","US",1, +"(0004,1420)","Offset of Referenced Lower-Level Directory Entity","OffsetOfReferencedLowerLevelDirectoryEntity","UL",1, +"(0004,1430)","Directory Record Type","DirectoryRecordType","CS",1, +"(0004,1432)","Private Record UID","PrivateRecordUID","UI",1, +"(0004,1500)","Referenced File ID","ReferencedFileID","CS","1-8", +"(0004,1504)","MRDR Directory Record Offset","MRDRDirectoryRecordOffset","UL",1,"RET" +"(0004,1510)","Referenced SOP Class UID in File","ReferencedSOPClassUIDInFile","UI",1, +"(0004,1511)","Referenced SOP Instance UID in File","ReferencedSOPInstanceUIDInFile","UI",1, +"(0004,1512)","Referenced Transfer Syntax UID in File","ReferencedTransferSyntaxUIDInFile","UI",1, +"(0004,151A)","Referenced Related General SOP Class UID in File","ReferencedRelatedGeneralSOPClassUIDInFile","UI","1-n", +"(0004,1600)","Number of References","NumberOfReferences","UL",1,"RET" +,,,,, +"(0008,0001)","Length to End","LengthToEnd","UL",1,"RET" +"(0008,0005)","Specific Character Set","SpecificCharacterSet","CS","1-n", +"(0008,0006)","Language Code Sequence","LanguageCodeSequence","SQ",1, +"(0008,0008)","Image Type","ImageType","CS","2-n", +"(0008,0010)","Recognition Code","RecognitionCode","SH",1,"RET" +"(0008,0012)","Instance Creation Date","InstanceCreationDate","DA",1, +"(0008,0013)","Instance Creation Time","InstanceCreationTime","TM",1, +"(0008,0014)","Instance Creator UID","InstanceCreatorUID","UI",1, +"(0008,0016)","SOP Class UID","SOPClassUID","UI",1, +"(0008,0018)","SOP Instance UID","SOPInstanceUID","UI",1, +"(0008,001A)","Related General SOP Class UID","RelatedGeneralSOPClassUID","UI","1-n", +"(0008,001B)","Original Specialized SOP Class UID","OriginalSpecializedSOPClassUID","UI",1, +"(0008,0020)","Study Date","StudyDate","DA",1, +"(0008,0021)","Series Date","SeriesDate","DA",1, +"(0008,0022)","Acquisition Date","AcquisitionDate","DA",1, +"(0008,0023)","Content Date","ContentDate","DA",1, +"(0008,0024)","Overlay Date","OverlayDate","DA",1,"RET" +"(0008,0025)","Curve Date","CurveDate","DA",1,"RET" +"(0008,002A)","Acquisition DateTime","AcquisitionDateTime","DT",1, +"(0008,0030)","Study Time","StudyTime","TM",1, +"(0008,0031)","Series Time","SeriesTime","TM",1, +"(0008,0032)","Acquisition Time","AcquisitionTime","TM",1, +"(0008,0033)","Content Time","ContentTime","TM",1, +"(0008,0034)","Overlay Time","OverlayTime","TM",1,"RET" +"(0008,0035)","Curve Time","CurveTime","TM",1,"RET" +"(0008,0040)","Data Set Type","DataSetType","US",1,"RET" +"(0008,0041)","Data Set Subtype","DataSetSubtype","LO",1,"RET" +"(0008,0042)","Nuclear Medicine Series Type","NuclearMedicineSeriesType","CS",1,"RET" +"(0008,0050)","Accession Number","AccessionNumber","SH",1, +"(0008,0051)","Issuer of Accession Number Sequence","IssuerOfAccessionNumberSequence","SQ",1, +"(0008,0052)","Query/Retrieve Level","QueryRetrieveLevel","CS",1, +"(0008,0054)","Retrieve AE Title","RetrieveAETitle","AE","1-n", +"(0008,0056)","Instance Availability","InstanceAvailability","CS",1, +"(0008,0058)","Failed SOP Instance UID List","FailedSOPInstanceUIDList","UI","1-n", +"(0008,0060)","Modality","Modality","CS",1, +"(0008,0061)","Modalities in Study","ModalitiesInStudy","CS","1-n", +"(0008,0062)","SOP Classes in Study","SOPClassesInStudy","UI","1-n", +"(0008,0064)","Conversion Type","ConversionType","CS",1, +"(0008,0068)","Presentation Intent Type","PresentationIntentType","CS",1, +"(0008,0070)","Manufacturer","Manufacturer","LO",1, +"(0008,0080)","Institution Name","InstitutionName","LO",1, +"(0008,0081)","Institution Address","InstitutionAddress","ST",1, +"(0008,0082)","Institution Code Sequence","InstitutionCodeSequence","SQ",1, +"(0008,0090)","Referring Physician’s Name","ReferringPhysicianName","PN",1, +"(0008,0092)","Referring Physician’s Address","ReferringPhysicianAddress","ST",1, +"(0008,0094)","Referring Physician’s Telephone Numbers","ReferringPhysicianTelephoneNumbers","SH","1-n", +"(0008,0096)","Referring Physician Identification Sequence","ReferringPhysicianIdentificationSequence","SQ",1, +"(0008,0100)","Code Value","CodeValue","SH",1, +"(0008,0102)","Coding Scheme Designator","CodingSchemeDesignator","SH",1, +"(0008,0103)","Coding Scheme Version","CodingSchemeVersion","SH",1, +"(0008,0104)","Code Meaning","CodeMeaning","LO",1, +"(0008,0105)","Mapping Resource","MappingResource","CS",1, +"(0008,0106)","Context Group Version","ContextGroupVersion","DT",1, +"(0008,0107)","Context Group Local Version","ContextGroupLocalVersion","DT",1, +"(0008,010B)","Context Group Extension Flag","ContextGroupExtensionFlag","CS",1, +"(0008,010C)","Coding Scheme UID","CodingSchemeUID","UI",1, +"(0008,010D)","Context Group Extension Creator UID","ContextGroupExtensionCreatorUID","UI",1, +"(0008,010F)","Context Identifier","ContextIdentifier","CS",1, +"(0008,0110)","Coding Scheme Identification Sequence","CodingSchemeIdentificationSequence","SQ",1, +"(0008,0112)","Coding Scheme Registry","CodingSchemeRegistry","LO",1, +"(0008,0114)","Coding Scheme External ID","CodingSchemeExternalID","ST",1, +"(0008,0115)","Coding Scheme Name","CodingSchemeName","ST",1, +"(0008,0116)","Coding Scheme Responsible Organization","CodingSchemeResponsibleOrganization","ST",1, +"(0008,0117)","Context UID","ContextUID","UI",1, +"(0008,0201)","Timezone Offset From UTC","TimezoneOffsetFromUTC","SH",1, +"(0008,1000)","Network ID","NetworkID","AE",1,"RET" +"(0008,1010)","Station Name","StationName","SH",1, +"(0008,1030)","Study Description","StudyDescription","LO",1, +"(0008,1032)","Procedure Code Sequence","ProcedureCodeSequence","SQ",1, +"(0008,103E)","Series Description","SeriesDescription","LO",1, +"(0008,103F)","Series Description Code Sequence","SeriesDescriptionCodeSequence","SQ",1, +"(0008,1040)","Institutional Department Name","InstitutionalDepartmentName","LO",1, +"(0008,1048)","Physician(s) of Record","PhysiciansOfRecord","PN","1-n", +"(0008,1049)","Physician(s) of Record Identification Sequence","PhysiciansOfRecordIdentificationSequence","SQ",1, +"(0008,1050)","Performing Physician’s Name","PerformingPhysicianName","PN","1-n", +"(0008,1052)","Performing Physician Identification Sequence","PerformingPhysicianIdentificationSequence","SQ",1, +"(0008,1060)","Name of Physician(s) Reading Study","NameOfPhysiciansReadingStudy","PN","1-n", +"(0008,1062)","Physician(s) Reading Study Identification Sequence","PhysiciansReadingStudyIdentificationSequence","SQ",1, +"(0008,1070)","Operators’ Name","OperatorsName","PN","1-n", +"(0008,1072)","Operator Identification Sequence","OperatorIdentificationSequence","SQ",1, +"(0008,1080)","Admitting Diagnoses Description","AdmittingDiagnosesDescription","LO","1-n", +"(0008,1084)","Admitting Diagnoses Code Sequence","AdmittingDiagnosesCodeSequence","SQ",1, +"(0008,1090)","Manufacturer’s Model Name","ManufacturerModelName","LO",1, +"(0008,1100)","Referenced Results Sequence","ReferencedResultsSequence","SQ",1,"RET" +"(0008,1110)","Referenced Study Sequence","ReferencedStudySequence","SQ",1, +"(0008,1111)","Referenced Performed Procedure Step Sequence","ReferencedPerformedProcedureStepSequence","SQ",1, +"(0008,1115)","Referenced Series Sequence","ReferencedSeriesSequence","SQ",1, +"(0008,1120)","Referenced Patient Sequence","ReferencedPatientSequence","SQ",1, +"(0008,1125)","Referenced Visit Sequence","ReferencedVisitSequence","SQ",1, +"(0008,1130)","Referenced Overlay Sequence","ReferencedOverlaySequence","SQ",1,"RET" +"(0008,1134)","Referenced Stereometric Instance Sequence","ReferencedStereometricInstanceSequence","SQ",1, +"(0008,113A)","Referenced Waveform Sequence","ReferencedWaveformSequence","SQ",1, +"(0008,1140)","Referenced Image Sequence","ReferencedImageSequence","SQ",1, +"(0008,1145)","Referenced Curve Sequence","ReferencedCurveSequence","SQ",1,"RET" +"(0008,114A)","Referenced Instance Sequence","ReferencedInstanceSequence","SQ",1, +"(0008,114B)","Referenced Real World Value Mapping Instance Sequence","ReferencedRealWorldValueMappingInstanceSequence","SQ",1, +"(0008,1150)","Referenced SOP Class UID","ReferencedSOPClassUID","UI",1, +"(0008,1155)","Referenced SOP Instance UID","ReferencedSOPInstanceUID","UI",1, +"(0008,115A)","SOP Classes Supported","SOPClassesSupported","UI","1-n", +"(0008,1160)","Referenced Frame Number","ReferencedFrameNumber","IS","1-n", +"(0008,1161)","Simple Frame List","SimpleFrameList","UL","1-n", +"(0008,1162)","Calculated Frame List","CalculatedFrameList","UL","3-3n", +"(0008,1163)","Time Range","TimeRange","FD",2, +"(0008,1164)","Frame Extraction Sequence","FrameExtractionSequence","SQ",1, +"(0008,1167)","Multi-Frame Source SOP Instance UID ","MultiFrameSourceSOPInstanceUID","UI",1, +"(0008,1195)","Transaction UID","TransactionUID","UI",1, +"(0008,1197)","Failure Reason","FailureReason","US",1, +"(0008,1198)","Failed SOP Sequence","FailedSOPSequence","SQ",1, +"(0008,1199)","Referenced SOP Sequence","ReferencedSOPSequence","SQ",1, +"(0008,1200)","Studies Containing Other Referenced Instances Sequence","StudiesContainingOtherReferencedInstancesSequence","SQ",1, +"(0008,1250)","Related Series Sequence","RelatedSeriesSequence","SQ",1, +"(0008,2110)","Lossy Image Compression (Retired)","LossyImageCompressionRetired","CS",1,"RET" +"(0008,2111)","Derivation Description","DerivationDescription","ST",1, +"(0008,2112)","Source Image Sequence","SourceImageSequence","SQ",1, +"(0008,2120)","Stage Name","StageName","SH",1, +"(0008,2122)","Stage Number","StageNumber","IS",1, +"(0008,2124)","Number of Stages","NumberOfStages","IS",1, +"(0008,2127)","View Name","ViewName","SH",1, +"(0008,2128)","View Number","ViewNumber","IS",1, +"(0008,2129)","Number of Event Timers","NumberOfEventTimers","IS",1, +"(0008,212A)","Number of Views in Stage","NumberOfViewsInStage","IS",1, +"(0008,2130)","Event Elapsed Time(s)","EventElapsedTimes","DS","1-n", +"(0008,2132)","Event Timer Name(s)","EventTimerNames","LO","1-n", +"(0008,2133)","Event Timer Sequence","EventTimerSequence","SQ",1, +"(0008,2134)","Event Time Offset","EventTimeOffset","FD",1, +"(0008,2135)","Event Code Sequence","EventCodeSequence","SQ",1, +"(0008,2142)","Start Trim","StartTrim","IS",1, +"(0008,2143)","Stop Trim","StopTrim","IS",1, +"(0008,2144)","Recommended Display Frame Rate","RecommendedDisplayFrameRate","IS",1, +"(0008,2200)","Transducer Position","TransducerPosition","CS",1,"RET" +"(0008,2204)","Transducer Orientation","TransducerOrientation","CS",1,"RET" +"(0008,2208)","Anatomic Structure","AnatomicStructure","CS",1,"RET" +"(0008,2218)","Anatomic Region Sequence","AnatomicRegionSequence","SQ",1, +"(0008,2220)","Anatomic Region Modifier Sequence","AnatomicRegionModifierSequence","SQ",1, +"(0008,2228)","Primary Anatomic Structure Sequence","PrimaryAnatomicStructureSequence","SQ",1, +"(0008,2229)","Anatomic Structure, Space or Region Sequence","AnatomicStructureSpaceOrRegionSequence","SQ",1, +"(0008,2230)","Primary Anatomic Structure Modifier Sequence","PrimaryAnatomicStructureModifierSequence","SQ",1, +"(0008,2240)","Transducer Position Sequence","TransducerPositionSequence","SQ",1,"RET" +"(0008,2242)","Transducer Position Modifier Sequence","TransducerPositionModifierSequence","SQ",1,"RET" +"(0008,2244)","Transducer Orientation Sequence","TransducerOrientationSequence","SQ",1,"RET" +"(0008,2246)","Transducer Orientation Modifier Sequence","TransducerOrientationModifierSequence","SQ",1,"RET" +"(0008,2251)","Anatomic Structure Space Or Region Code Sequence (Trial)","AnatomicStructureSpaceOrRegionCodeSequenceTrial","SQ",1,"RET" +"(0008,2253)","Anatomic Portal Of Entrance Code Sequence (Trial)","AnatomicPortalOfEntranceCodeSequenceTrial","SQ",1,"RET" +"(0008,2255)","Anatomic Approach Direction Code Sequence (Trial)","AnatomicApproachDirectionCodeSequenceTrial","SQ",1,"RET" +"(0008,2256)","Anatomic Perspective Description (Trial)","AnatomicPerspectiveDescriptionTrial","ST",1,"RET" +"(0008,2257)","Anatomic Perspective Code Sequence (Trial)","AnatomicPerspectiveCodeSequenceTrial","SQ",1,"RET" +"(0008,2258)","Anatomic Location Of Examining Instrument Description (Trial)","AnatomicLocationOfExaminingInstrumentDescriptionTrial","ST",1,"RET" +"(0008,2259)","Anatomic Location Of Examining Instrument Code Sequence (Trial)","AnatomicLocationOfExaminingInstrumentCodeSequenceTrial","SQ",1,"RET" +"(0008,225A)","Anatomic Structure Space Or Region Modifier Code Sequence (Trial)","AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial","SQ",1,"RET" +"(0008,225C)","OnAxis Background Anatomic Structure Code Sequence (Trial)","OnAxisBackgroundAnatomicStructureCodeSequenceTrial","SQ",1,"RET" +"(0008,3001)","Alternate Representation Sequence","AlternateRepresentationSequence","SQ",1, +"(0008,3010)","Irradiation Event UID","IrradiationEventUID","UI",1, +"(0008,4000)","Identifying Comments","IdentifyingComments","LT",1,"RET" +"(0008,9007)","Frame Type","FrameType","CS",4, +"(0008,9092)","Referenced Image Evidence Sequence","ReferencedImageEvidenceSequence","SQ",1, +"(0008,9121)","Referenced Raw Data Sequence","ReferencedRawDataSequence","SQ",1, +"(0008,9123)","Creator-Version UID","CreatorVersionUID","UI",1, +"(0008,9124)","Derivation Image Sequence","DerivationImageSequence","SQ",1, +"(0008,9154)","Source Image Evidence Sequence","SourceImageEvidenceSequence","SQ",1, +"(0008,9205)","Pixel Presentation","PixelPresentation","CS",1, +"(0008,9206)","Volumetric Properties","VolumetricProperties","CS",1, +"(0008,9207)","Volume Based Calculation Technique","VolumeBasedCalculationTechnique","CS",1, +"(0008,9208)","Complex Image Component","ComplexImageComponent","CS",1, +"(0008,9209)","Acquisition Contrast","AcquisitionContrast","CS",1, +"(0008,9215)","Derivation Code Sequence","DerivationCodeSequence","SQ",1, +"(0008,9237)","Referenced Presentation State Sequence","ReferencedPresentationStateSequence","SQ",1, +"(0008,9410)","Referenced Other Plane Sequence","ReferencedOtherPlaneSequence","SQ",1, +"(0008,9458)","Frame Display Sequence","FrameDisplaySequence","SQ",1, +"(0008,9459)","Recommended Display Frame Rate in Float","RecommendedDisplayFrameRateInFloat","FL",1, +"(0008,9460)","Skip Frame Range Flag","SkipFrameRangeFlag","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0010,0010)","Patient’s Name","PatientName","PN",1, +"(0010,0020)","Patient ID","PatientID","LO",1, +"(0010,0021)","Issuer of Patient ID","IssuerOfPatientID","LO",1, +"(0010,0022)","Type of Patient ID","TypeOfPatientID","CS",1, +"(0010,0024)","Issuer of Patient ID Qualifiers Sequence","IssuerOfPatientIDQualifiersSequence","SQ",1, +"(0010,0030)","Patient’s Birth Date","PatientBirthDate","DA",1, +"(0010,0032)","Patient’s Birth Time","PatientBirthTime","TM",1, +"(0010,0040)","Patient’s Sex","PatientSex","CS",1, +"(0010,0050)","Patient’s Insurance Plan Code Sequence","PatientInsurancePlanCodeSequence","SQ",1, +"(0010,0101)","Patient’s Primary Language Code Sequence","PatientPrimaryLanguageCodeSequence","SQ",1, +"(0010,0102)","Patient’s Primary Language Modifier Code Sequence","PatientPrimaryLanguageModifierCodeSequence","SQ",1, +"(0010,1000)","Other Patient IDs","OtherPatientIDs","LO","1-n", +"(0010,1001)","Other Patient Names","OtherPatientNames","PN","1-n", +"(0010,1002)","Other Patient IDs Sequence","OtherPatientIDsSequence","SQ",1, +"(0010,1005)","Patient’s Birth Name","PatientBirthName","PN",1, +"(0010,1010)","Patient’s Age","PatientAge","AS",1, +"(0010,1020)","Patient’s Size","PatientSize","DS",1, +"(0010,1021)","Patient’Size Code Sequence","PatientSizeCodeSequence","SQ",1, +"(0010,1030)","Patient’s Weight","PatientWeight","DS",1, +"(0010,1040)","Patient’s Address","PatientAddress","LO",1, +"(0010,1050)","Insurance Plan Identification","InsurancePlanIdentification","LO","1-n","RET" +"(0010,1060)","Patient’s Mother’s Birth Name","PatientMotherBirthName","PN",1, +"(0010,1080)","Military Rank","MilitaryRank","LO",1, +"(0010,1081)","Branch of Service","BranchOfService","LO",1, +"(0010,1090)","Medical Record Locator","MedicalRecordLocator","LO",1, +"(0010,2000)","Medical Alerts","MedicalAlerts","LO","1-n", +"(0010,2110)","Allergies","Allergies","LO","1-n", +"(0010,2150)","Country of Residence","CountryOfResidence","LO",1, +"(0010,2152)","Region of Residence","RegionOfResidence","LO",1, +"(0010,2154)","Patient’s Telephone Numbers","PatientTelephoneNumbers","SH","1-n", +"(0010,2160)","Ethnic Group","EthnicGroup","SH",1, +"(0010,2180)","Occupation","Occupation","SH",1, +"(0010,21A0)","Smoking Status","SmokingStatus","CS",1, +"(0010,21B0)","Additional Patient History","AdditionalPatientHistory","LT",1, +"(0010,21C0)","Pregnancy Status","PregnancyStatus","US",1, +"(0010,21D0)","Last Menstrual Date","LastMenstrualDate","DA",1, +"(0010,21F0)","Patient’s Religious Preference","PatientReligiousPreference","LO",1, +"(0010,2201)","Patient Species Description","PatientSpeciesDescription","LO",1, +"(0010,2202)","Patient Species Code Sequence","PatientSpeciesCodeSequence","SQ",1, +"(0010,2203)","Patient’s Sex Neutered","PatientSexNeutered","CS",1, +"(0010,2210)","Anatomical Orientation Type","AnatomicalOrientationType","CS",1, +"(0010,2292)","Patient Breed Description","PatientBreedDescription","LO",1, +"(0010,2293)","Patient Breed Code Sequence","PatientBreedCodeSequence","SQ",1, +"(0010,2294)","Breed Registration Sequence","BreedRegistrationSequence","SQ",1, +"(0010,2295)","Breed Registration Number","BreedRegistrationNumber","LO",1, +"(0010,2296)","Breed Registry Code Sequence","BreedRegistryCodeSequence","SQ",1, +"(0010,2297)","Responsible Person","ResponsiblePerson","PN",1, +"(0010,2298)","Responsible Person Role","ResponsiblePersonRole","CS",1, +"(0010,2299)","Responsible Organization","ResponsibleOrganization","LO",1, +"(0010,4000)","Patient Comments","PatientComments","LT",1, +"(0010,9431)","Examined Body Thickness","ExaminedBodyThickness","FL",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0012,0010)","Clinical Trial Sponsor Name","ClinicalTrialSponsorName","LO",1, +"(0012,0020)","Clinical Trial Protocol ID","ClinicalTrialProtocolID","LO",1, +"(0012,0021)","Clinical Trial Protocol Name","ClinicalTrialProtocolName","LO",1, +"(0012,0030)","Clinical Trial Site ID","ClinicalTrialSiteID","LO",1, +"(0012,0031)","Clinical Trial Site Name","ClinicalTrialSiteName","LO",1, +"(0012,0040)","Clinical Trial Subject ID","ClinicalTrialSubjectID","LO",1, +"(0012,0042)","Clinical Trial Subject Reading ID","ClinicalTrialSubjectReadingID","LO",1, +"(0012,0050)","Clinical Trial Time Point ID","ClinicalTrialTimePointID","LO",1, +"(0012,0051)","Clinical Trial Time Point Description","ClinicalTrialTimePointDescription","ST",1, +"(0012,0060)","Clinical Trial Coordinating Center Name","ClinicalTrialCoordinatingCenterName","LO",1, +"(0012,0062)","Patient Identity Removed","PatientIdentityRemoved","CS",1, +"(0012,0063)","De-identification Method","DeidentificationMethod","LO","1-n", +"(0012,0064)","De-identification Method Code Sequence","DeidentificationMethodCodeSequence","SQ",1, +"(0012,0071)","Clinical Trial Series ID","ClinicalTrialSeriesID","LO",1, +"(0012,0072)","Clinical Trial Series Description","ClinicalTrialSeriesDescription","LO",1, +"(0012,0081)","Clinical Trial Protocol Ethics Committee Name","ClinicalTrialProtocolEthicsCommitteeName","LO",1, +"(0012,0082)","Clinical Trial Protocol Ethics Committee Approval Number","ClinicalTrialProtocolEthicsCommitteeApprovalNumber","LO",1, +"(0012,0083)","Consent for Clinical Trial Use Sequence","ConsentForClinicalTrialUseSequence","SQ",1, +"(0012,0084)","Distribution Type","DistributionType","CS",1, +"(0012,0085)","Consent for Distribution Flag","ConsentForDistributionFlag","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0014,0023)","CAD File Format","CADFileFormat","ST","1-n", +"(0014,0024)","Component Reference System","ComponentReferenceSystem","ST","1-n", +"(0014,0025)","Component Manufacturing Procedure","ComponentManufacturingProcedure","ST","1-n", +"(0014,0028)","Component Manufacturer","ComponentManufacturer","ST","1-n", +"(0014,0030)","Material Thickness","MaterialThickness","DS","1-n", +"(0014,0032)","Material Pipe Diameter","MaterialPipeDiameter","DS","1-n", +"(0014,0034)","Material Isolation Diameter","MaterialIsolationDiameter","DS","1-n", +"(0014,0042)","Material Grade","MaterialGrade","ST","1-n", +"(0014,0044)","Material Properties File ID","MaterialPropertiesFileID","ST","1-n", +"(0014,0045)","Material Properties File Format","MaterialPropertiesFileFormat","ST","1-n", +"(0014,0046)","Material Notes","MaterialNotes","LT",1, +"(0014,0050)","Component Shape","ComponentShape","CS",1, +"(0014,0052)","Curvature Type","CurvatureType","CS",1, +"(0014,0054)","Outer Diameter","OuterDiameter","DS",1, +"(0014,0056)","Inner Diameter","InnerDiameter","DS",1, +"(0014,1010)","Actual Environmental Conditions","ActualEnvironmentalConditions","ST",1, +"(0014,1020)","Expiry Date","ExpiryDate","DA",1, +"(0014,1040)","Environmental Conditions","EnvironmentalConditions","ST",1, +"(0014,2002) ","Evaluator Sequence","EvaluatorSequence","SQ",1, +"(0014,2004)","Evaluator Number","EvaluatorNumber","IS",1, +"(0014,2006)","Evaluator Name","EvaluatorName","PN",1, +"(0014,2008)","Evaluation Attempt","EvaluationAttempt","IS",1, +"(0014,2012)","Indication Sequence","IndicationSequence","SQ",1, +"(0014,2014) ","Indication Number ","IndicationNumber ","IS",1, +"(0014,2016)","Indication Label","IndicationLabel","SH",1, +"(0014,2018)","Indication Description","IndicationDescription","ST",1, +"(0014,201A)","Indication Type","IndicationType","CS","1-n", +"(0014,201C)","Indication Disposition","IndicationDisposition","CS",1, +"(0014,201E)","Indication ROI Sequence","IndicationROISequence","SQ",1, +"(0014,2030)","Indication Physical Property Sequence","IndicationPhysicalPropertySequence","SQ",1, +"(0014,2032)","Property Label","PropertyLabel","SH",1, +"(0014,2202)","Coordinate System Number of Axes ","CoordinateSystemNumberOfAxes ","IS",1, +"(0014,2204)","Coordinate System Axes Sequence","CoordinateSystemAxesSequence","SQ",1, +"(0014,2206)","Coordinate System Axis Description","CoordinateSystemAxisDescription","ST",1, +"(0014,2208)","Coordinate System Data Set Mapping","CoordinateSystemDataSetMapping","CS",1, +"(0014,220A)","Coordinate System Axis Number","CoordinateSystemAxisNumber","IS",1, +"(0014,220C)","Coordinate System Axis Type","CoordinateSystemAxisType","CS",1, +"(0014,220E)","Coordinate System Axis Units","CoordinateSystemAxisUnits","CS",1, +"(0014,2210)","Coordinate System Axis Values","CoordinateSystemAxisValues","OB",1, +"(0014,2220)","Coordinate System Transform Sequence","CoordinateSystemTransformSequence","SQ",1, +"(0014,2222)","Transform Description","TransformDescription","ST",1, +"(0014,2224)","Transform Number of Axes","TransformNumberOfAxes","IS",1, +"(0014,2226)","Transform Order of Axes","TransformOrderOfAxes","IS","1-n", +"(0014,2228)","Transformed Axis Units","TransformedAxisUnits","CS",1, +"(0014,222A)","Coordinate System Transform Rotation and Scale Matrix","CoordinateSystemTransformRotationAndScaleMatrix","DS","1-n", +"(0014,222C)","Coordinate System Transform Translation Matrix","CoordinateSystemTransformTranslationMatrix","DS","1-n", +"(0014,3011)","Internal Detector Frame Time","InternalDetectorFrameTime","DS",1, +"(0014,3012)","Number of Frames Integrated","NumberOfFramesIntegrated","DS",1, +"(0014,3020)","Detector Temperature Sequence","DetectorTemperatureSequence","SQ",1, +"(0014,3022)","Sensor Name","SensorName","DS",1, +"(0014,3024)","Horizontal Offset of Sensor","HorizontalOffsetOfSensor","DS",1, +"(0014,3026)","Vertical Offset of Sensor","VerticalOffsetOfSensor","DS",1, +"(0014,3028)","Sensor Temperature","SensorTemperature","DS",1, +"(0014,3040)","Dark Current Sequence","DarkCurrentSequence","SQ",1, +"(0014,3050)","Dark Current Counts","DarkCurrentCounts","OB or OW",1, +"(0014,3060)","Gain Correction Reference Sequence","GainCorrectionReferenceSequence","SQ",1, +"(0014,3070)","Air Counts","AirCounts","OB or OW",1, +"(0014,3071)","KV Used in Gain Calibration","KVUsedInGainCalibration","DS",1, +"(0014,3072)","MA Used in Gain Calibration","MAUsedInGainCalibration","DS",1, +"(0014,3073)","Number of Frames Used for Integration","NumberOfFramesUsedForIntegration","DS",1, +"(0014,3074)","Filter Material Used in Gain Calibration","FilterMaterialUsedInGainCalibration","LO",1, +"(0014,3075)","Filter Thickness Used in Gain Calibration","FilterThicknessUsedInGainCalibration","DS",1, +"(0014,3076)","Date of Gain Calibration","DateOfGainCalibration","DA",1, +"(0014,3077)","Time of Gain Calibration","TimeOfGainCalibration","TM",1, +"(0014,3080)","Bad Pixel Image","BadPixelImage","OB",1, +"(0014,3099)","Calibration Notes","CalibrationNotes","LT",1, +"(0014,4002)","Pulser Equipment Sequence","PulserEquipmentSequence","SQ",1, +"(0014,4004)","Pulser Type","PulserType","CS",1, +"(0014,4006)","Pulser Notes","PulserNotes","LT",1, +"(0014,4008)","Receiver Equipment Sequence","ReceiverEquipmentSequence","SQ",1, +"(0014,400A)","Amplifier Type","AmplifierType","CS",1, +"(0014,400C)","Receiver Notes","ReceiverNotes","LT",1, +"(0014,400E)","Pre-Amplifier Equipment Sequence","PreAmplifierEquipmentSequence","SQ",1, +"(0014,400F)","Pre-Amplifier Notes","PreAmplifierNotes","LT",1, +"(0014,4010)","Transmit Transducer Sequence","TransmitTransducerSequence","SQ",1, +"(0014,4011)","Receive Transducer Sequence","ReceiveTransducerSequence","SQ",1, +"(0014,4012)","Number of Elements","NumberOfElements","US",1, +"(0014,4013)","Element Shape","ElementShape","CS",1, +"(0014,4014)","Element Dimension A","ElementDimensionA","DS",1, +"(0014,4015)","Element Dimension B","ElementDimensionB","DS",1, +"(0014,4016)","Element Pitch","ElementPitch","DS",1, +"(0014,4017)","Measured Beam Dimension A","MeasuredBeamDimensionA","DS",1, +"(0014,4018)","Measured Beam Dimension B","MeasuredBeamDimensionB","DS",1, +"(0014,4019)","Location of Measured Beam Diameter","LocationOfMeasuredBeamDiameter","DS",1, +"(0014,401A)","Nominal Frequency","NominalFrequency","DS",1, +"(0014,401B)","Measured Center Frequency","MeasuredCenterFrequency","DS",1, +"(0014,401C)","Measured Bandwidth","MeasuredBandwidth","DS",1, +"(0014,4020)","Pulser Settings Sequence","PulserSettingsSequence","SQ",1, +"(0014,4022)","Pulse Width","PulseWidth","DS",1, +"(0014,4024)","Excitation Frequency","ExcitationFrequency","DS",1, +"(0014,4026)","Modulation Type","ModulationType","CS",1, +"(0014,4028)","Damping","Damping","DS",1, +"(0014,4030)","Receiver Settings Sequence","ReceiverSettingsSequence","SQ",1, +"(0014,4031)","Acquired Soundpath Length","AcquiredSoundpathLength","DS",1, +"(0014,4032)","Acquisition Compression Type","AcquisitionCompressionType","CS",1, +"(0014,4033)","Acquisition Sample Size","AcquisitionSampleSize","IS",1, +"(0014,4034)","Rectifier Smoothing","RectifierSmoothing","DS",1, +"(0014,4035)","DAC Sequence","DACSequence","SQ",1, +"(0014,4036)","DAC Type","DACType","CS",1, +"(0014,4038)","DAC Gain Points","DACGainPoints","DS","1-n", +"(0014,403A)","DAC Time Points","DACTimePoints","DS","1-n", +"(0014,403C)","DAC Amplitude","DACAmplitude","DS","1-n", +"(0014,4040)","Pre-Amplifier Settings Sequence","PreAmplifierSettingsSequence","SQ",1, +"(0014,4050)","Transmit Transducer Settings Sequence","TransmitTransducerSettingsSequence","SQ",1, +"(0014,4051)","Receive Transducer Settings Sequence","ReceiveTransducerSettingsSequence","SQ",1, +"(0014,4052)","Incident Angle","IncidentAngle","DS",1, +"(0014,4054)","Coupling Technique","CouplingTechnique","ST",1, +"(0014,4056)","Coupling Medium","CouplingMedium","ST",1, +"(0014,4057)","Coupling Velocity","CouplingVelocity","DS",1, +"(0014,4058)","Crystal Center Location X","CrystalCenterLocationX","DS",1, +"(0014,4059)","Crystal Center Location Z","CrystalCenterLocationZ","DS",1, +"(0014,405A)","Sound Path Length","SoundPathLength","DS",1, +"(0014,405C)","Delay Law Identifier","DelayLawIdentifier","ST",1, +"(0014,4060)","Gate Settings Sequence","GateSettingsSequence","SQ",1, +"(0014,4062)","Gate Threshold","GateThreshold","DS",1, +"(0014,4064)","Velocity of Sound","VelocityOfSound","DS",1, +"(0014,4070)","Calibration Settings Sequence","CalibrationSettingsSequence","SQ",1, +"(0014,4072)","Calibration Procedure","CalibrationProcedure","ST",1, +"(0014,4074)","Procedure Version","ProcedureVersion","SH",1, +"(0014,4076)","Procedure Creation Date","ProcedureCreationDate","DA",1, +"(0014,4078)","Procedure Expiration Date","ProcedureExpirationDate","DA",1, +"(0014,407A)","Procedure Last Modified Date","ProcedureLastModifiedDate","DA",1, +"(0014,407C)","Calibration Time","CalibrationTime","TM","1-n", +"(0014,407E)","Calibration Date","CalibrationDate","DA","1-n", +"(0014,5002)","LINAC Energy","LINACEnergy","IS",1, +"(0014,5004)","LINAC Output","LINACOutput","IS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0018,0010)","Contrast/Bolus Agent","ContrastBolusAgent","LO",1, +"(0018,0012)","Contrast/Bolus Agent Sequence","ContrastBolusAgentSequence","SQ",1, +"(0018,0014)","Contrast/Bolus Administration Route Sequence","ContrastBolusAdministrationRouteSequence","SQ",1, +"(0018,0015)","Body Part Examined","BodyPartExamined","CS",1, +"(0018,0020)","Scanning Sequence","ScanningSequence","CS","1-n", +"(0018,0021)","Sequence Variant","SequenceVariant","CS","1-n", +"(0018,0022)","Scan Options","ScanOptions","CS","1-n", +"(0018,0023)","MR Acquisition Type","MRAcquisitionType","CS",1, +"(0018,0024)","Sequence Name","SequenceName","SH",1, +"(0018,0025)","Angio Flag","AngioFlag","CS",1, +"(0018,0026)","Intervention Drug Information Sequence","InterventionDrugInformationSequence","SQ",1, +"(0018,0027)","Intervention Drug Stop Time","InterventionDrugStopTime","TM",1, +"(0018,0028)","Intervention Drug Dose","InterventionDrugDose","DS",1, +"(0018,0029)","Intervention Drug Code Sequence","InterventionDrugCodeSequence","SQ",1, +"(0018,002A)","Additional Drug Sequence","AdditionalDrugSequence","SQ",1, +"(0018,0030)","Radionuclide","Radionuclide","LO","1-n","RET" +"(0018,0031)","Radiopharmaceutical","Radiopharmaceutical","LO",1, +"(0018,0032)","Energy Window Centerline","EnergyWindowCenterline","DS",1,"RET" +"(0018,0033)","Energy Window Total Width","EnergyWindowTotalWidth","DS","1-n","RET" +"(0018,0034)","Intervention Drug Name","InterventionDrugName","LO",1, +"(0018,0035)","Intervention Drug Start Time","InterventionDrugStartTime","TM",1, +"(0018,0036)","Intervention Sequence","InterventionSequence","SQ",1, +"(0018,0037)","Therapy Type","TherapyType","CS",1,"RET" +"(0018,0038)","Intervention Status","InterventionStatus","CS",1, +"(0018,0039)","Therapy Description","TherapyDescription","CS",1,"RET" +"(0018,003A)","Intervention Description","InterventionDescription","ST",1, +"(0018,0040)","Cine Rate ","CineRate","IS",1, +"(0018,0042)","Initial Cine Run State","InitialCineRunState","CS",1, +"(0018,0050)","Slice Thickness","SliceThickness","DS",1, +"(0018,0060)","KVP","KVP","DS",1, +"(0018,0070)","Counts Accumulated","CountsAccumulated","IS",1, +"(0018,0071)","Acquisition Termination Condition","AcquisitionTerminationCondition","CS",1, +"(0018,0072)","Effective Duration","EffectiveDuration","DS",1, +"(0018,0073)","Acquisition Start Condition","AcquisitionStartCondition","CS",1, +"(0018,0074)","Acquisition Start Condition Data","AcquisitionStartConditionData","IS",1, +"(0018,0075)","Acquisition Termination Condition Data","AcquisitionTerminationConditionData","IS",1, +"(0018,0080)","Repetition Time","RepetitionTime","DS",1, +"(0018,0081)","Echo Time","EchoTime","DS",1, +"(0018,0082)","Inversion Time","InversionTime","DS",1, +"(0018,0083)","Number of Averages","NumberOfAverages","DS",1, +"(0018,0084)","Imaging Frequency","ImagingFrequency","DS",1, +"(0018,0085)","Imaged Nucleus","ImagedNucleus","SH",1, +"(0018,0086)","Echo Number(s)","EchoNumbers","IS","1-n", +"(0018,0087)","Magnetic Field Strength","MagneticFieldStrength","DS",1, +"(0018,0088)","Spacing Between Slices","SpacingBetweenSlices","DS",1, +"(0018,0089)","Number of Phase Encoding Steps","NumberOfPhaseEncodingSteps","IS",1, +"(0018,0090)","Data Collection Diameter","DataCollectionDiameter","DS",1, +"(0018,0091)","Echo Train Length","EchoTrainLength","IS",1, +"(0018,0093)","Percent Sampling","PercentSampling","DS",1, +"(0018,0094)","Percent Phase Field of View","PercentPhaseFieldOfView","DS",1, +"(0018,0095)","Pixel Bandwidth","PixelBandwidth","DS",1, +"(0018,1000)","Device Serial Number","DeviceSerialNumber","LO",1, +"(0018,1002)","Device UID","DeviceUID","UI",1, +"(0018,1003)","Device ID","DeviceID","LO",1, +"(0018,1004)","Plate ID","PlateID","LO",1, +"(0018,1005)","Generator ID","GeneratorID","LO",1, +"(0018,1006)","Grid ID","GridID","LO",1, +"(0018,1007)","Cassette ID","CassetteID","LO",1, +"(0018,1008)","Gantry ID","GantryID","LO",1, +"(0018,1010)","Secondary Capture Device ID","SecondaryCaptureDeviceID","LO",1, +"(0018,1011)","Hardcopy Creation Device ID","HardcopyCreationDeviceID","LO",1,"RET" +"(0018,1012)","Date of Secondary Capture","DateOfSecondaryCapture","DA",1, +"(0018,1014)","Time of Secondary Capture","TimeOfSecondaryCapture","TM",1, +"(0018,1016)","Secondary Capture Device Manufacturer","SecondaryCaptureDeviceManufacturer","LO",1, +"(0018,1017)","Hardcopy Device Manufacturer","HardcopyDeviceManufacturer","LO",1,"RET" +"(0018,1018)","Secondary Capture Device Manufacturer’s Model Name","SecondaryCaptureDeviceManufacturerModelName","LO",1, +"(0018,1019)","Secondary Capture Device Software Versions","SecondaryCaptureDeviceSoftwareVersions","LO","1-n", +"(0018,101A)","Hardcopy Device Software Version","HardcopyDeviceSoftwareVersion","LO","1-n","RET" +"(0018,101B)","Hardcopy Device Manufacturer’s Model Name","HardcopyDeviceManufacturerModelName","LO",1,"RET" +"(0018,1020)","Software Version(s)","SoftwareVersions","LO","1-n", +"(0018,1022)","Video Image Format Acquired","VideoImageFormatAcquired","SH",1, +"(0018,1023)","Digital Image Format Acquired","DigitalImageFormatAcquired","LO",1, +"(0018,1030)","Protocol Name","ProtocolName","LO",1, +"(0018,1040)","Contrast/Bolus Route","ContrastBolusRoute","LO",1, +"(0018,1041)","Contrast/Bolus Volume","ContrastBolusVolume","DS",1, +"(0018,1042)","Contrast/Bolus Start Time ","ContrastBolusStartTime","TM",1, +"(0018,1043)","Contrast/Bolus Stop Time ","ContrastBolusStopTime","TM",1, +"(0018,1044)","Contrast/Bolus Total Dose","ContrastBolusTotalDose","DS",1, +"(0018,1045)","Syringe Counts","SyringeCounts","IS",1, +"(0018,1046)","Contrast Flow Rate","ContrastFlowRate","DS","1-n", +"(0018,1047)","Contrast Flow Duration","ContrastFlowDuration","DS","1-n", +"(0018,1048)","Contrast/Bolus Ingredient","ContrastBolusIngredient","CS",1, +"(0018,1049)","Contrast/Bolus Ingredient Concentration","ContrastBolusIngredientConcentration","DS",1, +"(0018,1050)","Spatial Resolution","SpatialResolution","DS",1, +"(0018,1060)","Trigger Time","TriggerTime","DS",1, +"(0018,1061)","Trigger Source or Type","TriggerSourceOrType","LO",1, +"(0018,1062)","Nominal Interval","NominalInterval","IS",1, +"(0018,1063)","Frame Time","FrameTime","DS",1, +"(0018,1064)","Cardiac Framing Type","CardiacFramingType","LO",1, +"(0018,1065)","Frame Time Vector","FrameTimeVector","DS","1-n", +"(0018,1066)","Frame Delay","FrameDelay","DS",1, +"(0018,1067)","Image Trigger Delay","ImageTriggerDelay","DS",1, +"(0018,1068)","Multiplex Group Time Offset","MultiplexGroupTimeOffset","DS",1, +"(0018,1069)","Trigger Time Offset","TriggerTimeOffset","DS",1, +"(0018,106A)","Synchronization Trigger","SynchronizationTrigger","CS",1, +"(0018,106C)","Synchronization Channel","SynchronizationChannel","US",2, +"(0018,106E)","Trigger Sample Position","TriggerSamplePosition","UL",1, +"(0018,1070)","Radiopharmaceutical Route","RadiopharmaceuticalRoute","LO",1, +"(0018,1071)","Radiopharmaceutical Volume","RadiopharmaceuticalVolume","DS",1, +"(0018,1072)","Radiopharmaceutical Start Time","RadiopharmaceuticalStartTime","TM",1, +"(0018,1073)","Radiopharmaceutical Stop Time","RadiopharmaceuticalStopTime","TM",1, +"(0018,1074)","Radionuclide Total Dose","RadionuclideTotalDose","DS",1, +"(0018,1075)","Radionuclide Half Life","RadionuclideHalfLife","DS",1, +"(0018,1076)","Radionuclide Positron Fraction","RadionuclidePositronFraction","DS",1, +"(0018,1077)","Radiopharmaceutical Specific Activity","RadiopharmaceuticalSpecificActivity","DS",1, +"(0018,1078)","Radiopharmaceutical Start DateTime","RadiopharmaceuticalStartDateTime","DT",1, +"(0018,1079)","Radiopharmaceutical Stop DateTime","RadiopharmaceuticalStopDateTime","DT",1, +"(0018,1080)","Beat Rejection Flag","BeatRejectionFlag","CS",1, +"(0018,1081)","Low R-R Value","LowRRValue","IS",1, +"(0018,1082)","High R-R Value","HighRRValue","IS",1, +"(0018,1083)","Intervals Acquired","IntervalsAcquired","IS",1, +"(0018,1084)","Intervals Rejected","IntervalsRejected","IS",1, +"(0018,1085)","PVC Rejection","PVCRejection","LO",1, +"(0018,1086)","Skip Beats","SkipBeats","IS",1, +"(0018,1088)","Heart Rate","HeartRate","IS",1, +"(0018,1090)","Cardiac Number of Images","CardiacNumberOfImages","IS",1, +"(0018,1094)","Trigger Window","TriggerWindow","IS",1, +"(0018,1100)","Reconstruction Diameter","ReconstructionDiameter","DS",1, +"(0018,1110)","Distance Source to Detector","DistanceSourceToDetector","DS",1, +"(0018,1111)","Distance Source to Patient","DistanceSourceToPatient","DS",1, +"(0018,1114)","Estimated Radiographic Magnification Factor","EstimatedRadiographicMagnificationFactor","DS",1, +"(0018,1120)","Gantry/Detector Tilt","GantryDetectorTilt","DS",1, +"(0018,1121)","Gantry/Detector Slew","GantryDetectorSlew","DS",1, +"(0018,1130)","Table Height","TableHeight","DS",1, +"(0018,1131)","Table Traverse","TableTraverse","DS",1, +"(0018,1134)","Table Motion","TableMotion","CS",1, +"(0018,1135)","Table Vertical Increment","TableVerticalIncrement","DS","1-n", +"(0018,1136)","Table Lateral Increment","TableLateralIncrement","DS","1-n", +"(0018,1137)","Table Longitudinal Increment","TableLongitudinalIncrement","DS","1-n", +"(0018,1138)","Table Angle","TableAngle","DS",1, +"(0018,113A)","Table Type","TableType","CS",1, +"(0018,1140)","Rotation Direction","RotationDirection","CS",1, +"(0018,1141)","Angular Position","AngularPosition","DS",1,"RET" +"(0018,1142)","Radial Position","RadialPosition","DS","1-n", +"(0018,1143)","Scan Arc","ScanArc","DS",1, +"(0018,1144)","Angular Step","AngularStep","DS",1, +"(0018,1145)","Center of Rotation Offset","CenterOfRotationOffset","DS",1, +"(0018,1146)","Rotation Offset","RotationOffset","DS","1-n","RET" +"(0018,1147)","Field of View Shape","FieldOfViewShape","CS",1, +"(0018,1149)","Field of View Dimension(s)","FieldOfViewDimensions","IS","1-2", +"(0018,1150)","Exposure Time","ExposureTime","IS",1, +"(0018,1151)","X-Ray Tube Current","XRayTubeCurrent","IS",1, +"(0018,1152)","Exposure ","Exposure","IS",1, +"(0018,1153)","Exposure in µAs","ExposureInuAs","IS",1, +"(0018,1154)","Average Pulse Width","AveragePulseWidth","DS",1, +"(0018,1155)","Radiation Setting","RadiationSetting","CS",1, +"(0018,1156) ","Rectification Type","RectificationType","CS",1, +"(0018,115A)","Radiation Mode","RadiationMode","CS",1, +"(0018,115E)","Image and Fluoroscopy Area Dose Product","ImageAndFluoroscopyAreaDoseProduct","DS",1, +"(0018,1160)","Filter Type","FilterType","SH",1, +"(0018,1161)","Type of Filters","TypeOfFilters","LO","1-n", +"(0018,1162)","Intensifier Size","IntensifierSize","DS",1, +"(0018,1164)","Imager Pixel Spacing","ImagerPixelSpacing","DS",2, +"(0018,1166)","Grid","Grid","CS","1-n", +"(0018,1170)","Generator Power","GeneratorPower","IS",1, +"(0018,1180)","Collimator/grid Name ","CollimatorGridName","SH",1, +"(0018,1181)","Collimator Type","CollimatorType","CS",1, +"(0018,1182)","Focal Distance","FocalDistance","IS","1-2", +"(0018,1183)","X Focus Center","XFocusCenter","DS","1-2", +"(0018,1184)","Y Focus Center","YFocusCenter","DS","1-2", +"(0018,1190)","Focal Spot(s)","FocalSpots","DS","1-n", +"(0018,1191)","Anode Target Material","AnodeTargetMaterial","CS",1, +"(0018,11A0)","Body Part Thickness","BodyPartThickness","DS",1, +"(0018,11A2)","Compression Force","CompressionForce","DS",1, +"(0018,1200)","Date of Last Calibration","DateOfLastCalibration","DA","1-n", +"(0018,1201)","Time of Last Calibration","TimeOfLastCalibration","TM","1-n", +"(0018,1210)","Convolution Kernel","ConvolutionKernel","SH","1-n", +"(0018,1240)","Upper/Lower Pixel Values","UpperLowerPixelValues","IS","1-n","RET" +"(0018,1242)","Actual Frame Duration","ActualFrameDuration","IS",1, +"(0018,1243)","Count Rate","CountRate","IS",1, +"(0018,1244)","Preferred Playback Sequencing","PreferredPlaybackSequencing","US",1, +"(0018,1250)","Receive Coil Name","ReceiveCoilName","SH",1, +"(0018,1251)","Transmit Coil Name","TransmitCoilName","SH",1, +"(0018,1260)","Plate Type","PlateType","SH",1, +"(0018,1261)","Phosphor Type","PhosphorType","LO",1, +"(0018,1300)","Scan Velocity","ScanVelocity","DS",1, +"(0018,1301)","Whole Body Technique","WholeBodyTechnique","CS","1-n", +"(0018,1302)","Scan Length","ScanLength","IS",1, +"(0018,1310)","Acquisition Matrix","AcquisitionMatrix","US",4, +"(0018,1312)","In-plane Phase Encoding Direction","InPlanePhaseEncodingDirection","CS",1, +"(0018,1314)","Flip Angle","FlipAngle","DS",1, +"(0018,1315)","Variable Flip Angle Flag","VariableFlipAngleFlag","CS",1, +"(0018,1316)","SAR","SAR","DS",1, +"(0018,1318)","dB/dt","dBdt","DS",1, +"(0018,1400)","Acquisition Device Processing Description ","AcquisitionDeviceProcessingDescription","LO",1, +"(0018,1401)","Acquisition Device Processing Code","AcquisitionDeviceProcessingCode","LO",1, +"(0018,1402)","Cassette Orientation","CassetteOrientation","CS",1, +"(0018,1403)","Cassette Size","CassetteSize","CS",1, +"(0018,1404)","Exposures on Plate","ExposuresOnPlate","US",1, +"(0018,1405)","Relative X-Ray Exposure","RelativeXRayExposure","IS",1, +"(0018,1411)","Exposure Index","ExposureIndex","DS",1, +"(0018,1412)","Target Exposure Index","TargetExposureIndex","DS",1, +"(0018,1413)","Deviation Index","DeviationIndex","DS",1, +"(0018,1450)","Column Angulation","ColumnAngulation","DS",1, +"(0018,1460)","Tomo Layer Height","TomoLayerHeight","DS",1, +"(0018,1470)","Tomo Angle","TomoAngle","DS",1, +"(0018,1480)","Tomo Time","TomoTime","DS",1, +"(0018,1490)","Tomo Type","TomoType","CS",1, +"(0018,1491)","Tomo Class","TomoClass","CS",1, +"(0018,1495)","Number of Tomosynthesis Source Images","NumberOfTomosynthesisSourceImages","IS",1, +"(0018,1500)","Positioner Motion","PositionerMotion","CS",1, +"(0018,1508)","Positioner Type","PositionerType","CS",1, +"(0018,1510)","Positioner Primary Angle","PositionerPrimaryAngle","DS",1, +"(0018,1511)","Positioner Secondary Angle","PositionerSecondaryAngle","DS",1, +"(0018,1520)","Positioner Primary Angle Increment","PositionerPrimaryAngleIncrement","DS","1-n", +"(0018,1521)","Positioner Secondary Angle Increment","PositionerSecondaryAngleIncrement","DS","1-n", +"(0018,1530)","Detector Primary Angle","DetectorPrimaryAngle","DS",1, +"(0018,1531)","Detector Secondary Angle","DetectorSecondaryAngle","DS",1, +"(0018,1600)","Shutter Shape","ShutterShape","CS","1-3", +"(0018,1602)","Shutter Left Vertical Edge","ShutterLeftVerticalEdge","IS",1, +"(0018,1604)","Shutter Right Vertical Edge","ShutterRightVerticalEdge","IS",1, +"(0018,1606)","Shutter Upper Horizontal Edge","ShutterUpperHorizontalEdge","IS",1, +"(0018,1608)","Shutter Lower Horizontal Edge","ShutterLowerHorizontalEdge","IS",1, +"(0018,1610)","Center of Circular Shutter","CenterOfCircularShutter","IS",2, +"(0018,1612)","Radius of Circular Shutter","RadiusOfCircularShutter","IS",1, +"(0018,1620)","Vertices of the Polygonal Shutter","VerticesOfThePolygonalShutter","IS","2-2n", +"(0018,1622)","Shutter Presentation Value","ShutterPresentationValue","US",1, +"(0018,1623)","Shutter Overlay Group","ShutterOverlayGroup","US",1, +"(0018,1624)","Shutter Presentation Color CIELab Value","ShutterPresentationColorCIELabValue","US",3, +"(0018,1700)","Collimator Shape","CollimatorShape","CS","1-3", +"(0018,1702)","Collimator Left Vertical Edge","CollimatorLeftVerticalEdge","IS",1, +"(0018,1704)","Collimator Right Vertical Edge","CollimatorRightVerticalEdge","IS",1, +"(0018,1706)","Collimator Upper Horizontal Edge","CollimatorUpperHorizontalEdge","IS",1, +"(0018,1708)","Collimator Lower Horizontal Edge","CollimatorLowerHorizontalEdge","IS",1, +"(0018,1710)","Center of Circular Collimator","CenterOfCircularCollimator","IS",2, +"(0018,1712)","Radius of Circular Collimator","RadiusOfCircularCollimator","IS",1, +"(0018,1720)","Vertices of the Polygonal Collimator","VerticesOfThePolygonalCollimator","IS","2-2n", +"(0018,1800)","Acquisition Time Synchronized","AcquisitionTimeSynchronized","CS",1, +"(0018,1801)","Time Source","TimeSource","SH",1, +"(0018,1802)","Time Distribution Protocol","TimeDistributionProtocol","CS",1, +"(0018,1803)","NTP Source Address","NTPSourceAddress","LO",1, +"(0018,2001)","Page Number Vector","PageNumberVector","IS","1-n", +"(0018,2002)","Frame Label Vector","FrameLabelVector","SH","1-n", +"(0018,2003)","Frame Primary Angle Vector","FramePrimaryAngleVector","DS","1-n", +"(0018,2004)","Frame Secondary Angle Vector","FrameSecondaryAngleVector","DS","1-n", +"(0018,2005)","Slice Location Vector","SliceLocationVector","DS","1-n", +"(0018,2006)","Display Window Label Vector","DisplayWindowLabelVector","SH","1-n", +"(0018,2010)","Nominal Scanned Pixel Spacing","NominalScannedPixelSpacing","DS",2, +"(0018,2020)","Digitizing Device Transport Direction","DigitizingDeviceTransportDirection","CS",1, +"(0018,2030)","Rotation of Scanned Film","RotationOfScannedFilm","DS",1, +"(0018,3100)","IVUS Acquisition","IVUSAcquisition","CS",1, +"(0018,3101)","IVUS Pullback Rate","IVUSPullbackRate","DS",1, +"(0018,3102)","IVUS Gated Rate","IVUSGatedRate","DS",1, +"(0018,3103)","IVUS Pullback Start Frame Number","IVUSPullbackStartFrameNumber","IS",1, +"(0018,3104)","IVUS Pullback Stop Frame Number","IVUSPullbackStopFrameNumber","IS",1, +"(0018,3105)","Lesion Number ","LesionNumber","IS","1-n", +"(0018,4000)","Acquisition Comments","AcquisitionComments","LT",1,"RET" +"(0018,5000)","Output Power","OutputPower","SH","1-n", +"(0018,5010)","Transducer Data","TransducerData","LO","1-n", +"(0018,5012)","Focus Depth","FocusDepth","DS",1, +"(0018,5020)","Processing Function","ProcessingFunction","LO",1, +"(0018,5021)","Postprocessing Function","PostprocessingFunction","LO",1,"RET" +"(0018,5022)","Mechanical Index","MechanicalIndex","DS",1, +"(0018,5024)","Bone Thermal Index","BoneThermalIndex","DS",1, +"(0018,5026)","Cranial Thermal Index","CranialThermalIndex","DS",1, +"(0018,5027)","Soft Tissue Thermal Index","SoftTissueThermalIndex","DS",1, +"(0018,5028)","Soft Tissue-focus Thermal Index","SoftTissueFocusThermalIndex","DS",1, +"(0018,5029)","Soft Tissue-surface Thermal Index","SoftTissueSurfaceThermalIndex","DS",1, +"(0018,5030)","Dynamic Range","DynamicRange","DS",1,"RET" +"(0018,5040)","Total Gain","TotalGain","DS",1,"RET" +"(0018,5050)","Depth of Scan Field","DepthOfScanField","IS",1, +"(0018,5100)","Patient Position","PatientPosition","CS",1, +"(0018,5101)","View Position","ViewPosition","CS",1, +"(0018,5104)","Projection Eponymous Name Code Sequence","ProjectionEponymousNameCodeSequence","SQ",1, +"(0018,5210)","Image Transformation Matrix","ImageTransformationMatrix","DS",6,"RET" +"(0018,5212)","Image Translation Vector","ImageTranslationVector","DS",3,"RET" +"(0018,6000)","Sensitivity","Sensitivity","DS",1, +"(0018,6011)","Sequence of Ultrasound Regions","SequenceOfUltrasoundRegions","SQ",1, +"(0018,6012)","Region Spatial Format","RegionSpatialFormat","US",1, +"(0018,6014)","Region Data Type","RegionDataType","US",1, +"(0018,6016)","Region Flags","RegionFlags","UL",1, +"(0018,6018)","Region Location Min X0","RegionLocationMinX0","UL",1, +"(0018,601A)","Region Location Min Y0","RegionLocationMinY0","UL",1, +"(0018,601C)","Region Location Max X1","RegionLocationMaxX1","UL",1, +"(0018,601E)","Region Location Max Y1","RegionLocationMaxY1","UL",1, +"(0018,6020)","Reference Pixel X0","ReferencePixelX0","SL",1, +"(0018,6022)","Reference Pixel Y0","ReferencePixelY0","SL",1, +"(0018,6024)","Physical Units X Direction","PhysicalUnitsXDirection","US",1, +"(0018,6026)","Physical Units Y Direction","PhysicalUnitsYDirection","US",1, +"(0018,6028)","Reference Pixel Physical Value X","ReferencePixelPhysicalValueX","FD",1, +"(0018,602A)","Reference Pixel Physical Value Y","ReferencePixelPhysicalValueY","FD",1, +"(0018,602C)","Physical Delta X","PhysicalDeltaX","FD",1, +"(0018,602E)","Physical Delta Y","PhysicalDeltaY","FD",1, +"(0018,6030)","Transducer Frequency","TransducerFrequency","UL",1, +"(0018,6031)","Transducer Type","TransducerType","CS",1, +"(0018,6032)","Pulse Repetition Frequency","PulseRepetitionFrequency","UL",1, +"(0018,6034)","Doppler Correction Angle","DopplerCorrectionAngle","FD",1, +"(0018,6036)","Steering Angle","SteeringAngle","FD",1, +"(0018,6038)","Doppler Sample Volume X Position (Retired)","DopplerSampleVolumeXPositionRetired","UL",1,"RET" +"(0018,6039)","Doppler Sample Volume X Position","DopplerSampleVolumeXPosition","SL",1, +"(0018,603A)","Doppler Sample Volume Y Position (Retired)","DopplerSampleVolumeYPositionRetired","UL",1,"RET" +"(0018,603B)","Doppler Sample Volume Y Position","DopplerSampleVolumeYPosition","SL",1, +"(0018,603C)","TM-Line Position X0 (Retired)","TMLinePositionX0Retired","UL",1,"RET" +"(0018,603D)","TM-Line Position X0","TMLinePositionX0","SL",1, +"(0018,603E)","TM-Line Position Y0 (Retired)","TMLinePositionY0Retired","UL",1,"RET" +"(0018,603F)","TM-Line Position Y0","TMLinePositionY0","SL",1, +"(0018,6040)","TM-Line Position X1 (Retired)","TMLinePositionX1Retired","UL",1,"RET" +"(0018,6041)","TM-Line Position X1","TMLinePositionX1","SL",1, +"(0018,6042)","TM-Line Position Y1 (Retired)","TMLinePositionY1Retired","UL",1,"RET" +"(0018,6043)","TM-Line Position Y1","TMLinePositionY1","SL",1, +"(0018,6044)","Pixel Component Organization","PixelComponentOrganization","US",1, +"(0018,6046)","Pixel Component Mask","PixelComponentMask","UL",1, +"(0018,6048)","Pixel Component Range Start","PixelComponentRangeStart","UL",1, +"(0018,604A)","Pixel Component Range Stop","PixelComponentRangeStop","UL",1, +"(0018,604C)","Pixel Component Physical Units","PixelComponentPhysicalUnits","US",1, +"(0018,604E)","Pixel Component Data Type","PixelComponentDataType","US",1, +"(0018,6050)","Number of Table Break Points","NumberOfTableBreakPoints","UL",1, +"(0018,6052)","Table of X Break Points","TableOfXBreakPoints","UL","1-n", +"(0018,6054)","Table of Y Break Points","TableOfYBreakPoints","FD","1-n", +"(0018,6056)","Number of Table Entries","NumberOfTableEntries","UL",1, +"(0018,6058)","Table of Pixel Values","TableOfPixelValues","UL","1-n", +"(0018,605A)","Table of Parameter Values","TableOfParameterValues","FL","1-n", +"(0018,6060)","R Wave Time Vector","RWaveTimeVector","FL","1-n", +"(0018,7000)","Detector Conditions Nominal Flag ","DetectorConditionsNominalFlag","CS",1, +"(0018,7001)","Detector Temperature","DetectorTemperature","DS",1, +"(0018,7004)","Detector Type","DetectorType","CS",1, +"(0018,7005)","Detector Configuration","DetectorConfiguration","CS",1, +"(0018,7006)","Detector Description","DetectorDescription","LT",1, +"(0018,7008)","Detector Mode","DetectorMode","LT",1, +"(0018,700A)","Detector ID","DetectorID","SH",1, +"(0018,700C)","Date of Last Detector Calibration ","DateOfLastDetectorCalibration","DA",1, +"(0018,700E)","Time of Last Detector Calibration","TimeOfLastDetectorCalibration","TM",1, +"(0018,7010)","Exposures on Detector Since Last Calibration ","ExposuresOnDetectorSinceLastCalibration","IS",1, +"(0018,7011)","Exposures on Detector Since Manufactured ","ExposuresOnDetectorSinceManufactured","IS",1, +"(0018,7012)","Detector Time Since Last Exposure ","DetectorTimeSinceLastExposure","DS",1, +"(0018,7014)","Detector Active Time ","DetectorActiveTime","DS",1, +"(0018,7016)","Detector Activation Offset From Exposure","DetectorActivationOffsetFromExposure","DS",1, +"(0018,701A)","Detector Binning ","DetectorBinning","DS",2, +"(0018,7020)","Detector Element Physical Size","DetectorElementPhysicalSize","DS",2, +"(0018,7022)","Detector Element Spacing","DetectorElementSpacing","DS",2, +"(0018,7024)","Detector Active Shape","DetectorActiveShape","CS",1, +"(0018,7026)","Detector Active Dimension(s)","DetectorActiveDimensions","DS","1-2", +"(0018,7028)","Detector Active Origin","DetectorActiveOrigin","DS",2, +"(0018,702A)","Detector Manufacturer Name","DetectorManufacturerName","LO",1, +"(0018,702B)","Detector Manufacturer’s Model Name","DetectorManufacturerModelName","LO",1, +"(0018,7030)","Field of View Origin","FieldOfViewOrigin","DS",2, +"(0018,7032)","Field of View Rotation","FieldOfViewRotation","DS",1, +"(0018,7034)","Field of View Horizontal Flip","FieldOfViewHorizontalFlip","CS",1, +"(0018,7036)","Pixel Data Area Origin Relative To FOV","PixelDataAreaOriginRelativeToFOV","FL",2, +"(0018,7038)","Pixel Data Area Rotation Angle Relative To FOV","PixelDataAreaRotationAngleRelativeToFOV","FL",1, +"(0018,7040)","Grid Absorbing Material","GridAbsorbingMaterial","LT",1, +"(0018,7041)","Grid Spacing Material","GridSpacingMaterial","LT",1, +"(0018,7042)","Grid Thickness","GridThickness","DS",1, +"(0018,7044)","Grid Pitch","GridPitch","DS",1, +"(0018,7046)","Grid Aspect Ratio","GridAspectRatio","IS",2, +"(0018,7048)","Grid Period","GridPeriod","DS",1, +"(0018,704C)","Grid Focal Distance","GridFocalDistance","DS",1, +"(0018,7050)","Filter Material","FilterMaterial","CS","1-n", +"(0018,7052)","Filter Thickness Minimum","FilterThicknessMinimum","DS","1-n", +"(0018,7054)","Filter Thickness Maximum","FilterThicknessMaximum","DS","1-n", +"(0018,7056)","Filter Beam Path Length Minimum","FilterBeamPathLengthMinimum","FL","1-n", +"(0018,7058)","Filter Beam Path Length Maximum","FilterBeamPathLengthMaximum","FL","1-n", +"(0018,7060)","Exposure Control Mode","ExposureControlMode","CS",1, +"(0018,7062)","Exposure Control Mode Description","ExposureControlModeDescription","LT",1, +"(0018,7064)","Exposure Status","ExposureStatus","CS",1, +"(0018,7065)","Phototimer Setting","PhototimerSetting","DS",1, +"(0018,8150)","Exposure Time in µS","ExposureTimeInuS","DS",1, +"(0018,8151)","X-Ray Tube Current in µA","XRayTubeCurrentInuA","DS",1, +"(0018,9004)","Content Qualification","ContentQualification","CS",1, +"(0018,9005)","Pulse Sequence Name","PulseSequenceName","SH",1, +"(0018,9006)","MR Imaging Modifier Sequence","MRImagingModifierSequence","SQ",1, +"(0018,9008)","Echo Pulse Sequence","EchoPulseSequence","CS",1, +"(0018,9009)","Inversion Recovery","InversionRecovery","CS",1, +"(0018,9010)","Flow Compensation","FlowCompensation","CS",1, +"(0018,9011)","Multiple Spin Echo","MultipleSpinEcho","CS",1, +"(0018,9012)","Multi-planar Excitation","MultiPlanarExcitation","CS",1, +"(0018,9014)","Phase Contrast","PhaseContrast","CS",1, +"(0018,9015)","Time of Flight Contrast","TimeOfFlightContrast","CS",1, +"(0018,9016)","Spoiling","Spoiling","CS",1, +"(0018,9017)","Steady State Pulse Sequence","SteadyStatePulseSequence","CS",1, +"(0018,9018)","Echo Planar Pulse Sequence","EchoPlanarPulseSequence","CS",1, +"(0018,9019)","Tag Angle First Axis","TagAngleFirstAxis","FD",1, +"(0018,9020)","Magnetization Transfer","MagnetizationTransfer","CS",1, +"(0018,9021)","T2 Preparation","T2Preparation","CS",1, +"(0018,9022)","Blood Signal Nulling","BloodSignalNulling","CS",1, +"(0018,9024)","Saturation Recovery","SaturationRecovery","CS",1, +"(0018,9025)","Spectrally Selected Suppression","SpectrallySelectedSuppression","CS",1, +"(0018,9026)","Spectrally Selected Excitation","SpectrallySelectedExcitation","CS",1, +"(0018,9027)","Spatial Pre-saturation","SpatialPresaturation","CS",1, +"(0018,9028)","Tagging","Tagging","CS",1, +"(0018,9029)","Oversampling Phase","OversamplingPhase","CS",1, +"(0018,9030)","Tag Spacing First Dimension","TagSpacingFirstDimension","FD",1, +"(0018,9032)","Geometry of k-Space Traversal","GeometryOfKSpaceTraversal","CS",1, +"(0018,9033)","Segmented k-Space Traversal","SegmentedKSpaceTraversal","CS",1, +"(0018,9034)","Rectilinear Phase Encode Reordering","RectilinearPhaseEncodeReordering","CS",1, +"(0018,9035)","Tag Thickness","TagThickness","FD",1, +"(0018,9036)","Partial Fourier Direction","PartialFourierDirection","CS",1, +"(0018,9037)","Cardiac Synchronization Technique","CardiacSynchronizationTechnique","CS",1, +"(0018,9041)","Receive Coil Manufacturer Name","ReceiveCoilManufacturerName","LO",1, +"(0018,9042)","MR Receive Coil Sequence","MRReceiveCoilSequence","SQ",1, +"(0018,9043)","Receive Coil Type ","ReceiveCoilType","CS",1, +"(0018,9044)","Quadrature Receive Coil ","QuadratureReceiveCoil","CS",1, +"(0018,9045)","Multi-Coil Definition Sequence","MultiCoilDefinitionSequence","SQ",1, +"(0018,9046)","Multi-Coil Configuration ","MultiCoilConfiguration","LO",1, +"(0018,9047)","Multi-Coil Element Name","MultiCoilElementName","SH",1, +"(0018,9048)","Multi-Coil Element Used","MultiCoilElementUsed","CS",1, +"(0018,9049)","MR Transmit Coil Sequence","MRTransmitCoilSequence","SQ",1, +"(0018,9050)","Transmit Coil Manufacturer Name","TransmitCoilManufacturerName","LO",1, +"(0018,9051)","Transmit Coil Type","TransmitCoilType","CS",1, +"(0018,9052)","Spectral Width","SpectralWidth","FD","1-2", +"(0018,9053)","Chemical Shift Reference","ChemicalShiftReference","FD","1-2", +"(0018,9054)","Volume Localization Technique","VolumeLocalizationTechnique","CS",1, +"(0018,9058)","MR Acquisition Frequency Encoding Steps","MRAcquisitionFrequencyEncodingSteps","US",1, +"(0018,9059)","De-coupling","Decoupling","CS",1, +"(0018,9060)","De-coupled Nucleus","DecoupledNucleus","CS","1-2", +"(0018,9061)","De-coupling Frequency","DecouplingFrequency","FD","1-2", +"(0018,9062)","De-coupling Method","DecouplingMethod","CS",1, +"(0018,9063)","De-coupling Chemical Shift Reference","DecouplingChemicalShiftReference","FD","1-2", +"(0018,9064)","k-space Filtering","KSpaceFiltering","CS",1, +"(0018,9065)","Time Domain Filtering","TimeDomainFiltering","CS","1-2", +"(0018,9066)","Number of Zero Fills","NumberOfZeroFills","US","1-2", +"(0018,9067)","Baseline Correction","BaselineCorrection","CS",1, +"(0018,9069)","Parallel Reduction Factor In-plane","ParallelReductionFactorInPlane","FD",1, +"(0018,9070)","Cardiac R-R Interval Specified","CardiacRRIntervalSpecified","FD",1, +"(0018,9073)","Acquisition Duration","AcquisitionDuration","FD",1, +"(0018,9074)","Frame Acquisition DateTime","FrameAcquisitionDateTime","DT",1, +"(0018,9075)","Diffusion Directionality","DiffusionDirectionality","CS",1, +"(0018,9076)","Diffusion Gradient Direction Sequence","DiffusionGradientDirectionSequence","SQ",1, +"(0018,9077)","Parallel Acquisition","ParallelAcquisition","CS",1, +"(0018,9078)","Parallel Acquisition Technique","ParallelAcquisitionTechnique","CS",1, +"(0018,9079)","Inversion Times","InversionTimes","FD","1-n", +"(0018,9080)","Metabolite Map Description","MetaboliteMapDescription","ST",1, +"(0018,9081)","Partial Fourier","PartialFourier","CS",1, +"(0018,9082)","Effective Echo Time","EffectiveEchoTime","FD",1, +"(0018,9083)","Metabolite Map Code Sequence","MetaboliteMapCodeSequence","SQ",1, +"(0018,9084)","Chemical Shift Sequence","ChemicalShiftSequence","SQ",1, +"(0018,9085)","Cardiac Signal Source","CardiacSignalSource","CS",1, +"(0018,9087)","Diffusion b-value","DiffusionBValue","FD",1, +"(0018,9089)","Diffusion Gradient Orientation","DiffusionGradientOrientation","FD",3, +"(0018,9090)","Velocity Encoding Direction","VelocityEncodingDirection","FD",3, +"(0018,9091)","Velocity Encoding Minimum Value","VelocityEncodingMinimumValue","FD",1, +"(0018,9092)","Velocity Encoding Acquisition Sequence","VelocityEncodingAcquisitionSequence","SQ",1, +"(0018,9093)","Number of k-Space Trajectories","NumberOfKSpaceTrajectories","US",1, +"(0018,9094)","Coverage of k-Space","CoverageOfKSpace","CS",1, +"(0018,9095)","Spectroscopy Acquisition Phase Rows","SpectroscopyAcquisitionPhaseRows","UL",1, +"(0018,9096)","Parallel Reduction Factor In-plane (Retired)","ParallelReductionFactorInPlaneRetired","FD",1,"RET" +"(0018,9098)","Transmitter Frequency","TransmitterFrequency","FD","1-2", +"(0018,9100)","Resonant Nucleus","ResonantNucleus","CS","1-2", +"(0018,9101)","Frequency Correction","FrequencyCorrection","CS",1, +"(0018,9103)","MR Spectroscopy FOV/Geometry Sequence","MRSpectroscopyFOVGeometrySequence","SQ",1, +"(0018,9104)","Slab Thickness","SlabThickness","FD",1, +"(0018,9105)","Slab Orientation","SlabOrientation","FD",3, +"(0018,9106)","Mid Slab Position","MidSlabPosition","FD",3, +"(0018,9107)","MR Spatial Saturation Sequence","MRSpatialSaturationSequence","SQ",1, +"(0018,9112)","MR Timing and Related Parameters Sequence","MRTimingAndRelatedParametersSequence","SQ",1, +"(0018,9114)","MR Echo Sequence","MREchoSequence","SQ",1, +"(0018,9115)","MR Modifier Sequence","MRModifierSequence","SQ",1, +"(0018,9117)","MR Diffusion Sequence","MRDiffusionSequence","SQ",1, +"(0018,9118)","Cardiac Synchronization ","CardiacSynchronization","SQ",1, +"(0018,9119)","MR Averages Sequence","MRAveragesSequence","SQ",1, +"(0018,9125)","MR FOV/Geometry Sequence","MRFOVGeometrySequence","SQ",1, +"(0018,9126)","Volume Localization Sequence","VolumeLocalizationSequence","SQ",1, +"(0018,9127)","Spectroscopy Acquisition Data Columns","SpectroscopyAcquisitionDataColumns","UL",1, +"(0018,9147)","Diffusion Anisotropy Type","DiffusionAnisotropyType","CS",1, +"(0018,9151)","Frame Reference DateTime","FrameReferenceDateTime","DT",1, +"(0018,9152)","MR Metabolite Map Sequence","MRMetaboliteMapSequence","SQ",1, +"(0018,9155)","Parallel Reduction Factor out-of-plane","ParallelReductionFactorOutOfPlane","FD",1, +"(0018,9159)","Spectroscopy Acquisition Out-of-plane Phase Steps","SpectroscopyAcquisitionOutOfPlanePhaseSteps","UL",1, +"(0018,9166)","Bulk Motion Status","BulkMotionStatus","CS",1,"RET" +"(0018,9168)","Parallel Reduction Factor Second In-plane","ParallelReductionFactorSecondInPlane","FD",1, +"(0018,9169)","Cardiac Beat Rejection Technique","CardiacBeatRejectionTechnique","CS",1, +"(0018,9170)","Respiratory Motion Compensation Technique","RespiratoryMotionCompensationTechnique","CS",1, +"(0018,9171)","Respiratory Signal Source","RespiratorySignalSource","CS",1, +"(0018,9172)","Bulk Motion Compensation Technique","BulkMotionCompensationTechnique","CS",1, +"(0018,9173)","Bulk Motion Signal Source","BulkMotionSignalSource","CS",1, +"(0018,9174)","Applicable Safety Standard Agency","ApplicableSafetyStandardAgency","CS",1, +"(0018,9175)","Applicable Safety Standard Description","ApplicableSafetyStandardDescription","LO",1, +"(0018,9176)","Operating Mode Sequence","OperatingModeSequence","SQ",1, +"(0018,9177)","Operating Mode Type","OperatingModeType","CS",1, +"(0018,9178)","Operating Mode","OperatingMode","CS",1, +"(0018,9179)","Specific Absorption Rate Definition","SpecificAbsorptionRateDefinition","CS",1, +"(0018,9180)","Gradient Output Type","GradientOutputType","CS",1, +"(0018,9181)","Specific Absorption Rate Value","SpecificAbsorptionRateValue","FD",1, +"(0018,9182)","Gradient Output","GradientOutput","FD",1, +"(0018,9183)","Flow Compensation Direction","FlowCompensationDirection","CS",1, +"(0018,9184)","Tagging Delay","TaggingDelay","FD",1, +"(0018,9185)","Respiratory Motion Compensation Technique Description","RespiratoryMotionCompensationTechniqueDescription","ST",1, +"(0018,9186)","Respiratory Signal Source ID","RespiratorySignalSourceID","SH",1, +"(0018,9195)","Chemical Shift Minimum Integration Limit in Hz","ChemicalShiftMinimumIntegrationLimitInHz","FD",1,"RET" +"(0018,9196)","Chemical Shift Maximum Integration Limit in Hz","ChemicalShiftMaximumIntegrationLimitInHz","FD",1,"RET" +"(0018,9197)","MR Velocity Encoding Sequence","MRVelocityEncodingSequence","SQ",1, +"(0018,9198)","First Order Phase Correction","FirstOrderPhaseCorrection","CS",1, +"(0018,9199)","Water Referenced Phase Correction","WaterReferencedPhaseCorrection","CS",1, +"(0018,9200)","MR Spectroscopy Acquisition Type","MRSpectroscopyAcquisitionType","CS",1, +"(0018,9214)","Respiratory Cycle Position","RespiratoryCyclePosition","CS",1, +"(0018,9217)","Velocity Encoding Maximum Value","VelocityEncodingMaximumValue","FD",1, +"(0018,9218)","Tag Spacing Second Dimension","TagSpacingSecondDimension","FD",1, +"(0018,9219)","Tag Angle Second Axis","TagAngleSecondAxis","SS",1, +"(0018,9220)","Frame Acquisition Duration","FrameAcquisitionDuration","FD",1, +"(0018,9226)","MR Image Frame Type Sequence","MRImageFrameTypeSequence","SQ",1, +"(0018,9227)","MR Spectroscopy Frame Type Sequence","MRSpectroscopyFrameTypeSequence","SQ",1, +"(0018,9231)","MR Acquisition Phase Encoding Steps in-plane","MRAcquisitionPhaseEncodingStepsInPlane","US",1, +"(0018,9232)","MR Acquisition Phase Encoding Steps out-of-plane","MRAcquisitionPhaseEncodingStepsOutOfPlane","US",1, +"(0018,9234)","Spectroscopy Acquisition Phase Columns","SpectroscopyAcquisitionPhaseColumns","UL",1, +"(0018,9236)","Cardiac Cycle Position","CardiacCyclePosition","CS",1, +"(0018,9239)","Specific Absorption Rate Sequence","SpecificAbsorptionRateSequence","SQ",1, +"(0018,9240)","RF Echo Train Length","RFEchoTrainLength","US",1, +"(0018,9241)","Gradient Echo Train Length","GradientEchoTrainLength","US",1, +"(0018,9250) ","Arterial Spin Labeling Contrast","ArterialSpinLabelingContrast","CS",1, +"(0018,9251) ","MR Arterial Spin Labeling Sequence","MRArterialSpinLabeling","SQ",1, +"(0018,9252) ","ASL Technique Description","ASLTechniqueDescription","LO",1, +"(0018,9253) ","ASL Slab Number","ASLSlabNumber","US",1, +"(0018,9254) ","ASL Slab Thickness","ASLSlabThickness","FD ",1, +"(0018,9255) ","ASL Slab Orientation","ASLSlabOrientation","FD ",3, +"(0018,9256) ","ASL Mid Slab Position","ASLMidSlabPosition","FD ",3, +"(0018,9257) ","ASL Context","ASLContext","CS",1, +"(0018,9258)","ASL Pulse Train Duration","ASLPulseTrainDuration","UL",1, +"(0018,9259) ","ASL Crusher Flag","ASLCrusherFlag","CS",1, +"(0018,925A)","ASL Crusher Flow","ASLCrusherFlow","FD",1, +"(0018,925B)","ASL Crusher Description","ASLCrusherDescription","LO",1, +"(0018,925C) ","ASL Bolus Cut-off Flag","ASLBolusCutoffFlag","CS",1, +"(0018,925D)","ASL Bolus Cut-off Timing Sequence","ASLBolusCutoffTimingSequence","SQ",1, +"(0018,925E)","ASL Bolus Cut-off Technique","ASLBolusCutoffTechnique","LO",1, +"(0018,925F)","ASL Bolus Cut-off Delay Time","ASLBolusCutoffDelayTime","UL",1, +"(0018,9260)","ASL Slab Sequence","ASLSlabSequence","SQ",1, +"(0018,9295)","Chemical Shift Minimum Integration Limit in ppm","ChemicalShiftMinimumIntegrationLimitInppm","FD",1, +"(0018,9296)","Chemical Shift Maximum Integration Limit in ppm","ChemicalShiftMaximumIntegrationLimitInppm","FD",1, +"(0018,9301)","CT Acquisition Type Sequence","CTAcquisitionTypeSequence","SQ",1, +"(0018,9302)","Acquisition Type","AcquisitionType","CS",1, +"(0018,9303)","Tube Angle","TubeAngle","FD",1, +"(0018,9304)","CT Acquisition Details Sequence","CTAcquisitionDetailsSequence","SQ",1, +"(0018,9305)","Revolution Time","RevolutionTime","FD",1, +"(0018,9306)","Single Collimation Width","SingleCollimationWidth","FD",1, +"(0018,9307)","Total Collimation Width","TotalCollimationWidth","FD",1, +"(0018,9308)","CT Table Dynamics Sequence","CTTableDynamicsSequence","SQ",1, +"(0018,9309)","Table Speed","TableSpeed","FD",1, +"(0018,9310)","Table Feed per Rotation","TableFeedPerRotation","FD",1, +"(0018,9311)","Spiral Pitch Factor","SpiralPitchFactor","FD",1, +"(0018,9312)","CT Geometry Sequence","CTGeometrySequence","SQ",1, +"(0018,9313)","Data Collection Center (Patient)","DataCollectionCenterPatient","FD",3, +"(0018,9314)","CT Reconstruction Sequence","CTReconstructionSequence","SQ",1, +"(0018,9315)","Reconstruction Algorithm","ReconstructionAlgorithm","CS",1, +"(0018,9316)","Convolution Kernel Group","ConvolutionKernelGroup","CS",1, +"(0018,9317)","Reconstruction Field of View","ReconstructionFieldOfView","FD",2, +"(0018,9318)","Reconstruction Target Center (Patient)","ReconstructionTargetCenterPatient","FD",3, +"(0018,9319)","Reconstruction Angle","ReconstructionAngle","FD",1, +"(0018,9320)","Image Filter","ImageFilter","SH",1, +"(0018,9321)","CT Exposure Sequence","CTExposureSequence","SQ",1, +"(0018,9322)","Reconstruction Pixel Spacing ","ReconstructionPixelSpacing","FD",2, +"(0018,9323)","Exposure Modulation Type","ExposureModulationType","CS",1, +"(0018,9324)","Estimated Dose Saving","EstimatedDoseSaving","FD",1, +"(0018,9325)","CT X-Ray Details Sequence","CTXRayDetailsSequence","SQ",1, +"(0018,9326)","CT Position Sequence","CTPositionSequence","SQ",1, +"(0018,9327)","Table Position","TablePosition","FD",1, +"(0018,9328)","Exposure Time in ms","ExposureTimeInms","FD",1, +"(0018,9329)","CT Image Frame Type Sequence","CTImageFrameTypeSequence","SQ",1, +"(0018,9330)","X-Ray Tube Current in mA","XRayTubeCurrentInmA","FD",1, +"(0018,9332)","Exposure in mAs","ExposureInmAs","FD",1, +"(0018,9333)","Constant Volume Flag ","ConstantVolumeFlag","CS",1, +"(0018,9334)","Fluoroscopy Flag","FluoroscopyFlag","CS",1, +"(0018,9335)","Distance Source to Data Collection Center","DistanceSourceToDataCollectionCenter","FD",1, +"(0018,9337)","Contrast/Bolus Agent Number","ContrastBolusAgentNumber","US",1, +"(0018,9338)","Contrast/Bolus Ingredient Code Sequence","ContrastBolusIngredientCodeSequence","SQ",1, +"(0018,9340)","Contrast Administration Profile Sequence","ContrastAdministrationProfileSequence","SQ",1, +"(0018,9341)","Contrast/Bolus Usage Sequence","ContrastBolusUsageSequence","SQ",1, +"(0018,9342)","Contrast/Bolus Agent Administered","ContrastBolusAgentAdministered","CS",1, +"(0018,9343)","Contrast/Bolus Agent Detected","ContrastBolusAgentDetected","CS",1, +"(0018,9344)","Contrast/Bolus Agent Phase","ContrastBolusAgentPhase","CS",1, +"(0018,9345)","CTDIvol","CTDIvol","FD",1, +"(0018,9346)","CTDI Phantom Type Code Sequence","CTDIPhantomTypeCodeSequence","SQ",1, +"(0018,9351)","Calcium Scoring Mass Factor Patient","CalciumScoringMassFactorPatient","FL",1, +"(0018,9352)","Calcium Scoring Mass Factor Device","CalciumScoringMassFactorDevice","FL",3, +"(0018,9353)","Energy Weighting Factor","EnergyWeightingFactor","FL",1, +"(0018,9360)","CT Additional X-Ray Source Sequence","CTAdditionalXRaySourceSequence","SQ",1, +"(0018,9401)","Projection Pixel Calibration Sequence","ProjectionPixelCalibrationSequence","SQ",1, +"(0018,9402)","Distance Source to Isocenter","DistanceSourceToIsocenter","FL",1, +"(0018,9403)","Distance Object to Table Top","DistanceObjectToTableTop","FL",1, +"(0018,9404)","Object Pixel Spacing in Center of Beam","ObjectPixelSpacingInCenterOfBeam","FL",2, +"(0018,9405)","Positioner Position Sequence","PositionerPositionSequence","SQ",1, +"(0018,9406)","Table Position Sequence","TablePositionSequence","SQ",1, +"(0018,9407)","Collimator Shape Sequence","CollimatorShapeSequence","SQ",1, +"(0018,9410)","Planes in Acquisition","PlanesInAcquisition","CS",1, +"(0018,9412)","XA/XRF Frame Characteristics Sequence","XAXRFFrameCharacteristicsSequence","SQ",1, +"(0018,9417)","Frame Acquisition Sequence","FrameAcquisitionSequence","SQ",1, +"(0018,9420)","X-Ray Receptor Type","XRayReceptorType","CS",1, +"(0018,9423)","Acquisition Protocol Name","AcquisitionProtocolName","LO",1, +"(0018,9424)","Acquisition Protocol Description","AcquisitionProtocolDescription","LT",1, +"(0018,9425)","Contrast/Bolus Ingredient Opaque","ContrastBolusIngredientOpaque","CS",1, +"(0018,9426)","Distance Receptor Plane to Detector Housing","DistanceReceptorPlaneToDetectorHousing","FL",1, +"(0018,9427)","Intensifier Active Shape","IntensifierActiveShape","CS",1, +"(0018,9428)","Intensifier Active Dimension(s)","IntensifierActiveDimensions","FL","1-2", +"(0018,9429)","Physical Detector Size","PhysicalDetectorSize","FL",2, +"(0018,9430)","Position of Isocenter Projection","PositionOfIsocenterProjection","FL",2, +"(0018,9432)","Field of View Sequence","FieldOfViewSequence","SQ",1, +"(0018,9433)","Field of View Description","FieldOfViewDescription","LO",1, +"(0018,9434)","Exposure Control Sensing Regions Sequence","ExposureControlSensingRegionsSequence","SQ",1, +"(0018,9435)","Exposure Control Sensing Region Shape","ExposureControlSensingRegionShape","CS",1, +"(0018,9436)","Exposure Control Sensing Region Left Vertical Edge","ExposureControlSensingRegionLeftVerticalEdge","SS",1, +"(0018,9437)","Exposure Control Sensing Region Right Vertical Edge","ExposureControlSensingRegionRightVerticalEdge","SS",1, +"(0018,9438)","Exposure Control Sensing Region Upper Horizontal Edge","ExposureControlSensingRegionUpperHorizontalEdge","SS",1, +"(0018,9439)","Exposure Control Sensing Region Lower Horizontal Edge","ExposureControlSensingRegionLowerHorizontalEdge","SS",1, +"(0018,9440)","Center of Circular Exposure Control Sensing Region","CenterOfCircularExposureControlSensingRegion","SS",2, +"(0018,9441)","Radius of Circular Exposure Control Sensing Region","RadiusOfCircularExposureControlSensingRegion","US",1, +"(0018,9442)","Vertices of the Polygonal Exposure Control Sensing Region","VerticesOfThePolygonalExposureControlSensingRegion","SS","2-n", +"(0018,9445)",,,,,"RET" +"(0018,9447)","Column Angulation (Patient)","ColumnAngulationPatient","FL",1, +"(0018,9449)","Beam Angle","BeamAngle","FL",1, +"(0018,9451)","Frame Detector Parameters Sequence","FrameDetectorParametersSequence","SQ",1, +"(0018,9452)","Calculated Anatomy Thickness","CalculatedAnatomyThickness","FL",1, +"(0018,9455)","Calibration Sequence","CalibrationSequence","SQ",1, +"(0018,9456)","Object Thickness Sequence","ObjectThicknessSequence","SQ",1, +"(0018,9457)","Plane Identification","PlaneIdentification","CS",1, +"(0018,9461)","Field of View Dimension(s) in Float","FieldOfViewDimensionsInFloat","FL","1-2", +"(0018,9462)","Isocenter Reference System Sequence","IsocenterReferenceSystemSequence","SQ",1, +"(0018,9463)","Positioner Isocenter Primary Angle","PositionerIsocenterPrimaryAngle","FL",1, +"(0018,9464)","Positioner Isocenter Secondary Angle","PositionerIsocenterSecondaryAngle","FL",1, +"(0018,9465)","Positioner Isocenter Detector Rotation Angle","PositionerIsocenterDetectorRotationAngle","FL",1, +"(0018,9466)","Table X Position to Isocenter","TableXPositionToIsocenter","FL",1, +"(0018,9467)","Table Y Position to Isocenter","TableYPositionToIsocenter","FL",1, +"(0018,9468)","Table Z Position to Isocenter","TableZPositionToIsocenter","FL",1, +"(0018,9469)","Table Horizontal Rotation Angle","TableHorizontalRotationAngle","FL",1, +"(0018,9470)","Table Head Tilt Angle","TableHeadTiltAngle","FL",1, +"(0018,9471)","Table Cradle Tilt Angle","TableCradleTiltAngle","FL",1, +"(0018,9472)","Frame Display Shutter Sequence","FrameDisplayShutterSequence","SQ",1, +"(0018,9473)","Acquired Image Area Dose Product","AcquiredImageAreaDoseProduct","FL",1, +"(0018,9474)","C-arm Positioner Tabletop Relationship","CArmPositionerTabletopRelationship","CS",1, +"(0018,9476)","X-Ray Geometry Sequence","XRayGeometrySequence","SQ",1, +"(0018,9477)","Irradiation Event Identification Sequence","IrradiationEventIdentificationSequence","SQ",1, +"(0018,9504)","X-Ray 3D Frame Type Sequence","XRay3DFrameTypeSequence","SQ",1, +"(0018,9506)","Contributing Sources Sequence","ContributingSourcesSequence","SQ",1, +"(0018,9507)","X-Ray 3D Acquisition Sequence","XRay3DAcquisitionSequence","SQ",1, +"(0018,9508)","Primary Positioner Scan Arc","PrimaryPositionerScanArc","FL",1, +"(0018,9509)","Secondary Positioner Scan Arc","SecondaryPositionerScanArc","FL",1, +"(0018,9510)","Primary Positioner Scan Start Angle","PrimaryPositionerScanStartAngle","FL ",1, +"(0018,9511)","Secondary Positioner Scan Start Angle","SecondaryPositionerScanStartAngle","FL",1, +"(0018,9514)","Primary Positioner Increment","PrimaryPositionerIncrement","FL",1, +"(0018,9515)","Secondary Positioner Increment","SecondaryPositionerIncrement","FL",1, +"(0018,9516)","Start Acquisition DateTime","StartAcquisitionDateTime","DT",1, +"(0018,9517)","End Acquisition DateTime","EndAcquisitionDateTime","DT",1, +"(0018,9524)","Application Name","ApplicationName","LO",1, +"(0018,9525)","Application Version","ApplicationVersion","LO",1, +"(0018,9526)","Application Manufacturer","ApplicationManufacturer","LO",1, +"(0018,9527)","Algorithm Type","AlgorithmType","CS",1, +"(0018,9528)","Algorithm Description","AlgorithmDescription","LO",1, +"(0018,9530)","X-Ray 3D Reconstruction Sequence","XRay3DReconstructionSequence","SQ",1, +"(0018,9531)","Reconstruction Description","ReconstructionDescription","LO",1, +"(0018,9538)","Per Projection Acquisition Sequence","PerProjectionAcquisitionSequence","SQ",1, +"(0018,9601)","Diffusion b-matrix Sequence","DiffusionBMatrixSequence","SQ",1, +"(0018,9602)","Diffusion b-value XX","DiffusionBValueXX","FD",1, +"(0018,9603)","Diffusion b-value XY","DiffusionBValueXY","FD",1, +"(0018,9604)","Diffusion b-value XZ","DiffusionBValueXZ","FD",1, +"(0018,9605)","Diffusion b-value YY","DiffusionBValueYY","FD",1, +"(0018,9606)","Diffusion b-value YZ","DiffusionBValueYZ","FD",1, +"(0018,9607)","Diffusion b-value ZZ","DiffusionBValueZZ","FD",1, +"(0018,9701)","Decay Correction DateTime","DecayCorrectionDateTime","DT",1, +"(0018,9715)","Start Density Threshold","StartDensityThreshold","FD",1, +"(0018,9716)","Start Relative Density Difference Threshold","StartRelativeDensityDifferenceThreshold","FD",1, +"(0018,9717)","Start Cardiac Trigger Count Threshold","StartCardiacTriggerCountThreshold","FD",1, +"(0018,9718)","Start Respiratory Trigger Count Threshold","StartRespiratoryTriggerCountThreshold","FD",1, +"(0018,9719)","Termination Counts Threshold","TerminationCountsThreshold","FD",1, +"(0018,9720)","Termination Density Threshold","TerminationDensityThreshold","FD",1, +"(0018,9721)","Termination Relative Density Threshold","TerminationRelativeDensityThreshold","FD",1, +"(0018,9722)","Termination Time Threshold","TerminationTimeThreshold","FD",1, +"(0018,9723)","Termination Cardiac Trigger Count Threshold","TerminationCardiacTriggerCountThreshold","FD",1, +"(0018,9724)","Termination Respiratory Trigger Count Threshold","TerminationRespiratoryTriggerCountThreshold","FD",1, +"(0018,9725)","Detector Geometry","DetectorGeometry","CS",1, +"(0018,9726)","Transverse Detector Separation","TransverseDetectorSeparation","FD",1, +"(0018,9727)","Axial Detector Dimension","AxialDetectorDimension","FD",1, +"(0018,9729)","Radiopharmaceutical Agent Number","RadiopharmaceuticalAgentNumber","US",1, +"(0018,9732)","PET Frame Acquisition Sequence","PETFrameAcquisitionSequence","SQ",1, +"(0018,9733)","PET Detector Motion Details Sequence","PETDetectorMotionDetailsSequence","SQ",1, +"(0018,9734)","PET Table Dynamics Sequence","PETTableDynamicsSequence","SQ",1, +"(0018,9735)","PET Position Sequence","PETPositionSequence","SQ",1, +"(0018,9736)","PET Frame Correction Factors Sequence","PETFrameCorrectionFactorsSequence","SQ",1, +"(0018,9737)","Radiopharmaceutical Usage Sequence","RadiopharmaceuticalUsageSequence","SQ",1, +"(0018,9738)","Attenuation Correction Source","AttenuationCorrectionSource","CS",1, +"(0018,9739)","Number of Iterations","NumberOfIterations","US",1, +"(0018,9740)","Number of Subsets","NumberOfSubsets","US",1, +"(0018,9749)","PET Reconstruction Sequence","PETReconstructionSequence","SQ",1, +"(0018,9751)","PET Frame Type Sequence","PETFrameTypeSequence","SQ",1, +"(0018,9755)","Time of Flight Information Used","TimeOfFlightInformationUsed","CS",1, +"(0018,9756)","Reconstruction Type","ReconstructionType","CS",1, +"(0018,9758)","Decay Corrected ","DecayCorrected","CS",1, +"(0018,9759)","Attenuation Corrected ","AttenuationCorrected","CS",1, +"(0018,9760)","Scatter Corrected ","ScatterCorrected","CS",1, +"(0018,9761)","Dead Time Corrected ","DeadTimeCorrected","CS",1, +"(0018,9762)","Gantry Motion Corrected ","GantryMotionCorrected","CS",1, +"(0018,9763)","Patient Motion Corrected ","PatientMotionCorrected","CS",1, +"(0018,9764)","Count Loss Normalization Corrected","CountLossNormalizationCorrected","CS",1, +"(0018,9765)","Randoms Corrected","RandomsCorrected","CS",1, +"(0018,9766)","Non-uniform Radial Sampling Corrected","NonUniformRadialSamplingCorrected","CS",1, +"(0018,9767)","Sensitivity Calibrated","SensitivityCalibrated","CS",1, +"(0018,9768)","Detector Normalization Correction","DetectorNormalizationCorrection","CS",1, +"(0018,9769)","Iterative Reconstruction Method ","IterativeReconstructionMethod","CS",1, +"(0018,9770)","Attenuation Correction Temporal Relationship","AttenuationCorrectionTemporalRelationship","CS",1, +"(0018,9771)","Patient Physiological State Sequence","PatientPhysiologicalStateSequence","SQ",1, +"(0018,9772)","Patient Physiological State Code Sequence","PatientPhysiologicalStateCodeSequence","SQ",1, +"(0018,9801)","Depth(s) of Focus","DepthsOfFocus","FD","1-n", +"(0018,9803)","Excluded Intervals Sequence","ExcludedIntervalsSequence","SQ",1, +"(0018,9804)","Exclusion Start Datetime","ExclusionStartDatetime","DT",1, +"(0018,9805)","Exclusion Duration","ExclusionDuration","FD",1, +"(0018,9806)","US Image Description Sequence","USImageDescriptionSequence","SQ",1, +"(0018,9807)","Image Data Type Sequence","ImageDataTypeSequence","SQ",1, +"(0018,9808)","Data Type","DataType","CS",1, +"(0018,9809)","Transducer Scan Pattern Code Sequence","TransducerScanPatternCodeSequence","SQ",1, +"(0018,980B)","Aliased Data Type","AliasedDataType","CS",1, +"(0018,980C)","Position Measuring Device Used","PositionMeasuringDeviceUsed","CS",1, +"(0018,980D)","Transducer Geometry Code Sequence","TransducerGeometryCodeSequence","SQ",1, +"(0018,980E)","Transducer Beam Steering Code Sequence","TransducerBeamSteeringCodeSequence","SQ",1, +"(0018,980F)","Transducer Application Code Sequence","TransducerApplicationCodeSequence","SQ",1, +"(0018,A001)","Contributing Equipment Sequence","ContributingEquipmentSequence","SQ",1, +"(0018,A002)","Contribution Date Time","ContributionDateTime","DT",1, +"(0018,A003)","Contribution Description","ContributionDescription","ST",1, +"Tag","Name","Keyword","VR","VM", +"(0020,000D)","Study Instance UID","StudyInstanceUID","UI",1, +"(0020,000E)","Series Instance UID","SeriesInstanceUID","UI",1, +"(0020,0010)","Study ID","StudyID","SH",1, +"(0020,0011)","Series Number","SeriesNumber","IS",1, +"(0020,0012)","Acquisition Number","AcquisitionNumber","IS",1, +"(0020,0013)","Instance Number","InstanceNumber","IS",1, +"(0020,0014)","Isotope Number","IsotopeNumber","IS",1,"RET" +"(0020,0015)","Phase Number","PhaseNumber","IS",1,"RET" +"(0020,0016)","Interval Number","IntervalNumber","IS",1,"RET" +"(0020,0017)","Time Slot Number","TimeSlotNumber","IS",1,"RET" +"(0020,0018)","Angle Number","AngleNumber","IS",1,"RET" +"(0020,0019)","Item Number","ItemNumber","IS",1, +"(0020,0020)","Patient Orientation","PatientOrientation","CS",2, +"(0020,0022)","Overlay Number","OverlayNumber","IS",1,"RET" +"(0020,0024)","Curve Number","CurveNumber","IS",1,"RET" +"(0020,0026)","LUT Number","LUTNumber","IS",1,"RET" +"(0020,0030)","Image Position","ImagePosition","DS",3,"RET" +"(0020,0032)","Image Position (Patient)","ImagePositionPatient","DS",3, +"(0020,0035)","Image Orientation","ImageOrientation","DS",6,"RET" +"(0020,0037)","Image Orientation (Patient)","ImageOrientationPatient","DS",6, +"(0020,0050)","Location","Location","DS",1,"RET" +"(0020,0052)","Frame of Reference UID","FrameOfReferenceUID","UI",1, +"(0020,0060)","Laterality","Laterality","CS",1, +"(0020,0062)","Image Laterality","ImageLaterality","CS",1, +"(0020,0070)","Image Geometry Type","ImageGeometryType","LO",1,"RET" +"(0020,0080)","Masking Image","MaskingImage","CS","1-n","RET" +"(0020,00AA)","Report Number","ReportNumber","IS",1,"RET" +"(0020,0100)","Temporal Position Identifier","TemporalPositionIdentifier","IS",1, +"(0020,0105)","Number of Temporal Positions","NumberOfTemporalPositions","IS",1, +"(0020,0110)","Temporal Resolution","TemporalResolution","DS",1, +"(0020,0200)","Synchronization Frame of Reference UID","SynchronizationFrameOfReferenceUID","UI",1, +"(0020,0242)","SOP Instance UID of Concatenation Source","SOPInstanceUIDOfConcatenationSource","UI",1, +"(0020,1000)","Series in Study","SeriesInStudy","IS",1,"RET" +"(0020,1001)","Acquisitions in Series","AcquisitionsInSeries","IS",1,"RET" +"(0020,1002)","Images in Acquisition","ImagesInAcquisition","IS",1, +"(0020,1003)","Images in Series","ImagesInSeries","IS",1,"RET" +"(0020,1004)","Acquisitions in Study","AcquisitionsInStudy","IS",1,"RET" +"(0020,1005)","Images in Study","ImagesInStudy","IS",1,"RET" +"(0020,1020)","Reference","Reference","LO","1-n","RET" +"(0020,1040)","Position Reference Indicator","PositionReferenceIndicator","LO",1, +"(0020,1041)","Slice Location","SliceLocation","DS",1, +"(0020,1070)","Other Study Numbers","OtherStudyNumbers","IS","1-n","RET" +"(0020,1200)","Number of Patient Related Studies","NumberOfPatientRelatedStudies","IS",1, +"(0020,1202)","Number of Patient Related Series","NumberOfPatientRelatedSeries","IS",1, +"(0020,1204)","Number of Patient Related Instances","NumberOfPatientRelatedInstances","IS",1, +"(0020,1206)","Number of Study Related Series","NumberOfStudyRelatedSeries","IS",1, +"(0020,1208)","Number of Study Related Instances","NumberOfStudyRelatedInstances","IS",1, +"(0020,1209)","Number of Series Related Instances","NumberOfSeriesRelatedInstances","IS",1, +"(0020,3100 to 31FF)","Source Image IDs","SourceImageIDs","CS","1-n","RET" +"(0020,3401)","Modifying Device ID","ModifyingDeviceID","CS",1,"RET" +"(0020,3402)","Modified Image ID","ModifiedImageID","CS",1,"RET" +"(0020,3403)","Modified Image Date","ModifiedImageDate","DA",1,"RET" +"(0020,3404)","Modifying Device Manufacturer","ModifyingDeviceManufacturer","LO",1,"RET" +"(0020,3405)","Modified Image Time","ModifiedImageTime","TM",1,"RET" +"(0020,3406)","Modified Image Description","ModifiedImageDescription","LO",1,"RET" +"(0020,4000)","Image Comments","ImageComments","LT",1, +"(0020,5000)","Original Image Identification","OriginalImageIdentification","AT","1-n","RET" +"(0020,5002)","Original Image Identification Nomenclature","OriginalImageIdentificationNomenclature","LO","1-n","RET" +"(0020,9056)","Stack ID","StackID","SH",1, +"(0020,9057)","In-Stack Position Number","InStackPositionNumber","UL",1, +"(0020,9071)","Frame Anatomy Sequence","FrameAnatomySequence","SQ",1, +"(0020,9072)","Frame Laterality","FrameLaterality","CS",1, +"(0020,9111)","Frame Content Sequence","FrameContentSequence","SQ",1, +"(0020,9113)","Plane Position Sequence","PlanePositionSequence","SQ",1, +"(0020,9116)","Plane Orientation Sequence","PlaneOrientationSequence","SQ",1, +"(0020,9128)","Temporal Position Index","TemporalPositionIndex","UL",1, +"(0020,9153)","Nominal Cardiac Trigger Delay Time","NominalCardiacTriggerDelayTime","FD",1, +"(0020,9154)","Nominal Cardiac Trigger Time Prior To R-Peak","NominalCardiacTriggerTimePriorToRPeak","FL",1, +"(0020,9155)","Actual Cardiac Trigger Time Prior To R-Peak","ActualCardiacTriggerTimePriorToRPeak","FL",1, +"(0020,9156)","Frame Acquisition Number","FrameAcquisitionNumber","US",1, +"(0020,9157)","Dimension Index Values","DimensionIndexValues","UL","1-n", +"(0020,9158)","Frame Comments","FrameComments","LT",1, +"(0020,9161)","Concatenation UID","ConcatenationUID","UI",1, +"(0020,9162)","In-concatenation Number","InConcatenationNumber","US",1, +"(0020,9163)","In-concatenation Total Number","InConcatenationTotalNumber","US",1, +"(0020,9164)","Dimension Organization UID","DimensionOrganizationUID","UI",1, +"(0020,9165)","Dimension Index Pointer","DimensionIndexPointer","AT",1, +"(0020,9167)","Functional Group Pointer","FunctionalGroupPointer","AT",1, +"(0020,9213)","Dimension Index Private Creator","DimensionIndexPrivateCreator","LO",1, +"(0020,9221)","Dimension Organization Sequence","DimensionOrganizationSequence","SQ",1, +"(0020,9222)","Dimension Index Sequence","DimensionIndexSequence","SQ",1, +"(0020,9228)","Concatenation Frame Offset Number","ConcatenationFrameOffsetNumber","UL",1, +"(0020,9238)","Functional Group Private Creator","FunctionalGroupPrivateCreator","LO",1, +"(0020,9241)","Nominal Percentage of Cardiac Phase","NominalPercentageOfCardiacPhase","FL",1, +"(0020,9245)","Nominal Percentage of Respiratory Phase","NominalPercentageOfRespiratoryPhase","FL",1, +"(0020,9246)","Starting Respiratory Amplitude","StartingRespiratoryAmplitude","FL",1, +"(0020,9247)","Starting Respiratory Phase","StartingRespiratoryPhase","CS",1, +"(0020,9248)","Ending Respiratory Amplitude","EndingRespiratoryAmplitude","FL",1, +"(0020,9249)","Ending Respiratory Phase","EndingRespiratoryPhase","CS",1, +"(0020,9250)","Respiratory Trigger Type","RespiratoryTriggerType","CS",1, +"(0020,9251)","R-R Interval Time Nominal","RRIntervalTimeNominal","FD",1, +"(0020,9252)","Actual Cardiac Trigger Delay Time","ActualCardiacTriggerDelayTime","FD",1, +"(0020,9253)","Respiratory Synchronization Sequence","RespiratorySynchronizationSequence","SQ",1, +"(0020,9254)","Respiratory Interval Time","RespiratoryIntervalTime","FD",1, +"(0020,9255)","Nominal Respiratory Trigger Delay Time","NominalRespiratoryTriggerDelayTime","FD",1, +"(0020,9256)","Respiratory Trigger Delay Threshold","RespiratoryTriggerDelayThreshold","FD",1, +"(0020,9257)","Actual Respiratory Trigger Delay Time","ActualRespiratoryTriggerDelayTime","FD",1, +"(0020,9301)","Image Position (Volume)","ImagePositionVolume","FD",3, +"(0020,9302)","Image Orientation (Volume)","ImageOrientationVolume","FD",6, +"(0020,9307)","Ultrasound Acquisition Geometry","UltrasoundAcquisitionGeometry","CS",1, +"(0020,9308)","Apex Position","ApexPosition","FD",3, +"(0020,9309)","Volume to Transducer Mapping Matrix","VolumeToTransducerMappingMatrix","FD",16, +"(0020,930A)","Volume to Table Mapping Matrix","VolumeToTableMappingMatrix","FD",16, +"(0020,930C)","Patient Frame of Reference Source","PatientFrameOfReferenceSource","CS",1, +"(0020,930D)","Temporal Position Time Offset","TemporalPositionTimeOffset","FD",1, +"(0020,930E)","Plane Position (Volume) Sequence","PlanePositionVolumeSequence","SQ",1, +"(0020,930F)","Plane Orientation (Volume) Sequence","PlaneOrientationVolumeSequence","SQ",1, +"(0020,9310)","Temporal Position Sequence","TemporalPositionSequence","SQ",1, +"(0020,9311)","Dimension Organization Type","DimensionOrganizationType","CS",1, +"(0020,9312)","Volume Frame of Reference UID","VolumeFrameOfReferenceUID","UI",1, +"(0020,9313)","Table Frame of Reference UID","TableFrameOfReferenceUID","UI",1, +"(0020,9421)","Dimension Description Label","DimensionDescriptionLabel","LO",1, +"(0020,9450)","Patient Orientation in Frame Sequence","PatientOrientationInFrameSequence","SQ",1, +"(0020,9453)","Frame Label","FrameLabel","LO",1, +"(0020,9518)","Acquisition Index","AcquisitionIndex","US","1-n", +"(0020,9529)","Contributing SOP Instances Reference Sequence","ContributingSOPInstancesReferenceSequence","SQ",1, +"(0020,9536)","Reconstruction Index","ReconstructionIndex","US",1, +"Tag","Name","Keyword","VR","VM", +"(0022,0001)","Light Path Filter Pass-Through Wavelength","LightPathFilterPassThroughWavelength","US",1, +"(0022,0002)","Light Path Filter Pass Band","LightPathFilterPassBand","US",2, +"(0022,0003)","Image Path Filter Pass-Through Wavelength","ImagePathFilterPassThroughWavelength","US",1, +"(0022,0004)","Image Path Filter Pass Band","ImagePathFilterPassBand","US",2, +"(0022,0005)","Patient Eye Movement Commanded","PatientEyeMovementCommanded","CS",1, +"(0022,0006)","Patient Eye Movement Command Code Sequence","PatientEyeMovementCommandCodeSequence","SQ",1, +"(0022,0007)","Spherical Lens Power","SphericalLensPower","FL",1, +"(0022,0008)","Cylinder Lens Power","CylinderLensPower","FL",1, +"(0022,0009)","Cylinder Axis","CylinderAxis","FL",1, +"(0022,000A)","Emmetropic Magnification","EmmetropicMagnification","FL",1, +"(0022,000B)","Intra Ocular Pressure","IntraOcularPressure","FL",1, +"(0022,000C)","Horizontal Field of View","HorizontalFieldOfView","FL",1, +"(0022,000D)","Pupil Dilated","PupilDilated","CS",1, +"(0022,000E)","Degree of Dilation","DegreeOfDilation","FL",1, +"(0022,0010)","Stereo Baseline Angle","StereoBaselineAngle","FL",1, +"(0022,0011)","Stereo Baseline Displacement","StereoBaselineDisplacement","FL",1, +"(0022,0012)","Stereo Horizontal Pixel Offset","StereoHorizontalPixelOffset","FL",1, +"(0022,0013)","Stereo Vertical Pixel Offset","StereoVerticalPixelOffset","FL",1, +"(0022,0014)","Stereo Rotation","StereoRotation","FL",1, +"(0022,0015)","Acquisition Device Type Code Sequence","AcquisitionDeviceTypeCodeSequence","SQ",1, +"(0022,0016)","Illumination Type Code Sequence","IlluminationTypeCodeSequence","SQ",1, +"(0022,0017)","Light Path Filter Type Stack Code Sequence","LightPathFilterTypeStackCodeSequence","SQ",1, +"(0022,0018)","Image Path Filter Type Stack Code Sequence","ImagePathFilterTypeStackCodeSequence","SQ",1, +"(0022,0019)","Lenses Code Sequence","LensesCodeSequence","SQ",1, +"(0022,001A)","Channel Description Code Sequence","ChannelDescriptionCodeSequence","SQ",1, +"(0022,001B)","Refractive State Sequence","RefractiveStateSequence","SQ",1, +"(0022,001C)","Mydriatic Agent Code Sequence","MydriaticAgentCodeSequence","SQ",1, +"(0022,001D)","Relative Image Position Code Sequence","RelativeImagePositionCodeSequence","SQ",1, +"(0022,001E)","Camera Angle of View","CameraAngleOfView","FL",1, +"(0022,0020)","Stereo Pairs Sequence","StereoPairsSequence","SQ",1, +"(0022,0021)","Left Image Sequence","LeftImageSequence","SQ",1, +"(0022,0022)","Right Image Sequence","RightImageSequence","SQ",1, +"(0022,0030)","Axial Length of the Eye","AxialLengthOfTheEye","FL",1, +"(0022,0031)","Ophthalmic Frame Location Sequence","OphthalmicFrameLocationSequence","SQ",1, +"(0022,0032)","Reference Coordinates","ReferenceCoordinates","FL","2-2n", +"(0022,0035)","Depth Spatial Resolution","DepthSpatialResolution","FL",1, +"(0022,0036)","Maximum Depth Distortion","MaximumDepthDistortion","FL",1, +"(0022,0037)","Along-scan Spatial Resolution","AlongScanSpatialResolution","FL",1, +"(0022,0038)","Maximum Along-scan Distortion","MaximumAlongScanDistortion","FL",1, +"(0022,0039)","Ophthalmic Image Orientation","OphthalmicImageOrientation","CS",1, +"(0022,0041)","Depth of Transverse Image","DepthOfTransverseImage","FL",1, +"(0022,0042)","Mydriatic Agent Concentration Units Sequence","MydriaticAgentConcentrationUnitsSequence","SQ",1, +"(0022,0048)","Across-scan Spatial Resolution","AcrossScanSpatialResolution","FL",1, +"(0022,0049)","Maximum Across-scan Distortion","MaximumAcrossScanDistortion","FL",1, +"(0022,004E)","Mydriatic Agent Concentration","MydriaticAgentConcentration","DS",1, +"(0022,0055)","Illumination Wave Length","IlluminationWaveLength","FL",1, +"(0022,0056)","Illumination Power","IlluminationPower","FL",1, +"(0022,0057)","Illumination Bandwidth","IlluminationBandwidth","FL",1, +"(0022,0058)","Mydriatic Agent Sequence","MydriaticAgentSequence","SQ",1, +"(0022,1007)","Ophthalmic Axial Measurements Right Eye Sequence","OphthalmicAxialMeasurementsRightEyeSequence","SQ",1, +"(0022,1008)","Ophthalmic Axial Measurements Left Eye Sequence","OphthalmicAxialMeasurementsLeftEyeSequence","SQ",1, +"(0022,1010)","Ophthalmic Axial Length Measurements Type","OphthalmicAxialLengthMeasurementsType","CS",1, +"(0022,1019)","Ophthalmic Axial Length ","OphthalmicAxialLength","FL",1, +"(0022,1024)","Lens Status Code Sequence","LensStatusCodeSequence","SQ",1, +"(0022,1025)","Vitreous Status Code Sequence","VitreousStatusCodeSequence","SQ",1, +"(0022,1028)","IOL Formula Code Sequence","IOLFormulaCodeSequence","SQ",1, +"(0022,1029)","IOL Formula Detail","IOLFormulaDetail","LO",1, +"(0022,1033)","Keratometer Index","KeratometerIndex","FL",1, +"(0022,1035)","Source of Ophthalmic Axial Length Code Sequence","SourceOfOphthalmicAxialLengthCodeSequence","SQ",1, +"(0022,1037)","Target Refraction ","TargetRefraction","FL",1, +"(0022,1039)","Refractive Procedure Occurred","RefractiveProcedureOccurred","CS",1, +"(0022,1040)","Refractive Surgery Type Code Sequence","RefractiveSurgeryTypeCodeSequence","SQ",1, +"(0022,1044)","Ophthalmic Ultrasound Axial Measurements Type Code Sequence","OphthalmicUltrasoundAxialMeasurementsTypeCodeSequence","SQ",1, +"(0022,1050)","Ophthalmic Axial Length Measurements Sequence","OphthalmicAxialLengthMeasurementsSequence","SQ",1, +"(0022,1053)","IOL Power","IOLPower","FL",1, +"(0022,1054)","Predicted Refractive Error","PredictedRefractiveError","FL",1, +"(0022,1059)","Ophthalmic Axial Length Velocity","OphthalmicAxialLengthVelocity","FL",1, +"(0022,1065)","Lens Status Description","LensStatusDescription","LO",1, +"(0022,1066)","Vitreous Status Description","VitreousStatusDescription","LO",1, +"(0022,1090)","IOL Power Sequence","IOLPowerSequence","SQ",1, +"(0022,1092)","Lens Constant Sequence","LensConstantSequence","SQ",1, +"(0022,1093)","IOL Manufacturer","IOLManufacturer","LO",1, +"(0022,1094)","Lens Constant Description","LensConstantDescription","LO",1, +"(0022,1096)","Keratometry Measurement Type Code Sequence ","KeratometryMeasurementTypeCodeSequence","SQ",1, +"(0022,1100)","Referenced Ophthalmic Axial Measurements Sequence","ReferencedOphthalmicAxialMeasurementsSequence","SQ",1, +"(0022,1101)","Ophthalmic Axial Length Measurements Segment Name Code Sequence","OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence","SQ",1, +"(0022,1103)","Refractive Error Before Refractive Surgery Code Sequence","RefractiveErrorBeforeRefractiveSurgeryCodeSequence","SQ",1, +"(0022,1121)","IOL Power For Exact Emmetropia","IOLPowerForExactEmmetropia","FL",1, +"(0022,1122)","IOL Power For Exact Target Refraction","IOLPowerForExactTargetRefraction","FL",1, +"(0022,1125)","Anterior Chamber Depth Definition Code Sequence","AnteriorChamberDepthDefinitionCodeSequence","SQ",1, +"(0022,1130)","Lens Thickness","LensThickness","FL",1, +"(0022,1131)","Anterior Chamber Depth","AnteriorChamberDepth","FL",1, +"(0022,1132)","Source of Lens Thickness Data Code Sequence","SourceOfLensThicknessDataCodeSequence","SQ",1, +"(0022,1133)","Source of Anterior Chamber Depth Data Code Sequence","SourceOfAnteriorChamberDepthDataCodeSequence","SQ",1, +"(0022,1135)","Source of Refractive Error Data Code Sequence","SourceOfRefractiveErrorDataCodeSequence","SQ",1, +"(0022,1140)","Ophthalmic Axial Length Measurement Modified","OphthalmicAxialLengthMeasurementModified","CS",1, +"(0022,1150)","Ophthalmic Axial Length Data Source Code Sequence","OphthalmicAxialLengthDataSourceCodeSequence","SQ",1, +"(0022,1153)","Ophthalmic Axial Length Acquisition Method Code Sequence","OphthalmicAxialLengthAcquisitionMethodCodeSequence","SQ",1, +"(0022,1155)","Signal to Noise Ratio","SignalToNoiseRatio","FL",1, +"(0022,1159)","Ophthalmic Axial Length Data Source Description","OphthalmicAxialLengthDataSourceDescription","LO",1, +"(0022,1210)","Ophthalmic Axial Length Measurements Total Length Sequence","OphthalmicAxialLengthMeasurementsTotalLengthSequence","SQ",1, +"(0022,1211)","Ophthalmic Axial Length Measurements Segmental Length Sequence","OphthalmicAxialLengthMeasurementsSegmentalLengthSequence","SQ",1, +"(0022,1212)","Ophthalmic Axial Length Measurements Length Summation Sequence","OphthalmicAxialLengthMeasurementsLengthSummationSequence","SQ",1, +"(0022,1220)","Ultrasound Ophthalmic Axial Length Measurements Sequence","UltrasoundOphthalmicAxialLengthMeasurementsSequence","SQ",1, +"(0022,1225)","Optical Ophthalmic Axial Length Measurements Sequence","OpticalOphthalmicAxialLengthMeasurementsSequence","SQ",1, +"(0022,1230)","Ultrasound Selected Ophthalmic Axial Length Sequence","UltrasoundSelectedOphthalmicAxialLengthSequence","SQ",1, +"(0022,1250)","Ophthalmic Axial Length Selection Method Code Sequence","OphthalmicAxialLengthSelectionMethodCodeSequence","SQ",1, +"(0022,1255)","Optical Selected Ophthalmic Axial Length Sequence","OpticalSelectedOphthalmicAxialLengthSequence","SQ",1, +"(0022,1257)","Selected Segmental Ophthalmic Axial Length Sequence","SelectedSegmentalOphthalmicAxialLengthSequence","SQ",1, +"(0022,1260)","Selected Total Ophthalmic Axial Length Sequence","SelectedTotalOphthalmicAxialLengthSequence","SQ",1, +"(0022,1262)","Ophthalmic Axial Length Quality Metric Sequence","OphthalmicAxialLengthQualityMetricSequence","SQ",1, +"(0022,1273)","Ophthalmic Axial Length Quality Metric Type Description","OphthalmicAxialLengthQualityMetricTypeDescription","LO",1, +"(0022,1300)","Intraocular Lens Calculations Right Eye Sequence","IntraocularLensCalculationsRightEyeSequence","SQ",1, +"(0022,1310)","Intraocular Lens Calculations Left Eye Sequence","IntraocularLensCalculationsLeftEyeSequence","SQ",1, +"(0022,1330)","Referenced Ophthalmic Axial Length Measurement QC ImageSequence","ReferencedOphthalmicAxialLengthMeasurementQCImage","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0024,0010)","Visual Field Horizontal Extent ","VisualFieldHorizontalExtent","FL",1, +"(0024,0011)","Visual Field Vertical Extent","VisualFieldVerticalExtent","FL",1, +"(0024,0012)","Visual Field Shape","VisualFieldShape","CS",1, +"(0024,0016)","Screening Test Mode Code Sequence","ScreeningTestModeCodeSequence","SQ",1, +"(0024,0018)","Maximum Stimulus Luminance","MaximumStimulusLuminance","FL",1, +"(0024,0020)","Background Luminance ","BackgroundLuminance","FL",1, +"(0024,0021)","Stimulus Color Code Sequence","StimulusColorCodeSequence","SQ",1, +"(0024,0024)","Background Illumination Color Code Sequence ","BackgroundIlluminationColorCodeSequence","SQ",1, +"(0024,0025)","Stimulus Area","StimulusArea","FL",1, +"(0024,0028)","Stimulus Presentation Time","StimulusPresentationTime","FL",1, +"(0024,0032)","Fixation Sequence","FixationSequence","SQ",1, +"(0024,0033)","Fixation Monitoring Code Sequence","FixationMonitoringCodeSequence","SQ",1, +"(0024,0034)","Visual Field Catch Trial Sequence","VisualFieldCatchTrialSequence","SQ",1, +"(0024,0035)","Fixation Checked Quantity","FixationCheckedQuantity","US",1, +"(0024,0036)","Patient Not Properly Fixated Quantity","PatientNotProperlyFixatedQuantity","US",1, +"(0024,0037)","Presented Stimuli Data Flag","PresentedDataFlag","CS",1, +"(0024,0038)","Number of Visual Stimuli","NumberOfVisualStimuli","US",1, +"(0024,0039)","Excessive Fixation Losses Data Flag","ExcessiveFixationLossesDataFlag","CS",1, +"(0024,0040)","Excessive Fixation Losses","ExcessiveFixationLosses","CS",1, +"(0024,0042)","Stimuli Retesting ","StimuliRetesting","US",1, +"(0024,0044)","Comments on Patient’s Performance of Visual Field","CommentsOnPatientPerformanceOfVisualField","LT",1, +"(0024,0045)","False Negatives Estimate Flag","FalseNegativesEstimateFlag","CS",1, +"(0024,0046)","False Negatives Estimate","FalseNegativesEstimate","FL",1, +"(0024,0048)","Negative Catch Trials ","NegativeCatchTrials","US",1, +"(0024,0050)","False Negatives ","FalseNegatives","US",1, +"(0024,0051)","Excessive False Negatives Data Flag","ExcessiveFalseNegativesDataFlag","CS",1, +"(0024,0052)","Excessive False Negatives","ExcessiveFalseNegatives","CS",1, +"(0024,0053)","False Positives Estimate Flag","FalsePositivesEstimateFlag","CS",1, +"(0024,0054)","False Positives Estimate","FalsePositivesEstimate","FL",1, +"(0024,0055)","Catch Trials Data Flag","CatchTrialsDataFlag","CS",1, +"(0024,0056)","Positive Catch Trials ","PositiveCatchTrials","US",1, +"(0024,0057)","Test Point Normals Data Flag","TestPointNormalsDataFlag","CS",1, +"(0024,0058)","Test Point Normals Sequence","TestPointNormalsSequence","SQ",1, +"(0024,0059)","Global Deviation Probability Normals Flag","GlobalDeviationProbabilityNormalsFlag","CS",1, +"(0024,0060)","False Positives ","FalsePositives","US",1, +"(0024,0061)","Excessive False Positives Data Flag","ExcessiveFalsePositivesDataFlag","CS",1, +"(0024,0062)","Excessive False Positives","ExcessiveFalsePositives","CS",1, +"(0024,0063)","Visual Field Test Normals Flag","VisualFieldTestNormalsFlag","CS",1, +"(0024,0064)","Results Normals Sequence","ResultsNormalsSequence","SQ",1, +"(0024,0065)","Age Corrected Sensitivity Deviation Algorithm Sequence","AgeCorrectedSensitivityDeviationAlgorithmSequence","SQ",1, +"(0024,0066)","Global Deviation From Normal","GlobalDeviationFromNormal","FL",1, +"(0024,0067)","Generalized Defect Sensitivity Deviation Algorithm Sequence","GeneralizedDefectSensitivityDeviationAlgorithmSequence","SQ",1, +"(0024,0068)","Localized Deviation from Normal","LocalizedDeviationfromNormal","FL",1, +"(0024,0069)","Patient Reliability Indicator ","PatientReliabilityIndicator","LO",1, +"(0024,0070)","Visual Field Mean Sensitivity","VisualFieldMeanSensitivity","FL",1, +"(0024,0071)","Global Deviation Probability","GlobalDeviationProbability","FL",1, +"(0024,0072)","Local Deviation Probability Normals Flag","LocalDeviationProbabilityNormalsFlag","CS",1, +"(0024,0073)","Localized Deviation Probability","LocalizedDeviationProbability","FL",1, +"(0024,0074)","Short Term Fluctuation Calculated","ShortTermFluctuationCalculated","CS",1, +"(0024,0075)","Short Term Fluctuation","ShortTermFluctuation","FL",1, +"(0024,0076)","Short Term Fluctuation Probability Calculated","ShortTermFluctuationProbabilityCalculated","CS",1, +"(0024,0077)","Short Term Fluctuation Probability","ShortTermFluctuationProbability","FL",1, +"(0024,0078)","Corrected Localized Deviation From Normal Calculated","CorrectedLocalizedDeviationFromNormalCalculated","CS",1, +"(0024,0079)","Corrected Localized Deviation From Normal","CorrectedLocalizedDeviationFromNormal","FL",1, +"(0024,0080)","Corrected Localized Deviation From Normal Probability Calculated","CorrectedLocalizedDeviationFromNormalProbabilityCalculated","CS",1, +"(0024,0081)","Corrected Localized Deviation From Normal Probability","CorrectedLocalizedDeviationFromNormalProbability","FL",1, +"(0024,0083)","Global Deviation Sequence","GlobalDeviation","SQ",1, +"(0024,0085)","Localized Deviation Sequence","LocalizedDeviation","SQ",1, +"(0024,0086)","Foveal Sensitivity Measured","FovealSensitivityMeasured","CS",1, +"(0024,0087)","Foveal Sensitivity","FovealSensitivity","FL",1, +"(0024,0088)","Visual Field Test Duration","VisualFieldTestDuration","FL",1, +"(0024,0089)","Visual Field Test Point Sequence","VisualFieldTestPointSequence","SQ",1, +"(0024,0090)","Visual Field Test Point X-Coordinate","VisualFieldTestPointXCoordinate","FL",1, +"(0024,0091)","Visual Field Test Point Y-Coordinate","VisualFieldTestPointYCoordinate","FL",1, +"(0024,0092)","Age Corrected Sensitivity Deviation Value","AgeCorrectedSensitivityDeviationValue","FL",1, +"(0024,0093)","Stimulus Results","StimulusResults","CS",1, +"(0024,0094)","Sensitivity Value","SensitivityValue","FL",1, +"(0024,0095)","Retest Stimulus Seen","RetestStimulusSeen","CS",1, +"(0024,0096)","Retest Sensitivity Value","RetestSensitivityValue","FL",1, +"(0024,0097)","Visual Field Test Point Normals Sequence","VisualFieldTestPointNormalsSequence","SQ",1, +"(0024,0098)","Quantified Defect","QuantifiedDefect","FL",1, +"(0024,0100)","Age Corrected Sensitivity Deviation Probability Value","AgeCorrectedSensitivityDeviationProbabilityValue","FL",1, +"(0024,0102)","Generalized Defect Corrected Sensitivity Deviation Flag ","GeneralizedDefectCorrectedSensitivityDeviationFlag ","CS",1, +"(0024,0103)","Generalized Defect Corrected Sensitivity Deviation Value ","GeneralizedDefectCorrectedSensitivityDeviationValue ","FL",1, +"(0024,0104)","Generalized Defect Corrected Sensitivity Deviation Probability Value ","GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue","FL",1, +"(0024,0105)","Minimum Sensitivity Value","MinimumSensitivityValue","FL ",1, +"(0024,0106)","Blind Spot Localized","BlindSpotLocalized","CS",1, +"(0024,0107)","Blind Spot X-Coordinate","BlindSpotXCoordinate","FL",1, +"(0024,0108)","Blind Spot Y-Coordinate ","BlindSpotYCoordinate ","FL",1, +"(0024,0110)","Visual Acuity Measurement Sequence","VisualAcuityMeasurementSequence","SQ",1, +"(0024,0112)","Refractive Parameters Used on Patient Sequence ","RefractiveParametersUsedOnPatientSequence","SQ",1, +"(0024,0113)","Measurement Laterality","MeasurementLaterality","CS",1, +"(0024,0114)","Ophthalmic Patient Clinical Information Left Eye Sequence","OphthalmicPatientClinicalInformationLeftEyeSequence","SQ",1, +"(0024,0115)","Ophthalmic Patient Clinical Information Right Eye Sequence","OphthalmicPatientClinicalInformationRightEyeSequence","SQ",1, +"(0024,0117)","Foveal Point Normative Data Flag","FovealPointNormativeDataFlag","CS",1, +"(0024,0118)","Foveal Point Probability Value","FovealPointProbabilityValue","FL",1, +"(0024,0120)","Screening Baseline Measured","ScreeningBaselineMeasured","CS",1, +"(0024,0122)","Screening Baseline Measured Sequence","ScreeningBaselineMeasuredSequence","SQ",1, +"(0024,0124)","Screening Baseline Type","ScreeningBaselineType","CS",1, +"(0024,0126)","Screening Baseline Value","ScreeningBaselineValue","FL",1, +"(0024,0202)","Algorithm Source","AlgorithmSource","LO",1, +"(0024,0306)","Data Set Name","DataSetName","LO",1, +"(0024,0307)","Data Set Version","DataSetVersion","LO",1, +"(0024,0308)","Data Set Source","DataSetSource","LO",1, +"(0024,0309)","Data Set Description","DataSetDescription","LO",1, +"(0024,0317)","Visual Field Test Reliability Global Index Sequence","VisualFieldTestReliabilityGlobalIndexSequence","SQ",1, +"(0024,0320)","Visual Field Global Results Index Sequence","VisualFieldGlobalResultsIndexSequence","SQ",1, +"(0024,0325)","Data Observation Sequence","DataObservationSequence","SQ",1, +"(0024,0338)","Index Normals Flag","IndexNormalsFlag","CS",1, +"(0024,0341)","Index Probability","IndexProbability","FL",1, +"(0024,0344)","Index Probability Sequence","IndexProbabilitySequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0028,0002)","Samples per Pixel","SamplesPerPixel","US",1, +"(0028,0003)","Samples per Pixel Used","SamplesPerPixelUsed","US",1, +"(0028,0004)","Photometric Interpretation","PhotometricInterpretation","CS",1, +"(0028,0005)","Image Dimensions","ImageDimensions","US",1,"RET" +"(0028,0006)","Planar Configuration","PlanarConfiguration","US",1, +"(0028,0008)","Number of Frames","NumberOfFrames","IS",1, +"(0028,0009)","Frame Increment Pointer","FrameIncrementPointer","AT","1-n", +"(0028,000A)","Frame Dimension Pointer","FrameDimensionPointer","AT","1-n", +"(0028,0010)","Rows","Rows","US",1, +"(0028,0011)","Columns","Columns","US",1, +"(0028,0012)","Planes","Planes","US",1,"RET" +"(0028,0014)","Ultrasound Color Data Present","UltrasoundColorDataPresent","US",1, +"(0028,0020)",,,,,"RET" +"(0028,0030)","Pixel Spacing","PixelSpacing","DS",2, +"(0028,0031)","Zoom Factor","ZoomFactor","DS",2, +"(0028,0032)","Zoom Center","ZoomCenter","DS",2, +"(0028,0034)","Pixel Aspect Ratio","PixelAspectRatio","IS",2, +"(0028,0040)","Image Format","ImageFormat","CS",1,"RET" +"(0028,0050)","Manipulated Image","ManipulatedImage","LO","1-n","RET" +"(0028,0051)","Corrected Image","CorrectedImage","CS","1-n", +"(0028,005F)","Compression Recognition Code","CompressionRecognitionCode","LO",1,"RET" +"(0028,0060)","Compression Code","CompressionCode","CS",1,"RET" +"(0028,0061)","Compression Originator","CompressionOriginator","SH",1,"RET" +"(0028,0062)","Compression Label","CompressionLabel","LO",1,"RET" +"(0028,0063)","Compression Description","CompressionDescription","SH",1,"RET" +"(0028,0065)","Compression Sequence","CompressionSequence","CS","1-n","RET" +"(0028,0066)","Compression Step Pointers","CompressionStepPointers","AT","1-n","RET" +"(0028,0068)","Repeat Interval","RepeatInterval","US",1,"RET" +"(0028,0069)","Bits Grouped","BitsGrouped","US",1,"RET" +"(0028,0070)","Perimeter Table","PerimeterTable","US","1-n","RET" +"(0028,0071)","Perimeter Value","PerimeterValue","US or SS",1,"RET" +"(0028,0080)","Predictor Rows","PredictorRows","US",1,"RET" +"(0028,0081)","Predictor Columns","PredictorColumns","US",1,"RET" +"(0028,0082)","Predictor Constants","PredictorConstants","US","1-n","RET" +"(0028,0090)","Blocked Pixels","BlockedPixels","CS",1,"RET" +"(0028,0091)","Block Rows","BlockRows","US",1,"RET" +"(0028,0092)","Block Columns","BlockColumns","US",1,"RET" +"(0028,0093)","Row Overlap","RowOverlap","US",1,"RET" +"(0028,0094)","Column Overlap","ColumnOverlap","US",1,"RET" +"(0028,0100)","Bits Allocated","BitsAllocated","US",1, +"(0028,0101)","Bits Stored","BitsStored","US",1, +"(0028,0102)","High Bit","HighBit","US",1, +"(0028,0103)","Pixel Representation","PixelRepresentation","US",1, +"(0028,0104)","Smallest Valid Pixel Value","SmallestValidPixelValue","US or SS",1,"RET" +"(0028,0105)","Largest Valid Pixel Value","LargestValidPixelValue","US or SS",1,"RET" +"(0028,0106)","Smallest Image Pixel Value","SmallestImagePixelValue","US or SS",1, +"(0028,0107)","Largest Image Pixel Value","LargestImagePixelValue","US or SS",1, +"(0028,0108)","Smallest Pixel Value in Series","SmallestPixelValueInSeries","US or SS",1, +"(0028,0109)","Largest Pixel Value in Series","LargestPixelValueInSeries","US or SS",1, +"(0028,0110)","Smallest Image Pixel Value in Plane","SmallestImagePixelValueInPlane","US or SS",1,"RET" +"(0028,0111)","Largest Image Pixel Value in Plane","LargestImagePixelValueInPlane","US or SS",1,"RET" +"(0028,0120)","Pixel Padding Value","PixelPaddingValue","US or SS",1, +"(0028,0121)","Pixel Padding Range Limit","PixelPaddingRangeLimit","US or SS",1, +"(0028,0200)","Image Location","ImageLocation","US",1,"RET" +"(0028,0300)","Quality Control Image","QualityControlImage","CS",1, +"(0028,0301)","Burned In Annotation","BurnedInAnnotation","CS",1, +"(0028,0302)","Recognizable Visual Features","RecognizableVisualFeatures","CS",1, +"(0028,0303)","Longitudinal Temporal Information Modified","LongitudinalTemporalInformationModified","CS",1, +"(0028,0400)","Transform Label","TransformLabel","LO",1,"RET" +"(0028,0401)","Transform Version Number","TransformVersionNumber","LO",1,"RET" +"(0028,0402)","Number of Transform Steps","NumberOfTransformSteps","US",1,"RET" +"(0028,0403)","Sequence of Compressed Data","SequenceOfCompressedData","LO","1-n","RET" +"(0028,0404)","Details of Coefficients","DetailsOfCoefficients","AT","1-n","RET" +"(0028,04x0)","Rows For Nth Order Coefficients","RowsForNthOrderCoefficients","US",1,"RET" +"(0028,04x1)","Columns For Nth Order Coefficients","ColumnsForNthOrderCoefficients","US",1,"RET" +"(0028,04x2)","Coefficient Coding","CoefficientCoding","LO","1-n","RET" +"(0028,04x3)","Coefficient Coding Pointers","CoefficientCodingPointers","AT","1-n","RET" +"(0028,0700)","DCT Label","DCTLabel","LO",1,"RET" +"(0028,0701)","Data Block Description","DataBlockDescription","CS","1-n","RET" +"(0028,0702)","Data Block","DataBlock","AT","1-n","RET" +"(0028,0710)","Normalization Factor Format","NormalizationFactorFormat","US",1,"RET" +"(0028,0720)","Zonal Map Number Format","ZonalMapNumberFormat","US",1,"RET" +"(0028,0721)","Zonal Map Location","ZonalMapLocation","AT","1-n","RET" +"(0028,0722)","Zonal Map Format","ZonalMapFormat","US",1,"RET" +"(0028,0730)","Adaptive Map Format","AdaptiveMapFormat","US",1,"RET" +"(0028,0740)","Code Number Format","CodeNumberFormat","US",1,"RET" +"(0028,08x0)","Code Label","CodeLabel","CS","1-n","RET" +"(0028,08x2)","Number of Tables","NumberOfTables","US",1,"RET" +"(0028,08x3)","Code Table Location","CodeTableLocation","AT","1-n","RET" +"(0028,08x4)","Bits For Code Word","BitsForCodeWord","US",1,"RET" +"(0028,08x8)","Image Data Location","ImageDataLocation","AT","1-n","RET" +"(0028,0A02)","Pixel Spacing Calibration Type","PixelSpacingCalibrationType","CS",1, +"(0028,0A04)","Pixel Spacing Calibration Description","PixelSpacingCalibrationDescription","LO",1, +"(0028,1040)","Pixel Intensity Relationship","PixelIntensityRelationship","CS",1, +"(0028,1041)","Pixel Intensity Relationship Sign","PixelIntensityRelationshipSign","SS",1, +"(0028,1050)","Window Center","WindowCenter","DS","1-n", +"(0028,1051)","Window Width","WindowWidth","DS","1-n", +"(0028,1052)","Rescale Intercept","RescaleIntercept","DS",1, +"(0028,1053)","Rescale Slope","RescaleSlope","DS",1, +"(0028,1054)","Rescale Type","RescaleType","LO",1, +"(0028,1055)","Window Center & Width Explanation","WindowCenterWidthExplanation","LO","1-n", +"(0028,1056)","VOI LUT Function","VOILUTFunction","CS",1, +"(0028,1080)","Gray Scale","GrayScale","CS",1,"RET" +"(0028,1090)","Recommended Viewing Mode","RecommendedViewingMode","CS",1, +"(0028,1100)","Gray Lookup Table Descriptor","GrayLookupTableDescriptor","US or SS",3,"RET" +"(0028,1101)","Red Palette Color Lookup Table Descriptor","RedPaletteColorLookupTableDescriptor","US or SS",3, +"(0028,1102)","Green Palette Color Lookup Table Descriptor","GreenPaletteColorLookupTableDescriptor","US or SS",3, +"(0028,1103)","Blue Palette Color Lookup Table Descriptor","BluePaletteColorLookupTableDescriptor","US or SS",3, +"(0028,1104)","Alpha Palette Color Lookup Table Descriptor","AlphaPaletteColorLookupTableDescriptor","US",3, +"(0028,1111)","Large Red Palette Color Lookup Table Descriptor","LargeRedPaletteColorLookupTableDescriptor","US or SS",4,"RET" +"(0028,1112)","Large Green Palette Color Lookup Table Descriptor","LargeGreenPaletteColorLookupTableDescriptor","US or SS",4,"RET" +"(0028,1113)","Large Blue Palette Color Lookup Table Descriptor","LargeBluePaletteColorLookupTableDescriptor","US or SS",4,"RET" +"(0028,1199)","Palette Color Lookup Table UID","PaletteColorLookupTableUID","UI",1, +"(0028,1200)","Gray Lookup Table Data","GrayLookupTableData","US or SS or OW","1-n 1","RET" +"(0028,1201)","Red Palette Color Lookup Table Data","RedPaletteColorLookupTableData","OW",1, +"(0028,1202)","Green Palette Color Lookup Table Data","GreenPaletteColorLookupTableData","OW",1, +"(0028,1203)","Blue Palette Color Lookup Table Data","BluePaletteColorLookupTableData","OW",1, +"(0028,1204)","Alpha Palette Color Lookup Table Data","AlphaPaletteColorLookupTableData","OW",1, +"(0028,1211)","Large Red Palette Color Lookup Table Data","LargeRedPaletteColorLookupTableData","OW",1,"RET" +"(0028,1212)","Large Green Palette Color Lookup Table Data","LargeGreenPaletteColorLookupTableData","OW",1,"RET" +"(0028,1213)","Large Blue Palette Color Lookup Table Data","LargeBluePaletteColorLookupTableData","OW",1,"RET" +"(0028,1214)","Large Palette Color Lookup Table UID","LargePaletteColorLookupTableUID","UI",1,"RET" +"(0028,1221)","Segmented Red Palette Color Lookup Table Data","SegmentedRedPaletteColorLookupTableData","OW",1, +"(0028,1222)","Segmented Green Palette Color Lookup Table Data","SegmentedGreenPaletteColorLookupTableData","OW",1, +"(0028,1223)","Segmented Blue Palette Color Lookup Table Data","SegmentedBluePaletteColorLookupTableData","OW",1, +"(0028,1300)","Breast Implant Present","BreastImplantPresent","CS",1, +"(0028,1350)","Partial View","PartialView","CS",1, +"(0028,1351)","Partial View Description","PartialViewDescription","ST",1, +"(0028,1352)","Partial View Code Sequence","PartialViewCodeSequence","SQ",1, +"(0028,135A)","Spatial Locations Preserved","SpatialLocationsPreserved","CS",1, +"(0028,1401)","Data Frame Assignment Sequence","DataFrameAssignmentSequence","SQ",1, +"(0028,1402)","Data Path Assignment","DataPathAssignment","CS",1, +"(0028,1403)","Bits Mapped to Color Lookup Table","BitsMappedToColorLookupTable","US",1, +"(0028,1404)","Blending LUT 1 Sequence","BlendingLUT1Sequence","SQ",1, +"(0028,1405)","Blending LUT 1 Transfer Function","BlendingLUT1TransferFunction","CS",1, +"(0028,1406)","Blending Weight Constant","BlendingWeightConstant","FD",1, +"(0028,1407)","Blending Lookup Table Descriptor","BlendingLookupTableDescriptor","US",3, +"(0028,1408)","Blending Lookup Table Data","BlendingLookupTableData","OW",1, +"(0028,140B)","Enhanced Palette Color Lookup Table Sequence","EnhancedPaletteColorLookupTableSequence","SQ",1, +"(0028,140C)","Blending LUT 2 Sequence","BlendingLUT2Sequence","SQ",1, +"(0028,140D)","Blending LUT 2 Transfer Function","BlendingLUT2TransferFunction","CS",1, +"(0028,140E)","Data Path ID","DataPathID","CS",1, +"(0028,140F)","RGB LUT Transfer Function","RGBLUTTransferFunction","CS",1, +"(0028,1410)","Alpha LUT Transfer Function","AlphaLUTTransferFunction","CS",1, +"(0028,2000)","ICC Profile","ICCProfile","OB",1, +"(0028,2110)","Lossy Image Compression","LossyImageCompression","CS",1, +"(0028,2112)","Lossy Image Compression Ratio","LossyImageCompressionRatio","DS","1-n", +"(0028,2114)","Lossy Image Compression Method","LossyImageCompressionMethod","CS","1-n", +"(0028,3000)","Modality LUT Sequence","ModalityLUTSequence","SQ",1, +"(0028,3002)","LUT Descriptor","LUTDescriptor","US or SS",3, +"(0028,3003)","LUT Explanation","LUTExplanation","LO",1, +"(0028,3004)","Modality LUT Type","ModalityLUTType","LO",1, +"(0028,3006)","LUT Data","LUTData","US or OW","1-n 1", +"(0028,3010)","VOI LUT Sequence","VOILUTSequence","SQ",1, +"(0028,3110)","Softcopy VOI LUT Sequence","SoftcopyVOILUTSequence","SQ",1, +"(0028,4000)","Image Presentation Comments","ImagePresentationComments","LT",1,"RET" +"(0028,5000)","Bi-Plane Acquisition Sequence","BiPlaneAcquisitionSequence","SQ",1,"RET" +"(0028,6010)","Representative Frame Number","RepresentativeFrameNumber","US",1, +"(0028,6020)","Frame Numbers of Interest (FOI) ","FrameNumbersOfInterest","US","1-n", +"(0028,6022)","Frame of Interest Description","FrameOfInterestDescription","LO","1-n", +"(0028,6023)","Frame of Interest Type","FrameOfInterestType","CS","1-n", +"(0028,6030)","Mask Pointer(s)","MaskPointers","US","1-n","RET" +"(0028,6040)","R Wave Pointer","RWavePointer","US","1-n", +"(0028,6100)","Mask Subtraction Sequence","MaskSubtractionSequence","SQ",1, +"(0028,6101)","Mask Operation","MaskOperation","CS",1, +"(0028,6102)","Applicable Frame Range","ApplicableFrameRange","US","2-2n", +"(0028,6110)","Mask Frame Numbers","MaskFrameNumbers","US","1-n", +"(0028,6112)","Contrast Frame Averaging","ContrastFrameAveraging","US",1, +"(0028,6114)","Mask Sub-pixel Shift","MaskSubPixelShift","FL",2, +"(0028,6120)","TID Offset","TIDOffset","SS",1, +"(0028,6190)","Mask Operation Explanation","MaskOperationExplanation","ST",1, +"(0028,7FE0)","Pixel Data Provider URL","PixelDataProviderURL","UT",1, +"(0028,9001)","Data Point Rows","DataPointRows","UL",1, +"(0028,9002)","Data Point Columns","DataPointColumns","UL",1, +"(0028,9003)","Signal Domain Columns","SignalDomainColumns","CS",1, +"(0028,9099)","Largest Monochrome Pixel Value","LargestMonochromePixelValue","US",1,"RET" +"(0028,9108)","Data Representation","DataRepresentation","CS",1, +"(0028,9110)","Pixel Measures Sequence","PixelMeasuresSequence","SQ",1, +"(0028,9132)","Frame VOI LUT Sequence","FrameVOILUTSequence","SQ",1, +"(0028,9145)","Pixel Value Transformation Sequence","PixelValueTransformationSequence","SQ",1, +"(0028,9235)","Signal Domain Rows","SignalDomainRows","CS",1, +"(0028,9411)","Display Filter Percentage","DisplayFilterPercentage","FL",1, +"(0028,9415)","Frame Pixel Shift Sequence","FramePixelShiftSequence","SQ",1, +"(0028,9416)","Subtraction Item ID","SubtractionItemID","US",1, +"(0028,9422)","Pixel Intensity Relationship LUT Sequence","PixelIntensityRelationshipLUTSequence","SQ",1, +"(0028,9443)","Frame Pixel Data Properties Sequence","FramePixelDataPropertiesSequence","SQ",1, +"(0028,9444)","Geometrical Properties","GeometricalProperties","CS",1, +"(0028,9445)","Geometric Maximum Distortion","GeometricMaximumDistortion","FL",1, +"(0028,9446)","Image Processing Applied","ImageProcessingApplied","CS","1-n", +"(0028,9454)","Mask Selection Mode","MaskSelectionMode","CS",1, +"(0028,9474)","LUT Function","LUTFunction","CS",1, +"(0028,9478)","Mask Visibility Percentage","MaskVisibilityPercentage","FL",1, +"(0028,9501)","Pixel Shift Sequence","PixelShiftSequence","SQ",1, +"(0028,9502)","Region Pixel Shift Sequence","RegionPixelShiftSequence","SQ",1, +"(0028,9503)","Vertices of the Region","VerticesOfTheRegion","SS","2-2n", +"(0028,9505)","Multi-frame Presentation Sequence","MultiFramePresentationSequence","SQ",1, +"(0028,9506)","Pixel Shift Frame Range","PixelShiftFrameRange","US","2-2n", +"(0028,9507)","LUT Frame Range","LUTFrameRange","US","2-2n", +"(0028,9520)","Image to Equipment Mapping Matrix","ImageToEquipmentMappingMatrix","DS",16, +"(0028,9537)","Equipment Coordinate System Identification","EquipmentCoordinateSystemIdentification","CS",1, +"Tag","Name","Keyword","VR","VM", +"(0032,000A)","Study Status ID","StudyStatusID","CS",1,"RET" +"(0032,000C)","Study Priority ID","StudyPriorityID","CS",1,"RET" +"(0032,0012)","Study ID Issuer","StudyIDIssuer","LO",1,"RET" +"(0032,0032)","Study Verified Date","StudyVerifiedDate","DA",1,"RET" +"(0032,0033)","Study Verified Time","StudyVerifiedTime","TM",1,"RET" +"(0032,0034)","Study Read Date","StudyReadDate","DA",1,"RET" +"(0032,0035)","Study Read Time","StudyReadTime","TM",1,"RET" +"(0032,1000)","Scheduled Study Start Date","ScheduledStudyStartDate","DA",1,"RET" +"(0032,1001)","Scheduled Study Start Time","ScheduledStudyStartTime","TM",1,"RET" +"(0032,1010)","Scheduled Study Stop Date","ScheduledStudyStopDate","DA",1,"RET" +"(0032,1011)","Scheduled Study Stop Time","ScheduledStudyStopTime","TM",1,"RET" +"(0032,1020)","Scheduled Study Location","ScheduledStudyLocation","LO",1,"RET" +"(0032,1021)","Scheduled Study Location AE Title","ScheduledStudyLocationAETitle","AE","1-n","RET" +"(0032,1030)","Reason for Study","ReasonForStudy","LO",1,"RET" +"(0032,1031)","Requesting Physician Identification Sequence","RequestingPhysicianIdentificationSequence","SQ",1, +"(0032,1032)","Requesting Physician","RequestingPhysician","PN",1, +"(0032,1033)","Requesting Service","RequestingService","LO",1, +"(0032,1034)","Requesting Service Code Sequence","RequestingServiceCodeSequence","SQ",1, +"(0032,1040)","Study Arrival Date","StudyArrivalDate","DA",1,"RET" +"(0032,1041)","Study Arrival Time","StudyArrivalTime","TM",1,"RET" +"(0032,1050)","Study Completion Date","StudyCompletionDate","DA",1,"RET" +"(0032,1051)","Study Completion Time","StudyCompletionTime","TM",1,"RET" +"(0032,1055)","Study Component Status ID","StudyComponentStatusID","CS",1,"RET" +"(0032,1060)","Requested Procedure Description","RequestedProcedureDescription","LO",1, +"(0032,1064)","Requested Procedure Code Sequence","RequestedProcedureCodeSequence","SQ",1, +"(0032,1070)","Requested Contrast Agent","RequestedContrastAgent","LO",1, +"(0032,4000)","Study Comments","StudyComments","LT",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0038,0004)","Referenced Patient Alias Sequence","ReferencedPatientAliasSequence","SQ",1, +"(0038,0008)","Visit Status ID","VisitStatusID","CS",1, +"(0038,0010)","Admission ID","AdmissionID","LO",1, +"(0038,0011)","Issuer of Admission ID","IssuerOfAdmissionID","LO",1,"RET" +"(0038,0014)","Issuer of Admission ID Sequence","IssuerOfAdmissionIDSequence","SQ",1, +"(0038,0016)","Route of Admissions","RouteOfAdmissions","LO",1, +"(0038,001A)","Scheduled Admission Date","ScheduledAdmissionDate","DA",1,"RET" +"(0038,001B)","Scheduled Admission Time","ScheduledAdmissionTime","TM",1,"RET" +"(0038,001C)","Scheduled Discharge Date","ScheduledDischargeDate","DA",1,"RET" +"(0038,001D)","Scheduled Discharge Time","ScheduledDischargeTime","TM",1,"RET" +"(0038,001E)","Scheduled Patient Institution Residence","ScheduledPatientInstitutionResidence","LO",1,"RET" +"(0038,0020)","Admitting Date","AdmittingDate","DA",1, +"(0038,0021)","Admitting Time","AdmittingTime","TM",1, +"(0038,0030)","Discharge Date","DischargeDate","DA",1,"RET" +"(0038,0032)","Discharge Time","DischargeTime","TM",1,"RET" +"(0038,0040)","Discharge Diagnosis Description","DischargeDiagnosisDescription","LO",1,"RET" +"(0038,0044)","Discharge Diagnosis Code Sequence","DischargeDiagnosisCodeSequence","SQ",1,"RET" +"(0038,0050)","Special Needs","SpecialNeeds","LO",1, +"(0038,0060)","Service Episode ID","ServiceEpisodeID","LO",1, +"(0038,0061)","Issuer of Service Episode ID","IssuerOfServiceEpisodeID","LO",1,"RET" +"(0038,0062)","Service Episode Description","ServiceEpisodeDescription","LO",1, +"(0038,0064)","Issuer of Service Episode ID Sequence","IssuerOfServiceEpisodeIDSequence","SQ",1, +"(0038,0100)","Pertinent Documents Sequence","PertinentDocumentsSequence","SQ",1, +"(0038,0300)","Current Patient Location","CurrentPatientLocation","LO",1, +"(0038,0400)","Patient’s Institution Residence","PatientInstitutionResidence","LO",1, +"(0038,0500)","Patient State","PatientState","LO",1, +"(0038,0502)","Patient Clinical Trial Participation Sequence","PatientClinicalTrialParticipationSequence","SQ",1, +"(0038,4000)","Visit Comments","VisitComments","LT",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(003A,0004)","Waveform Originality","WaveformOriginality","CS",1, +"(003A,0005)","Number of Waveform Channels ","NumberOfWaveformChannels","US",1, +"(003A,0010)","Number of Waveform Samples ","NumberOfWaveformSamples","UL",1, +"(003A,001A)","Sampling Frequency ","SamplingFrequency","DS",1, +"(003A,0020)","Multiplex Group Label ","MultiplexGroupLabel","SH",1, +"(003A,0200)","Channel Definition Sequence","ChannelDefinitionSequence","SQ",1, +"(003A,0202)","Waveform Channel Number ","WaveformChannelNumber","IS",1, +"(003A,0203)","Channel Label","ChannelLabel","SH",1, +"(003A,0205)","Channel Status","ChannelStatus","CS","1-n", +"(003A,0208)","Channel Source Sequence","ChannelSourceSequence","SQ",1, +"(003A,0209)","Channel Source Modifiers Sequence","ChannelSourceModifiersSequence","SQ",1, +"(003A,020A)","Source Waveform Sequence","SourceWaveformSequence","SQ",1, +"(003A,020C)","Channel Derivation Description","ChannelDerivationDescription","LO",1, +"(003A,0210)","Channel Sensitivity ","ChannelSensitivity","DS",1, +"(003A,0211)","Channel Sensitivity Units Sequence","ChannelSensitivityUnitsSequence","SQ",1, +"(003A,0212)","Channel Sensitivity Correction Factor","ChannelSensitivityCorrectionFactor","DS",1, +"(003A,0213)","Channel Baseline ","ChannelBaseline","DS",1, +"(003A,0214)","Channel Time Skew","ChannelTimeSkew","DS",1, +"(003A,0215)","Channel Sample Skew","ChannelSampleSkew","DS",1, +"(003A,0218)","Channel Offset","ChannelOffset","DS",1, +"(003A,021A)","Waveform Bits Stored","WaveformBitsStored","US",1, +"(003A,0220)","Filter Low Frequency","FilterLowFrequency","DS",1, +"(003A,0221)","Filter High Frequency","FilterHighFrequency","DS",1, +"(003A,0222)","Notch Filter Frequency","NotchFilterFrequency","DS",1, +"(003A,0223)","Notch Filter Bandwidth","NotchFilterBandwidth","DS",1, +"(003A,0230)","Waveform Data Display Scale","WaveformDataDisplayScale","FL",1, +"(003A,0231)","Waveform Display Background CIELab Value","WaveformDisplayBackgroundCIELabValue","US",3, +"(003A,0240)","Waveform Presentation Group Sequence","WaveformPresentationGroupSequence","SQ",1, +"(003A,0241)","Presentation Group Number","PresentationGroupNumber","US",1, +"(003A,0242)","Channel Display Sequence","ChannelDisplaySequence","SQ",1, +"(003A,0244)","Channel Recommended Display CIELab Value","ChannelRecommendedDisplayCIELabValue","US",3, +"(003A,0245)","Channel Position","ChannelPosition","FL",1, +"(003A,0246)","Display Shading Flag","DisplayShadingFlag","CS",1, +"(003A,0247)","Fractional Channel Display Scale","FractionalChannelDisplayScale","FL",1, +"(003A,0248)","Absolute Channel Display Scale","AbsoluteChannelDisplayScale","FL",1, +"(003A,0300)","Multiplexed Audio Channels Description Code Sequence","MultiplexedAudioChannelsDescriptionCodeSequence","SQ",1, +"(003A,0301)","Channel Identification Code","ChannelIdentificationCode","IS",1, +"(003A,0302)","Channel Mode","ChannelMode","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0040,0001)","Scheduled Station AE Title","ScheduledStationAETitle","AE","1-n", +"(0040,0002)","Scheduled Procedure Step Start Date","ScheduledProcedureStepStartDate","DA",1, +"(0040,0003)","Scheduled Procedure Step Start Time","ScheduledProcedureStepStartTime","TM",1, +"(0040,0004)","Scheduled Procedure Step End Date","ScheduledProcedureStepEndDate","DA",1, +"(0040,0005)","Scheduled Procedure Step End Time","ScheduledProcedureStepEndTime","TM",1, +"(0040,0006)","Scheduled Performing Physician’s Name","ScheduledPerformingPhysicianName","PN",1, +"(0040,0007)","Scheduled Procedure Step Description","ScheduledProcedureStepDescription","LO",1, +"(0040,0008)","Scheduled Protocol Code Sequence","ScheduledProtocolCodeSequence","SQ",1, +"(0040,0009)","Scheduled Procedure Step ID","ScheduledProcedureStepID","SH",1, +"(0040,000A)","Stage Code Sequence","StageCodeSequence","SQ",1, +"(0040,000B)","Scheduled Performing Physician Identification Sequence","ScheduledPerformingPhysicianIdentificationSequence","SQ",1, +"(0040,0010)","Scheduled Station Name","ScheduledStationName","SH","1-n", +"(0040,0011)","Scheduled Procedure Step Location","ScheduledProcedureStepLocation","SH",1, +"(0040,0012)","Pre-Medication","PreMedication","LO",1, +"(0040,0020)","Scheduled Procedure Step Status","ScheduledProcedureStepStatus","CS",1, +"(0040,0026)","Order Placer Identifier Sequence","OrderPlacerIdentifierSequence","SQ",1, +"(0040,0027)","Order Filler Identifier Sequence","OrderFillerIdentifierSequence","SQ",1, +"(0040,0031)","Local Namespace Entity ID","LocalNamespaceEntityID","UT",1, +"(0040,0032)","Universal Entity ID","UniversalEntityID","UT",1, +"(0040,0033)","Universal Entity ID Type","UniversalEntityIDType","CS",1, +"(0040,0035)","Identifier Type Code","IdentifierTypeCode","CS",1, +"(0040,0036)","Assigning Facility Sequence","AssigningFacilitySequence","SQ",1, +"(0040,0039)","Assigning Jurisdiction Code Sequence","AssigningJurisdictionCodeSequence","SQ",1, +"(0040,003A)","Assigning Agency or Department Code Sequence","AssigningAgencyOrDepartmentCodeSequence","SQ",1, +"(0040,0100)","Scheduled Procedure Step Sequence","ScheduledProcedureStepSequence","SQ",1, +"(0040,0220)","Referenced Non-Image Composite SOP Instance Sequence ","ReferencedNonImageCompositeSOPInstanceSequence","SQ",1, +"(0040,0241)","Performed Station AE Title","PerformedStationAETitle","AE",1, +"(0040,0242)","Performed Station Name","PerformedStationName","SH",1, +"(0040,0243)","Performed Location","PerformedLocation","SH",1, +"(0040,0244)","Performed Procedure Step Start Date","PerformedProcedureStepStartDate","DA",1, +"(0040,0245)","Performed Procedure Step Start Time","PerformedProcedureStepStartTime","TM",1, +"(0040,0250)","Performed Procedure Step End Date","PerformedProcedureStepEndDate","DA",1, +"(0040,0251)","Performed Procedure Step End Time","PerformedProcedureStepEndTime","TM",1, +"(0040,0252)","Performed Procedure Step Status","PerformedProcedureStepStatus","CS",1, +"(0040,0253)","Performed Procedure Step ID","PerformedProcedureStepID","SH",1, +"(0040,0254)","Performed Procedure Step Description","PerformedProcedureStepDescription","LO",1, +"(0040,0255)","Performed Procedure Type Description","PerformedProcedureTypeDescription","LO",1, +"(0040,0260)","Performed Protocol Code Sequence","PerformedProtocolCodeSequence","SQ",1, +"(0040,0261)","Performed Protocol Type","PerformedProtocolType","CS",1, +"(0040,0270)","Scheduled Step Attributes Sequence","ScheduledStepAttributesSequence","SQ",1, +"(0040,0275)","Request Attributes Sequence","RequestAttributesSequence","SQ",1, +"(0040,0280)","Comments on the Performed Procedure Step","CommentsOnThePerformedProcedureStep","ST",1, +"(0040,0281)","Performed Procedure Step Discontinuation Reason Code Sequence","PerformedProcedureStepDiscontinuationReasonCodeSequence","SQ",1, +"(0040,0293)","Quantity Sequence","QuantitySequence","SQ",1, +"(0040,0294)","Quantity","Quantity","DS",1, +"(0040,0295)","Measuring Units Sequence","MeasuringUnitsSequence","SQ",1, +"(0040,0296)","Billing Item Sequence","BillingItemSequence","SQ",1, +"(0040,0300)","Total Time of Fluoroscopy","TotalTimeOfFluoroscopy","US",1, +"(0040,0301)","Total Number of Exposures","TotalNumberOfExposures","US",1, +"(0040,0302)","Entrance Dose","EntranceDose","US",1, +"(0040,0303)","Exposed Area","ExposedArea","US","1-2", +"(0040,0306)","Distance Source to Entrance","DistanceSourceToEntrance","DS",1, +"(0040,0307)","Distance Source to Support","DistanceSourceToSupport","DS",1,"RET" +"(0040,030E)","Exposure Dose Sequence","ExposureDoseSequence","SQ",1, +"(0040,0310)","Comments on Radiation Dose","CommentsOnRadiationDose","ST",1, +"(0040,0312)","X-Ray Output","XRayOutput","DS",1, +"(0040,0314)","Half Value Layer","HalfValueLayer","DS",1, +"(0040,0316)","Organ Dose","OrganDose","DS",1, +"(0040,0318)","Organ Exposed","OrganExposed","CS",1, +"(0040,0320)","Billing Procedure Step Sequence","BillingProcedureStepSequence","SQ",1, +"(0040,0321)","Film Consumption Sequence","FilmConsumptionSequence","SQ",1, +"(0040,0324)","Billing Supplies and Devices Sequence","BillingSuppliesAndDevicesSequence","SQ",1, +"(0040,0330)","Referenced Procedure Step Sequence","ReferencedProcedureStepSequence","SQ",1,"RET" +"(0040,0340)","Performed Series Sequence","PerformedSeriesSequence","SQ",1, +"(0040,0400)","Comments on the Scheduled Procedure Step","CommentsOnTheScheduledProcedureStep","LT",1, +"(0040,0440)","Protocol Context Sequence","ProtocolContextSequence","SQ",1, +"(0040,0441)","Content Item Modifier Sequence","ContentItemModifierSequence","SQ",1, +"(0040,0500)","Scheduled Specimen Sequence","ScheduledSpecimenSequence","SQ",1, +"(0040,050A)","Specimen Accession Number","SpecimenAccessionNumber","LO",1,"RET" +"(0040,0512)","Container Identifier","ContainerIdentifier","LO",1, +"(0040,0513)","Issuer of the Container Identifier Sequence","IssuerOfTheContainerIdentifierSequence","SQ",1, +"(0040,0515)","Alternate Container Identifier Sequence","AlternateContainerIdentifierSequence","SQ",1, +"(0040,0518)","Container Type Sequence","ContainerTypeCodeSequence","SQ",1, +"(0040,051A)","Container Description","ContainerDescription","LO",1, +"(0040,0520)","Container Component Sequence","ContainerComponentSequence","SQ",1, +"(0040,0550)","Specimen Sequence","SpecimenSequence","SQ",1,"RET" +"(0040,0551)","Specimen Identifier","SpecimenIdentifier","LO",1, +"(0040,0552)","Specimen Description Sequence (Trial)","SpecimenDescriptionSequenceTrial","SQ",1,"RET" +"(0040,0553)","Specimen Description (Trial)","SpecimenDescriptionTrial","ST",1,"RET" +"(0040,0554)","Specimen UID","SpecimenUID","UI",1, +"(0040,0555)","Acquisition Context Sequence","AcquisitionContextSequence","SQ",1, +"(0040,0556)","Acquisition Context Description","AcquisitionContextDescription","ST",1, +"(0040,059A)","Specimen Type Code Sequence","SpecimenTypeCodeSequence","SQ",1, +"(0040,0560)","Specimen Description Sequence","SpecimenDescriptionSequence","SQ",1, +"(0040,0562)","Issuer of the Specimen Identifier Sequence","IssuerOfTheSpecimenIdentifierSequence","SQ",1, +"(0040,0600)","Specimen Short Description ","SpecimenShortDescription","LO",1, +"(0040,0602)","Specimen Detailed Description ","SpecimenDetailedDescription","UT",1, +"(0040,0610)","Specimen Preparation Sequence","SpecimenPreparationSequence","SQ",1, +"(0040,0612)","Specimen Preparation Step Content Item Sequence","SpecimenPreparationStepContentItemSequence","SQ",1, +"(0040,0620)","Specimen Localization Content Item Sequence","SpecimenLocalizationContentItemSequence","SQ",1, +"(0040,06FA)","Slide Identifier","SlideIdentifier","LO",1,"RET" +"(0040,071A)","Image Center Point Coordinates Sequence","ImageCenterPointCoordinatesSequence","SQ",1, +"(0040,072A)","X Offset in Slide Coordinate System","XOffsetInSlideCoordinateSystem","DS",1, +"(0040,073A)","Y Offset in Slide Coordinate System","YOffsetInSlideCoordinateSystem","DS",1, +"(0040,074A)","Z Offset in Slide Coordinate System","ZOffsetInSlideCoordinateSystem","DS",1, +"(0040,08D8)","Pixel Spacing Sequence","PixelSpacingSequence","SQ",1,"RET" +"(0040,08DA)","Coordinate System Axis Code Sequence","CoordinateSystemAxisCodeSequence","SQ",1,"RET" +"(0040,08EA)","Measurement Units Code Sequence","MeasurementUnitsCodeSequence","SQ",1, +"(0040,09F8)","Vital Stain Code Sequence (Trial)","VitalStainCodeSequenceTrial","SQ",1,"RET" +"(0040,1001)","Requested Procedure ID","RequestedProcedureID","SH",1, +"(0040,1002)","Reason for the Requested Procedure","ReasonForTheRequestedProcedure","LO",1, +"(0040,1003)","Requested Procedure Priority ","RequestedProcedurePriority","SH",1, +"(0040,1004)","Patient Transport Arrangements","PatientTransportArrangements","LO",1, +"(0040,1005)","Requested Procedure Location","RequestedProcedureLocation","LO",1, +"(0040,1006)","Placer Order Number / Procedure","PlacerOrderNumberProcedure","SH",1,"RET" +"(0040,1007)","Filler Order Number / Procedure","FillerOrderNumberProcedure","SH",1,"RET" +"(0040,1008)","Confidentiality Code","ConfidentialityCode","LO",1, +"(0040,1009)","Reporting Priority","ReportingPriority","SH",1, +"(0040,100A)","Reason for Requested Procedure Code Sequence","ReasonForRequestedProcedureCodeSequence","SQ",1, +"(0040,1010)","Names of Intended Recipients of Results","NamesOfIntendedRecipientsOfResults","PN","1-n", +"(0040,1011)","Intended Recipients of Results Identification Sequence","IntendedRecipientsOfResultsIdentificationSequence","SQ",1, +"(0040,1012)","Reason For Performed Procedure Code Sequence","ReasonForPerformedProcedureCodeSequence","SQ",1, +"(0040,1060)","Requested Procedure Description (Trial)","RequestedProcedureDescriptionTrial","LO",1,"RET" +"(0040,1101)","Person Identification Code Sequence","PersonIdentificationCodeSequence","SQ",1, +"(0040,1102)","Person’s Address","PersonAddress","ST",1, +"(0040,1103)","Person’s Telephone Numbers","PersonTelephoneNumbers","LO","1-n", +"(0040,1400)","Requested Procedure Comments","RequestedProcedureComments","LT",1, +"(0040,2001)","Reason for the Imaging Service Request","ReasonForTheImagingServiceRequest","LO",1,"RET" +"(0040,2004)","Issue Date of Imaging Service Request","IssueDateOfImagingServiceRequest","DA",1, +"(0040,2005)","Issue Time of Imaging Service Request","IssueTimeOfImagingServiceRequest","TM",1, +"(0040,2006)","Placer Order Number / Imaging Service Request (Retired)","PlacerOrderNumberImagingServiceRequestRetired","SH",1,"RET" +"(0040,2007)","Filler Order Number / Imaging Service Request (Retired)","FillerOrderNumberImagingServiceRequestRetired","SH",1,"RET" +"(0040,2008)","Order Entered By","OrderEnteredBy","PN",1, +"(0040,2009)","Order Enterer’s Location","OrderEntererLocation","SH",1, +"(0040,2010)","Order Callback Phone Number","OrderCallbackPhoneNumber","SH",1, +"(0040,2016)","Placer Order Number / Imaging Service Request","PlacerOrderNumberImagingServiceRequest","LO",1, +"(0040,2017)","Filler Order Number / Imaging Service Request","FillerOrderNumberImagingServiceRequest","LO",1, +"(0040,2400)","Imaging Service Request Comments","ImagingServiceRequestComments","LT",1, +"(0040,3001)","Confidentiality Constraint on Patient Data Description","ConfidentialityConstraintOnPatientDataDescription","LO",1, +"(0040,4001)","General Purpose Scheduled Procedure Step Status","GeneralPurposeScheduledProcedureStepStatus","CS",1, +"(0040,4002)","General Purpose Performed Procedure Step Status","GeneralPurposePerformedProcedureStepStatus","CS",1, +"(0040,4003)","General Purpose Scheduled Procedure Step Priority","GeneralPurposeScheduledProcedureStepPriority","CS",1, +"(0040,4004)","Scheduled Processing Applications Code Sequence","ScheduledProcessingApplicationsCodeSequence","SQ",1, +"(0040,4005)","Scheduled Procedure Step Start DateTime","ScheduledProcedureStepStartDateTime","DT",1, +"(0040,4006)","Multiple Copies Flag","MultipleCopiesFlag","CS",1, +"(0040,4007)","Performed Processing Applications Code Sequence","PerformedProcessingApplicationsCodeSequence","SQ",1, +"(0040,4009)","Human Performer Code Sequence","HumanPerformerCodeSequence","SQ",1, +"(0040,4010)","Scheduled Procedure Step Modification Date Time","ScheduledProcedureStepModificationDateTime","DT",1, +"(0040,4011)","Expected Completion Date Time","ExpectedCompletionDateTime","DT",1, +"(0040,4015)","Resulting General Purpose Performed Procedure Steps Sequence","ResultingGeneralPurposePerformedProcedureStepsSequence","SQ",1, +"(0040,4016)","Referenced General Purpose Scheduled Procedure Step Sequence","ReferencedGeneralPurposeScheduledProcedureStepSequence","SQ",1, +"(0040,4018)","Scheduled Workitem Code Sequence","ScheduledWorkitemCodeSequence","SQ",1, +"(0040,4019)","Performed Workitem Code Sequence","PerformedWorkitemCodeSequence","SQ",1, +"(0040,4020)","Input Availability Flag","InputAvailabilityFlag","CS",1, +"(0040,4021)","Input Information Sequence","InputInformationSequence","SQ",1, +"(0040,4022)","Relevant Information Sequence","RelevantInformationSequence","SQ",1, +"(0040,4023)","Referenced General Purpose Scheduled Procedure Step Transaction UID","ReferencedGeneralPurposeScheduledProcedureStepTransactionUID","UI",1, +"(0040,4025)","Scheduled Station Name Code Sequence","ScheduledStationNameCodeSequence","SQ",1, +"(0040,4026)","Scheduled Station Class Code Sequence","ScheduledStationClassCodeSequence","SQ",1, +"(0040,4027)","Scheduled Station Geographic Location Code Sequence","ScheduledStationGeographicLocationCodeSequence","SQ",1, +"(0040,4028)","Performed Station Name Code Sequence","PerformedStationNameCodeSequence","SQ",1, +"(0040,4029)","Performed Station Class Code Sequence","PerformedStationClassCodeSequence","SQ",1, +"(0040,4030)","Performed Station Geographic Location Code Sequence","PerformedStationGeographicLocationCodeSequence","SQ",1, +"(0040,4031)","Requested Subsequent Workitem Code Sequence","RequestedSubsequentWorkitemCodeSequence","SQ",1, +"(0040,4032)","Non-DICOM Output Code Sequence","NonDICOMOutputCodeSequence","SQ",1, +"(0040,4033)","Output Information Sequence","OutputInformationSequence","SQ",1, +"(0040,4034)","Scheduled Human Performers Sequence","ScheduledHumanPerformersSequence","SQ",1, +"(0040,4035)","Actual Human Performers Sequence","ActualHumanPerformersSequence","SQ",1, +"(0040,4036)","Human Performer’s Organization","HumanPerformerOrganization","LO",1, +"(0040,4037)","Human Performer’s Name","HumanPerformerName","PN",1, +"(0040,4040)","Raw Data Handling","RawDataHandling","CS",1, +"(0040,4041)","Input Readiness State","InputReadinessState","CS",1, +"(0040,4050)","Performed Procedure Step Start DateTime","PerformedProcedureStepStartDateTime","DT",1, +"(0040,4051)","Performed Procedure Step End DateTime","PerformedProcedureStepEndDateTime","DT",1, +"(0040,4052)","Procedure Step Cancellation DateTime","ProcedureStepCancellationDateTime","DT",1, +"(0040,8302)","Entrance Dose in mGy","EntranceDoseInmGy","DS",1, +"(0040,9094)","Referenced Image Real World Value Mapping Sequence","ReferencedImageRealWorldValueMappingSequence","SQ",1, +"(0040,9096)","Real World Value Mapping Sequence ","RealWorldValueMappingSequence","SQ",1, +"(0040,9098)","Pixel Value Mapping Code Sequence","PixelValueMappingCodeSequence","SQ",1, +"(0040,9210)","LUT Label","LUTLabel","SH",1, +"(0040,9211)","Real World Value Last Value Mapped","RealWorldValueLastValueMapped","US or SS",1, +"(0040,9212)","Real World Value LUT Data","RealWorldValueLUTData","FD","1-n", +"(0040,9216)","Real World Value First Value Mapped","RealWorldValueFirstValueMapped","US or SS",1, +"(0040,9224)","Real World Value Intercept","RealWorldValueIntercept","FD",1, +"(0040,9225)","Real World Value Slope","RealWorldValueSlope","FD",1, +"(0040,A007)","Findings Flag (Trial)","FindingsFlagTrial","CS",1,"RET" +"(0040,A010)","Relationship Type","RelationshipType","CS",1, +"(0040,A020)","Findings Sequence (Trial)","FindingsSequenceTrial","SQ",1,"RET" +"(0040,A021)","Findings Group UID (Trial)","FindingsGroupUIDTrial","UI",1,"RET" +"(0040,A022)","Referenced Findings Group UID (Trial)","ReferencedFindingsGroupUIDTrial","UI",1,"RET" +"(0040,A023)","Findings Group Recording Date (Trial)","FindingsGroupRecordingDateTrial","DA",1,"RET" +"(0040,A024)","Findings Group Recording Time (Trial)","FindingsGroupRecordingTimeTrial","TM",1,"RET" +"(0040,A026)","Findings Source Category Code Sequence (Trial)","FindingsSourceCategoryCodeSequenceTrial","SQ",1,"RET" +"(0040,A027)","Verifying Organization","VerifyingOrganization","LO",1, +"(0040,A028)","Documenting Organization Identifier Code Sequence (Trial)","DocumentingOrganizationIdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A030)","Verification Date Time","VerificationDateTime","DT",1, +"(0040,A032)","Observation Date Time","ObservationDateTime","DT",1, +"(0040,A040)","Value Type","ValueType","CS",1, +"(0040,A043)","Concept Name Code Sequence","ConceptNameCodeSequence","SQ",1, +"(0040,A047)","Measurement Precision Description (Trial)","MeasurementPrecisionDescriptionTrial","LO",1,"RET" +"(0040,A050)","Continuity Of Content","ContinuityOfContent","CS",1, +"(0040,A057)","Urgency or Priority Alerts (Trial)","UrgencyOrPriorityAlertsTrial","CS","1-n","RET" +"(0040,A060)","Sequencing Indicator (Trial)","SequencingIndicatorTrial","LO",1,"RET" +"(0040,A066)","Document Identifier Code Sequence (Trial)","DocumentIdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A067)","Document Author (Trial)","DocumentAuthorTrial","PN",1,"RET" +"(0040,A068)","Document Author Identifier Code Sequence (Trial)","DocumentAuthorIdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A070)","Identifier Code Sequence (Trial)","IdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A073)","Verifying Observer Sequence","VerifyingObserverSequence","SQ",1, +"(0040,A074)","Object Binary Identifier (Trial)","ObjectBinaryIdentifierTrial","OB",1,"RET" +"(0040,A075)","Verifying Observer Name","VerifyingObserverName","PN",1, +"(0040,A076)","Documenting Observer Identifier Code Sequence (Trial)","DocumentingObserverIdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A078)","Author Observer Sequence","AuthorObserverSequence","SQ",1, +"(0040,A07A)","Participant Sequence","ParticipantSequence","SQ",1, +"(0040,A07C)","Custodial Organization Sequence","CustodialOrganizationSequence","SQ",1, +"(0040,A080)","Participation Type","ParticipationType","CS",1, +"(0040,A082)","Participation DateTime","ParticipationDateTime","DT",1, +"(0040,A084)","Observer Type","ObserverType","CS",1, +"(0040,A085)","Procedure Identifier Code Sequence (Trial)","ProcedureIdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A088)","Verifying Observer Identification Code Sequence","VerifyingObserverIdentificationCodeSequence","SQ",1, +"(0040,A089)","Object Directory Binary Identifier (Trial)","ObjectDirectoryBinaryIdentifierTrial","OB",1,"RET" +"(0040,A090)","Equivalent CDA Document Sequence","EquivalentCDADocumentSequence","SQ",1,"RET" +"(0040,A0B0)","Referenced Waveform Channels","ReferencedWaveformChannels","US","2-2n", +"(0040,A110)","Date of Document or Verbal Transaction (Trial)","DateOfDocumentOrVerbalTransactionTrial","DA",1,"RET" +"(0040,A112)","Time of Document Creation or Verbal Transaction (Trial)","TimeOfDocumentCreationOrVerbalTransactionTrial","TM",1,"RET" +"(0040,A120)","DateTime","DateTime","DT",1, +"(0040,A121)","Date","Date","DA",1, +"(0040,A122)","Time","Time","TM",1, +"(0040,A123)","Person Name","PersonName","PN",1, +"(0040,A124)","UID","UID","UI",1, +"(0040,A125)","Report Status ID (Trial)","ReportStatusIDTrial","CS",2,"RET" +"(0040,A130)","Temporal Range Type","TemporalRangeType","CS",1, +"(0040,A132)","Referenced Sample Positions","ReferencedSamplePositions","UL","1-n", +"(0040,A136)","Referenced Frame Numbers","ReferencedFrameNumbers","US","1-n", +"(0040,A138)","Referenced Time Offsets","ReferencedTimeOffsets","DS","1-n", +"(0040,A13A)","Referenced DateTime ","ReferencedDateTime","DT","1-n", +"(0040,A160)","Text Value","TextValue","UT",1, +"(0040,A167)","Observation Category Code Sequence (Trial)","ObservationCategoryCodeSequenceTrial","SQ",1,"RET" +"(0040,A168)","Concept Code Sequence","ConceptCodeSequence","SQ",1, +"(0040,A16A)","Bibliographic Citation (Trial)","BibliographicCitationTrial","ST",1,"RET" +"(0040,A170)","Purpose of Reference Code Sequence","PurposeOfReferenceCodeSequence","SQ",1, +"(0040,A171)","Observation UID (Trial)","ObservationUIDTrial","UI",1,"RET" +"(0040,A172)","Referenced Observation UID (Trial)","ReferencedObservationUIDTrial","UI",1,"RET" +"(0040,A173)","Referenced Observation Class (Trial)","ReferencedObservationClassTrial","CS",1,"RET" +"(0040,A174)","Referenced Object Observation Class (Trial)","ReferencedObjectObservationClassTrial","CS",1,"RET" +"(0040,A180)","Annotation Group Number","AnnotationGroupNumber","US",1, +"(0040,A192)","Observation Date (Trial)","ObservationDateTrial","DA",1,"RET" +"(0040,A193)","Observation Time (Trial)","ObservationTimeTrial","TM",1,"RET" +"(0040,A194)","Measurement Automation (Trial)","MeasurementAutomationTrial","CS",1,"RET" +"(0040,A195)","Modifier Code Sequence ","ModifierCodeSequence","SQ",1, +"(0040,A224)","Identification Description (Trial)","IdentificationDescriptionTrial","ST",1,"RET" +"(0040,A290)","Coordinates Set Geometric Type (Trial)","CoordinatesSetGeometricTypeTrial","CS",1,"RET" +"(0040,A296)","Algorithm Code Sequence (Trial)","AlgorithmCodeSequenceTrial","SQ",1,"RET" +"(0040,A297)","Algorithm Description (Trial)","AlgorithmDescriptionTrial","ST",1,"RET" +"(0040,A29A)","Pixel Coordinates Set (Trial)","PixelCoordinatesSetTrial","SL","2-2n","RET" +"(0040,A300)","Measured Value Sequence","MeasuredValueSequence","SQ",1, +"(0040,A301)","Numeric Value Qualifier Code Sequence","NumericValueQualifierCodeSequence","SQ",1, +"(0040,A307)","Current Observer (Trial)","CurrentObserverTrial","PN",1,"RET" +"(0040,A30A)","Numeric Value","NumericValue","DS","1-n", +"(0040,A313)","Referenced Accession Sequence (Trial)","ReferencedAccessionSequenceTrial","SQ",1,"RET" +"(0040,A33A)","Report Status Comment (Trial)","ReportStatusCommentTrial","ST",1,"RET" +"(0040,A340)","Procedure Context Sequence (Trial)","ProcedureContextSequenceTrial","SQ",1,"RET" +"(0040,A352)","Verbal Source (Trial)","VerbalSourceTrial","PN",1,"RET" +"(0040,A353)","Address (Trial)","AddressTrial","ST",1,"RET" +"(0040,A354)","Telephone Number (Trial)","TelephoneNumberTrial","LO",1,"RET" +"(0040,A358)","Verbal Source Identifier Code Sequence (Trial)","VerbalSourceIdentifierCodeSequenceTrial","SQ",1,"RET" +"(0040,A360)","Predecessor Documents Sequence","PredecessorDocumentsSequence","SQ",1, +"(0040,A370)","Referenced Request Sequence","ReferencedRequestSequence","SQ",1, +"(0040,A372)","Performed Procedure Code Sequence","PerformedProcedureCodeSequence","SQ",1, +"(0040,A375)","Current Requested Procedure Evidence Sequence","CurrentRequestedProcedureEvidenceSequence","SQ",1, +"(0040,A380)","Report Detail Sequence (Trial)","ReportDetailSequenceTrial","SQ",1,"RET" +"(0040,A385)","Pertinent Other Evidence Sequence","PertinentOtherEvidenceSequence","SQ",1, +"(0040,A390)","HL7 Structured Document Reference Sequence","HL7StructuredDocumentReferenceSequence","SQ",1, +"(0040,A402)","Observation Subject UID (Trial)","ObservationSubjectUIDTrial","UI",1,"RET" +"(0040,A403)","Observation Subject Class (Trial)","ObservationSubjectClassTrial","CS",1,"RET" +"(0040,A404)","Observation Subject Type Code Sequence (Trial)","ObservationSubjectTypeCodeSequenceTrial","SQ",1,"RET" +"(0040,A491)","Completion Flag","CompletionFlag","CS",1, +"(0040,A492)","Completion Flag Description","CompletionFlagDescription","LO",1, +"(0040,A493)","Verification Flag","VerificationFlag","CS",1, +"(0040,A494)","Archive Requested","ArchiveRequested","CS",1, +"(0040,A496)","Preliminary Flag","PreliminaryFlag","CS",1, +"(0040,A504)","Content Template Sequence","ContentTemplateSequence","SQ",1, +"(0040,A525)","Identical Documents Sequence","IdenticalDocumentsSequence","SQ",1, +"(0040,A600)","Observation Subject Context Flag (Trial)","ObservationSubjectContextFlagTrial","CS",1,"RET" +"(0040,A601)","Observer Context Flag (Trial)","ObserverContextFlagTrial","CS",1,"RET" +"(0040,A603)","Procedure Context Flag (Trial)","ProcedureContextFlagTrial","CS",1,"RET" +"(0040,A730)","Content Sequence","ContentSequence","SQ",1, +"(0040,A731)","Relationship Sequence (Trial)","RelationshipSequenceTrial","SQ",1,"RET" +"(0040,A732)","Relationship Type Code Sequence (Trial)","RelationshipTypeCodeSequenceTrial","SQ",1,"RET" +"(0040,A744)","Language Code Sequence (Trial)","LanguageCodeSequenceTrial","SQ",1,"RET" +"(0040,A992)","Uniform Resource Locator (Trial)","UniformResourceLocatorTrial","ST",1,"RET" +"(0040,B020)","Waveform Annotation Sequence","WaveformAnnotationSequence","SQ",1, +"(0040,DB00)","Template Identifier","TemplateIdentifier","CS",1, +"(0040,DB06)","Template Version","TemplateVersion","DT",1,"RET" +"(0040,DB07)","Template Local Version","TemplateLocalVersion","DT",1,"RET" +"(0040,DB0B)","Template Extension Flag","TemplateExtensionFlag","CS",1,"RET" +"(0040,DB0C)","Template Extension Organization UID","TemplateExtensionOrganizationUID","UI",1,"RET" +"(0040,DB0D)","Template Extension Creator UID","TemplateExtensionCreatorUID","UI",1,"RET" +"(0040,DB73)","Referenced Content Item Identifier","ReferencedContentItemIdentifier","UL","1-n", +"(0040,E001)","HL7 Instance Identifier ","HL7InstanceIdentifier","ST",1, +"(0040,E004)","HL7 Document Effective Time","HL7DocumentEffectiveTime","DT",1, +"(0040,E006)","HL7 Document Type Code Sequence","HL7DocumentTypeCodeSequence","SQ",1, +"(0040,E008)","Document Class Code Sequence","DocumentClassCodeSequence","SQ",1, +"(0040,E010)","Retrieve URI ","RetrieveURI","UT",1, +"(0040,E011)","Retrieve Location UID","RetrieveLocationUID","UI",1, +"(0040,E020)","Type of Instances","TypeOfInstances","CS",1, +"(0040,E021)","DICOM Retrieval Sequence","DICOMRetrievalSequence","SQ",1, +"(0040,E022)","DICOM Media Retrieval Sequence","DICOMMediaRetrievalSequence","SQ",1, +"(0040,E023)","WADO Retrieval Sequence","WADORetrievalSequence","SQ",1, +"(0040,E024)","XDS Retrieval Sequence","XDSRetrievalSequence","SQ",1, +"(0040,E030)","Repository Unique ID","RepositoryUniqueID","UI",1, +"(0040,E031)","Home Community ID","HomeCommunityID","UI",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0042,0010)","Document Title","DocumentTitle","ST",1, +"(0042,0011)","Encapsulated Document","EncapsulatedDocument","OB",1, +"(0042,0012)","MIME Type of Encapsulated Document","MIMETypeOfEncapsulatedDocument","LO",1, +"(0042,0013)","Source Instance Sequence","SourceInstanceSequence","SQ",1, +"(0042,0014)","List of MIME Types","ListOfMIMETypes","LO","1-n", +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0044,0001)","Product Package Identifier","ProductPackageIdentifier","ST",1, +"(0044,0002)","Substance Administration Approval","SubstanceAdministrationApproval","CS",1, +"(0044,0003)","Approval Status Further Description","ApprovalStatusFurtherDescription","LT",1, +"(0044,0004)","Approval Status DateTime ","ApprovalStatusDateTime","DT",1, +"(0044,0007)","Product Type Code Sequence","ProductTypeCodeSequence","SQ",1, +"(0044,0008)","Product Name","ProductName","LO","1-n", +"(0044,0009)","Product Description","ProductDescription","LT",1, +"(0044,000A)","Product Lot Identifier","ProductLotIdentifier","LO",1, +"(0044,000B)","Product Expiration DateTime","ProductExpirationDateTime","DT",1, +"(0044,0010)","Substance Administration DateTime","SubstanceAdministrationDateTime","DT",1, +"(0044,0011)","Substance Administration Notes","SubstanceAdministrationNotes","LO",1, +"(0044,0012)","Substance Administration Device ID","SubstanceAdministrationDeviceID","LO",1, +"(0044,0013)","Product Parameter Sequence","ProductParameterSequence","SQ",1, +"(0044,0019)","Substance Administration Parameter Sequence","SubstanceAdministrationParameterSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0046,0012)","Lens Description","LensDescription","LO",1, +"(0046,0014)","Right Lens Sequence","RightLensSequence","SQ",1, +"(0046,0015)","Left Lens Sequence","LeftLensSequence","SQ",1, +"(0046,0016)","Unspecified Laterality Lens Sequence","UnspecifiedLateralityLensSequence","SQ",1, +"(0046,0018)","Cylinder Sequence","CylinderSequence","SQ",1, +"(0046,0028)","Prism Sequence","PrismSequence","SQ",1, +"(0046,0030)","Horizontal Prism Power","HorizontalPrismPower","FD",1, +"(0046,0032)","Horizontal Prism Base","HorizontalPrismBase","CS",1, +"(0046,0034)","Vertical Prism Power","VerticalPrismPower","FD",1, +"(0046,0036)","Vertical Prism Base","VerticalPrismBase","CS",1, +"(0046,0038)","Lens Segment Type","LensSegmentType","CS",1, +"(0046,0040)","Optical Transmittance","OpticalTransmittance","FD",1, +"(0046,0042)","Channel Width","ChannelWidth","FD",1, +"(0046,0044)","Pupil Size","PupilSize","FD",1, +"(0046,0046)","Corneal Size","CornealSize","FD",1, +"(0046,0050)","Autorefraction Right Eye Sequence","AutorefractionRightEyeSequence","SQ",1, +"(0046,0052)","Autorefraction Left Eye Sequence","AutorefractionLeftEyeSequence","SQ",1, +"(0046,0060)","Distance Pupillary Distance","DistancePupillaryDistance","FD",1, +"(0046,0062)","Near Pupillary Distance","NearPupillaryDistance","FD",1, +"(0046,0063)","Intermediate Pupillary Distance","IntermediatePupillaryDistance","FD",1, +"(0046,0064)","Other Pupillary Distance","OtherPupillaryDistance","FD",1, +"(0046,0070)","Keratometry Right Eye Sequence","KeratometryRightEyeSequence","SQ",1, +"(0046,0071)","Keratometry Left Eye Sequence","KeratometryLeftEyeSequence","SQ",1, +"(0046,0074)","Steep Keratometric Axis Sequence","SteepKeratometricAxisSequence","SQ",1, +"(0046,0075)","Radius of Curvature","RadiusOfCurvature","FD",1, +"(0046,0076)","Keratometric Power","KeratometricPower","FD",1, +"(0046,0077)","Keratometric Axis","KeratometricAxis","FD",1, +"(0046,0080)","Flat Keratometric Axis Sequence","FlatKeratometricAxisSequence","SQ",1, +"(0046,0092)","Background Color","BackgroundColor","CS",1, +"(0046,0094)","Optotype","Optotype","CS",1, +"(0046,0095)","Optotype Presentation","OptotypePresentation","CS",1, +"(0046,0097)","Subjective Refraction Right Eye Sequence","SubjectiveRefractionRightEyeSequence","SQ",1, +"(0046,0098)","Subjective Refraction Left Eye Sequence","SubjectiveRefractionLeftEyeSequence","SQ",1, +"(0046,0100)","Add Near Sequence","AddNearSequence","SQ",1, +"(0046,0101)","Add Intermediate Sequence","AddIntermediateSequence","SQ",1, +"(0046,0102)","Add Other Sequence","AddOtherSequence","SQ",1, +"(0046,0104)","Add Power","AddPower","FD",1, +"(0046,0106)","Viewing Distance","ViewingDistance","FD",1, +"(0046,0121)","Visual Acuity Type Code Sequence","VisualAcuityTypeCodeSequence","SQ",1, +"(0046,0122)","Visual Acuity Right Eye Sequence","VisualAcuityRightEyeSequence","SQ",1, +"(0046,0123)","Visual Acuity Left Eye Sequence","VisualAcuityLeftEyeSequence","SQ",1, +"(0046,0124)","Visual Acuity Both Eyes Open Sequence","VisualAcuityBothEyesOpenSequence","SQ",1, +"(0046,0125)","Viewing Distance Type","ViewingDistanceType","CS",1, +"(0046,0135)","Visual Acuity Modifiers","VisualAcuityModifiers","SS",2, +"(0046,0137)","Decimal Visual Acuity","DecimalVisualAcuity","FD",1, +"(0046,0139)","Optotype Detailed Definition","OptotypeDetailedDefinition","LO",1, +"(0046,0145)","Referenced Refractive Measurements Sequence","ReferencedRefractiveMeasurementsSequence","SQ",1, +"(0046,0146)","Sphere Power","SpherePower","FD",1, +"(0046,0147)","Cylinder Power","CylinderPower","FD",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0048,0001)","Imaged Volume Width","ImagedVolumeWidth","FL",1, +"(0048,0002)","Imaged Volume Height","ImagedVolumeHeight","FL",1, +"(0048,0003)","Imaged Volume Depth","ImagedVolumeDepth","FL",1, +"(0048,0006)","Total Pixel Matrix Columns","TotalPixelMatrixColumns","UL",1, +"(0048,0007)","Total Pixel Matrix Rows","TotalPixelMatrixRows","UL",1, +"(0048,0008)","Total Pixel Matrix Origin Sequence","TotalPixelMatrixOriginSequence","SQ",1, +"(0048,0010)","Specimen Label in Image","SpecimenLabelInImage","CS",1, +"(0048,0011)","Focus Method","FocusMethod","CS",1, +"(0048,0012)","Extended Depth of Field","ExtendedDepthOfField","CS",1, +"(0048,0013)","Number of Focal Planes","NumberOfFocalPlanes","US",1, +"(0048,0014)","Distance Between Focal Planes","DistanceBetweenFocalPlanes","FL",1, +"(0048,0015)","Recommended Absent Pixel CIELab Value","RecommendedAbsentPixelCIELabValue","US",3, +"(0048,0100)","Illuminator Type Code Sequence","IlluminatorTypeCodeSequence","SQ",1, +"(0048,0102)","Image Orientation (Slide)","ImageOrientationSlide","DS",6, +"(0048,0105)","Optical Path Sequence","OpticalPathSequence","SQ",1, +"(0048,0106)","Optical Path Identifier","OpticalPathIdentifier","SH",1, +"(0048,0107)","Optical Path Description","OpticalPathDescription","ST",1, +"(0048,0108)","Illumination Color Code Sequence","IlluminationColorCodeSequence","SQ",1, +"(0048,0110)","Specimen Reference Sequence","SpecimenReferenceSequence","SQ",1, +"(0048,0111)","Condenser Lens Power","CondenserLensPower","DS",1, +"(0048,0112)","Objective Lens Power","ObjectiveLensPower","DS",1, +"(0048,0113)","Objective Lens Numerical Aperture","ObjectiveLensNumericalAperture","DS",1, +"(0048,0120)","Palette Color Lookup Table Sequence","PaletteColorLookupTableSequence","SQ",1, +"(0048,0200)","Referenced Image Navigation Sequence","ReferencedImageNavigationSequence","SQ",1, +"(0048,0201)","Top Left Hand Corner of Localizer Area","TopLeftHandCornerOfLocalizerArea","US",2, +"(0048,0202)","Bottom Right Hand Corner of Localizer Area","BottomRightHandCornerOfLocalizerArea","US",2, +"(0048,0207)","Optical Path Identification Sequence","OpticalPathIdentificationSequence","SQ",1, +"(0048,021A)","Plane Position (Slide) Sequence","PlanePositionSlideSequence","SQ",1, +"(0048,021E)","Row Position In Total Image Pixel Matrix","RowPositionInTotalImagePixelMatrix","SL",1, +"(0048,021F)","Column Position In Total Image Pixel Matrix","ColumnPositionInTotalImagePixelMatrix","SL",1, +"(0048,0301)","Pixel Origin Interpretation","PixelOriginInterpretation","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0050,0004)","Calibration Image","CalibrationImage","CS",1, +"(0050,0010)","Device Sequence","DeviceSequence","SQ",1, +"(0050,0012)","Container Component Type Code Sequence","ContainerComponentTypeCodeSequence","SQ",1, +"(0050,0013)","Container Component Thickness","ContainerComponentThickness","FD",1, +"(0050,0014)","Device Length","DeviceLength","DS",1, +"(0050,0015)","Container Component Width","ContainerComponentWidth","FD",1, +"(0050,0016)","Device Diameter","DeviceDiameter","DS",1, +"(0050,0017)","Device Diameter Units","DeviceDiameterUnits","CS",1, +"(0050,0018)","Device Volume","DeviceVolume","DS",1, +"(0050,0019)","Inter-Marker Distance","InterMarkerDistance","DS",1, +"(0050,001A)","Container Component Material","ContainerComponentMaterial","CS",1, +"(0050,001B)","Container Component ID","ContainerComponentID","LO",1, +"(0050,001C)","Container Component Length","ContainerComponentLength","FD",1, +"(0050,001D)","Container Component Diameter","ContainerComponentDiameter","FD",1, +"(0050,001E)","Container Component Description","ContainerComponentDescription","LO",1, +"(0050,0020)","Device Description","DeviceDescription","LO",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0052,0001)","Contrast/Bolus Ingredient Percent by Volume ","ContrastBolusIngredientPercentByVolume","FL",1, +"(0052,0002)","OCT Focal Distance","OCTFocalDistance","FD",1, +"(0052,0003)","Beam Spot Size","BeamSpotSize","FD",1, +"(0052,0004)","Effective Refractive Index","EffectiveRefractiveIndex","FD",1, +"(0052,0006)","OCT Acquisition Domain","OCTAcquisitionDomain","CS",1, +"(0052,0007)","OCT Optical Center Wavelength","OCTOpticalCenterWavelength","FD",1, +"(0052,0008)","Axial Resolution","AxialResolution","FD",1, +"(0052,0009)","Ranging Depth","RangingDepth","FD",1, +"(0052,0011)","A‑line Rate","ALineRate","FD",1, +"(0052,0012)","A‑lines Per Frame","ALinesPerFrame","US",1, +"(0052,0013)","Catheter Rotational Rate","CatheterRotationalRate","FD",1, +"(0052,0014)","A‑line Pixel Spacing","ALinePixelSpacing","FD",1, +"(0052,0016)","Mode of Percutaneous Access Sequence","ModeOfPercutaneousAccessSequence","SQ",1, +"(0052,0025)","Intravascular OCT Frame Type Sequence","IntravascularOCTFrameTypeSequence","SQ",1, +"(0052,0026)","OCT Z Offset Applied","OCTZOffsetApplied","CS",1, +"(0052,0027)","Intravascular Frame Content Sequence","IntravascularFrameContentSequence","SQ",1, +"(0052,0028)","Intravascular Longitudinal Distance","IntravascularLongitudinalDistance","FD",1, +"(0052,0029)","Intravascular OCT Frame Content Sequence","IntravascularOCTFrameContentSequence","SQ",1, +"(0052,0030)","OCT Z Offset Correction","OCTZOffsetCorrection","SS",1, +"(0052,0031)","Catheter Direction of Rotation","CatheterDirectionOfRotation","CS",1, +"(0052,0033)","Seam Line Location","SeamLineLocation","FD",1, +"(0052,0034)","First A‑line Location","FirstALineLocation","FD",1, +"(0052,0036)","Seam Line Index","SeamLineIndex","US",1, +"(0052,0038)","Number of Padded A‑lines","NumberOfPaddedAlines","US",1, +"(0052,0039)","Interpolation Type","InterpolationType","CS",1, +"(0052,003A)","Refractive Index Applied","RefractiveIndexApplied","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +" (0054,0010)","Energy Window Vector","EnergyWindowVector","US","1-n", +"(0054,0011)","Number of Energy Windows","NumberOfEnergyWindows","US",1, +"(0054,0012)","Energy Window Information Sequence","EnergyWindowInformationSequence","SQ",1, +"(0054,0013)","Energy Window Range Sequence","EnergyWindowRangeSequence","SQ",1, +"(0054,0014)","Energy Window Lower Limit","EnergyWindowLowerLimit","DS",1, +"(0054,0015)","Energy Window Upper Limit","EnergyWindowUpperLimit","DS",1, +"(0054,0016)","Radiopharmaceutical Information Sequence","RadiopharmaceuticalInformationSequence","SQ",1, +"(0054,0017)","Residual Syringe Counts","ResidualSyringeCounts","IS",1, +"(0054,0018)","Energy Window Name","EnergyWindowName","SH",1, +"(0054,0020)","Detector Vector","DetectorVector","US","1-n", +"(0054,0021)","Number of Detectors","NumberOfDetectors","US",1, +"(0054,0022)","Detector Information Sequence","DetectorInformationSequence","SQ",1, +"(0054,0030)","Phase Vector","PhaseVector","US","1-n", +"(0054,0031)","Number of Phases","NumberOfPhases","US",1, +"(0054,0032)","Phase Information Sequence","PhaseInformationSequence","SQ",1, +"(0054,0033)","Number of Frames in Phase","NumberOfFramesInPhase","US",1, +"(0054,0036)","Phase Delay","PhaseDelay","IS",1, +"(0054,0038)","Pause Between Frames","PauseBetweenFrames","IS",1, +"(0054,0039)","Phase Description","PhaseDescription","CS",1, +"(0054,0050)","Rotation Vector","RotationVector","US","1-n", +"(0054,0051)","Number of Rotations","NumberOfRotations","US",1, +"(0054,0052)","Rotation Information Sequence","RotationInformationSequence","SQ",1, +"(0054,0053)","Number of Frames in Rotation","NumberOfFramesInRotation","US",1, +"(0054,0060)","R-R Interval Vector","RRIntervalVector","US","1-n", +"(0054,0061)","Number of R-R Intervals","NumberOfRRIntervals","US",1, +"(0054,0062)","Gated Information Sequence","GatedInformationSequence","SQ",1, +"(0054,0063)","Data Information Sequence","DataInformationSequence","SQ",1, +"(0054,0070)","Time Slot Vector","TimeSlotVector","US","1-n", +"(0054,0071)","Number of Time Slots","NumberOfTimeSlots","US",1, +"(0054,0072)","Time Slot Information Sequence","TimeSlotInformationSequence","SQ",1, +"(0054,0073)","Time Slot Time","TimeSlotTime","DS",1, +"(0054,0080)","Slice Vector","SliceVector","US","1-n", +"(0054,0081)","Number of Slices","NumberOfSlices","US",1, +"(0054,0090)","Angular View Vector","AngularViewVector","US","1-n", +"(0054,0100)","Time Slice Vector","TimeSliceVector","US","1-n", +"(0054,0101)","Number of Time Slices","NumberOfTimeSlices","US",1, +"(0054,0200)","Start Angle","StartAngle","DS",1, +"(0054,0202)","Type of Detector Motion","TypeOfDetectorMotion","CS",1, +"(0054,0210)","Trigger Vector","TriggerVector","IS","1-n", +"(0054,0211)","Number of Triggers in Phase","NumberOfTriggersInPhase","US",1, +"(0054,0220)","View Code Sequence","ViewCodeSequence","SQ",1, +"(0054,0222)","View Modifier Code Sequence","ViewModifierCodeSequence","SQ",1, +"(0054,0300)","Radionuclide Code Sequence","RadionuclideCodeSequence","SQ",1, +"(0054,0302)","Administration Route Code Sequence","AdministrationRouteCodeSequence","SQ",1, +"(0054,0304)","Radiopharmaceutical Code Sequence","RadiopharmaceuticalCodeSequence","SQ",1, +"(0054,0306)","Calibration Data Sequence","CalibrationDataSequence","SQ",1, +"(0054,0308)","Energy Window Number","EnergyWindowNumber","US",1, +"(0054,0400)","Image ID","ImageID","SH",1, +"(0054,0410)","Patient Orientation Code Sequence","PatientOrientationCodeSequence","SQ",1, +"(0054,0412)","Patient Orientation Modifier Code Sequence","PatientOrientationModifierCodeSequence","SQ",1, +"(0054,0414)","Patient Gantry Relationship Code Sequence","PatientGantryRelationshipCodeSequence","SQ",1, +"(0054,0500)","Slice Progression Direction","SliceProgressionDirection","CS",1, +"(0054,1000)","Series Type","SeriesType","CS",2, +"(0054,1001)","Units","Units","CS",1, +"(0054,1002)","Counts Source","CountsSource","CS",1, +"(0054,1004)","Reprojection Method","ReprojectionMethod","CS",1, +"(0054,1006)","SUV Type","SUVType","CS",1, +"(0054,1100)","Randoms Correction Method","RandomsCorrectionMethod","CS",1, +"(0054,1101)","Attenuation Correction Method","AttenuationCorrectionMethod","LO",1, +"(0054,1102)","Decay Correction","DecayCorrection","CS",1, +"(0054,1103)","Reconstruction Method","ReconstructionMethod","LO",1, +"(0054,1104)","Detector Lines of Response Used","DetectorLinesOfResponseUsed","LO",1, +"(0054,1105)","Scatter Correction Method","ScatterCorrectionMethod","LO",1, +"(0054,1200)","Axial Acceptance","AxialAcceptance","DS",1, +"(0054,1201)","Axial Mash","AxialMash","IS",2, +"(0054,1202)","Transverse Mash","TransverseMash","IS",1, +"(0054,1203)","Detector Element Size","DetectorElementSize","DS",2, +"(0054,1210)","Coincidence Window Width","CoincidenceWindowWidth","DS",1, +"(0054,1220)","Secondary Counts Type","SecondaryCountsType","CS","1-n", +"(0054,1300)","Frame Reference Time","FrameReferenceTime","DS",1, +"(0054,1310)","Primary (Prompts) Counts Accumulated","PrimaryPromptsCountsAccumulated","IS",1, +"(0054,1311)","Secondary Counts Accumulated","SecondaryCountsAccumulated","IS","1-n", +"(0054,1320)","Slice Sensitivity Factor","SliceSensitivityFactor","DS",1, +"(0054,1321)","Decay Factor","DecayFactor","DS",1, +"(0054,1322)","Dose Calibration Factor","DoseCalibrationFactor","DS",1, +"(0054,1323)","Scatter Fraction Factor","ScatterFractionFactor","DS",1, +"(0054,1324)","Dead Time Factor","DeadTimeFactor","DS",1, +"(0054,1330)","Image Index","ImageIndex","US",1, +"(0054,1400)","Counts Included","CountsIncluded","CS","1-n","RET" +"(0054,1401)","Dead Time Correction Flag","DeadTimeCorrectionFlag","CS",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0060,3000)","Histogram Sequence","HistogramSequence","SQ",1, +"(0060,3002)","Histogram Number of Bins","HistogramNumberOfBins","US",1, +"(0060,3004)","Histogram First Bin Value","HistogramFirstBinValue","US or SS",1, +"(0060,3006)","Histogram Last Bin Value","HistogramLastBinValue","US or SS",1, +"(0060,3008)","Histogram Bin Width","HistogramBinWidth","US",1, +"(0060,3010)","Histogram Explanation","HistogramExplanation","LO",1, +"(0060,3020)","Histogram Data","HistogramData","UL","1-n", +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0062,0001)","Segmentation Type","SegmentationType","CS",1, +"(0062,0002)","Segment Sequence","SegmentSequence","SQ",1, +"(0062,0003)","Segmented Property Category Code Sequence","SegmentedPropertyCategoryCodeSequence","SQ",1, +"(0062,0004)","Segment Number","SegmentNumber","US",1, +"(0062,0005)","Segment Label","SegmentLabel","LO",1, +"(0062,0006)","Segment Description","SegmentDescription","ST",1, +"(0062,0008)","Segment Algorithm Type","SegmentAlgorithmType","CS",1, +"(0062,0009)","Segment Algorithm Name","SegmentAlgorithmName","LO",1, +"(0062,000A)","Segment Identification Sequence","SegmentIdentificationSequence","SQ",1, +"(0062,000B)","Referenced Segment Number","ReferencedSegmentNumber","US","1-n", +"(0062,000C)","Recommended Display Grayscale Value","RecommendedDisplayGrayscaleValue","US",1, +"(0062,000D)","Recommended Display CIELab Value","RecommendedDisplayCIELabValue","US",3, +"(0062,000E)","Maximum Fractional Value","MaximumFractionalValue","US",1, +"(0062,000F)","Segmented Property Type Code Sequence","SegmentedPropertyTypeCodeSequence","SQ",1, +"(0062,0010)","Segmentation Fractional Type","SegmentationFractionalType","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0064,0002)","Deformable Registration Sequence","DeformableRegistrationSequence","SQ",1, +"(0064,0003)","Source Frame of Reference UID","SourceFrameOfReferenceUID","UI",1, +"(0064,0005)","Deformable Registration Grid Sequence","DeformableRegistrationGridSequence","SQ",1, +"(0064,0007)","Grid Dimensions","GridDimensions","UL",3, +"(0064,0008)","Grid Resolution","GridResolution","FD",3, +"(0064,0009)","Vector Grid Data","VectorGridData","OF",1, +"(0064,000F)","Pre Deformation Matrix Registration Sequence","PreDeformationMatrixRegistrationSequence","SQ",1, +"(0064,0010)","Post Deformation Matrix Registration Sequence","PostDeformationMatrixRegistrationSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0066,0001)","Number of Surfaces","NumberOfSurfaces","UL",1, +"(0066,0002)","Surface Sequence","SurfaceSequence","SQ",1, +"(0066,0003)","Surface Number","SurfaceNumber","UL",1, +"(0066,0004)","Surface Comments","SurfaceComments","LT",1, +"(0066,0009)","Surface Processing","SurfaceProcessing","CS",1, +"(0066,000A)","Surface Processing Ratio","SurfaceProcessingRatio","FL",1, +"(0066,000B)","Surface Processing Description","SurfaceProcessingDescription","LO",1, +"(0066,000C)","Recommended Presentation Opacity","RecommendedPresentationOpacity","FL",1, +"(0066,000D)","Recommended Presentation Type","RecommendedPresentationType","CS",1, +"(0066,000E)","Finite Volume","FiniteVolume","CS",1, +"(0066,0010)","Manifold","Manifold","CS",1, +"(0066,0011)","Surface Points Sequence","SurfacePointsSequence","SQ",1, +"(0066,0012)","Surface Points Normals Sequence","SurfacePointsNormalsSequence","SQ",1, +"(0066,0013)","Surface Mesh Primitives Sequence","SurfaceMeshPrimitivesSequence","SQ",1, +"(0066,0015)","Number of Surface Points","NumberOfSurfacePoints","UL",1, +"(0066,0016)","Point Coordinates Data","PointCoordinatesData","OF",1, +"(0066,0017)","Point Position Accuracy","PointPositionAccuracy","FL",3, +"(0066,0018)","Mean Point Distance","MeanPointDistance","FL",1, +"(0066,0019)","Maximum Point Distance","MaximumPointDistance","FL",1, +"(0066,001A)","Points Bounding Box Coordinates","PointsBoundingBoxCoordinates","FL",6, +"(0066,001B)","Axis of Rotation","AxisOfRotation","FL",3, +"(0066,001C)","Center of Rotation","CenterOfRotation","FL",3, +"(0066,001E)","Number of Vectors","NumberOfVectors","UL",1, +"(0066,001F)","Vector Dimensionality","VectorDimensionality","US",1, +"(0066,0020)","Vector Accuracy","VectorAccuracy","FL","1-n", +"(0066,0021)","Vector Coordinate Data","VectorCoordinateData","OF",1, +"(0066,0023)","Triangle Point Index List","TrianglePointIndexList","OW",1, +"(0066,0024)","Edge Point Index List","EdgePointIndexList","OW",1, +"(0066,0025)","Vertex Point Index List","VertexPointIndexList","OW",1, +"(0066,0026)","Triangle Strip Sequence","TriangleStripSequence","SQ",1, +"(0066,0027)","Triangle Fan Sequence","TriangleFanSequence","SQ",1, +"(0066,0028)","Line Sequence","LineSequence","SQ",1, +"(0066,0029)","Primitive Point Index List","PrimitivePointIndexList","OW",1, +"(0066,002A)","Surface Count","SurfaceCount","UL",1, +"(0066,002B)","Referenced Surface Sequence","ReferencedSurfaceSequence","SQ",1, +"(0066,002C)","Referenced Surface Number","ReferencedSurfaceNumber","UL",1, +"(0066,002D)","Segment Surface Generation Algorithm Identification Sequence","SegmentSurfaceGenerationAlgorithmIdentificationSequence","SQ",1, +"(0066,002E)","Segment Surface Source Instance Sequence","SegmentSurfaceSourceInstanceSequence","SQ",1, +"(0066,002F)","Algorithm Family Code Sequence","AlgorithmFamilyCodeSequence","SQ",1, +"(0066,0030)","Algorithm Name Code Sequence","AlgorithmNameCodeSequence","SQ",1, +"(0066,0031)","Algorithm Version","AlgorithmVersion","LO",1, +"(0066,0032)","Algorithm Parameters","AlgorithmParameters","LT",1, +"(0066,0034)","Facet Sequence","FacetSequence","SQ",1, +"(0066,0035)","Surface Processing Algorithm Identification Sequence","SurfaceProcessingAlgorithmIdentificationSequence","SQ",1, +"(0066,0036)","Algorithm Name","AlgorithmName","LO",1, +"Tag","Name","Keyword","VR","VM", +"(0068,6210)","Implant Size","ImplantSize","LO",1, +"(0068,6221)","Implant Template Version","ImplantTemplateVersion","LO",1, +"(0068,6222)","Replaced Implant Template Sequence","ReplacedImplantTemplateSequence","SQ",1, +"(0068,6223)","Implant Type","ImplantType","CS",1, +"(0068,6224)","Derivation Implant Template Sequence ","DerivationImplantTemplateSequence","SQ",1, +"(0068,6225)","Original Implant Template Sequence ","OriginalImplantTemplateSequence","SQ",1, +"(0068,6226)","Effective DateTime","EffectiveDateTime","DT",1, +"(0068,6230)","Implant Target Anatomy Sequence","ImplantTargetAnatomySequence","SQ",1, +"(0068,6260)","Information From Manufacturer Sequence","InformationFromManufacturerSequence","SQ",1, +"(0068,6265)","Notification From Manufacturer Sequence","NotificationFromManufacturerSequence","SQ",1, +"(0068,6270)","Information Issue DateTime","InformationIssueDateTime","DT",1, +"(0068,6280)","Information Summary","InformationSummary","ST",1, +"(0068,62A0)","Implant Regulatory Disapproval Code Sequence","ImplantRegulatoryDisapprovalCodeSequence","SQ",1, +"(0068,62A5)","Overall Template Spatial Tolerance","OverallTemplateSpatialTolerance","FD",1, +"(0068,62C0)","HPGL Document Sequence","HPGLDocumentSequence","SQ",1, +"(0068,62D0)","HPGL Document ID","HPGLDocumentID","US",1, +"(0068,62D5)","HPGL Document Label","HPGLDocumentLabel","LO",1, +"(0068,62E0)","View Orientation Code Sequence","ViewOrientationCodeSequence","SQ",1, +"(0068,62F0)","View Orientation Modifier","ViewOrientationModifier","FD",9, +"(0068,62F2)","HPGL Document Scaling","HPGLDocumentScaling","FD",1, +"(0068,6300)","HPGL Document","HPGLDocument","OB",1, +"(0068,6310)","HPGL Contour Pen Number","HPGLContourPenNumber","US",1, +"(0068,6320)","HPGL Pen Sequence","HPGLPenSequence","SQ",1, +"(0068,6330)","HPGL Pen Number","HPGLPenNumber","US",1, +"(0068,6340)","HPGL Pen Label","HPGLPenLabel","LO",1, +"(0068,6345)","HPGL Pen Description","HPGLPenDescription","ST",1, +"(0068,6346)","Recommended Rotation Point","RecommendedRotationPoint","FD",2, +"(0068,6347)","Bounding Rectangle","BoundingRectangle","FD",4, +"(0068,6350)","Implant Template 3D Model Surface Number","ImplantTemplate3DModelSurfaceNumber","US","1-n", +"(0068,6360)","Surface Model Description Sequence","SurfaceModelDescriptionSequence","SQ",1, +"(0068,6380)","Surface Model Label","SurfaceModelLabel","LO",1, +"(0068,6390)","Surface Model Scaling Factor","SurfaceModelScalingFactor","FD",1, +"(0068,63A0)","Materials Code Sequence","MaterialsCodeSequence","SQ",1, +"(0068,63A4)","Coating Materials Code Sequence","CoatingMaterialsCodeSequence","SQ",1, +"(0068,63A8)","Implant Type Code Sequence","ImplantTypeCodeSequence","SQ",1, +"(0068,63AC)","Fixation Method Code Sequence","FixationMethodCodeSequence","SQ",1, +"(0068,63B0)","Mating Feature Sets Sequence","MatingFeatureSetsSequence","SQ",1, +"(0068,63C0)","Mating Feature Set ID","MatingFeatureSetID","US",1, +"(0068,63D0)","Mating Feature Set Label","MatingFeatureSetLabel","LO",1, +"(0068,63E0)","Mating Feature Sequence","MatingFeatureSequence","SQ",1, +"(0068,63F0)","Mating Feature ID","MatingFeatureID","US",1, +"(0068,6400)","Mating Feature Degree of Freedom Sequence","MatingFeatureDegreeOfFreedomSequence","SQ",1, +"(0068,6410)","Degree of Freedom ID","DegreeOfFreedomID","US",1, +"(0068,6420)","Degree of Freedom Type","DegreeOfFreedomType","CS",1, +"(0068,6430)","2D Mating Feature Coordinates Sequence","TwoDMatingFeatureCoordinatesSequence","SQ",1, +"(0068,6440)","Referenced HPGL Document ID","ReferencedHPGLDocumentID","US",1, +"(0068,6450)","2D Mating Point","TwoDMatingPoint","FD",2, +"(0068,6460)","2D Mating Axes","TwoDMatingAxes","FD",4, +"(0068,6470)","2D Degree of Freedom Sequence","TwoDDegreeOfFreedomSequence","SQ",1, +"(0068,6490)","3D Degree of Freedom Axis","ThreeDDegreeOfFreedomAxis","FD",3, +"(0068,64A0)","Range of Freedom","RangeOfFreedom","FD",2, +"(0068,64C0)","3D Mating Point","ThreeDMatingPoint","FD",3, +"(0068,64D0)","3D Mating Axes","ThreeDMatingAxes","FD",9, +"(0068,64F0)","2D Degree of Freedom Axis","TwoDDegreeOfFreedomAxis","FD",3, +"(0068,6500)","Planning Landmark Point Sequence","PlanningLandmarkPointSequence","SQ",1, +"(0068,6510)","Planning Landmark Line Sequence","PlanningLandmarkLineSequence","SQ",1, +"(0068,6520)","Planning Landmark Plane Sequence","PlanningLandmarkPlaneSequence","SQ",1, +"(0068,6530)","Planning Landmark ID","PlanningLandmarkID","US",1, +"(0068,6540)","Planning Landmark Description","PlanningLandmarkDescription","LO",1, +"(0068,6545)","Planning Landmark Identification Code Sequence","PlanningLandmarkIdentificationCodeSequence","SQ",1, +"(0068,6550)","2D Point Coordinates Sequence","TwoDPointCoordinatesSequence","SQ",1, +"(0068,6560)","2D Point Coordinates","TwoDPointCoordinates","FD",2, +"(0068,6590)","3D Point Coordinates","ThreeDPointCoordinates","FD",3, +"(0068,65A0)","2D Line Coordinates Sequence","TwoDLineCoordinatesSequence","SQ",1, +"(0068,65B0)","2D Line Coordinates","TwoDLineCoordinates","FD",4, +"(0068,65D0)","3D Line Coordinates","ThreeDLineCoordinates","FD",6, +"(0068,65E0)","2D Plane Coordinates Sequence","TwoDPlaneCoordinatesSequence","SQ",1, +"(0068,65F0)","2D Plane Intersection","TwoDPlaneIntersection","FD",4, +"(0068,6610)","3D Plane Origin","ThreeDPlaneOrigin","FD",3, +"(0068,6620)","3D Plane Normal","ThreeDPlaneNormal","FD",3, +"Tag","Name","Keyword","VR","VM", +"(0070,0001)","Graphic Annotation Sequence","GraphicAnnotationSequence","SQ",1, +"(0070,0002)","Graphic Layer","GraphicLayer","CS",1, +"(0070,0003)","Bounding Box Annotation Units","BoundingBoxAnnotationUnits","CS",1, +"(0070,0004)","Anchor Point Annotation Units","AnchorPointAnnotationUnits","CS",1, +"(0070,0005)","Graphic Annotation Units","GraphicAnnotationUnits","CS",1, +"(0070,0006)","Unformatted Text Value","UnformattedTextValue","ST",1, +"(0070,0008)","Text Object Sequence","TextObjectSequence","SQ",1, +"(0070,0009)","Graphic Object Sequence","GraphicObjectSequence","SQ",1, +"(0070,0010)","Bounding Box Top Left Hand Corner","BoundingBoxTopLeftHandCorner","FL",2, +"(0070,0011)","Bounding Box Bottom Right Hand Corner","BoundingBoxBottomRightHandCorner","FL",2, +"(0070,0012)","Bounding Box Text Horizontal Justification","BoundingBoxTextHorizontalJustification","CS",1, +"(0070,0014)","Anchor Point","AnchorPoint","FL",2, +"(0070,0015)","Anchor Point Visibility","AnchorPointVisibility","CS",1, +"(0070,0020)","Graphic Dimensions ","GraphicDimensions","US",1, +"(0070,0021)","Number of Graphic Points","NumberOfGraphicPoints","US",1, +"(0070,0022)","Graphic Data","GraphicData","FL","2-n", +"(0070,0023)","Graphic Type","GraphicType","CS",1, +"(0070,0024)","Graphic Filled","GraphicFilled","CS",1, +"(0070,0040)","Image Rotation (Retired)","ImageRotationRetired","IS",1,"RET" +"(0070,0041)","Image Horizontal Flip","ImageHorizontalFlip","CS",1, +"(0070,0042)","Image Rotation ","ImageRotation","US",1, +"(0070,0050)","Displayed Area Top Left Hand Corner (Trial)","DisplayedAreaTopLeftHandCornerTrial","US",2,"RET" +"(0070,0051)","Displayed Area Bottom Right Hand Corner (Trial)","DisplayedAreaBottomRightHandCornerTrial","US",2,"RET" +"(0070,0052)","Displayed Area Top Left Hand Corner","DisplayedAreaTopLeftHandCorner","SL",2, +"(0070,0053)","Displayed Area Bottom Right Hand Corner","DisplayedAreaBottomRightHandCorner","SL",2, +"(0070,005A)","Displayed Area Selection Sequence","DisplayedAreaSelectionSequence","SQ",1, +"(0070,0060)","Graphic Layer Sequence","GraphicLayerSequence","SQ",1, +"(0070,0062)","Graphic Layer Order","GraphicLayerOrder","IS",1, +"(0070,0066)","Graphic Layer Recommended Display Grayscale Value","GraphicLayerRecommendedDisplayGrayscaleValue","US",1, +"(0070,0067)","Graphic Layer Recommended Display RGB Value","GraphicLayerRecommendedDisplayRGBValue","US",3,"RET" +"(0070,0068)","Graphic Layer Description","GraphicLayerDescription","LO",1, +"(0070,0080)","Content Label","ContentLabel","CS",1, +"(0070,0081)","Content Description","ContentDescription","LO",1, +"(0070,0082)","Presentation Creation Date","PresentationCreationDate","DA",1, +"(0070,0083)","Presentation Creation Time","PresentationCreationTime","TM",1, +"(0070,0084)","Content Creator’s Name","ContentCreatorName","PN",1, +"(0070,0086)","Content Creator’s Identification Code Sequence","ContentCreatorIdentificationCodeSequence","SQ",1, +"(0070,0087)","Alternate Content Description Sequence","AlternateContentDescriptionSequence","SQ",1, +"(0070,0100)","Presentation Size Mode","PresentationSizeMode","CS",1, +"(0070,0101)","Presentation Pixel Spacing","PresentationPixelSpacing","DS",2, +"(0070,0102)","Presentation Pixel Aspect Ratio","PresentationPixelAspectRatio","IS",2, +"(0070,0103)","Presentation Pixel Magnification Ratio","PresentationPixelMagnificationRatio","FL",1, +"(0070,0207)","Graphic Group Label","GraphicGroupLabel","LO",1, +"(0070,0208)","Graphic Group Description","GraphicGroupDescription","ST",1, +"(0070,0209)","Compound Graphic Sequence","CompoundGraphicSequence","SQ",1, +"(0070,0226)","Compound Graphic Instance ID","CompoundGraphicInstanceID","UL",1, +"(0070,0227)","Font Name","FontName","LO",1, +"(0070,0228)","Font Name Type","FontNameType","CS",1, +"(0070,0229)","CSS Font Name","CSSFontName","LO",1, +"(0070,0230)","Rotation Angle","RotationAngle","FD",1, +"(0070,0231)","Text Style Sequence","TextStyleSequence","SQ",1, +"(0070,0232)","Line Style Sequence","LineStyleSequence","SQ",1, +"(0070,0233)","Fill Style Sequence","FillStyleSequence","SQ",1, +"(0070,0234)","Graphic Group Sequence","GraphicGroupSequence","SQ",1, +"(0070,0241)","Text Color CIELab Value","TextColorCIELabValue","US",3, +"(0070,0242)","Horizontal Alignment","HorizontalAlignment","CS",1, +"(0070,0243)","Vertical Alignment","VerticalAlignment","CS",1, +"(0070,0244)","Shadow Style","ShadowStyle","CS",1, +"(0070,0245)","Shadow Offset X","ShadowOffsetX","FL",1, +"(0070,0246)","Shadow Offset Y","ShadowOffsetY","FL",1, +"(0070,0247)","Shadow Color CIELab Value","ShadowColorCIELabValue","US",3, +"(0070,0248)","Underlined","Underlined","CS",1, +"(0070,0249)","Bold","Bold","CS",1, +"(0070,0250)","Italic","Italic","CS",1, +"(0070,0251)","Pattern On Color CIELab Value","PatternOnColorCIELabValue","US",3, +"(0070,0252)","Pattern Off Color CIELab Value","PatternOffColorCIELabValue","US",3, +"(0070,0253)","Line Thickness","LineThickness","FL",1, +"(0070,0254)","Line Dashing Style","LineDashingStyle","CS",1, +"(0070,0255)","Line Pattern","LinePattern","UL",1, +"(0070,0256)","Fill Pattern","FillPattern","OB",1, +"(0070,0257)","Fill Mode","FillMode","CS",1, +"(0070,0258)","Shadow Opacity","ShadowOpacity","FL",1, +"(0070,0261)","Gap Length","GapLength","FL",1, +"(0070,0262)","Diameter of Visibility","DiameterOfVisibility","FL",1, +"(0070,0273)","Rotation Point","RotationPoint","FL",2, +"(0070,0274)","Tick Alignment","TickAlignment","CS",1, +"(0070,0278)","Show Tick Label","ShowTickLabel","CS",1, +"(0070,0279)","Tick Label Alignment","TickLabelAlignment","CS",1, +"(0070,0282)","Compound Graphic Units","CompoundGraphicUnits","CS",1, +"(0070,0284)","Pattern On Opacity","PatternOnOpacity","FL",1, +"(0070,0285)","Pattern Off Opacity","PatternOffOpacity","FL",1, +"(0070,0287)","Major Ticks Sequence","MajorTicksSequence","SQ",1, +"(0070,0288)","Tick Position","TickPosition","FL",1, +"(0070,0289)","Tick Label","TickLabel","SH",1, +"(0070,0294)","Compound Graphic Type","CompoundGraphicType","CS",1, +"(0070,0295)","Graphic Group ID","GraphicGroupID","UL",1, +"(0070,0306)","Shape Type","ShapeType","CS",1, +"(0070,0308)","Registration Sequence","RegistrationSequence","SQ",1, +"(0070,0309)","Matrix Registration Sequence","MatrixRegistrationSequence","SQ",1, +"(0070,030A)","Matrix Sequence","MatrixSequence","SQ",1, +"(0070,030C)","Frame of Reference Transformation Matrix Type","FrameOfReferenceTransformationMatrixType","CS",1, +"(0070,030D)","Registration Type Code Sequence","RegistrationTypeCodeSequence","SQ",1, +"(0070,030F)","Fiducial Description","FiducialDescription","ST",1, +"(0070,0310)","Fiducial Identifier","FiducialIdentifier","SH",1, +"(0070,0311)","Fiducial Identifier Code Sequence","FiducialIdentifierCodeSequence","SQ",1, +"(0070,0312)","Contour Uncertainty Radius","ContourUncertaintyRadius","FD",1, +"(0070,0314)","Used Fiducials Sequence","UsedFiducialsSequence","SQ",1, +"(0070,0318)","Graphic Coordinates Data Sequence","GraphicCoordinatesDataSequence","SQ",1, +"(0070,031A)","Fiducial UID","FiducialUID","UI",1, +"(0070,031C)","Fiducial Set Sequence","FiducialSetSequence","SQ",1, +"(0070,031E)","Fiducial Sequence","FiducialSequence","SQ",1, +"(0070,0401)","Graphic Layer Recommended Display CIELab Value","GraphicLayerRecommendedDisplayCIELabValue","US",3, +"(0070,0402)","Blending Sequence","BlendingSequence","SQ",1, +"(0070,0403)","Relative Opacity","RelativeOpacity","FL",1, +"(0070,0404)","Referenced Spatial Registration Sequence","ReferencedSpatialRegistrationSequence","SQ",1, +"(0070,0405)","Blending Position","BlendingPosition","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0072,0002)","Hanging Protocol Name","HangingProtocolName","SH",1, +"(0072,0004)","Hanging Protocol Description","HangingProtocolDescription","LO",1, +"(0072,0006)","Hanging Protocol Level","HangingProtocolLevel","CS",1, +"(0072,0008)","Hanging Protocol Creator","HangingProtocolCreator","LO",1, +"(0072,000A)","Hanging Protocol Creation DateTime","HangingProtocolCreationDateTime","DT",1, +"(0072,000C)","Hanging Protocol Definition Sequence","HangingProtocolDefinitionSequence","SQ",1, +"(0072,000E)","Hanging Protocol User Identification Code Sequence","HangingProtocolUserIdentificationCodeSequence","SQ",1, +"(0072,0010)","Hanging Protocol User Group Name","HangingProtocolUserGroupName","LO",1, +"(0072,0012)","Source Hanging Protocol Sequence","SourceHangingProtocolSequence","SQ",1, +"(0072,0014)","Number of Priors Referenced","NumberOfPriorsReferenced","US",1, +"(0072,0020)","Image Sets Sequence","ImageSetsSequence","SQ",1, +"(0072,0022)","Image Set Selector Sequence","ImageSetSelectorSequence","SQ",1, +"(0072,0024)","Image Set Selector Usage Flag","ImageSetSelectorUsageFlag","CS",1, +"(0072,0026)","Selector Attribute","SelectorAttribute","AT",1, +"(0072,0028)","Selector Value Number","SelectorValueNumber","US",1, +"(0072,0030)","Time Based Image Sets Sequence","TimeBasedImageSetsSequence","SQ",1, +"(0072,0032)","Image Set Number","ImageSetNumber","US",1, +"(0072,0034)","Image Set Selector Category","ImageSetSelectorCategory","CS",1, +"(0072,0038)","Relative Time","RelativeTime","US",2, +"(0072,003A)","Relative Time Units","RelativeTimeUnits","CS",1, +"(0072,003C)","Abstract Prior Value","AbstractPriorValue","SS",2, +"(0072,003E)","Abstract Prior Code Sequence","AbstractPriorCodeSequence","SQ",1, +"(0072,0040)","Image Set Label","ImageSetLabel","LO",1, +"(0072,0050)","Selector Attribute VR","SelectorAttributeVR","CS",1, +"(0072,0052)","Selector Sequence Pointer","SelectorSequencePointer","AT","1-n", +"(0072,0054)","Selector Sequence Pointer Private Creator","SelectorSequencePointerPrivateCreator","LO","1-n", +"(0072,0056)","Selector Attribute Private Creator","SelectorAttributePrivateCreator","LO",1, +"(0072,0060)","Selector AT Value","SelectorATValue","AT","1-n", +"(0072,0062)","Selector CS Value","SelectorCSValue","CS","1-n", +"(0072,0064)","Selector IS Value","SelectorISValue","IS","1-n", +"(0072,0066)","Selector LO Value","SelectorLOValue","LO","1-n", +"(0072,0068)","Selector LT Value","SelectorLTValue","LT",1, +"(0072,006A)","Selector PN Value","SelectorPNValue","PN","1-n", +"(0072,006C)","Selector SH Value","SelectorSHValue","SH","1-n", +"(0072,006E)","Selector ST Value","SelectorSTValue","ST",1, +"(0072,0070)","Selector UT Value","SelectorUTValue","UT",1, +"(0072,0072)","Selector DS Value","SelectorDSValue","DS","1-n", +"(0072,0074)","Selector FD Value","SelectorFDValue","FD","1-n", +"(0072,0076)","Selector FL Value","SelectorFLValue","FL","1-n", +"(0072,0078)","Selector UL Value","SelectorULValue","UL","1-n", +"(0072,007A)","Selector US Value","SelectorUSValue","US","1-n", +"(0072,007C)","Selector SL Value","SelectorSLValue","SL","1-n", +"(0072,007E)","Selector SS Value","SelectorSSValue","SS","1-n", +"(0072,0080)","Selector Code Sequence Value","SelectorCodeSequenceValue","SQ",1, +"(0072,0100)","Number of Screens","NumberOfScreens","US",1, +"(0072,0102)","Nominal Screen Definition Sequence","NominalScreenDefinitionSequence","SQ",1, +"(0072,0104)","Number of Vertical Pixels","NumberOfVerticalPixels","US",1, +"(0072,0106)","Number of Horizontal Pixels","NumberOfHorizontalPixels","US",1, +"(0072,0108)","Display Environment Spatial Position","DisplayEnvironmentSpatialPosition","FD",4, +"(0072,010A)","Screen Minimum Grayscale Bit Depth","ScreenMinimumGrayscaleBitDepth","US",1, +"(0072,010C)","Screen Minimum Color Bit Depth","ScreenMinimumColorBitDepth","US",1, +"(0072,010E)","Application Maximum Repaint Time","ApplicationMaximumRepaintTime","US",1, +"(0072,0200)","Display Sets Sequence","DisplaySetsSequence","SQ",1, +"(0072,0202)","Display Set Number","DisplaySetNumber","US",1, +"(0072,0203)","Display Set Label","DisplaySetLabel","LO",1, +"(0072,0204)","Display Set Presentation Group","DisplaySetPresentationGroup","US",1, +"(0072,0206)","Display Set Presentation Group Description","DisplaySetPresentationGroupDescription","LO",1, +"(0072,0208)","Partial Data Display Handling","PartialDataDisplayHandling","CS",1, +"(0072,0210)","Synchronized Scrolling Sequence","SynchronizedScrollingSequence","SQ",1, +"(0072,0212)","Display Set Scrolling Group","DisplaySetScrollingGroup","US","2-n", +"(0072,0214)","Navigation Indicator Sequence","NavigationIndicatorSequence","SQ",1, +"(0072,0216)","Navigation Display Set ","NavigationDisplaySet","US",1, +"(0072,0218)","Reference Display Sets","ReferenceDisplaySets","US","1-n", +"(0072,0300)","Image Boxes Sequence","ImageBoxesSequence","SQ",1, +"(0072,0302)","Image Box Number","ImageBoxNumber","US",1, +"(0072,0304)","Image Box Layout Type","ImageBoxLayoutType","CS",1, +"(0072,0306)","Image Box Tile Horizontal Dimension","ImageBoxTileHorizontalDimension","US",1, +"(0072,0308)","Image Box Tile Vertical Dimension","ImageBoxTileVerticalDimension","US",1, +"(0072,0310)","Image Box Scroll Direction","ImageBoxScrollDirection","CS",1, +"(0072,0312)","Image Box Small Scroll Type","ImageBoxSmallScrollType","CS",1, +"(0072,0314)","Image Box Small Scroll Amount","ImageBoxSmallScrollAmount","US",1, +"(0072,0316)","Image Box Large Scroll Type","ImageBoxLargeScrollType","CS",1, +"(0072,0318)","Image Box Large Scroll Amount","ImageBoxLargeScrollAmount","US",1, +"(0072,0320)","Image Box Overlap Priority","ImageBoxOverlapPriority","US",1, +"(0072,0330)","Cine Relative to Real-Time","CineRelativeToRealTime","FD",1, +"(0072,0400)","Filter Operations Sequence","FilterOperationsSequence","SQ",1, +"(0072,0402)","Filter-by Category","FilterByCategory","CS",1, +"(0072,0404)","Filter-by Attribute Presence","FilterByAttributePresence","CS",1, +"(0072,0406)","Filter-by Operator","FilterByOperator","CS",1, +"(0072,0420)","Structured Display Background CIELab Value","StructuredDisplayBackgroundCIELabValue","US",3, +"(0072,0421)","Empty Image Box CIELab Value","EmptyImageBoxCIELabValue","US",3, +"(0072,0422)","Structured Display Image Box Sequence","StructuredDisplayImageBoxSequence","SQ",1, +"(0072,0424)","Structured Display Text Box Sequence","StructuredDisplayTextBoxSequence","SQ",1, +"(0072,0427)","Referenced First Frame Sequence","ReferencedFirstFrameSequence","SQ",1, +"(0072,0430)","Image Box Synchronization Sequence","ImageBoxSynchronizationSequence","SQ",1, +"(0072,0432)","Synchronized Image Box List","SynchronizedImageBoxList","US","2-n", +"(0072,0434)","Type of Synchronization","TypeOfSynchronization","CS",1, +"(0072,0500)","Blending Operation Type","BlendingOperationType","CS",1, +"(0072,0510)","Reformatting Operation Type","ReformattingOperationType","CS",1, +"(0072,0512)","Reformatting Thickness","ReformattingThickness","FD",1, +"(0072,0514)","Reformatting Interval","ReformattingInterval","FD",1, +"(0072,0516)","Reformatting Operation Initial View Direction","ReformattingOperationInitialViewDirection","CS",1, +"(0072,0520)","3D Rendering Type","ThreeDRenderingType","CS","1-n", +"(0072,0600)","Sorting Operations Sequence","SortingOperationsSequence","SQ",1, +"(0072,0602)","Sort-by Category","SortByCategory","CS",1, +"(0072,0604)","Sorting Direction","SortingDirection","CS",1, +"(0072,0700)","Display Set Patient Orientation","DisplaySetPatientOrientation","CS",2, +"(0072,0702)","VOI Type","VOIType","CS",1, +"(0072,0704)","Pseudo-Color Type","PseudoColorType","CS",1, +"(0072,0705)","Pseudo-Color Palette Instance Reference Sequence","PseudoColorPaletteInstanceReferenceSequence","SQ",1, +"(0072,0706)","Show Grayscale Inverted","ShowGrayscaleInverted","CS",1, +"(0072,0710)","Show Image True Size Flag","ShowImageTrueSizeFlag","CS",1, +"(0072,0712)","Show Graphic Annotation Flag","ShowGraphicAnnotationFlag","CS",1, +"(0072,0714)","Show Patient Demographics Flag","ShowPatientDemographicsFlag","CS",1, +"(0072,0716)","Show Acquisition Techniques Flag","ShowAcquisitionTechniquesFlag","CS",1, +"(0072,0717)","Display Set Horizontal Justification ","DisplaySetHorizontalJustification","CS",1, +"(0072,0718)","Display Set Vertical Justification","DisplaySetVerticalJustification","CS",1, +"Tag","Name","Keyword","VR","VM", +"(0074,0120)","Continuation Start Meterset","ContinuationStartMeterset","FD",1, +"(0074,0121)","Continuation End Meterset","ContinuationEndMeterset","FD",1, +"(0074,1000)","Procedure Step State","ProcedureStepState","CS",1, +"(0074,1002)","Procedure Step Progress Information Sequence","ProcedureStepProgressInformationSequence","SQ",1, +"(0074,1004)","Procedure Step Progress","ProcedureStepProgress","DS",1, +"(0074,1006)","Procedure Step Progress Description","ProcedureStepProgressDescription","ST",1, +"(0074,1008)","Procedure Step Communications URI Sequence","ProcedureStepCommunicationsURISequence","SQ",1, +"(0074,100a)","Contact URI","ContactURI","ST",1, +"(0074,100c)","Contact Display Name","ContactDisplayName","LO",1, +"(0074,100e)","Procedure Step Discontinuation Reason Code Sequence","ProcedureStepDiscontinuationReasonCodeSequence","SQ",1, +"(0074,1020)","Beam Task Sequence","BeamTaskSequence","SQ",1, +"(0074,1022)","Beam Task Type","BeamTaskType","CS",1, +"(0074,1024)","Beam Order Index (Trial)","BeamOrderIndexTrial","IS",1,"RET" +"(0074,1026)","Table Top Vertical Adjusted Position","TableTopVerticalAdjustedPosition","FD",1, +"(0074,1027)","Table Top Longitudinal Adjusted Position","TableTopLongitudinalAdjustedPosition","FD",1, +"(0074,1028)","Table Top Lateral Adjusted Position","TableTopLateralAdjustedPosition","FD",1, +"(0074,102A)","Patient Support Adjusted Angle","PatientSupportAdjustedAngle","FD",1, +"(0074,102B)","Table Top Eccentric Adjusted Angle","TableTopEccentricAdjustedAngle","FD",1, +"(0074,102C)","Table Top Pitch Adjusted Angle","TableTopPitchAdjustedAngle","FD",1, +"(0074,102D)","Table Top Roll Adjusted Angle","TableTopRollAdjustedAngle","FD",1, +"(0074,1030)","Delivery Verification Image Sequence","DeliveryVerificationImageSequence","SQ",1, +"(0074,1032)","Verification Image Timing","VerificationImageTiming","CS",1, +"(0074,1034)","Double Exposure Flag","DoubleExposureFlag","CS",1, +"(0074,1036)","Double Exposure Ordering","DoubleExposureOrdering","CS",1, +"(0074,1038)","Double Exposure Meterset (Trial)","DoubleExposureMetersetTrial","DS",1,"RET" +"(0074,103A)","Double Exposure Field Delta (Trial)","DoubleExposureFieldDeltaTrial","DS",4,"RET" +"(0074,1040)","Related Reference RT Image Sequence","RelatedReferenceRTImageSequence","SQ",1, +"(0074,1042)","General Machine Verification Sequence","GeneralMachineVerificationSequence","SQ",1, +"(0074,1044)","Conventional Machine Verification Sequence","ConventionalMachineVerificationSequence","SQ",1, +"(0074,1046)","Ion Machine Verification Sequence","IonMachineVerificationSequence","SQ",1, +"(0074,1048)","Failed Attributes Sequence","FailedAttributesSequence","SQ",1, +"(0074,104A)","Overridden Attributes Sequence","OverriddenAttributesSequence","SQ",1, +"(0074,104C)","Conventional Control Point Verification Sequence","ConventionalControlPointVerificationSequence","SQ",1, +"(0074,104E)","Ion Control Point Verification Sequence","IonControlPointVerificationSequence","SQ",1, +"(0074,1050)","Attribute Occurrence Sequence","AttributeOccurrenceSequence","SQ",1, +"(0074,1052)","Attribute Occurrence Pointer","AttributeOccurrencePointer","AT",1, +"(0074,1054)","Attribute Item Selector","AttributeItemSelector","UL",1, +"(0074,1056)","Attribute Occurrence Private Creator","AttributeOccurrencePrivateCreator","LO",1, +"(0074,1057)","Selector Sequence Pointer Items","SelectorSequencePointerItems","IS","1-n", +"(0074,1200)","Scheduled Procedure Step Priority","ScheduledProcedureStepPriority","CS",1, +"(0074,1202)","Worklist Label","WorklistLabel","LO",1, +"(0074,1204)","Procedure Step Label","ProcedureStepLabel","LO",1, +"(0074,1210)","Scheduled Processing Parameters Sequence","ScheduledProcessingParametersSequence","SQ",1, +"(0074,1212)","Performed Processing Parameters Sequence","PerformedProcessingParametersSequence","SQ",1, +"(0074,1216)","Unified Procedure Step Performed Procedure Sequence","UnifiedProcedureStepPerformedProcedureSequence","SQ",1, +"(0074,1220)","Related Procedure Step Sequence","RelatedProcedureStepSequence","SQ",1,"RET" +"(0074,1222)","Procedure Step Relationship Type","ProcedureStepRelationshipType","LO",1,"RET" +"(0074,1224)","Replaced Procedure Step Sequence","ReplacedProcedureStepSequence","SQ",1, +"(0074,1230)","Deletion Lock","DeletionLock","LO",1, +"(0074,1234)","Receiving AE","ReceivingAE","AE",1, +"(0074,1236)","Requesting AE","RequestingAE","AE",1, +"(0074,1238)","Reason for Cancellation","ReasonForCancellation","LT",1, +"(0074,1242)","SCP Status","SCPStatus","CS",1, +"(0074,1244)","Subscription List Status","SubscriptionListStatus","CS",1, +"(0074,1246)","Unified Procedure Step List Status","UnifiedProcedureStepListStatus","CS",1, +"(0074,1324)","Beam Order Index","BeamOrderIndex","UL",1, +"(0074,1338)","Double Exposure Meterset","DoubleExposureMeterset","FD",1, +"(0074,133A)","Double Exposure Field Delta","DoubleExposureFieldDelta","FD",4, +"Tag","Name","Keyword","VR","VM", +"(0076,0001)","Implant Assembly Template Name","ImplantAssemblyTemplateName","LO",1, +"(0076,0003)","Implant Assembly Template Issuer","ImplantAssemblyTemplateIssuer","LO",1, +"(0076,0006)","Implant Assembly Template Version","ImplantAssemblyTemplateVersion","LO",1, +"(0076,0008)","Replaced Implant Assembly Template Sequence ","ReplacedImplantAssemblyTemplateSequence","SQ",1, +"(0076,000A)","Implant Assembly Template Type","ImplantAssemblyTemplateType","CS",1, +"(0076,000C)","Original Implant Assembly Template Sequence ","OriginalImplantAssemblyTemplateSequence","SQ",1, +"(0076,000E)","Derivation Implant Assembly Template Sequence ","DerivationImplantAssemblyTemplateSequence","SQ",1, +"(0076,0010)","Implant Assembly Template Target Anatomy Sequence","ImplantAssemblyTemplateTargetAnatomySequence","SQ",1, +"(0076,0020)","Procedure Type Code Sequence","ProcedureTypeCodeSequence","SQ",1, +"(0076,0030)","Surgical Technique ","SurgicalTechnique","LO",1, +"(0076,0032)","Component Types Sequence","ComponentTypesSequence","SQ",1, +"(0076,0034)","Component Type Code Sequence","ComponentTypeCodeSequence","CS",1, +"(0076,0036)","Exclusive Component Type","ExclusiveComponentType","CS",1, +"(0076,0038)","Mandatory Component Type","MandatoryComponentType","CS",1, +"(0076,0040)","Component Sequence","ComponentSequence","SQ",1, +"(0076,0055)","Component ID","ComponentID","US",1, +"(0076,0060)","Component Assembly Sequence","ComponentAssemblySequence","SQ",1, +"(0076,0070)","Component 1 Referenced ID","Component1ReferencedID","US",1, +"(0076,0080)","Component 1 Referenced Mating Feature Set ID","Component1ReferencedMatingFeatureSetID","US",1, +"(0076,0090)","Component 1 Referenced Mating Feature ID","Component1ReferencedMatingFeatureID","US",1, +"(0076,00A0)","Component 2 Referenced ID","Component2ReferencedID","US",1, +"(0076,00B0)","Component 2 Referenced Mating Feature Set ID","Component2ReferencedMatingFeatureSetID","US",1, +"(0076,00C0)","Component 2 Referenced Mating Feature ID ","Component2ReferencedMatingFeatureID","US",1, +"Tag","Name","Keyword","VR","VM", +"(0078,0001)","Implant Template Group Name","ImplantTemplateGroupName","LO",1, +"(0078,0010)","Implant Template Group Description","ImplantTemplateGroupDescription","ST",1, +"(0078,0020)","Implant Template Group Issuer","ImplantTemplateGroupIssuer","LO",1, +"(0078,0024)","Implant Template Group Version","ImplantTemplateGroupVersion","LO",1, +"(0078,0026)","Replaced Implant Template Group Sequence ","ReplacedImplantTemplateGroupSequence","SQ",1, +"(0078,0028)","Implant Template Group Target Anatomy Sequence","ImplantTemplateGroupTargetAnatomySequence","SQ",1, +"(0078,002A)","Implant Template Group Members Sequence","ImplantTemplateGroupMembersSequence","SQ",1, +"(0078,002E)","Implant Template Group Member ID","ImplantTemplateGroupMemberID","US",1, +"(0078,0050)","3D Implant Template Group Member Matching Point","ThreeDImplantTemplateGroupMemberMatchingPoint","FD",3, +"(0078,0060)","3D Implant Template Group Member Matching Axes","ThreeDImplantTemplateGroupMemberMatchingAxes","FD",9, +"(0078,0070)","Implant Template Group Member Matching 2D Coordinates Sequence","ImplantTemplateGroupMemberMatching2DCoordinatesSequence","SQ",1, +"(0078,0090)","2D Implant Template Group Member Matching Point ","TwoDImplantTemplateGroupMemberMatchingPoint","FD",2, +"(0078,00A0)","2D Implant Template Group Member Matching Axes","TwoDImplantTemplateGroupMemberMatchingAxes","FD",4, +"(0078,00B0)","Implant Template Group Variation Dimension Sequence","ImplantTemplateGroupVariationDimensionSequence","SQ",1, +"(0078,00B2)","Implant Template Group Variation Dimension Name","ImplantTemplateGroupVariationDimensionName","LO",1, +"(0078,00B4)","Implant Template Group Variation Dimension Rank Sequence","ImplantTemplateGroupVariationDimensionRankSequence","SQ",1, +"(0078,00B6)","Referenced Implant Template Group Member ID","ReferencedImplantTemplateGroupMemberID","US",1, +"(0078,00B8)","Implant Template Group Variation Dimension Rank","ImplantTemplateGroupVariationDimensionRank","US",1, +"Tag","Name","Keyword","VR","VM", +"(0088,0130)","Storage Media File-set ID","StorageMediaFileSetID","SH",1, +"(0088,0140)","Storage Media File-set UID","StorageMediaFileSetUID","UI",1, +"(0088,0200)","Icon Image Sequence","IconImageSequence","SQ",1, +"(0088,0904)","Topic Title","TopicTitle","LO",1,"RET" +"(0088,0906)","Topic Subject","TopicSubject","ST",1,"RET" +"(0088,0910)","Topic Author","TopicAuthor","LO",1,"RET" +"(0088,0912)","Topic Keywords","TopicKeywords","LO","1-32","RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0100,0410)","SOP Instance Status","SOPInstanceStatus","CS",1, +"(0100,0420)","SOP Authorization DateTime","SOPAuthorizationDateTime","DT",1, +"(0100,0424)","SOP Authorization Comment","SOPAuthorizationComment","LT",1, +"(0100,0426)","Authorization Equipment Certification Number","AuthorizationEquipmentCertificationNumber","LO",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(0400,0005)","MAC ID Number","MACIDNumber","US",1, +"(0400,0010)","MAC Calculation Transfer Syntax UID","MACCalculationTransferSyntaxUID","UI",1, +"(0400,0015)","MAC Algorithm","MACAlgorithm","CS",1, +"(0400,0020)","Data Elements Signed","DataElementsSigned","AT","1-n", +"(0400,0100)","Digital Signature UID","DigitalSignatureUID","UI",1, +"(0400,0105)","Digital Signature DateTime","DigitalSignatureDateTime","DT",1, +"(0400,0110)","Certificate Type","CertificateType","CS",1, +"(0400,0115)","Certificate of Signer","CertificateOfSigner","OB",1, +"(0400,0120)","Signature","Signature","OB",1, +"(0400,0305)","Certified Timestamp Type","CertifiedTimestampType","CS",1, +"(0400,0310)","Certified Timestamp","CertifiedTimestamp","OB",1, +"(0400,0401)","Digital Signature Purpose Code Sequence","DigitalSignaturePurposeCodeSequence","SQ",1, +"(0400,0402)","Referenced Digital Signature Sequence","ReferencedDigitalSignatureSequence","SQ",1, +"(0400,0403)","Referenced SOP Instance MAC Sequence","ReferencedSOPInstanceMACSequence","SQ",1, +"(0400,0404)","MAC","MAC","OB",1, +"(0400,0500)","Encrypted Attributes Sequence","EncryptedAttributesSequence","SQ",1, +"(0400,0510)","Encrypted Content Transfer Syntax UID","EncryptedContentTransferSyntaxUID","UI",1, +"(0400,0520)","Encrypted Content","EncryptedContent","OB",1, +"(0400,0550)","Modified Attributes Sequence","ModifiedAttributesSequence","SQ",1, +"(0400,0561)","Original Attributes Sequence","OriginalAttributesSequence","SQ",1, +"(0400,0562)","Attribute Modification DateTime","AttributeModificationDateTime","DT",1, +"(0400,0563)","Modifying System","ModifyingSystem","LO",1, +"(0400,0564)","Source of Previous Values","SourceOfPreviousValues","LO",1, +"(0400,0565)","Reason for the Attribute Modification","ReasonForTheAttributeModification","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(1000,xxx0)","Escape Triplet","EscapeTriplet","US",3,"RET" +"(1000,xxx1)","Run Length Triplet","RunLengthTriplet","US",3,"RET" +"(1000,xxx2)","Huffman Table Size","HuffmanTableSize","US",1,"RET" +"(1000,xxx3)","Huffman Table Triplet","HuffmanTableTriplet","US",3,"RET" +"(1000,xxx4)","Shift Table Size","ShiftTableSize","US",1,"RET" +"(1000,xxx5)","Shift Table Triplet","ShiftTableTriplet","US",3,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(1010,xxxx)","Zonal Map","ZonalMap","US","1-n","RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(2000,0010)","Number of Copies","NumberOfCopies","IS",1, +"(2000,001E)","Printer Configuration Sequence","PrinterConfigurationSequence","SQ",1, +"(2000,0020)","Print Priority","PrintPriority","CS",1, +"(2000,0030)","Medium Type","MediumType","CS",1, +"(2000,0040)","Film Destination","FilmDestination","CS",1, +"(2000,0050)","Film Session Label","FilmSessionLabel","LO",1, +"(2000,0060)","Memory Allocation","MemoryAllocation","IS",1, +"(2000,0061)","Maximum Memory Allocation","MaximumMemoryAllocation","IS",1, +"(2000,0062)","Color Image Printing Flag","ColorImagePrintingFlag","CS",1,"RET" +"(2000,0063)","Collation Flag","CollationFlag","CS",1,"RET" +"(2000,0065)","Annotation Flag","AnnotationFlag","CS",1,"RET" +"(2000,0067)","Image Overlay Flag","ImageOverlayFlag","CS",1,"RET" +"(2000,0069)","Presentation LUT Flag","PresentationLUTFlag","CS",1,"RET" +"(2000,006A)","Image Box Presentation LUT Flag","ImageBoxPresentationLUTFlag","CS",1,"RET" +"(2000,00A0)","Memory Bit Depth","MemoryBitDepth","US",1, +"(2000,00A1)","Printing Bit Depth","PrintingBitDepth","US",1, +"(2000,00A2)","Media Installed Sequence","MediaInstalledSequence","SQ",1, +"(2000,00A4)","Other Media Available Sequence","OtherMediaAvailableSequence","SQ",1, +"(2000,00A8)","Supported Image Display Formats Sequence","SupportedImageDisplayFormatsSequence","SQ",1, +"(2000,0500)","Referenced Film Box Sequence","ReferencedFilmBoxSequence","SQ",1, +"(2000,0510)","Referenced Stored Print Sequence","ReferencedStoredPrintSequence","SQ",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(2010,0010)","Image Display Format","ImageDisplayFormat","ST",1, +"(2010,0030)","Annotation Display Format ID","AnnotationDisplayFormatID","CS",1, +"(2010,0040)","Film Orientation","FilmOrientation","CS",1, +"(2010,0050)","Film Size ID","FilmSizeID","CS",1, +"(2010,0052)","Printer Resolution ID","PrinterResolutionID","CS",1, +"(2010,0054)","Default Printer Resolution ID","DefaultPrinterResolutionID","CS",1, +"(2010,0060)","Magnification Type","MagnificationType","CS",1, +"(2010,0080)","Smoothing Type ","SmoothingType","CS",1, +"(2010,00A6)","Default Magnification Type","DefaultMagnificationType","CS",1, +"(2010,00A7)","Other Magnification Types Available","OtherMagnificationTypesAvailable","CS","1-n", +"(2010,00A8)","Default Smoothing Type","DefaultSmoothingType","CS",1, +"(2010,00A9)","Other Smoothing Types Available","OtherSmoothingTypesAvailable","CS","1-n", +"(2010,0100)","Border Density","BorderDensity","CS",1, +"(2010,0110)","Empty Image Density","EmptyImageDensity","CS",1, +"(2010,0120)","Min Density","MinDensity","US",1, +"(2010,0130)","Max Density","MaxDensity","US",1, +"(2010,0140)","Trim","Trim","CS",1, +"(2010,0150)","Configuration Information","ConfigurationInformation","ST",1, +"(2010,0152)","Configuration Information Description","ConfigurationInformationDescription","LT",1, +"(2010,0154)","Maximum Collated Films","MaximumCollatedFilms","IS",1, +"(2010,015E)","Illumination","Illumination","US",1, +"(2010,0160)","Reflected Ambient Light","ReflectedAmbientLight","US",1, +"(2010,0376)","Printer Pixel Spacing","PrinterPixelSpacing","DS",2, +"(2010,0500)","Referenced Film Session Sequence","ReferencedFilmSessionSequence","SQ",1, +"(2010,0510)","Referenced Image Box Sequence","ReferencedImageBoxSequence","SQ",1, +"(2010,0520)","Referenced Basic Annotation Box Sequence","ReferencedBasicAnnotationBoxSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(2020,0010)","Image Box Position","ImageBoxPosition","US",1, +"(2020,0020)","Polarity","Polarity","CS",1, +"(2020,0030)","Requested Image Size","RequestedImageSize","DS",1, +"(2020,0040)","Requested Decimate/Crop Behavior","RequestedDecimateCropBehavior","CS",1, +"(2020,0050)","Requested Resolution ID","RequestedResolutionID","CS",1, +"(2020,00A0)","Requested Image Size Flag","RequestedImageSizeFlag","CS",1, +"(2020,00A2)","Decimate/Crop Result","DecimateCropResult","CS",1, +"(2020,0110)","Basic Grayscale Image Sequence","BasicGrayscaleImageSequence","SQ",1, +"(2020,0111)","Basic Color Image Sequence","BasicColorImageSequence","SQ",1, +"(2020,0130)","Referenced Image Overlay Box Sequence","ReferencedImageOverlayBoxSequence","SQ",1,"RET" +"(2020,0140)","Referenced VOI LUT Box Sequence ","ReferencedVOILUTBoxSequence","SQ",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(2030,0010)","Annotation Position","AnnotationPosition","US",1, +"(2030,0020)","Text String","TextString","LO",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(2040,0010)","Referenced Overlay Plane Sequence","ReferencedOverlayPlaneSequence","SQ",1,"RET" +"(2040,0011)","Referenced Overlay Plane Groups","ReferencedOverlayPlaneGroups","US","1-99","RET" +"(2040,0020)","Overlay Pixel Data Sequence","OverlayPixelDataSequence","SQ",1,"RET" +"(2040,0060)","Overlay Magnification Type","OverlayMagnificationType","CS",1,"RET" +"(2040,0070)","Overlay Smoothing Type","OverlaySmoothingType","CS",1,"RET" +"(2040,0072)","Overlay or Image Magnification","OverlayOrImageMagnification","CS",1,"RET" +"(2040,0074)","Magnify to Number of Columns","MagnifyToNumberOfColumns","US",1,"RET" +"(2040,0080)","Overlay Foreground Density","OverlayForegroundDensity","CS",1,"RET" +"(2040,0082)","Overlay Background Density","OverlayBackgroundDensity","CS",1,"RET" +"(2040,0090)","Overlay Mode","OverlayMode","CS",1,"RET" +"(2040,0100)","Threshold Density","ThresholdDensity","CS",1,"RET" +"(2040,0500)","Referenced Image Box Sequence (Retired)","ReferencedImageBoxSequenceRetired","SQ",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(2050,0010)","Presentation LUT Sequence","PresentationLUTSequence","SQ",1, +"(2050,0020)","Presentation LUT Shape","PresentationLUTShape","CS",1, +"(2050,0500)","Referenced Presentation LUT Sequence","ReferencedPresentationLUTSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(2100,0010)","Print Job ID","PrintJobID","SH",1,"RET" +"(2100,0020)","Execution Status","ExecutionStatus","CS",1, +"(2100,0030)","Execution Status Info","ExecutionStatusInfo","CS",1, +"(2100,0040)","Creation Date","CreationDate","DA",1, +"(2100,0050)","Creation Time","CreationTime","TM",1, +"(2100,0070)","Originator","Originator","AE",1, +"(2100,0140)","Destination AE","DestinationAE","AE",1,"RET" +"(2100,0160)","Owner ID","OwnerID","SH",1, +"(2100,0170)","Number of Films","NumberOfFilms","IS",1, +"(2100,0500)","Referenced Print Job Sequence (Pull Stored Print)","ReferencedPrintJobSequencePullStoredPrint","SQ",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(2110,0010)","Printer Status","PrinterStatus","CS",1, +"(2110,0020)","Printer Status Info","PrinterStatusInfo","CS",1, +"(2110,0030)","Printer Name","PrinterName","LO",1, +"(2110,0099)","Print Queue ID","PrintQueueID","SH",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(2120,0010)","Queue Status","QueueStatus","CS",1,"RET" +"(2120,0050)","Print Job Description Sequence","PrintJobDescriptionSequence","SQ",1,"RET" +"(2120,0070)","Referenced Print Job Sequence","ReferencedPrintJobSequence","SQ",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(2130,0010)","Print Management Capabilities Sequence","PrintManagementCapabilitiesSequence","SQ",1,"RET" +"(2130,0015)","Printer Characteristics Sequence","PrinterCharacteristicsSequence","SQ",1,"RET" +"(2130,0030)","Film Box Content Sequence","FilmBoxContentSequence","SQ",1,"RET" +"(2130,0040)","Image Box Content Sequence","ImageBoxContentSequence","SQ",1,"RET" +"(2130,0050)","Annotation Content Sequence","AnnotationContentSequence","SQ",1,"RET" +"(2130,0060)","Image Overlay Box Content Sequence","ImageOverlayBoxContentSequence","SQ",1,"RET" +"(2130,0080)","Presentation LUT Content Sequence","PresentationLUTContentSequence","SQ",1,"RET" +"(2130,00A0)","Proposed Study Sequence","ProposedStudySequence","SQ",1,"RET" +"(2130,00C0)","Original Image Sequence","OriginalImageSequence","SQ",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(2200,0001)","Label Using Information Extracted From Instances","LabelUsingInformationExtractedFromInstances","CS",1, +"(2200,0002)","Label Text","LabelText","UT",1, +"(2200,0003)","Label Style Selection","LabelStyleSelection","CS",1, +"(2200,0004)","Media Disposition","MediaDisposition","LT",1, +"(2200,0005)","Barcode Value","BarcodeValue","LT",1, +"(2200,0006)","Barcode Symbology","BarcodeSymbology","CS",1, +"(2200,0007)","Allow Media Splitting","AllowMediaSplitting","CS",1, +"(2200,0008)","Include Non-DICOM Objects","IncludeNonDICOMObjects","CS",1, +"(2200,0009)","Include Display Application","IncludeDisplayApplication","CS",1, +"(2200,000A)","Preserve Composite Instances After Media Creation","PreserveCompositeInstancesAfterMediaCreation","CS",1, +"(2200,000B)","Total Number of Pieces of Media Created","TotalNumberOfPiecesOfMediaCreated","US",1, +"(2200,000C)","Requested Media Application Profile","RequestedMediaApplicationProfile","LO",1, +"(2200,000D)","Referenced Storage Media Sequence","ReferencedStorageMediaSequence","SQ",1, +"(2200,000E)","Failure Attributes","FailureAttributes","AT","1-n", +"(2200,000F)","Allow Lossy Compression","AllowLossyCompression","CS",1, +"(2200,0020)","Request Priority","RequestPriority","CS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(3002,0002)","RT Image Label","RTImageLabel","SH",1, +"(3002,0003)","RT Image Name","RTImageName","LO",1, +"(3002,0004)","RT Image Description","RTImageDescription","ST",1, +"(3002,000A)","Reported Values Origin","ReportedValuesOrigin","CS",1, +"(3002,000C)","RT Image Plane","RTImagePlane","CS",1, +"(3002,000D)","X-Ray Image Receptor Translation","XRayImageReceptorTranslation","DS",3, +"(3002,000E)","X-Ray Image Receptor Angle","XRayImageReceptorAngle","DS",1, +"(3002,0010)","RT Image Orientation","RTImageOrientation","DS",6, +"(3002,0011)","Image Plane Pixel Spacing","ImagePlanePixelSpacing","DS",2, +"(3002,0012)","RT Image Position","RTImagePosition","DS",2, +"(3002,0020)","Radiation Machine Name","RadiationMachineName","SH",1, +"(3002,0022)","Radiation Machine SAD","RadiationMachineSAD","DS",1, +"(3002,0024)","Radiation Machine SSD","RadiationMachineSSD","DS",1, +"(3002,0026)","RT Image SID","RTImageSID","DS",1, +"(3002,0028)","Source to Reference Object Distance","SourceToReferenceObjectDistance","DS",1, +"(3002,0029)","Fraction Number","FractionNumber","IS",1, +"(3002,0030)","Exposure Sequence","ExposureSequence","SQ",1, +"(3002,0032)","Meterset Exposure","MetersetExposure","DS",1, +"(3002,0034)","Diaphragm Position","DiaphragmPosition","DS",4, +"(3002,0040)","Fluence Map Sequence","FluenceMapSequence","SQ",1, +"(3002,0041)","Fluence Data Source","FluenceDataSource","CS",1, +"(3002,0042)","Fluence Data Scale","FluenceDataScale","DS",1, +"(3002,0050)","Primary Fluence Mode Sequence","PrimaryFluenceModeSequence","SQ",1, +"(3002,0051)","Fluence Mode","FluenceMode","CS",1, +"(3002,0052)","Fluence Mode ID","FluenceModeID","SH",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(3004,0001)","DVH Type","DVHType","CS",1, +"(3004,0002)","Dose Units","DoseUnits","CS",1, +"(3004,0004)","Dose Type","DoseType","CS",1, +"(3004,0006)","Dose Comment","DoseComment","LO",1, +"(3004,0008)","Normalization Point","NormalizationPoint","DS",3, +"(3004,000A)","Dose Summation Type","DoseSummationType","CS",1, +"(3004,000C)","Grid Frame Offset Vector","GridFrameOffsetVector","DS","2-n", +"(3004,000E)","Dose Grid Scaling","DoseGridScaling","DS",1, +"(3004,0010)","RT Dose ROI Sequence","RTDoseROISequence","SQ",1, +"(3004,0012)","Dose Value","DoseValue","DS",1, +"(3004,0014)","Tissue Heterogeneity Correction","TissueHeterogeneityCorrection","CS","1-3", +"(3004,0040)","DVH Normalization Point","DVHNormalizationPoint","DS",3, +"(3004,0042)","DVH Normalization Dose Value","DVHNormalizationDoseValue","DS",1, +"(3004,0050)","DVH Sequence","DVHSequence","SQ",1, +"(3004,0052)","DVH Dose Scaling","DVHDoseScaling","DS",1, +"(3004,0054)","DVH Volume Units","DVHVolumeUnits","CS",1, +"(3004,0056)","DVH Number of Bins","DVHNumberOfBins","IS",1, +"(3004,0058)","DVH Data","DVHData","DS","2-2n", +"(3004,0060)","DVH Referenced ROI Sequence","DVHReferencedROISequence","SQ",1, +"(3004,0062)","DVH ROI Contribution Type","DVHROIContributionType","CS",1, +"(3004,0070)","DVH Minimum Dose","DVHMinimumDose","DS",1, +"(3004,0072)","DVH Maximum Dose","DVHMaximumDose","DS",1, +"(3004,0074)","DVH Mean Dose","DVHMeanDose","DS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(3006,0002)","Structure Set Label","StructureSetLabel","SH",1, +"(3006,0004)","Structure Set Name","StructureSetName","LO",1, +"(3006,0006)","Structure Set Description","StructureSetDescription","ST",1, +"(3006,0008)","Structure Set Date","StructureSetDate","DA",1, +"(3006,0009)","Structure Set Time","StructureSetTime","TM",1, +"(3006,0010)","Referenced Frame of Reference Sequence","ReferencedFrameOfReferenceSequence","SQ",1, +"(3006,0012)","RT Referenced Study Sequence","RTReferencedStudySequence","SQ",1, +"(3006,0014)","RT Referenced Series Sequence","RTReferencedSeriesSequence","SQ",1, +"(3006,0016)","Contour Image Sequence","ContourImageSequence","SQ",1, +"(3006,0020)","Structure Set ROI Sequence","StructureSetROISequence","SQ",1, +"(3006,0022)","ROI Number","ROINumber","IS",1, +"(3006,0024)","Referenced Frame of Reference UID","ReferencedFrameOfReferenceUID","UI",1, +"(3006,0026)","ROI Name","ROIName","LO",1, +"(3006,0028)","ROI Description","ROIDescription","ST",1, +"(3006,002A)","ROI Display Color","ROIDisplayColor","IS",3, +"(3006,002C)","ROI Volume","ROIVolume","DS",1, +"(3006,0030)","RT Related ROI Sequence","RTRelatedROISequence","SQ",1, +"(3006,0033)","RT ROI Relationship","RTROIRelationship","CS",1, +"(3006,0036)","ROI Generation Algorithm","ROIGenerationAlgorithm","CS",1, +"(3006,0038)","ROI Generation Description","ROIGenerationDescription","LO",1, +"(3006,0039)","ROI Contour Sequence","ROIContourSequence","SQ",1, +"(3006,0040)","Contour Sequence","ContourSequence","SQ",1, +"(3006,0042)","Contour Geometric Type","ContourGeometricType","CS",1, +"(3006,0044)","Contour Slab Thickness","ContourSlabThickness","DS",1, +"(3006,0045)","Contour Offset Vector","ContourOffsetVector","DS",3, +"(3006,0046)","Number of Contour Points","NumberOfContourPoints","IS",1, +"(3006,0048)","Contour Number","ContourNumber","IS",1, +"(3006,0049)","Attached Contours","AttachedContours","IS","1-n", +"(3006,0050)","Contour Data","ContourData","DS","3-3n", +"(3006,0080)","RT ROI Observations Sequence","RTROIObservationsSequence","SQ",1, +"(3006,0082)","Observation Number","ObservationNumber","IS",1, +"(3006,0084)","Referenced ROI Number","ReferencedROINumber","IS",1, +"(3006,0085)","ROI Observation Label","ROIObservationLabel","SH",1, +"(3006,0086)","RT ROI Identification Code Sequence","RTROIIdentificationCodeSequence","SQ",1, +"(3006,0088)","ROI Observation Description","ROIObservationDescription","ST",1, +"(3006,00A0)","Related RT ROI Observations Sequence","RelatedRTROIObservationsSequence","SQ",1, +"(3006,00A4)","RT ROI Interpreted Type","RTROIInterpretedType","CS",1, +"(3006,00A6)","ROI Interpreter","ROIInterpreter","PN",1, +"(3006,00B0)","ROI Physical Properties Sequence","ROIPhysicalPropertiesSequence","SQ",1, +"(3006,00B2)","ROI Physical Property","ROIPhysicalProperty","CS",1, +"(3006,00B4)","ROI Physical Property Value","ROIPhysicalPropertyValue","DS",1, +"(3006,00B6)","ROI Elemental Composition Sequence","ROIElementalCompositionSequence","SQ",1, +"(3006,00B7)","ROI Elemental Composition Atomic Number","ROIElementalCompositionAtomicNumber","US",1, +"(3006,00B8)","ROI Elemental Composition Atomic Mass Fraction","ROIElementalCompositionAtomicMassFraction","FL",1, +"(3006,00C0)","Frame of Reference Relationship Sequence","FrameOfReferenceRelationshipSequence","SQ",1, +"(3006,00C2)","Related Frame of Reference UID","RelatedFrameOfReferenceUID","UI",1, +"(3006,00C4)","Frame of Reference Transformation Type","FrameOfReferenceTransformationType","CS",1, +"(3006,00C6)","Frame of Reference Transformation Matrix","FrameOfReferenceTransformationMatrix","DS",16, +"(3006,00C8)","Frame of Reference Transformation Comment","FrameOfReferenceTransformationComment","LO",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(3008,0010)","Measured Dose Reference Sequence","MeasuredDoseReferenceSequence","SQ",1, +"(3008,0012)","Measured Dose Description","MeasuredDoseDescription","ST",1, +"(3008,0014)","Measured Dose Type","MeasuredDoseType","CS",1, +"(3008,0016)","Measured Dose Value","MeasuredDoseValue","DS",1, +"(3008,0020)","Treatment Session Beam Sequence","TreatmentSessionBeamSequence","SQ",1, +"(3008,0021)","Treatment Session Ion Beam Sequence","TreatmentSessionIonBeamSequence","SQ",1, +"(3008,0022)","Current Fraction Number","CurrentFractionNumber","IS",1, +"(3008,0024)","Treatment Control Point Date","TreatmentControlPointDate","DA",1, +"(3008,0025)","Treatment Control Point Time","TreatmentControlPointTime","TM",1, +"(3008,002A)","Treatment Termination Status","TreatmentTerminationStatus","CS",1, +"(3008,002B)","Treatment Termination Code","TreatmentTerminationCode","SH",1, +"(3008,002C)","Treatment Verification Status","TreatmentVerificationStatus","CS",1, +"(3008,0030)","Referenced Treatment Record Sequence","ReferencedTreatmentRecordSequence","SQ",1, +"(3008,0032)","Specified Primary Meterset ","SpecifiedPrimaryMeterset","DS",1, +"(3008,0033)","Specified Secondary Meterset ","SpecifiedSecondaryMeterset","DS",1, +"(3008,0036)","Delivered Primary Meterset ","DeliveredPrimaryMeterset","DS",1, +"(3008,0037)","Delivered Secondary Meterset ","DeliveredSecondaryMeterset","DS",1, +"(3008,003A)","Specified Treatment Time","SpecifiedTreatmentTime","DS",1, +"(3008,003B)","Delivered Treatment Time","DeliveredTreatmentTime","DS",1, +"(3008,0040)","Control Point Delivery Sequence","ControlPointDeliverySequence","SQ",1, +"(3008,0041)","Ion Control Point Delivery Sequence","IonControlPointDeliverySequence","SQ",1, +"(3008,0042)","Specified Meterset","SpecifiedMeterset","DS",1, +"(3008,0044)","Delivered Meterset","DeliveredMeterset","DS",1, +"(3008,0045)","Meterset Rate Set","MetersetRateSet","FL",1, +"(3008,0046)","Meterset Rate Delivered","MetersetRateDelivered","FL",1, +"(3008,0047)","Scan Spot Metersets Delivered","ScanSpotMetersetsDelivered","FL","1-n", +"(3008,0048)","Dose Rate Delivered","DoseRateDelivered","DS",1, +"(3008,0050)","Treatment Summary Calculated Dose Reference Sequence","TreatmentSummaryCalculatedDoseReferenceSequence","SQ",1, +"(3008,0052)","Cumulative Dose to Dose Reference","CumulativeDoseToDoseReference","DS",1, +"(3008,0054)","First Treatment Date","FirstTreatmentDate","DA",1, +"(3008,0056)","Most Recent Treatment Date","MostRecentTreatmentDate","DA",1, +"(3008,005A)","Number of Fractions Delivered","NumberOfFractionsDelivered","IS",1, +"(3008,0060)","Override Sequence","OverrideSequence","SQ",1, +"(3008,0061)","Parameter Sequence Pointer","ParameterSequencePointer","AT",1, +"(3008,0062)","Override Parameter Pointer","OverrideParameterPointer","AT",1, +"(3008,0063)","Parameter Item Index","ParameterItemIndex","IS",1, +"(3008,0064)","Measured Dose Reference Number","MeasuredDoseReferenceNumber","IS",1, +"(3008,0065)","Parameter Pointer","ParameterPointer","AT",1, +"(3008,0066)","Override Reason","OverrideReason","ST",1, +"(3008,0068)","Corrected Parameter Sequence","CorrectedParameterSequence","SQ",1, +"(3008,006A)","Correction Value","CorrectionValue","FL",1, +"(3008,0070)","Calculated Dose Reference Sequence","CalculatedDoseReferenceSequence","SQ",1, +"(3008,0072)","Calculated Dose Reference Number","CalculatedDoseReferenceNumber","IS",1, +"(3008,0074)","Calculated Dose Reference Description","CalculatedDoseReferenceDescription","ST",1, +"(3008,0076)","Calculated Dose Reference Dose Value","CalculatedDoseReferenceDoseValue","DS",1, +"(3008,0078)","Start Meterset","StartMeterset","DS",1, +"(3008,007A)","End Meterset","EndMeterset","DS",1, +"(3008,0080)","Referenced Measured Dose Reference Sequence","ReferencedMeasuredDoseReferenceSequence","SQ",1, +"(3008,0082)","Referenced Measured Dose Reference Number","ReferencedMeasuredDoseReferenceNumber","IS",1, +"(3008,0090)","Referenced Calculated Dose Reference Sequence","ReferencedCalculatedDoseReferenceSequence","SQ",1, +"(3008,0092)","Referenced Calculated Dose Reference Number","ReferencedCalculatedDoseReferenceNumber","IS",1, +"(3008,00A0)","Beam Limiting Device Leaf Pairs Sequence","BeamLimitingDeviceLeafPairsSequence","SQ",1, +"(3008,00B0)","Recorded Wedge Sequence","RecordedWedgeSequence","SQ",1, +"(3008,00C0)","Recorded Compensator Sequence","RecordedCompensatorSequence","SQ",1, +"(3008,00D0)","Recorded Block Sequence","RecordedBlockSequence","SQ",1, +"(3008,00E0)","Treatment Summary Measured Dose Reference Sequence","TreatmentSummaryMeasuredDoseReferenceSequence","SQ",1, +"(3008,00F0)","Recorded Snout Sequence","RecordedSnoutSequence","SQ",1, +"(3008,00F2)","Recorded Range Shifter Sequence","RecordedRangeShifterSequence","SQ",1, +"(3008,00F4)","Recorded Lateral Spreading Device Sequence","RecordedLateralSpreadingDeviceSequence","SQ",1, +"(3008,00F6)","Recorded Range Modulator Sequence","RecordedRangeModulatorSequence","SQ",1, +"(3008,0100)","Recorded Source Sequence","RecordedSourceSequence","SQ",1, +"(3008,0105)","Source Serial Number","SourceSerialNumber","LO",1, +"(3008,0110)","Treatment Session Application Setup Sequence","TreatmentSessionApplicationSetupSequence","SQ",1, +"(3008,0116)","Application Setup Check","ApplicationSetupCheck","CS",1, +"(3008,0120)","Recorded Brachy Accessory Device Sequence","RecordedBrachyAccessoryDeviceSequence","SQ",1, +"(3008,0122)","Referenced Brachy Accessory Device Number","ReferencedBrachyAccessoryDeviceNumber","IS",1, +"(3008,0130)","Recorded Channel Sequence","RecordedChannelSequence","SQ",1, +"(3008,0132)","Specified Channel Total Time","SpecifiedChannelTotalTime","DS",1, +"(3008,0134)","Delivered Channel Total Time","DeliveredChannelTotalTime","DS",1, +"(3008,0136)","Specified Number of Pulses","SpecifiedNumberOfPulses","IS",1, +"(3008,0138)","Delivered Number of Pulses","DeliveredNumberOfPulses","IS",1, +"(3008,013A)","Specified Pulse Repetition Interval","SpecifiedPulseRepetitionInterval","DS",1, +"(3008,013C)","Delivered Pulse Repetition Interval","DeliveredPulseRepetitionInterval","DS",1, +"(3008,0140)","Recorded Source Applicator Sequence","RecordedSourceApplicatorSequence","SQ",1, +"(3008,0142)","Referenced Source Applicator Number","ReferencedSourceApplicatorNumber","IS",1, +"(3008,0150)","Recorded Channel Shield Sequence","RecordedChannelShieldSequence","SQ",1, +"(3008,0152)","Referenced Channel Shield Number","ReferencedChannelShieldNumber","IS",1, +"(3008,0160)","Brachy Control Point Delivered Sequence","BrachyControlPointDeliveredSequence","SQ",1, +"(3008,0162)","Safe Position Exit Date","SafePositionExitDate","DA",1, +"(3008,0164)","Safe Position Exit Time","SafePositionExitTime","TM",1, +"(3008,0166)","Safe Position Return Date","SafePositionReturnDate","DA",1, +"(3008,0168)","Safe Position Return Time","SafePositionReturnTime","TM",1, +"(3008,0200)","Current Treatment Status","CurrentTreatmentStatus","CS",1, +"(3008,0202)","Treatment Status Comment","TreatmentStatusComment","ST",1, +"(3008,0220)","Fraction Group Summary Sequence","FractionGroupSummarySequence","SQ",1, +"(3008,0223)","Referenced Fraction Number","ReferencedFractionNumber","IS",1, +"(3008,0224)","Fraction Group Type","FractionGroupType","CS",1, +"(3008,0230)","Beam Stopper Position","BeamStopperPosition","CS",1, +"(3008,0240)","Fraction Status Summary Sequence","FractionStatusSummarySequence","SQ",1, +"(3008,0250)","Treatment Date","TreatmentDate","DA",1, +"(3008,0251)","Treatment Time","TreatmentTime","TM",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(300A,0002)","RT Plan Label","RTPlanLabel","SH",1, +"(300A,0003)","RT Plan Name","RTPlanName","LO",1, +"(300A,0004)","RT Plan Description","RTPlanDescription","ST",1, +"(300A,0006)","RT Plan Date","RTPlanDate","DA",1, +"(300A,0007)","RT Plan Time","RTPlanTime","TM",1, +"(300A,0009)","Treatment Protocols","TreatmentProtocols","LO","1-n", +"(300A,000A)","Plan Intent","PlanIntent","CS",1, +"(300A,000B)","Treatment Sites","TreatmentSites","LO","1-n", +"(300A,000C)","RT Plan Geometry","RTPlanGeometry","CS",1, +"(300A,000E)","Prescription Description","PrescriptionDescription","ST",1, +"(300A,0010)","Dose Reference Sequence","DoseReferenceSequence","SQ",1, +"(300A,0012)","Dose Reference Number","DoseReferenceNumber","IS",1, +"(300A,0013)","Dose Reference UID","DoseReferenceUID","UI",1, +"(300A,0014)","Dose Reference Structure Type","DoseReferenceStructureType","CS",1, +"(300A,0015)","Nominal Beam Energy Unit","NominalBeamEnergyUnit","CS",1, +"(300A,0016)","Dose Reference Description","DoseReferenceDescription","LO",1, +"(300A,0018)","Dose Reference Point Coordinates","DoseReferencePointCoordinates","DS",3, +"(300A,001A)","Nominal Prior Dose","NominalPriorDose","DS",1, +"(300A,0020)","Dose Reference Type","DoseReferenceType","CS",1, +"(300A,0021)","Constraint Weight","ConstraintWeight","DS",1, +"(300A,0022)","Delivery Warning Dose","DeliveryWarningDose","DS",1, +"(300A,0023)","Delivery Maximum Dose","DeliveryMaximumDose","DS",1, +"(300A,0025)","Target Minimum Dose","TargetMinimumDose","DS",1, +"(300A,0026)","Target Prescription Dose","TargetPrescriptionDose","DS",1, +"(300A,0027)","Target Maximum Dose","TargetMaximumDose","DS",1, +"(300A,0028)","Target Underdose Volume Fraction","TargetUnderdoseVolumeFraction","DS",1, +"(300A,002A)","Organ at Risk Full-volume Dose","OrganAtRiskFullVolumeDose","DS",1, +"(300A,002B)","Organ at Risk Limit Dose","OrganAtRiskLimitDose","DS",1, +"(300A,002C)","Organ at Risk Maximum Dose","OrganAtRiskMaximumDose","DS",1, +"(300A,002D)","Organ at Risk Overdose Volume Fraction","OrganAtRiskOverdoseVolumeFraction","DS",1, +"(300A,0040)","Tolerance Table Sequence","ToleranceTableSequence","SQ",1, +"(300A,0042)","Tolerance Table Number","ToleranceTableNumber","IS",1, +"(300A,0043)","Tolerance Table Label","ToleranceTableLabel","SH",1, +"(300A,0044)","Gantry Angle Tolerance","GantryAngleTolerance","DS",1, +"(300A,0046)","Beam Limiting Device Angle Tolerance","BeamLimitingDeviceAngleTolerance","DS",1, +"(300A,0048)","Beam Limiting Device Tolerance Sequence","BeamLimitingDeviceToleranceSequence","SQ",1, +"(300A,004A)","Beam Limiting Device Position Tolerance","BeamLimitingDevicePositionTolerance","DS",1, +"(300A,004B)","Snout Position Tolerance","SnoutPositionTolerance","FL",1, +"(300A,004C)","Patient Support Angle Tolerance","PatientSupportAngleTolerance","DS",1, +"(300A,004E)","Table Top Eccentric Angle Tolerance","TableTopEccentricAngleTolerance","DS",1, +"(300A,004F)","Table Top Pitch Angle Tolerance","TableTopPitchAngleTolerance","FL",1, +"(300A,0050)","Table Top Roll Angle Tolerance","TableTopRollAngleTolerance","FL",1, +"(300A,0051)","Table Top Vertical Position Tolerance","TableTopVerticalPositionTolerance","DS",1, +"(300A,0052)","Table Top Longitudinal Position Tolerance","TableTopLongitudinalPositionTolerance","DS",1, +"(300A,0053)","Table Top Lateral Position Tolerance","TableTopLateralPositionTolerance","DS",1, +"(300A,0055)","RT Plan Relationship","RTPlanRelationship","CS",1, +"(300A,0070)","Fraction Group Sequence","FractionGroupSequence","SQ",1, +"(300A,0071)","Fraction Group Number","FractionGroupNumber","IS",1, +"(300A,0072)","Fraction Group Description","FractionGroupDescription","LO",1, +"(300A,0078)","Number of Fractions Planned","NumberOfFractionsPlanned","IS",1, +"(300A,0079)","Number of Fraction Pattern Digits Per Day","NumberOfFractionPatternDigitsPerDay","IS",1, +"(300A,007A)","Repeat Fraction Cycle Length","RepeatFractionCycleLength","IS",1, +"(300A,007B)","Fraction Pattern","FractionPattern","LT",1, +"(300A,0080)","Number of Beams","NumberOfBeams","IS",1, +"(300A,0082)","Beam Dose Specification Point","BeamDoseSpecificationPoint","DS",3, +"(300A,0084)","Beam Dose","BeamDose","DS",1, +"(300A,0086)","Beam Meterset","BeamMeterset","DS",1, +"(300A,0088)","Beam Dose Point Depth","BeamDosePointDepth","FL",1, +"(300A,0089)","Beam Dose Point Equivalent Depth","BeamDosePointEquivalentDepth","FL",1, +"(300A,008A)","Beam Dose Point SSD","BeamDosePointSSD","FL",1, +"(300A,00A0)","Number of Brachy Application Setups","NumberOfBrachyApplicationSetups","IS",1, +"(300A,00A2)","Brachy Application Setup Dose Specification Point","BrachyApplicationSetupDoseSpecificationPoint","DS",3, +"(300A,00A4)","Brachy Application Setup Dose","BrachyApplicationSetupDose","DS",1, +"(300A,00B0)","Beam Sequence","BeamSequence","SQ",1, +"(300A,00B2)","Treatment Machine Name ","TreatmentMachineName","SH",1, +"(300A,00B3)","Primary Dosimeter Unit","PrimaryDosimeterUnit","CS",1, +"(300A,00B4)","Source-Axis Distance","SourceAxisDistance","DS",1, +"(300A,00B6)","Beam Limiting Device Sequence","BeamLimitingDeviceSequence","SQ",1, +"(300A,00B8)","RT Beam Limiting Device Type","RTBeamLimitingDeviceType","CS",1, +"(300A,00BA)","Source to Beam Limiting Device Distance","SourceToBeamLimitingDeviceDistance","DS",1, +"(300A,00BB)","Isocenter to Beam Limiting Device Distance","IsocenterToBeamLimitingDeviceDistance","FL",1, +"(300A,00BC)","Number of Leaf/Jaw Pairs","NumberOfLeafJawPairs","IS",1, +"(300A,00BE)","Leaf Position Boundaries","LeafPositionBoundaries","DS","3-n", +"(300A,00C0)","Beam Number","BeamNumber","IS",1, +"(300A,00C2)","Beam Name","BeamName","LO",1, +"(300A,00C3)","Beam Description","BeamDescription","ST",1, +"(300A,00C4)","Beam Type","BeamType","CS",1, +"(300A,00C6)","Radiation Type","RadiationType","CS",1, +"(300A,00C7)","High-Dose Technique Type","HighDoseTechniqueType","CS",1, +"(300A,00C8)","Reference Image Number","ReferenceImageNumber","IS",1, +"(300A,00CA)","Planned Verification Image Sequence","PlannedVerificationImageSequence","SQ",1, +"(300A,00CC)","Imaging Device-Specific Acquisition Parameters","ImagingDeviceSpecificAcquisitionParameters","LO","1-n", +"(300A,00CE)","Treatment Delivery Type","TreatmentDeliveryType","CS",1, +"(300A,00D0)","Number of Wedges","NumberOfWedges","IS",1, +"(300A,00D1)","Wedge Sequence","WedgeSequence","SQ",1, +"(300A,00D2)","Wedge Number","WedgeNumber","IS",1, +"(300A,00D3)","Wedge Type","WedgeType","CS",1, +"(300A,00D4)","Wedge ID","WedgeID","SH",1, +"(300A,00D5)","Wedge Angle","WedgeAngle","IS",1, +"(300A,00D6)","Wedge Factor","WedgeFactor","DS",1, +"(300A,00D7)","Total Wedge Tray Water-Equivalent Thickness","TotalWedgeTrayWaterEquivalentThickness","FL",1, +"(300A,00D8)","Wedge Orientation","WedgeOrientation","DS",1, +"(300A,00D9)","Isocenter to Wedge Tray Distance","IsocenterToWedgeTrayDistance","FL",1, +"(300A,00DA)","Source to Wedge Tray Distance","SourceToWedgeTrayDistance","DS",1, +"(300A,00DB)","Wedge Thin Edge Position","WedgeThinEdgePosition","FL",1, +"(300A,00DC)","Bolus ID","BolusID","SH",1, +"(300A,00DD)","Bolus Description","BolusDescription","ST",1, +"(300A,00E0)","Number of Compensators","NumberOfCompensators","IS",1, +"(300A,00E1)","Material ID","MaterialID","SH",1, +"(300A,00E2)","Total Compensator Tray Factor","TotalCompensatorTrayFactor","DS",1, +"(300A,00E3)","Compensator Sequence","CompensatorSequence","SQ",1, +"(300A,00E4)","Compensator Number","CompensatorNumber","IS",1, +"(300A,00E5)","Compensator ID","CompensatorID","SH",1, +"(300A,00E6)","Source to Compensator Tray Distance","SourceToCompensatorTrayDistance","DS",1, +"(300A,00E7)","Compensator Rows","CompensatorRows","IS",1, +"(300A,00E8)","Compensator Columns","CompensatorColumns","IS",1, +"(300A,00E9)","Compensator Pixel Spacing","CompensatorPixelSpacing","DS",2, +"(300A,00EA)","Compensator Position","CompensatorPosition","DS",2, +"(300A,00EB)","Compensator Transmission Data","CompensatorTransmissionData","DS","1-n", +"(300A,00EC)","Compensator Thickness Data","CompensatorThicknessData","DS","1-n", +"(300A,00ED)","Number of Boli","NumberOfBoli","IS",1, +"(300A,00EE)","Compensator Type","CompensatorType","CS",1, +"(300A,00F0)","Number of Blocks","NumberOfBlocks","IS",1, +"(300A,00F2)","Total Block Tray Factor","TotalBlockTrayFactor","DS",1, +"(300A,00F3)","Total Block Tray Water-Equivalent Thickness","TotalBlockTrayWaterEquivalentThickness","FL",1, +"(300A,00F4)","Block Sequence","BlockSequence","SQ",1, +"(300A,00F5)","Block Tray ID","BlockTrayID","SH",1, +"(300A,00F6)","Source to Block Tray Distance","SourceToBlockTrayDistance","DS",1, +"(300A,00F7)","Isocenter to Block Tray Distance","IsocenterToBlockTrayDistance","FL",1, +"(300A,00F8)","Block Type","BlockType","CS",1, +"(300A,00F9)","Accessory Code","AccessoryCode","LO",1, +"(300A,00FA)","Block Divergence","BlockDivergence","CS",1, +"(300A,00FB)","Block Mounting Position","BlockMountingPosition","CS",1, +"(300A,00FC)","Block Number","BlockNumber","IS",1, +"(300A,00FE)","Block Name","BlockName","LO",1, +"(300A,0100)","Block Thickness","BlockThickness","DS",1, +"(300A,0102)","Block Transmission","BlockTransmission","DS",1, +"(300A,0104)","Block Number of Points","BlockNumberOfPoints","IS",1, +"(300A,0106)","Block Data","BlockData","DS","2-2n", +"(300A,0107)","Applicator Sequence","ApplicatorSequence","SQ",1, +"(300A,0108)","Applicator ID","ApplicatorID","SH",1, +"(300A,0109)","Applicator Type","ApplicatorType","CS",1, +"(300A,010A)","Applicator Description","ApplicatorDescription","LO",1, +"(300A,010C)","Cumulative Dose Reference Coefficient","CumulativeDoseReferenceCoefficient","DS",1, +"(300A,010E)","Final Cumulative Meterset Weight","FinalCumulativeMetersetWeight","DS",1, +"(300A,0110)","Number of Control Points","NumberOfControlPoints","IS",1, +"(300A,0111)","Control Point Sequence","ControlPointSequence","SQ",1, +"(300A,0112)","Control Point Index","ControlPointIndex","IS",1, +"(300A,0114)","Nominal Beam Energy","NominalBeamEnergy","DS",1, +"(300A,0115)","Dose Rate Set","DoseRateSet","DS",1, +"(300A,0116)","Wedge Position Sequence","WedgePositionSequence","SQ",1, +"(300A,0118)","Wedge Position","WedgePosition","CS",1, +"(300A,011A)","Beam Limiting Device Position Sequence","BeamLimitingDevicePositionSequence","SQ",1, +"(300A,011C)","Leaf/Jaw Positions","LeafJawPositions","DS","2-2n", +"(300A,011E)","Gantry Angle","GantryAngle","DS",1, +"(300A,011F)","Gantry Rotation Direction","GantryRotationDirection","CS",1, +"(300A,0120)","Beam Limiting Device Angle","BeamLimitingDeviceAngle","DS",1, +"(300A,0121)","Beam Limiting Device Rotation Direction","BeamLimitingDeviceRotationDirection","CS",1, +"(300A,0122)","Patient Support Angle","PatientSupportAngle","DS",1, +"(300A,0123)","Patient Support Rotation Direction","PatientSupportRotationDirection","CS",1, +"(300A,0124)","Table Top Eccentric Axis Distance","TableTopEccentricAxisDistance","DS",1, +"(300A,0125)","Table Top Eccentric Angle","TableTopEccentricAngle","DS",1, +"(300A,0126)","Table Top Eccentric Rotation Direction","TableTopEccentricRotationDirection","CS",1, +"(300A,0128)","Table Top Vertical Position","TableTopVerticalPosition","DS",1, +"(300A,0129)","Table Top Longitudinal Position","TableTopLongitudinalPosition","DS",1, +"(300A,012A)","Table Top Lateral Position","TableTopLateralPosition","DS",1, +"(300A,012C)","Isocenter Position","IsocenterPosition","DS",3, +"(300A,012E)","Surface Entry Point","SurfaceEntryPoint","DS",3, +"(300A,0130)","Source to Surface Distance","SourceToSurfaceDistance","DS",1, +"(300A,0134)","Cumulative Meterset Weight","CumulativeMetersetWeight","DS",1, +"(300A,0140)","Table Top Pitch Angle","TableTopPitchAngle","FL",1, +"(300A,0142)","Table Top Pitch Rotation Direction","TableTopPitchRotationDirection","CS",1, +"(300A,0144)","Table Top Roll Angle","TableTopRollAngle","FL",1, +"(300A,0146)","Table Top Roll Rotation Direction","TableTopRollRotationDirection","CS",1, +"(300A,0148)","Head Fixation Angle","HeadFixationAngle","FL",1, +"(300A,014A)","Gantry Pitch Angle","GantryPitchAngle","FL",1, +"(300A,014C)","Gantry Pitch Rotation Direction","GantryPitchRotationDirection","CS",1, +"(300A,014E)","Gantry Pitch Angle Tolerance","GantryPitchAngleTolerance","FL",1, +"(300A,0180)","Patient Setup Sequence","PatientSetupSequence","SQ",1, +"(300A,0182)","Patient Setup Number","PatientSetupNumber","IS",1, +"(300A,0183)","Patient Setup Label","PatientSetupLabel","LO",1, +"(300A,0184)","Patient Additional Position","PatientAdditionalPosition","LO",1, +"(300A,0190)","Fixation Device Sequence","FixationDeviceSequence","SQ",1, +"(300A,0192)","Fixation Device Type","FixationDeviceType","CS",1, +"(300A,0194)","Fixation Device Label","FixationDeviceLabel","SH",1, +"(300A,0196)","Fixation Device Description","FixationDeviceDescription","ST",1, +"(300A,0198)","Fixation Device Position","FixationDevicePosition","SH",1, +"(300A,0199)","Fixation Device Pitch Angle","FixationDevicePitchAngle","FL",1, +"(300A,019A)","Fixation Device Roll Angle","FixationDeviceRollAngle","FL",1, +"(300A,01A0)","Shielding Device Sequence","ShieldingDeviceSequence","SQ",1, +"(300A,01A2)","Shielding Device Type","ShieldingDeviceType","CS",1, +"(300A,01A4)","Shielding Device Label","ShieldingDeviceLabel","SH",1, +"(300A,01A6)","Shielding Device Description","ShieldingDeviceDescription","ST",1, +"(300A,01A8)","Shielding Device Position","ShieldingDevicePosition","SH",1, +"(300A,01B0)","Setup Technique","SetupTechnique","CS",1, +"(300A,01B2)","Setup Technique Description","SetupTechniqueDescription","ST",1, +"(300A,01B4)","Setup Device Sequence","SetupDeviceSequence","SQ",1, +"(300A,01B6)","Setup Device Type","SetupDeviceType","CS",1, +"(300A,01B8)","Setup Device Label","SetupDeviceLabel","SH",1, +"(300A,01BA)","Setup Device Description","SetupDeviceDescription","ST",1, +"(300A,01BC)","Setup Device Parameter","SetupDeviceParameter","DS",1, +"(300A,01D0)","Setup Reference Description","SetupReferenceDescription","ST",1, +"(300A,01D2)","Table Top Vertical Setup Displacement","TableTopVerticalSetupDisplacement","DS",1, +"(300A,01D4)","Table Top Longitudinal Setup Displacement","TableTopLongitudinalSetupDisplacement","DS",1, +"(300A,01D6)","Table Top Lateral Setup Displacement","TableTopLateralSetupDisplacement","DS",1, +"(300A,0200)","Brachy Treatment Technique","BrachyTreatmentTechnique","CS",1, +"(300A,0202)","Brachy Treatment Type","BrachyTreatmentType","CS",1, +"(300A,0206)","Treatment Machine Sequence","TreatmentMachineSequence","SQ",1, +"(300A,0210)","Source Sequence","SourceSequence","SQ",1, +"(300A,0212)","Source Number","SourceNumber","IS",1, +"(300A,0214)","Source Type","SourceType","CS",1, +"(300A,0216)","Source Manufacturer","SourceManufacturer","LO",1, +"(300A,0218)","Active Source Diameter","ActiveSourceDiameter","DS",1, +"(300A,021A)","Active Source Length","ActiveSourceLength","DS",1, +"(300A,0222)","Source Encapsulation Nominal Thickness","SourceEncapsulationNominalThickness","DS",1, +"(300A,0224)","Source Encapsulation Nominal Transmission","SourceEncapsulationNominalTransmission","DS",1, +"(300A,0226)","Source Isotope Name","SourceIsotopeName","LO",1, +"(300A,0228)","Source Isotope Half Life","SourceIsotopeHalfLife","DS",1, +"(300A,0229)","Source Strength Units","SourceStrengthUnits","CS",1, +"(300A,022A)","Reference Air Kerma Rate","ReferenceAirKermaRate","DS",1, +"(300A,022B)","Source Strength","SourceStrength","DS",1, +"(300A,022C)","Source Strength Reference Date","SourceStrengthReferenceDate","DA",1, +"(300A,022E)","Source Strength Reference Time","SourceStrengthReferenceTime","TM",1, +"(300A,0230)","Application Setup Sequence","ApplicationSetupSequence","SQ",1, +"(300A,0232)","Application Setup Type","ApplicationSetupType","CS",1, +"(300A,0234)","Application Setup Number","ApplicationSetupNumber","IS",1, +"(300A,0236)","Application Setup Name","ApplicationSetupName","LO",1, +"(300A,0238)","Application Setup Manufacturer","ApplicationSetupManufacturer","LO",1, +"(300A,0240)","Template Number","TemplateNumber","IS",1, +"(300A,0242)","Template Type","TemplateType","SH",1, +"(300A,0244)","Template Name","TemplateName","LO",1, +"(300A,0250)","Total Reference Air Kerma","TotalReferenceAirKerma","DS",1, +"(300A,0260)","Brachy Accessory Device Sequence","BrachyAccessoryDeviceSequence","SQ",1, +"(300A,0262)","Brachy Accessory Device Number","BrachyAccessoryDeviceNumber","IS",1, +"(300A,0263)","Brachy Accessory Device ID","BrachyAccessoryDeviceID","SH",1, +"(300A,0264)","Brachy Accessory Device Type","BrachyAccessoryDeviceType","CS",1, +"(300A,0266)","Brachy Accessory Device Name","BrachyAccessoryDeviceName","LO",1, +"(300A,026A)","Brachy Accessory Device Nominal Thickness","BrachyAccessoryDeviceNominalThickness","DS",1, +"(300A,026C)","Brachy Accessory Device Nominal Transmission","BrachyAccessoryDeviceNominalTransmission","DS",1, +"(300A,0280)","Channel Sequence","ChannelSequence","SQ",1, +"(300A,0282)","Channel Number","ChannelNumber","IS",1, +"(300A,0284)","Channel Length","ChannelLength","DS",1, +"(300A,0286)","Channel Total Time","ChannelTotalTime","DS",1, +"(300A,0288)","Source Movement Type","SourceMovementType","CS",1, +"(300A,028A)","Number of Pulses","NumberOfPulses","IS",1, +"(300A,028C)","Pulse Repetition Interval","PulseRepetitionInterval","DS",1, +"(300A,0290)","Source Applicator Number","SourceApplicatorNumber","IS",1, +"(300A,0291)","Source Applicator ID","SourceApplicatorID","SH",1, +"(300A,0292)","Source Applicator Type","SourceApplicatorType","CS",1, +"(300A,0294)","Source Applicator Name","SourceApplicatorName","LO",1, +"(300A,0296)","Source Applicator Length","SourceApplicatorLength","DS",1, +"(300A,0298)","Source Applicator Manufacturer","SourceApplicatorManufacturer","LO",1, +"(300A,029C)","Source Applicator Wall Nominal Thickness","SourceApplicatorWallNominalThickness","DS",1, +"(300A,029E)","Source Applicator Wall Nominal Transmission","SourceApplicatorWallNominalTransmission","DS",1, +"(300A,02A0)","Source Applicator Step Size","SourceApplicatorStepSize","DS",1, +"(300A,02A2)","Transfer Tube Number","TransferTubeNumber","IS",1, +"(300A,02A4)","Transfer Tube Length","TransferTubeLength","DS",1, +"(300A,02B0)","Channel Shield Sequence","ChannelShieldSequence","SQ",1, +"(300A,02B2)","Channel Shield Number","ChannelShieldNumber","IS",1, +"(300A,02B3)","Channel Shield ID","ChannelShieldID","SH",1, +"(300A,02B4)","Channel Shield Name","ChannelShieldName","LO",1, +"(300A,02B8)","Channel Shield Nominal Thickness","ChannelShieldNominalThickness","DS",1, +"(300A,02BA)","Channel Shield Nominal Transmission","ChannelShieldNominalTransmission","DS",1, +"(300A,02C8)","Final Cumulative Time Weight","FinalCumulativeTimeWeight","DS",1, +"(300A,02D0)","Brachy Control Point Sequence","BrachyControlPointSequence","SQ",1, +"(300A,02D2)","Control Point Relative Position","ControlPointRelativePosition","DS",1, +"(300A,02D4)","Control Point 3D Position","ControlPoint3DPosition","DS",3, +"(300A,02D6)","Cumulative Time Weight","CumulativeTimeWeight","DS",1, +"(300A,02E0)","Compensator Divergence","CompensatorDivergence","CS",1, +"(300A,02E1)","Compensator Mounting Position","CompensatorMountingPosition","CS",1, +"(300A,02E2)","Source to Compensator Distance","SourceToCompensatorDistance","DS","1-n", +"(300A,02E3)","Total Compensator Tray Water-Equivalent Thickness","TotalCompensatorTrayWaterEquivalentThickness","FL",1, +"(300A,02E4)","Isocenter to Compensator Tray Distance","IsocenterToCompensatorTrayDistance","FL",1, +"(300A,02E5)","Compensator Column Offset","CompensatorColumnOffset","FL",1, +"(300A,02E6)","Isocenter to Compensator Distances","IsocenterToCompensatorDistances","FL","1-n", +"(300A,02E7)","Compensator Relative Stopping Power Ratio","CompensatorRelativeStoppingPowerRatio","FL",1, +"(300A,02E8)","Compensator Milling Tool Diameter","CompensatorMillingToolDiameter","FL",1, +"(300A,02EA)","Ion Range Compensator Sequence","IonRangeCompensatorSequence","SQ",1, +"(300A,02EB)","Compensator Description","CompensatorDescription","LT",1, +"(300A,0302)","Radiation Mass Number","RadiationMassNumber","IS",1, +"(300A,0304)","Radiation Atomic Number","RadiationAtomicNumber","IS",1, +"(300A,0306)","Radiation Charge State","RadiationChargeState","SS",1, +"(300A,0308)","Scan Mode","ScanMode","CS",1, +"(300A,030A)","Virtual Source-Axis Distances","VirtualSourceAxisDistances","FL",2, +"(300A,030C)","Snout Sequence","SnoutSequence","SQ",1, +"(300A,030D)","Snout Position","SnoutPosition","FL",1, +"(300A,030F)","Snout ID","SnoutID","SH",1, +"(300A,0312)","Number of Range Shifters","NumberOfRangeShifters","IS",1, +"(300A,0314)","Range Shifter Sequence","RangeShifterSequence","SQ",1, +"(300A,0316)","Range Shifter Number","RangeShifterNumber","IS",1, +"(300A,0318)","Range Shifter ID","RangeShifterID","SH",1, +"(300A,0320)","Range Shifter Type","RangeShifterType","CS",1, +"(300A,0322)","Range Shifter Description","RangeShifterDescription","LO",1, +"(300A,0330)","Number of Lateral Spreading Devices","NumberOfLateralSpreadingDevices","IS",1, +"(300A,0332)","Lateral Spreading Device Sequence","LateralSpreadingDeviceSequence","SQ",1, +"(300A,0334)","Lateral Spreading Device Number","LateralSpreadingDeviceNumber","IS",1, +"(300A,0336)","Lateral Spreading Device ID","LateralSpreadingDeviceID","SH",1, +"(300A,0338)","Lateral Spreading Device Type","LateralSpreadingDeviceType","CS",1, +"(300A,033A)","Lateral Spreading Device Description","LateralSpreadingDeviceDescription","LO",1, +"(300A,033C)","Lateral Spreading Device Water Equivalent Thickness","LateralSpreadingDeviceWaterEquivalentThickness","FL",1, +"(300A,0340)","Number of Range Modulators","NumberOfRangeModulators","IS",1, +"(300A,0342)","Range Modulator Sequence","RangeModulatorSequence","SQ",1, +"(300A,0344)","Range Modulator Number","RangeModulatorNumber","IS",1, +"(300A,0346)","Range Modulator ID","RangeModulatorID","SH",1, +"(300A,0348)","Range Modulator Type","RangeModulatorType","CS",1, +"(300A,034A)","Range Modulator Description","RangeModulatorDescription","LO",1, +"(300A,034C)","Beam Current Modulation ID","BeamCurrentModulationID","SH",1, +"(300A,0350)","Patient Support Type","PatientSupportType","CS",1, +"(300A,0352)","Patient Support ID","PatientSupportID","SH",1, +"(300A,0354)","Patient Support Accessory Code","PatientSupportAccessoryCode","LO",1, +"(300A,0356)","Fixation Light Azimuthal Angle","FixationLightAzimuthalAngle","FL",1, +"(300A,0358)","Fixation Light Polar Angle","FixationLightPolarAngle","FL",1, +"(300A,035A)","Meterset Rate","MetersetRate","FL",1, +"(300A,0360)","Range Shifter Settings Sequence","RangeShifterSettingsSequence","SQ",1, +"(300A,0362)","Range Shifter Setting","RangeShifterSetting","LO",1, +"(300A,0364)","Isocenter to Range Shifter Distance","IsocenterToRangeShifterDistance","FL",1, +"(300A,0366)","Range Shifter Water Equivalent Thickness","RangeShifterWaterEquivalentThickness","FL",1, +"(300A,0370)","Lateral Spreading Device Settings Sequence","LateralSpreadingDeviceSettingsSequence","SQ",1, +"(300A,0372)","Lateral Spreading Device Setting","LateralSpreadingDeviceSetting","LO",1, +"(300A,0374)","Isocenter to Lateral Spreading Device Distance","IsocenterToLateralSpreadingDeviceDistance","FL",1, +"(300A,0380)","Range Modulator Settings Sequence","RangeModulatorSettingsSequence","SQ",1, +"(300A,0382)","Range Modulator Gating Start Value","RangeModulatorGatingStartValue","FL",1, +"(300A,0384)","Range Modulator Gating Stop Value","RangeModulatorGatingStopValue","FL",1, +"(300A,0386)","Range Modulator Gating Start Water Equivalent Thickness","RangeModulatorGatingStartWaterEquivalentThickness","FL",1, +"(300A,0388)","Range Modulator Gating Stop Water Equivalent Thickness","RangeModulatorGatingStopWaterEquivalentThickness","FL",1, +"(300A,038A)","Isocenter to Range Modulator Distance","IsocenterToRangeModulatorDistance","FL",1, +"(300A,0390)","Scan Spot Tune ID","ScanSpotTuneID","SH",1, +"(300A,0392)","Number of Scan Spot Positions","NumberOfScanSpotPositions","IS",1, +"(300A,0394)","Scan Spot Position Map","ScanSpotPositionMap","FL","1-n", +"(300A,0396)","Scan Spot Meterset Weights","ScanSpotMetersetWeights","FL","1-n", +"(300A,0398)","Scanning Spot Size","ScanningSpotSize","FL",2, +"(300A,039A)","Number of Paintings","NumberOfPaintings","IS",1, +"(300A,03A0)","Ion Tolerance Table Sequence","IonToleranceTableSequence","SQ",1, +"(300A,03A2)","Ion Beam Sequence","IonBeamSequence","SQ",1, +"(300A,03A4)","Ion Beam Limiting Device Sequence","IonBeamLimitingDeviceSequence","SQ",1, +"(300A,03A6)","Ion Block Sequence","IonBlockSequence","SQ",1, +"(300A,03A8)","Ion Control Point Sequence","IonControlPointSequence","SQ",1, +"(300A,03AA)","Ion Wedge Sequence","IonWedgeSequence","SQ",1, +"(300A,03AC)","Ion Wedge Position Sequence","IonWedgePositionSequence","SQ",1, +"(300A,0401)","Referenced Setup Image Sequence","ReferencedSetupImageSequence","SQ",1, +"(300A,0402)","Setup Image Comment","SetupImageComment","ST",1, +"(300A,0410)","Motion Synchronization Sequence","MotionSynchronizationSequence","SQ",1, +"(300A,0412)","Control Point Orientation","ControlPointOrientation","FL",3, +"(300A,0420)","General Accessory Sequence","GeneralAccessorySequence","SQ",1, +"(300A,0421)","General Accessory ID","GeneralAccessoryID","SH",1, +"(300A,0422)","General Accessory Description","GeneralAccessoryDescription","ST",1, +"(300A,0423)","General Accessory Type","GeneralAccessoryType","CS",1, +"(300A,0424)","General Accessory Number","GeneralAccessoryNumber","IS",1, +"(300A,0431)","Applicator Geometry Sequence","ApplicatorGeometrySequence","SQ",1, +"(300A,0432)","Applicator Aperture Shape","ApplicatorApertureShape","CS",1, +"(300A,0433)","Applicator Opening","ApplicatorOpening","FL",1, +"(300A,0434)","Applicator Opening X","ApplicatorOpeningX","FL",1, +"(300A,0435)","Applicator Opening Y","ApplicatorOpeningY","FL",1, +"(300A,0436)","Source to Applicator Mounting Position Distance","SourceToApplicatorMountingPositionDistance","FL",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(300C,0002)","Referenced RT Plan Sequence","ReferencedRTPlanSequence","SQ",1, +"(300C,0004)","Referenced Beam Sequence","ReferencedBeamSequence","SQ",1, +"(300C,0006)","Referenced Beam Number","ReferencedBeamNumber","IS",1, +"(300C,0007)","Referenced Reference Image Number","ReferencedReferenceImageNumber","IS",1, +"(300C,0008)","Start Cumulative Meterset Weight","StartCumulativeMetersetWeight","DS",1, +"(300C,0009)","End Cumulative Meterset Weight","EndCumulativeMetersetWeight","DS",1, +"(300C,000A)","Referenced Brachy Application Setup Sequence","ReferencedBrachyApplicationSetupSequence","SQ",1, +"(300C,000C)","Referenced Brachy Application Setup Number","ReferencedBrachyApplicationSetupNumber","IS",1, +"(300C,000E)","Referenced Source Number","ReferencedSourceNumber","IS",1, +"(300C,0020)","Referenced Fraction Group Sequence","ReferencedFractionGroupSequence","SQ",1, +"(300C,0022)","Referenced Fraction Group Number","ReferencedFractionGroupNumber","IS",1, +"(300C,0040)","Referenced Verification Image Sequence","ReferencedVerificationImageSequence","SQ",1, +"(300C,0042)","Referenced Reference Image Sequence","ReferencedReferenceImageSequence","SQ",1, +"(300C,0050)","Referenced Dose Reference Sequence","ReferencedDoseReferenceSequence","SQ",1, +"(300C,0051)","Referenced Dose Reference Number","ReferencedDoseReferenceNumber","IS",1, +"(300C,0055)","Brachy Referenced Dose Reference Sequence","BrachyReferencedDoseReferenceSequence","SQ",1, +"(300C,0060)","Referenced Structure Set Sequence","ReferencedStructureSetSequence","SQ",1, +"(300C,006A)","Referenced Patient Setup Number","ReferencedPatientSetupNumber","IS",1, +"(300C,0080)","Referenced Dose Sequence","ReferencedDoseSequence","SQ",1, +"(300C,00A0)","Referenced Tolerance Table Number","ReferencedToleranceTableNumber","IS",1, +"(300C,00B0)","Referenced Bolus Sequence","ReferencedBolusSequence","SQ",1, +"(300C,00C0)","Referenced Wedge Number","ReferencedWedgeNumber","IS",1, +"(300C,00D0)","Referenced Compensator Number","ReferencedCompensatorNumber","IS",1, +"(300C,00E0)","Referenced Block Number","ReferencedBlockNumber","IS",1, +"(300C,00F0)","Referenced Control Point Index","ReferencedControlPointIndex","IS",1, +"(300C,00F2)","Referenced Control Point Sequence","ReferencedControlPointSequence","SQ",1, +"(300C,00F4)","Referenced Start Control Point Index","ReferencedStartControlPointIndex","IS",1, +"(300C,00F6)","Referenced Stop Control Point Index","ReferencedStopControlPointIndex","IS",1, +"(300C,0100)","Referenced Range Shifter Number","ReferencedRangeShifterNumber","IS",1, +"(300C,0102)","Referenced Lateral Spreading Device Number","ReferencedLateralSpreadingDeviceNumber","IS",1, +"(300C,0104)","Referenced Range Modulator Number","ReferencedRangeModulatorNumber","IS",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(300E,0002)","Approval Status","ApprovalStatus","CS",1, +"(300E,0004)","Review Date","ReviewDate","DA",1, +"(300E,0005)","Review Time","ReviewTime","TM",1, +"(300E,0008)","Reviewer Name","ReviewerName","PN",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +,,,,, +"(4000,0010)","Arbitrary","Arbitrary","LT",1,"RET" +"(4000,4000)","Text Comments","TextComments","LT",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(4008,0040)","Results ID","ResultsID","SH",1,"RET" +"(4008,0042)","Results ID Issuer","ResultsIDIssuer","LO",1,"RET" +"(4008,0050)","Referenced Interpretation Sequence","ReferencedInterpretationSequence","SQ",1,"RET" +"(4008,00FF)","Report Production Status (Trial)","ReportProductionStatusTrial","CS",1,"RET" +"(4008,0100)","Interpretation Recorded Date","InterpretationRecordedDate","DA",1,"RET" +"(4008,0101)","Interpretation Recorded Time","InterpretationRecordedTime","TM",1,"RET" +"(4008,0102)","Interpretation Recorder","InterpretationRecorder","PN",1,"RET" +"(4008,0103)","Reference to Recorded Sound","ReferenceToRecordedSound","LO",1,"RET" +"(4008,0108)","Interpretation Transcription Date","InterpretationTranscriptionDate","DA",1,"RET" +"(4008,0109)","Interpretation Transcription Time","InterpretationTranscriptionTime","TM",1,"RET" +"(4008,010A)","Interpretation Transcriber","InterpretationTranscriber","PN",1,"RET" +"(4008,010B)","Interpretation Text","InterpretationText","ST",1,"RET" +"(4008,010C)","Interpretation Author","InterpretationAuthor","PN",1,"RET" +"(4008,0111)","Interpretation Approver Sequence","InterpretationApproverSequence","SQ",1,"RET" +"(4008,0112)","Interpretation Approval Date","InterpretationApprovalDate","DA",1,"RET" +"(4008,0113)","Interpretation Approval Time","InterpretationApprovalTime","TM",1,"RET" +"(4008,0114)","Physician Approving Interpretation","PhysicianApprovingInterpretation","PN",1,"RET" +"(4008,0115)","Interpretation Diagnosis Description","InterpretationDiagnosisDescription","LT",1,"RET" +"(4008,0117)","Interpretation Diagnosis Code Sequence","InterpretationDiagnosisCodeSequence","SQ",1,"RET" +"(4008,0118)","Results Distribution List Sequence","ResultsDistributionListSequence","SQ",1,"RET" +"(4008,0119)","Distribution Name","DistributionName","PN",1,"RET" +"(4008,011A)","Distribution Address","DistributionAddress","LO",1,"RET" +"(4008,0200)","Interpretation ID","InterpretationID","SH",1,"RET" +"(4008,0202)","Interpretation ID Issuer","InterpretationIDIssuer","LO",1,"RET" +"(4008,0210)","Interpretation Type ID","InterpretationTypeID","CS",1,"RET" +"(4008,0212)","Interpretation Status ID","InterpretationStatusID","CS",1,"RET" +"(4008,0300)","Impressions","Impressions","ST",1,"RET" +"(4008,4000)","Results Comments","ResultsComments","ST",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(4010,0001)","Low Energy Detectors","LowEnergyDetectors","CS",1, +"(4010,0002)","High Energy Detectors","HighEnergyDetectors","CS",1, +"(4010,0004)","Detector Geometry Sequence","DetectorGeometrySequence","SQ",1, +"(4010,1001)","Threat ROI Voxel Sequence","ThreatROIVoxelSequence","SQ",1, +"(4010,1004)","Threat ROI Base","ThreatROIBase","FL",3, +"(4010,1005)","Threat ROI Extents ","ThreatROIExtents","FL",3, +"(4010,1006)","Threat ROI Bitmap","ThreatROIBitmap","OB",1, +"(4010,1007)","Route Segment ID","RouteSegmentID","SH",1, +"(4010,1008)","Gantry Type","GantryType","CS",1, +"(4010,1009)","OOI Owner Type","OOIOwnerType","CS",1, +"(4010,100A)","Route Segment Sequence","RouteSegmentSequence","SQ",1, +"(4010,1010)","Potential Threat Object ID","PotentialThreatObjectID","US",1, +"(4010,1011)","Threat Sequence","ThreatSequence","SQ",1, +"(4010,1012)","Threat Category ","ThreatCategory","CS",1, +"(4010,1013)","Threat Category Description","ThreatCategoryDescription","LT",1, +"(4010,1014)","ATD Ability Assessment","ATDAbilityAssessment","CS",1, +"(4010,1015)","ATD Assessment Flag","ATDAssessmentFlag","CS",1, +"(4010,1016)","ATD Assessment Probability","ATDAssessmentProbability","FL",1, +"(4010,1017)","Mass","Mass","FL",1, +"(4010,1018)","Density","Density","FL",1, +"(4010,1019)","Z Effective","ZEffective","FL",1, +"(4010,101A)","Boarding Pass ID","BoardingPassID","SH",1, +"(4010,101B)","Center of Mass","CenterOfMass","FL",3, +"(4010,101C)","Center of PTO","CenterOfPTO","FL",3, +"(4010,101D)","Bounding Polygon","BoundingPolygon","FL","6-n", +"(4010,101E)","Route Segment Start Location ID","RouteSegmentStartLocationID","SH",1, +"(4010,101F)","Route Segment End Location ID","RouteSegmentEndLocationID","SH",1, +"(4010,1020)","Route Segment Location ID Type","RouteSegmentLocationIDType","CS",1, +"(4010,1021)","Abort Reason","AbortReason","CS","1-n", +"(4010,1023)","Volume of PTO","VolumeOfPTO","FL",1, +"(4010,1024)","Abort Flag","AbortFlag","CS",1, +"(4010,1025)","Route Segment Start Time","RouteSegmentStartTime","DT",1, +"(4010,1026)","Route Segment End Time","RouteSegmentEndTime","DT",1, +"(4010,1027)","TDR Type","TDRType","CS",1, +"(4010,1028)","International Route Segment","InternationalRouteSegment","CS",1, +"(4010,1029)","Threat Detection Algorithm and Version","ThreatDetectionAlgorithmandVersion","LO","1-n", +"(4010,102A)","Assigned Location ","AssignedLocation","SH",1, +"(4010,102B)","Alarm Decision Time","AlarmDecisionTime","DT",1, +"(4010,1031)","Alarm Decision","AlarmDecision","CS",1, +"(4010,1033)","Number of Total Objects","NumberOfTotalObjects","US",1, +"(4010,1034)","Number of Alarm Objects","NumberOfAlarmObjects","US",1, +"(4010,1037)","PTO Representation Sequence","PTORepresentationSequence","SQ",1, +"(4010,1038)","ATD Assessment Sequence","ATDAssessmentSequence","SQ",1, +"(4010,1039)","TIP Type","TIPType","CS",1, +"(4010,103A)","DICOS Version","DICOSVersion","CS",1, +"(4010,1041)","OOI Owner Creation Time","OOIOwnerCreationTime","DT",1, +"(4010,1042)","OOI Type","OOIType","CS",1, +"(4010,1043)","OOI Size","OOISize","FL",3, +"(4010,1044)","Acquisition Status","AcquisitionStatus","CS",1, +"(4010,1045) ","Basis Materials Code Sequence","BasisMaterialsCodeSequence","SQ",1, +"(4010,1046)","Phantom Type","PhantomType","CS",1, +"(4010,1047)","OOI Owner Sequence","OOIOwnerSequence","SQ",1, +"(4010,1048)","Scan Type","ScanType","CS",1, +"(4010,1051)","Itinerary ID","ItineraryID","LO",1, +"(4010,1052)","Itinerary ID Type","ItineraryIDType","SH",1, +"(4010,1053)","Itinerary ID Assigning Authority","ItineraryIDAssigningAuthority","LO",1, +"(4010,1054)","Route ID","RouteID","SH",1, +"(4010,1055)","Route ID Assigning Authority","RouteIDAssigningAuthority","SH",1, +"(4010,1056)","Inbound Arrival Type","InboundArrivalType","CS",1, +"(4010,1058)","Carrier ID","CarrierID","SH",1, +"(4010,1059)","Carrier ID Assigning Authority","CarrierIDAssigningAuthority","CS",1, +"(4010,1060)","Source Orientation","SourceOrientation","FL",3, +"(4010,1061)","Source Position","SourcePosition","FL",3, +"(4010,1062)","Belt Height","BeltHeight","FL",1, +"(4010,1064)","Algorithm Routing Code Sequence","AlgorithmRoutingCodeSequence","SQ",1, +"(4010,1067) ","Transport Classification","TransportClassification","CS",1, +"(4010,1068)","OOI Type Descriptor","OOITypeDescriptor","LT",1, +"(4010,1069)","Total Processing Time","TotalProcessingTime","FL",1, +"(4010,106C)","Detector Calibration Data","DetectorCalibrationData","OB",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(4FFE,0001)","MAC Parameters Sequence","MACParametersSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(50xx,0005)","Curve Dimensions ","CurveDimensions","US",1,"RET" +"(50xx,0010)","Number of Points ","NumberOfPoints","US",1,"RET" +"(50xx,0020)","Type of Data","TypeOfData","CS",1,"RET" +"(50xx,0022)","Curve Description","CurveDescription","LO",1,"RET" +"(50xx,0030)","Axis Units ","AxisUnits","SH","1-n","RET" +"(50xx,0040)","Axis Labels ","AxisLabels","SH","1-n","RET" +"(50xx,0103)","Data Value Representation ","DataValueRepresentation","US",1,"RET" +"(50xx,0104)","Minimum Coordinate Value ","MinimumCoordinateValue","US","1-n","RET" +"(50xx,0105)","Maximum Coordinate Value ","MaximumCoordinateValue","US","1-n","RET" +"(50xx,0106)","Curve Range","CurveRange","SH","1-n","RET" +"(50xx,0110)","Curve Data Descriptor","CurveDataDescriptor","US","1-n","RET" +"(50xx,0112)","Coordinate Start Value","CoordinateStartValue","US","1-n","RET" +"(50xx,0114)","Coordinate Step Value","CoordinateStepValue","US","1-n","RET" +"(50xx,1001)","Curve Activation Layer ","CurveActivationLayer","CS",1,"RET" +"(50xx,2000)","Audio Type","AudioType","US",1,"RET" +"(50xx,2002)","Audio Sample Format","AudioSampleFormat","US",1,"RET" +"(50xx,2004)","Number of Channels","NumberOfChannels","US",1,"RET" +"(50xx,2006)","Number of Samples","NumberOfSamples","UL",1,"RET" +"(50xx,2008)","Sample Rate","SampleRate","UL",1,"RET" +"(50xx,200A)","Total Time","TotalTime","UL",1,"RET" +"(50xx,200C)","Audio Sample Data","AudioSampleData","OW or OB",1,"RET" +"(50xx,200E)","Audio Comments","AudioComments","LT",1,"RET" +"(50xx,2500)","Curve Label","CurveLabel","LO",1,"RET" +"(50xx,2600)","Curve Referenced Overlay Sequence ","CurveReferencedOverlaySequence","SQ",1,"RET" +"(50xx,2610)","Curve Referenced Overlay Group","CurveReferencedOverlayGroup","US",1,"RET" +"(50xx,3000)","Curve Data","CurveData","OW or OB",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(5200,9229)","Shared Functional Groups Sequence","SharedFunctionalGroupsSequence","SQ",1, +"(5200,9230)","Per-frame Functional Groups Sequence","PerFrameFunctionalGroupsSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(5400,0100)","Waveform Sequence ","WaveformSequence","SQ",1, +"(5400,0110)","Channel Minimum Value ","ChannelMinimumValue","OB or OW",1, +"(5400,0112)","Channel Maximum Value ","ChannelMaximumValue","OB or OW",1, +"(5400,1004)","Waveform Bits Allocated","WaveformBitsAllocated","US",1, +"(5400,1006)","Waveform Sample Interpretation","WaveformSampleInterpretation","CS",1, +"(5400,100A)","Waveform Padding Value","WaveformPaddingValue","OB or OW",1, +"(5400,1010)","Waveform Data ","WaveformData","OB or OW",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(5600,0010)","First Order Phase Correction Angle","FirstOrderPhaseCorrectionAngle","OF",1, +"(5600,0020)","Spectroscopy Data","SpectroscopyData","OF",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(60xx,0010)","Overlay Rows","OverlayRows","US",1, +"(60xx,0011)","Overlay Columns","OverlayColumns","US",1, +"(60xx,0012)","Overlay Planes","OverlayPlanes","US",1,"RET" +"(60xx,0015)","Number of Frames in Overlay","NumberOfFramesInOverlay","IS",1, +"(60xx,0022)","Overlay Description","OverlayDescription","LO",1, +"(60xx,0040)","Overlay Type","OverlayType","CS",1, +"(60xx,0045)","Overlay Subtype","OverlaySubtype","LO",1, +"(60xx,0050)","Overlay Origin","OverlayOrigin","SS",2, +"(60xx,0051)","Image Frame Origin","ImageFrameOrigin","US",1, +"(60xx,0052)","Overlay Plane Origin","OverlayPlaneOrigin","US",1,"RET" +"(60xx,0060)","Overlay Compression Code","OverlayCompressionCode","CS",1,"RET" +"(60xx,0061)","Overlay Compression Originator","OverlayCompressionOriginator","SH",1,"RET" +"(60xx,0062)","Overlay Compression Label","OverlayCompressionLabel","SH",1,"RET" +"(60xx,0063)","Overlay Compression Description","OverlayCompressionDescription","CS",1,"RET" +"(60xx,0066)","Overlay Compression Step Pointers","OverlayCompressionStepPointers","AT","1-n","RET" +"(60xx,0068)","Overlay Repeat Interval","OverlayRepeatInterval","US",1,"RET" +"(60xx,0069)","Overlay Bits Grouped","OverlayBitsGrouped","US",1,"RET" +"(60xx,0100)","Overlay Bits Allocated","OverlayBitsAllocated","US",1, +"(60xx,0102)","Overlay Bit Position","OverlayBitPosition","US",1, +"(60xx,0110)","Overlay Format","OverlayFormat","CS",1,"RET" +"(60xx,0200)","Overlay Location","OverlayLocation","US",1,"RET" +"(60xx,0800)","Overlay Code Label","OverlayCodeLabel","CS","1-n","RET" +"(60xx,0802)","Overlay Number of Tables","OverlayNumberOfTables","US",1,"RET" +"(60xx,0803)","Overlay Code Table Location","OverlayCodeTableLocation","AT","1-n","RET" +"(60xx,0804)","Overlay Bits For Code Word","OverlayBitsForCodeWord","US",1,"RET" +"(60xx,1001)","Overlay Activation Layer ","OverlayActivationLayer","CS",1, +"(60xx,1100)","Overlay Descriptor - Gray","OverlayDescriptorGray","US",1,"RET" +"(60xx,1101)","Overlay Descriptor - Red","OverlayDescriptorRed","US",1,"RET" +"(60xx,1102)","Overlay Descriptor - Green","OverlayDescriptorGreen","US",1,"RET" +"(60xx,1103)","Overlay Descriptor - Blue","OverlayDescriptorBlue","US",1,"RET" +"(60xx,1200)","Overlays - Gray","OverlaysGray","US","1-n","RET" +"(60xx,1201)","Overlays - Red","OverlaysRed","US","1-n","RET" +"(60xx,1202)","Overlays - Green","OverlaysGreen","US","1-n","RET" +"(60xx,1203)","Overlays - Blue","OverlaysBlue","US","1-n","RET" +"(60xx,1301)","ROI Area","ROIArea","IS",1, +"(60xx,1302)","ROI Mean","ROIMean","DS",1, +"(60xx,1303)","ROI Standard Deviation","ROIStandardDeviation","DS",1, +"(60xx,1500)","Overlay Label","OverlayLabel","LO",1, +"(60xx,3000)","Overlay Data","OverlayData","OB or OW",1, +"(60xx,4000)","Overlay Comments","OverlayComments","LT",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(7FE0,0010)","Pixel Data","PixelData","OW or OB",1, +"(7FE0,0020)","Coefficients SDVN","CoefficientsSDVN","OW",1,"RET" +"(7FE0,0030)","Coefficients SDHN","CoefficientsSDHN","OW",1,"RET" +"(7FE0,0040)","Coefficients SDDN","CoefficientsSDDN","OW",1,"RET" +"(7Fxx,0010)","Variable Pixel Data","VariablePixelData","OW or OB",1,"RET" +"(7Fxx,0011)","Variable Next Data Group","VariableNextDataGroup","US",1,"RET" +"(7Fxx,0020)","Variable Coefficients SDVN","VariableCoefficientsSDVN","OW",1,"RET" +"(7Fxx,0030)","Variable Coefficients SDHN","VariableCoefficientsSDHN","OW",1,"RET" +"(7Fxx,0040)","Variable Coefficients SDDN","VariableCoefficientsSDDN","OW",1,"RET" +,,,,, +"Tag","Name","Keyword","VR","VM", +"(FFFA,FFFA)","Digital Signatures Sequence","DigitalSignaturesSequence","SQ",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(FFFC,FFFC)","Data Set Trailing Padding","DataSetTrailingPadding","OB",1, +,,,,, +"Tag","Name","Keyword","VR","VM", +"(FFFE,E000)","Item","Item","see note",1, +"(FFFE,E00D)","Item Delimitation Item","ItemDelimitationItem","see note",1, +"(FFFE,E0DD)","Sequence Delimitation Item ","SequenceDelimitationItem","see note",1, diff -Nru pydicom-0.9.8/source/generate_dict/make_private_dict.py pydicom-0.9.9/source/generate_dict/make_private_dict.py --- pydicom-0.9.8/source/generate_dict/make_private_dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/make_private_dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,116 @@ +#!/usr/bin/env python + +from __future__ import with_statement + +# file "make_private_dict.py" +# Copyright (c) 2009 Daniel Nanz +# This file is released under the pydicom (http://code.google.com/p/pydicom/) +# license. +# See the file license.txt included with the pydicom distribution, also +# available at http://pydicom.googlecode.com + +''' +-- Usage ------------------ (>= python 2.5, <3)--- + +python make_private_dict_alt.py + +or + +python make_private_dict_alt.py target_file_path +-------------------------------------------------- + +This script reads the DICOM private tag information as +maintained by the GDCM project (http://sourceforge.net/projects/gdcm/) +from their website and prints it either to sys.stdout +(if target_file_path == None) or to the file identified by a input +target_file_path. + +The output is structured such, that for target_file_path = "_private_dict.py" +the output file can replace the current _private_dict.py file of the pydicom +source, which should allow straightforward testing. +''' + +import urllib2 +import io +import xml.etree.cElementTree as ET +import sys +import datetime +import os +import pprint + + +GDCM_URL = 'https://raw.github.com/malaterre/GDCM/master/' \ + 'Source/DataDictionary/privatedicts.xml' +UNKNOWN_NAME = 'Unknown' +PRIVATE_DICT_NAME = 'private_dictionaries' + + +def get_private_dict_from_GDCM(url=GDCM_URL, retired_field=''): + '''open GDCM_URL, read content into BytesIO file-like object and parse + into an ElementTree instance + ''' + etree = ET.parse(io.BytesIO(urllib2.urlopen(GDCM_URL).read())) + p_dict = etree.getroot() + entries = [entry for entry in p_dict.findall('entry')] + + private_dict = dict() + for e in entries: + d = dict() + for item in e.items(): + d[item[0]] = item[1] + tag_string = ''.join((d['group'], d['element'])) + if d['name'] == '?': + d['name'] = UNKNOWN_NAME + dict_entry = (d['vr'], d['vm'], d['name'], retired_field) + owner = d['owner'] + if owner in private_dict.keys(): + pass + else: + private_dict[owner] = dict() + curr_dict = private_dict[owner] + curr_dict[tag_string] = dict_entry + return private_dict + + +def get_introductory_text(filename, datestring): + + s = '\n'.join(('# ' + filename, + '# This file is autogenerated by "make_private_dict.py",', + '# from private elements list maintained by the GDCM project', + '# ('+ GDCM_URL + ').', + '# Downloaded on ' + datestring + '.', + '# See the pydicom license.txt file for license information on pydicom, and GDCM.', + '', + '# This is a dictionary of DICOM dictionaries.', + '# The outer dictionary key is the Private Creator name ("owner"),', + '# the inner dictionary is a map of DICOM tag to ', + '# (VR, type, name, is_retired)', + '', + PRIVATE_DICT_NAME + ' = \\\n')) + return s + + + +def main(): + '''Get private dict from GDCM project. Write to sys.stdout or to output + file given as pathname and as the first argument to the script. + ''' + private_dict = get_private_dict_from_GDCM() + try: + file_path = sys.argv[1] + except IndexError: + file_path = None + + if file_path != None: + with open(file_path, 'wb') as fd: + filename = os.path.basename(file_path) + datestring = datetime.date.isoformat(datetime.date.today()) + int_text = get_introductory_text(filename, datestring) + fd.write(int_text) + pprint.pprint(private_dict, fd) + else: + pprint.pprint(private_dict) + + +if __name__ == '__main__': + main() diff -Nru pydicom-0.9.8/source/generate_dict/make_UID_dict.py pydicom-0.9.9/source/generate_dict/make_UID_dict.py --- pydicom-0.9.8/source/generate_dict/make_UID_dict.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/make_UID_dict.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,65 @@ +# make_UID_dict.py +"""Reformat a UID list csv file (Table A-1 PS3.6-2008) to Python syntax + + Write the dict elements as: + UID: (name, type, name_info, is_retired) + in python format + + name_info is extra information extracted from very long names, e.g. + which bit size a particular transfer syntax is default for + is_retired is 'Retired' if true, else is '' +""" +# +# Copyright 2008-2013, Darcy Mason +# This file is part of pydicom. +# See the license.txt file for license information. + +from collections import namedtuple + +csv_filename = "UID_dictionary.csv" +pydict_filename = "_UID_dict.py" +dict_name = "UID_dictionary" + + +def write_dict(f, dict_name, entries): + entry_format = (" '{0.uid}': ('{0.name}', '{0.uid_type}', " + "'{0.name_info}', '{0.is_retired}')") + f.write("\n%s = {\n" % dict_name) + f.write(",\n".join(entry_format.format(entry) for entry in entries)) + f.write("}\n") + +if __name__ == "__main__": + import csv # comma-separated value module + + csv_reader = csv.reader(file(csv_filename, 'rb')) + uid_entry = namedtuple('uid_entry', + 'uid name uid_type name_info is_retired') + + entries = [] + for row in csv_reader: + UID, name, uid_type, reference = row + name_info = "" + is_retired = "" + name = name.replace("\x96", "-") # non-ascii character + if name.endswith("(Retired)"): + name = name[:-10] + is_retired = "Retired" + if ":" in name: + name, name_info = name.split(":") + if "&" in name: + name = name.replace("&", "and") + name_info = name_info.strip() # clear leading (and trailing, if any) whitespace + entry = uid_entry(UID, name, uid_type, name_info, is_retired) + entries.append(entry) # leave Part reference out + + py_file = file(pydict_filename, "wb") + py_file.write("# %s\n" % pydict_filename) + py_file.write('"""\n%s\n"""\n' % "Dictionary of UID: (name, type, name_info, is_retired)\n") + py_file.write('# Auto-generated by %s"""\n' % __file__) + + write_dict(py_file, dict_name, entries) + + py_file.close() + + print "Finished creating python file %s containing the UID dictionary" % pydict_filename + print "Wrote %d elements" % len(entries) diff -Nru pydicom-0.9.8/source/generate_dict/notes_dict_changes_2011.txt pydicom-0.9.9/source/generate_dict/notes_dict_changes_2011.txt --- pydicom-0.9.8/source/generate_dict/notes_dict_changes_2011.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/notes_dict_changes_2011.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,35 @@ +Differences in new DICOM dictionary ('11) +# NOTE: Only recording those which are not Retired in the new dict + +Apostrophe character changed +(0018, 1153), (,8150) and (8151)- micro symbol (old had '?' -- probably just my dict) + +Misc changes +(0028,3006) -- had to remove extra space in 'US or OW', and is changed from 'US or OW or SS) +(5400,0110) and (,0112): 'OB or OW' instead of 'OB/OW' +Similarly in other group 5400 +In PixelData (7Fe0, 0010) 'OW or OB' instead of 'OW/OB' +and in various others (60xx,…) + +Name change +(0008,9237): Ref'd Presentation State Sequence # Had 'GrayScale' in it before +(0018,0029) Interventional Drug sequence # 'Code' added +(0028,1300) Breast Implant Present # 'Breast' is new +(0040,0518) Container Type Sequence # was 'Container Type Code Sequence' +(0040,4005) Scheduled Procedure Step Start DateTime # was '..Date and Time' +Similarly for (0040,4010 and 4011) +(0040, B020) 'Waveform Annotation Sequence' # 'Waveform added +(0074,1000) Procedure Step State # had 'Unified' in front before + +Capitalization changed: +(0x0018,9066) Number of Zero ills +(0040,0072A etc): X ffset +(0050,0019) Inter-arker distance +(0072,0704) Pseudo-olor Type + + +Plural change: +(0x0018, 1016) +(0x0018, 9195 and 6): 'Chemical Shift…'(was 'Shifts') +and …9295, 96 +(0x00286022): Frame of Interest Description # was 'Frames' diff -Nru pydicom-0.9.8/source/generate_dict/reindent_private.py pydicom-0.9.9/source/generate_dict/reindent_private.py --- pydicom-0.9.8/source/generate_dict/reindent_private.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/generate_dict/reindent_private.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,25 @@ +# reindent_private.py +"""One-time script to read the pydicom _private_dict and reformat without as much spacing +(originally printed out by pprint) +""" + +if __name__ == "__main__": + from dicom._private_dict import private_dictionaries + + outfilename = "new_private_dict.py" + + outfile = open(outfilename, "wb") + + keys = private_dictionaries.keys() + lines = ['private_dictionaries = {'] + + for private_key in sorted(keys): + lines.append(" '{key}': {{".format(key=private_key)) + current_dict = private_dictionaries[private_key] + for key in sorted(current_dict.keys()): + lines.append(" '{key}': {val:s},".format(key=key, val=current_dict[key])) + lines.append(" },") + lines.append("}") + outfile.write("\n".join(lines)) + outfile.close() + \ No newline at end of file diff -Nru pydicom-0.9.8/source/MANIFEST.in pydicom-0.9.9/source/MANIFEST.in --- pydicom-0.9.8/source/MANIFEST.in 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/MANIFEST.in 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,6 @@ +include dicom/testfiles/* +include dicom/testcharsetfiles/* +include dicom/test/all.bat +include dicom/test/shell_all +include dicom/doc/* +include distribute_setup.py diff -Nru pydicom-0.9.8/source/.pep8 pydicom-0.9.9/source/.pep8 --- pydicom-0.9.8/source/.pep8 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/.pep8 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,4 @@ +[pep8] +ignore = E501 +exclude = _*.py +max-line-length = 160 diff -Nru pydicom-0.9.8/source/release-checklist.txt pydicom-0.9.9/source/release-checklist.txt --- pydicom-0.9.8/source/release-checklist.txt 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/release-checklist.txt 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,65 @@ +pydicom release checklist +* write ReleaseNotes by going through revision history - best seen at Source tab summary of committed changesets + * update the docs/release-notes.txt file +* review issue list for any other changes that should be in the release +* edit __init__.py version number +* edit setup.py -- version number, description, license if necessary, etc +* remove extra debug statements (e.g. in data_element_generator) and extra print statements +* run test/performance/time_test.py to check performance hasn't degraded + +* (? is this necessary or just use reindent.py? -- run tabnanny to check for bad indentation:: + python -m tabnanny . +* run reindent.py to fix the tab/space mixes, trailing whitespace, etc + reindent.py -rv dicom # use -d for dry-run +* run pep8 to warn of PEP-8 style issues (pep8 is available on pypi for pip install) + cd <'source' directory> + pep8 dicom # various ignores in .pep8 config file, should fix most of those eventually + To see source for particular problems: + pep8 --select E101 --show-source dicom # e.g. E101 is mixed tab/space + etc as above to show source for each kind of error + +* run each example file and clean up any output files created +* doctest interactive_session.txt and interactive_session_downsize_image.txt:: + First, temporarily edit interactive_session.txt and add in the help blank lines, + if you want to ensure no errors. + (switch to testfiles directory; cp mr1_unc.dcm from external testsuite for downsize example) + python + >>> import doctest + >>> doctest.testfile("../examples/interactive_session.txt") # , verbose=True if desired + >>> doctest.testfile("../examples/interactive_session_downsize_image.txt") + >>> doctest.testfile("../examples/simple_interactive_example.txt") + >>> doctest.testfile("../examples/user_guide_doctest.txt") + >>> doctest.testfile("../examples/working_with_sequences_doctest.txt") + + First can fail if help() function as goes into reader mode needing q to exit +* run python26 -Qwarn to check for integer division problems. +* run test/all.bat on windows to test with all supported python versions +* run test/shell_all on linux/mac to test all supported python versions + +* hg commit all changes +* tag the release -- hg tag "release-X.X.X". Auto-commits. +* hg push to repository +* loop back to running all tests if any changes to main code made + (can hg tag --remove release-X.X.X if needed) +* check back out to a clean directory -- that way sure to not include extra files in the build +* build the package files + * on windows, python setup.py bdist_wininst --> get windows installer exe in dist directory + * on linux, python setup.py sdist --> get .tar.gz source file (also used by easy_install) in dist directory +* use the dist files to install the package on + * windows -- 32-bit / 64-bit using Windows installer + * linux -- 32-bit / 64-bit + and run the tests in at least one python version on each system +* upload dist files to googlecode site +* run pip or easy_install (retrieve from pypi) again on clean system and make sure it works: +* verify that source install has _all_ directories and subdirectories included +* update documentation: + * update Release Notes page + * special attention to deprecated modules, classes, etc + * look for references to specific versions + * any changes related to version of python itself + * read all pages quickly +* update News page with quick synopsis of major features +* announce on pydicom google group +* update info on medphysfiles.com +* register with pypi -- python setup.py register +* others -- freshmeat? idoimaging.com? macports? diff -Nru pydicom-0.9.8/source/setup.py pydicom-0.9.9/source/setup.py --- pydicom-0.9.8/source/setup.py 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/setup.py 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,68 @@ +#!/usr/bin/env python +try: + from setuptools import setup, find_packages +except: + from ez_setup import use_setuptools + use_setuptools() + from setuptools import setup, find_packages + +import os +import os.path + +import sys + +extra = {} + + +if sys.version_info >= (3,): + extra['use_2to3'] = True + +setup( + name="pydicom", + packages=find_packages(), + include_package_data=True, + version="0.9.9", + package_data={'dicom': ['testfiles/*.dcm']}, + zip_safe=False, # want users to be able to see included examples,tests + description="Pure python package for DICOM medical file reading and writing", + author="Darcy Mason and contributors", + author_email="darcymason@gmail.com", + url="http://pydicom.googlecode.com", + license="MIT license", + keywords="dicom python medical imaging", + classifiers=[ + "License :: OSI Approved :: MIT License", + "Intended Audience :: Developers", + "Intended Audience :: Healthcare Industry", + "Intended Audience :: Science/Research", + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.0", + "Programming Language :: Python :: 3.2", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Operating System :: OS Independent", + "Topic :: Scientific/Engineering :: Medical Science Apps.", + "Topic :: Scientific/Engineering :: Physics", + "Topic :: Software Development :: Libraries", + ], + long_description=""" + pydicom is a pure python package for parsing DICOM files. + DICOM is a standard (http://medical.nema.org) for communicating + medical images and related information such as reports + and radiotherapy objects. + + pydicom makes it easy to read these complex files into natural + pythonic structures for easy manipulation. + Modified datasets can be written again to DICOM format files. + See the `Getting Started `_ + wiki page for installation and basic information, and the + `Pydicom User Guide `_ page + for an overview of how to use the pydicom library. + """, + test_loader="dicom.test.run_tests:MyTestLoader", + test_suite="dummy_string", + **extra +) diff -Nru pydicom-0.9.8/source/tox.ini pydicom-0.9.9/source/tox.ini --- pydicom-0.9.8/source/tox.ini 1970-01-01 00:00:00.000000000 +0000 +++ pydicom-0.9.9/source/tox.ini 2014-11-23 19:01:47.000000000 +0000 @@ -0,0 +1,9 @@ +[tox] +envlist = py26, py27, py32, py33, py34 + +[testenv:py27] +deps = numpy + +[testenv] +commands = {envpython} setup.py --quiet test +deps = setuptools