[med-svn] [odil] 01/05: Imported Upstream version 0.6.0
Julien Lamy
lamy-guest at moszumanska.debian.org
Fri May 13 13:47:42 UTC 2016
This is an automated email from the git hooks/post-receive script.
lamy-guest pushed a commit to branch master
in repository odil.
commit f7fac8fb1432cddb80f7c8307e35cf6536f0c044
Author: Julien Lamy <lamy at unistra.fr>
Date: Thu May 12 16:56:38 2016 +0200
Imported Upstream version 0.6.0
---
.travis.yml | 6 +-
CMakeLists.txt | 30 +
Doxyfile | 2789 +++++++++------
FindDCMTK.cmake | 13 +-
README.md | 5 +-
applications/CMakeLists.txt | 1 +
applications/dicomdir.py | 59 +
applications/echo.py | 4 +-
applications/find.py | 15 +-
applications/get.py | 117 +
applications/odil | 5 +-
applications/print_.py | 14 +-
applications/transcode.py | 4 +-
cmake/functions.cmake | 32 +
examples/CMakeLists.txt | 7 +
examples/move.cpp | 20 +-
registry.cpp.tmpl | 29 +-
registry.h.tmpl | 4 +
src/CMakeLists.txt | 18 +-
src/odil/Association.h | 16 +-
src/odil/AssociationAcceptor.h | 11 +
src/odil/AssociationParameters.h | 18 +
src/odil/BasicDirectoryCreator.cpp | 17 +-
src/odil/BasicDirectoryCreator.h | 2 +
src/odil/DataSet.cpp | 151 +
src/odil/DataSet.h | 114 +-
src/odil/Element.h | 1 +
src/odil/ElementsDictionary.cpp | 16 +
src/odil/ElementsDictionary.h | 11 +
src/odil/Exception.h | 1 +
src/odil/FindSCU.h | 1 +
src/odil/GetSCP.h | 3 +-
src/odil/GetSCU.cpp | 23 +-
src/odil/GetSCU.h | 24 +-
src/odil/MoveSCP.h | 5 +-
src/odil/MoveSCU.cpp | 116 +-
src/odil/MoveSCU.h | 43 +-
src/odil/Reader.cpp | 10 +-
src/odil/Reader.h | 1 +
src/odil/SCP.h | 7 +
src/odil/SCPDispatcher.h | 5 +
src/odil/SCU.h | 2 +
src/odil/Tag.cpp | 110 +-
src/odil/Tag.h | 5 +-
src/odil/UIDsDictionary.h | 6 +
src/odil/VR.cpp | 4 +-
src/odil/VR.h | 4 +-
src/odil/VRFinder.cpp | 119 +-
src/odil/VRFinder.h | 5 +
src/odil/Value.h | 3 +
src/odil/Writer.cpp | 20 +-
src/odil/json_converter.cpp | 1 +
src/odil/odil.h | 15 +
src/odil/registry.cpp | 4159 ++++++++++++++++++++++-
src/odil/registry.h | 57 +-
src/odil/xml_converter.cpp | 1 +
tests/CMakeLists.txt | 2 +-
tests/code/EchoSCP.cpp | 2 +-
tests/code/GetSCP.cpp | 1 +
tests/code/GetSCU.cpp | 36 +-
tests/code/MoveSCP.cpp | 1 +
tests/code/MoveSCU.cpp | 50 +-
tests/code/SCPDispatcher.cpp | 2 +-
tests/run | 6 +-
tests/wrappers/test_data_set.py | 140 +-
tests/wrappers/test_echo_scp.py | 72 +
tests/wrappers/test_element.py | 25 +-
tests/wrappers/test_exception.py | 25 +
tests/wrappers/test_find_scp.py | 109 +
tests/wrappers/test_find_scu.py | 16 +-
tests/wrappers/test_get_scp.py | 133 +
tests/wrappers/test_get_scu.py | 54 +-
tests/wrappers/test_move_scp.py | 157 +
tests/wrappers/test_move_scu.py | 66 +-
tests/wrappers/test_store_scu.py | 23 +-
tests/wrappers/test_value.py | 46 +-
tests/wrappers/test_vr_finder.py | 16 +
wrappers/Assocation.cpp | 58 +-
wrappers/BasicDirectoryCreator.cpp | 130 +
wrappers/CEchoRequest.cpp | 30 +
wrappers/CFindRequest.cpp | 38 +
wrappers/CGetRequest.cpp | 38 +
wrappers/CGetResponse.cpp | 79 +
wrappers/CMakeLists.txt | 2 +-
wrappers/CMoveRequest.cpp | 42 +
wrappers/CMoveResponse.cpp | 79 +
wrappers/CStoreRequest.cpp | 65 +
wrappers/DataSet.cpp | 118 +-
wrappers/DataSetGeneratorWrapper.h | 52 +
wrappers/{Exception.cpp => EchoSCP.cpp} | 25 +-
wrappers/Element.cpp | 27 +-
wrappers/Exception.cpp | 18 +-
wrappers/FindSCP.cpp | 48 +
wrappers/GetSCP.cpp | 63 +
wrappers/GetSCU.cpp | 36 +-
wrappers/Message.cpp | 35 +
wrappers/MoveSCP.cpp | 70 +
wrappers/MoveSCU.cpp | 51 +-
wrappers/{Exception.cpp => Request.cpp} | 19 +-
wrappers/Response.cpp | 43 +
wrappers/{Exception.cpp => StoreSCP.cpp} | 25 +-
wrappers/Tag.cpp | 1 +
wrappers/{Exception.cpp => VRFinder.cpp} | 16 +-
wrappers/Value.cpp | 25 +-
wrappers/exception_factory.cpp | 26 +
wrappers/{Exception.cpp => exception_factory.h} | 22 +-
wrappers/json_converter.cpp | 11 +-
wrappers/odil.cpp | 39 +-
wrappers/value_constructor.cpp | 81 +
wrappers/{Exception.cpp => value_constructor.h} | 17 +-
wrappers/xml_converter.cpp | 1 +
111 files changed, 9065 insertions(+), 1626 deletions(-)
diff --git a/.travis.yml b/.travis.yml
index c11ff2a..9b19003 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,8 +5,8 @@ matrix:
sudo: required
dist: trusty
compiler: gcc
- - os: osx
- compiler: clang
+# - os: osx
+# compiler: clang
addons:
apt:
packages:
@@ -44,6 +44,6 @@ before_script:
- cmake -G Ninja -D CMAKE_CXX_FLAGS:STRING="${CMAKE_CXX_FLAGS}" -D CMAKE_BUILD_TYPE:STRING=Debug ../
script:
- ninja
- - ../tests/run --no-network
+ - ../tests/run
after_success:
- if [ "${CC}" = "gcc" ]; then coveralls --exclude examples --exclude tests --exclude-pattern '.*CMake[^/]+\.c(?:pp)?' --exclude-pattern "/usr/.*" --root=${SRC_DIR} --build-root ${BIN_DIR} > /dev/null; fi
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 05d609f..a8f8a62 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,8 +10,35 @@ set(odil_VERSION
option(BUILD_EXAMPLES "Build the examples directory." ON)
option(BUILD_WRAPPERS "Build the Python Wrappers." ON)
+option(BUILD_SHARED_LIBS "Build Odil with shared libraries." ON)
+
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}" ${CMAKE_MODULE_PATH})
include(CTest)
+include(cmake/functions.cmake)
+
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+
+if(WIN32)
+ # Trying the automatic creation of .def files by CMake
+ if(${BUILD_SHARED_LIBS})
+ set(WINDOWS_EXPORT_ALL_SYMBOLS TRUE)
+ endif()
+
+ # We have to set _WIN32_WINNT for Asio
+ if(${CMAKE_SYSTEM_VERSION} EQUAL 10) # Windows 10
+ add_definitions(-D _WIN32_WINNT=0x0A00)
+ elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.3) # Windows 8.1
+ add_definitions(-D _WIN32_WINNT=0x0603)
+ elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.2) # Windows 8
+ add_definitions(-D _WIN32_WINNT=0x0602)
+ elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.1) # Windows 7
+ add_definitions(-D _WIN32_WINNT=0x0601)
+ elseif(${CMAKE_SYSTEM_VERSION} EQUAL 6.0) # Windows Vista
+ add_definitions(-D _WIN32_WINNT=0x0600)
+ else() # Windows XP (5.1)
+ add_definitions(-D _WIN32_WINNT=0x0501)
+ endif()
+endif()
add_subdirectory("src")
add_subdirectory("applications")
@@ -31,11 +58,14 @@ endif()
add_custom_target(
CIIntegration ${CMAKE_COMMAND} -E echo "CI Integration"
SOURCES appveyor.yml .travis.yml)
+set_target_properties(CIIntegration PROPERTIES FOLDER "Utils")
add_custom_target(
Documentation ${CMAKE_COMMAND} -E echo "Documentation"
SOURCES Doxyfile LICENSE.txt README.md)
+set_target_properties(Documentation PROPERTIES FOLDER "Utils")
add_custom_target(
Registry ${CMAKE_COMMAND} -E echo "Registry"
SOURCES generate_registry registry.cpp.tmpl registry.h.tmpl)
+set_target_properties(Registry PROPERTIES FOLDER "Utils")
diff --git a/Doxyfile b/Doxyfile
index 9c3bd0a..86b1b5a 100644
--- a/Doxyfile
+++ b/Doxyfile
@@ -1,104 +1,122 @@
-# Doxyfile 1.7.6.1
+# Doxyfile 1.8.11
# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
+# doxygen (www.doxygen.org) for a project.
#
-# All text after a hash (#) is considered a comment and will be ignored
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
# The format is:
-# TAG = value [value, ...]
-# For lists items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
#---------------------------------------------------------------------------
# Project related configuration options
#---------------------------------------------------------------------------
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all text
+# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
+# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
+# for the list of possible encodings.
+# The default value is: UTF-8.
DOXYFILE_ENCODING = UTF-8
-# The PROJECT_NAME tag is a single word (or sequence of words) that should
-# identify the project. Note that if you do not use Doxywizard you need
-# to put quotes around the project name if it contains spaces.
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
PROJECT_NAME = "odil"
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
-PROJECT_NUMBER =
+PROJECT_NUMBER =
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer
-# a quick idea about the purpose of the project. Keep the description short.
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer a
+# quick idea about the purpose of the project. Keep the description short.
-PROJECT_BRIEF =
+PROJECT_BRIEF = C++11 library for the DICOM standard
-# With the PROJECT_LOGO tag one can specify an logo or icon that is
-# included in the documentation. The maximum height of the logo should not
-# exceed 55 pixels and the maximum width should not exceed 200 pixels.
-# Doxygen will copy the logo to the output directory.
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
-PROJECT_LOGO =
+PROJECT_LOGO =
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where doxygen was started. If
+# left blank the current directory will be used.
OUTPUT_DIRECTORY = ./doc
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
+# directories (in 2 levels) under the output directory of each output format and
+# will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise causes
+# performance problems for the file system.
+# The default value is: NO.
CREATE_SUBDIRS = NO
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
-# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
+# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
+# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
+# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
+# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
+# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
+# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
+# Ukrainian and Vietnamese.
+# The default value is: English.
OUTPUT_LANGUAGE = English
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
BRIEF_MEMBER_DESC = YES
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
# brief descriptions will be completely suppressed.
+# The default value is: YES.
REPEAT_BRIEF = YES
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
ABBREVIATE_BRIEF = "The $name class" \
"The $name widget" \
@@ -112,238 +130,287 @@ ABBREVIATE_BRIEF = "The $name class" \
an \
the
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# doxygen will generate a detailed section even if there is only a brief
# description.
+# The default value is: NO.
ALWAYS_DETAILED_SEC = NO
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
# operators of the base classes will not be shown.
+# The default value is: NO.
INLINE_INHERITED_MEMB = NO
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
FULL_PATH_NAMES = YES
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-STRIP_FROM_PATH =
+STRIP_FROM_PATH =
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
-STRIP_FROM_INC_PATH =
+STRIP_FROM_INC_PATH =
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful if your file system
-# doesn't support long names like on DOS, Mac, or CD-ROM.
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
+# less readable) file names. This can be useful is your file systems doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
SHORT_NAMES = NO
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
+# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
+# first line (until the first dot) of a Javadoc-style comment as the brief
+# description. If set to NO, the Javadoc-style will behave just like regular Qt-
+# style comments (thus requiring an explicit @brief command for a brief
+# description.)
+# The default value is: NO.
JAVADOC_AUTOBRIEF = NO
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
+# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
+# line (until the first dot) of a Qt-style comment as the brief description. If
+# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
+# requiring an explicit \brief command for a brief description.)
+# The default value is: NO.
QT_AUTOBRIEF = NO
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
MULTILINE_CPP_IS_BRIEF = NO
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
INHERIT_DOCS = YES
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
SEPARATE_MEMBER_PAGES = NO
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
TAB_SIZE = 8
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:\n"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". You can put \n's in the value part of an alias to insert
+# newlines.
-ALIASES =
+ALIASES =
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
-# A mapping has the form "name=value". For example adding
-# "class=itcl::class" will allow you to use the command class in the
-# itcl::class meaning.
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding "class=itcl::class"
+# will allow you to use the command class in the itcl::class meaning.
-TCL_SUBST =
+TCL_SUBST =
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_FOR_C = NO
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
OPTIMIZE_OUTPUT_JAVA = NO
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
OPTIMIZE_FOR_FORTRAN = NO
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
OPTIMIZE_OUTPUT_VHDL = NO
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given extension.
-# Doxygen has a built-in mapping, but you can override or extend it using this
-# tag. The format is ext=language, where ext is a file extension, and language
-# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C,
-# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions
-# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
-
-EXTENSION_MAPPING =
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also makes the inheritance and collaboration
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you can
+# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also make the inheritance and collaboration
# diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
BUILTIN_STL_SUPPORT = NO
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
# enable parsing support.
+# The default value is: NO.
CPP_CLI_SUPPORT = NO
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
+# will parse them like normal C++ but will assume all classes use public instead
+# of private inheritance when no explicit protection keyword is present.
+# The default value is: NO.
SIP_SUPPORT = NO
-# For Microsoft's IDL there are propget and propput attributes to indicate getter
-# and setter methods for a property. Setting this option to YES (the default)
-# will make doxygen replace the get and set methods by a property in the
-# documentation. This will only work if the methods are indeed getting or
-# setting a simple type. If this is not the case, or you want to show the
-# methods anyway, you should set this option to NO.
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
IDL_PROPERTY_SUPPORT = YES
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
# all members of a group must be documented explicitly.
+# The default value is: NO.
DISTRIBUTE_GROUP_DOC = NO
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
SUBGROUPING = YES
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
-# unions are shown inside the group in which they are included (e.g. using
-# @ingroup) instead of on a separate page (for HTML and Man pages) or
-# section (for LaTeX and RTF).
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
INLINE_GROUPED_CLASSES = NO
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
-# unions with only public data fields will be shown inline in the documentation
-# of the scope in which they are defined (i.e. file, namespace, or group
-# documentation), provided this scope is documented. If set to NO (the default),
-# structs, classes, and unions are shown on a separate page (for HTML and Man
-# pages) or section (for LaTeX and RTF).
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
INLINE_SIMPLE_STRUCTS = NO
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
TYPEDEF_HIDES_STRUCT = NO
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
-# determine which symbols to keep in memory and which to flush to disk.
-# When the cache is full, less often used symbols will be written to disk.
-# For small to medium size projects (<1000 input files) the default value is
-# probably good enough. For larger projects a too small cache size can cause
-# doxygen to be busy swapping symbols to and from disk most of the time
-# causing a significant performance penalty.
-# If the system has enough physical memory increasing the cache will improve the
-# performance by keeping more symbols in memory. Note that the value works on
-# a logarithmic scale so increasing the size by one will roughly double the
-# memory usage. The cache size is given by this formula:
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
-
-SYMBOL_CACHE_SIZE = 0
-
-# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
-# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
-# their name and scope. Since this can be an expensive process and often the
-# same symbol appear multiple times in the code, doxygen keeps a cache of
-# pre-resolved symbols. If the cache is too small doxygen will become slower.
-# If the cache is too large, memory is wasted. The cache size is given by this
-# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
-# corresponding to a cache size of 2^16 = 65536 symbols.
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
LOOKUP_CACHE_SIZE = 0
@@ -351,329 +418,393 @@ LOOKUP_CACHE_SIZE = 0
# Build related configuration options
#---------------------------------------------------------------------------
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
EXTRACT_ALL = NO
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
EXTRACT_PRIVATE = NO
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
EXTRACT_STATIC = NO
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
EXTRACT_LOCAL_CLASSES = YES
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
EXTRACT_LOCAL_METHODS = NO
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespaces are hidden.
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
EXTRACT_ANON_NSPACES = NO
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_MEMBERS = NO
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
+# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
HIDE_UNDOC_CLASSES = NO
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
+# (class|struct|union) declarations. If set to NO, these declarations will be
+# included in the documentation.
+# The default value is: NO.
HIDE_FRIEND_COMPOUNDS = NO
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
+# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
HIDE_IN_BODY_DOCS = NO
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
INTERNAL_DOCS = NO
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
+# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
+# names in lower-case letters. If set to YES, upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
# and Mac users are advised to set this option to NO.
+# The default value is: system dependent.
CASE_SENSE_NAMES = NO
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
+# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
HIDE_SCOPE_NAMES = NO
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
SHOW_INCLUDE_FILES = YES
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
-# will list include files with double quotes in the documentation
-# rather than with sharp brackets.
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
FORCE_LOCAL_INCLUDES = NO
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
INLINE_INFO = YES
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
+# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
SORT_MEMBER_DOCS = YES
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
SORT_BRIEF_DOCS = NO
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
-# will sort the (brief and detailed) documentation of class members so that
-# constructors and destructors are listed first. If set to NO (the default)
-# the constructors will appear in the respective orders defined by
-# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
-# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
-# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
SORT_MEMBERS_CTORS_1ST = NO
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
SORT_GROUP_NAMES = NO
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
SORT_BY_SCOPE_NAME = NO
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
-# do proper type resolution of all parameters of a function it will reject a
-# match between the prototype and the implementation of a member function even
-# if there is only one candidate or it is obvious which candidate to choose
-# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
-# will still accept a match between prototype and implementation in such cases.
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
STRICT_PROTO_MATCHING = NO
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
GENERATE_TODOLIST = YES
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
GENERATE_TESTLIST = YES
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
GENERATE_BUGLIST = YES
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
GENERATE_DEPRECATEDLIST= YES
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
-ENABLED_SECTIONS =
+ENABLED_SECTIONS =
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or macro consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and macros in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
MAX_INITIALIZER_LINES = 30
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
SHOW_USED_FILES = YES
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
-# This will remove the Files entry from the Quick Index and from the
-# Folder Tree View (if specified). The default is YES.
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
SHOW_FILES = YES
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
-# Namespaces page. This will remove the Namespaces entry from the Quick Index
-# and from the Folder Tree View (if specified). The default is YES.
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
SHOW_NAMESPACES = YES
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. The create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option.
-# You can optionally specify a file name after the option, if omitted
-# DoxygenLayout.xml will be used as the name of the layout file.
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file.
+#
+# Note that if you run doxygen from a directory containing a file called
+# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
-LAYOUT_FILE =
+LAYOUT_FILE =
-# The CITE_BIB_FILES tag can be used to specify one or more bib files
-# containing the references data. This must be a list of .bib files. The
-# .bib extension is automatically appended if omitted. Using this command
-# requires the bibtex tool to be installed. See also
-# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
-# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
-# feature you need bibtex and perl available in the search path.
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
-CITE_BIB_FILES =
+CITE_BIB_FILES =
#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
#---------------------------------------------------------------------------
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
-QUIET = NO
+QUIET = YES
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
WARNINGS = YES
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
WARN_IF_UNDOCUMENTED = YES
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
+# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some parameters
+# in a documented function, or documenting parameters that don't exist or using
+# markup commands wrongly.
+# The default value is: YES.
WARN_IF_DOC_ERROR = YES
-# The WARN_NO_PARAMDOC option can be enabled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
+# The default value is: NO.
WARN_NO_PARAMDOC = NO
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# The default value is: $file:$line: $text.
WARN_FORMAT = "$file:$line: $text"
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr).
-WARN_LOGFILE =
+WARN_LOGFILE =
#---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
#---------------------------------------------------------------------------
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
INPUT = ./src/odil
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see: http://www.gnu.org/software/libiconv) for the list of
+# possible encodings.
+# The default value is: UTF-8.
INPUT_ENCODING = UTF-8
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
-# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
-# *.f90 *.f *.for *.vhd *.vhdl
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
+# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.
FILE_PATTERNS = *.c \
*.cc \
@@ -708,892 +839,1315 @@ FILE_PATTERNS = *.c \
*.vhd \
*.vhdl
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
RECURSIVE = NO
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-# Note that relative paths are relative to the directory from which doxygen is
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which doxygen is
# run.
-EXCLUDE =
+EXCLUDE =
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
# from the input.
+# The default value is: NO.
EXCLUDE_SYMLINKS = NO
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
-EXCLUDE_PATTERNS =
+EXCLUDE_PATTERNS =
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
# AClass::ANamespace, ANamespace::*Test
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories use the pattern */test/*
-EXCLUDE_SYMBOLS =
+EXCLUDE_SYMBOLS =
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
-EXAMPLE_PATH =
+EXAMPLE_PATH =
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
EXAMPLE_PATTERNS = *
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
EXAMPLE_RECURSIVE = NO
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
-IMAGE_PATH =
+IMAGE_PATH =
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output. If FILTER_PATTERNS is specified, this tag will be
-# ignored.
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
-INPUT_FILTER =
+FILTER_PATTERNS =
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty or if
-# non of the patterns match the file name, INPUT_FILTER is applied.
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
-FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-FILTER_SOURCE_FILES = NO
+FILTER_SOURCE_PATTERNS =
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
-# and it is also possible to disable source filtering for a specific pattern
-# using *.ext= (so without naming a filter). This option only has effect when
-# FILTER_SOURCE_FILES is enabled.
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the doxygen output.
-FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
#---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
#---------------------------------------------------------------------------
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
SOURCE_BROWSER = NO
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# classes and enums directly into the documentation.
+# The default value is: NO.
INLINE_SOURCES = NO
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
STRIP_CODE_COMMENTS = YES
-# If the REFERENCED_BY_RELATION tag is set to YES
-# then for each documented function all documented
-# functions referencing it will be listed.
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# function all documented functions referencing it will be listed.
+# The default value is: NO.
REFERENCED_BY_RELATION = NO
-# If the REFERENCES_RELATION tag is set to YES
-# then for each documented function all documented entities
-# called/used by that function will be listed.
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
REFERENCES_RELATION = NO
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code. Otherwise they will link to the documentation.
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
REFERENCES_LINK_SOURCE = YES
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see http://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
USE_HTAGS = NO
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
+# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
VERBATIM_HEADERS = YES
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
+# cost of reduced performance. This can be particularly helpful with template
+# rich C++ code for which doxygen's built-in parser lacks the necessary type
+# information.
+# Note: The availability of this option depends on whether or not doxygen was
+# generated with the -Duse-libclang=ON option for CMake.
+# The default value is: NO.
+
+CLANG_ASSISTED_PARSING = NO
+
+# If clang assisted parsing is enabled you can provide the compiler with command
+# line options that you would normally use when invoking the compiler. Note that
+# the include paths will already be set by doxygen for the files and directories
+# specified with INPUT and INCLUDE_PATH.
+# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
+
+CLANG_OPTIONS =
+
#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
#---------------------------------------------------------------------------
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
ALPHABETICAL_INDEX = YES
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
+# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
+# which the alphabetical index list will be split.
+# Minimum value: 1, maximum value: 20, default value: 5.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
COLS_IN_ALPHA_INDEX = 5
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
+# In case all classes in a project start with a common prefix, all classes will
+# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
+# can be used to specify a prefix (or a list of prefixes) that should be ignored
+# while generating the index headers.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-IGNORE_PREFIX =
+IGNORE_PREFIX =
#---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
#---------------------------------------------------------------------------
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
+# The default value is: YES.
GENERATE_HTML = YES
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_OUTPUT = html
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_FILE_EXTENSION = .html
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header. Note that when using a custom header you are responsible
-# for the proper inclusion of any scripts and style sheets that doxygen
-# needs, which is dependent on the configuration options used.
-# It is advised to generate a default header using "doxygen -w html
-# header.html footer.html stylesheet.css YourConfigFile" and then modify
-# that header. Note that the header is subject to change so you typically
-# have to redo this when upgrading to a newer version of doxygen or when
-# changing the value of configuration settings such as GENERATE_TREEVIEW!
-
-HTML_HEADER =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# style sheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that
-# the files will be copied as-is; there are no commands or markers available.
-
-HTML_EXTRA_FILES =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
-# Doxygen will adjust the colors in the style sheet and background images
-# according to this color. Hue is specified as an angle on a colorwheel,
-# see http://en.wikipedia.org/wiki/Hue for more information.
-# For instance the value 0 represents red, 60 is yellow, 120 is green,
-# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
-# The allowed range is 0 to 359.
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a colorwheel, see
+# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_HUE = 220
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
-# the colors in the HTML output. For a value of 0 the output will use
-# grayscales only. A value of 255 will produce the most vivid colors.
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use grayscales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_SAT = 100
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
-# the luminance component of the colors in the HTML output. Values below
-# 100 gradually make the output lighter, whereas values above 100 make
-# the output darker. The value divided by 100 is the actual gamma applied,
-# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
-# and 100 does not change the gamma.
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_COLORSTYLE_GAMMA = 80
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting
-# this to NO can help when comparing the output of multiple runs.
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting this
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_TIMESTAMP = NO
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
HTML_DYNAMIC_SECTIONS = NO
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see: http://developer.apple.com/tools/xcode/), introduced with
+# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
+# Makefile in the HTML output directory. Running make will produce the docset in
+# that directory and running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
# for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_DOCSET = NO
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_FEEDNAME = "Doxygen generated docs"
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_BUNDLE_ID = org.doxygen.Project
-# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_ID = org.doxygen.Publisher
-# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
DOCSET_PUBLISHER_NAME = Publisher
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
+# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
+# Windows.
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_HTMLHELP = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-CHM_FILE =
+CHM_FILE =
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-HHC_LOCATION =
+HHC_LOCATION =
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
GENERATE_CHI = NO
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file
-# content.
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-CHM_INDEX_ENCODING =
+CHM_INDEX_ENCODING =
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
BINARY_TOC = NO
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
TOC_EXPAND = NO
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
-# that can be used as input for Qt's qhelpgenerator to generate a
-# Qt Compressed Help (.qch) of the generated HTML documentation.
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_QHP = NO
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
-# be used to specify the file name of the resulting .qch file.
-# The path specified is relative to the HTML output folder.
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
-QCH_FILE =
+QCH_FILE =
-# The QHP_NAMESPACE tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#namespace
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_NAMESPACE = org.doxygen.Project
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
-# Qt Help Project output. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
+# folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
QHP_VIRTUAL_FOLDER = doc
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
-# add. For more information please see
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
-QHP_CUST_FILTER_NAME =
+QHP_CUST_FILTER_NAME =
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
-# Qt Help Project / Custom Filters</a>.
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
+# filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
-QHP_CUST_FILTER_ATTRS =
+QHP_CUST_FILTER_ATTRS =
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's
-# filter section matches.
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
-# Qt Help Project / Filter Attributes</a>.
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
-QHP_SECT_FILTER_ATTRS =
+QHP_SECT_FILTER_ATTRS =
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
-# be used to specify the location of Qt's qhelpgenerator.
-# If non-empty doxygen will try to run qhelpgenerator on the generated
-# .qhp file.
+# The QHG_LOCATION tag can be used to specify the location of Qt's
+# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
+# generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
-QHG_LOCATION =
+QHG_LOCATION =
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
-# will be generated, which together with the HTML files, form an Eclipse help
-# plugin. To install this plugin and make it available under the help contents
-# menu in Eclipse, the contents of the directory containing the HTML and XML
-# files needs to be copied into the plugins directory of eclipse. The name of
-# the directory within the plugins directory should be the same as
-# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
-# the help appears.
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_ECLIPSEHELP = NO
-# A unique identifier for the eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have
-# this name.
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
ECLIPSE_DOC_ID = org.doxygen.Project
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
-# at top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it. Since the tabs have the same information as the
-# navigation tree you can set this option to NO if you already set
-# GENERATE_TREEVIEW to YES.
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
DISABLE_INDEX = NO
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information.
-# If the tag value is set to YES, a side panel will be generated
-# containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
-# Windows users are probably better off using the HTML help feature.
-# Since the tree basically has the same information as the tab index you
-# could consider to set DISABLE_INDEX to NO when enabling this option.
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine-tune the look of the index. As an example, the default style
+# sheet generated by doxygen has an example that shows how to put an image at
+# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
+# the same information as the tab index, you could consider setting
+# DISABLE_INDEX to YES when enabling this option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
GENERATE_TREEVIEW = NO
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
-# (range [0,1..20]) that doxygen will group on one line in the generated HTML
-# documentation. Note that a value of 0 will completely suppress the enum
-# values from appearing in the overview section.
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
ENUM_VALUES_PER_LINE = 4
-# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
-# and Class Hierarchy pages using a tree view instead of an ordered list.
-
-USE_INLINE_TREES = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
TREEVIEW_WIDTH = 250
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
-# links to external symbols imported via tag files in a separate window.
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
EXT_LINKS_IN_WINDOW = NO
-# Use this tag to change the font size of Latex formulas included
-# as images in the HTML documentation. The default is 10. Note that
-# when you change the font size after a successful doxygen run you need
-# to manually remove any form_*.png images from the HTML output directory
-# to force them to be regenerated.
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_FONTSIZE = 10
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are
-# not supported properly for IE 6.0, but are supported on all modern browsers.
-# Note that when changing this option you need to delete any form_*.png files
-# in the HTML output before the changes have effect.
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are not
+# supported properly for IE 6.0, but are supported on all modern browsers.
+#
+# Note that when changing this option you need to delete any form_*.png files in
+# the HTML output directory before the changes have effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
FORMULA_TRANSPARENT = YES
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
-# (see http://www.mathjax.org) which uses client side Javascript for the
-# rendering instead of using prerendered bitmaps. Use this if you do not
-# have LaTeX installed or if you want to formulas look prettier in the HTML
-# output. When enabled you also need to install MathJax separately and
-# configure the path to it using the MATHJAX_RELPATH option.
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# http://www.mathjax.org) which uses client side Javascript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
USE_MATHJAX = NO
-# When MathJax is enabled you need to specify the location relative to the
-# HTML output directory using the MATHJAX_RELPATH option. The destination
-# directory should contain the MathJax.js script. For instance, if the mathjax
-# directory is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the
-# mathjax.org site, so you can quickly see the result without installing
-# MathJax, but it is strongly recommended to install a local copy of MathJax
-# before deployment.
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. See the MathJax site (see:
+# http://docs.mathjax.org/en/latest/output.html) for more details.
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility), NativeMML (i.e. MathML) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from http://www.mathjax.org before deployment.
+# The default value is: http://cdn.mathjax.org/mathjax/latest.
+# This tag requires that the tag USE_MATHJAX is set to YES.
MATHJAX_RELPATH = http://www.mathjax.org/mathjax
-# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
-# names that should be enabled during MathJax rendering.
-
-MATHJAX_EXTENSIONS =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box
-# for the HTML output. The underlying search engine uses javascript
-# and DHTML and should work on any modern browser. Note that when using
-# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
-# (GENERATE_DOCSET) there is already a search function so this one should
-# typically be disabled. For large projects the javascript based search engine
-# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
+# the HTML output. The underlying search engine uses javascript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the javascript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
SEARCHENGINE = YES
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a PHP enabled web server instead of at the web client
-# using Javascript. Doxygen will generate the search PHP script and index
-# file to put on the web server. The advantage of the server
-# based approach is that it scales better to large projects and allows
-# full text search. The disadvantages are that it is more difficult to setup
-# and does not have live searching capabilities.
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
SERVER_BASED_SEARCH = NO
+# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see: http://xapian.org/). See the section "External Indexing and
+# Searching" for details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS =
+
#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+# Configuration options related to the LaTeX output
#---------------------------------------------------------------------------
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
+# The default value is: YES.
GENERATE_LATEX = NO
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_OUTPUT = latex
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-# Note that when enabling USE_PDFLATEX this option is only used for
-# generating bitmaps for formulas in the HTML output, but not in the
-# Makefile that is written to the output directory.
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when enabling USE_PDFLATEX this option is only used for generating
+# bitmaps for formulas in the HTML output, but not in the Makefile that is
+# written to the output directory.
+# The default file is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_CMD_NAME = latex
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
MAKEINDEX_CMD_NAME = makeindex
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
COMPACT_LATEX = NO
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, letter, legal and
-# executive. If left blank a4wide will be used.
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PAPER_TYPE = a4
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
+# generated LaTeX document. The header should contain everything until the first
+# chapter. If it is left blank doxygen will generate a standard header. See
+# section "Doxygen usage" for information on how to let doxygen write the
+# default header to a separate file.
+#
+# Note: Only use a user-defined header if you know what you are doing! The
+# following commands have a special meaning inside the header: $title,
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
+# generated LaTeX document. The footer should contain everything after the last
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
+#
+# Note: Only use a user-defined footer if you know what you are doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-EXTRA_PACKAGES =
+LATEX_FOOTER =
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-LATEX_HEADER =
+LATEX_EXTRA_STYLESHEET =
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
-# the generated latex document. The footer should contain everything after
-# the last chapter. If it is left blank doxygen will generate a
-# standard footer. Notice: only use this tag if you know what you are doing!
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
-LATEX_FOOTER =
+LATEX_EXTRA_FILES =
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
PDF_HYPERLINKS = YES
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
# higher quality PDF documentation.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
USE_PDFLATEX = YES
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
+# command to the generated LaTeX files. This will instruct LaTeX to keep running
+# if errors occur, instead of asking the user for help. This option is also used
+# when generating formulas in HTML.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BATCHMODE = NO
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
+# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_HIDE_INDICES = NO
-# If LATEX_SOURCE_CODE is set to YES then doxygen will include
-# source code with syntax highlighting in the LaTeX output.
-# Note that which sources are shown also depends on other settings
-# such as SOURCE_BROWSER.
+# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
+# code with syntax highlighting in the LaTeX output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_SOURCE_CODE = NO
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
-# http://en.wikipedia.org/wiki/BibTeX for more info.
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plain.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
LATEX_BIB_STYLE = plain
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP = NO
+
#---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
#---------------------------------------------------------------------------
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
GENERATE_RTF = NO
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_OUTPUT = rtf
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
COMPACT_RTF = NO
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
RTF_HYPERLINKS = NO
-# Load style sheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
+# Load stylesheet definitions from file. Syntax is similar to doxygen's config
+# file, i.e. a series of assignments. You only have to provide replacements,
+# missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_STYLESHEET_FILE =
+RTF_STYLESHEET_FILE =
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to doxygen's config file. A template extensions file can be generated
+# using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
-RTF_EXTENSIONS_FILE =
+RTF_EXTENSIONS_FILE =
+
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE = NO
#---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
#---------------------------------------------------------------------------
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
GENERATE_MAN = NO
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_OUTPUT = man
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_EXTENSION = .3
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR =
+
+# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
MAN_LINKS = NO
#---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
#---------------------------------------------------------------------------
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
GENERATE_XML = NO
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
XML_OUTPUT = xml
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
-XML_SCHEMA =
+XML_PROGRAMLISTING = YES
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
-XML_DTD =
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
+GENERATE_DOCBOOK = NO
-XML_PROGRAMLISTING = YES
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT = docbook
+
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options for the AutoGen Definitions output
#---------------------------------------------------------------------------
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_AUTOGEN_DEF = NO
#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
#---------------------------------------------------------------------------
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
GENERATE_PERLMOD = NO
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_LATEX = NO
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader. This is useful
-# if you want to understand what is going on. On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
PERLMOD_PRETTY = YES
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-PERLMOD_MAKEVAR_PREFIX =
+PERLMOD_MAKEVAR_PREFIX =
#---------------------------------------------------------------------------
# Configuration options related to the preprocessor
#---------------------------------------------------------------------------
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
ENABLE_PREPROCESSING = YES
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
MACRO_EXPANSION = YES
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
EXPAND_ONLY_PREDEF = NO
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# pointed to by INCLUDE_PATH will be searched when a #include is found.
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SEARCH_INCLUDES = YES
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-INCLUDE_PATH =
+INCLUDE_PATH =
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-INCLUDE_FILE_PATTERNS =
+INCLUDE_FILE_PATTERNS =
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-PREDEFINED =
+PREDEFINED =
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition that
-# overrules the definition found in the source code.
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-EXPAND_AS_DEFINED =
+EXPAND_AS_DEFINED =
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all references to function-like macros
-# that are alone on a line, have an all uppercase name, and do not end with a
-# semicolon, because these will confuse the parser if not removed.
+# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
SKIP_FUNCTION_MACROS = YES
#---------------------------------------------------------------------------
-# Configuration::additions related to external references
+# Configuration options related to external references
#---------------------------------------------------------------------------
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which doxygen is
+# run, you must also specify the path to the tagfile here.
-TAGFILES =
+TAGFILES =
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
-GENERATE_TAGFILE =
+GENERATE_TAGFILE =
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
+# The default value is: NO.
ALLEXTERNALS = NO
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
EXTERNAL_GROUPS = YES
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of 'which perl').
+# The default file (with absolute path) is: /usr/bin/perl.
PERL_PATH = /usr/bin/perl
@@ -1601,213 +2155,312 @@ PERL_PATH = /usr/bin/perl
# Configuration options related to the dot tool
#---------------------------------------------------------------------------
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option also works with HAVE_DOT disabled, but it is recommended to
-# install and use dot, since it yields more powerful graphs.
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
+# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
+# NO turns the diagrams off. Note that this option also works with HAVE_DOT
+# disabled, but it is recommended to install and use dot, since it yields more
+# powerful graphs.
+# The default value is: YES.
CLASS_DIAGRAMS = YES
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see:
+# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
# default search path.
-MSCGEN_PATH =
+MSCGEN_PATH =
+
+# You can include diagrams made with dia in doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
+DIA_PATH =
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
HIDE_UNDOC_RELATIONS = YES
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
HAVE_DOT = NO
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
-# allowed to run in parallel. When set to 0 (the default) doxygen will
-# base this on the number of processors available in the system. You can set it
-# explicitly to a value larger than 0 to get control over the balance
-# between CPU load and processing speed.
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
+# to run in parallel. When set to 0 doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_NUM_THREADS = 0
-# By default doxygen will use the Helvetica font for all dot files that
-# doxygen generates. When you want a differently looking font you can specify
-# the font name using DOT_FONTNAME. You need to make sure dot is able to find
-# the font, which can be done by putting it in a standard location or by setting
-# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
-# directory containing the font.
+# When you want a differently looking font in the dot files that doxygen
+# generates you can specify the font name using DOT_FONTNAME. You need to make
+# sure dot is able to find the font, which can be done by putting it in a
+# standard location or by setting the DOTFONTPATH environment variable or by
+# setting DOT_FONTPATH to the directory containing the font.
+# The default value is: Helvetica.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTNAME = Helvetica
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
-# The default size is 10pt.
+# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
+# dot graphs.
+# Minimum value: 4, maximum value: 24, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_FONTSIZE = 10
-# By default doxygen will tell dot to use the Helvetica font.
-# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
-# set the path where dot can find it.
+# By default doxygen will tell dot to use the default font as specified with
+# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
+# the path where dot can find it using this tag.
+# This tag requires that the tag HAVE_DOT is set to YES.
-DOT_FONTPATH =
+DOT_FONTPATH =
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# CLASS_DIAGRAMS tag to NO.
+# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
+# each documented class showing the direct and indirect inheritance relations.
+# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
CLASS_GRAPH = YES
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
+# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
COLLABORATION_GRAPH = YES
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
+# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
+# groups, showing the direct groups dependencies.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GROUP_GRAPHS = YES
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
UML_LOOK = NO
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
TEMPLATE_RELATIONS = NO
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDE_GRAPH = YES
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
INCLUDED_BY_GRAPH = YES
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
+# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALL_GRAPH = NO
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
+# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
CALLER_GRAPH = NO
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will generate a graphical hierarchy of all classes instead of a textual one.
+# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GRAPHICAL_HIERARCHY = YES
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
+# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DIRECTORY_GRAPH = YES
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are svg, png, jpg, or gif.
-# If left blank png will be used. If you choose svg you need to set
-# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible in IE 9+ (other browsers do not have this requirement).
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
+# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
+# to make the SVG files visible in IE 9+ (other browsers do not have this
+# requirement).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_IMAGE_FORMAT = png
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-# Note that this requires a modern browser other than Internet Explorer.
-# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
-# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
-# visible. Older versions of IE do not have SVG support.
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
+# the SVG files visible. Older versions of IE do not have SVG support.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
INTERACTIVE_SVG = NO
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH =
-DOT_PATH =
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
+DOTFILE_DIRS =
-DOTFILE_DIRS =
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the
-# \mscfile command).
+MSCFILE_DIRS =
-MSCFILE_DIRS =
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+DIAFILE_DIRS =
+
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that doxygen if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_GRAPH_MAX_NODES = 50
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
MAX_DOT_GRAPH_DEPTH = 0
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not
-# seem to support this out of the box. Warning: Depending on the platform used,
-# enabling this option may lead to badly anti-aliased labels on the edges of
-# a graph (i.e. they become hard to read).
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not seem
+# to support this out of the box.
+#
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_TRANSPARENT = NO
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_MULTI_TARGETS = NO
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
+# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
GENERATE_LEGEND = YES
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
+# files that are used to generate the various graphs.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
DOT_CLEANUP = YES
diff --git a/FindDCMTK.cmake b/FindDCMTK.cmake
index 22f205d..8415cb4 100644
--- a/FindDCMTK.cmake
+++ b/FindDCMTK.cmake
@@ -9,11 +9,14 @@
set(DCMTK_DEFINITIONS "-D HAVE_CONFIG_H")
find_path(DCMTK_INCLUDE_DIR "dcmtk/dcmdata/dctk.h")
-find_library(DCMTK_LIBRARY dcmdata)
+find_library(DCMNET_LIBRARY dcmnet)
+find_library(DCMDATA_LIBRARY dcmdata)
+find_library(OFLOG_LIBRARY oflog)
+find_library(OFSTD_LIBRARY ofstd)
set(DCMTK_INCLUDE_DIRS ${DCMTK_INCLUDE_DIR})
+set(DCMTK_LIBRARIES ${DCMNET_LIBRARY} ${DCMDATA_LIBRARY} ${OFLOG_LIBRARY} ${OFSTD_LIBRARY})
-set(DCMTK_LIBRARIES ${DCMTK_LIBRARY} dcmnet dcmdata oflog ofstd)
foreach(library iconv pthread wrap z)
find_library(${library}_LIBRARY ${library})
if(${library}_LIBRARY)
@@ -26,7 +29,7 @@ get_filename_component(DCMTK_LIBRARY_DIRS "${DCMTK_LIBRARY}" PATH)
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set DCMTK_FOUND to TRUE
# if all listed variables are TRUE
-find_package_handle_standard_args(
- DCMTK DEFAULT_MSG DCMTK_INCLUDE_DIR DCMTK_LIBRARY)
+find_package_handle_standard_args(DCMTK DEFAULT_MSG
+ DCMTK_INCLUDE_DIR DCMNET_LIBRARY DCMDATA_LIBRARY OFLOG_LIBRARY OFSTD_LIBRARY)
-mark_as_advanced(DCMTK_INCLUDE_DIR DCMTK_LIBRARY)
+mark_as_advanced(DCMTK_INCLUDE_DIR DCMNET_LIBRARY DCMDATA_LIBRARY OFLOG_LIBRARY OFSTD_LIBRARY)
diff --git a/README.md b/README.md
index dc3dc37..7de4d0a 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,10 @@ Odil also provides conversion to and from
[DCMTK](http://dicom.offis.de/dcmtk.php.en) data structures.
Odil builds and run on:
-* Linux (Debian 7, Debian 8, Ubuntu 12.04, Ubuntu 14.04, both 32 and 64 bits)
+* Linux (Debian 7 and 8, Ubuntu 12.04, 14.04, and 16.04, all 32 and 64 bits).
+ Official packages are available ([Debian](https://packages.debian.org/search?keywords=odil&searchon=sourcenames&suite=all§ion=all), [Ubuntu](http://packages.ubuntu.com/search?keywords=odil&searchon=sourcenames&suite=all§ion=all)),
+ as well as [unofficial backports](https://github.com/lamyj/packages).
+
* OS X
[![Build Status](https://travis-ci.org/lamyj/odil.svg?branch=master)](https://travis-ci.org/lamyj/odil)
diff --git a/applications/CMakeLists.txt b/applications/CMakeLists.txt
index 2bf5a75..da2ac12 100644
--- a/applications/CMakeLists.txt
+++ b/applications/CMakeLists.txt
@@ -2,3 +2,4 @@ file(GLOB_RECURSE python_files *.py)
set(python_files ${python_files} odil)
add_custom_target(
PythonFiles ${CMAKE_COMMAND} -E echo "Python files" SOURCES ${python_files})
+set_target_properties(PythonFiles PROPERTIES FOLDER "Examples")
diff --git a/applications/dicomdir.py b/applications/dicomdir.py
new file mode 100644
index 0000000..e93c3e2
--- /dev/null
+++ b/applications/dicomdir.py
@@ -0,0 +1,59 @@
+import logging
+import os
+
+import odil
+
+def add_subparser(subparsers):
+ parser = subparsers.add_parser(
+ "dicomdir",
+ help="Create a DICOMDIR")
+ parser.add_argument(
+ "names", nargs="+", metavar="name", help="DICOM files or directories")
+ parser.add_argument(
+ "directory", help="Output directory for the DICOMDIR file")
+ parser.add_argument(
+ "--patient-key", "-p", default=[], action="append",
+ help="User-defined keys for PATIENT-level records, "
+ "expressed as KEYWORD[:TYPE]. TYPE defaults to 3.")
+ parser.add_argument(
+ "--study-key", "-S", default=[], action="append",
+ help="User-defined keys for STUDY-level records")
+ parser.add_argument(
+ "--series-key", "-s", default=[], action="append",
+ help="User-defined keys for SERIES-level records")
+ parser.add_argument(
+ "--image-key", "-i", default=[], action="append",
+ help="User-defined keys for IMAGE-level records")
+ parser.set_defaults(function=create_dicomdir)
+ return parser
+
+def create_dicomdir(
+ names, directory, patient_key, study_key, series_key, image_key):
+ files = []
+ for name in names:
+ if os.path.isfile(name):
+ files.append(os.path.abspath(name))
+ elif os.path.isdir(name):
+ for dirpath, _, filenames in os.walk(name):
+ dirpath = os.path.abspath(dirpath)
+ files.extend(os.path.join(dirpath, x) for x in filenames)
+
+ directory = os.path.abspath(directory)
+ if not all(x.startswith(directory) for x in files):
+ raise Exception("All files must be under {}".format(directory))
+
+ files = [x[len(directory)+1:] for x in files]
+
+ keys = {}
+ for level in ["patient", "study", "series", "image"]:
+ for entry in locals()["{}_key".format(level)]:
+ if ":" in entry:
+ tag, type_ = entry.split(":")
+ else:
+ tag, type_ = entry, "3"
+ tag = getattr(odil.registry, tag)
+ type_ = int(type_)
+ keys.setdefault(level.upper(), []).append((tag, type_))
+
+ creator = odil.BasicDirectoryCreator(directory, files, keys)
+ creator()
diff --git a/applications/echo.py b/applications/echo.py
index 0ed6190..783d46f 100644
--- a/applications/echo.py
+++ b/applications/echo.py
@@ -1,10 +1,12 @@
+import argparse
import logging
import odil
def add_subparser(subparsers):
parser = subparsers.add_parser(
- "echo", help="Ping a remote DICOM server (C-ECHO)")
+ "echo", help="Ping a remote DICOM server (C-ECHO)",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("host", help="Remote host address")
parser.add_argument("port", type=int, help="Remote host port")
parser.add_argument(
diff --git a/applications/find.py b/applications/find.py
index 48710f5..e522386 100644
--- a/applications/find.py
+++ b/applications/find.py
@@ -1,3 +1,5 @@
+from __future__ import print_function
+import argparse
import logging
import odil
@@ -6,7 +8,8 @@ from print_ import find_max_name_length, print_data_set
def add_subparser(subparsers):
parser = subparsers.add_parser(
- "find", help="DICOM query (C-FIND)")
+ "find", help="DICOM query (C-FIND)",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("host", help="Remote host address")
parser.add_argument("port", type=int, help="Remote host port")
parser.add_argument(
@@ -36,12 +39,10 @@ def find(host, port, calling_ae_title, called_ae_title, level, keys, decode_uids
if value is not None:
vr = odil.registry.public_dictionary[tag].vr
if vr in ["DS", "FL", "FD"]:
- value = odil.Value.Reals([float(x) for x in value])
+ value = [float(x) for x in value]
elif vr in ["IS", "SL", "SS", "UL", "US"]:
- value = odil.Value.Integers([int(x) for x in value])
- else:
- value = odil.Value.Strings(value)
-
+ value = [int(x) for x in value]
+
query.add(tag, value)
else:
query.add(tag)
@@ -71,7 +72,7 @@ def find(host, port, calling_ae_title, called_ae_title, level, keys, decode_uids
find = odil.FindSCU(association)
find.set_affected_sop_class(sop_class)
data_sets = find.find(query)
- print "{} answer{}".format(len(data_sets), "s" if len(data_sets)>1 else "")
+ print("{} answer{}".format(len(data_sets), "s" if len(data_sets)>1 else ""))
max_length = 0
for data_set in data_sets:
diff --git a/applications/get.py b/applications/get.py
new file mode 100644
index 0000000..30fb046
--- /dev/null
+++ b/applications/get.py
@@ -0,0 +1,117 @@
+from __future__ import print_function
+import argparse
+import logging
+import os
+
+import odil
+
+from print_ import find_max_name_length, print_data_set
+
+def add_subparser(subparsers):
+ parser = subparsers.add_parser(
+ "get", help="DICOM retrieve (C-GET)",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
+ parser.add_argument("host", help="Remote host address")
+ parser.add_argument("port", type=int, help="Remote host port")
+ parser.add_argument(
+ "calling_ae_title", help="AE title of the calling application")
+ parser.add_argument(
+ "called_ae_title", help="AE title of the called application")
+ parser.add_argument(
+ "level", choices=["patient", "study"],
+ help="Root object of the retrieval")
+ parser.add_argument("keys", nargs="+", help="Retrieve keys")
+ parser.add_argument(
+ "--directory", "-d", default=os.getcwd(),
+ help="Directory where the output files will be stored")
+ parser.set_defaults(function=get)
+ return parser
+
+def get(host, port, calling_ae_title, called_ae_title, level, keys, directory):
+ query = odil.DataSet()
+ for key in keys:
+ key, value = key.split("=", 1)
+ value = value.split("\\")
+
+ tag = getattr(odil.registry, key)
+
+ vr = odil.registry.public_dictionary[tag].vr
+ if vr in ["DS", "FL", "FD"]:
+ value = [float(x) for x in value]
+ elif vr in ["IS", "SL", "SS", "UL", "US"]:
+ value = [int(x) for x in value]
+
+ query.add(tag, value)
+
+ get_syntax = getattr(
+ odil.registry,
+ "{}RootQueryRetrieveInformationModelGET".format(level.capitalize()))
+
+ transfer_syntaxes = [
+ odil.registry.ImplicitVRLittleEndian,
+ odil.registry.ExplicitVRLittleEndian
+ ]
+
+ get_pc = odil.AssociationParameters.PresentationContext(
+ 1, get_syntax, transfer_syntaxes, True, False)
+
+ # Negotiate ALL storage syntaxes. Is there a better way to do this?
+ storage_uids = [
+ entry.key() for entry in odil.registry.uids_dictionary
+ if entry.data().name.endswith("Storage")
+ ]
+ if len(storage_uids) > 126:
+ raise Exception("Too many storage syntaxes")
+ storage_pcs = [
+ odil.AssociationParameters.PresentationContext(
+ 2*(i+1)+1, uid, transfer_syntaxes, False, True)
+ for i, uid in enumerate(storage_uids)
+ ]
+
+ association = odil.Association()
+ association.set_peer_host(host)
+ association.set_peer_port(port)
+ association.update_parameters()\
+ .set_calling_ae_title(calling_ae_title)\
+ .set_called_ae_title(called_ae_title) \
+ .set_presentation_contexts([get_pc]+storage_pcs)
+ association.associate()
+ logging.info("Association established")
+
+ get = odil.GetSCU(association)
+ get.set_affected_sop_class(get_syntax)
+
+ class Callback(object):
+ def __init__(self, directory):
+ self.directory = directory
+ self.completed = 0
+ self.remaining = 0
+ self.failed = 0
+ self.warning = 0
+
+ def store(self, data_set):
+ uid = data_set.as_string("SOPInstanceUID")[0]
+ odil.write(data_set, os.path.join(self.directory, uid))
+
+ def get(self, message):
+ for type_ in ["completed", "remaining", "failed", "warning"]:
+ base = "number_of_{}_sub_operations".format(type_)
+ if getattr(message, "has_{}".format(base))():
+ setattr(
+ self, type_, getattr(message, "get_{}".format(base))())
+ logging.info(
+ "Remaining: {}, completed: {}, failed: {}, warning: {}".format(
+ self.remaining, self.completed, self.failed, self.warning))
+
+ if not os.path.isdir(directory):
+ os.makedirs(directory)
+
+ callback = Callback(directory)
+ get.get(query, callback.store, callback.get)
+ print(
+ "Completed: {}, remaining: {}, failed: {}, warning: {}".format(
+ callback.completed, callback.remaining, callback.failed,
+ callback.warning))
+
+ association.release()
+ logging.info("Association released")
diff --git a/applications/odil b/applications/odil
index a4ad30d..97e4d6f 100755
--- a/applications/odil
+++ b/applications/odil
@@ -4,8 +4,10 @@ import argparse
import logging
import sys
+import dicomdir
import echo
import find
+import get
import print_
import transcode
@@ -15,7 +17,8 @@ def main():
subparsers = parser.add_subparsers(help="Sub-commands help")
modules = [
- print_, transcode, echo, find
+ print_, transcode, dicomdir,
+ echo, find, get
]
for module in modules:
sub_parser = module.add_subparser(subparsers)
diff --git a/applications/print_.py b/applications/print_.py
index d612cbc..ce15da1 100644
--- a/applications/print_.py
+++ b/applications/print_.py
@@ -1,10 +1,13 @@
+from __future__ import print_function
+import argparse
import logging
import odil
def add_subparser(subparsers):
parser = subparsers.add_parser(
- "print", help="Print the contents of data sets")
+ "print", help="Print the contents of data sets",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("inputs", nargs="+", metavar="FILE", help="Input files")
parser.add_argument(
"--print-header", "-H", action="store_true",
@@ -37,7 +40,8 @@ def print_data_set(data_set, decode_uids, padding, max_length):
name = entry.name
if element.is_data_set():
- value = ""
+ value = "(sequence, {} item{})".format(
+ len(element), "s" if len(element)>1 else "")
elif element.is_binary():
lengths = [len(x) for x in element.as_binary()]
value = "(binary, {} item{}, {} byte{})".format(
@@ -61,18 +65,18 @@ def print_data_set(data_set, decode_uids, padding, max_length):
for uid in value
]
- print "{}{}{} {:04x},{:04x} {} {}".format(
+ print("{}{}{} {:04x},{:04x} {} {}".format(
padding,
name, (max_length-len(name)-len(padding))*" ",
tag.group, tag.element, element.vr,
- value)
+ value))
if element.is_data_set():
sequence = element.as_data_set()
if sequence:
for item in sequence[:-1]:
print_data_set(item, decode_uids, padding+" ", max_length)
- print
+ print()
print_data_set(sequence[-1], decode_uids, padding+" ", max_length)
def find_max_name_length(data_set, max_length=0, padding_length=0):
diff --git a/applications/transcode.py b/applications/transcode.py
index 572459e..2365f6b 100644
--- a/applications/transcode.py
+++ b/applications/transcode.py
@@ -1,3 +1,4 @@
+import argparse
import logging
import odil
@@ -5,7 +6,8 @@ import odil
def add_subparser(subparsers):
parser = subparsers.add_parser(
"transcode",
- help="Change the transfer syntax or the format")
+ help="Change the transfer syntax or the format",
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("input", help="Input file name")
parser.add_argument("output", help="Output file name")
parser.add_argument(
diff --git a/cmake/functions.cmake b/cmake/functions.cmake
new file mode 100644
index 0000000..48697f0
--- /dev/null
+++ b/cmake/functions.cmake
@@ -0,0 +1,32 @@
+# Group files by their folder
+macro(GroupFiles fileGroup)
+ # Beautify fileGroup (HEADER_FILES -> Header Files)
+ string(REPLACE "_" " " fileGroupName ${fileGroup}) # Replace underscores with spaces
+ string(TOLOWER ${fileGroupName} fileGroupName) # To lower
+ set(finalFileGroupName)
+ string(REGEX MATCHALL "([^ ]+)" fileGroupNameSplit ${fileGroupName}) # Split each word
+ foreach(fileGroupNameWord ${fileGroupNameSplit}) # Set to upper the first letter of each word
+ string(SUBSTRING ${fileGroupNameWord} 0 1 firstLetter)
+ string(SUBSTRING ${fileGroupNameWord} 1 -1 otherLetters)
+ string(TOUPPER ${firstLetter} firstLetter)
+ if(finalFileGroupName)
+ set(finalFileGroupName "${finalFileGroupName} ")
+ endif()
+ set(finalFileGroupName "${finalFileGroupName}${firstLetter}${otherLetters}")
+ endforeach()
+
+ # Put each file in the correct group
+ foreach(currentFile ${${fileGroup}})
+ set(folder ${currentFile})
+ get_filename_component(filename ${folder} NAME) # Get the file name
+ string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}" "" folder ${folder}) # Get the folder relative to the current one
+ string(REPLACE "${filename}" "" folder ${folder}) # Remove the file name
+ set(groupName "${finalFileGroupName}")
+ if(NOT folder STREQUAL "") # Parse the remaining directories hierarchy
+ string(REGEX REPLACE "/+$" "" baseFolder ${folder}) # Remove trailing slash
+ string(REPLACE "/" "\\" baseFolder ${baseFolder}) # Forward to backward slashes
+ set(groupName "${groupName}\\${baseFolder}") # Put together the entire group name
+ endif()
+ source_group("${groupName}" FILES ${currentFile}) # Put the file in this group
+ endforeach()
+endmacro()
\ No newline at end of file
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index 91d181a..491a8f7 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -14,10 +14,16 @@ link_directories(${Boost_LIBRARY_DIRS} ${DCMTK_LIBRARY_DIRS})
file(GLOB_RECURSE examples *.cpp)
+option(INSTALL_EXAMPLES "Install the examples" OFF)
+
foreach(example_file ${examples})
get_filename_component(example ${example_file} NAME_WE)
add_executable(${example} ${example_file})
target_link_libraries(${example} libodil)
+ if(INSTALL_EXAMPLES)
+ install(TARGETS ${example} RUNTIME DESTINATION bin)
+ endif()
+ set_target_properties(${example} PROPERTIES FOLDER "Examples")
endforeach()
file(GLOB_RECURSE python_examples *.py)
@@ -25,3 +31,4 @@ add_custom_target(
PythonExamples
${CMAKE_COMMAND} -E echo "Python examples"
SOURCES ${python_examples})
+set_target_properties(PythonExamples PROPERTIES FOLDER "Examples")
diff --git a/examples/move.cpp b/examples/move.cpp
index b96e2c7..1d67b0f 100644
--- a/examples/move.cpp
+++ b/examples/move.cpp
@@ -46,7 +46,7 @@ int main()
{ odil::registry::ImplicitVRLittleEndian }, true, false
}
});
-
+
association.associate();
odil::FindSCU find_scu(association);
@@ -81,35 +81,35 @@ int main()
break;
}
}
-
+
odil::MoveSCU move_scu(association);
move_scu.set_affected_sop_class(
odil::registry::StudyRootQueryRetrieveInformationModelMOVE);
move_scu.set_move_destination(
association.get_parameters().get_calling_ae_title());
-
+
query = odil::DataSet();
query.add("QueryRetrieveLevel", { "SERIES" });
query.add("StudyInstanceUID", series["StudyInstanceUID"]);
query.add("SeriesInstanceUID", series["SeriesInstanceUID"]);
-
+
std::cout << "--------\n";
std::cout << "Callback\n";
std::cout << "--------\n\n";
-
- move_scu.move(query, print_informations);
-
+
+ move_scu.move(query, print_informations, odil::MoveSCU::MoveCallback());
+
std::cout << "\n";
-
+
std::cout << "------\n";
std::cout << "vector\n";
std::cout << "------\n\n";
-
+
std::vector<odil::DataSet> result = move_scu.move(query);
for(auto dataset: result)
{
print_informations(dataset);
}
-
+
association.release();
}
diff --git a/registry.cpp.tmpl b/registry.cpp.tmpl
index 30186f5..b4f62ec 100644
--- a/registry.cpp.tmpl
+++ b/registry.cpp.tmpl
@@ -6,7 +6,9 @@
* for details.
************************************************************************/
-#include <stdint.h>
+#include <cstdint>
+#include <map>
+#include <string>
#include "odil/registry.h"
@@ -60,6 +62,30 @@ ElementsDictionary create_public_dictionary()
return public_dictionary;
}
+std::map<std::string, odil::Tag> create_public_tags()
+{
+
+ RawElementsDictionaryEntry raw_entries[] = {
+{% for entry in elements_dictionary %}
+ {% if not entry[0] is string -%}
+ { Tag({{ "0x%04x, 0x%04x"|format(*entry[0]) }}),
+ "{{ entry[1] }}", "{{ entry[2] }}", "{{ entry[3] }}", "{{ entry[4] }}" },
+ {%- endif %}
+{% endfor %}
+ };
+
+ std::map<std::string, odil::Tag> public_tags;
+
+ unsigned long const count = sizeof(raw_entries)/sizeof(RawElementsDictionaryEntry);
+ for(unsigned long i=0; i<count; ++i)
+ {
+ RawElementsDictionaryEntry const & raw_entry = raw_entries[i];
+ public_tags.insert(std::make_pair(raw_entry.keyword, raw_entry.key.get_tag()));
+ }
+
+ return public_tags;
+}
+
struct RawUIDsDictionaryEntry
{
char const * uid;
@@ -96,4 +122,5 @@ UIDsDictionary create_uids_dictionary()
}
odil::ElementsDictionary odil::registry::public_dictionary=odil::registry::create_public_dictionary();
+std::map<std::string, odil::Tag> odil::registry::public_tags=odil::registry::create_public_tags();
odil::UIDsDictionary odil::registry::uids_dictionary=odil::registry::create_uids_dictionary();
diff --git a/registry.h.tmpl b/registry.h.tmpl
index f91dde3..dc82d5c 100644
--- a/registry.h.tmpl
+++ b/registry.h.tmpl
@@ -9,6 +9,9 @@
#ifndef _afc7b2d7_0869_4fea_9a9b_7fe6228baca9
#define _afc7b2d7_0869_4fea_9a9b_7fe6228baca9
+#include <map>
+#include <string>
+
#include "odil/ElementsDictionary.h"
#include "odil/Tag.h"
#include "odil/UIDsDictionary.h"
@@ -31,6 +34,7 @@ std::string const {{ entry[2] }}("{{ entry[0] }}");
{% endfor %}
extern ElementsDictionary public_dictionary;
+extern std::map<std::string, Tag> public_tags;
extern UIDsDictionary uids_dictionary;
}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5218b46..47bea79 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,11 +1,15 @@
-find_package(Boost REQUIRED COMPONENTS filesystem regex system)
+find_package(Boost REQUIRED COMPONENTS filesystem system)
find_package(DCMTK REQUIRED)
find_package(ICU REQUIRED)
find_package(JsonCpp REQUIRED)
-file(GLOB_RECURSE headers "*.h")
+file(GLOB_RECURSE Header_Files "*.h")
+file(GLOB_RECURSE Source_Files "*.cpp")
file(GLOB_RECURSE templates "*.txx")
-file(GLOB_RECURSE files "*.cpp")
+
+# Regroup files by folder
+GroupFiles(Header_Files)
+GroupFiles(Source_Files)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS} ${DCMTK_INCLUDE_DIRS}
@@ -17,11 +21,17 @@ add_definitions(
)
link_directories(${Boost_LIBRARY_DIRS} ${DCMTK_LIBRARY_DIRS})
-add_library(libodil SHARED ${files} ${headers} ${templates})
+add_library(libodil ${Source_Files} ${Header_Files} ${templates})
set_target_properties(libodil PROPERTIES OUTPUT_NAME odil)
target_link_libraries(libodil
${Boost_LIBRARIES} ${DCMTK_LIBRARIES} ${ICU_LIBRARIES} ${JsonCpp_LIBRARIES})
+
+if(WIN32)
+ add_definitions(-DBUILDING_ODIL)
+ target_link_libraries(libodil netapi32)
+endif()
+
set_target_properties(libodil PROPERTIES
VERSION ${odil_VERSION}
SOVERSION ${odil_MAJOR_VERSION})
diff --git a/src/odil/Association.h b/src/odil/Association.h
index 6210f36..b49ca25 100644
--- a/src/odil/Association.h
+++ b/src/odil/Association.h
@@ -74,6 +74,7 @@ public:
NoPresentationServiceAccessPointAvailable=7,
};
+ /// @brief Duration of the timeout.
typedef dul::StateMachine::duration_type duration_type;
/// @brief Create a default, un-associated, association.
@@ -85,6 +86,7 @@ public:
/// @brief Destroy the association, release it if necessary.
~Association();
+ /// @brief Return the TCP transport.
dul::Transport & get_transport();
/// @brief Assing an un-associated association; it remains un-associated.
@@ -194,6 +196,10 @@ private:
uint16_t _next_message_id;
};
+/**
+ * @brief Exception reported when receiving a message after the association was
+ * released.
+ */
class AssociationReleased: public Exception
{
public:
@@ -204,12 +210,20 @@ public:
}
};
+/**
+ * @brief Exception reported when receiving a message after the association was
+ * aborted.
+ */
class AssociationAborted: public Exception
{
public:
+ /// @brief Source of the error.
uint8_t source;
+
+ /// @brief Reason of the error.
uint8_t reason;
-
+
+ /// @brief Constructor.
AssociationAborted(unsigned char source, unsigned char reason)
: Exception("Association aborted"), source(source), reason(reason)
{
diff --git a/src/odil/AssociationAcceptor.h b/src/odil/AssociationAcceptor.h
index 0603d92..815136c 100644
--- a/src/odil/AssociationAcceptor.h
+++ b/src/odil/AssociationAcceptor.h
@@ -38,20 +38,31 @@ typedef
AssociationParameters
default_association_acceptor(AssociationParameters const & input);
+/// @brief Exception reported when an incoming association is rejected.
struct AssociationRejected: public Exception
{
public:
+ /// @brief Constructor.
AssociationRejected(
unsigned char result, unsigned char source, unsigned char reason,
std::string const & message="Association rejected");
+ /// @brief Return the rejection result.
unsigned char get_result() const;
+
+ /// @brief Set the rejection result.
void set_result(unsigned char value);
+ /// @brief Return the rejection source.
unsigned char get_source() const;
+
+ /// @brief Set the rejection source.
void set_source(unsigned char value);
+ /// @brief Return the rejection reason.
unsigned char get_reason() const;
+
+ /// @brief Set the rejection reason.
void set_reason(unsigned char value);
private:
unsigned char _result;
diff --git a/src/odil/AssociationParameters.h b/src/odil/AssociationParameters.h
index aa9c37b..185868a 100644
--- a/src/odil/AssociationParameters.h
+++ b/src/odil/AssociationParameters.h
@@ -29,6 +29,7 @@ public:
*/
struct PresentationContext
{
+ /// @brief Result of the presentation context negotiation.
enum class Result
{
Acceptance = 0,
@@ -38,11 +39,22 @@ public:
TransferSyntaxesNotSupported = 4,
};
+ /// @brief Identifier of the presentation context, must be odd.
uint8_t id;
+
+ /// @brief Proposed abstract syntax.
std::string abstract_syntax;
+
+ /// @brief Proposed transfer syntaxes or accepted transfer syntax.
std::vector<std::string> transfer_syntaxes;
+
+ /// @brief Support for SCU role.
bool scu_role_support;
+
+ /// @brief Support for SCP role.
bool scp_role_support;
+
+ /// @brief Result of the negotiation.
Result result;
/// @brief Member-wise equality.
@@ -52,6 +64,7 @@ public:
/// @brief User Identity, cf. PS3.8 D.3.3.7
struct UserIdentity
{
+ /// @brief User identity type.
enum class Type
{
None = 0,
@@ -61,8 +74,13 @@ public:
SAML = 4
};
+ /// @brief Identity type.
Type type;
+
+ /// @brief Primary identity field.
std::string primary_field;
+
+ /// @brief Secondary identity field.
std::string secondary_field;
/// @brief Member-wise equality.
diff --git a/src/odil/BasicDirectoryCreator.cpp b/src/odil/BasicDirectoryCreator.cpp
index d73aa89..66decf9 100644
--- a/src/odil/BasicDirectoryCreator.cpp
+++ b/src/odil/BasicDirectoryCreator.cpp
@@ -236,16 +236,23 @@ BasicDirectoryCreator
{
LinearizedTree linearized_tree;
- // Prime the stack with all top-level records.
+ // Create a depth-first list of records and a sibling map.
+ // Prime the stack and sibling map with all top-level records.
std::stack<Record::Pointer> stack;
- for(auto const & record: record_tree)
+ std::map<Record const *, long> location_map;
+ std::map<Record const *, Record const *> sibling_map;
+ for(auto it=record_tree.begin(); it!=record_tree.end(); ++it)
{
- stack.push(record.second);
+ stack.push(it->second);
+ auto const sibling_it = std::next(it);
+ if(sibling_it != record_tree.end())
+ {
+ auto const & sibling = sibling_it->second;
+ sibling_map[it->second.get()] = sibling.get();
+ }
}
// Create a depth-first list of records and a sibling map.
- std::map<Record const *, long> location_map;
- std::map<Record const *, Record const *> sibling_map;
while(!stack.empty())
{
auto const & record = stack.top();
diff --git a/src/odil/BasicDirectoryCreator.h b/src/odil/BasicDirectoryCreator.h
index bd745f0..e84354f 100644
--- a/src/odil/BasicDirectoryCreator.h
+++ b/src/odil/BasicDirectoryCreator.h
@@ -56,6 +56,7 @@ public:
/// @brief Encoding of sequence items, defaults to Writer::ItemEncoding::ExplicitLength.
Writer::ItemEncoding item_encoding;
+ /// @brief Constructor.
BasicDirectoryCreator(
std::string const & root="",
std::vector<std::string> const & files=std::vector<std::string>(),
@@ -63,6 +64,7 @@ public:
Writer::ItemEncoding item_encoding=Writer::ItemEncoding::ExplicitLength
);
+ /// @brief Create and write the Basic Directory.
void operator()() const;
private:
diff --git a/src/odil/DataSet.cpp b/src/odil/DataSet.cpp
index 4a3cbd4..cd60507 100644
--- a/src/odil/DataSet.cpp
+++ b/src/odil/DataSet.cpp
@@ -240,6 +240,157 @@ DataSet
return it->second;
}
+template<typename TContainer>
+typename TContainer::value_type const & at_pos(
+ TContainer const & container, unsigned int position)
+{
+ if(container.size() <= position)
+ {
+ throw Exception("No such element");
+ }
+ return container[position];
+}
+
+bool
+DataSet
+::is_int(Tag const & tag) const
+{
+ return (*this)[tag].is_int();
+}
+
+Value::Integers const &
+DataSet
+::as_int(Tag const & tag) const
+{
+ return (*this)[tag].as_int();
+}
+
+Value::Integers &
+DataSet
+::as_int(Tag const & tag)
+{
+ return (*this)[tag].as_int();
+}
+
+Value::Integer const &
+DataSet
+::as_int(Tag const & tag, unsigned int position) const
+{
+ return at_pos(as_int(tag), position);
+}
+
+bool
+DataSet
+::is_real(Tag const & tag) const
+{
+ return (*this)[tag].is_real();
+}
+
+Value::Reals const &
+DataSet
+::as_real(Tag const & tag) const
+{
+ return (*this)[tag].as_real();
+}
+
+Value::Reals &
+DataSet
+::as_real(Tag const & tag)
+{
+ return (*this)[tag].as_real();
+}
+
+Value::Real const &
+DataSet
+::as_real(Tag const & tag, unsigned int position) const
+{
+ return at_pos(as_real(tag), position);
+}
+
+bool
+DataSet
+::is_string(Tag const & tag) const
+{
+ return (*this)[tag].is_string();
+}
+
+Value::Strings const &
+DataSet
+::as_string(Tag const & tag) const
+{
+ return (*this)[tag].as_string();
+}
+
+Value::Strings &
+DataSet
+::as_string(Tag const & tag)
+{
+ return (*this)[tag].as_string();
+}
+
+Value::String const &
+DataSet
+::as_string(Tag const & tag, unsigned int position) const
+{
+ return at_pos(as_string(tag), position);
+}
+
+bool
+DataSet
+::is_data_set(Tag const & tag) const
+{
+ return (*this)[tag].is_data_set();
+}
+
+Value::DataSets const &
+DataSet
+::as_data_set(Tag const & tag) const
+{
+ return (*this)[tag].as_data_set();
+}
+
+Value::DataSets &
+DataSet
+::as_data_set(Tag const & tag)
+{
+ return (*this)[tag].as_data_set();
+}
+
+DataSet const &
+DataSet
+::as_data_set(Tag const & tag, unsigned int position) const
+{
+ return at_pos(as_data_set(tag), position);
+}
+
+bool
+DataSet
+::is_binary(Tag const & tag) const
+{
+ return (*this)[tag].is_binary();
+}
+
+Value::Binary const &
+DataSet
+::as_binary(Tag const & tag) const
+{
+ return (*this)[tag].as_binary();
+}
+
+Value::Binary &
+DataSet
+::as_binary(Tag const & tag)
+{
+ return (*this)[tag].as_binary();
+}
+
+Value::Binary::value_type const &
+DataSet
+::as_binary(Tag const & tag, unsigned int position) const
+{
+ return at_pos(as_binary(tag), position);
+}
+
bool
DataSet
::has(Tag const & tag) const
diff --git a/src/odil/DataSet.h b/src/odil/DataSet.h
index 9924185..e8bf7ed 100644
--- a/src/odil/DataSet.h
+++ b/src/odil/DataSet.h
@@ -22,44 +22,6 @@
namespace odil
{
-#define odilElementTypeMacro(name, Type) \
-bool is_##name(Tag const & tag) const \
-{ \
- auto const it = this->_elements.find(tag); \
- if(it == this->_elements.end()) \
- { \
- throw Exception("No such element"); \
- } \
- return it->second.is_##name(); \
-} \
-Value::Type const & as_##name(Tag const & tag) const \
-{ \
- auto const it = this->_elements.find(tag); \
- if(it == this->_elements.end()) \
- { \
- throw Exception("No such element"); \
- } \
- return it->second.as_##name(); \
-} \
-Value::Type::value_type const & as_##name(Tag const & tag, unsigned int position) const \
-{ \
- auto const & data = this->as_##name(tag); \
- if(data.size() <= position) \
- { \
- throw Exception("No such element"); \
- } \
- return data[position]; \
-} \
-Value::Type & as_##name(Tag const & tag) \
-{ \
- auto const it = this->_elements.find(tag); \
- if(it == this->_elements.end()) \
- { \
- throw Exception("No such element"); \
- } \
- return it->second.as_##name(); \
-}
-
/**
* @brief DICOM Data set.
*/
@@ -171,20 +133,80 @@ public:
*/
Element & operator[](Tag const & tag);
- odilElementTypeMacro(int, Integers);
- odilElementTypeMacro(real, Reals);
- odilElementTypeMacro(string, Strings);
- odilElementTypeMacro(data_set, DataSets);
- odilElementTypeMacro(binary, Binary);
-
+ /// @brief Test whether an existing element has integer type.
+ bool is_int(Tag const & tag) const;
+
+ /// @brief Return the integers contained in an existing element (read-only).
+ Value::Integers const & as_int(Tag const & tag) const;
+
+ /// @brief Return the integers contained in an existing element (read-write).
+ Value::Integers & as_int(Tag const & tag);
+
+ /// @brief Return an integer contained in an existing element (read-only).
+ Value::Integer const & as_int(Tag const & tag, unsigned int position) const;
+
+ /// @brief Test whether an existing element has real type.
+ bool is_real(Tag const & tag) const;
+
+ /// @brief Return the reals contained in an existing element (read-only).
+ Value::Reals const & as_real(Tag const & tag) const;
+
+ /// @brief Return the reals contained in an existing element (read-write).
+ Value::Reals & as_real(Tag const & tag);
+
+ /// @brief Return an real contained in an existing element (read-only).
+ Value::Real const & as_real(Tag const & tag, unsigned int position) const;
+
+ /// @brief Test whether an existing element has string type.
+ bool is_string(Tag const & tag) const;
+
+ /// @brief Return the strings contained in an existing element (read-only).
+ Value::Strings const & as_string(Tag const & tag) const;
+
+ /// @brief Return the strings contained in an existing element (read-write).
+ Value::Strings & as_string(Tag const & tag);
+
+ /// @brief Return a string contained in an existing element (read-only).
+ Value::String const & as_string(Tag const & tag, unsigned int position) const;
+
+ /// @brief Test whether an existing element has data set type.
+ bool is_data_set(Tag const & tag) const;
+
+ /// @brief Return the data sets contained in an existing element (read-only).
+ Value::DataSets const & as_data_set(Tag const & tag) const;
+
+ /// @brief Return the data sets contained in an existing element (read-write).
+ Value::DataSets & as_data_set(Tag const & tag);
+
+ /// @brief Return a data set contained in an existing element (read-only).
+ DataSet const & as_data_set(Tag const & tag, unsigned int position) const;
+
+ /// @brief Test whether an existing element has binary type.
+ bool is_binary(Tag const & tag) const;
+
+ /// @brief Return the binary items contained in an existing element (read-only).
+ Value::Binary const & as_binary(Tag const & tag) const;
+
+ /// @brief Return the binary items contained in an existing element (read-write).
+ Value::Binary & as_binary(Tag const & tag);
+
+ /// @brief Return a binary item contained in an existing element (read-only).
+ Value::Binary::value_type const &
+ as_binary(Tag const & tag, unsigned int position) const;
+
+ /// @brief Iterator to the elements.
typedef std::map<Tag, Element>::const_iterator const_iterator;
+
+ /// @brief Return an iterator to the start of the elements.
const_iterator begin() const { return this->_elements.begin(); }
+
+ /// @brief Return an iterator to the end of the elements.
const_iterator end() const { return this->_elements.end(); }
- /// @brief Equality test
+ /// @brief Equality test.
bool operator==(DataSet const & other) const;
- /// @brief Difference test
+ /// @brief Difference test.
bool operator!=(DataSet const & other) const;
private:
diff --git a/src/odil/Element.h b/src/odil/Element.h
index 25774da..917cab2 100644
--- a/src/odil/Element.h
+++ b/src/odil/Element.h
@@ -77,6 +77,7 @@ public:
/// @brief Return the number of items in the value.
std::size_t size() const;
+ /// @brief Return the raw value.
Value const & get_value() const;
/// @brief Test whether the value contains integers.
diff --git a/src/odil/ElementsDictionary.cpp b/src/odil/ElementsDictionary.cpp
index 5fc6363..be9af28 100644
--- a/src/odil/ElementsDictionary.cpp
+++ b/src/odil/ElementsDictionary.cpp
@@ -137,4 +137,20 @@ ElementsDictionaryEntry
// Nothing else
}
+ElementsDictionary::const_iterator
+find(ElementsDictionary const & dictionary, Tag const & tag)
+{
+ auto iterator = dictionary.find(tag);
+ if(iterator == dictionary.end())
+ {
+ std::string tag_string(tag);
+ tag_string[2] = 'x';
+ tag_string[3] = 'x';
+
+ iterator = dictionary.find(tag_string);
+ }
+
+ return iterator;
+}
+
}
diff --git a/src/odil/ElementsDictionary.h b/src/odil/ElementsDictionary.h
index 2443c5e..0179767 100644
--- a/src/odil/ElementsDictionary.h
+++ b/src/odil/ElementsDictionary.h
@@ -70,11 +70,19 @@ namespace odil
*/
struct ElementsDictionaryEntry
{
+ /// @brief Full name.
std::string name;
+
+ /// @brief Brief name.
std::string keyword;
+
+ /// @brief Type.
std::string vr;
+
+ /// @brief Multiplicity.
std::string vm;
+ /// @brief Constructor.
ElementsDictionaryEntry(
std::string const & name="", std::string const & keyword="",
std::string const & vr="", std::string const & vm="");
@@ -83,6 +91,9 @@ struct ElementsDictionaryEntry
typedef
std::map<ElementsDictionaryKey, ElementsDictionaryEntry> ElementsDictionary;
+ElementsDictionary::const_iterator
+find(ElementsDictionary const & dictionary, Tag const & tag);
+
}
#endif // _f4b88e07_d515_41be_ad1b_37899ec6451e
diff --git a/src/odil/Exception.h b/src/odil/Exception.h
index 8c4b14e..2e01b2c 100644
--- a/src/odil/Exception.h
+++ b/src/odil/Exception.h
@@ -29,6 +29,7 @@ public:
virtual const char* what() const throw();
protected:
+ /// @brief Message of the exception.
std::string _message;
};
diff --git a/src/odil/FindSCU.h b/src/odil/FindSCU.h
index 4cd30ea..7bb6bd3 100644
--- a/src/odil/FindSCU.h
+++ b/src/odil/FindSCU.h
@@ -25,6 +25,7 @@ public:
/// @brief Callback called when a response is received.
typedef std::function<void(DataSet const &)> Callback;
+ /// @brief Constructor.
FindSCU(Association & association);
/// @brief Destructor.
diff --git a/src/odil/GetSCP.h b/src/odil/GetSCP.h
index 8702338..bdc8eb0 100644
--- a/src/odil/GetSCP.h
+++ b/src/odil/GetSCP.h
@@ -23,9 +23,11 @@ class GetSCP: public SCP
{
public:
+ /// @brief Generator of C-GET responses.
class DataSetGenerator: public SCP::DataSetGenerator
{
public:
+ /// @brief Return the number of responses.
virtual unsigned int count() const =0;
};
@@ -56,4 +58,3 @@ private:
}
#endif // _2f0ad1fd_8779_4ab3_b7e8_6d37fdc0c018
-
diff --git a/src/odil/GetSCU.cpp b/src/odil/GetSCU.cpp
index ca73ffe..750a345 100644
--- a/src/odil/GetSCU.cpp
+++ b/src/odil/GetSCU.cpp
@@ -38,7 +38,9 @@ GetSCU
void
GetSCU
-::get(DataSet const & query, Callback callback) const
+::get(
+ DataSet const & query, StoreCallback store_callback,
+ GetCallback get_callback) const
{
// Send the request
message::CGetRequest request(
@@ -54,14 +56,15 @@ GetSCU
if(message.get_command_field() == message::Message::Command::C_GET_RSP)
{
- done = this->_handle_get_response(message::CGetResponse(message));
+ done = this->_handle_get_response(
+ message::CGetResponse(message), get_callback);
}
else if(message.get_command_field() == message::Message::Command::C_STORE_RQ)
{
try
{
this->_handle_store_request(
- message::CStoreRequest(message), callback);
+ message::CStoreRequest(message), store_callback);
}
catch(...)
{
@@ -94,18 +97,26 @@ GetSCU
bool
GetSCU
-::_handle_get_response(message::CGetResponse const & response) const
+::_handle_get_response(
+ message::CGetResponse const & response, GetCallback callback) const
{
+ if(callback)
+ {
+ callback(response);
+ }
return !response.is_pending();
}
void
GetSCU
::_handle_store_request(
- message::CStoreRequest const & request, Callback callback) const
+ message::CStoreRequest const & request, StoreCallback callback) const
{
auto const store_callback = [&callback](message::CStoreRequest const & request) {
- callback(request.get_data_set());
+ if(callback)
+ {
+ callback(request.get_data_set());
+ }
return message::Response::Success;
};
StoreSCP scp(this->_association, store_callback);
diff --git a/src/odil/GetSCU.h b/src/odil/GetSCU.h
index b44b914..292f974 100644
--- a/src/odil/GetSCU.h
+++ b/src/odil/GetSCU.h
@@ -25,8 +25,17 @@ namespace odil
class GetSCU: public SCU
{
public:
- /// @brief Callback called when a response is received.
- typedef std::function<void(DataSet const &)> Callback;
+ /// @brief Callback called when a C-STORE request is received.
+ typedef std::function<void(DataSet const &)> StoreCallback;
+
+ /**
+ * @brief Typedef to keep compatibility with previous versions.
+ * @deprecated The StoreCallback typedef should now be used.
+ */
+ typedef StoreCallback Callback;
+
+ /// @brief Callback called when a C-GET response is received.
+ typedef std::function<void(message::CGetResponse const &)> GetCallback;
/// @brief Constructor.
GetSCU(Association & association);
@@ -34,8 +43,10 @@ public:
/// @brief Destructor.
virtual ~GetSCU();
- /// @brief Perform the C-GET using an optional callback.
- void get(DataSet const & query, Callback callback) const;
+ /// @brief Perform the C-GET using callbacks.
+ void get(
+ DataSet const & query, StoreCallback store_callback,
+ GetCallback get_callback=GetCallback()) const;
/**
* @brief Return a list of datasets matching the query.
@@ -43,9 +54,10 @@ public:
std::vector<DataSet> get(DataSet const & query) const;
private:
- bool _handle_get_response(message::CGetResponse const & response) const;
+ bool _handle_get_response(
+ message::CGetResponse const & response, GetCallback callback) const;
void _handle_store_request(
- message::CStoreRequest const & request, Callback callback) const;
+ message::CStoreRequest const & request, StoreCallback callback) const;
};
}
diff --git a/src/odil/MoveSCP.h b/src/odil/MoveSCP.h
index 77a3e6f..f47d6af 100644
--- a/src/odil/MoveSCP.h
+++ b/src/odil/MoveSCP.h
@@ -27,10 +27,14 @@ class MoveSCP: public SCP
{
public:
+ /// @brief Generator of C-MOVE responses.
class DataSetGenerator: public SCP::DataSetGenerator
{
public:
+ /// @brief Return the number of responses.
virtual unsigned int count() const =0;
+
+ /// @brief Return the sub-association to send responses on.
virtual Association get_association(message::CMoveRequest const &) const =0;
};
@@ -62,4 +66,3 @@ private:
#endif // _7e899e10_2a21_45b8_a2d6_af1d13cbfd29
-
diff --git a/src/odil/MoveSCU.cpp b/src/odil/MoveSCU.cpp
index ae24730..f39a151 100644
--- a/src/odil/MoveSCU.cpp
+++ b/src/odil/MoveSCU.cpp
@@ -26,7 +26,7 @@ namespace odil
MoveSCU
::MoveSCU(Association & association)
-: SCU(association), _move_destination("")
+: SCU(association), _move_destination(""), _incoming_port(0)
{
// Nothing else.
}
@@ -51,9 +51,40 @@ MoveSCU
this->_move_destination = move_destination;
}
+uint16_t
+MoveSCU
+::get_incoming_port() const
+{
+ return this->_incoming_port;
+}
+
void
MoveSCU
-::move(DataSet const & query, Callback callback) const
+::set_incoming_port(uint16_t port)
+{
+ this->_incoming_port = port;
+}
+
+void
+MoveSCU
+::move(DataSet const & query, StoreCallback store_callback) const
+{
+ this->move(query, store_callback, MoveCallback());
+}
+
+void
+MoveSCU
+::move(DataSet const & query, MoveCallback move_callback) const
+{
+ this->move(query, StoreCallback(), move_callback);
+}
+
+
+void
+MoveSCU
+::move(
+ DataSet const & query, StoreCallback store_callback,
+ MoveCallback move_callback) const
{
// Send the request
message::CMoveRequest const request(
@@ -65,36 +96,40 @@ MoveSCU
// Receive the responses
Association store_association;
bool done = false;
- while(!done)
+ if(this->_incoming_port != 0)
{
- // Use a small timeout to avoid blocking for a long time.
- boost::posix_time::milliseconds const timeout(1000);
- store_association.set_tcp_timeout(timeout);
- store_association.set_message_timeout(timeout);
-
- if(!store_association.is_associated())
+ while(!done)
{
- try
- {
- store_association.receive_association(boost::asio::ip::tcp::v4(), 11113);
- store_association.set_tcp_timeout(
- this->_association.get_tcp_timeout());
- store_association.set_message_timeout(
- this->_association.get_message_timeout());
- }
- catch(Exception const & e)
- {
- // Ignore
- }
+ // Use a small timeout to avoid blocking for a long time.
+ boost::posix_time::milliseconds const timeout(10);
+ store_association.set_tcp_timeout(timeout);
+ store_association.set_message_timeout(timeout);
- if(store_association.is_associated())
+ if(!store_association.is_associated())
{
- done = true;
+ try
+ {
+ store_association.receive_association(
+ boost::asio::ip::tcp::v4(), this->_incoming_port);
+ store_association.set_tcp_timeout(
+ this->_association.get_tcp_timeout());
+ store_association.set_message_timeout(
+ this->_association.get_message_timeout());
+ }
+ catch(Exception const & e)
+ {
+ // Ignore
+ }
+
+ if(store_association.is_associated())
+ {
+ done = true;
+ }
}
}
}
- this->_dispatch(store_association, callback);
+ this->_dispatch(store_association, store_callback, move_callback);
}
std::vector<DataSet>
@@ -105,27 +140,30 @@ MoveSCU
auto callback = [&result](DataSet const & data_set) {
result.push_back(data_set);
};
- this->move(query, callback);
+ this->move(query, callback, MoveCallback());
return result;
}
void
MoveSCU
-::_dispatch(Association & store_association, Callback callback) const
+::_dispatch(
+ Association & store_association, StoreCallback store_callback,
+ MoveCallback move_callback) const
{
- bool store_done = false;
+ // If no store association has been established, store is considered done
+ bool store_done = !store_association.is_associated();
bool main_done = false;
while(!(store_done && main_done))
{
- if(store_association.get_transport().get_socket()->available() > 0)
+ if(!store_done && store_association.get_transport().get_socket()->available() > 0)
{
- store_done =
- this->_handle_store_association(store_association, callback);
+ store_done = this->_handle_store_association(
+ store_association, store_callback);
}
- if(this->_association.get_transport().get_socket()->available() > 0)
+ if(!main_done && this->_association.get_transport().get_socket()->available() > 0)
{
- main_done = this->_handle_main_association();
+ main_done = this->_handle_main_association(move_callback);
}
std::this_thread::sleep_for(std::chrono::milliseconds(10));
@@ -134,21 +172,29 @@ MoveSCU
bool
MoveSCU
-::_handle_main_association() const
+::_handle_main_association(MoveCallback callback) const
{
message::CMoveResponse const response = this->_association.receive_message();
+ if(callback)
+ {
+ callback(response);
+ }
return !response.is_pending();
}
bool
MoveSCU
-::_handle_store_association(Association & association, Callback callback) const
+::_handle_store_association(
+ Association & association, StoreCallback callback) const
{
bool result = false;
try
{
auto const store_callback = [&callback](message::CStoreRequest const & request) {
- callback(request.get_data_set());
+ if(callback)
+ {
+ callback(request.get_data_set());
+ }
return message::Response::Success;
};
StoreSCP scp(association, store_callback);
diff --git a/src/odil/MoveSCU.h b/src/odil/MoveSCU.h
index 9d62d58..76be7f5 100644
--- a/src/odil/MoveSCU.h
+++ b/src/odil/MoveSCU.h
@@ -15,6 +15,7 @@
#include "odil/Association.h"
#include "odil/DataSet.h"
+#include "odil/message/CMoveResponse.h"
#include "odil/SCU.h"
namespace odil
@@ -24,8 +25,17 @@ namespace odil
class MoveSCU: public SCU
{
public:
- /// @brief Callback called when a response is received.
- typedef std::function<void(DataSet const &)> Callback;
+ /// @brief Callback called when a C-STORE request is received.
+ typedef std::function<void(DataSet const &)> StoreCallback;
+
+ /**
+ * @brief Typedef to keep compatibility with previous versions.
+ * @deprecated The StoreCallback typedef should now be used.
+ */
+ typedef StoreCallback Callback;
+
+ /// @brief Callback called when a C-MOVE response is received.
+ typedef std::function<void(message::CMoveResponse const &)> MoveCallback;
/// @brief Constructor.
MoveSCU(Association & association);
@@ -37,9 +47,23 @@ public:
std::string const & get_move_destination() const;
/// @brief Set the AE title of the destination.
void set_move_destination(std::string const & move_destination);
+
+ /// @brief Return the port for incoming associations, defaults to 0.
+ uint16_t get_incoming_port() const;
+
+ /// @brief Set the port for incoming associations, use 0 to disable.
+ void set_incoming_port(uint16_t port);
+
+ /// @brief Perform the C-MOVE using callbacks.
+ void move(DataSet const & query, StoreCallback store_callback) const;
+
+ /// @brief Perform the C-MOVE using callbacks.
+ void move(DataSet const & query, MoveCallback move_callback) const;
- /// @brief Perform the C-MOVE using a callback.
- void move(DataSet const & query, Callback callback) const;
+ /// @brief Perform the C-MOVE using callbacks.
+ void move(
+ DataSet const & query, StoreCallback store_callback,
+ MoveCallback move_callback) const;
/**
* @brief Return a list of datasets matching the query.
@@ -48,14 +72,17 @@ public:
private:
std::string _move_destination;
+ uint16_t _incoming_port;
- void _dispatch(Association & store_association, Callback callback) const;
+ void _dispatch(
+ Association & store_association, StoreCallback store_callback,
+ MoveCallback move_callback) const;
- bool _handle_main_association() const;
- bool _handle_store_association(Association & association, Callback callback) const;
+ bool _handle_main_association(MoveCallback callback) const;
+ bool _handle_store_association(
+ Association & association, StoreCallback callback) const;
};
}
#endif // _5ff4d940_4db7_4d85_9d3a_230b944b31fe
-
diff --git a/src/odil/Reader.cpp b/src/odil/Reader.cpp
index 5964c41..668c9a9 100644
--- a/src/odil/Reader.cpp
+++ b/src/odil/Reader.cpp
@@ -59,6 +59,10 @@ type value; \
std::string read_string(std::istream & stream, unsigned int size)
{
+ if(size == 0)
+ {
+ return std::string();
+ }
std::string value(size, '\0');
stream.read(&value[0], value.size());
if(!stream)
@@ -469,7 +473,11 @@ Reader::Visitor
::operator()(Value::Binary & value) const
{
auto const vl = this->read_length();
- if(vl == 0xffffffff)
+ if(vl == 0)
+ {
+ return;
+ }
+ else if(vl == 0xffffffff)
{
value = this->read_encapsulated_pixel_data(this->stream);
}
diff --git a/src/odil/Reader.h b/src/odil/Reader.h
index 14588a5..4081a31 100644
--- a/src/odil/Reader.h
+++ b/src/odil/Reader.h
@@ -67,6 +67,7 @@ public:
Tag const & tag=Tag(0xffff,0xffff),
DataSet const & data_set=DataSet()) const;
+ /// @brief Return the meta-data header and data set stored in the stream.
static std::pair<DataSet, DataSet> read_file(
std::istream & stream,
bool keep_group_length=false);
diff --git a/src/odil/SCP.h b/src/odil/SCP.h
index 9f1b2f7..fa0dc09 100644
--- a/src/odil/SCP.h
+++ b/src/odil/SCP.h
@@ -25,13 +25,19 @@ public:
class DataSetGenerator
{
public:
+ /// @brief Destructor.
virtual ~DataSetGenerator() =0;
+ /// @brief Initialize the generator.
virtual void initialize(message::Request const & request) =0;
+ /// @brief Test whether all elements have been generated.
virtual bool done() const =0;
+
+ /// @brief Prepare the next element.
virtual void next() =0;
+ /// @brief Return the current element.
virtual DataSet get() const =0;
};
@@ -47,6 +53,7 @@ public:
/// @brief Process a message.
virtual void operator()(message::Message const & message) =0;
protected:
+ /// @brief Association with peer.
Association & _association;
};
diff --git a/src/odil/SCPDispatcher.h b/src/odil/SCPDispatcher.h
index bc7e002..511b19f 100644
--- a/src/odil/SCPDispatcher.h
+++ b/src/odil/SCPDispatcher.h
@@ -19,6 +19,7 @@
namespace odil
{
+/// @brief Dispatch an incoming message to one of the registered SCPs.
class SCPDispatcher
{
public:
@@ -28,12 +29,16 @@ public:
/// @brief Destructor.
~SCPDispatcher();
+ /// @brief Test whether command has an SCP registered.
bool has_scp(Value::Integer command) const;
+ /// @brief Return the SCP registered with command.
std::shared_ptr<SCP> const & get_scp(Value::Integer command) const;
+ /// @brief Registered an SCP with command.
void set_scp(Value::Integer command, std::shared_ptr<SCP> const & scp);
+ /// @brief Receive and dispatch an incoming message.
void dispatch();
private:
typedef std::shared_ptr<SCP> SCPPointer;
diff --git a/src/odil/SCU.h b/src/odil/SCU.h
index d6696b8..0f380bd 100644
--- a/src/odil/SCU.h
+++ b/src/odil/SCU.h
@@ -32,7 +32,9 @@ public:
void set_affected_sop_class(std::string const & sop_class);
protected:
+ /// @brief Association with peer.
Association & _association;
+
/// @brief Affected SOP class.
std::string _affected_sop_class;
};
diff --git a/src/odil/Tag.cpp b/src/odil/Tag.cpp
index 8807675..affad6c 100644
--- a/src/odil/Tag.cpp
+++ b/src/odil/Tag.cpp
@@ -11,11 +11,10 @@
#include <algorithm>
#include <iomanip>
#include <ostream>
+#include <stdexcept>
#include <sstream>
#include <string>
-#include <boost/regex.hpp>
-
#include "odil/ElementsDictionary.h"
#include "odil/Exception.h"
#include "odil/registry.h"
@@ -61,35 +60,16 @@ Tag
::get_name() const
{
std::string name;
- std::string const tag_string(*this);
-
- for(auto const item: registry::public_dictionary)
+
+ auto const iterator = find(registry::public_dictionary, *this);
+ if(iterator != registry::public_dictionary.end())
{
- auto const & key = item.first;
- auto const & entry = item.second;
-
- if(key.get_type() == ElementsDictionaryKey::Type::Tag &&
- key.get_tag() == *this)
- {
- name = entry.keyword;
- break;
- }
- else if(key.get_type() == ElementsDictionaryKey::Type::String)
- {
- auto regex = key.get_string();
- std::replace_if(
- regex.begin(), regex.end(),
- [](char c) { return c == 'x'; }, '.');
- if(boost::regex_match(tag_string, boost::regex(regex)))
- {
- name = entry.keyword;
- break;
- }
- }
+ name = iterator->second.keyword;
}
if(name.empty())
{
+ std::string const tag_string(*this);
throw Exception("No such element: "+tag_string);
}
@@ -146,66 +126,44 @@ void
Tag
::_from_string(std::string const & string)
{
- ElementsDictionary::const_iterator it = registry::public_dictionary.begin();
- while(it != registry::public_dictionary.end())
- {
- if(it->second.keyword == string)
- {
- break;
- }
- ++it;
- }
-
- if(it == registry::public_dictionary.end())
+ bool found = false;
+ uint16_t group;
+ uint16_t element;
+
+ // Try string form of numeric tag
+ if(string.size() == 8)
{
- // Try with string form of numeric tag
- uint16_t group;
- uint16_t element;
- bool parsed = true;
-
- if(string.size() != 8)
- {
- parsed = false;
- }
- else
+ try
{
- std::string const first = string.substr(0, 4);
- char * endptr;
- group = strtol(first.c_str(), &endptr, 16);
- if(*endptr != '\0')
- {
- parsed = false;
- }
- else
- {
- std::string const second = string.substr(4, 4);
- element = strtol(second.c_str(), &endptr, 16);
- if(*endptr != '\0')
- {
- parsed = false;
- }
- }
+ group = std::stol(string.substr(0, 4), 0, 16);
+ element = std::stol(string.substr(4, 8), 0, 16);
+ found = true;
}
-
- if(!parsed)
+ catch(std::invalid_argument const &)
{
- throw Exception("No such element: "+string);
+ found = false;
}
- else
+ }
+
+ if(!found)
+ {
+ auto const it = registry::public_tags.find(string);
+ if(it != registry::public_tags.end())
{
- this->group = group;
- this->element = element;
+ found = true;
+ group = it->second.group;
+ element = it->second.element;
}
}
+
+ if(!found)
+ {
+ throw Exception("No such element: "+string);
+ }
else
{
- if(it->first.get_type() != ElementsDictionaryKey::Type::Tag)
- {
- throw Exception("InvalidType");
- }
- auto const & tag = it->first.get_tag();
- this->group = tag.group;
- this->element = tag.element;
+ this->group = group;
+ this->element = element;
}
}
diff --git a/src/odil/Tag.h b/src/odil/Tag.h
index 385348a..a3947b3 100644
--- a/src/odil/Tag.h
+++ b/src/odil/Tag.h
@@ -36,7 +36,7 @@ public:
* string is not the representation of a numeric value, a odil::Exception
* is raised.
*/
- Tag(std::string const & name);
+ Tag(std::string const & string);
/**
* @brief Create a tag based on its name or string representation of its
@@ -46,7 +46,7 @@ public:
* string is not the representation of a numeric value, a odil::Exception
* is raised.
*/
- Tag(char const * name);
+ Tag(char const * string);
/// @brief Group of the tag.
uint16_t group;
@@ -54,6 +54,7 @@ public:
/// @brief Element of the tag.
uint16_t element;
+ /// @brief Test whether the tag is private.
bool is_private() const;
/**
diff --git a/src/odil/UIDsDictionary.h b/src/odil/UIDsDictionary.h
index fa36a14..f2523a9 100644
--- a/src/odil/UIDsDictionary.h
+++ b/src/odil/UIDsDictionary.h
@@ -20,10 +20,16 @@ namespace odil
*/
struct UIDsDictionaryEntry
{
+ /// @brief Full name.
std::string name;
+
+ /// @brief Brief name.
std::string keyword;
+
+ /// @brief Category.
std::string type;
+ /// @brief Constructor.
UIDsDictionaryEntry(
std::string const & name="", std::string const & keyword="",
std::string const & type="");
diff --git a/src/odil/VR.cpp b/src/odil/VR.cpp
index 4590417..6d1e828 100644
--- a/src/odil/VR.cpp
+++ b/src/odil/VR.cpp
@@ -30,10 +30,12 @@ _build_enum_to_name()
ADD_TO_MAP(result, IS);
ADD_TO_MAP(result, LO);
ADD_TO_MAP(result, LT);
- ADD_TO_MAP(result, PN);
ADD_TO_MAP(result, OB);
+ ADD_TO_MAP(result, OD);
ADD_TO_MAP(result, OF);
+ ADD_TO_MAP(result, OL);
ADD_TO_MAP(result, OW);
+ ADD_TO_MAP(result, PN);
ADD_TO_MAP(result, SH);
ADD_TO_MAP(result, SL);
ADD_TO_MAP(result, SQ);
diff --git a/src/odil/VR.h b/src/odil/VR.h
index 1f945e9..4dda97e 100644
--- a/src/odil/VR.h
+++ b/src/odil/VR.h
@@ -20,8 +20,8 @@ class Tag;
enum class VR
{
UNKNOWN,
- AE, AS, AT, CS, DA, DS, DT, FL, FD, IS, LO, LT, PN, OB, OF, OW, SH, SL,
- SQ, SS, ST, TM, UC, UI, UL, UN, UR, US, UT,
+ AE, AS, AT, CS, DA, DS, DT, FL, FD, IS, LO, LT, OB, OD, OF, OL, OW, PN, SH,
+ SL, SQ, SS, ST, TM, UC, UI, UL, UN, UR, US, UT,
INVALID
};
diff --git a/src/odil/VRFinder.cpp b/src/odil/VRFinder.cpp
index 685fc93..0277f90 100644
--- a/src/odil/VRFinder.cpp
+++ b/src/odil/VRFinder.cpp
@@ -13,8 +13,6 @@
#include <string>
#include <vector>
-#include <boost/regex.hpp>
-
#include "odil/DataSet.h"
#include "odil/ElementsDictionary.h"
#include "odil/Exception.h"
@@ -86,31 +84,11 @@ VRFinder
Tag const & tag, DataSet const &, std::string const &)
{
VR vr = VR::INVALID;
- std::string const tag_string(tag);
-
- for(auto const item: registry::public_dictionary)
+
+ auto const iterator = find(registry::public_dictionary, tag);
+ if(iterator != registry::public_dictionary.end())
{
- auto const & key = item.first;
- auto const & entry = item.second;
-
- if(key.get_type() == ElementsDictionaryKey::Type::Tag &&
- key.get_tag() == tag)
- {
- vr = as_vr(entry.vr);
- break;
- }
- else if(key.get_type() == ElementsDictionaryKey::Type::String)
- {
- auto regex = key.get_string();
- std::replace_if(
- regex.begin(), regex.end(),
- [](char c) { return c == 'x'; }, '.');
- if(boost::regex_match(tag_string, boost::regex(regex)))
- {
- vr = as_vr(entry.vr);
- break;
- }
- }
+ vr = as_vr(iterator->second.vr);
}
if(vr == VR::INVALID)
@@ -206,7 +184,92 @@ VRFinder
tag == registry::LargestPixelValueInSeries ||
tag == registry::PixelPaddingValue)
{
- return VR::US;
+ if(!data_set.has(odil::registry::PixelRepresentation))
+ {
+ throw Exception("Cannot find VR without PixelRepresentation");
+ }
+ auto const & pixel_representation =
+ data_set.as_int(odil::registry::PixelRepresentation)[0];
+ return (pixel_representation==0)?(VR::US):(VR::SS);
+ }
+ else
+ {
+ throw Exception("Unknown tag");
+ }
+ }
+ else
+ {
+ throw Exception("Unknown transfer syntax");
+ }
+}
+
+VR
+VRFinder
+::explicit_vr_little_endian(
+ Tag const & tag, DataSet const & data_set,
+ std::string const & transfer_syntax)
+{
+ if(transfer_syntax == registry::ExplicitVRLittleEndian)
+ {
+ // PS3.5, A.1 (c)
+ if(tag == registry::PixelData)
+ {
+ if(!data_set.has(odil::registry::BitsAllocated))
+ {
+ throw Exception("Cannot find VR without BitsAllocated");
+ }
+ auto const & bits_allocated =
+ data_set.as_int(odil::registry::BitsAllocated)[0];
+ return (bits_allocated<=8)?(VR::OB):(VR::OW);
+ }
+ else if((tag.group>>8) == 0x60 && tag.element == 0x3000)
+ {
+ return VR::OW;
+ }
+ else if(tag == registry::WaveformData)
+ {
+ return VR::OW;
+ }
+ else if(tag == registry::RedPaletteColorLookupTableData ||
+ tag == registry::GreenPaletteColorLookupTableData ||
+ tag == registry::BluePaletteColorLookupTableData ||
+ tag == registry::AlphaPaletteColorLookupTableData)
+ {
+ return VR::OW;
+ }
+ // {Red,Green,Blue,Alpha}PaletteColorLookupTableDescriptor
+ else if(tag == registry::SegmentedRedPaletteColorLookupTableData ||
+ tag == registry::SegmentedGreenPaletteColorLookupTableData ||
+ tag == registry::SegmentedBluePaletteColorLookupTableData)
+ {
+ return VR::OW;
+ }
+ // LUTData
+ // LUTDescriptor
+ else if(tag == registry::BlendingLookupTableData)
+ {
+ return VR::OW;
+ }
+ else if(tag == registry::VertexPointIndexList ||
+ tag == registry::EdgePointIndexList ||
+ tag == registry::TrianglePointIndexList ||
+ tag == registry::PrimitivePointIndexList)
+ {
+ return VR::OW;
+ }
+ else if(tag == registry::SmallestImagePixelValue ||
+ tag == registry::LargestImagePixelValue ||
+ tag == registry::SmallestPixelValueInSeries ||
+ tag == registry::LargestPixelValueInSeries ||
+ tag == registry::PixelPaddingValue)
+ {
+ if(!data_set.has(odil::registry::PixelRepresentation))
+ {
+ throw Exception("Cannot find VR without PixelRepresentation");
+ }
+ auto const & pixel_representation =
+ data_set.as_int(odil::registry::PixelRepresentation)[0];
+ return (pixel_representation==0)?(VR::US):(VR::SS);
}
else
{
@@ -225,7 +288,7 @@ VRFinder
{
return {
group_length, private_tag, implicit_vr_little_endian,
- public_dictionary };
+ explicit_vr_little_endian, public_dictionary };
}
}
diff --git a/src/odil/VRFinder.h b/src/odil/VRFinder.h
index 4ed1ffa..c279609 100644
--- a/src/odil/VRFinder.h
+++ b/src/odil/VRFinder.h
@@ -68,6 +68,11 @@ public:
static VR implicit_vr_little_endian(
Tag const & tag, DataSet const & data_set,
std::string const & transfer_syntax);
+
+ /// @brief Return the VR of elements defined in PS3.5, A.2 (c).
+ static VR explicit_vr_little_endian(
+ Tag const & tag, DataSet const & data_set,
+ std::string const & transfer_syntax);
private:
static std::vector<Finder> _get_default_finders();
diff --git a/src/odil/Value.h b/src/odil/Value.h
index 522a577..29b9828 100644
--- a/src/odil/Value.h
+++ b/src/odil/Value.h
@@ -36,10 +36,13 @@ public:
Binary
};
+ /// @brief Integer type.
typedef int64_t Integer;
+ /// @brief Real type.
typedef double Real;
+ /// @brief String type.
typedef std::string String;
/// @brief Integer container.
diff --git a/src/odil/Writer.cpp b/src/odil/Writer.cpp
index c229ed1..96b8efd 100644
--- a/src/odil/Writer.cpp
+++ b/src/odil/Writer.cpp
@@ -463,7 +463,11 @@ Writer::Visitor::result_type
Writer::Visitor
::operator()(Value::Binary const & value) const
{
- if(value.size() > 1)
+ if(value.empty())
+ {
+ return;
+ }
+ else if(value.size() > 1)
{
this->write_encapsulated_pixel_data(value);
}
@@ -520,6 +524,11 @@ void
Writer::Visitor
::write_strings(T const & sequence, char padding) const
{
+ if(sequence.empty())
+ {
+ return;
+ }
+
auto const stream_begin = this->stream.tellp();
auto last_element_it = --sequence.end();
@@ -566,10 +575,13 @@ Writer::Visitor
length = fragment.size();
odil_write_binary(
length, this->stream, this->byte_ordering, 8*sizeof(length));
- this->stream.write(reinterpret_cast<char const*>(&fragment[0]), length);
- if(!this->stream)
+ if(length > 0)
{
- throw Exception("Could not write to stream");
+ this->stream.write(reinterpret_cast<char const*>(&fragment[0]), length);
+ if(!this->stream)
+ {
+ throw Exception("Could not write to stream");
+ }
}
}
writer.write_tag(registry::SequenceDelimitationItem);
diff --git a/src/odil/json_converter.cpp b/src/odil/json_converter.cpp
index 70ef96a..dfd4f55 100644
--- a/src/odil/json_converter.cpp
+++ b/src/odil/json_converter.cpp
@@ -21,6 +21,7 @@
namespace odil
{
+/// @brief Element visitor converting to JSON.
struct ToJSONVisitor
{
typedef Json::Value result_type;
diff --git a/src/odil/odil.h b/src/odil/odil.h
new file mode 100644
index 0000000..dcecb68
--- /dev/null
+++ b/src/odil/odil.h
@@ -0,0 +1,15 @@
+#pragma once
+
+#ifdef WIN32
+# define EXPORT_DYNAMIC_LIBRARY __declspec(dllexport)
+# define IMPORT_DYNAMIC_LIBRARY __declspec(dllimport)
+#else // WIN32
+# define EXPORT_DYNAMIC_LIBRARY
+# define IMPORT_DYNAMIC_LIBRARY
+#endif // WIN32
+
+#ifdef BUILDING_ODIL
+# define ODIL_API EXPORT_DYNAMIC_LIBRARY
+#else // BUILDING_ODIL
+# define ODIL_API IMPORT_DYNAMIC_LIBRARY
+#endif // BUILDING_ODIL
\ No newline at end of file
diff --git a/src/odil/registry.cpp b/src/odil/registry.cpp
index 84de2db..2121eeb 100644
--- a/src/odil/registry.cpp
+++ b/src/odil/registry.cpp
@@ -6,7 +6,9 @@
* for details.
************************************************************************/
-#include <stdint.h>
+#include <cstdint>
+#include <map>
+#include <string>
#include "odil/registry.h"
@@ -552,6 +554,12 @@ ElementsDictionary create_public_dictionary()
"Patient's Birth Date", "PatientBirthDate", "DA", "1" },
{ Tag(0x0010, 0x0032),
"Patient's Birth Time", "PatientBirthTime", "TM", "1" },
+ { Tag(0x0010, 0x0033),
+ "Patient's Birth Date in Alternative Calendar", "PatientBirthDateInAlternativeCalendar", "LO", "1" },
+ { Tag(0x0010, 0x0034),
+ "Patient's Death Date in Alternative Calendar", "PatientDeathDateInAlternativeCalendar", "LO", "1" },
+ { Tag(0x0010, 0x0035),
+ "Patient's Alternative Calendar", "PatientAlternativeCalendar", "CS", "1" },
{ Tag(0x0010, 0x0040),
"Patient's Sex", "PatientSex", "CS", "1" },
{ Tag(0x0010, 0x0050),
@@ -1444,6 +1452,10 @@ ElementsDictionary create_public_dictionary()
"Plate Type", "PlateType", "SH", "1" },
{ Tag(0x0018, 0x1261),
"Phosphor Type", "PhosphorType", "LO", "1" },
+ { Tag(0x0018, 0x1271),
+ "Water Equivalent Diameter", "WaterEquivalentDiameter", "FD", "1" },
+ { Tag(0x0018, 0x1272),
+ "Water Equivalent Diameter Calculation Method Code Sequence", "WaterEquivalentDiameterCalculationMethodCodeSequence", "SQ", "1" },
{ Tag(0x0018, 0x1300),
"Scan Velocity", "ScanVelocity", "DS", "1" },
{ Tag(0x0018, 0x1301),
@@ -5824,28 +5836,54 @@ ElementsDictionary create_public_dictionary()
"Selector Sequence Pointer Private Creator", "SelectorSequencePointerPrivateCreator", "LO", "1-n" },
{ Tag(0x0072, 0x0056),
"Selector Attribute Private Creator", "SelectorAttributePrivateCreator", "LO", "1" },
+ { Tag(0x0072, 0x005e),
+ "Selector AE Value", "SelectorAEValue", "AE", "1-n" },
+ { Tag(0x0072, 0x005f),
+ "Selector AS Value", "SelectorASValue", "AS", "1-n" },
{ Tag(0x0072, 0x0060),
"Selector AT Value", "SelectorATValue", "AT", "1-n" },
+ { Tag(0x0072, 0x0061),
+ "Selector DA Value", "SelectorDAValue", "DA", "1-n" },
{ Tag(0x0072, 0x0062),
"Selector CS Value", "SelectorCSValue", "CS", "1-n" },
+ { Tag(0x0072, 0x0063),
+ "Selector DT Value", "SelectorDTValue", "DT", "1-n" },
{ Tag(0x0072, 0x0064),
"Selector IS Value", "SelectorISValue", "IS", "1-n" },
+ { Tag(0x0072, 0x0065),
+ "Selector OB Value", "SelectorOBValue", "OB", "1" },
{ Tag(0x0072, 0x0066),
"Selector LO Value", "SelectorLOValue", "LO", "1-n" },
+ { Tag(0x0072, 0x0067),
+ "Selector OF Value", "SelectorOFValue", "OF", "1" },
{ Tag(0x0072, 0x0068),
"Selector LT Value", "SelectorLTValue", "LT", "1" },
+ { Tag(0x0072, 0x0069),
+ "Selector OW Value", "SelectorOWValue", "OW", "1" },
{ Tag(0x0072, 0x006a),
"Selector PN Value", "SelectorPNValue", "PN", "1-n" },
+ { Tag(0x0072, 0x006b),
+ "Selector TM Value", "SelectorTMValue", "TM", "1-n" },
{ Tag(0x0072, 0x006c),
"Selector SH Value", "SelectorSHValue", "SH", "1-n" },
+ { Tag(0x0072, 0x006d),
+ "Selector UN Value", "SelectorUNValue", "UN", "1" },
{ Tag(0x0072, 0x006e),
"Selector ST Value", "SelectorSTValue", "ST", "1" },
+ { Tag(0x0072, 0x006f),
+ "Selector UC Value", "SelectorUCValue", "UC", "1-n" },
{ Tag(0x0072, 0x0070),
"Selector UT Value", "SelectorUTValue", "UT", "1" },
+ { Tag(0x0072, 0x0071),
+ "Selector UR Value", "SelectorURValue", "UR", "1" },
{ Tag(0x0072, 0x0072),
"Selector DS Value", "SelectorDSValue", "DS", "1-n" },
+ { Tag(0x0072, 0x0073),
+ "Selector OD Value", "SelectorODValue", "OD", "1" },
{ Tag(0x0072, 0x0074),
"Selector FD Value", "SelectorFDValue", "FD", "1-n" },
+ { Tag(0x0072, 0x0075),
+ "Selector OL Value", "SelectorOLValue", "OL", "1" },
{ Tag(0x0072, 0x0076),
"Selector FL Value", "SelectorFLValue", "FL", "1-n" },
{ Tag(0x0072, 0x0078),
@@ -6240,6 +6278,52 @@ ElementsDictionary create_public_dictionary()
"Referenced Texture Sequence", "ReferencedTextureSequence", "SQ", "1" },
{ Tag(0x0080, 0x0013),
"Referenced Surface Data Sequence", "ReferencedSurfaceDataSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0001),
+ "Assessment Summary", "AssessmentSummary", "CS", "1" },
+ { Tag(0x0082, 0x0003),
+ "Assessment Summary Description", "AssessmentSummaryDescription", "UT", "1" },
+ { Tag(0x0082, 0x0004),
+ "Assessed SOP Instance Sequence", "AssessedSOPInstanceSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0005),
+ "Referenced Comparison SOP Instance Sequence", "ReferencedComparisonSOPInstanceSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0006),
+ "Number of Assessment Observations", "NumberOfAssessmentObservations", "UL", "1" },
+ { Tag(0x0082, 0x0007),
+ "Assessment Observations Sequence", "AssessmentObservationsSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0008),
+ "Observation Significance", "ObservationSignificance", "CS", "1" },
+ { Tag(0x0082, 0x000a),
+ "Observation Description", "ObservationDescription", "UT", "1" },
+ { Tag(0x0082, 0x000c),
+ "Structured Constraint Observation Sequence", "StructuredContraintObservationSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0010),
+ "Assessed Attribute Value Sequence", "AssessedAttributeValueSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0016),
+ "Assessment Set ID", "AssessmentSetID", "LO", "1" },
+ { Tag(0x0082, 0x0017),
+ "Assessment Requester Sequence", "AssessmentRequesterSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0018),
+ "Selector Attribute Name", "SelectorAttributeName", "LO", "1" },
+ { Tag(0x0082, 0x0019),
+ "Selector Attribute Keyword", "SelectorAttributeKeyword", "LO", "1" },
+ { Tag(0x0082, 0x0021),
+ "Assessment Type Code Sequence", "AssessmentTypeCodeSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0022),
+ "Observation Basis Code Sequence", "ObservationBasisCodeSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0023),
+ "Assessment Label", "AssessmentLabel", "LO", "1" },
+ { Tag(0x0082, 0x0032),
+ "Constraint Type", "ConstraintType", "CS", "1" },
+ { Tag(0x0082, 0x0033),
+ "Specification Selection Guidance", "SpecificationSelectionGuidance", "UT", "1" },
+ { Tag(0x0082, 0x0034),
+ "Constraint Value Sequence", "ConstraintValueSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0035),
+ "Recommended Default Value Sequence", "RecommendedDefaultValueSequence", "SQ", "1" },
+ { Tag(0x0082, 0x0036),
+ "Constraint Violation Significance", "ConstraintViolationSignificance", "CS", "1" },
+ { Tag(0x0082, 0x0037),
+ "Constraint Violation Condition", "ConstraintViolationCondition", "UT", "1" },
{ Tag(0x0088, 0x0130),
"Storage Media File-set ID", "StorageMediaFileSetID", "SH", "1" },
{ Tag(0x0088, 0x0140),
@@ -7317,6 +7401,18 @@ ElementsDictionary create_public_dictionary()
"Gantry Pitch Rotation Direction", "GantryPitchRotationDirection", "CS", "1" },
{ Tag(0x300a, 0x014e),
"Gantry Pitch Angle Tolerance", "GantryPitchAngleTolerance", "FL", "1" },
+ { Tag(0x300a, 0x0150),
+ "Fixation Eye", "FixationEye", "CS", "1" },
+ { Tag(0x300a, 0x0151),
+ "Chair Head Frame Position", "ChairHeadFramePosition", "DS", "1" },
+ { Tag(0x300a, 0x0152),
+ "Head Fixation Angle Tolerance", "HeadFixationAngleTolerance", "DS", "1" },
+ { Tag(0x300a, 0x0153),
+ "Chair Head Frame Position Tolerance", "ChairHeadFramePositionTolerance", "DS", "1" },
+ { Tag(0x300a, 0x0154),
+ "Fixation Light Azimuthal Angle Tolerance", "FixationLightAzimuthalAngleTolerance", "DS", "1" },
+ { Tag(0x300a, 0x0155),
+ "Fixation Light Polar Angle Tolerance", "FixationLightPolarAngleTolerance", "DS", "1" },
{ Tag(0x300a, 0x0180),
"Patient Setup Sequence", "PatientSetupSequence", "SQ", "1" },
{ Tag(0x300a, 0x0182),
@@ -8304,6 +8400,4065 @@ ElementsDictionary create_public_dictionary()
return public_dictionary;
}
+std::map<std::string, odil::Tag> create_public_tags()
+{
+
+ RawElementsDictionaryEntry raw_entries[] = {
+ { Tag(0x0000, 0x0000),
+ "Command Group Length", "CommandGroupLength", "UL", "1" }, { Tag(0x0000, 0x0002),
+ "Affected SOP Class UID", "AffectedSOPClassUID", "UI", "1" }, { Tag(0x0000, 0x0003),
+ "Requested SOP Class UID", "RequestedSOPClassUID", "UI", "1" }, { Tag(0x0000, 0x0100),
+ "Command Field", "CommandField", "US", "1" }, { Tag(0x0000, 0x0110),
+ "Message ID", "MessageID", "US", "1" }, { Tag(0x0000, 0x0120),
+ "Message ID Being Responded To", "MessageIDBeingRespondedTo", "US", "1" }, { Tag(0x0000, 0x0600),
+ "Move Destination", "MoveDestination", "AE", "1" }, { Tag(0x0000, 0x0700),
+ "Priority", "Priority", "US", "1" }, { Tag(0x0000, 0x0800),
+ "Command Data Set Type", "CommandDataSetType", "US", "1" }, { Tag(0x0000, 0x0900),
+ "Status", "Status", "US", "1" }, { Tag(0x0000, 0x0901),
+ "Offending Element", "OffendingElement", "AT", "1-n" }, { Tag(0x0000, 0x0902),
+ "Error Comment", "ErrorComment", "LO", "1" }, { Tag(0x0000, 0x0903),
+ "Error ID", "ErrorID", "US", "1" }, { Tag(0x0000, 0x1000),
+ "Affected SOP Instance UID", "AffectedSOPInstanceUID", "UI", "1" }, { Tag(0x0000, 0x1001),
+ "Requested SOP Instance UID", "RequestedSOPInstanceUID", "UI", "1" }, { Tag(0x0000, 0x1002),
+ "Event Type ID", "EventTypeID", "US", "1" }, { Tag(0x0000, 0x1005),
+ "Attribute Identifier List", "AttributeIdentifierList", "AT", "1-n" }, { Tag(0x0000, 0x1008),
+ "Action Type ID", "ActionTypeID", "US", "1" }, { Tag(0x0000, 0x1020),
+ "Number of Remaining Sub-operations", "NumberOfRemainingSuboperations", "US", "1" }, { Tag(0x0000, 0x1021),
+ "Number of Completed Sub-operations", "NumberOfCompletedSuboperations", "US", "1" }, { Tag(0x0000, 0x1022),
+ "Number of Failed Sub-operations", "NumberOfFailedSuboperations", "US", "1" }, { Tag(0x0000, 0x1023),
+ "Number of Warning Sub-operations", "NumberOfWarningSuboperations", "US", "1" }, { Tag(0x0000, 0x1030),
+ "Move Originator Application Entity Title", "MoveOriginatorApplicationEntityTitle", "AE", "1" }, { Tag(0x0000, 0x1031),
+ "Move Originator Message ID", "MoveOriginatorMessageID", "US", "1" }, { Tag(0x0002, 0x0000),
+ "File Meta Information Group Length", "FileMetaInformationGroupLength", "UL", "1" }, { Tag(0x0002, 0x0001),
+ "File Meta Information Version", "FileMetaInformationVersion", "OB", "1" }, { Tag(0x0002, 0x0002),
+ "Media Storage SOP Class UID", "MediaStorageSOPClassUID", "UI", "1" }, { Tag(0x0002, 0x0003),
+ "Media Storage SOP Instance UID", "MediaStorageSOPInstanceUID", "UI", "1" }, { Tag(0x0002, 0x0010),
+ "Transfer Syntax UID", "TransferSyntaxUID", "UI", "1" }, { Tag(0x0002, 0x0012),
+ "Implementation Class UID", "ImplementationClassUID", "UI", "1" }, { Tag(0x0002, 0x0013),
+ "Implementation Version Name", "ImplementationVersionName", "SH", "1" }, { Tag(0x0002, 0x0016),
+ "Source Application Entity Title", "SourceApplicationEntityTitle", "AE", "1" }, { Tag(0x0002, 0x0017),
+ "Sending Application Entity Title", "SendingApplicationEntityTitle", "AE", "1" }, { Tag(0x0002, 0x0018),
+ "Receiving Application Entity Title", "ReceivingApplicationEntityTitle", "AE", "1" }, { Tag(0x0002, 0x0100),
+ "Private Information Creator UID", "PrivateInformationCreatorUID", "UI", "1" }, { Tag(0x0002, 0x0102),
+ "Private Information", "PrivateInformation", "OB", "1" }, { Tag(0x0004, 0x1130),
+ "File-set ID", "FileSetID", "CS", "1" }, { Tag(0x0004, 0x1141),
+ "File-set Descriptor File ID", "FileSetDescriptorFileID", "CS", "1-8" }, { Tag(0x0004, 0x1142),
+ "Specific Character Set of File-set Descriptor File", "SpecificCharacterSetOfFileSetDescriptorFile", "CS", "1" }, { Tag(0x0004, 0x1200),
+ "Offset of the First Directory Record of the Root Directory Entity", "OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity", "UL", "1" }, { Tag(0x0004, 0x1202),
+ "Offset of the Last Directory Record of the Root Directory Entity", "OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity", "UL", "1" }, { Tag(0x0004, 0x1212),
+ "File-set Consistency Flag", "FileSetConsistencyFlag", "US", "1" }, { Tag(0x0004, 0x1220),
+ "Directory Record Sequence", "DirectoryRecordSequence", "SQ", "1" }, { Tag(0x0004, 0x1400),
+ "Offset of the Next Directory Record", "OffsetOfTheNextDirectoryRecord", "UL", "1" }, { Tag(0x0004, 0x1410),
+ "Record In-use Flag", "RecordInUseFlag", "US", "1" }, { Tag(0x0004, 0x1420),
+ "Offset of Referenced Lower-Level Directory Entity", "OffsetOfReferencedLowerLevelDirectoryEntity", "UL", "1" }, { Tag(0x0004, 0x1430),
+ "Directory Record Type", "DirectoryRecordType", "CS", "1" }, { Tag(0x0004, 0x1432),
+ "Private Record UID", "PrivateRecordUID", "UI", "1" }, { Tag(0x0004, 0x1500),
+ "Referenced File ID", "ReferencedFileID", "CS", "1-8" }, { Tag(0x0004, 0x1504),
+ "MRDR Directory Record Offset", "MRDRDirectoryRecordOffset", "UL", "1" }, { Tag(0x0004, 0x1510),
+ "Referenced SOP Class UID in File", "ReferencedSOPClassUIDInFile", "UI", "1" }, { Tag(0x0004, 0x1511),
+ "Referenced SOP Instance UID in File", "ReferencedSOPInstanceUIDInFile", "UI", "1" }, { Tag(0x0004, 0x1512),
+ "Referenced Transfer Syntax UID in File", "ReferencedTransferSyntaxUIDInFile", "UI", "1" }, { Tag(0x0004, 0x151a),
+ "Referenced Related General SOP Class UID in File", "ReferencedRelatedGeneralSOPClassUIDInFile", "UI", "1-n" }, { Tag(0x0004, 0x1600),
+ "Number of References", "NumberOfReferences", "UL", "1" }, { Tag(0x0008, 0x0001),
+ "Length to End", "LengthToEnd", "UL", "1" }, { Tag(0x0008, 0x0005),
+ "Specific Character Set", "SpecificCharacterSet", "CS", "1-n" }, { Tag(0x0008, 0x0006),
+ "Language Code Sequence", "LanguageCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x0008),
+ "Image Type", "ImageType", "CS", "2-n" }, { Tag(0x0008, 0x0010),
+ "Recognition Code", "RecognitionCode", "SH", "1" }, { Tag(0x0008, 0x0012),
+ "Instance Creation Date", "InstanceCreationDate", "DA", "1" }, { Tag(0x0008, 0x0013),
+ "Instance Creation Time", "InstanceCreationTime", "TM", "1" }, { Tag(0x0008, 0x0014),
+ "Instance Creator UID", "InstanceCreatorUID", "UI", "1" }, { Tag(0x0008, 0x0015),
+ "Instance Coercion DateTime", "InstanceCoercionDateTime", "DT", "1" }, { Tag(0x0008, 0x0016),
+ "SOP Class UID", "SOPClassUID", "UI", "1" }, { Tag(0x0008, 0x0018),
+ "SOP Instance UID", "SOPInstanceUID", "UI", "1" }, { Tag(0x0008, 0x001a),
+ "Related General SOP Class UID", "RelatedGeneralSOPClassUID", "UI", "1-n" }, { Tag(0x0008, 0x001b),
+ "Original Specialized SOP Class UID", "OriginalSpecializedSOPClassUID", "UI", "1" }, { Tag(0x0008, 0x0020),
+ "Study Date", "StudyDate", "DA", "1" }, { Tag(0x0008, 0x0021),
+ "Series Date", "SeriesDate", "DA", "1" }, { Tag(0x0008, 0x0022),
+ "Acquisition Date", "AcquisitionDate", "DA", "1" }, { Tag(0x0008, 0x0023),
+ "Content Date", "ContentDate", "DA", "1" }, { Tag(0x0008, 0x0024),
+ "Overlay Date", "OverlayDate", "DA", "1" }, { Tag(0x0008, 0x0025),
+ "Curve Date", "CurveDate", "DA", "1" }, { Tag(0x0008, 0x002a),
+ "Acquisition DateTime", "AcquisitionDateTime", "DT", "1" }, { Tag(0x0008, 0x0030),
+ "Study Time", "StudyTime", "TM", "1" }, { Tag(0x0008, 0x0031),
+ "Series Time", "SeriesTime", "TM", "1" }, { Tag(0x0008, 0x0032),
+ "Acquisition Time", "AcquisitionTime", "TM", "1" }, { Tag(0x0008, 0x0033),
+ "Content Time", "ContentTime", "TM", "1" }, { Tag(0x0008, 0x0034),
+ "Overlay Time", "OverlayTime", "TM", "1" }, { Tag(0x0008, 0x0035),
+ "Curve Time", "CurveTime", "TM", "1" }, { Tag(0x0008, 0x0040),
+ "Data Set Type", "DataSetType", "US", "1" }, { Tag(0x0008, 0x0041),
+ "Data Set Subtype", "DataSetSubtype", "LO", "1" }, { Tag(0x0008, 0x0042),
+ "Nuclear Medicine Series Type", "NuclearMedicineSeriesType", "CS", "1" }, { Tag(0x0008, 0x0050),
+ "Accession Number", "AccessionNumber", "SH", "1" }, { Tag(0x0008, 0x0051),
+ "Issuer of Accession Number Sequence", "IssuerOfAccessionNumberSequence", "SQ", "1" }, { Tag(0x0008, 0x0052),
+ "Query/Retrieve Level", "QueryRetrieveLevel", "CS", "1" }, { Tag(0x0008, 0x0053),
+ "Query/Retrieve View", "QueryRetrieveView", "CS", "1" }, { Tag(0x0008, 0x0054),
+ "Retrieve AE Title", "RetrieveAETitle", "AE", "1-n" }, { Tag(0x0008, 0x0055),
+ "Station AE Title", "StationAETitle", "AE", "1" }, { Tag(0x0008, 0x0056),
+ "Instance Availability", "InstanceAvailability", "CS", "1" }, { Tag(0x0008, 0x0058),
+ "Failed SOP Instance UID List", "FailedSOPInstanceUIDList", "UI", "1-n" }, { Tag(0x0008, 0x0060),
+ "Modality", "Modality", "CS", "1" }, { Tag(0x0008, 0x0061),
+ "Modalities in Study", "ModalitiesInStudy", "CS", "1-n" }, { Tag(0x0008, 0x0062),
+ "SOP Classes in Study", "SOPClassesInStudy", "UI", "1-n" }, { Tag(0x0008, 0x0064),
+ "Conversion Type", "ConversionType", "CS", "1" }, { Tag(0x0008, 0x0068),
+ "Presentation Intent Type", "PresentationIntentType", "CS", "1" }, { Tag(0x0008, 0x0070),
+ "Manufacturer", "Manufacturer", "LO", "1" }, { Tag(0x0008, 0x0080),
+ "Institution Name", "InstitutionName", "LO", "1" }, { Tag(0x0008, 0x0081),
+ "Institution Address", "InstitutionAddress", "ST", "1" }, { Tag(0x0008, 0x0082),
+ "Institution Code Sequence", "InstitutionCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x0090),
+ "Referring Physician's Name", "ReferringPhysicianName", "PN", "1" }, { Tag(0x0008, 0x0092),
+ "Referring Physician's Address", "ReferringPhysicianAddress", "ST", "1" }, { Tag(0x0008, 0x0094),
+ "Referring Physician's Telephone Numbers", "ReferringPhysicianTelephoneNumbers", "SH", "1-n" }, { Tag(0x0008, 0x0096),
+ "Referring Physician Identification Sequence", "ReferringPhysicianIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x009c),
+ "Consulting Physician's Name", "ConsultingPhysicianName", "PN", "1-n" }, { Tag(0x0008, 0x009d),
+ "Consulting Physician Identification Sequence", "ConsultingPhysicianIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x0100),
+ "Code Value", "CodeValue", "SH", "1" }, { Tag(0x0008, 0x0101),
+ "Extended Code Value", "ExtendedCodeValue", "LO", "1" }, { Tag(0x0008, 0x0102),
+ "Coding Scheme Designator", "CodingSchemeDesignator", "SH", "1" }, { Tag(0x0008, 0x0103),
+ "Coding Scheme Version", "CodingSchemeVersion", "SH", "1" }, { Tag(0x0008, 0x0104),
+ "Code Meaning", "CodeMeaning", "LO", "1" }, { Tag(0x0008, 0x0105),
+ "Mapping Resource", "MappingResource", "CS", "1" }, { Tag(0x0008, 0x0106),
+ "Context Group Version", "ContextGroupVersion", "DT", "1" }, { Tag(0x0008, 0x0107),
+ "Context Group Local Version", "ContextGroupLocalVersion", "DT", "1" }, { Tag(0x0008, 0x0108),
+ "Extended Code Meaning", "ExtendedCodeMeaning", "LT", "1" }, { Tag(0x0008, 0x010b),
+ "Context Group Extension Flag", "ContextGroupExtensionFlag", "CS", "1" }, { Tag(0x0008, 0x010c),
+ "Coding Scheme UID", "CodingSchemeUID", "UI", "1" }, { Tag(0x0008, 0x010d),
+ "Context Group Extension Creator UID", "ContextGroupExtensionCreatorUID", "UI", "1" }, { Tag(0x0008, 0x010f),
+ "Context Identifier", "ContextIdentifier", "CS", "1" }, { Tag(0x0008, 0x0110),
+ "Coding Scheme Identification Sequence", "CodingSchemeIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x0112),
+ "Coding Scheme Registry", "CodingSchemeRegistry", "LO", "1" }, { Tag(0x0008, 0x0114),
+ "Coding Scheme External ID", "CodingSchemeExternalID", "ST", "1" }, { Tag(0x0008, 0x0115),
+ "Coding Scheme Name", "CodingSchemeName", "ST", "1" }, { Tag(0x0008, 0x0116),
+ "Coding Scheme Responsible Organization", "CodingSchemeResponsibleOrganization", "ST", "1" }, { Tag(0x0008, 0x0117),
+ "Context UID", "ContextUID", "UI", "1" }, { Tag(0x0008, 0x0118),
+ "Mapping Resource UID", "MappingResourceUID", "UI", "1" }, { Tag(0x0008, 0x0119),
+ "Long Code Value", "LongCodeValue", "UC", "1" }, { Tag(0x0008, 0x0120),
+ "URN Code Value", "URNCodeValue", "UR", "1" }, { Tag(0x0008, 0x0121),
+ "Equivalent Code Sequence", "EquivalentCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x0201),
+ "Timezone Offset From UTC", "TimezoneOffsetFromUTC", "SH", "1" }, { Tag(0x0008, 0x0300),
+ "Private Data Element Characteristics Sequence", "PrivateDataElementCharacteristicsSequence", "SQ", "1" }, { Tag(0x0008, 0x0301),
+ "Private Group Reference", "PrivateGroupReference", "US", "1" }, { Tag(0x0008, 0x0302),
+ "Private Creator Reference", "PrivateCreatorReference", "LO", "1" }, { Tag(0x0008, 0x0303),
+ "Block Identifying Information Status", "BlockIdentifyingInformationStatus", "CS", "1" }, { Tag(0x0008, 0x0304),
+ "Nonidentifying Private Elements", "NonidentifyingPrivateElements", "US", "1-n" }, { Tag(0x0008, 0x0306),
+ "Identifying Private Elements", "IdentifyingPrivateElements", "US", "1-n" }, { Tag(0x0008, 0x0305),
+ "Deidentification Action Sequence", "DeidentificationActionSequence", "SQ", "1" }, { Tag(0x0008, 0x0307),
+ "Deidentification Action", "DeidentificationAction", "CS", "1" }, { Tag(0x0008, 0x1000),
+ "Network ID", "NetworkID", "AE", "1" }, { Tag(0x0008, 0x1010),
+ "Station Name", "StationName", "SH", "1" }, { Tag(0x0008, 0x1030),
+ "Study Description", "StudyDescription", "LO", "1" }, { Tag(0x0008, 0x1032),
+ "Procedure Code Sequence", "ProcedureCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x103e),
+ "Series Description", "SeriesDescription", "LO", "1" }, { Tag(0x0008, 0x103f),
+ "Series Description Code Sequence", "SeriesDescriptionCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x1040),
+ "Institutional Department Name", "InstitutionalDepartmentName", "LO", "1" }, { Tag(0x0008, 0x1048),
+ "Physician(s) of Record", "PhysiciansOfRecord", "PN", "1-n" }, { Tag(0x0008, 0x1049),
+ "Physician(s) of Record Identification Sequence", "PhysiciansOfRecordIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x1050),
+ "Performing Physician's Name", "PerformingPhysicianName", "PN", "1-n" }, { Tag(0x0008, 0x1052),
+ "Performing Physician Identification Sequence", "PerformingPhysicianIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x1060),
+ "Name of Physician(s) Reading Study", "NameOfPhysiciansReadingStudy", "PN", "1-n" }, { Tag(0x0008, 0x1062),
+ "Physician(s) Reading Study Identification Sequence", "PhysiciansReadingStudyIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x1070),
+ "Operators' Name", "OperatorsName", "PN", "1-n" }, { Tag(0x0008, 0x1072),
+ "Operator Identification Sequence", "OperatorIdentificationSequence", "SQ", "1" }, { Tag(0x0008, 0x1080),
+ "Admitting Diagnoses Description", "AdmittingDiagnosesDescription", "LO", "1-n" }, { Tag(0x0008, 0x1084),
+ "Admitting Diagnoses Code Sequence", "AdmittingDiagnosesCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x1090),
+ "Manufacturer's Model Name", "ManufacturerModelName", "LO", "1" }, { Tag(0x0008, 0x1100),
+ "Referenced Results Sequence", "ReferencedResultsSequence", "SQ", "1" }, { Tag(0x0008, 0x1110),
+ "Referenced Study Sequence", "ReferencedStudySequence", "SQ", "1" }, { Tag(0x0008, 0x1111),
+ "Referenced Performed Procedure Step Sequence", "ReferencedPerformedProcedureStepSequence", "SQ", "1" }, { Tag(0x0008, 0x1115),
+ "Referenced Series Sequence", "ReferencedSeriesSequence", "SQ", "1" }, { Tag(0x0008, 0x1120),
+ "Referenced Patient Sequence", "ReferencedPatientSequence", "SQ", "1" }, { Tag(0x0008, 0x1125),
+ "Referenced Visit Sequence", "ReferencedVisitSequence", "SQ", "1" }, { Tag(0x0008, 0x1130),
+ "Referenced Overlay Sequence", "ReferencedOverlaySequence", "SQ", "1" }, { Tag(0x0008, 0x1134),
+ "Referenced Stereometric Instance Sequence", "ReferencedStereometricInstanceSequence", "SQ", "1" }, { Tag(0x0008, 0x113a),
+ "Referenced Waveform Sequence", "ReferencedWaveformSequence", "SQ", "1" }, { Tag(0x0008, 0x1140),
+ "Referenced Image Sequence", "ReferencedImageSequence", "SQ", "1" }, { Tag(0x0008, 0x1145),
+ "Referenced Curve Sequence", "ReferencedCurveSequence", "SQ", "1" }, { Tag(0x0008, 0x114a),
+ "Referenced Instance Sequence", "ReferencedInstanceSequence", "SQ", "1" }, { Tag(0x0008, 0x114b),
+ "Referenced Real World Value Mapping Instance Sequence", "ReferencedRealWorldValueMappingInstanceSequence", "SQ", "1" }, { Tag(0x0008, 0x1150),
+ "Referenced SOP Class UID", "ReferencedSOPClassUID", "UI", "1" }, { Tag(0x0008, 0x1155),
+ "Referenced SOP Instance UID", "ReferencedSOPInstanceUID", "UI", "1" }, { Tag(0x0008, 0x115a),
+ "SOP Classes Supported", "SOPClassesSupported", "UI", "1-n" }, { Tag(0x0008, 0x1160),
+ "Referenced Frame Number", "ReferencedFrameNumber", "IS", "1-n" }, { Tag(0x0008, 0x1161),
+ "Simple Frame List", "SimpleFrameList", "UL", "1-n" }, { Tag(0x0008, 0x1162),
+ "Calculated Frame List", "CalculatedFrameList", "UL", "3-3n" }, { Tag(0x0008, 0x1163),
+ "Time Range", "TimeRange", "FD", "2" }, { Tag(0x0008, 0x1164),
+ "Frame Extraction Sequence", "FrameExtractionSequence", "SQ", "1" }, { Tag(0x0008, 0x1167),
+ "Multi-frame Source SOP Instance UID", "MultiFrameSourceSOPInstanceUID", "UI", "1" }, { Tag(0x0008, 0x1190),
+ "Retrieve URL", "RetrieveURL", "UR", "1" }, { Tag(0x0008, 0x1195),
+ "Transaction UID", "TransactionUID", "UI", "1" }, { Tag(0x0008, 0x1196),
+ "Warning Reason", "WarningReason", "US", "1" }, { Tag(0x0008, 0x1197),
+ "Failure Reason", "FailureReason", "US", "1" }, { Tag(0x0008, 0x1198),
+ "Failed SOP Sequence", "FailedSOPSequence", "SQ", "1" }, { Tag(0x0008, 0x1199),
+ "Referenced SOP Sequence", "ReferencedSOPSequence", "SQ", "1" }, { Tag(0x0008, 0x119a),
+ "Other Failures Sequence", "OtherFailuresSequence", "SQ", "1" }, { Tag(0x0008, 0x1200),
+ "Studies Containing Other Referenced Instances Sequence", "StudiesContainingOtherReferencedInstancesSequence", "SQ", "1" }, { Tag(0x0008, 0x1250),
+ "Related Series Sequence", "RelatedSeriesSequence", "SQ", "1" }, { Tag(0x0008, 0x2110),
+ "Lossy Image Compression (Retired)", "LossyImageCompressionRetired", "CS", "1" }, { Tag(0x0008, 0x2111),
+ "Derivation Description", "DerivationDescription", "ST", "1" }, { Tag(0x0008, 0x2112),
+ "Source Image Sequence", "SourceImageSequence", "SQ", "1" }, { Tag(0x0008, 0x2120),
+ "Stage Name", "StageName", "SH", "1" }, { Tag(0x0008, 0x2122),
+ "Stage Number", "StageNumber", "IS", "1" }, { Tag(0x0008, 0x2124),
+ "Number of Stages", "NumberOfStages", "IS", "1" }, { Tag(0x0008, 0x2127),
+ "View Name", "ViewName", "SH", "1" }, { Tag(0x0008, 0x2128),
+ "View Number", "ViewNumber", "IS", "1" }, { Tag(0x0008, 0x2129),
+ "Number of Event Timers", "NumberOfEventTimers", "IS", "1" }, { Tag(0x0008, 0x212a),
+ "Number of Views in Stage", "NumberOfViewsInStage", "IS", "1" }, { Tag(0x0008, 0x2130),
+ "Event Elapsed Time(s)", "EventElapsedTimes", "DS", "1-n" }, { Tag(0x0008, 0x2132),
+ "Event Timer Name(s)", "EventTimerNames", "LO", "1-n" }, { Tag(0x0008, 0x2133),
+ "Event Timer Sequence", "EventTimerSequence", "SQ", "1" }, { Tag(0x0008, 0x2134),
+ "Event Time Offset", "EventTimeOffset", "FD", "1" }, { Tag(0x0008, 0x2135),
+ "Event Code Sequence", "EventCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x2142),
+ "Start Trim", "StartTrim", "IS", "1" }, { Tag(0x0008, 0x2143),
+ "Stop Trim", "StopTrim", "IS", "1" }, { Tag(0x0008, 0x2144),
+ "Recommended Display Frame Rate", "RecommendedDisplayFrameRate", "IS", "1" }, { Tag(0x0008, 0x2200),
+ "Transducer Position", "TransducerPosition", "CS", "1" }, { Tag(0x0008, 0x2204),
+ "Transducer Orientation", "TransducerOrientation", "CS", "1" }, { Tag(0x0008, 0x2208),
+ "Anatomic Structure", "AnatomicStructure", "CS", "1" }, { Tag(0x0008, 0x2218),
+ "Anatomic Region Sequence", "AnatomicRegionSequence", "SQ", "1" }, { Tag(0x0008, 0x2220),
+ "Anatomic Region Modifier Sequence", "AnatomicRegionModifierSequence", "SQ", "1" }, { Tag(0x0008, 0x2228),
+ "Primary Anatomic Structure Sequence", "PrimaryAnatomicStructureSequence", "SQ", "1" }, { Tag(0x0008, 0x2229),
+ "Anatomic Structure, Space or Region Sequence", "AnatomicStructureSpaceOrRegionSequence", "SQ", "1" }, { Tag(0x0008, 0x2230),
+ "Primary Anatomic Structure Modifier Sequence", "PrimaryAnatomicStructureModifierSequence", "SQ", "1" }, { Tag(0x0008, 0x2240),
+ "Transducer Position Sequence", "TransducerPositionSequence", "SQ", "1" }, { Tag(0x0008, 0x2242),
+ "Transducer Position Modifier Sequence", "TransducerPositionModifierSequence", "SQ", "1" }, { Tag(0x0008, 0x2244),
+ "Transducer Orientation Sequence", "TransducerOrientationSequence", "SQ", "1" }, { Tag(0x0008, 0x2246),
+ "Transducer Orientation Modifier Sequence", "TransducerOrientationModifierSequence", "SQ", "1" }, { Tag(0x0008, 0x2251),
+ "Anatomic Structure Space Or Region Code Sequence (Trial)", "AnatomicStructureSpaceOrRegionCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x2253),
+ "Anatomic Portal Of Entrance Code Sequence (Trial)", "AnatomicPortalOfEntranceCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x2255),
+ "Anatomic Approach Direction Code Sequence (Trial)", "AnatomicApproachDirectionCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x2256),
+ "Anatomic Perspective Description (Trial)", "AnatomicPerspectiveDescriptionTrial", "ST", "1" }, { Tag(0x0008, 0x2257),
+ "Anatomic Perspective Code Sequence (Trial)", "AnatomicPerspectiveCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x2258),
+ "Anatomic Location Of Examining Instrument Description (Trial)", "AnatomicLocationOfExaminingInstrumentDescriptionTrial", "ST", "1" }, { Tag(0x0008, 0x2259),
+ "Anatomic Location Of Examining Instrument Code Sequence (Trial)", "AnatomicLocationOfExaminingInstrumentCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x225a),
+ "Anatomic Structure Space Or Region Modifier Code Sequence (Trial)", "AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x225c),
+ "On Axis Background Anatomic Structure Code Sequence (Trial)", "OnAxisBackgroundAnatomicStructureCodeSequenceTrial", "SQ", "1" }, { Tag(0x0008, 0x3001),
+ "Alternate Representation Sequence", "AlternateRepresentationSequence", "SQ", "1" }, { Tag(0x0008, 0x3010),
+ "Irradiation Event UID", "IrradiationEventUID", "UI", "1-n" }, { Tag(0x0008, 0x3011),
+ "Source Irradiation Event Sequence", "SourceIrradiationEventSequence", "SQ", "1" }, { Tag(0x0008, 0x3012),
+ "Radiopharmaceutical Administration Event UID", "RadiopharmaceuticalAdministrationEventUID", "UI", "1" }, { Tag(0x0008, 0x4000),
+ "Identifying Comments", "IdentifyingComments", "LT", "1" }, { Tag(0x0008, 0x9007),
+ "Frame Type", "FrameType", "CS", "4" }, { Tag(0x0008, 0x9092),
+ "Referenced Image Evidence Sequence", "ReferencedImageEvidenceSequence", "SQ", "1" }, { Tag(0x0008, 0x9121),
+ "Referenced Raw Data Sequence", "ReferencedRawDataSequence", "SQ", "1" }, { Tag(0x0008, 0x9123),
+ "Creator-Version UID", "CreatorVersionUID", "UI", "1" }, { Tag(0x0008, 0x9124),
+ "Derivation Image Sequence", "DerivationImageSequence", "SQ", "1" }, { Tag(0x0008, 0x9154),
+ "Source Image Evidence Sequence", "SourceImageEvidenceSequence", "SQ", "1" }, { Tag(0x0008, 0x9205),
+ "Pixel Presentation", "PixelPresentation", "CS", "1" }, { Tag(0x0008, 0x9206),
+ "Volumetric Properties", "VolumetricProperties", "CS", "1" }, { Tag(0x0008, 0x9207),
+ "Volume Based Calculation Technique", "VolumeBasedCalculationTechnique", "CS", "1" }, { Tag(0x0008, 0x9208),
+ "Complex Image Component", "ComplexImageComponent", "CS", "1" }, { Tag(0x0008, 0x9209),
+ "Acquisition Contrast", "AcquisitionContrast", "CS", "1" }, { Tag(0x0008, 0x9215),
+ "Derivation Code Sequence", "DerivationCodeSequence", "SQ", "1" }, { Tag(0x0008, 0x9237),
+ "Referenced Presentation State Sequence", "ReferencedPresentationStateSequence", "SQ", "1" }, { Tag(0x0008, 0x9410),
+ "Referenced Other Plane Sequence", "ReferencedOtherPlaneSequence", "SQ", "1" }, { Tag(0x0008, 0x9458),
+ "Frame Display Sequence", "FrameDisplaySequence", "SQ", "1" }, { Tag(0x0008, 0x9459),
+ "Recommended Display Frame Rate in Float", "RecommendedDisplayFrameRateInFloat", "FL", "1" }, { Tag(0x0008, 0x9460),
+ "Skip Frame Range Flag", "SkipFrameRangeFlag", "CS", "1" }, { Tag(0x0010, 0x0010),
+ "Patient's Name", "PatientName", "PN", "1" }, { Tag(0x0010, 0x0020),
+ "Patient ID", "PatientID", "LO", "1" }, { Tag(0x0010, 0x0021),
+ "Issuer of Patient ID", "IssuerOfPatientID", "LO", "1" }, { Tag(0x0010, 0x0022),
+ "Type of Patient ID", "TypeOfPatientID", "CS", "1" }, { Tag(0x0010, 0x0024),
+ "Issuer of Patient ID Qualifiers Sequence", "IssuerOfPatientIDQualifiersSequence", "SQ", "1" }, { Tag(0x0010, 0x0026),
+ "Source Patient Group Identification Sequence", "SourcePatientGroupIdentificationSequence", "SQ", "1" }, { Tag(0x0010, 0x0027),
+ "Group of Patients Identification Sequence", "GroupOfPatientsIdentificationSequence", "SQ", "1" }, { Tag(0x0010, 0x0028),
+ "Subject Relative Position in Image", "SubjectRelativePositionInImage", "US", "3" }, { Tag(0x0010, 0x0030),
+ "Patient's Birth Date", "PatientBirthDate", "DA", "1" }, { Tag(0x0010, 0x0032),
+ "Patient's Birth Time", "PatientBirthTime", "TM", "1" }, { Tag(0x0010, 0x0033),
+ "Patient's Birth Date in Alternative Calendar", "PatientBirthDateInAlternativeCalendar", "LO", "1" }, { Tag(0x0010, 0x0034),
+ "Patient's Death Date in Alternative Calendar", "PatientDeathDateInAlternativeCalendar", "LO", "1" }, { Tag(0x0010, 0x0035),
+ "Patient's Alternative Calendar", "PatientAlternativeCalendar", "CS", "1" }, { Tag(0x0010, 0x0040),
+ "Patient's Sex", "PatientSex", "CS", "1" }, { Tag(0x0010, 0x0050),
+ "Patient's Insurance Plan Code Sequence", "PatientInsurancePlanCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x0101),
+ "Patient's Primary Language Code Sequence", "PatientPrimaryLanguageCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x0102),
+ "Patient's Primary Language Modifier Code Sequence", "PatientPrimaryLanguageModifierCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x0200),
+ "Quality Control Subject", "QualityControlSubject", "CS", "1" }, { Tag(0x0010, 0x0201),
+ "Quality Control Subject Type Code Sequence", "QualityControlSubjectTypeCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x0212),
+ "Strain Description", "StrainDescription", "UC", "1" }, { Tag(0x0010, 0x0213),
+ "Strain Nomenclature", "StrainNomenclature", "LO", "1" }, { Tag(0x0010, 0x0214),
+ "Strain Stock Number", "StrainStockNumber", "LO", "1" }, { Tag(0x0010, 0x0215),
+ "Strain Source Registry Code Sequence", "StrainSourceRegistryCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x0216),
+ "Strain Stock Sequence", "StrainStockSequence", "SQ", "1" }, { Tag(0x0010, 0x0217),
+ "Strain Source", "StrainSource", "LO", "1" }, { Tag(0x0010, 0x0218),
+ "Strain Additional Information", "StrainAdditionalInformation", "UT", "1" }, { Tag(0x0010, 0x0219),
+ "Strain Code Sequence", "StrainCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x1000),
+ "Other Patient IDs", "OtherPatientIDs", "LO", "1-n" }, { Tag(0x0010, 0x1001),
+ "Other Patient Names", "OtherPatientNames", "PN", "1-n" }, { Tag(0x0010, 0x1002),
+ "Other Patient IDs Sequence", "OtherPatientIDsSequence", "SQ", "1" }, { Tag(0x0010, 0x1005),
+ "Patient's Birth Name", "PatientBirthName", "PN", "1" }, { Tag(0x0010, 0x1010),
+ "Patient's Age", "PatientAge", "AS", "1" }, { Tag(0x0010, 0x1020),
+ "Patient's Size", "PatientSize", "DS", "1" }, { Tag(0x0010, 0x1021),
+ "Patient's Size Code Sequence", "PatientSizeCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x1030),
+ "Patient's Weight", "PatientWeight", "DS", "1" }, { Tag(0x0010, 0x1040),
+ "Patient's Address", "PatientAddress", "LO", "1" }, { Tag(0x0010, 0x1050),
+ "Insurance Plan Identification", "InsurancePlanIdentification", "LO", "1-n" }, { Tag(0x0010, 0x1060),
+ "Patient's Mother's Birth Name", "PatientMotherBirthName", "PN", "1" }, { Tag(0x0010, 0x1080),
+ "Military Rank", "MilitaryRank", "LO", "1" }, { Tag(0x0010, 0x1081),
+ "Branch of Service", "BranchOfService", "LO", "1" }, { Tag(0x0010, 0x1090),
+ "Medical Record Locator", "MedicalRecordLocator", "LO", "1" }, { Tag(0x0010, 0x1100),
+ "Referenced Patient Photo Sequence", "ReferencedPatientPhotoSequence", "SQ", "1" }, { Tag(0x0010, 0x2000),
+ "Medical Alerts", "MedicalAlerts", "LO", "1-n" }, { Tag(0x0010, 0x2110),
+ "Allergies", "Allergies", "LO", "1-n" }, { Tag(0x0010, 0x2150),
+ "Country of Residence", "CountryOfResidence", "LO", "1" }, { Tag(0x0010, 0x2152),
+ "Region of Residence", "RegionOfResidence", "LO", "1" }, { Tag(0x0010, 0x2154),
+ "Patient's Telephone Numbers", "PatientTelephoneNumbers", "SH", "1-n" }, { Tag(0x0010, 0x2155),
+ "Patient's Telecom Information", "PatientTelecomInformation", "LT", "1" }, { Tag(0x0010, 0x2160),
+ "Ethnic Group", "EthnicGroup", "SH", "1" }, { Tag(0x0010, 0x2180),
+ "Occupation", "Occupation", "SH", "1" }, { Tag(0x0010, 0x21a0),
+ "Smoking Status", "SmokingStatus", "CS", "1" }, { Tag(0x0010, 0x21b0),
+ "Additional Patient History", "AdditionalPatientHistory", "LT", "1" }, { Tag(0x0010, 0x21c0),
+ "Pregnancy Status", "PregnancyStatus", "US", "1" }, { Tag(0x0010, 0x21d0),
+ "Last Menstrual Date", "LastMenstrualDate", "DA", "1" }, { Tag(0x0010, 0x21f0),
+ "Patient's Religious Preference", "PatientReligiousPreference", "LO", "1" }, { Tag(0x0010, 0x2201),
+ "Patient Species Description", "PatientSpeciesDescription", "LO", "1" }, { Tag(0x0010, 0x2202),
+ "Patient Species Code Sequence", "PatientSpeciesCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x2203),
+ "Patient's Sex Neutered", "PatientSexNeutered", "CS", "1" }, { Tag(0x0010, 0x2210),
+ "Anatomical Orientation Type", "AnatomicalOrientationType", "CS", "1" }, { Tag(0x0010, 0x2292),
+ "Patient Breed Description", "PatientBreedDescription", "LO", "1" }, { Tag(0x0010, 0x2293),
+ "Patient Breed Code Sequence", "PatientBreedCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x2294),
+ "Breed Registration Sequence", "BreedRegistrationSequence", "SQ", "1" }, { Tag(0x0010, 0x2295),
+ "Breed Registration Number", "BreedRegistrationNumber", "LO", "1" }, { Tag(0x0010, 0x2296),
+ "Breed Registry Code Sequence", "BreedRegistryCodeSequence", "SQ", "1" }, { Tag(0x0010, 0x2297),
+ "Responsible Person", "ResponsiblePerson", "PN", "1" }, { Tag(0x0010, 0x2298),
+ "Responsible Person Role", "ResponsiblePersonRole", "CS", "1" }, { Tag(0x0010, 0x2299),
+ "Responsible Organization", "ResponsibleOrganization", "LO", "1" }, { Tag(0x0010, 0x4000),
+ "Patient Comments", "PatientComments", "LT", "1" }, { Tag(0x0010, 0x9431),
+ "Examined Body Thickness", "ExaminedBodyThickness", "FL", "1" }, { Tag(0x0012, 0x0010),
+ "Clinical Trial Sponsor Name", "ClinicalTrialSponsorName", "LO", "1" }, { Tag(0x0012, 0x0020),
+ "Clinical Trial Protocol ID", "ClinicalTrialProtocolID", "LO", "1" }, { Tag(0x0012, 0x0021),
+ "Clinical Trial Protocol Name", "ClinicalTrialProtocolName", "LO", "1" }, { Tag(0x0012, 0x0030),
+ "Clinical Trial Site ID", "ClinicalTrialSiteID", "LO", "1" }, { Tag(0x0012, 0x0031),
+ "Clinical Trial Site Name", "ClinicalTrialSiteName", "LO", "1" }, { Tag(0x0012, 0x0040),
+ "Clinical Trial Subject ID", "ClinicalTrialSubjectID", "LO", "1" }, { Tag(0x0012, 0x0042),
+ "Clinical Trial Subject Reading ID", "ClinicalTrialSubjectReadingID", "LO", "1" }, { Tag(0x0012, 0x0050),
+ "Clinical Trial Time Point ID", "ClinicalTrialTimePointID", "LO", "1" }, { Tag(0x0012, 0x0051),
+ "Clinical Trial Time Point Description", "ClinicalTrialTimePointDescription", "ST", "1" }, { Tag(0x0012, 0x0060),
+ "Clinical Trial Coordinating Center Name", "ClinicalTrialCoordinatingCenterName", "LO", "1" }, { Tag(0x0012, 0x0062),
+ "Patient Identity Removed", "PatientIdentityRemoved", "CS", "1" }, { Tag(0x0012, 0x0063),
+ "De-identification Method", "DeidentificationMethod", "LO", "1-n" }, { Tag(0x0012, 0x0064),
+ "De-identification Method Code Sequence", "DeidentificationMethodCodeSequence", "SQ", "1" }, { Tag(0x0012, 0x0071),
+ "Clinical Trial Series ID", "ClinicalTrialSeriesID", "LO", "1" }, { Tag(0x0012, 0x0072),
+ "Clinical Trial Series Description", "ClinicalTrialSeriesDescription", "LO", "1" }, { Tag(0x0012, 0x0081),
+ "Clinical Trial Protocol Ethics Committee Name", "ClinicalTrialProtocolEthicsCommitteeName", "LO", "1" }, { Tag(0x0012, 0x0082),
+ "Clinical Trial Protocol Ethics Committee Approval Number", "ClinicalTrialProtocolEthicsCommitteeApprovalNumber", "LO", "1" }, { Tag(0x0012, 0x0083),
+ "Consent for Clinical Trial Use Sequence", "ConsentForClinicalTrialUseSequence", "SQ", "1" }, { Tag(0x0012, 0x0084),
+ "Distribution Type", "DistributionType", "CS", "1" }, { Tag(0x0012, 0x0085),
+ "Consent for Distribution Flag", "ConsentForDistributionFlag", "CS", "1" }, { Tag(0x0014, 0x0023),
+ "CAD File Format", "CADFileFormat", "ST", "1" }, { Tag(0x0014, 0x0024),
+ "Component Reference System", "ComponentReferenceSystem", "ST", "1" }, { Tag(0x0014, 0x0025),
+ "Component Manufacturing Procedure", "ComponentManufacturingProcedure", "ST", "1" }, { Tag(0x0014, 0x0028),
+ "Component Manufacturer", "ComponentManufacturer", "ST", "1" }, { Tag(0x0014, 0x0030),
+ "Material Thickness", "MaterialThickness", "DS", "1-n" }, { Tag(0x0014, 0x0032),
+ "Material Pipe Diameter", "MaterialPipeDiameter", "DS", "1-n" }, { Tag(0x0014, 0x0034),
+ "Material Isolation Diameter", "MaterialIsolationDiameter", "DS", "1-n" }, { Tag(0x0014, 0x0042),
+ "Material Grade", "MaterialGrade", "ST", "1" }, { Tag(0x0014, 0x0044),
+ "Material Properties Description", "MaterialPropertiesDescription", "ST", "1" }, { Tag(0x0014, 0x0045),
+ "Material Properties File Format (Retired)", "MaterialPropertiesFileFormatRetired", "ST", "1" }, { Tag(0x0014, 0x0046),
+ "Material Notes", "MaterialNotes", "LT", "1" }, { Tag(0x0014, 0x0050),
+ "Component Shape", "ComponentShape", "CS", "1" }, { Tag(0x0014, 0x0052),
+ "Curvature Type", "CurvatureType", "CS", "1" }, { Tag(0x0014, 0x0054),
+ "Outer Diameter", "OuterDiameter", "DS", "1" }, { Tag(0x0014, 0x0056),
+ "Inner Diameter", "InnerDiameter", "DS", "1" }, { Tag(0x0014, 0x0100),
+ "Component Welder IDs", "ComponentWelderIDs", "LO", "1-n" }, { Tag(0x0014, 0x0101),
+ "Secondary Approval Status", "SecondaryApprovalStatus", "CS", "1" }, { Tag(0x0014, 0x0102),
+ "Secondary Review Date", "SecondaryReviewDate", "DA", "1" }, { Tag(0x0014, 0x0103),
+ "Secondary Review Time", "SecondaryReviewTime", "TM", "1" }, { Tag(0x0014, 0x0104),
+ "Secondary Reviewer Name", "SecondaryReviewerName", "PN", "1" }, { Tag(0x0014, 0x0105),
+ "Repair ID", "RepairID", "ST", "1" }, { Tag(0x0014, 0x0106),
+ "Multiple Component Approval Sequence", "MultipleComponentApprovalSequence", "SQ", "1" }, { Tag(0x0014, 0x0107),
+ "Other Approval Status", "OtherApprovalStatus", "CS", "1-n" }, { Tag(0x0014, 0x0108),
+ "Other Secondary Approval Status", "OtherSecondaryApprovalStatus", "CS", "1-n" }, { Tag(0x0014, 0x1010),
+ "Actual Environmental Conditions", "ActualEnvironmentalConditions", "ST", "1" }, { Tag(0x0014, 0x1020),
+ "Expiry Date", "ExpiryDate", "DA", "1" }, { Tag(0x0014, 0x1040),
+ "Environmental Conditions", "EnvironmentalConditions", "ST", "1" }, { Tag(0x0014, 0x2002),
+ "Evaluator Sequence", "EvaluatorSequence", "SQ", "1" }, { Tag(0x0014, 0x2004),
+ "Evaluator Number", "EvaluatorNumber", "IS", "1" }, { Tag(0x0014, 0x2006),
+ "Evaluator Name", "EvaluatorName", "PN", "1" }, { Tag(0x0014, 0x2008),
+ "Evaluation Attempt", "EvaluationAttempt", "IS", "1" }, { Tag(0x0014, 0x2012),
+ "Indication Sequence", "IndicationSequence", "SQ", "1" }, { Tag(0x0014, 0x2014),
+ "Indication Number", "IndicationNumber", "IS", "1" }, { Tag(0x0014, 0x2016),
+ "Indication Label", "IndicationLabel", "SH", "1" }, { Tag(0x0014, 0x2018),
+ "Indication Description", "IndicationDescription", "ST", "1" }, { Tag(0x0014, 0x201a),
+ "Indication Type", "IndicationType", "CS", "1-n" }, { Tag(0x0014, 0x201c),
+ "Indication Disposition", "IndicationDisposition", "CS", "1" }, { Tag(0x0014, 0x201e),
+ "Indication ROI Sequence", "IndicationROISequence", "SQ", "1" }, { Tag(0x0014, 0x2030),
+ "Indication Physical Property Sequence", "IndicationPhysicalPropertySequence", "SQ", "1" }, { Tag(0x0014, 0x2032),
+ "Property Label", "PropertyLabel", "SH", "1" }, { Tag(0x0014, 0x2202),
+ "Coordinate System Number of Axes", "CoordinateSystemNumberOfAxes", "IS", "1" }, { Tag(0x0014, 0x2204),
+ "Coordinate System Axes Sequence", "CoordinateSystemAxesSequence", "SQ", "1" }, { Tag(0x0014, 0x2206),
+ "Coordinate System Axis Description", "CoordinateSystemAxisDescription", "ST", "1" }, { Tag(0x0014, 0x2208),
+ "Coordinate System Data Set Mapping", "CoordinateSystemDataSetMapping", "CS", "1" }, { Tag(0x0014, 0x220a),
+ "Coordinate System Axis Number", "CoordinateSystemAxisNumber", "IS", "1" }, { Tag(0x0014, 0x220c),
+ "Coordinate System Axis Type", "CoordinateSystemAxisType", "CS", "1" }, { Tag(0x0014, 0x220e),
+ "Coordinate System Axis Units", "CoordinateSystemAxisUnits", "CS", "1" }, { Tag(0x0014, 0x2210),
+ "Coordinate System Axis Values", "CoordinateSystemAxisValues", "OB", "1" }, { Tag(0x0014, 0x2220),
+ "Coordinate System Transform Sequence", "CoordinateSystemTransformSequence", "SQ", "1" }, { Tag(0x0014, 0x2222),
+ "Transform Description", "TransformDescription", "ST", "1" }, { Tag(0x0014, 0x2224),
+ "Transform Number of Axes", "TransformNumberOfAxes", "IS", "1" }, { Tag(0x0014, 0x2226),
+ "Transform Order of Axes", "TransformOrderOfAxes", "IS", "1-n" }, { Tag(0x0014, 0x2228),
+ "Transformed Axis Units", "TransformedAxisUnits", "CS", "1" }, { Tag(0x0014, 0x222a),
+ "Coordinate System Transform Rotation and Scale Matrix", "CoordinateSystemTransformRotationAndScaleMatrix", "DS", "1-n" }, { Tag(0x0014, 0x222c),
+ "Coordinate System Transform Translation Matrix", "CoordinateSystemTransformTranslationMatrix", "DS", "1-n" }, { Tag(0x0014, 0x3011),
+ "Internal Detector Frame Time", "InternalDetectorFrameTime", "DS", "1" }, { Tag(0x0014, 0x3012),
+ "Number of Frames Integrated", "NumberOfFramesIntegrated", "DS", "1" }, { Tag(0x0014, 0x3020),
+ "Detector Temperature Sequence", "DetectorTemperatureSequence", "SQ", "1" }, { Tag(0x0014, 0x3022),
+ "Sensor Name", "SensorName", "ST", "1" }, { Tag(0x0014, 0x3024),
+ "Horizontal Offset of Sensor", "HorizontalOffsetOfSensor", "DS", "1" }, { Tag(0x0014, 0x3026),
+ "Vertical Offset of Sensor", "VerticalOffsetOfSensor", "DS", "1" }, { Tag(0x0014, 0x3028),
+ "Sensor Temperature", "SensorTemperature", "DS", "1" }, { Tag(0x0014, 0x3040),
+ "Dark Current Sequence", "DarkCurrentSequence", "SQ", "1" }, { Tag(0x0014, 0x3050),
+ "Dark Current Counts", "DarkCurrentCounts", "OB or OW", "1" }, { Tag(0x0014, 0x3060),
+ "Gain Correction Reference Sequence", "GainCorrectionReferenceSequence", "SQ", "1" }, { Tag(0x0014, 0x3070),
+ "Air Counts", "AirCounts", "OB or OW", "1" }, { Tag(0x0014, 0x3071),
+ "KV Used in Gain Calibration", "KVUsedInGainCalibration", "DS", "1" }, { Tag(0x0014, 0x3072),
+ "MA Used in Gain Calibration", "MAUsedInGainCalibration", "DS", "1" }, { Tag(0x0014, 0x3073),
+ "Number of Frames Used for Integration", "NumberOfFramesUsedForIntegration", "DS", "1" }, { Tag(0x0014, 0x3074),
+ "Filter Material Used in Gain Calibration", "FilterMaterialUsedInGainCalibration", "LO", "1" }, { Tag(0x0014, 0x3075),
+ "Filter Thickness Used in Gain Calibration", "FilterThicknessUsedInGainCalibration", "DS", "1" }, { Tag(0x0014, 0x3076),
+ "Date of Gain Calibration", "DateOfGainCalibration", "DA", "1" }, { Tag(0x0014, 0x3077),
+ "Time of Gain Calibration", "TimeOfGainCalibration", "TM", "1" }, { Tag(0x0014, 0x3080),
+ "Bad Pixel Image", "BadPixelImage", "OB", "1" }, { Tag(0x0014, 0x3099),
+ "Calibration Notes", "CalibrationNotes", "LT", "1" }, { Tag(0x0014, 0x4002),
+ "Pulser Equipment Sequence", "PulserEquipmentSequence", "SQ", "1" }, { Tag(0x0014, 0x4004),
+ "Pulser Type", "PulserType", "CS", "1" }, { Tag(0x0014, 0x4006),
+ "Pulser Notes", "PulserNotes", "LT", "1" }, { Tag(0x0014, 0x4008),
+ "Receiver Equipment Sequence", "ReceiverEquipmentSequence", "SQ", "1" }, { Tag(0x0014, 0x400a),
+ "Amplifier Type", "AmplifierType", "CS", "1" }, { Tag(0x0014, 0x400c),
+ "Receiver Notes", "ReceiverNotes", "LT", "1" }, { Tag(0x0014, 0x400e),
+ "Pre-Amplifier Equipment Sequence", "PreAmplifierEquipmentSequence", "SQ", "1" }, { Tag(0x0014, 0x400f),
+ "Pre-Amplifier Notes", "PreAmplifierNotes", "LT", "1" }, { Tag(0x0014, 0x4010),
+ "Transmit Transducer Sequence", "TransmitTransducerSequence", "SQ", "1" }, { Tag(0x0014, 0x4011),
+ "Receive Transducer Sequence", "ReceiveTransducerSequence", "SQ", "1" }, { Tag(0x0014, 0x4012),
+ "Number of Elements", "NumberOfElements", "US", "1" }, { Tag(0x0014, 0x4013),
+ "Element Shape", "ElementShape", "CS", "1" }, { Tag(0x0014, 0x4014),
+ "Element Dimension A", "ElementDimensionA", "DS", "1" }, { Tag(0x0014, 0x4015),
+ "Element Dimension B", "ElementDimensionB", "DS", "1" }, { Tag(0x0014, 0x4016),
+ "Element Pitch A", "ElementPitchA", "DS", "1" }, { Tag(0x0014, 0x4017),
+ "Measured Beam Dimension A", "MeasuredBeamDimensionA", "DS", "1" }, { Tag(0x0014, 0x4018),
+ "Measured Beam Dimension B", "MeasuredBeamDimensionB", "DS", "1" }, { Tag(0x0014, 0x4019),
+ "Location of Measured Beam Diameter", "LocationOfMeasuredBeamDiameter", "DS", "1" }, { Tag(0x0014, 0x401a),
+ "Nominal Frequency", "NominalFrequency", "DS", "1" }, { Tag(0x0014, 0x401b),
+ "Measured Center Frequency", "MeasuredCenterFrequency", "DS", "1" }, { Tag(0x0014, 0x401c),
+ "Measured Bandwidth", "MeasuredBandwidth", "DS", "1" }, { Tag(0x0014, 0x401d),
+ "Element Pitch B", "ElementPitchB", "DS", "1" }, { Tag(0x0014, 0x4020),
+ "Pulser Settings Sequence", "PulserSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4022),
+ "Pulse Width", "PulseWidth", "DS", "1" }, { Tag(0x0014, 0x4024),
+ "Excitation Frequency", "ExcitationFrequency", "DS", "1" }, { Tag(0x0014, 0x4026),
+ "Modulation Type", "ModulationType", "CS", "1" }, { Tag(0x0014, 0x4028),
+ "Damping", "Damping", "DS", "1" }, { Tag(0x0014, 0x4030),
+ "Receiver Settings Sequence", "ReceiverSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4031),
+ "Acquired Soundpath Length", "AcquiredSoundpathLength", "DS", "1" }, { Tag(0x0014, 0x4032),
+ "Acquisition Compression Type", "AcquisitionCompressionType", "CS", "1" }, { Tag(0x0014, 0x4033),
+ "Acquisition Sample Size", "AcquisitionSampleSize", "IS", "1" }, { Tag(0x0014, 0x4034),
+ "Rectifier Smoothing", "RectifierSmoothing", "DS", "1" }, { Tag(0x0014, 0x4035),
+ "DAC Sequence", "DACSequence", "SQ", "1" }, { Tag(0x0014, 0x4036),
+ "DAC Type", "DACType", "CS", "1" }, { Tag(0x0014, 0x4038),
+ "DAC Gain Points", "DACGainPoints", "DS", "1-n" }, { Tag(0x0014, 0x403a),
+ "DAC Time Points", "DACTimePoints", "DS", "1-n" }, { Tag(0x0014, 0x403c),
+ "DAC Amplitude", "DACAmplitude", "DS", "1-n" }, { Tag(0x0014, 0x4040),
+ "Pre-Amplifier Settings Sequence", "PreAmplifierSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4050),
+ "Transmit Transducer Settings Sequence", "TransmitTransducerSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4051),
+ "Receive Transducer Settings Sequence", "ReceiveTransducerSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4052),
+ "Incident Angle", "IncidentAngle", "DS", "1" }, { Tag(0x0014, 0x4054),
+ "Coupling Technique", "CouplingTechnique", "ST", "1" }, { Tag(0x0014, 0x4056),
+ "Coupling Medium", "CouplingMedium", "ST", "1" }, { Tag(0x0014, 0x4057),
+ "Coupling Velocity", "CouplingVelocity", "DS", "1" }, { Tag(0x0014, 0x4058),
+ "Probe Center Location X", "ProbeCenterLocationX", "DS", "1" }, { Tag(0x0014, 0x4059),
+ "Probe Center Location Z", "ProbeCenterLocationZ", "DS", "1" }, { Tag(0x0014, 0x405a),
+ "Sound Path Length", "SoundPathLength", "DS", "1" }, { Tag(0x0014, 0x405c),
+ "Delay Law Identifier", "DelayLawIdentifier", "ST", "1" }, { Tag(0x0014, 0x4060),
+ "Gate Settings Sequence", "GateSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4062),
+ "Gate Threshold", "GateThreshold", "DS", "1" }, { Tag(0x0014, 0x4064),
+ "Velocity of Sound", "VelocityOfSound", "DS", "1" }, { Tag(0x0014, 0x4070),
+ "Calibration Settings Sequence", "CalibrationSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4072),
+ "Calibration Procedure", "CalibrationProcedure", "ST", "1" }, { Tag(0x0014, 0x4074),
+ "Procedure Version", "ProcedureVersion", "SH", "1" }, { Tag(0x0014, 0x4076),
+ "Procedure Creation Date", "ProcedureCreationDate", "DA", "1" }, { Tag(0x0014, 0x4078),
+ "Procedure Expiration Date", "ProcedureExpirationDate", "DA", "1" }, { Tag(0x0014, 0x407a),
+ "Procedure Last Modified Date", "ProcedureLastModifiedDate", "DA", "1" }, { Tag(0x0014, 0x407c),
+ "Calibration Time", "CalibrationTime", "TM", "1-n" }, { Tag(0x0014, 0x407e),
+ "Calibration Date", "CalibrationDate", "DA", "1-n" }, { Tag(0x0014, 0x4080),
+ "Probe Drive Equipment Sequence", "ProbeDriveEquipmentSequence", "SQ", "1" }, { Tag(0x0014, 0x4081),
+ "Drive Type", "DriveType", "CS", "1" }, { Tag(0x0014, 0x4082),
+ "Probe Drive Notes", "ProbeDriveNotes", "LT", "1" }, { Tag(0x0014, 0x4083),
+ "Drive Probe Sequence", "DriveProbeSequence", "SQ", "1" }, { Tag(0x0014, 0x4084),
+ "Probe Inductance", "ProbeInductance", "DS", "1" }, { Tag(0x0014, 0x4085),
+ "Probe Resistance", "ProbeResistance", "DS", "1" }, { Tag(0x0014, 0x4086),
+ "Receive Probe Sequence", "ReceiveProbeSequence", "SQ", "1" }, { Tag(0x0014, 0x4087),
+ "Probe Drive Settings Sequence", "ProbeDriveSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4088),
+ "Bridge Resistors", "BridgeResistors", "DS", "1" }, { Tag(0x0014, 0x4089),
+ "Probe Orientation Angle", "ProbeOrientationAngle", "DS", "1" }, { Tag(0x0014, 0x408b),
+ "User Selected Gain Y", "UserSelectedGainY", "DS", "1" }, { Tag(0x0014, 0x408c),
+ "User Selected Phase", "UserSelectedPhase", "DS", "1" }, { Tag(0x0014, 0x408d),
+ "User Selected Offset X", "UserSelectedOffsetX", "DS", "1" }, { Tag(0x0014, 0x408e),
+ "User Selected Offset Y", "UserSelectedOffsetY", "DS", "1" }, { Tag(0x0014, 0x4091),
+ "Channel Settings Sequence", "ChannelSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x4092),
+ "Channel Threshold", "ChannelThreshold", "DS", "1" }, { Tag(0x0014, 0x409a),
+ "Scanner Settings Sequence", "ScannerSettingsSequence", "SQ", "1" }, { Tag(0x0014, 0x409b),
+ "Scan Procedure", "ScanProcedure", "ST", "1" }, { Tag(0x0014, 0x409c),
+ "Translation Rate X", "TranslationRateX", "DS", "1" }, { Tag(0x0014, 0x409d),
+ "Translation Rate Y", "TranslationRateY", "DS", "1" }, { Tag(0x0014, 0x409f),
+ "Channel Overlap", "ChannelOverlap", "DS", "1" }, { Tag(0x0014, 0x40a0),
+ "Image Quality Indicator Type", "ImageQualityIndicatorType", "LO", "1" }, { Tag(0x0014, 0x40a1),
+ "Image Quality Indicator Material", "ImageQualityIndicatorMaterial", "LO", "1" }, { Tag(0x0014, 0x40a2),
+ "Image Quality Indicator Size", "ImageQualityIndicatorSize", "LO", "1" }, { Tag(0x0014, 0x5002),
+ "LINAC Energy", "LINACEnergy", "IS", "1" }, { Tag(0x0014, 0x5004),
+ "LINAC Output", "LINACOutput", "IS", "1" }, { Tag(0x0014, 0x5100),
+ "Active Aperture", "ActiveAperture", "US", "1" }, { Tag(0x0014, 0x5101),
+ "Total Aperture", "TotalAperture", "DS", "1" }, { Tag(0x0014, 0x5102),
+ "Aperture Elevation", "ApertureElevation", "DS", "1" }, { Tag(0x0014, 0x5103),
+ "Main Lobe Angle", "MainLobeAngle", "DS", "1" }, { Tag(0x0014, 0x5104),
+ "Main Roof Angle", "MainRoofAngle", "DS", "1" }, { Tag(0x0014, 0x5105),
+ "Connector Type", "ConnectorType", "CS", "1" }, { Tag(0x0014, 0x5106),
+ "Wedge Model Number", "WedgeModelNumber", "SH", "1" }, { Tag(0x0014, 0x5107),
+ "Wedge Angle Float", "WedgeAngleFloat", "DS", "1" }, { Tag(0x0014, 0x5108),
+ "Wedge Roof Angle", "WedgeRoofAngle", "DS", "1" }, { Tag(0x0014, 0x5109),
+ "Wedge Element 1 Position", "WedgeElement1Position", "CS", "1" }, { Tag(0x0014, 0x510a),
+ "Wedge Material Velocity", "WedgeMaterialVelocity", "DS", "1" }, { Tag(0x0014, 0x510b),
+ "Wedge Material", "WedgeMaterial", "SH", "1" }, { Tag(0x0014, 0x510c),
+ "Wedge Offset Z", "WedgeOffsetZ", "DS", "1" }, { Tag(0x0014, 0x510d),
+ "Wedge Origin Offset X", "WedgeOriginOffsetX", "DS", "1" }, { Tag(0x0014, 0x510e),
+ "Wedge Time Delay", "WedgeTimeDelay", "DS", "1" }, { Tag(0x0014, 0x510f),
+ "Wedge Name", "WedgeName", "SH", "1" }, { Tag(0x0014, 0x5110),
+ "Wedge Manufacturer Name", "WedgeManufacturerName", "SH", "1" }, { Tag(0x0014, 0x5111),
+ "Wedge Description", "WedgeDescription", "LO", "1" }, { Tag(0x0014, 0x5112),
+ "Nominal Beam Angle", "NominalBeamAngle", "DS", "1" }, { Tag(0x0014, 0x5113),
+ "Wedge Offset X", "WedgeOffsetX", "DS", "1" }, { Tag(0x0014, 0x5114),
+ "Wedge Offset Y", "WedgeOffsetY", "DS", "1" }, { Tag(0x0014, 0x5115),
+ "Wedge Total Length", "WedgeTotalLength", "DS", "1" }, { Tag(0x0014, 0x5116),
+ "Wedge In Contact Length", "WedgeInContactLength", "DS", "1" }, { Tag(0x0014, 0x5117),
+ "Wedge Front Gap", "WedgeFrontGap", "DS", "1" }, { Tag(0x0014, 0x5118),
+ "Wedge Total Height", "WedgeTotalHeight", "DS", "1" }, { Tag(0x0014, 0x5119),
+ "Wedge Front Height", "WedgeFrontHeight", "DS", "1" }, { Tag(0x0014, 0x511a),
+ "Wedge Rear Height", "WedgeRearHeight", "DS", "1" }, { Tag(0x0014, 0x511b),
+ "Wedge Total Width", "WedgeTotalWidth", "DS", "1" }, { Tag(0x0014, 0x511c),
+ "Wedge In Contact Width", "WedgeInContactWidth", "DS", "1" }, { Tag(0x0014, 0x511d),
+ "Wedge Chamfer Height", "WedgeChamferHeight", "DS", "1" }, { Tag(0x0014, 0x511e),
+ "Wedge Curve", "WedgeCurve", "CS", "1" }, { Tag(0x0014, 0x511f),
+ "Radius Along the Wedge", "RadiusAlongWedge", "DS", "1" }, { Tag(0x0018, 0x0010),
+ "Contrast/Bolus Agent", "ContrastBolusAgent", "LO", "1" }, { Tag(0x0018, 0x0012),
+ "Contrast/Bolus Agent Sequence", "ContrastBolusAgentSequence", "SQ", "1" }, { Tag(0x0018, 0x0013),
+ "Contrast/Bolus T1 Relaxivity", "ContrastBolusT1Relaxivity", "FL", "1" }, { Tag(0x0018, 0x0014),
+ "Contrast/Bolus Administration Route Sequence", "ContrastBolusAdministrationRouteSequence", "SQ", "1" }, { Tag(0x0018, 0x0015),
+ "Body Part Examined", "BodyPartExamined", "CS", "1" }, { Tag(0x0018, 0x0020),
+ "Scanning Sequence", "ScanningSequence", "CS", "1-n" }, { Tag(0x0018, 0x0021),
+ "Sequence Variant", "SequenceVariant", "CS", "1-n" }, { Tag(0x0018, 0x0022),
+ "Scan Options", "ScanOptions", "CS", "1-n" }, { Tag(0x0018, 0x0023),
+ "MR Acquisition Type", "MRAcquisitionType", "CS", "1" }, { Tag(0x0018, 0x0024),
+ "Sequence Name", "SequenceName", "SH", "1" }, { Tag(0x0018, 0x0025),
+ "Angio Flag", "AngioFlag", "CS", "1" }, { Tag(0x0018, 0x0026),
+ "Intervention Drug Information Sequence", "InterventionDrugInformationSequence", "SQ", "1" }, { Tag(0x0018, 0x0027),
+ "Intervention Drug Stop Time", "InterventionDrugStopTime", "TM", "1" }, { Tag(0x0018, 0x0028),
+ "Intervention Drug Dose", "InterventionDrugDose", "DS", "1" }, { Tag(0x0018, 0x0029),
+ "Intervention Drug Code Sequence", "InterventionDrugCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x002a),
+ "Additional Drug Sequence", "AdditionalDrugSequence", "SQ", "1" }, { Tag(0x0018, 0x0030),
+ "Radionuclide", "Radionuclide", "LO", "1-n" }, { Tag(0x0018, 0x0031),
+ "Radiopharmaceutical", "Radiopharmaceutical", "LO", "1" }, { Tag(0x0018, 0x0032),
+ "Energy Window Centerline", "EnergyWindowCenterline", "DS", "1" }, { Tag(0x0018, 0x0033),
+ "Energy Window Total Width", "EnergyWindowTotalWidth", "DS", "1-n" }, { Tag(0x0018, 0x0034),
+ "Intervention Drug Name", "InterventionDrugName", "LO", "1" }, { Tag(0x0018, 0x0035),
+ "Intervention Drug Start Time", "InterventionDrugStartTime", "TM", "1" }, { Tag(0x0018, 0x0036),
+ "Intervention Sequence", "InterventionSequence", "SQ", "1" }, { Tag(0x0018, 0x0037),
+ "Therapy Type", "TherapyType", "CS", "1" }, { Tag(0x0018, 0x0038),
+ "Intervention Status", "InterventionStatus", "CS", "1" }, { Tag(0x0018, 0x0039),
+ "Therapy Description", "TherapyDescription", "CS", "1" }, { Tag(0x0018, 0x003a),
+ "Intervention Description", "InterventionDescription", "ST", "1" }, { Tag(0x0018, 0x0040),
+ "Cine Rate", "CineRate", "IS", "1" }, { Tag(0x0018, 0x0042),
+ "Initial Cine Run State", "InitialCineRunState", "CS", "1" }, { Tag(0x0018, 0x0050),
+ "Slice Thickness", "SliceThickness", "DS", "1" }, { Tag(0x0018, 0x0060),
+ "KVP", "KVP", "DS", "1" }, { Tag(0x0018, 0x0070),
+ "Counts Accumulated", "CountsAccumulated", "IS", "1" }, { Tag(0x0018, 0x0071),
+ "Acquisition Termination Condition", "AcquisitionTerminationCondition", "CS", "1" }, { Tag(0x0018, 0x0072),
+ "Effective Duration", "EffectiveDuration", "DS", "1" }, { Tag(0x0018, 0x0073),
+ "Acquisition Start Condition", "AcquisitionStartCondition", "CS", "1" }, { Tag(0x0018, 0x0074),
+ "Acquisition Start Condition Data", "AcquisitionStartConditionData", "IS", "1" }, { Tag(0x0018, 0x0075),
+ "Acquisition Termination Condition Data", "AcquisitionTerminationConditionData", "IS", "1" }, { Tag(0x0018, 0x0080),
+ "Repetition Time", "RepetitionTime", "DS", "1" }, { Tag(0x0018, 0x0081),
+ "Echo Time", "EchoTime", "DS", "1" }, { Tag(0x0018, 0x0082),
+ "Inversion Time", "InversionTime", "DS", "1" }, { Tag(0x0018, 0x0083),
+ "Number of Averages", "NumberOfAverages", "DS", "1" }, { Tag(0x0018, 0x0084),
+ "Imaging Frequency", "ImagingFrequency", "DS", "1" }, { Tag(0x0018, 0x0085),
+ "Imaged Nucleus", "ImagedNucleus", "SH", "1" }, { Tag(0x0018, 0x0086),
+ "Echo Number(s)", "EchoNumbers", "IS", "1-n" }, { Tag(0x0018, 0x0087),
+ "Magnetic Field Strength", "MagneticFieldStrength", "DS", "1" }, { Tag(0x0018, 0x0088),
+ "Spacing Between Slices", "SpacingBetweenSlices", "DS", "1" }, { Tag(0x0018, 0x0089),
+ "Number of Phase Encoding Steps", "NumberOfPhaseEncodingSteps", "IS", "1" }, { Tag(0x0018, 0x0090),
+ "Data Collection Diameter", "DataCollectionDiameter", "DS", "1" }, { Tag(0x0018, 0x0091),
+ "Echo Train Length", "EchoTrainLength", "IS", "1" }, { Tag(0x0018, 0x0093),
+ "Percent Sampling", "PercentSampling", "DS", "1" }, { Tag(0x0018, 0x0094),
+ "Percent Phase Field of View", "PercentPhaseFieldOfView", "DS", "1" }, { Tag(0x0018, 0x0095),
+ "Pixel Bandwidth", "PixelBandwidth", "DS", "1" }, { Tag(0x0018, 0x1000),
+ "Device Serial Number", "DeviceSerialNumber", "LO", "1" }, { Tag(0x0018, 0x1002),
+ "Device UID", "DeviceUID", "UI", "1" }, { Tag(0x0018, 0x1003),
+ "Device ID", "DeviceID", "LO", "1" }, { Tag(0x0018, 0x1004),
+ "Plate ID", "PlateID", "LO", "1" }, { Tag(0x0018, 0x1005),
+ "Generator ID", "GeneratorID", "LO", "1" }, { Tag(0x0018, 0x1006),
+ "Grid ID", "GridID", "LO", "1" }, { Tag(0x0018, 0x1007),
+ "Cassette ID", "CassetteID", "LO", "1" }, { Tag(0x0018, 0x1008),
+ "Gantry ID", "GantryID", "LO", "1" }, { Tag(0x0018, 0x1010),
+ "Secondary Capture Device ID", "SecondaryCaptureDeviceID", "LO", "1" }, { Tag(0x0018, 0x1011),
+ "Hardcopy Creation Device ID", "HardcopyCreationDeviceID", "LO", "1" }, { Tag(0x0018, 0x1012),
+ "Date of Secondary Capture", "DateOfSecondaryCapture", "DA", "1" }, { Tag(0x0018, 0x1014),
+ "Time of Secondary Capture", "TimeOfSecondaryCapture", "TM", "1" }, { Tag(0x0018, 0x1016),
+ "Secondary Capture Device Manufacturer", "SecondaryCaptureDeviceManufacturer", "LO", "1" }, { Tag(0x0018, 0x1017),
+ "Hardcopy Device Manufacturer", "HardcopyDeviceManufacturer", "LO", "1" }, { Tag(0x0018, 0x1018),
+ "Secondary Capture Device Manufacturer's Model Name", "SecondaryCaptureDeviceManufacturerModelName", "LO", "1" }, { Tag(0x0018, 0x1019),
+ "Secondary Capture Device Software Versions", "SecondaryCaptureDeviceSoftwareVersions", "LO", "1-n" }, { Tag(0x0018, 0x101a),
+ "Hardcopy Device Software Version", "HardcopyDeviceSoftwareVersion", "LO", "1-n" }, { Tag(0x0018, 0x101b),
+ "Hardcopy Device Manufacturer's Model Name", "HardcopyDeviceManufacturerModelName", "LO", "1" }, { Tag(0x0018, 0x1020),
+ "Software Version(s)", "SoftwareVersions", "LO", "1-n" }, { Tag(0x0018, 0x1022),
+ "Video Image Format Acquired", "VideoImageFormatAcquired", "SH", "1" }, { Tag(0x0018, 0x1023),
+ "Digital Image Format Acquired", "DigitalImageFormatAcquired", "LO", "1" }, { Tag(0x0018, 0x1030),
+ "Protocol Name", "ProtocolName", "LO", "1" }, { Tag(0x0018, 0x1040),
+ "Contrast/Bolus Route", "ContrastBolusRoute", "LO", "1" }, { Tag(0x0018, 0x1041),
+ "Contrast/Bolus Volume", "ContrastBolusVolume", "DS", "1" }, { Tag(0x0018, 0x1042),
+ "Contrast/Bolus Start Time", "ContrastBolusStartTime", "TM", "1" }, { Tag(0x0018, 0x1043),
+ "Contrast/Bolus Stop Time", "ContrastBolusStopTime", "TM", "1" }, { Tag(0x0018, 0x1044),
+ "Contrast/Bolus Total Dose", "ContrastBolusTotalDose", "DS", "1" }, { Tag(0x0018, 0x1045),
+ "Syringe Counts", "SyringeCounts", "IS", "1" }, { Tag(0x0018, 0x1046),
+ "Contrast Flow Rate", "ContrastFlowRate", "DS", "1-n" }, { Tag(0x0018, 0x1047),
+ "Contrast Flow Duration", "ContrastFlowDuration", "DS", "1-n" }, { Tag(0x0018, 0x1048),
+ "Contrast/Bolus Ingredient", "ContrastBolusIngredient", "CS", "1" }, { Tag(0x0018, 0x1049),
+ "Contrast/Bolus Ingredient Concentration", "ContrastBolusIngredientConcentration", "DS", "1" }, { Tag(0x0018, 0x1050),
+ "Spatial Resolution", "SpatialResolution", "DS", "1" }, { Tag(0x0018, 0x1060),
+ "Trigger Time", "TriggerTime", "DS", "1" }, { Tag(0x0018, 0x1061),
+ "Trigger Source or Type", "TriggerSourceOrType", "LO", "1" }, { Tag(0x0018, 0x1062),
+ "Nominal Interval", "NominalInterval", "IS", "1" }, { Tag(0x0018, 0x1063),
+ "Frame Time", "FrameTime", "DS", "1" }, { Tag(0x0018, 0x1064),
+ "Cardiac Framing Type", "CardiacFramingType", "LO", "1" }, { Tag(0x0018, 0x1065),
+ "Frame Time Vector", "FrameTimeVector", "DS", "1-n" }, { Tag(0x0018, 0x1066),
+ "Frame Delay", "FrameDelay", "DS", "1" }, { Tag(0x0018, 0x1067),
+ "Image Trigger Delay", "ImageTriggerDelay", "DS", "1" }, { Tag(0x0018, 0x1068),
+ "Multiplex Group Time Offset", "MultiplexGroupTimeOffset", "DS", "1" }, { Tag(0x0018, 0x1069),
+ "Trigger Time Offset", "TriggerTimeOffset", "DS", "1" }, { Tag(0x0018, 0x106a),
+ "Synchronization Trigger", "SynchronizationTrigger", "CS", "1" }, { Tag(0x0018, 0x106c),
+ "Synchronization Channel", "SynchronizationChannel", "US", "2" }, { Tag(0x0018, 0x106e),
+ "Trigger Sample Position", "TriggerSamplePosition", "UL", "1" }, { Tag(0x0018, 0x1070),
+ "Radiopharmaceutical Route", "RadiopharmaceuticalRoute", "LO", "1" }, { Tag(0x0018, 0x1071),
+ "Radiopharmaceutical Volume", "RadiopharmaceuticalVolume", "DS", "1" }, { Tag(0x0018, 0x1072),
+ "Radiopharmaceutical Start Time", "RadiopharmaceuticalStartTime", "TM", "1" }, { Tag(0x0018, 0x1073),
+ "Radiopharmaceutical Stop Time", "RadiopharmaceuticalStopTime", "TM", "1" }, { Tag(0x0018, 0x1074),
+ "Radionuclide Total Dose", "RadionuclideTotalDose", "DS", "1" }, { Tag(0x0018, 0x1075),
+ "Radionuclide Half Life", "RadionuclideHalfLife", "DS", "1" }, { Tag(0x0018, 0x1076),
+ "Radionuclide Positron Fraction", "RadionuclidePositronFraction", "DS", "1" }, { Tag(0x0018, 0x1077),
+ "Radiopharmaceutical Specific Activity", "RadiopharmaceuticalSpecificActivity", "DS", "1" }, { Tag(0x0018, 0x1078),
+ "Radiopharmaceutical Start DateTime", "RadiopharmaceuticalStartDateTime", "DT", "1" }, { Tag(0x0018, 0x1079),
+ "Radiopharmaceutical Stop DateTime", "RadiopharmaceuticalStopDateTime", "DT", "1" }, { Tag(0x0018, 0x1080),
+ "Beat Rejection Flag", "BeatRejectionFlag", "CS", "1" }, { Tag(0x0018, 0x1081),
+ "Low R-R Value", "LowRRValue", "IS", "1" }, { Tag(0x0018, 0x1082),
+ "High R-R Value", "HighRRValue", "IS", "1" }, { Tag(0x0018, 0x1083),
+ "Intervals Acquired", "IntervalsAcquired", "IS", "1" }, { Tag(0x0018, 0x1084),
+ "Intervals Rejected", "IntervalsRejected", "IS", "1" }, { Tag(0x0018, 0x1085),
+ "PVC Rejection", "PVCRejection", "LO", "1" }, { Tag(0x0018, 0x1086),
+ "Skip Beats", "SkipBeats", "IS", "1" }, { Tag(0x0018, 0x1088),
+ "Heart Rate", "HeartRate", "IS", "1" }, { Tag(0x0018, 0x1090),
+ "Cardiac Number of Images", "CardiacNumberOfImages", "IS", "1" }, { Tag(0x0018, 0x1094),
+ "Trigger Window", "TriggerWindow", "IS", "1" }, { Tag(0x0018, 0x1100),
+ "Reconstruction Diameter", "ReconstructionDiameter", "DS", "1" }, { Tag(0x0018, 0x1110),
+ "Distance Source to Detector", "DistanceSourceToDetector", "DS", "1" }, { Tag(0x0018, 0x1111),
+ "Distance Source to Patient", "DistanceSourceToPatient", "DS", "1" }, { Tag(0x0018, 0x1114),
+ "Estimated Radiographic Magnification Factor", "EstimatedRadiographicMagnificationFactor", "DS", "1" }, { Tag(0x0018, 0x1120),
+ "Gantry/Detector Tilt", "GantryDetectorTilt", "DS", "1" }, { Tag(0x0018, 0x1121),
+ "Gantry/Detector Slew", "GantryDetectorSlew", "DS", "1" }, { Tag(0x0018, 0x1130),
+ "Table Height", "TableHeight", "DS", "1" }, { Tag(0x0018, 0x1131),
+ "Table Traverse", "TableTraverse", "DS", "1" }, { Tag(0x0018, 0x1134),
+ "Table Motion", "TableMotion", "CS", "1" }, { Tag(0x0018, 0x1135),
+ "Table Vertical Increment", "TableVerticalIncrement", "DS", "1-n" }, { Tag(0x0018, 0x1136),
+ "Table Lateral Increment", "TableLateralIncrement", "DS", "1-n" }, { Tag(0x0018, 0x1137),
+ "Table Longitudinal Increment", "TableLongitudinalIncrement", "DS", "1-n" }, { Tag(0x0018, 0x1138),
+ "Table Angle", "TableAngle", "DS", "1" }, { Tag(0x0018, 0x113a),
+ "Table Type", "TableType", "CS", "1" }, { Tag(0x0018, 0x1140),
+ "Rotation Direction", "RotationDirection", "CS", "1" }, { Tag(0x0018, 0x1141),
+ "Angular Position", "AngularPosition", "DS", "1" }, { Tag(0x0018, 0x1142),
+ "Radial Position", "RadialPosition", "DS", "1-n" }, { Tag(0x0018, 0x1143),
+ "Scan Arc", "ScanArc", "DS", "1" }, { Tag(0x0018, 0x1144),
+ "Angular Step", "AngularStep", "DS", "1" }, { Tag(0x0018, 0x1145),
+ "Center of Rotation Offset", "CenterOfRotationOffset", "DS", "1" }, { Tag(0x0018, 0x1146),
+ "Rotation Offset", "RotationOffset", "DS", "1-n" }, { Tag(0x0018, 0x1147),
+ "Field of View Shape", "FieldOfViewShape", "CS", "1" }, { Tag(0x0018, 0x1149),
+ "Field of View Dimension(s)", "FieldOfViewDimensions", "IS", "1-2" }, { Tag(0x0018, 0x1150),
+ "Exposure Time", "ExposureTime", "IS", "1" }, { Tag(0x0018, 0x1151),
+ "X-Ray Tube Current", "XRayTubeCurrent", "IS", "1" }, { Tag(0x0018, 0x1152),
+ "Exposure", "Exposure", "IS", "1" }, { Tag(0x0018, 0x1153),
+ "Exposure in uAs", "ExposureInuAs", "IS", "1" }, { Tag(0x0018, 0x1154),
+ "Average Pulse Width", "AveragePulseWidth", "DS", "1" }, { Tag(0x0018, 0x1155),
+ "Radiation Setting", "RadiationSetting", "CS", "1" }, { Tag(0x0018, 0x1156),
+ "Rectification Type", "RectificationType", "CS", "1" }, { Tag(0x0018, 0x115a),
+ "Radiation Mode", "RadiationMode", "CS", "1" }, { Tag(0x0018, 0x115e),
+ "Image and Fluoroscopy Area Dose Product", "ImageAndFluoroscopyAreaDoseProduct", "DS", "1" }, { Tag(0x0018, 0x1160),
+ "Filter Type", "FilterType", "SH", "1" }, { Tag(0x0018, 0x1161),
+ "Type of Filters", "TypeOfFilters", "LO", "1-n" }, { Tag(0x0018, 0x1162),
+ "Intensifier Size", "IntensifierSize", "DS", "1" }, { Tag(0x0018, 0x1164),
+ "Imager Pixel Spacing", "ImagerPixelSpacing", "DS", "2" }, { Tag(0x0018, 0x1166),
+ "Grid", "Grid", "CS", "1-n" }, { Tag(0x0018, 0x1170),
+ "Generator Power", "GeneratorPower", "IS", "1" }, { Tag(0x0018, 0x1180),
+ "Collimator/grid Name", "CollimatorGridName", "SH", "1" }, { Tag(0x0018, 0x1181),
+ "Collimator Type", "CollimatorType", "CS", "1" }, { Tag(0x0018, 0x1182),
+ "Focal Distance", "FocalDistance", "IS", "1-2" }, { Tag(0x0018, 0x1183),
+ "X Focus Center", "XFocusCenter", "DS", "1-2" }, { Tag(0x0018, 0x1184),
+ "Y Focus Center", "YFocusCenter", "DS", "1-2" }, { Tag(0x0018, 0x1190),
+ "Focal Spot(s)", "FocalSpots", "DS", "1-n" }, { Tag(0x0018, 0x1191),
+ "Anode Target Material", "AnodeTargetMaterial", "CS", "1" }, { Tag(0x0018, 0x11a0),
+ "Body Part Thickness", "BodyPartThickness", "DS", "1" }, { Tag(0x0018, 0x11a2),
+ "Compression Force", "CompressionForce", "DS", "1" }, { Tag(0x0018, 0x11a4),
+ "Paddle Description", "PaddleDescription", "LO", "1" }, { Tag(0x0018, 0x1200),
+ "Date of Last Calibration", "DateOfLastCalibration", "DA", "1-n" }, { Tag(0x0018, 0x1201),
+ "Time of Last Calibration", "TimeOfLastCalibration", "TM", "1-n" }, { Tag(0x0018, 0x1202),
+ "DateTime of Last Calibration", "DateTimeOfLastCalibration", "DT", "1" }, { Tag(0x0018, 0x1210),
+ "Convolution Kernel", "ConvolutionKernel", "SH", "1-n" }, { Tag(0x0018, 0x1240),
+ "Upper/Lower Pixel Values", "UpperLowerPixelValues", "IS", "1-n" }, { Tag(0x0018, 0x1242),
+ "Actual Frame Duration", "ActualFrameDuration", "IS", "1" }, { Tag(0x0018, 0x1243),
+ "Count Rate", "CountRate", "IS", "1" }, { Tag(0x0018, 0x1244),
+ "Preferred Playback Sequencing", "PreferredPlaybackSequencing", "US", "1" }, { Tag(0x0018, 0x1250),
+ "Receive Coil Name", "ReceiveCoilName", "SH", "1" }, { Tag(0x0018, 0x1251),
+ "Transmit Coil Name", "TransmitCoilName", "SH", "1" }, { Tag(0x0018, 0x1260),
+ "Plate Type", "PlateType", "SH", "1" }, { Tag(0x0018, 0x1261),
+ "Phosphor Type", "PhosphorType", "LO", "1" }, { Tag(0x0018, 0x1271),
+ "Water Equivalent Diameter", "WaterEquivalentDiameter", "FD", "1" }, { Tag(0x0018, 0x1272),
+ "Water Equivalent Diameter Calculation Method Code Sequence", "WaterEquivalentDiameterCalculationMethodCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x1300),
+ "Scan Velocity", "ScanVelocity", "DS", "1" }, { Tag(0x0018, 0x1301),
+ "Whole Body Technique", "WholeBodyTechnique", "CS", "1-n" }, { Tag(0x0018, 0x1302),
+ "Scan Length", "ScanLength", "IS", "1" }, { Tag(0x0018, 0x1310),
+ "Acquisition Matrix", "AcquisitionMatrix", "US", "4" }, { Tag(0x0018, 0x1312),
+ "In-plane Phase Encoding Direction", "InPlanePhaseEncodingDirection", "CS", "1" }, { Tag(0x0018, 0x1314),
+ "Flip Angle", "FlipAngle", "DS", "1" }, { Tag(0x0018, 0x1315),
+ "Variable Flip Angle Flag", "VariableFlipAngleFlag", "CS", "1" }, { Tag(0x0018, 0x1316),
+ "SAR", "SAR", "DS", "1" }, { Tag(0x0018, 0x1318),
+ "dB/dt", "dBdt", "DS", "1" }, { Tag(0x0018, 0x1320),
+ "B1rms", "B1rms", "FL", "1" }, { Tag(0x0018, 0x1400),
+ "Acquisition Device Processing Description", "AcquisitionDeviceProcessingDescription", "LO", "1" }, { Tag(0x0018, 0x1401),
+ "Acquisition Device Processing Code", "AcquisitionDeviceProcessingCode", "LO", "1" }, { Tag(0x0018, 0x1402),
+ "Cassette Orientation", "CassetteOrientation", "CS", "1" }, { Tag(0x0018, 0x1403),
+ "Cassette Size", "CassetteSize", "CS", "1" }, { Tag(0x0018, 0x1404),
+ "Exposures on Plate", "ExposuresOnPlate", "US", "1" }, { Tag(0x0018, 0x1405),
+ "Relative X-Ray Exposure", "RelativeXRayExposure", "IS", "1" }, { Tag(0x0018, 0x1411),
+ "Exposure Index", "ExposureIndex", "DS", "1" }, { Tag(0x0018, 0x1412),
+ "Target Exposure Index", "TargetExposureIndex", "DS", "1" }, { Tag(0x0018, 0x1413),
+ "Deviation Index", "DeviationIndex", "DS", "1" }, { Tag(0x0018, 0x1450),
+ "Column Angulation", "ColumnAngulation", "DS", "1" }, { Tag(0x0018, 0x1460),
+ "Tomo Layer Height", "TomoLayerHeight", "DS", "1" }, { Tag(0x0018, 0x1470),
+ "Tomo Angle", "TomoAngle", "DS", "1" }, { Tag(0x0018, 0x1480),
+ "Tomo Time", "TomoTime", "DS", "1" }, { Tag(0x0018, 0x1490),
+ "Tomo Type", "TomoType", "CS", "1" }, { Tag(0x0018, 0x1491),
+ "Tomo Class", "TomoClass", "CS", "1" }, { Tag(0x0018, 0x1495),
+ "Number of Tomosynthesis Source Images", "NumberOfTomosynthesisSourceImages", "IS", "1" }, { Tag(0x0018, 0x1500),
+ "Positioner Motion", "PositionerMotion", "CS", "1" }, { Tag(0x0018, 0x1508),
+ "Positioner Type", "PositionerType", "CS", "1" }, { Tag(0x0018, 0x1510),
+ "Positioner Primary Angle", "PositionerPrimaryAngle", "DS", "1" }, { Tag(0x0018, 0x1511),
+ "Positioner Secondary Angle", "PositionerSecondaryAngle", "DS", "1" }, { Tag(0x0018, 0x1520),
+ "Positioner Primary Angle Increment", "PositionerPrimaryAngleIncrement", "DS", "1-n" }, { Tag(0x0018, 0x1521),
+ "Positioner Secondary Angle Increment", "PositionerSecondaryAngleIncrement", "DS", "1-n" }, { Tag(0x0018, 0x1530),
+ "Detector Primary Angle", "DetectorPrimaryAngle", "DS", "1" }, { Tag(0x0018, 0x1531),
+ "Detector Secondary Angle", "DetectorSecondaryAngle", "DS", "1" }, { Tag(0x0018, 0x1600),
+ "Shutter Shape", "ShutterShape", "CS", "1-3" }, { Tag(0x0018, 0x1602),
+ "Shutter Left Vertical Edge", "ShutterLeftVerticalEdge", "IS", "1" }, { Tag(0x0018, 0x1604),
+ "Shutter Right Vertical Edge", "ShutterRightVerticalEdge", "IS", "1" }, { Tag(0x0018, 0x1606),
+ "Shutter Upper Horizontal Edge", "ShutterUpperHorizontalEdge", "IS", "1" }, { Tag(0x0018, 0x1608),
+ "Shutter Lower Horizontal Edge", "ShutterLowerHorizontalEdge", "IS", "1" }, { Tag(0x0018, 0x1610),
+ "Center of Circular Shutter", "CenterOfCircularShutter", "IS", "2" }, { Tag(0x0018, 0x1612),
+ "Radius of Circular Shutter", "RadiusOfCircularShutter", "IS", "1" }, { Tag(0x0018, 0x1620),
+ "Vertices of the Polygonal Shutter", "VerticesOfThePolygonalShutter", "IS", "2-2n" }, { Tag(0x0018, 0x1622),
+ "Shutter Presentation Value", "ShutterPresentationValue", "US", "1" }, { Tag(0x0018, 0x1623),
+ "Shutter Overlay Group", "ShutterOverlayGroup", "US", "1" }, { Tag(0x0018, 0x1624),
+ "Shutter Presentation Color CIELab Value", "ShutterPresentationColorCIELabValue", "US", "3" }, { Tag(0x0018, 0x1700),
+ "Collimator Shape", "CollimatorShape", "CS", "1-3" }, { Tag(0x0018, 0x1702),
+ "Collimator Left Vertical Edge", "CollimatorLeftVerticalEdge", "IS", "1" }, { Tag(0x0018, 0x1704),
+ "Collimator Right Vertical Edge", "CollimatorRightVerticalEdge", "IS", "1" }, { Tag(0x0018, 0x1706),
+ "Collimator Upper Horizontal Edge", "CollimatorUpperHorizontalEdge", "IS", "1" }, { Tag(0x0018, 0x1708),
+ "Collimator Lower Horizontal Edge", "CollimatorLowerHorizontalEdge", "IS", "1" }, { Tag(0x0018, 0x1710),
+ "Center of Circular Collimator", "CenterOfCircularCollimator", "IS", "2" }, { Tag(0x0018, 0x1712),
+ "Radius of Circular Collimator", "RadiusOfCircularCollimator", "IS", "1" }, { Tag(0x0018, 0x1720),
+ "Vertices of the Polygonal Collimator", "VerticesOfThePolygonalCollimator", "IS", "2-2n" }, { Tag(0x0018, 0x1800),
+ "Acquisition Time Synchronized", "AcquisitionTimeSynchronized", "CS", "1" }, { Tag(0x0018, 0x1801),
+ "Time Source", "TimeSource", "SH", "1" }, { Tag(0x0018, 0x1802),
+ "Time Distribution Protocol", "TimeDistributionProtocol", "CS", "1" }, { Tag(0x0018, 0x1803),
+ "NTP Source Address", "NTPSourceAddress", "LO", "1" }, { Tag(0x0018, 0x2001),
+ "Page Number Vector", "PageNumberVector", "IS", "1-n" }, { Tag(0x0018, 0x2002),
+ "Frame Label Vector", "FrameLabelVector", "SH", "1-n" }, { Tag(0x0018, 0x2003),
+ "Frame Primary Angle Vector", "FramePrimaryAngleVector", "DS", "1-n" }, { Tag(0x0018, 0x2004),
+ "Frame Secondary Angle Vector", "FrameSecondaryAngleVector", "DS", "1-n" }, { Tag(0x0018, 0x2005),
+ "Slice Location Vector", "SliceLocationVector", "DS", "1-n" }, { Tag(0x0018, 0x2006),
+ "Display Window Label Vector", "DisplayWindowLabelVector", "SH", "1-n" }, { Tag(0x0018, 0x2010),
+ "Nominal Scanned Pixel Spacing", "NominalScannedPixelSpacing", "DS", "2" }, { Tag(0x0018, 0x2020),
+ "Digitizing Device Transport Direction", "DigitizingDeviceTransportDirection", "CS", "1" }, { Tag(0x0018, 0x2030),
+ "Rotation of Scanned Film", "RotationOfScannedFilm", "DS", "1" }, { Tag(0x0018, 0x2041),
+ "Biopsy Target Sequence", "BiopsyTargetSequence", "SQ", "1" }, { Tag(0x0018, 0x2042),
+ "Target UID", "TargetUID", "UI", "1" }, { Tag(0x0018, 0x2043),
+ "Localizing Cursor Position", "LocalizingCursorPosition", "FL", "2" }, { Tag(0x0018, 0x2044),
+ "Calculated Target Position", "CalculatedTargetPosition", "FL", "3" }, { Tag(0x0018, 0x2045),
+ "Target Label", "TargetLabel", "SH", "1" }, { Tag(0x0018, 0x2046),
+ "Displayed Z Value", "DisplayedZValue", "FL", "1" }, { Tag(0x0018, 0x3100),
+ "IVUS Acquisition", "IVUSAcquisition", "CS", "1" }, { Tag(0x0018, 0x3101),
+ "IVUS Pullback Rate", "IVUSPullbackRate", "DS", "1" }, { Tag(0x0018, 0x3102),
+ "IVUS Gated Rate", "IVUSGatedRate", "DS", "1" }, { Tag(0x0018, 0x3103),
+ "IVUS Pullback Start Frame Number", "IVUSPullbackStartFrameNumber", "IS", "1" }, { Tag(0x0018, 0x3104),
+ "IVUS Pullback Stop Frame Number", "IVUSPullbackStopFrameNumber", "IS", "1" }, { Tag(0x0018, 0x3105),
+ "Lesion Number", "LesionNumber", "IS", "1-n" }, { Tag(0x0018, 0x4000),
+ "Acquisition Comments", "AcquisitionComments", "LT", "1" }, { Tag(0x0018, 0x5000),
+ "Output Power", "OutputPower", "SH", "1-n" }, { Tag(0x0018, 0x5010),
+ "Transducer Data", "TransducerData", "LO", "1-n" }, { Tag(0x0018, 0x5012),
+ "Focus Depth", "FocusDepth", "DS", "1" }, { Tag(0x0018, 0x5020),
+ "Processing Function", "ProcessingFunction", "LO", "1" }, { Tag(0x0018, 0x5021),
+ "Postprocessing Function", "PostprocessingFunction", "LO", "1" }, { Tag(0x0018, 0x5022),
+ "Mechanical Index", "MechanicalIndex", "DS", "1" }, { Tag(0x0018, 0x5024),
+ "Bone Thermal Index", "BoneThermalIndex", "DS", "1" }, { Tag(0x0018, 0x5026),
+ "Cranial Thermal Index", "CranialThermalIndex", "DS", "1" }, { Tag(0x0018, 0x5027),
+ "Soft Tissue Thermal Index", "SoftTissueThermalIndex", "DS", "1" }, { Tag(0x0018, 0x5028),
+ "Soft Tissue-focus Thermal Index", "SoftTissueFocusThermalIndex", "DS", "1" }, { Tag(0x0018, 0x5029),
+ "Soft Tissue-surface Thermal Index", "SoftTissueSurfaceThermalIndex", "DS", "1" }, { Tag(0x0018, 0x5030),
+ "Dynamic Range", "DynamicRange", "DS", "1" }, { Tag(0x0018, 0x5040),
+ "Total Gain", "TotalGain", "DS", "1" }, { Tag(0x0018, 0x5050),
+ "Depth of Scan Field", "DepthOfScanField", "IS", "1" }, { Tag(0x0018, 0x5100),
+ "Patient Position", "PatientPosition", "CS", "1" }, { Tag(0x0018, 0x5101),
+ "View Position", "ViewPosition", "CS", "1" }, { Tag(0x0018, 0x5104),
+ "Projection Eponymous Name Code Sequence", "ProjectionEponymousNameCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x5210),
+ "Image Transformation Matrix", "ImageTransformationMatrix", "DS", "6" }, { Tag(0x0018, 0x5212),
+ "Image Translation Vector", "ImageTranslationVector", "DS", "3" }, { Tag(0x0018, 0x6000),
+ "Sensitivity", "Sensitivity", "DS", "1" }, { Tag(0x0018, 0x6011),
+ "Sequence of Ultrasound Regions", "SequenceOfUltrasoundRegions", "SQ", "1" }, { Tag(0x0018, 0x6012),
+ "Region Spatial Format", "RegionSpatialFormat", "US", "1" }, { Tag(0x0018, 0x6014),
+ "Region Data Type", "RegionDataType", "US", "1" }, { Tag(0x0018, 0x6016),
+ "Region Flags", "RegionFlags", "UL", "1" }, { Tag(0x0018, 0x6018),
+ "Region Location Min X0", "RegionLocationMinX0", "UL", "1" }, { Tag(0x0018, 0x601a),
+ "Region Location Min Y0", "RegionLocationMinY0", "UL", "1" }, { Tag(0x0018, 0x601c),
+ "Region Location Max X1", "RegionLocationMaxX1", "UL", "1" }, { Tag(0x0018, 0x601e),
+ "Region Location Max Y1", "RegionLocationMaxY1", "UL", "1" }, { Tag(0x0018, 0x6020),
+ "Reference Pixel X0", "ReferencePixelX0", "SL", "1" }, { Tag(0x0018, 0x6022),
+ "Reference Pixel Y0", "ReferencePixelY0", "SL", "1" }, { Tag(0x0018, 0x6024),
+ "Physical Units X Direction", "PhysicalUnitsXDirection", "US", "1" }, { Tag(0x0018, 0x6026),
+ "Physical Units Y Direction", "PhysicalUnitsYDirection", "US", "1" }, { Tag(0x0018, 0x6028),
+ "Reference Pixel Physical Value X", "ReferencePixelPhysicalValueX", "FD", "1" }, { Tag(0x0018, 0x602a),
+ "Reference Pixel Physical Value Y", "ReferencePixelPhysicalValueY", "FD", "1" }, { Tag(0x0018, 0x602c),
+ "Physical Delta X", "PhysicalDeltaX", "FD", "1" }, { Tag(0x0018, 0x602e),
+ "Physical Delta Y", "PhysicalDeltaY", "FD", "1" }, { Tag(0x0018, 0x6030),
+ "Transducer Frequency", "TransducerFrequency", "UL", "1" }, { Tag(0x0018, 0x6031),
+ "Transducer Type", "TransducerType", "CS", "1" }, { Tag(0x0018, 0x6032),
+ "Pulse Repetition Frequency", "PulseRepetitionFrequency", "UL", "1" }, { Tag(0x0018, 0x6034),
+ "Doppler Correction Angle", "DopplerCorrectionAngle", "FD", "1" }, { Tag(0x0018, 0x6036),
+ "Steering Angle", "SteeringAngle", "FD", "1" }, { Tag(0x0018, 0x6038),
+ "Doppler Sample Volume X Position (Retired)", "DopplerSampleVolumeXPositionRetired", "UL", "1" }, { Tag(0x0018, 0x6039),
+ "Doppler Sample Volume X Position", "DopplerSampleVolumeXPosition", "SL", "1" }, { Tag(0x0018, 0x603a),
+ "Doppler Sample Volume Y Position (Retired)", "DopplerSampleVolumeYPositionRetired", "UL", "1" }, { Tag(0x0018, 0x603b),
+ "Doppler Sample Volume Y Position", "DopplerSampleVolumeYPosition", "SL", "1" }, { Tag(0x0018, 0x603c),
+ "TM-Line Position X0 (Retired)", "TMLinePositionX0Retired", "UL", "1" }, { Tag(0x0018, 0x603d),
+ "TM-Line Position X0", "TMLinePositionX0", "SL", "1" }, { Tag(0x0018, 0x603e),
+ "TM-Line Position Y0 (Retired)", "TMLinePositionY0Retired", "UL", "1" }, { Tag(0x0018, 0x603f),
+ "TM-Line Position Y0", "TMLinePositionY0", "SL", "1" }, { Tag(0x0018, 0x6040),
+ "TM-Line Position X1 (Retired)", "TMLinePositionX1Retired", "UL", "1" }, { Tag(0x0018, 0x6041),
+ "TM-Line Position X1", "TMLinePositionX1", "SL", "1" }, { Tag(0x0018, 0x6042),
+ "TM-Line Position Y1 (Retired)", "TMLinePositionY1Retired", "UL", "1" }, { Tag(0x0018, 0x6043),
+ "TM-Line Position Y1", "TMLinePositionY1", "SL", "1" }, { Tag(0x0018, 0x6044),
+ "Pixel Component Organization", "PixelComponentOrganization", "US", "1" }, { Tag(0x0018, 0x6046),
+ "Pixel Component Mask", "PixelComponentMask", "UL", "1" }, { Tag(0x0018, 0x6048),
+ "Pixel Component Range Start", "PixelComponentRangeStart", "UL", "1" }, { Tag(0x0018, 0x604a),
+ "Pixel Component Range Stop", "PixelComponentRangeStop", "UL", "1" }, { Tag(0x0018, 0x604c),
+ "Pixel Component Physical Units", "PixelComponentPhysicalUnits", "US", "1" }, { Tag(0x0018, 0x604e),
+ "Pixel Component Data Type", "PixelComponentDataType", "US", "1" }, { Tag(0x0018, 0x6050),
+ "Number of Table Break Points", "NumberOfTableBreakPoints", "UL", "1" }, { Tag(0x0018, 0x6052),
+ "Table of X Break Points", "TableOfXBreakPoints", "UL", "1-n" }, { Tag(0x0018, 0x6054),
+ "Table of Y Break Points", "TableOfYBreakPoints", "FD", "1-n" }, { Tag(0x0018, 0x6056),
+ "Number of Table Entries", "NumberOfTableEntries", "UL", "1" }, { Tag(0x0018, 0x6058),
+ "Table of Pixel Values", "TableOfPixelValues", "UL", "1-n" }, { Tag(0x0018, 0x605a),
+ "Table of Parameter Values", "TableOfParameterValues", "FL", "1-n" }, { Tag(0x0018, 0x6060),
+ "R Wave Time Vector", "RWaveTimeVector", "FL", "1-n" }, { Tag(0x0018, 0x7000),
+ "Detector Conditions Nominal Flag", "DetectorConditionsNominalFlag", "CS", "1" }, { Tag(0x0018, 0x7001),
+ "Detector Temperature", "DetectorTemperature", "DS", "1" }, { Tag(0x0018, 0x7004),
+ "Detector Type", "DetectorType", "CS", "1" }, { Tag(0x0018, 0x7005),
+ "Detector Configuration", "DetectorConfiguration", "CS", "1" }, { Tag(0x0018, 0x7006),
+ "Detector Description", "DetectorDescription", "LT", "1" }, { Tag(0x0018, 0x7008),
+ "Detector Mode", "DetectorMode", "LT", "1" }, { Tag(0x0018, 0x700a),
+ "Detector ID", "DetectorID", "SH", "1" }, { Tag(0x0018, 0x700c),
+ "Date of Last Detector Calibration", "DateOfLastDetectorCalibration", "DA", "1" }, { Tag(0x0018, 0x700e),
+ "Time of Last Detector Calibration", "TimeOfLastDetectorCalibration", "TM", "1" }, { Tag(0x0018, 0x7010),
+ "Exposures on Detector Since Last Calibration", "ExposuresOnDetectorSinceLastCalibration", "IS", "1" }, { Tag(0x0018, 0x7011),
+ "Exposures on Detector Since Manufactured", "ExposuresOnDetectorSinceManufactured", "IS", "1" }, { Tag(0x0018, 0x7012),
+ "Detector Time Since Last Exposure", "DetectorTimeSinceLastExposure", "DS", "1" }, { Tag(0x0018, 0x7014),
+ "Detector Active Time", "DetectorActiveTime", "DS", "1" }, { Tag(0x0018, 0x7016),
+ "Detector Activation Offset From Exposure", "DetectorActivationOffsetFromExposure", "DS", "1" }, { Tag(0x0018, 0x701a),
+ "Detector Binning", "DetectorBinning", "DS", "2" }, { Tag(0x0018, 0x7020),
+ "Detector Element Physical Size", "DetectorElementPhysicalSize", "DS", "2" }, { Tag(0x0018, 0x7022),
+ "Detector Element Spacing", "DetectorElementSpacing", "DS", "2" }, { Tag(0x0018, 0x7024),
+ "Detector Active Shape", "DetectorActiveShape", "CS", "1" }, { Tag(0x0018, 0x7026),
+ "Detector Active Dimension(s)", "DetectorActiveDimensions", "DS", "1-2" }, { Tag(0x0018, 0x7028),
+ "Detector Active Origin", "DetectorActiveOrigin", "DS", "2" }, { Tag(0x0018, 0x702a),
+ "Detector Manufacturer Name", "DetectorManufacturerName", "LO", "1" }, { Tag(0x0018, 0x702b),
+ "Detector Manufacturer's Model Name", "DetectorManufacturerModelName", "LO", "1" }, { Tag(0x0018, 0x7030),
+ "Field of View Origin", "FieldOfViewOrigin", "DS", "2" }, { Tag(0x0018, 0x7032),
+ "Field of View Rotation", "FieldOfViewRotation", "DS", "1" }, { Tag(0x0018, 0x7034),
+ "Field of View Horizontal Flip", "FieldOfViewHorizontalFlip", "CS", "1" }, { Tag(0x0018, 0x7036),
+ "Pixel Data Area Origin Relative To FOV", "PixelDataAreaOriginRelativeToFOV", "FL", "2" }, { Tag(0x0018, 0x7038),
+ "Pixel Data Area Rotation Angle Relative To FOV", "PixelDataAreaRotationAngleRelativeToFOV", "FL", "1" }, { Tag(0x0018, 0x7040),
+ "Grid Absorbing Material", "GridAbsorbingMaterial", "LT", "1" }, { Tag(0x0018, 0x7041),
+ "Grid Spacing Material", "GridSpacingMaterial", "LT", "1" }, { Tag(0x0018, 0x7042),
+ "Grid Thickness", "GridThickness", "DS", "1" }, { Tag(0x0018, 0x7044),
+ "Grid Pitch", "GridPitch", "DS", "1" }, { Tag(0x0018, 0x7046),
+ "Grid Aspect Ratio", "GridAspectRatio", "IS", "2" }, { Tag(0x0018, 0x7048),
+ "Grid Period", "GridPeriod", "DS", "1" }, { Tag(0x0018, 0x704c),
+ "Grid Focal Distance", "GridFocalDistance", "DS", "1" }, { Tag(0x0018, 0x7050),
+ "Filter Material", "FilterMaterial", "CS", "1-n" }, { Tag(0x0018, 0x7052),
+ "Filter Thickness Minimum", "FilterThicknessMinimum", "DS", "1-n" }, { Tag(0x0018, 0x7054),
+ "Filter Thickness Maximum", "FilterThicknessMaximum", "DS", "1-n" }, { Tag(0x0018, 0x7056),
+ "Filter Beam Path Length Minimum", "FilterBeamPathLengthMinimum", "FL", "1-n" }, { Tag(0x0018, 0x7058),
+ "Filter Beam Path Length Maximum", "FilterBeamPathLengthMaximum", "FL", "1-n" }, { Tag(0x0018, 0x7060),
+ "Exposure Control Mode", "ExposureControlMode", "CS", "1" }, { Tag(0x0018, 0x7062),
+ "Exposure Control Mode Description", "ExposureControlModeDescription", "LT", "1" }, { Tag(0x0018, 0x7064),
+ "Exposure Status", "ExposureStatus", "CS", "1" }, { Tag(0x0018, 0x7065),
+ "Phototimer Setting", "PhototimerSetting", "DS", "1" }, { Tag(0x0018, 0x8150),
+ "Exposure Time in uS", "ExposureTimeInuS", "DS", "1" }, { Tag(0x0018, 0x8151),
+ "X-Ray Tube Current in uA", "XRayTubeCurrentInuA", "DS", "1" }, { Tag(0x0018, 0x9004),
+ "Content Qualification", "ContentQualification", "CS", "1" }, { Tag(0x0018, 0x9005),
+ "Pulse Sequence Name", "PulseSequenceName", "SH", "1" }, { Tag(0x0018, 0x9006),
+ "MR Imaging Modifier Sequence", "MRImagingModifierSequence", "SQ", "1" }, { Tag(0x0018, 0x9008),
+ "Echo Pulse Sequence", "EchoPulseSequence", "CS", "1" }, { Tag(0x0018, 0x9009),
+ "Inversion Recovery", "InversionRecovery", "CS", "1" }, { Tag(0x0018, 0x9010),
+ "Flow Compensation", "FlowCompensation", "CS", "1" }, { Tag(0x0018, 0x9011),
+ "Multiple Spin Echo", "MultipleSpinEcho", "CS", "1" }, { Tag(0x0018, 0x9012),
+ "Multi-planar Excitation", "MultiPlanarExcitation", "CS", "1" }, { Tag(0x0018, 0x9014),
+ "Phase Contrast", "PhaseContrast", "CS", "1" }, { Tag(0x0018, 0x9015),
+ "Time of Flight Contrast", "TimeOfFlightContrast", "CS", "1" }, { Tag(0x0018, 0x9016),
+ "Spoiling", "Spoiling", "CS", "1" }, { Tag(0x0018, 0x9017),
+ "Steady State Pulse Sequence", "SteadyStatePulseSequence", "CS", "1" }, { Tag(0x0018, 0x9018),
+ "Echo Planar Pulse Sequence", "EchoPlanarPulseSequence", "CS", "1" }, { Tag(0x0018, 0x9019),
+ "Tag Angle First Axis", "TagAngleFirstAxis", "FD", "1" }, { Tag(0x0018, 0x9020),
+ "Magnetization Transfer", "MagnetizationTransfer", "CS", "1" }, { Tag(0x0018, 0x9021),
+ "T2 Preparation", "T2Preparation", "CS", "1" }, { Tag(0x0018, 0x9022),
+ "Blood Signal Nulling", "BloodSignalNulling", "CS", "1" }, { Tag(0x0018, 0x9024),
+ "Saturation Recovery", "SaturationRecovery", "CS", "1" }, { Tag(0x0018, 0x9025),
+ "Spectrally Selected Suppression", "SpectrallySelectedSuppression", "CS", "1" }, { Tag(0x0018, 0x9026),
+ "Spectrally Selected Excitation", "SpectrallySelectedExcitation", "CS", "1" }, { Tag(0x0018, 0x9027),
+ "Spatial Pre-saturation", "SpatialPresaturation", "CS", "1" }, { Tag(0x0018, 0x9028),
+ "Tagging", "Tagging", "CS", "1" }, { Tag(0x0018, 0x9029),
+ "Oversampling Phase", "OversamplingPhase", "CS", "1" }, { Tag(0x0018, 0x9030),
+ "Tag Spacing First Dimension", "TagSpacingFirstDimension", "FD", "1" }, { Tag(0x0018, 0x9032),
+ "Geometry of k-Space Traversal", "GeometryOfKSpaceTraversal", "CS", "1" }, { Tag(0x0018, 0x9033),
+ "Segmented k-Space Traversal", "SegmentedKSpaceTraversal", "CS", "1" }, { Tag(0x0018, 0x9034),
+ "Rectilinear Phase Encode Reordering", "RectilinearPhaseEncodeReordering", "CS", "1" }, { Tag(0x0018, 0x9035),
+ "Tag Thickness", "TagThickness", "FD", "1" }, { Tag(0x0018, 0x9036),
+ "Partial Fourier Direction", "PartialFourierDirection", "CS", "1" }, { Tag(0x0018, 0x9037),
+ "Cardiac Synchronization Technique", "CardiacSynchronizationTechnique", "CS", "1" }, { Tag(0x0018, 0x9041),
+ "Receive Coil Manufacturer Name", "ReceiveCoilManufacturerName", "LO", "1" }, { Tag(0x0018, 0x9042),
+ "MR Receive Coil Sequence", "MRReceiveCoilSequence", "SQ", "1" }, { Tag(0x0018, 0x9043),
+ "Receive Coil Type", "ReceiveCoilType", "CS", "1" }, { Tag(0x0018, 0x9044),
+ "Quadrature Receive Coil", "QuadratureReceiveCoil", "CS", "1" }, { Tag(0x0018, 0x9045),
+ "Multi-Coil Definition Sequence", "MultiCoilDefinitionSequence", "SQ", "1" }, { Tag(0x0018, 0x9046),
+ "Multi-Coil Configuration", "MultiCoilConfiguration", "LO", "1" }, { Tag(0x0018, 0x9047),
+ "Multi-Coil Element Name", "MultiCoilElementName", "SH", "1" }, { Tag(0x0018, 0x9048),
+ "Multi-Coil Element Used", "MultiCoilElementUsed", "CS", "1" }, { Tag(0x0018, 0x9049),
+ "MR Transmit Coil Sequence", "MRTransmitCoilSequence", "SQ", "1" }, { Tag(0x0018, 0x9050),
+ "Transmit Coil Manufacturer Name", "TransmitCoilManufacturerName", "LO", "1" }, { Tag(0x0018, 0x9051),
+ "Transmit Coil Type", "TransmitCoilType", "CS", "1" }, { Tag(0x0018, 0x9052),
+ "Spectral Width", "SpectralWidth", "FD", "1-2" }, { Tag(0x0018, 0x9053),
+ "Chemical Shift Reference", "ChemicalShiftReference", "FD", "1-2" }, { Tag(0x0018, 0x9054),
+ "Volume Localization Technique", "VolumeLocalizationTechnique", "CS", "1" }, { Tag(0x0018, 0x9058),
+ "MR Acquisition Frequency Encoding Steps", "MRAcquisitionFrequencyEncodingSteps", "US", "1" }, { Tag(0x0018, 0x9059),
+ "De-coupling", "Decoupling", "CS", "1" }, { Tag(0x0018, 0x9060),
+ "De-coupled Nucleus", "DecoupledNucleus", "CS", "1-2" }, { Tag(0x0018, 0x9061),
+ "De-coupling Frequency", "DecouplingFrequency", "FD", "1-2" }, { Tag(0x0018, 0x9062),
+ "De-coupling Method", "DecouplingMethod", "CS", "1" }, { Tag(0x0018, 0x9063),
+ "De-coupling Chemical Shift Reference", "DecouplingChemicalShiftReference", "FD", "1-2" }, { Tag(0x0018, 0x9064),
+ "k-space Filtering", "KSpaceFiltering", "CS", "1" }, { Tag(0x0018, 0x9065),
+ "Time Domain Filtering", "TimeDomainFiltering", "CS", "1-2" }, { Tag(0x0018, 0x9066),
+ "Number of Zero Fills", "NumberOfZeroFills", "US", "1-2" }, { Tag(0x0018, 0x9067),
+ "Baseline Correction", "BaselineCorrection", "CS", "1" }, { Tag(0x0018, 0x9069),
+ "Parallel Reduction Factor In-plane", "ParallelReductionFactorInPlane", "FD", "1" }, { Tag(0x0018, 0x9070),
+ "Cardiac R-R Interval Specified", "CardiacRRIntervalSpecified", "FD", "1" }, { Tag(0x0018, 0x9073),
+ "Acquisition Duration", "AcquisitionDuration", "FD", "1" }, { Tag(0x0018, 0x9074),
+ "Frame Acquisition DateTime", "FrameAcquisitionDateTime", "DT", "1" }, { Tag(0x0018, 0x9075),
+ "Diffusion Directionality", "DiffusionDirectionality", "CS", "1" }, { Tag(0x0018, 0x9076),
+ "Diffusion Gradient Direction Sequence", "DiffusionGradientDirectionSequence", "SQ", "1" }, { Tag(0x0018, 0x9077),
+ "Parallel Acquisition", "ParallelAcquisition", "CS", "1" }, { Tag(0x0018, 0x9078),
+ "Parallel Acquisition Technique", "ParallelAcquisitionTechnique", "CS", "1" }, { Tag(0x0018, 0x9079),
+ "Inversion Times", "InversionTimes", "FD", "1-n" }, { Tag(0x0018, 0x9080),
+ "Metabolite Map Description", "MetaboliteMapDescription", "ST", "1" }, { Tag(0x0018, 0x9081),
+ "Partial Fourier", "PartialFourier", "CS", "1" }, { Tag(0x0018, 0x9082),
+ "Effective Echo Time", "EffectiveEchoTime", "FD", "1" }, { Tag(0x0018, 0x9083),
+ "Metabolite Map Code Sequence", "MetaboliteMapCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x9084),
+ "Chemical Shift Sequence", "ChemicalShiftSequence", "SQ", "1" }, { Tag(0x0018, 0x9085),
+ "Cardiac Signal Source", "CardiacSignalSource", "CS", "1" }, { Tag(0x0018, 0x9087),
+ "Diffusion b-value", "DiffusionBValue", "FD", "1" }, { Tag(0x0018, 0x9089),
+ "Diffusion Gradient Orientation", "DiffusionGradientOrientation", "FD", "3" }, { Tag(0x0018, 0x9090),
+ "Velocity Encoding Direction", "VelocityEncodingDirection", "FD", "3" }, { Tag(0x0018, 0x9091),
+ "Velocity Encoding Minimum Value", "VelocityEncodingMinimumValue", "FD", "1" }, { Tag(0x0018, 0x9092),
+ "Velocity Encoding Acquisition Sequence", "VelocityEncodingAcquisitionSequence", "SQ", "1" }, { Tag(0x0018, 0x9093),
+ "Number of k-Space Trajectories", "NumberOfKSpaceTrajectories", "US", "1" }, { Tag(0x0018, 0x9094),
+ "Coverage of k-Space", "CoverageOfKSpace", "CS", "1" }, { Tag(0x0018, 0x9095),
+ "Spectroscopy Acquisition Phase Rows", "SpectroscopyAcquisitionPhaseRows", "UL", "1" }, { Tag(0x0018, 0x9096),
+ "Parallel Reduction Factor In-plane (Retired)", "ParallelReductionFactorInPlaneRetired", "FD", "1" }, { Tag(0x0018, 0x9098),
+ "Transmitter Frequency", "TransmitterFrequency", "FD", "1-2" }, { Tag(0x0018, 0x9100),
+ "Resonant Nucleus", "ResonantNucleus", "CS", "1-2" }, { Tag(0x0018, 0x9101),
+ "Frequency Correction", "FrequencyCorrection", "CS", "1" }, { Tag(0x0018, 0x9103),
+ "MR Spectroscopy FOV/Geometry Sequence", "MRSpectroscopyFOVGeometrySequence", "SQ", "1" }, { Tag(0x0018, 0x9104),
+ "Slab Thickness", "SlabThickness", "FD", "1" }, { Tag(0x0018, 0x9105),
+ "Slab Orientation", "SlabOrientation", "FD", "3" }, { Tag(0x0018, 0x9106),
+ "Mid Slab Position", "MidSlabPosition", "FD", "3" }, { Tag(0x0018, 0x9107),
+ "MR Spatial Saturation Sequence", "MRSpatialSaturationSequence", "SQ", "1" }, { Tag(0x0018, 0x9112),
+ "MR Timing and Related Parameters Sequence", "MRTimingAndRelatedParametersSequence", "SQ", "1" }, { Tag(0x0018, 0x9114),
+ "MR Echo Sequence", "MREchoSequence", "SQ", "1" }, { Tag(0x0018, 0x9115),
+ "MR Modifier Sequence", "MRModifierSequence", "SQ", "1" }, { Tag(0x0018, 0x9117),
+ "MR Diffusion Sequence", "MRDiffusionSequence", "SQ", "1" }, { Tag(0x0018, 0x9118),
+ "Cardiac Synchronization Sequence", "CardiacSynchronizationSequence", "SQ", "1" }, { Tag(0x0018, 0x9119),
+ "MR Averages Sequence", "MRAveragesSequence", "SQ", "1" }, { Tag(0x0018, 0x9125),
+ "MR FOV/Geometry Sequence", "MRFOVGeometrySequence", "SQ", "1" }, { Tag(0x0018, 0x9126),
+ "Volume Localization Sequence", "VolumeLocalizationSequence", "SQ", "1" }, { Tag(0x0018, 0x9127),
+ "Spectroscopy Acquisition Data Columns", "SpectroscopyAcquisitionDataColumns", "UL", "1" }, { Tag(0x0018, 0x9147),
+ "Diffusion Anisotropy Type", "DiffusionAnisotropyType", "CS", "1" }, { Tag(0x0018, 0x9151),
+ "Frame Reference DateTime", "FrameReferenceDateTime", "DT", "1" }, { Tag(0x0018, 0x9152),
+ "MR Metabolite Map Sequence", "MRMetaboliteMapSequence", "SQ", "1" }, { Tag(0x0018, 0x9155),
+ "Parallel Reduction Factor out-of-plane", "ParallelReductionFactorOutOfPlane", "FD", "1" }, { Tag(0x0018, 0x9159),
+ "Spectroscopy Acquisition Out-of-plane Phase Steps", "SpectroscopyAcquisitionOutOfPlanePhaseSteps", "UL", "1" }, { Tag(0x0018, 0x9166),
+ "Bulk Motion Status", "BulkMotionStatus", "CS", "1" }, { Tag(0x0018, 0x9168),
+ "Parallel Reduction Factor Second In-plane", "ParallelReductionFactorSecondInPlane", "FD", "1" }, { Tag(0x0018, 0x9169),
+ "Cardiac Beat Rejection Technique", "CardiacBeatRejectionTechnique", "CS", "1" }, { Tag(0x0018, 0x9170),
+ "Respiratory Motion Compensation Technique", "RespiratoryMotionCompensationTechnique", "CS", "1" }, { Tag(0x0018, 0x9171),
+ "Respiratory Signal Source", "RespiratorySignalSource", "CS", "1" }, { Tag(0x0018, 0x9172),
+ "Bulk Motion Compensation Technique", "BulkMotionCompensationTechnique", "CS", "1" }, { Tag(0x0018, 0x9173),
+ "Bulk Motion Signal Source", "BulkMotionSignalSource", "CS", "1" }, { Tag(0x0018, 0x9174),
+ "Applicable Safety Standard Agency", "ApplicableSafetyStandardAgency", "CS", "1" }, { Tag(0x0018, 0x9175),
+ "Applicable Safety Standard Description", "ApplicableSafetyStandardDescription", "LO", "1" }, { Tag(0x0018, 0x9176),
+ "Operating Mode Sequence", "OperatingModeSequence", "SQ", "1" }, { Tag(0x0018, 0x9177),
+ "Operating Mode Type", "OperatingModeType", "CS", "1" }, { Tag(0x0018, 0x9178),
+ "Operating Mode", "OperatingMode", "CS", "1" }, { Tag(0x0018, 0x9179),
+ "Specific Absorption Rate Definition", "SpecificAbsorptionRateDefinition", "CS", "1" }, { Tag(0x0018, 0x9180),
+ "Gradient Output Type", "GradientOutputType", "CS", "1" }, { Tag(0x0018, 0x9181),
+ "Specific Absorption Rate Value", "SpecificAbsorptionRateValue", "FD", "1" }, { Tag(0x0018, 0x9182),
+ "Gradient Output", "GradientOutput", "FD", "1" }, { Tag(0x0018, 0x9183),
+ "Flow Compensation Direction", "FlowCompensationDirection", "CS", "1" }, { Tag(0x0018, 0x9184),
+ "Tagging Delay", "TaggingDelay", "FD", "1" }, { Tag(0x0018, 0x9185),
+ "Respiratory Motion Compensation Technique Description", "RespiratoryMotionCompensationTechniqueDescription", "ST", "1" }, { Tag(0x0018, 0x9186),
+ "Respiratory Signal Source ID", "RespiratorySignalSourceID", "SH", "1" }, { Tag(0x0018, 0x9195),
+ "Chemical Shift Minimum Integration Limit in Hz", "ChemicalShiftMinimumIntegrationLimitInHz", "FD", "1" }, { Tag(0x0018, 0x9196),
+ "Chemical Shift Maximum Integration Limit in Hz", "ChemicalShiftMaximumIntegrationLimitInHz", "FD", "1" }, { Tag(0x0018, 0x9197),
+ "MR Velocity Encoding Sequence", "MRVelocityEncodingSequence", "SQ", "1" }, { Tag(0x0018, 0x9198),
+ "First Order Phase Correction", "FirstOrderPhaseCorrection", "CS", "1" }, { Tag(0x0018, 0x9199),
+ "Water Referenced Phase Correction", "WaterReferencedPhaseCorrection", "CS", "1" }, { Tag(0x0018, 0x9200),
+ "MR Spectroscopy Acquisition Type", "MRSpectroscopyAcquisitionType", "CS", "1" }, { Tag(0x0018, 0x9214),
+ "Respiratory Cycle Position", "RespiratoryCyclePosition", "CS", "1" }, { Tag(0x0018, 0x9217),
+ "Velocity Encoding Maximum Value", "VelocityEncodingMaximumValue", "FD", "1" }, { Tag(0x0018, 0x9218),
+ "Tag Spacing Second Dimension", "TagSpacingSecondDimension", "FD", "1" }, { Tag(0x0018, 0x9219),
+ "Tag Angle Second Axis", "TagAngleSecondAxis", "SS", "1" }, { Tag(0x0018, 0x9220),
+ "Frame Acquisition Duration", "FrameAcquisitionDuration", "FD", "1" }, { Tag(0x0018, 0x9226),
+ "MR Image Frame Type Sequence", "MRImageFrameTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9227),
+ "MR Spectroscopy Frame Type Sequence", "MRSpectroscopyFrameTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9231),
+ "MR Acquisition Phase Encoding Steps in-plane", "MRAcquisitionPhaseEncodingStepsInPlane", "US", "1" }, { Tag(0x0018, 0x9232),
+ "MR Acquisition Phase Encoding Steps out-of-plane", "MRAcquisitionPhaseEncodingStepsOutOfPlane", "US", "1" }, { Tag(0x0018, 0x9234),
+ "Spectroscopy Acquisition Phase Columns", "SpectroscopyAcquisitionPhaseColumns", "UL", "1" }, { Tag(0x0018, 0x9236),
+ "Cardiac Cycle Position", "CardiacCyclePosition", "CS", "1" }, { Tag(0x0018, 0x9239),
+ "Specific Absorption Rate Sequence", "SpecificAbsorptionRateSequence", "SQ", "1" }, { Tag(0x0018, 0x9240),
+ "RF Echo Train Length", "RFEchoTrainLength", "US", "1" }, { Tag(0x0018, 0x9241),
+ "Gradient Echo Train Length", "GradientEchoTrainLength", "US", "1" }, { Tag(0x0018, 0x9250),
+ "Arterial Spin Labeling Contrast", "ArterialSpinLabelingContrast", "CS", "1" }, { Tag(0x0018, 0x9251),
+ "MR Arterial Spin Labeling Sequence", "MRArterialSpinLabelingSequence", "SQ", "1" }, { Tag(0x0018, 0x9252),
+ "ASL Technique Description", "ASLTechniqueDescription", "LO", "1" }, { Tag(0x0018, 0x9253),
+ "ASL Slab Number", "ASLSlabNumber", "US", "1" }, { Tag(0x0018, 0x9254),
+ "ASL Slab Thickness", "ASLSlabThickness", "FD", "1" }, { Tag(0x0018, 0x9255),
+ "ASL Slab Orientation", "ASLSlabOrientation", "FD", "3" }, { Tag(0x0018, 0x9256),
+ "ASL Mid Slab Position", "ASLMidSlabPosition", "FD", "3" }, { Tag(0x0018, 0x9257),
+ "ASL Context", "ASLContext", "CS", "1" }, { Tag(0x0018, 0x9258),
+ "ASL Pulse Train Duration", "ASLPulseTrainDuration", "UL", "1" }, { Tag(0x0018, 0x9259),
+ "ASL Crusher Flag", "ASLCrusherFlag", "CS", "1" }, { Tag(0x0018, 0x925a),
+ "ASL Crusher Flow Limit", "ASLCrusherFlowLimit", "FD", "1" }, { Tag(0x0018, 0x925b),
+ "ASL Crusher Description", "ASLCrusherDescription", "LO", "1" }, { Tag(0x0018, 0x925c),
+ "ASL Bolus Cut-off Flag", "ASLBolusCutoffFlag", "CS", "1" }, { Tag(0x0018, 0x925d),
+ "ASL Bolus Cut-off Timing Sequence", "ASLBolusCutoffTimingSequence", "SQ", "1" }, { Tag(0x0018, 0x925e),
+ "ASL Bolus Cut-off Technique", "ASLBolusCutoffTechnique", "LO", "1" }, { Tag(0x0018, 0x925f),
+ "ASL Bolus Cut-off Delay Time", "ASLBolusCutoffDelayTime", "UL", "1" }, { Tag(0x0018, 0x9260),
+ "ASL Slab Sequence", "ASLSlabSequence", "SQ", "1" }, { Tag(0x0018, 0x9295),
+ "Chemical Shift Minimum Integration Limit in ppm", "ChemicalShiftMinimumIntegrationLimitInppm", "FD", "1" }, { Tag(0x0018, 0x9296),
+ "Chemical Shift Maximum Integration Limit in ppm", "ChemicalShiftMaximumIntegrationLimitInppm", "FD", "1" }, { Tag(0x0018, 0x9297),
+ "Water Reference Acquisition", "WaterReferenceAcquisition", "CS", "1" }, { Tag(0x0018, 0x9298),
+ "Echo Peak Position", "EchoPeakPosition", "IS", "1" }, { Tag(0x0018, 0x9301),
+ "CT Acquisition Type Sequence", "CTAcquisitionTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9302),
+ "Acquisition Type", "AcquisitionType", "CS", "1" }, { Tag(0x0018, 0x9303),
+ "Tube Angle", "TubeAngle", "FD", "1" }, { Tag(0x0018, 0x9304),
+ "CT Acquisition Details Sequence", "CTAcquisitionDetailsSequence", "SQ", "1" }, { Tag(0x0018, 0x9305),
+ "Revolution Time", "RevolutionTime", "FD", "1" }, { Tag(0x0018, 0x9306),
+ "Single Collimation Width", "SingleCollimationWidth", "FD", "1" }, { Tag(0x0018, 0x9307),
+ "Total Collimation Width", "TotalCollimationWidth", "FD", "1" }, { Tag(0x0018, 0x9308),
+ "CT Table Dynamics Sequence", "CTTableDynamicsSequence", "SQ", "1" }, { Tag(0x0018, 0x9309),
+ "Table Speed", "TableSpeed", "FD", "1" }, { Tag(0x0018, 0x9310),
+ "Table Feed per Rotation", "TableFeedPerRotation", "FD", "1" }, { Tag(0x0018, 0x9311),
+ "Spiral Pitch Factor", "SpiralPitchFactor", "FD", "1" }, { Tag(0x0018, 0x9312),
+ "CT Geometry Sequence", "CTGeometrySequence", "SQ", "1" }, { Tag(0x0018, 0x9313),
+ "Data Collection Center (Patient)", "DataCollectionCenterPatient", "FD", "3" }, { Tag(0x0018, 0x9314),
+ "CT Reconstruction Sequence", "CTReconstructionSequence", "SQ", "1" }, { Tag(0x0018, 0x9315),
+ "Reconstruction Algorithm", "ReconstructionAlgorithm", "CS", "1" }, { Tag(0x0018, 0x9316),
+ "Convolution Kernel Group", "ConvolutionKernelGroup", "CS", "1" }, { Tag(0x0018, 0x9317),
+ "Reconstruction Field of View", "ReconstructionFieldOfView", "FD", "2" }, { Tag(0x0018, 0x9318),
+ "Reconstruction Target Center (Patient)", "ReconstructionTargetCenterPatient", "FD", "3" }, { Tag(0x0018, 0x9319),
+ "Reconstruction Angle", "ReconstructionAngle", "FD", "1" }, { Tag(0x0018, 0x9320),
+ "Image Filter", "ImageFilter", "SH", "1" }, { Tag(0x0018, 0x9321),
+ "CT Exposure Sequence", "CTExposureSequence", "SQ", "1" }, { Tag(0x0018, 0x9322),
+ "Reconstruction Pixel Spacing", "ReconstructionPixelSpacing", "FD", "2" }, { Tag(0x0018, 0x9323),
+ "Exposure Modulation Type", "ExposureModulationType", "CS", "1" }, { Tag(0x0018, 0x9324),
+ "Estimated Dose Saving", "EstimatedDoseSaving", "FD", "1" }, { Tag(0x0018, 0x9325),
+ "CT X-Ray Details Sequence", "CTXRayDetailsSequence", "SQ", "1" }, { Tag(0x0018, 0x9326),
+ "CT Position Sequence", "CTPositionSequence", "SQ", "1" }, { Tag(0x0018, 0x9327),
+ "Table Position", "TablePosition", "FD", "1" }, { Tag(0x0018, 0x9328),
+ "Exposure Time in ms", "ExposureTimeInms", "FD", "1" }, { Tag(0x0018, 0x9329),
+ "CT Image Frame Type Sequence", "CTImageFrameTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9330),
+ "X-Ray Tube Current in mA", "XRayTubeCurrentInmA", "FD", "1" }, { Tag(0x0018, 0x9332),
+ "Exposure in mAs", "ExposureInmAs", "FD", "1" }, { Tag(0x0018, 0x9333),
+ "Constant Volume Flag", "ConstantVolumeFlag", "CS", "1" }, { Tag(0x0018, 0x9334),
+ "Fluoroscopy Flag", "FluoroscopyFlag", "CS", "1" }, { Tag(0x0018, 0x9335),
+ "Distance Source to Data Collection Center", "DistanceSourceToDataCollectionCenter", "FD", "1" }, { Tag(0x0018, 0x9337),
+ "Contrast/Bolus Agent Number", "ContrastBolusAgentNumber", "US", "1" }, { Tag(0x0018, 0x9338),
+ "Contrast/Bolus Ingredient Code Sequence", "ContrastBolusIngredientCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x9340),
+ "Contrast Administration Profile Sequence", "ContrastAdministrationProfileSequence", "SQ", "1" }, { Tag(0x0018, 0x9341),
+ "Contrast/Bolus Usage Sequence", "ContrastBolusUsageSequence", "SQ", "1" }, { Tag(0x0018, 0x9342),
+ "Contrast/Bolus Agent Administered", "ContrastBolusAgentAdministered", "CS", "1" }, { Tag(0x0018, 0x9343),
+ "Contrast/Bolus Agent Detected", "ContrastBolusAgentDetected", "CS", "1" }, { Tag(0x0018, 0x9344),
+ "Contrast/Bolus Agent Phase", "ContrastBolusAgentPhase", "CS", "1" }, { Tag(0x0018, 0x9345),
+ "CTDIvol", "CTDIvol", "FD", "1" }, { Tag(0x0018, 0x9346),
+ "CTDI Phantom Type Code Sequence", "CTDIPhantomTypeCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x9351),
+ "Calcium Scoring Mass Factor Patient", "CalciumScoringMassFactorPatient", "FL", "1" }, { Tag(0x0018, 0x9352),
+ "Calcium Scoring Mass Factor Device", "CalciumScoringMassFactorDevice", "FL", "3" }, { Tag(0x0018, 0x9353),
+ "Energy Weighting Factor", "EnergyWeightingFactor", "FL", "1" }, { Tag(0x0018, 0x9360),
+ "CT Additional X-Ray Source Sequence", "CTAdditionalXRaySourceSequence", "SQ", "1" }, { Tag(0x0018, 0x9401),
+ "Projection Pixel Calibration Sequence", "ProjectionPixelCalibrationSequence", "SQ", "1" }, { Tag(0x0018, 0x9402),
+ "Distance Source to Isocenter", "DistanceSourceToIsocenter", "FL", "1" }, { Tag(0x0018, 0x9403),
+ "Distance Object to Table Top", "DistanceObjectToTableTop", "FL", "1" }, { Tag(0x0018, 0x9404),
+ "Object Pixel Spacing in Center of Beam", "ObjectPixelSpacingInCenterOfBeam", "FL", "2" }, { Tag(0x0018, 0x9405),
+ "Positioner Position Sequence", "PositionerPositionSequence", "SQ", "1" }, { Tag(0x0018, 0x9406),
+ "Table Position Sequence", "TablePositionSequence", "SQ", "1" }, { Tag(0x0018, 0x9407),
+ "Collimator Shape Sequence", "CollimatorShapeSequence", "SQ", "1" }, { Tag(0x0018, 0x9410),
+ "Planes in Acquisition", "PlanesInAcquisition", "CS", "1" }, { Tag(0x0018, 0x9412),
+ "XA/XRF Frame Characteristics Sequence", "XAXRFFrameCharacteristicsSequence", "SQ", "1" }, { Tag(0x0018, 0x9417),
+ "Frame Acquisition Sequence", "FrameAcquisitionSequence", "SQ", "1" }, { Tag(0x0018, 0x9420),
+ "X-Ray Receptor Type", "XRayReceptorType", "CS", "1" }, { Tag(0x0018, 0x9423),
+ "Acquisition Protocol Name", "AcquisitionProtocolName", "LO", "1" }, { Tag(0x0018, 0x9424),
+ "Acquisition Protocol Description", "AcquisitionProtocolDescription", "LT", "1" }, { Tag(0x0018, 0x9425),
+ "Contrast/Bolus Ingredient Opaque", "ContrastBolusIngredientOpaque", "CS", "1" }, { Tag(0x0018, 0x9426),
+ "Distance Receptor Plane to Detector Housing", "DistanceReceptorPlaneToDetectorHousing", "FL", "1" }, { Tag(0x0018, 0x9427),
+ "Intensifier Active Shape", "IntensifierActiveShape", "CS", "1" }, { Tag(0x0018, 0x9428),
+ "Intensifier Active Dimension(s)", "IntensifierActiveDimensions", "FL", "1-2" }, { Tag(0x0018, 0x9429),
+ "Physical Detector Size", "PhysicalDetectorSize", "FL", "2" }, { Tag(0x0018, 0x9430),
+ "Position of Isocenter Projection", "PositionOfIsocenterProjection", "FL", "2" }, { Tag(0x0018, 0x9432),
+ "Field of View Sequence", "FieldOfViewSequence", "SQ", "1" }, { Tag(0x0018, 0x9433),
+ "Field of View Description", "FieldOfViewDescription", "LO", "1" }, { Tag(0x0018, 0x9434),
+ "Exposure Control Sensing Regions Sequence", "ExposureControlSensingRegionsSequence", "SQ", "1" }, { Tag(0x0018, 0x9435),
+ "Exposure Control Sensing Region Shape", "ExposureControlSensingRegionShape", "CS", "1" }, { Tag(0x0018, 0x9436),
+ "Exposure Control Sensing Region Left Vertical Edge", "ExposureControlSensingRegionLeftVerticalEdge", "SS", "1" }, { Tag(0x0018, 0x9437),
+ "Exposure Control Sensing Region Right Vertical Edge", "ExposureControlSensingRegionRightVerticalEdge", "SS", "1" }, { Tag(0x0018, 0x9438),
+ "Exposure Control Sensing Region Upper Horizontal Edge", "ExposureControlSensingRegionUpperHorizontalEdge", "SS", "1" }, { Tag(0x0018, 0x9439),
+ "Exposure Control Sensing Region Lower Horizontal Edge", "ExposureControlSensingRegionLowerHorizontalEdge", "SS", "1" }, { Tag(0x0018, 0x9440),
+ "Center of Circular Exposure Control Sensing Region", "CenterOfCircularExposureControlSensingRegion", "SS", "2" }, { Tag(0x0018, 0x9441),
+ "Radius of Circular Exposure Control Sensing Region", "RadiusOfCircularExposureControlSensingRegion", "US", "1" }, { Tag(0x0018, 0x9442),
+ "Vertices of the Polygonal Exposure Control Sensing Region", "VerticesOfThePolygonalExposureControlSensingRegion", "SS", "2-n" }, { Tag(0x0018, 0x9447),
+ "Column Angulation (Patient)", "ColumnAngulationPatient", "FL", "1" }, { Tag(0x0018, 0x9449),
+ "Beam Angle", "BeamAngle", "FL", "1" }, { Tag(0x0018, 0x9451),
+ "Frame Detector Parameters Sequence", "FrameDetectorParametersSequence", "SQ", "1" }, { Tag(0x0018, 0x9452),
+ "Calculated Anatomy Thickness", "CalculatedAnatomyThickness", "FL", "1" }, { Tag(0x0018, 0x9455),
+ "Calibration Sequence", "CalibrationSequence", "SQ", "1" }, { Tag(0x0018, 0x9456),
+ "Object Thickness Sequence", "ObjectThicknessSequence", "SQ", "1" }, { Tag(0x0018, 0x9457),
+ "Plane Identification", "PlaneIdentification", "CS", "1" }, { Tag(0x0018, 0x9461),
+ "Field of View Dimension(s) in Float", "FieldOfViewDimensionsInFloat", "FL", "1-2" }, { Tag(0x0018, 0x9462),
+ "Isocenter Reference System Sequence", "IsocenterReferenceSystemSequence", "SQ", "1" }, { Tag(0x0018, 0x9463),
+ "Positioner Isocenter Primary Angle", "PositionerIsocenterPrimaryAngle", "FL", "1" }, { Tag(0x0018, 0x9464),
+ "Positioner Isocenter Secondary Angle", "PositionerIsocenterSecondaryAngle", "FL", "1" }, { Tag(0x0018, 0x9465),
+ "Positioner Isocenter Detector Rotation Angle", "PositionerIsocenterDetectorRotationAngle", "FL", "1" }, { Tag(0x0018, 0x9466),
+ "Table X Position to Isocenter", "TableXPositionToIsocenter", "FL", "1" }, { Tag(0x0018, 0x9467),
+ "Table Y Position to Isocenter", "TableYPositionToIsocenter", "FL", "1" }, { Tag(0x0018, 0x9468),
+ "Table Z Position to Isocenter", "TableZPositionToIsocenter", "FL", "1" }, { Tag(0x0018, 0x9469),
+ "Table Horizontal Rotation Angle", "TableHorizontalRotationAngle", "FL", "1" }, { Tag(0x0018, 0x9470),
+ "Table Head Tilt Angle", "TableHeadTiltAngle", "FL", "1" }, { Tag(0x0018, 0x9471),
+ "Table Cradle Tilt Angle", "TableCradleTiltAngle", "FL", "1" }, { Tag(0x0018, 0x9472),
+ "Frame Display Shutter Sequence", "FrameDisplayShutterSequence", "SQ", "1" }, { Tag(0x0018, 0x9473),
+ "Acquired Image Area Dose Product", "AcquiredImageAreaDoseProduct", "FL", "1" }, { Tag(0x0018, 0x9474),
+ "C-arm Positioner Tabletop Relationship", "CArmPositionerTabletopRelationship", "CS", "1" }, { Tag(0x0018, 0x9476),
+ "X-Ray Geometry Sequence", "XRayGeometrySequence", "SQ", "1" }, { Tag(0x0018, 0x9477),
+ "Irradiation Event Identification Sequence", "IrradiationEventIdentificationSequence", "SQ", "1" }, { Tag(0x0018, 0x9504),
+ "X-Ray 3D Frame Type Sequence", "XRay3DFrameTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9506),
+ "Contributing Sources Sequence", "ContributingSourcesSequence", "SQ", "1" }, { Tag(0x0018, 0x9507),
+ "X-Ray 3D Acquisition Sequence", "XRay3DAcquisitionSequence", "SQ", "1" }, { Tag(0x0018, 0x9508),
+ "Primary Positioner Scan Arc", "PrimaryPositionerScanArc", "FL", "1" }, { Tag(0x0018, 0x9509),
+ "Secondary Positioner Scan Arc", "SecondaryPositionerScanArc", "FL", "1" }, { Tag(0x0018, 0x9510),
+ "Primary Positioner Scan Start Angle", "PrimaryPositionerScanStartAngle", "FL", "1" }, { Tag(0x0018, 0x9511),
+ "Secondary Positioner Scan Start Angle", "SecondaryPositionerScanStartAngle", "FL", "1" }, { Tag(0x0018, 0x9514),
+ "Primary Positioner Increment", "PrimaryPositionerIncrement", "FL", "1" }, { Tag(0x0018, 0x9515),
+ "Secondary Positioner Increment", "SecondaryPositionerIncrement", "FL", "1" }, { Tag(0x0018, 0x9516),
+ "Start Acquisition DateTime", "StartAcquisitionDateTime", "DT", "1" }, { Tag(0x0018, 0x9517),
+ "End Acquisition DateTime", "EndAcquisitionDateTime", "DT", "1" }, { Tag(0x0018, 0x9518),
+ "Primary Positioner Increment Sign", "PrimaryPositionerIncrementSign", "SS", "1" }, { Tag(0x0018, 0x9519),
+ "Secondary Positioner Increment Sign", "SecondaryPositionerIncrementSign", "SS", "1" }, { Tag(0x0018, 0x9524),
+ "Application Name", "ApplicationName", "LO", "1" }, { Tag(0x0018, 0x9525),
+ "Application Version", "ApplicationVersion", "LO", "1" }, { Tag(0x0018, 0x9526),
+ "Application Manufacturer", "ApplicationManufacturer", "LO", "1" }, { Tag(0x0018, 0x9527),
+ "Algorithm Type", "AlgorithmType", "CS", "1" }, { Tag(0x0018, 0x9528),
+ "Algorithm Description", "AlgorithmDescription", "LO", "1" }, { Tag(0x0018, 0x9530),
+ "X-Ray 3D Reconstruction Sequence", "XRay3DReconstructionSequence", "SQ", "1" }, { Tag(0x0018, 0x9531),
+ "Reconstruction Description", "ReconstructionDescription", "LO", "1" }, { Tag(0x0018, 0x9538),
+ "Per Projection Acquisition Sequence", "PerProjectionAcquisitionSequence", "SQ", "1" }, { Tag(0x0018, 0x9541),
+ "Detector Position Sequence", "DetectorPositionSequence", "SQ", "1" }, { Tag(0x0018, 0x9542),
+ "X-Ray Acquisition Dose Sequence", "XRayAcquisitionDoseSequence", "SQ", "1" }, { Tag(0x0018, 0x9543),
+ "X-Ray Source Isocenter Primary Angle", "XRaySourceIsocenterPrimaryAngle", "FD", "1" }, { Tag(0x0018, 0x9544),
+ "X-Ray Source Isocenter Secondary Angle", "XRaySourceIsocenterSecondaryAngle", "FD", "1" }, { Tag(0x0018, 0x9545),
+ "Breast Support Isocenter Primary Angle", "BreastSupportIsocenterPrimaryAngle", "FD", "1" }, { Tag(0x0018, 0x9546),
+ "Breast Support Isocenter Secondary Angle", "BreastSupportIsocenterSecondaryAngle", "FD", "1" }, { Tag(0x0018, 0x9547),
+ "Breast Support X Position to Isocenter", "BreastSupportXPositionToIsocenter", "FD", "1" }, { Tag(0x0018, 0x9548),
+ "Breast Support Y Position to Isocenter", "BreastSupportYPositionToIsocenter", "FD", "1" }, { Tag(0x0018, 0x9549),
+ "Breast Support Z Position to Isocenter", "BreastSupportZPositionToIsocenter", "FD", "1" }, { Tag(0x0018, 0x9550),
+ "Detector Isocenter Primary Angle", "DetectorIsocenterPrimaryAngle", "FD", "1" }, { Tag(0x0018, 0x9551),
+ "Detector Isocenter Secondary Angle", "DetectorIsocenterSecondaryAngle", "FD", "1" }, { Tag(0x0018, 0x9552),
+ "Detector X Position to Isocenter", "DetectorXPositionToIsocenter", "FD", "1" }, { Tag(0x0018, 0x9553),
+ "Detector Y Position to Isocenter", "DetectorYPositionToIsocenter", "FD", "1" }, { Tag(0x0018, 0x9554),
+ "Detector Z Position to Isocenter", "DetectorZPositionToIsocenter", "FD", "1" }, { Tag(0x0018, 0x9555),
+ "X-Ray Grid Sequence", "XRayGridSequence", "SQ", "1" }, { Tag(0x0018, 0x9556),
+ "X-Ray Filter Sequence", "XRayFilterSequence", "SQ", "1" }, { Tag(0x0018, 0x9557),
+ "Detector Active Area TLHC Position", "DetectorActiveAreaTLHCPosition", "FD", "3" }, { Tag(0x0018, 0x9558),
+ "Detector Active Area Orientation", "DetectorActiveAreaOrientation", "FD", "6" }, { Tag(0x0018, 0x9559),
+ "Positioner Primary Angle Direction", "PositionerPrimaryAngleDirection", "CS", "1" }, { Tag(0x0018, 0x9601),
+ "Diffusion b-matrix Sequence", "DiffusionBMatrixSequence", "SQ", "1" }, { Tag(0x0018, 0x9602),
+ "Diffusion b-value XX", "DiffusionBValueXX", "FD", "1" }, { Tag(0x0018, 0x9603),
+ "Diffusion b-value XY", "DiffusionBValueXY", "FD", "1" }, { Tag(0x0018, 0x9604),
+ "Diffusion b-value XZ", "DiffusionBValueXZ", "FD", "1" }, { Tag(0x0018, 0x9605),
+ "Diffusion b-value YY", "DiffusionBValueYY", "FD", "1" }, { Tag(0x0018, 0x9606),
+ "Diffusion b-value YZ", "DiffusionBValueYZ", "FD", "1" }, { Tag(0x0018, 0x9607),
+ "Diffusion b-value ZZ", "DiffusionBValueZZ", "FD", "1" }, { Tag(0x0018, 0x9621),
+ "Functional MR Sequence", "FunctionalMRSequence", "SQ", "1" }, { Tag(0x0018, 0x9622),
+ "Functional Settling Phase Frames Present", "FunctionalSettlingPhaseFramesPresent", "CS", "1" }, { Tag(0x0018, 0x9623),
+ "Functional Sync Pulse", "FunctionalSyncPulse", "DT", "1" }, { Tag(0x0018, 0x9624),
+ "Settling Phase Frame", "SettlingPhaseFrame", "CS", "1" }, { Tag(0x0018, 0x9701),
+ "Decay Correction DateTime", "DecayCorrectionDateTime", "DT", "1" }, { Tag(0x0018, 0x9715),
+ "Start Density Threshold", "StartDensityThreshold", "FD", "1" }, { Tag(0x0018, 0x9716),
+ "Start Relative Density Difference Threshold", "StartRelativeDensityDifferenceThreshold", "FD", "1" }, { Tag(0x0018, 0x9717),
+ "Start Cardiac Trigger Count Threshold", "StartCardiacTriggerCountThreshold", "FD", "1" }, { Tag(0x0018, 0x9718),
+ "Start Respiratory Trigger Count Threshold", "StartRespiratoryTriggerCountThreshold", "FD", "1" }, { Tag(0x0018, 0x9719),
+ "Termination Counts Threshold", "TerminationCountsThreshold", "FD", "1" }, { Tag(0x0018, 0x9720),
+ "Termination Density Threshold", "TerminationDensityThreshold", "FD", "1" }, { Tag(0x0018, 0x9721),
+ "Termination Relative Density Threshold", "TerminationRelativeDensityThreshold", "FD", "1" }, { Tag(0x0018, 0x9722),
+ "Termination Time Threshold", "TerminationTimeThreshold", "FD", "1" }, { Tag(0x0018, 0x9723),
+ "Termination Cardiac Trigger Count Threshold", "TerminationCardiacTriggerCountThreshold", "FD", "1" }, { Tag(0x0018, 0x9724),
+ "Termination Respiratory Trigger Count Threshold", "TerminationRespiratoryTriggerCountThreshold", "FD", "1" }, { Tag(0x0018, 0x9725),
+ "Detector Geometry", "DetectorGeometry", "CS", "1" }, { Tag(0x0018, 0x9726),
+ "Transverse Detector Separation", "TransverseDetectorSeparation", "FD", "1" }, { Tag(0x0018, 0x9727),
+ "Axial Detector Dimension", "AxialDetectorDimension", "FD", "1" }, { Tag(0x0018, 0x9729),
+ "Radiopharmaceutical Agent Number", "RadiopharmaceuticalAgentNumber", "US", "1" }, { Tag(0x0018, 0x9732),
+ "PET Frame Acquisition Sequence", "PETFrameAcquisitionSequence", "SQ", "1" }, { Tag(0x0018, 0x9733),
+ "PET Detector Motion Details Sequence", "PETDetectorMotionDetailsSequence", "SQ", "1" }, { Tag(0x0018, 0x9734),
+ "PET Table Dynamics Sequence", "PETTableDynamicsSequence", "SQ", "1" }, { Tag(0x0018, 0x9735),
+ "PET Position Sequence", "PETPositionSequence", "SQ", "1" }, { Tag(0x0018, 0x9736),
+ "PET Frame Correction Factors Sequence", "PETFrameCorrectionFactorsSequence", "SQ", "1" }, { Tag(0x0018, 0x9737),
+ "Radiopharmaceutical Usage Sequence", "RadiopharmaceuticalUsageSequence", "SQ", "1" }, { Tag(0x0018, 0x9738),
+ "Attenuation Correction Source", "AttenuationCorrectionSource", "CS", "1" }, { Tag(0x0018, 0x9739),
+ "Number of Iterations", "NumberOfIterations", "US", "1" }, { Tag(0x0018, 0x9740),
+ "Number of Subsets", "NumberOfSubsets", "US", "1" }, { Tag(0x0018, 0x9749),
+ "PET Reconstruction Sequence", "PETReconstructionSequence", "SQ", "1" }, { Tag(0x0018, 0x9751),
+ "PET Frame Type Sequence", "PETFrameTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9755),
+ "Time of Flight Information Used", "TimeOfFlightInformationUsed", "CS", "1" }, { Tag(0x0018, 0x9756),
+ "Reconstruction Type", "ReconstructionType", "CS", "1" }, { Tag(0x0018, 0x9758),
+ "Decay Corrected", "DecayCorrected", "CS", "1" }, { Tag(0x0018, 0x9759),
+ "Attenuation Corrected", "AttenuationCorrected", "CS", "1" }, { Tag(0x0018, 0x9760),
+ "Scatter Corrected", "ScatterCorrected", "CS", "1" }, { Tag(0x0018, 0x9761),
+ "Dead Time Corrected", "DeadTimeCorrected", "CS", "1" }, { Tag(0x0018, 0x9762),
+ "Gantry Motion Corrected", "GantryMotionCorrected", "CS", "1" }, { Tag(0x0018, 0x9763),
+ "Patient Motion Corrected", "PatientMotionCorrected", "CS", "1" }, { Tag(0x0018, 0x9764),
+ "Count Loss Normalization Corrected", "CountLossNormalizationCorrected", "CS", "1" }, { Tag(0x0018, 0x9765),
+ "Randoms Corrected", "RandomsCorrected", "CS", "1" }, { Tag(0x0018, 0x9766),
+ "Non-uniform Radial Sampling Corrected", "NonUniformRadialSamplingCorrected", "CS", "1" }, { Tag(0x0018, 0x9767),
+ "Sensitivity Calibrated", "SensitivityCalibrated", "CS", "1" }, { Tag(0x0018, 0x9768),
+ "Detector Normalization Correction", "DetectorNormalizationCorrection", "CS", "1" }, { Tag(0x0018, 0x9769),
+ "Iterative Reconstruction Method", "IterativeReconstructionMethod", "CS", "1" }, { Tag(0x0018, 0x9770),
+ "Attenuation Correction Temporal Relationship", "AttenuationCorrectionTemporalRelationship", "CS", "1" }, { Tag(0x0018, 0x9771),
+ "Patient Physiological State Sequence", "PatientPhysiologicalStateSequence", "SQ", "1" }, { Tag(0x0018, 0x9772),
+ "Patient Physiological State Code Sequence", "PatientPhysiologicalStateCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x9801),
+ "Depth(s) of Focus", "DepthsOfFocus", "FD", "1-n" }, { Tag(0x0018, 0x9803),
+ "Excluded Intervals Sequence", "ExcludedIntervalsSequence", "SQ", "1" }, { Tag(0x0018, 0x9804),
+ "Exclusion Start DateTime", "ExclusionStartDateTime", "DT", "1" }, { Tag(0x0018, 0x9805),
+ "Exclusion Duration", "ExclusionDuration", "FD", "1" }, { Tag(0x0018, 0x9806),
+ "US Image Description Sequence", "USImageDescriptionSequence", "SQ", "1" }, { Tag(0x0018, 0x9807),
+ "Image Data Type Sequence", "ImageDataTypeSequence", "SQ", "1" }, { Tag(0x0018, 0x9808),
+ "Data Type", "DataType", "CS", "1" }, { Tag(0x0018, 0x9809),
+ "Transducer Scan Pattern Code Sequence", "TransducerScanPatternCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x980b),
+ "Aliased Data Type", "AliasedDataType", "CS", "1" }, { Tag(0x0018, 0x980c),
+ "Position Measuring Device Used", "PositionMeasuringDeviceUsed", "CS", "1" }, { Tag(0x0018, 0x980d),
+ "Transducer Geometry Code Sequence", "TransducerGeometryCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x980e),
+ "Transducer Beam Steering Code Sequence", "TransducerBeamSteeringCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x980f),
+ "Transducer Application Code Sequence", "TransducerApplicationCodeSequence", "SQ", "1" }, { Tag(0x0018, 0x9810),
+ "Zero Velocity Pixel Value", "ZeroVelocityPixelValue", "US or SS", "1" }, { Tag(0x0018, 0xa001),
+ "Contributing Equipment Sequence", "ContributingEquipmentSequence", "SQ", "1" }, { Tag(0x0018, 0xa002),
+ "Contribution DateTime", "ContributionDateTime", "DT", "1" }, { Tag(0x0018, 0xa003),
+ "Contribution Description", "ContributionDescription", "ST", "1" }, { Tag(0x0020, 0x000d),
+ "Study Instance UID", "StudyInstanceUID", "UI", "1" }, { Tag(0x0020, 0x000e),
+ "Series Instance UID", "SeriesInstanceUID", "UI", "1" }, { Tag(0x0020, 0x0010),
+ "Study ID", "StudyID", "SH", "1" }, { Tag(0x0020, 0x0011),
+ "Series Number", "SeriesNumber", "IS", "1" }, { Tag(0x0020, 0x0012),
+ "Acquisition Number", "AcquisitionNumber", "IS", "1" }, { Tag(0x0020, 0x0013),
+ "Instance Number", "InstanceNumber", "IS", "1" }, { Tag(0x0020, 0x0014),
+ "Isotope Number", "IsotopeNumber", "IS", "1" }, { Tag(0x0020, 0x0015),
+ "Phase Number", "PhaseNumber", "IS", "1" }, { Tag(0x0020, 0x0016),
+ "Interval Number", "IntervalNumber", "IS", "1" }, { Tag(0x0020, 0x0017),
+ "Time Slot Number", "TimeSlotNumber", "IS", "1" }, { Tag(0x0020, 0x0018),
+ "Angle Number", "AngleNumber", "IS", "1" }, { Tag(0x0020, 0x0019),
+ "Item Number", "ItemNumber", "IS", "1" }, { Tag(0x0020, 0x0020),
+ "Patient Orientation", "PatientOrientation", "CS", "2" }, { Tag(0x0020, 0x0022),
+ "Overlay Number", "OverlayNumber", "IS", "1" }, { Tag(0x0020, 0x0024),
+ "Curve Number", "CurveNumber", "IS", "1" }, { Tag(0x0020, 0x0026),
+ "LUT Number", "LUTNumber", "IS", "1" }, { Tag(0x0020, 0x0030),
+ "Image Position", "ImagePosition", "DS", "3" }, { Tag(0x0020, 0x0032),
+ "Image Position (Patient)", "ImagePositionPatient", "DS", "3" }, { Tag(0x0020, 0x0035),
+ "Image Orientation", "ImageOrientation", "DS", "6" }, { Tag(0x0020, 0x0037),
+ "Image Orientation (Patient)", "ImageOrientationPatient", "DS", "6" }, { Tag(0x0020, 0x0050),
+ "Location", "Location", "DS", "1" }, { Tag(0x0020, 0x0052),
+ "Frame of Reference UID", "FrameOfReferenceUID", "UI", "1" }, { Tag(0x0020, 0x0060),
+ "Laterality", "Laterality", "CS", "1" }, { Tag(0x0020, 0x0062),
+ "Image Laterality", "ImageLaterality", "CS", "1" }, { Tag(0x0020, 0x0070),
+ "Image Geometry Type", "ImageGeometryType", "LO", "1" }, { Tag(0x0020, 0x0080),
+ "Masking Image", "MaskingImage", "CS", "1-n" }, { Tag(0x0020, 0x00aa),
+ "Report Number", "ReportNumber", "IS", "1" }, { Tag(0x0020, 0x0100),
+ "Temporal Position Identifier", "TemporalPositionIdentifier", "IS", "1" }, { Tag(0x0020, 0x0105),
+ "Number of Temporal Positions", "NumberOfTemporalPositions", "IS", "1" }, { Tag(0x0020, 0x0110),
+ "Temporal Resolution", "TemporalResolution", "DS", "1" }, { Tag(0x0020, 0x0200),
+ "Synchronization Frame of Reference UID", "SynchronizationFrameOfReferenceUID", "UI", "1" }, { Tag(0x0020, 0x0242),
+ "SOP Instance UID of Concatenation Source", "SOPInstanceUIDOfConcatenationSource", "UI", "1" }, { Tag(0x0020, 0x1000),
+ "Series in Study", "SeriesInStudy", "IS", "1" }, { Tag(0x0020, 0x1001),
+ "Acquisitions in Series", "AcquisitionsInSeries", "IS", "1" }, { Tag(0x0020, 0x1002),
+ "Images in Acquisition", "ImagesInAcquisition", "IS", "1" }, { Tag(0x0020, 0x1003),
+ "Images in Series", "ImagesInSeries", "IS", "1" }, { Tag(0x0020, 0x1004),
+ "Acquisitions in Study", "AcquisitionsInStudy", "IS", "1" }, { Tag(0x0020, 0x1005),
+ "Images in Study", "ImagesInStudy", "IS", "1" }, { Tag(0x0020, 0x1020),
+ "Reference", "Reference", "LO", "1-n" }, { Tag(0x0020, 0x1040),
+ "Position Reference Indicator", "PositionReferenceIndicator", "LO", "1" }, { Tag(0x0020, 0x1041),
+ "Slice Location", "SliceLocation", "DS", "1" }, { Tag(0x0020, 0x1070),
+ "Other Study Numbers", "OtherStudyNumbers", "IS", "1-n" }, { Tag(0x0020, 0x1200),
+ "Number of Patient Related Studies", "NumberOfPatientRelatedStudies", "IS", "1" }, { Tag(0x0020, 0x1202),
+ "Number of Patient Related Series", "NumberOfPatientRelatedSeries", "IS", "1" }, { Tag(0x0020, 0x1204),
+ "Number of Patient Related Instances", "NumberOfPatientRelatedInstances", "IS", "1" }, { Tag(0x0020, 0x1206),
+ "Number of Study Related Series", "NumberOfStudyRelatedSeries", "IS", "1" }, { Tag(0x0020, 0x1208),
+ "Number of Study Related Instances", "NumberOfStudyRelatedInstances", "IS", "1" }, { Tag(0x0020, 0x1209),
+ "Number of Series Related Instances", "NumberOfSeriesRelatedInstances", "IS", "1" }, { Tag(0x0020, 0x3401),
+ "Modifying Device ID", "ModifyingDeviceID", "CS", "1" }, { Tag(0x0020, 0x3402),
+ "Modified Image ID", "ModifiedImageID", "CS", "1" }, { Tag(0x0020, 0x3403),
+ "Modified Image Date", "ModifiedImageDate", "DA", "1" }, { Tag(0x0020, 0x3404),
+ "Modifying Device Manufacturer", "ModifyingDeviceManufacturer", "LO", "1" }, { Tag(0x0020, 0x3405),
+ "Modified Image Time", "ModifiedImageTime", "TM", "1" }, { Tag(0x0020, 0x3406),
+ "Modified Image Description", "ModifiedImageDescription", "LO", "1" }, { Tag(0x0020, 0x4000),
+ "Image Comments", "ImageComments", "LT", "1" }, { Tag(0x0020, 0x5000),
+ "Original Image Identification", "OriginalImageIdentification", "AT", "1-n" }, { Tag(0x0020, 0x5002),
+ "Original Image Identification Nomenclature", "OriginalImageIdentificationNomenclature", "LO", "1-n" }, { Tag(0x0020, 0x9056),
+ "Stack ID", "StackID", "SH", "1" }, { Tag(0x0020, 0x9057),
+ "In-Stack Position Number", "InStackPositionNumber", "UL", "1" }, { Tag(0x0020, 0x9071),
+ "Frame Anatomy Sequence", "FrameAnatomySequence", "SQ", "1" }, { Tag(0x0020, 0x9072),
+ "Frame Laterality", "FrameLaterality", "CS", "1" }, { Tag(0x0020, 0x9111),
+ "Frame Content Sequence", "FrameContentSequence", "SQ", "1" }, { Tag(0x0020, 0x9113),
+ "Plane Position Sequence", "PlanePositionSequence", "SQ", "1" }, { Tag(0x0020, 0x9116),
+ "Plane Orientation Sequence", "PlaneOrientationSequence", "SQ", "1" }, { Tag(0x0020, 0x9128),
+ "Temporal Position Index", "TemporalPositionIndex", "UL", "1" }, { Tag(0x0020, 0x9153),
+ "Nominal Cardiac Trigger Delay Time", "NominalCardiacTriggerDelayTime", "FD", "1" }, { Tag(0x0020, 0x9154),
+ "Nominal Cardiac Trigger Time Prior To R-Peak", "NominalCardiacTriggerTimePriorToRPeak", "FL", "1" }, { Tag(0x0020, 0x9155),
+ "Actual Cardiac Trigger Time Prior To R-Peak", "ActualCardiacTriggerTimePriorToRPeak", "FL", "1" }, { Tag(0x0020, 0x9156),
+ "Frame Acquisition Number", "FrameAcquisitionNumber", "US", "1" }, { Tag(0x0020, 0x9157),
+ "Dimension Index Values", "DimensionIndexValues", "UL", "1-n" }, { Tag(0x0020, 0x9158),
+ "Frame Comments", "FrameComments", "LT", "1" }, { Tag(0x0020, 0x9161),
+ "Concatenation UID", "ConcatenationUID", "UI", "1" }, { Tag(0x0020, 0x9162),
+ "In-concatenation Number", "InConcatenationNumber", "US", "1" }, { Tag(0x0020, 0x9163),
+ "In-concatenation Total Number", "InConcatenationTotalNumber", "US", "1" }, { Tag(0x0020, 0x9164),
+ "Dimension Organization UID", "DimensionOrganizationUID", "UI", "1" }, { Tag(0x0020, 0x9165),
+ "Dimension Index Pointer", "DimensionIndexPointer", "AT", "1" }, { Tag(0x0020, 0x9167),
+ "Functional Group Pointer", "FunctionalGroupPointer", "AT", "1" }, { Tag(0x0020, 0x9170),
+ "Unassigned Shared Converted Attributes Sequence", "UnassignedSharedConvertedAttributesSequence", "SQ", "1" }, { Tag(0x0020, 0x9171),
+ "Unassigned Per-Frame Converted Attributes Sequence", "UnassignedPerFrameConvertedAttributesSequence", "SQ", "1" }, { Tag(0x0020, 0x9172),
+ "Conversion Source Attributes Sequence", "ConversionSourceAttributesSequence", "SQ", "1" }, { Tag(0x0020, 0x9213),
+ "Dimension Index Private Creator", "DimensionIndexPrivateCreator", "LO", "1" }, { Tag(0x0020, 0x9221),
+ "Dimension Organization Sequence", "DimensionOrganizationSequence", "SQ", "1" }, { Tag(0x0020, 0x9222),
+ "Dimension Index Sequence", "DimensionIndexSequence", "SQ", "1" }, { Tag(0x0020, 0x9228),
+ "Concatenation Frame Offset Number", "ConcatenationFrameOffsetNumber", "UL", "1" }, { Tag(0x0020, 0x9238),
+ "Functional Group Private Creator", "FunctionalGroupPrivateCreator", "LO", "1" }, { Tag(0x0020, 0x9241),
+ "Nominal Percentage of Cardiac Phase", "NominalPercentageOfCardiacPhase", "FL", "1" }, { Tag(0x0020, 0x9245),
+ "Nominal Percentage of Respiratory Phase", "NominalPercentageOfRespiratoryPhase", "FL", "1" }, { Tag(0x0020, 0x9246),
+ "Starting Respiratory Amplitude", "StartingRespiratoryAmplitude", "FL", "1" }, { Tag(0x0020, 0x9247),
+ "Starting Respiratory Phase", "StartingRespiratoryPhase", "CS", "1" }, { Tag(0x0020, 0x9248),
+ "Ending Respiratory Amplitude", "EndingRespiratoryAmplitude", "FL", "1" }, { Tag(0x0020, 0x9249),
+ "Ending Respiratory Phase", "EndingRespiratoryPhase", "CS", "1" }, { Tag(0x0020, 0x9250),
+ "Respiratory Trigger Type", "RespiratoryTriggerType", "CS", "1" }, { Tag(0x0020, 0x9251),
+ "R-R Interval Time Nominal", "RRIntervalTimeNominal", "FD", "1" }, { Tag(0x0020, 0x9252),
+ "Actual Cardiac Trigger Delay Time", "ActualCardiacTriggerDelayTime", "FD", "1" }, { Tag(0x0020, 0x9253),
+ "Respiratory Synchronization Sequence", "RespiratorySynchronizationSequence", "SQ", "1" }, { Tag(0x0020, 0x9254),
+ "Respiratory Interval Time", "RespiratoryIntervalTime", "FD", "1" }, { Tag(0x0020, 0x9255),
+ "Nominal Respiratory Trigger Delay Time", "NominalRespiratoryTriggerDelayTime", "FD", "1" }, { Tag(0x0020, 0x9256),
+ "Respiratory Trigger Delay Threshold", "RespiratoryTriggerDelayThreshold", "FD", "1" }, { Tag(0x0020, 0x9257),
+ "Actual Respiratory Trigger Delay Time", "ActualRespiratoryTriggerDelayTime", "FD", "1" }, { Tag(0x0020, 0x9301),
+ "Image Position (Volume)", "ImagePositionVolume", "FD", "3" }, { Tag(0x0020, 0x9302),
+ "Image Orientation (Volume)", "ImageOrientationVolume", "FD", "6" }, { Tag(0x0020, 0x9307),
+ "Ultrasound Acquisition Geometry", "UltrasoundAcquisitionGeometry", "CS", "1" }, { Tag(0x0020, 0x9308),
+ "Apex Position", "ApexPosition", "FD", "3" }, { Tag(0x0020, 0x9309),
+ "Volume to Transducer Mapping Matrix", "VolumeToTransducerMappingMatrix", "FD", "16" }, { Tag(0x0020, 0x930a),
+ "Volume to Table Mapping Matrix", "VolumeToTableMappingMatrix", "FD", "16" }, { Tag(0x0020, 0x930b),
+ "Volume to Transducer Relationship", "VolumeToTransducerRelationship", "CS", "1" }, { Tag(0x0020, 0x930c),
+ "Patient Frame of Reference Source", "PatientFrameOfReferenceSource", "CS", "1" }, { Tag(0x0020, 0x930d),
+ "Temporal Position Time Offset", "TemporalPositionTimeOffset", "FD", "1" }, { Tag(0x0020, 0x930e),
+ "Plane Position (Volume) Sequence", "PlanePositionVolumeSequence", "SQ", "1" }, { Tag(0x0020, 0x930f),
+ "Plane Orientation (Volume) Sequence", "PlaneOrientationVolumeSequence", "SQ", "1" }, { Tag(0x0020, 0x9310),
+ "Temporal Position Sequence", "TemporalPositionSequence", "SQ", "1" }, { Tag(0x0020, 0x9311),
+ "Dimension Organization Type", "DimensionOrganizationType", "CS", "1" }, { Tag(0x0020, 0x9312),
+ "Volume Frame of Reference UID", "VolumeFrameOfReferenceUID", "UI", "1" }, { Tag(0x0020, 0x9313),
+ "Table Frame of Reference UID", "TableFrameOfReferenceUID", "UI", "1" }, { Tag(0x0020, 0x9421),
+ "Dimension Description Label", "DimensionDescriptionLabel", "LO", "1" }, { Tag(0x0020, 0x9450),
+ "Patient Orientation in Frame Sequence", "PatientOrientationInFrameSequence", "SQ", "1" }, { Tag(0x0020, 0x9453),
+ "Frame Label", "FrameLabel", "LO", "1" }, { Tag(0x0020, 0x9518),
+ "Acquisition Index", "AcquisitionIndex", "US", "1-n" }, { Tag(0x0020, 0x9529),
+ "Contributing SOP Instances Reference Sequence", "ContributingSOPInstancesReferenceSequence", "SQ", "1" }, { Tag(0x0020, 0x9536),
+ "Reconstruction Index", "ReconstructionIndex", "US", "1" }, { Tag(0x0022, 0x0001),
+ "Light Path Filter Pass-Through Wavelength", "LightPathFilterPassThroughWavelength", "US", "1" }, { Tag(0x0022, 0x0002),
+ "Light Path Filter Pass Band", "LightPathFilterPassBand", "US", "2" }, { Tag(0x0022, 0x0003),
+ "Image Path Filter Pass-Through Wavelength", "ImagePathFilterPassThroughWavelength", "US", "1" }, { Tag(0x0022, 0x0004),
+ "Image Path Filter Pass Band", "ImagePathFilterPassBand", "US", "2" }, { Tag(0x0022, 0x0005),
+ "Patient Eye Movement Commanded", "PatientEyeMovementCommanded", "CS", "1" }, { Tag(0x0022, 0x0006),
+ "Patient Eye Movement Command Code Sequence", "PatientEyeMovementCommandCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x0007),
+ "Spherical Lens Power", "SphericalLensPower", "FL", "1" }, { Tag(0x0022, 0x0008),
+ "Cylinder Lens Power", "CylinderLensPower", "FL", "1" }, { Tag(0x0022, 0x0009),
+ "Cylinder Axis", "CylinderAxis", "FL", "1" }, { Tag(0x0022, 0x000a),
+ "Emmetropic Magnification", "EmmetropicMagnification", "FL", "1" }, { Tag(0x0022, 0x000b),
+ "Intra Ocular Pressure", "IntraOcularPressure", "FL", "1" }, { Tag(0x0022, 0x000c),
+ "Horizontal Field of View", "HorizontalFieldOfView", "FL", "1" }, { Tag(0x0022, 0x000d),
+ "Pupil Dilated", "PupilDilated", "CS", "1" }, { Tag(0x0022, 0x000e),
+ "Degree of Dilation", "DegreeOfDilation", "FL", "1" }, { Tag(0x0022, 0x0010),
+ "Stereo Baseline Angle", "StereoBaselineAngle", "FL", "1" }, { Tag(0x0022, 0x0011),
+ "Stereo Baseline Displacement", "StereoBaselineDisplacement", "FL", "1" }, { Tag(0x0022, 0x0012),
+ "Stereo Horizontal Pixel Offset", "StereoHorizontalPixelOffset", "FL", "1" }, { Tag(0x0022, 0x0013),
+ "Stereo Vertical Pixel Offset", "StereoVerticalPixelOffset", "FL", "1" }, { Tag(0x0022, 0x0014),
+ "Stereo Rotation", "StereoRotation", "FL", "1" }, { Tag(0x0022, 0x0015),
+ "Acquisition Device Type Code Sequence", "AcquisitionDeviceTypeCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x0016),
+ "Illumination Type Code Sequence", "IlluminationTypeCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x0017),
+ "Light Path Filter Type Stack Code Sequence", "LightPathFilterTypeStackCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x0018),
+ "Image Path Filter Type Stack Code Sequence", "ImagePathFilterTypeStackCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x0019),
+ "Lenses Code Sequence", "LensesCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x001a),
+ "Channel Description Code Sequence", "ChannelDescriptionCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x001b),
+ "Refractive State Sequence", "RefractiveStateSequence", "SQ", "1" }, { Tag(0x0022, 0x001c),
+ "Mydriatic Agent Code Sequence", "MydriaticAgentCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x001d),
+ "Relative Image Position Code Sequence", "RelativeImagePositionCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x001e),
+ "Camera Angle of View", "CameraAngleOfView", "FL", "1" }, { Tag(0x0022, 0x0020),
+ "Stereo Pairs Sequence", "StereoPairsSequence", "SQ", "1" }, { Tag(0x0022, 0x0021),
+ "Left Image Sequence", "LeftImageSequence", "SQ", "1" }, { Tag(0x0022, 0x0022),
+ "Right Image Sequence", "RightImageSequence", "SQ", "1" }, { Tag(0x0022, 0x0028),
+ "Stereo Pairs Present", "StereoPairsPresent", "CS", "1" }, { Tag(0x0022, 0x0030),
+ "Axial Length of the Eye", "AxialLengthOfTheEye", "FL", "1" }, { Tag(0x0022, 0x0031),
+ "Ophthalmic Frame Location Sequence", "OphthalmicFrameLocationSequence", "SQ", "1" }, { Tag(0x0022, 0x0032),
+ "Reference Coordinates", "ReferenceCoordinates", "FL", "2-2n" }, { Tag(0x0022, 0x0035),
+ "Depth Spatial Resolution", "DepthSpatialResolution", "FL", "1" }, { Tag(0x0022, 0x0036),
+ "Maximum Depth Distortion", "MaximumDepthDistortion", "FL", "1" }, { Tag(0x0022, 0x0037),
+ "Along-scan Spatial Resolution", "AlongScanSpatialResolution", "FL", "1" }, { Tag(0x0022, 0x0038),
+ "Maximum Along-scan Distortion", "MaximumAlongScanDistortion", "FL", "1" }, { Tag(0x0022, 0x0039),
+ "Ophthalmic Image Orientation", "OphthalmicImageOrientation", "CS", "1" }, { Tag(0x0022, 0x0041),
+ "Depth of Transverse Image", "DepthOfTransverseImage", "FL", "1" }, { Tag(0x0022, 0x0042),
+ "Mydriatic Agent Concentration Units Sequence", "MydriaticAgentConcentrationUnitsSequence", "SQ", "1" }, { Tag(0x0022, 0x0048),
+ "Across-scan Spatial Resolution", "AcrossScanSpatialResolution", "FL", "1" }, { Tag(0x0022, 0x0049),
+ "Maximum Across-scan Distortion", "MaximumAcrossScanDistortion", "FL", "1" }, { Tag(0x0022, 0x004e),
+ "Mydriatic Agent Concentration", "MydriaticAgentConcentration", "DS", "1" }, { Tag(0x0022, 0x0055),
+ "Illumination Wave Length", "IlluminationWaveLength", "FL", "1" }, { Tag(0x0022, 0x0056),
+ "Illumination Power", "IlluminationPower", "FL", "1" }, { Tag(0x0022, 0x0057),
+ "Illumination Bandwidth", "IlluminationBandwidth", "FL", "1" }, { Tag(0x0022, 0x0058),
+ "Mydriatic Agent Sequence", "MydriaticAgentSequence", "SQ", "1" }, { Tag(0x0022, 0x1007),
+ "Ophthalmic Axial Measurements Right Eye Sequence", "OphthalmicAxialMeasurementsRightEyeSequence", "SQ", "1" }, { Tag(0x0022, 0x1008),
+ "Ophthalmic Axial Measurements Left Eye Sequence", "OphthalmicAxialMeasurementsLeftEyeSequence", "SQ", "1" }, { Tag(0x0022, 0x1009),
+ "Ophthalmic Axial Measurements Device Type", "OphthalmicAxialMeasurementsDeviceType", "CS", "1" }, { Tag(0x0022, 0x1010),
+ "Ophthalmic Axial Length Measurements Type", "OphthalmicAxialLengthMeasurementsType", "CS", "1" }, { Tag(0x0022, 0x1012),
+ "Ophthalmic Axial Length Sequence", "OphthalmicAxialLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1019),
+ "Ophthalmic Axial Length", "OphthalmicAxialLength", "FL", "1" }, { Tag(0x0022, 0x1024),
+ "Lens Status Code Sequence", "LensStatusCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1025),
+ "Vitreous Status Code Sequence", "VitreousStatusCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1028),
+ "IOL Formula Code Sequence", "IOLFormulaCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1029),
+ "IOL Formula Detail", "IOLFormulaDetail", "LO", "1" }, { Tag(0x0022, 0x1033),
+ "Keratometer Index", "KeratometerIndex", "FL", "1" }, { Tag(0x0022, 0x1035),
+ "Source of Ophthalmic Axial Length Code Sequence", "SourceOfOphthalmicAxialLengthCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1037),
+ "Target Refraction", "TargetRefraction", "FL", "1" }, { Tag(0x0022, 0x1039),
+ "Refractive Procedure Occurred", "RefractiveProcedureOccurred", "CS", "1" }, { Tag(0x0022, 0x1040),
+ "Refractive Surgery Type Code Sequence", "RefractiveSurgeryTypeCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1044),
+ "Ophthalmic Ultrasound Method Code Sequence", "OphthalmicUltrasoundMethodCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1050),
+ "Ophthalmic Axial Length Measurements Sequence", "OphthalmicAxialLengthMeasurementsSequence", "SQ", "1" }, { Tag(0x0022, 0x1053),
+ "IOL Power", "IOLPower", "FL", "1" }, { Tag(0x0022, 0x1054),
+ "Predicted Refractive Error", "PredictedRefractiveError", "FL", "1" }, { Tag(0x0022, 0x1059),
+ "Ophthalmic Axial Length Velocity", "OphthalmicAxialLengthVelocity", "FL", "1" }, { Tag(0x0022, 0x1065),
+ "Lens Status Description", "LensStatusDescription", "LO", "1" }, { Tag(0x0022, 0x1066),
+ "Vitreous Status Description", "VitreousStatusDescription", "LO", "1" }, { Tag(0x0022, 0x1090),
+ "IOL Power Sequence", "IOLPowerSequence", "SQ", "1" }, { Tag(0x0022, 0x1092),
+ "Lens Constant Sequence", "LensConstantSequence", "SQ", "1" }, { Tag(0x0022, 0x1093),
+ "IOL Manufacturer", "IOLManufacturer", "LO", "1" }, { Tag(0x0022, 0x1094),
+ "Lens Constant Description", "LensConstantDescription", "LO", "1" }, { Tag(0x0022, 0x1095),
+ "Implant Name", "ImplantName", "LO", "1" }, { Tag(0x0022, 0x1096),
+ "Keratometry Measurement Type Code Sequence", "KeratometryMeasurementTypeCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1097),
+ "Implant Part Number", "ImplantPartNumber", "LO", "1" }, { Tag(0x0022, 0x1100),
+ "Referenced Ophthalmic Axial Measurements Sequence", "ReferencedOphthalmicAxialMeasurementsSequence", "SQ", "1" }, { Tag(0x0022, 0x1101),
+ "Ophthalmic Axial Length Measurements Segment Name Code Sequence", "OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1103),
+ "Refractive Error Before Refractive Surgery Code Sequence", "RefractiveErrorBeforeRefractiveSurgeryCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1121),
+ "IOL Power For Exact Emmetropia", "IOLPowerForExactEmmetropia", "FL", "1" }, { Tag(0x0022, 0x1122),
+ "IOL Power For Exact Target Refraction", "IOLPowerForExactTargetRefraction", "FL", "1" }, { Tag(0x0022, 0x1125),
+ "Anterior Chamber Depth Definition Code Sequence", "AnteriorChamberDepthDefinitionCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1127),
+ "Lens Thickness Sequence", "LensThicknessSequence", "SQ", "1" }, { Tag(0x0022, 0x1128),
+ "Anterior Chamber Depth Sequence", "AnteriorChamberDepthSequence", "SQ", "1" }, { Tag(0x0022, 0x1130),
+ "Lens Thickness", "LensThickness", "FL", "1" }, { Tag(0x0022, 0x1131),
+ "Anterior Chamber Depth", "AnteriorChamberDepth", "FL", "1" }, { Tag(0x0022, 0x1132),
+ "Source of Lens Thickness Data Code Sequence", "SourceOfLensThicknessDataCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1133),
+ "Source of Anterior Chamber Depth Data Code Sequence", "SourceOfAnteriorChamberDepthDataCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1134),
+ "Source of Refractive Measurements Sequence", "SourceOfRefractiveMeasurementsSequence", "SQ", "1" }, { Tag(0x0022, 0x1135),
+ "Source of Refractive Measurements Code Sequence", "SourceOfRefractiveMeasurementsCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1140),
+ "Ophthalmic Axial Length Measurement Modified", "OphthalmicAxialLengthMeasurementModified", "CS", "1" }, { Tag(0x0022, 0x1150),
+ "Ophthalmic Axial Length Data Source Code Sequence", "OphthalmicAxialLengthDataSourceCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1153),
+ "Ophthalmic Axial Length Acquisition Method Code Sequence", "OphthalmicAxialLengthAcquisitionMethodCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1155),
+ "Signal to Noise Ratio", "SignalToNoiseRatio", "FL", "1" }, { Tag(0x0022, 0x1159),
+ "Ophthalmic Axial Length Data Source Description", "OphthalmicAxialLengthDataSourceDescription", "LO", "1" }, { Tag(0x0022, 0x1210),
+ "Ophthalmic Axial Length Measurements Total Length Sequence", "OphthalmicAxialLengthMeasurementsTotalLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1211),
+ "Ophthalmic Axial Length Measurements Segmental Length Sequence", "OphthalmicAxialLengthMeasurementsSegmentalLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1212),
+ "Ophthalmic Axial Length Measurements Length Summation Sequence", "OphthalmicAxialLengthMeasurementsLengthSummationSequence", "SQ", "1" }, { Tag(0x0022, 0x1220),
+ "Ultrasound Ophthalmic Axial Length Measurements Sequence", "UltrasoundOphthalmicAxialLengthMeasurementsSequence", "SQ", "1" }, { Tag(0x0022, 0x1225),
+ "Optical Ophthalmic Axial Length Measurements Sequence", "OpticalOphthalmicAxialLengthMeasurementsSequence", "SQ", "1" }, { Tag(0x0022, 0x1230),
+ "Ultrasound Selected Ophthalmic Axial Length Sequence", "UltrasoundSelectedOphthalmicAxialLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1250),
+ "Ophthalmic Axial Length Selection Method Code Sequence", "OphthalmicAxialLengthSelectionMethodCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1255),
+ "Optical Selected Ophthalmic Axial Length Sequence", "OpticalSelectedOphthalmicAxialLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1257),
+ "Selected Segmental Ophthalmic Axial Length Sequence", "SelectedSegmentalOphthalmicAxialLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1260),
+ "Selected Total Ophthalmic Axial Length Sequence", "SelectedTotalOphthalmicAxialLengthSequence", "SQ", "1" }, { Tag(0x0022, 0x1262),
+ "Ophthalmic Axial Length Quality Metric Sequence", "OphthalmicAxialLengthQualityMetricSequence", "SQ", "1" }, { Tag(0x0022, 0x1265),
+ "Ophthalmic Axial Length Quality Metric Type Code Sequence", "OphthalmicAxialLengthQualityMetricTypeCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1273),
+ "Ophthalmic Axial Length Quality Metric Type Description", "OphthalmicAxialLengthQualityMetricTypeDescription", "LO", "1" }, { Tag(0x0022, 0x1300),
+ "Intraocular Lens Calculations Right Eye Sequence", "IntraocularLensCalculationsRightEyeSequence", "SQ", "1" }, { Tag(0x0022, 0x1310),
+ "Intraocular Lens Calculations Left Eye Sequence", "IntraocularLensCalculationsLeftEyeSequence", "SQ", "1" }, { Tag(0x0022, 0x1330),
+ "Referenced Ophthalmic Axial Length Measurement QC Image Sequence", "ReferencedOphthalmicAxialLengthMeasurementQCImageSequence", "SQ", "1" }, { Tag(0x0022, 0x1415),
+ "Ophthalmic Mapping Device Type", "OphthalmicMappingDeviceType", "CS", "1" }, { Tag(0x0022, 0x1420),
+ "Acquisition Method Code Sequence", "AcquisitionMethodCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1423),
+ "Acquisition Method Algorithm Sequence", "AcquisitionMethodAlgorithmSequence", "SQ", "1" }, { Tag(0x0022, 0x1436),
+ "Ophthalmic Thickness Map Type Code Sequence", "OphthalmicThicknessMapTypeCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1443),
+ "Ophthalmic Thickness Mapping Normals Sequence", "OphthalmicThicknessMappingNormalsSequence", "SQ", "1" }, { Tag(0x0022, 0x1445),
+ "Retinal Thickness Definition Code Sequence", "RetinalThicknessDefinitionCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1450),
+ "Pixel Value Mapping to Coded Concept Sequence", "PixelValueMappingToCodedConceptSequence", "SQ", "1" }, { Tag(0x0022, 0x1452),
+ "Mapped Pixel Value", "MappedPixelValue", "US or SS", "1" }, { Tag(0x0022, 0x1454),
+ "Pixel Value Mapping Explanation", "PixelValueMappingExplanation", "LO", "1" }, { Tag(0x0022, 0x1458),
+ "Ophthalmic Thickness Map Quality Threshold Sequence", "OphthalmicThicknessMapQualityThresholdSequence", "SQ", "1" }, { Tag(0x0022, 0x1460),
+ "Ophthalmic Thickness Map Threshold Quality Rating", "OphthalmicThicknessMapThresholdQualityRating", "FL", "1" }, { Tag(0x0022, 0x1463),
+ "Anatomic Structure Reference Point", "AnatomicStructureReferencePoint", "FL", "2" }, { Tag(0x0022, 0x1465),
+ "Registration to Localizer Sequence", "RegistrationToLocalizerSequence", "SQ", "1" }, { Tag(0x0022, 0x1466),
+ "Registered Localizer Units", "RegisteredLocalizerUnits", "CS", "1" }, { Tag(0x0022, 0x1467),
+ "Registered Localizer Top Left Hand Corner", "RegisteredLocalizerTopLeftHandCorner", "FL", "2" }, { Tag(0x0022, 0x1468),
+ "Registered Localizer Bottom Right Hand Corner", "RegisteredLocalizerBottomRightHandCorner", "FL", "2" }, { Tag(0x0022, 0x1470),
+ "Ophthalmic Thickness Map Quality Rating Sequence", "OphthalmicThicknessMapQualityRatingSequence", "SQ", "1" }, { Tag(0x0022, 0x1472),
+ "Relevant OPT Attributes Sequence", "RelevantOPTAttributesSequence", "SQ", "1" }, { Tag(0x0022, 0x1512),
+ "Transformation Method Code Sequence", "TransformationMethodCodeSequence", "SQ", "1" }, { Tag(0x0022, 0x1513),
+ "Transformation Algorithm Sequence", "TransformationAlgorithmSequence", "SQ", "1" }, { Tag(0x0022, 0x1515),
+ "Ophthalmic Axial Length Method", "OphthalmicAxialLengthMethod", "CS", "1" }, { Tag(0x0022, 0x1517),
+ "Ophthalmic FOV", "OphthalmicFOV", "FL", "1" }, { Tag(0x0022, 0x1518),
+ "Two Dimensional to Three Dimensional Map Sequence", "TwoDimensionalToThreeDimensionalMapSequence", "SQ", "1" }, { Tag(0x0022, 0x1525),
+ "Wide Field Ophthalmic Photography Quality Rating Sequence", "WideFieldOphthalmicPhotographyQualityRatingSequence", "SQ", "1" }, { Tag(0x0022, 0x1526),
+ "Wide Field Ophthalmic Photography Quality Threshold Sequence", "WideFieldOphthalmicPhotographyQualityThresholdSequence", "SQ", "1" }, { Tag(0x0022, 0x1527),
+ "Wide Field Ophthalmic Photography Threshold Quality Rating", "WideFieldOphthalmicPhotographyThresholdQualityRating", "FL", "1" }, { Tag(0x0022, 0x1528),
+ "X Coordinates Center Pixel View Angle", "XCoordinatesCenterPixelViewAngle", "FL", "1" }, { Tag(0x0022, 0x1529),
+ "Y Coordinates Center Pixel View Angle", "YCoordinatesCenterPixelViewAngle", "FL", "1" }, { Tag(0x0022, 0x1530),
+ "Number of Map Points", "NumberOfMapPoints", "UL", "1" }, { Tag(0x0022, 0x1531),
+ "Two Dimensional to Three Dimensional Map Data", "TwoDimensionalToThreeDimensionalMapData", "OF", "1" }, { Tag(0x0024, 0x0010),
+ "Visual Field Horizontal Extent", "VisualFieldHorizontalExtent", "FL", "1" }, { Tag(0x0024, 0x0011),
+ "Visual Field Vertical Extent", "VisualFieldVerticalExtent", "FL", "1" }, { Tag(0x0024, 0x0012),
+ "Visual Field Shape", "VisualFieldShape", "CS", "1" }, { Tag(0x0024, 0x0016),
+ "Screening Test Mode Code Sequence", "ScreeningTestModeCodeSequence", "SQ", "1" }, { Tag(0x0024, 0x0018),
+ "Maximum Stimulus Luminance", "MaximumStimulusLuminance", "FL", "1" }, { Tag(0x0024, 0x0020),
+ "Background Luminance", "BackgroundLuminance", "FL", "1" }, { Tag(0x0024, 0x0021),
+ "Stimulus Color Code Sequence", "StimulusColorCodeSequence", "SQ", "1" }, { Tag(0x0024, 0x0024),
+ "Background Illumination Color Code Sequence", "BackgroundIlluminationColorCodeSequence", "SQ", "1" }, { Tag(0x0024, 0x0025),
+ "Stimulus Area", "StimulusArea", "FL", "1" }, { Tag(0x0024, 0x0028),
+ "Stimulus Presentation Time", "StimulusPresentationTime", "FL", "1" }, { Tag(0x0024, 0x0032),
+ "Fixation Sequence", "FixationSequence", "SQ", "1" }, { Tag(0x0024, 0x0033),
+ "Fixation Monitoring Code Sequence", "FixationMonitoringCodeSequence", "SQ", "1" }, { Tag(0x0024, 0x0034),
+ "Visual Field Catch Trial Sequence", "VisualFieldCatchTrialSequence", "SQ", "1" }, { Tag(0x0024, 0x0035),
+ "Fixation Checked Quantity", "FixationCheckedQuantity", "US", "1" }, { Tag(0x0024, 0x0036),
+ "Patient Not Properly Fixated Quantity", "PatientNotProperlyFixatedQuantity", "US", "1" }, { Tag(0x0024, 0x0037),
+ "Presented Visual Stimuli Data Flag", "PresentedVisualStimuliDataFlag", "CS", "1" }, { Tag(0x0024, 0x0038),
+ "Number of Visual Stimuli", "NumberOfVisualStimuli", "US", "1" }, { Tag(0x0024, 0x0039),
+ "Excessive Fixation Losses Data Flag", "ExcessiveFixationLossesDataFlag", "CS", "1" }, { Tag(0x0024, 0x0040),
+ "Excessive Fixation Losses", "ExcessiveFixationLosses", "CS", "1" }, { Tag(0x0024, 0x0042),
+ "Stimuli Retesting Quantity", "StimuliRetestingQuantity", "US", "1" }, { Tag(0x0024, 0x0044),
+ "Comments on Patient's Performance of Visual Field", "CommentsOnPatientPerformanceOfVisualField", "LT", "1" }, { Tag(0x0024, 0x0045),
+ "False Negatives Estimate Flag", "FalseNegativesEstimateFlag", "CS", "1" }, { Tag(0x0024, 0x0046),
+ "False Negatives Estimate", "FalseNegativesEstimate", "FL", "1" }, { Tag(0x0024, 0x0048),
+ "Negative Catch Trials Quantity", "NegativeCatchTrialsQuantity", "US", "1" }, { Tag(0x0024, 0x0050),
+ "False Negatives Quantity", "FalseNegativesQuantity", "US", "1" }, { Tag(0x0024, 0x0051),
+ "Excessive False Negatives Data Flag", "ExcessiveFalseNegativesDataFlag", "CS", "1" }, { Tag(0x0024, 0x0052),
+ "Excessive False Negatives", "ExcessiveFalseNegatives", "CS", "1" }, { Tag(0x0024, 0x0053),
+ "False Positives Estimate Flag", "FalsePositivesEstimateFlag", "CS", "1" }, { Tag(0x0024, 0x0054),
+ "False Positives Estimate", "FalsePositivesEstimate", "FL", "1" }, { Tag(0x0024, 0x0055),
+ "Catch Trials Data Flag", "CatchTrialsDataFlag", "CS", "1" }, { Tag(0x0024, 0x0056),
+ "Positive Catch Trials Quantity", "PositiveCatchTrialsQuantity", "US", "1" }, { Tag(0x0024, 0x0057),
+ "Test Point Normals Data Flag", "TestPointNormalsDataFlag", "CS", "1" }, { Tag(0x0024, 0x0058),
+ "Test Point Normals Sequence", "TestPointNormalsSequence", "SQ", "1" }, { Tag(0x0024, 0x0059),
+ "Global Deviation Probability Normals Flag", "GlobalDeviationProbabilityNormalsFlag", "CS", "1" }, { Tag(0x0024, 0x0060),
+ "False Positives Quantity", "FalsePositivesQuantity", "US", "1" }, { Tag(0x0024, 0x0061),
+ "Excessive False Positives Data Flag", "ExcessiveFalsePositivesDataFlag", "CS", "1" }, { Tag(0x0024, 0x0062),
+ "Excessive False Positives", "ExcessiveFalsePositives", "CS", "1" }, { Tag(0x0024, 0x0063),
+ "Visual Field Test Normals Flag", "VisualFieldTestNormalsFlag", "CS", "1" }, { Tag(0x0024, 0x0064),
+ "Results Normals Sequence", "ResultsNormalsSequence", "SQ", "1" }, { Tag(0x0024, 0x0065),
+ "Age Corrected Sensitivity Deviation Algorithm Sequence", "AgeCorrectedSensitivityDeviationAlgorithmSequence", "SQ", "1" }, { Tag(0x0024, 0x0066),
+ "Global Deviation From Normal", "GlobalDeviationFromNormal", "FL", "1" }, { Tag(0x0024, 0x0067),
+ "Generalized Defect Sensitivity Deviation Algorithm Sequence", "GeneralizedDefectSensitivityDeviationAlgorithmSequence", "SQ", "1" }, { Tag(0x0024, 0x0068),
+ "Localized Deviation From Normal", "LocalizedDeviationFromNormal", "FL", "1" }, { Tag(0x0024, 0x0069),
+ "Patient Reliability Indicator", "PatientReliabilityIndicator", "LO", "1" }, { Tag(0x0024, 0x0070),
+ "Visual Field Mean Sensitivity", "VisualFieldMeanSensitivity", "FL", "1" }, { Tag(0x0024, 0x0071),
+ "Global Deviation Probability", "GlobalDeviationProbability", "FL", "1" }, { Tag(0x0024, 0x0072),
+ "Local Deviation Probability Normals Flag", "LocalDeviationProbabilityNormalsFlag", "CS", "1" }, { Tag(0x0024, 0x0073),
+ "Localized Deviation Probability", "LocalizedDeviationProbability", "FL", "1" }, { Tag(0x0024, 0x0074),
+ "Short Term Fluctuation Calculated", "ShortTermFluctuationCalculated", "CS", "1" }, { Tag(0x0024, 0x0075),
+ "Short Term Fluctuation", "ShortTermFluctuation", "FL", "1" }, { Tag(0x0024, 0x0076),
+ "Short Term Fluctuation Probability Calculated", "ShortTermFluctuationProbabilityCalculated", "CS", "1" }, { Tag(0x0024, 0x0077),
+ "Short Term Fluctuation Probability", "ShortTermFluctuationProbability", "FL", "1" }, { Tag(0x0024, 0x0078),
+ "Corrected Localized Deviation From Normal Calculated", "CorrectedLocalizedDeviationFromNormalCalculated", "CS", "1" }, { Tag(0x0024, 0x0079),
+ "Corrected Localized Deviation From Normal", "CorrectedLocalizedDeviationFromNormal", "FL", "1" }, { Tag(0x0024, 0x0080),
+ "Corrected Localized Deviation From Normal Probability Calculated", "CorrectedLocalizedDeviationFromNormalProbabilityCalculated", "CS", "1" }, { Tag(0x0024, 0x0081),
+ "Corrected Localized Deviation From Normal Probability", "CorrectedLocalizedDeviationFromNormalProbability", "FL", "1" }, { Tag(0x0024, 0x0083),
+ "Global Deviation Probability Sequence", "GlobalDeviationProbabilitySequence", "SQ", "1" }, { Tag(0x0024, 0x0085),
+ "Localized Deviation Probability Sequence", "LocalizedDeviationProbabilitySequence", "SQ", "1" }, { Tag(0x0024, 0x0086),
+ "Foveal Sensitivity Measured", "FovealSensitivityMeasured", "CS", "1" }, { Tag(0x0024, 0x0087),
+ "Foveal Sensitivity", "FovealSensitivity", "FL", "1" }, { Tag(0x0024, 0x0088),
+ "Visual Field Test Duration", "VisualFieldTestDuration", "FL", "1" }, { Tag(0x0024, 0x0089),
+ "Visual Field Test Point Sequence", "VisualFieldTestPointSequence", "SQ", "1" }, { Tag(0x0024, 0x0090),
+ "Visual Field Test Point X-Coordinate", "VisualFieldTestPointXCoordinate", "FL", "1" }, { Tag(0x0024, 0x0091),
+ "Visual Field Test Point Y-Coordinate", "VisualFieldTestPointYCoordinate", "FL", "1" }, { Tag(0x0024, 0x0092),
+ "Age Corrected Sensitivity Deviation Value", "AgeCorrectedSensitivityDeviationValue", "FL", "1" }, { Tag(0x0024, 0x0093),
+ "Stimulus Results", "StimulusResults", "CS", "1" }, { Tag(0x0024, 0x0094),
+ "Sensitivity Value", "SensitivityValue", "FL", "1" }, { Tag(0x0024, 0x0095),
+ "Retest Stimulus Seen", "RetestStimulusSeen", "CS", "1" }, { Tag(0x0024, 0x0096),
+ "Retest Sensitivity Value", "RetestSensitivityValue", "FL", "1" }, { Tag(0x0024, 0x0097),
+ "Visual Field Test Point Normals Sequence", "VisualFieldTestPointNormalsSequence", "SQ", "1" }, { Tag(0x0024, 0x0098),
+ "Quantified Defect", "QuantifiedDefect", "FL", "1" }, { Tag(0x0024, 0x0100),
+ "Age Corrected Sensitivity Deviation Probability Value", "AgeCorrectedSensitivityDeviationProbabilityValue", "FL", "1" }, { Tag(0x0024, 0x0102),
+ "Generalized Defect Corrected Sensitivity Deviation Flag", "GeneralizedDefectCorrectedSensitivityDeviationFlag", "CS", "1" }, { Tag(0x0024, 0x0103),
+ "Generalized Defect Corrected Sensitivity Deviation Value", "GeneralizedDefectCorrectedSensitivityDeviationValue", "FL", "1" }, { Tag(0x0024, 0x0104),
+ "Generalized Defect Corrected Sensitivity Deviation Probability Value", "GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue", "FL", "1" }, { Tag(0x0024, 0x0105),
+ "Minimum Sensitivity Value", "MinimumSensitivityValue", "FL", "1" }, { Tag(0x0024, 0x0106),
+ "Blind Spot Localized", "BlindSpotLocalized", "CS", "1" }, { Tag(0x0024, 0x0107),
+ "Blind Spot X-Coordinate", "BlindSpotXCoordinate", "FL", "1" }, { Tag(0x0024, 0x0108),
+ "Blind Spot Y-Coordinate", "BlindSpotYCoordinate", "FL", "1" }, { Tag(0x0024, 0x0110),
+ "Visual Acuity Measurement Sequence", "VisualAcuityMeasurementSequence", "SQ", "1" }, { Tag(0x0024, 0x0112),
+ "Refractive Parameters Used on Patient Sequence", "RefractiveParametersUsedOnPatientSequence", "SQ", "1" }, { Tag(0x0024, 0x0113),
+ "Measurement Laterality", "MeasurementLaterality", "CS", "1" }, { Tag(0x0024, 0x0114),
+ "Ophthalmic Patient Clinical Information Left Eye Sequence", "OphthalmicPatientClinicalInformationLeftEyeSequence", "SQ", "1" }, { Tag(0x0024, 0x0115),
+ "Ophthalmic Patient Clinical Information Right Eye Sequence", "OphthalmicPatientClinicalInformationRightEyeSequence", "SQ", "1" }, { Tag(0x0024, 0x0117),
+ "Foveal Point Normative Data Flag", "FovealPointNormativeDataFlag", "CS", "1" }, { Tag(0x0024, 0x0118),
+ "Foveal Point Probability Value", "FovealPointProbabilityValue", "FL", "1" }, { Tag(0x0024, 0x0120),
+ "Screening Baseline Measured", "ScreeningBaselineMeasured", "CS", "1" }, { Tag(0x0024, 0x0122),
+ "Screening Baseline Measured Sequence", "ScreeningBaselineMeasuredSequence", "SQ", "1" }, { Tag(0x0024, 0x0124),
+ "Screening Baseline Type", "ScreeningBaselineType", "CS", "1" }, { Tag(0x0024, 0x0126),
+ "Screening Baseline Value", "ScreeningBaselineValue", "FL", "1" }, { Tag(0x0024, 0x0202),
+ "Algorithm Source", "AlgorithmSource", "LO", "1" }, { Tag(0x0024, 0x0306),
+ "Data Set Name", "DataSetName", "LO", "1" }, { Tag(0x0024, 0x0307),
+ "Data Set Version", "DataSetVersion", "LO", "1" }, { Tag(0x0024, 0x0308),
+ "Data Set Source", "DataSetSource", "LO", "1" }, { Tag(0x0024, 0x0309),
+ "Data Set Description", "DataSetDescription", "LO", "1" }, { Tag(0x0024, 0x0317),
+ "Visual Field Test Reliability Global Index Sequence", "VisualFieldTestReliabilityGlobalIndexSequence", "SQ", "1" }, { Tag(0x0024, 0x0320),
+ "Visual Field Global Results Index Sequence", "VisualFieldGlobalResultsIndexSequence", "SQ", "1" }, { Tag(0x0024, 0x0325),
+ "Data Observation Sequence", "DataObservationSequence", "SQ", "1" }, { Tag(0x0024, 0x0338),
+ "Index Normals Flag", "IndexNormalsFlag", "CS", "1" }, { Tag(0x0024, 0x0341),
+ "Index Probability", "IndexProbability", "FL", "1" }, { Tag(0x0024, 0x0344),
+ "Index Probability Sequence", "IndexProbabilitySequence", "SQ", "1" }, { Tag(0x0028, 0x0002),
+ "Samples per Pixel", "SamplesPerPixel", "US", "1" }, { Tag(0x0028, 0x0003),
+ "Samples per Pixel Used", "SamplesPerPixelUsed", "US", "1" }, { Tag(0x0028, 0x0004),
+ "Photometric Interpretation", "PhotometricInterpretation", "CS", "1" }, { Tag(0x0028, 0x0005),
+ "Image Dimensions", "ImageDimensions", "US", "1" }, { Tag(0x0028, 0x0006),
+ "Planar Configuration", "PlanarConfiguration", "US", "1" }, { Tag(0x0028, 0x0008),
+ "Number of Frames", "NumberOfFrames", "IS", "1" }, { Tag(0x0028, 0x0009),
+ "Frame Increment Pointer", "FrameIncrementPointer", "AT", "1-n" }, { Tag(0x0028, 0x000a),
+ "Frame Dimension Pointer", "FrameDimensionPointer", "AT", "1-n" }, { Tag(0x0028, 0x0010),
+ "Rows", "Rows", "US", "1" }, { Tag(0x0028, 0x0011),
+ "Columns", "Columns", "US", "1" }, { Tag(0x0028, 0x0012),
+ "Planes", "Planes", "US", "1" }, { Tag(0x0028, 0x0014),
+ "Ultrasound Color Data Present", "UltrasoundColorDataPresent", "US", "1" }, { Tag(0x0028, 0x0030),
+ "Pixel Spacing", "PixelSpacing", "DS", "2" }, { Tag(0x0028, 0x0031),
+ "Zoom Factor", "ZoomFactor", "DS", "2" }, { Tag(0x0028, 0x0032),
+ "Zoom Center", "ZoomCenter", "DS", "2" }, { Tag(0x0028, 0x0034),
+ "Pixel Aspect Ratio", "PixelAspectRatio", "IS", "2" }, { Tag(0x0028, 0x0040),
+ "Image Format", "ImageFormat", "CS", "1" }, { Tag(0x0028, 0x0050),
+ "Manipulated Image", "ManipulatedImage", "LO", "1-n" }, { Tag(0x0028, 0x0051),
+ "Corrected Image", "CorrectedImage", "CS", "1-n" }, { Tag(0x0028, 0x005f),
+ "Compression Recognition Code", "CompressionRecognitionCode", "LO", "1" }, { Tag(0x0028, 0x0060),
+ "Compression Code", "CompressionCode", "CS", "1" }, { Tag(0x0028, 0x0061),
+ "Compression Originator", "CompressionOriginator", "SH", "1" }, { Tag(0x0028, 0x0062),
+ "Compression Label", "CompressionLabel", "LO", "1" }, { Tag(0x0028, 0x0063),
+ "Compression Description", "CompressionDescription", "SH", "1" }, { Tag(0x0028, 0x0065),
+ "Compression Sequence", "CompressionSequence", "CS", "1-n" }, { Tag(0x0028, 0x0066),
+ "Compression Step Pointers", "CompressionStepPointers", "AT", "1-n" }, { Tag(0x0028, 0x0068),
+ "Repeat Interval", "RepeatInterval", "US", "1" }, { Tag(0x0028, 0x0069),
+ "Bits Grouped", "BitsGrouped", "US", "1" }, { Tag(0x0028, 0x0070),
+ "Perimeter Table", "PerimeterTable", "US", "1-n" }, { Tag(0x0028, 0x0071),
+ "Perimeter Value", "PerimeterValue", "US or SS", "1" }, { Tag(0x0028, 0x0080),
+ "Predictor Rows", "PredictorRows", "US", "1" }, { Tag(0x0028, 0x0081),
+ "Predictor Columns", "PredictorColumns", "US", "1" }, { Tag(0x0028, 0x0082),
+ "Predictor Constants", "PredictorConstants", "US", "1-n" }, { Tag(0x0028, 0x0090),
+ "Blocked Pixels", "BlockedPixels", "CS", "1" }, { Tag(0x0028, 0x0091),
+ "Block Rows", "BlockRows", "US", "1" }, { Tag(0x0028, 0x0092),
+ "Block Columns", "BlockColumns", "US", "1" }, { Tag(0x0028, 0x0093),
+ "Row Overlap", "RowOverlap", "US", "1" }, { Tag(0x0028, 0x0094),
+ "Column Overlap", "ColumnOverlap", "US", "1" }, { Tag(0x0028, 0x0100),
+ "Bits Allocated", "BitsAllocated", "US", "1" }, { Tag(0x0028, 0x0101),
+ "Bits Stored", "BitsStored", "US", "1" }, { Tag(0x0028, 0x0102),
+ "High Bit", "HighBit", "US", "1" }, { Tag(0x0028, 0x0103),
+ "Pixel Representation", "PixelRepresentation", "US", "1" }, { Tag(0x0028, 0x0104),
+ "Smallest Valid Pixel Value", "SmallestValidPixelValue", "US or SS", "1" }, { Tag(0x0028, 0x0105),
+ "Largest Valid Pixel Value", "LargestValidPixelValue", "US or SS", "1" }, { Tag(0x0028, 0x0106),
+ "Smallest Image Pixel Value", "SmallestImagePixelValue", "US or SS", "1" }, { Tag(0x0028, 0x0107),
+ "Largest Image Pixel Value", "LargestImagePixelValue", "US or SS", "1" }, { Tag(0x0028, 0x0108),
+ "Smallest Pixel Value in Series", "SmallestPixelValueInSeries", "US or SS", "1" }, { Tag(0x0028, 0x0109),
+ "Largest Pixel Value in Series", "LargestPixelValueInSeries", "US or SS", "1" }, { Tag(0x0028, 0x0110),
+ "Smallest Image Pixel Value in Plane", "SmallestImagePixelValueInPlane", "US or SS", "1" }, { Tag(0x0028, 0x0111),
+ "Largest Image Pixel Value in Plane", "LargestImagePixelValueInPlane", "US or SS", "1" }, { Tag(0x0028, 0x0120),
+ "Pixel Padding Value", "PixelPaddingValue", "US or SS", "1" }, { Tag(0x0028, 0x0121),
+ "Pixel Padding Range Limit", "PixelPaddingRangeLimit", "US or SS", "1" }, { Tag(0x0028, 0x0122),
+ "Float Pixel Padding Value", "FloatPixelPaddingValue", "FL", "1" }, { Tag(0x0028, 0x0123),
+ "Double Float Pixel Padding Value", "DoubleFloatPixelPaddingValue", "FD", "1" }, { Tag(0x0028, 0x0124),
+ "Float Pixel Padding Range Limit", "FloatPixelPaddingRangeLimit", "FL", "1" }, { Tag(0x0028, 0x0125),
+ "Double Float Pixel Padding Range Limit", "DoubleFloatPixelPaddingRangeLimit", "FD", "1" }, { Tag(0x0028, 0x0200),
+ "Image Location", "ImageLocation", "US", "1" }, { Tag(0x0028, 0x0300),
+ "Quality Control Image", "QualityControlImage", "CS", "1" }, { Tag(0x0028, 0x0301),
+ "Burned In Annotation", "BurnedInAnnotation", "CS", "1" }, { Tag(0x0028, 0x0302),
+ "Recognizable Visual Features", "RecognizableVisualFeatures", "CS", "1" }, { Tag(0x0028, 0x0303),
+ "Longitudinal Temporal Information Modified", "LongitudinalTemporalInformationModified", "CS", "1" }, { Tag(0x0028, 0x0304),
+ "Referenced Color Palette Instance UID", "ReferencedColorPaletteInstanceUID", "UI", "1" }, { Tag(0x0028, 0x0400),
+ "Transform Label", "TransformLabel", "LO", "1" }, { Tag(0x0028, 0x0401),
+ "Transform Version Number", "TransformVersionNumber", "LO", "1" }, { Tag(0x0028, 0x0402),
+ "Number of Transform Steps", "NumberOfTransformSteps", "US", "1" }, { Tag(0x0028, 0x0403),
+ "Sequence of Compressed Data", "SequenceOfCompressedData", "LO", "1-n" }, { Tag(0x0028, 0x0404),
+ "Details of Coefficients", "DetailsOfCoefficients", "AT", "1-n" }, { Tag(0x0028, 0x0700),
+ "DCT Label", "DCTLabel", "LO", "1" }, { Tag(0x0028, 0x0701),
+ "Data Block Description", "DataBlockDescription", "CS", "1-n" }, { Tag(0x0028, 0x0702),
+ "Data Block", "DataBlock", "AT", "1-n" }, { Tag(0x0028, 0x0710),
+ "Normalization Factor Format", "NormalizationFactorFormat", "US", "1" }, { Tag(0x0028, 0x0720),
+ "Zonal Map Number Format", "ZonalMapNumberFormat", "US", "1" }, { Tag(0x0028, 0x0721),
+ "Zonal Map Location", "ZonalMapLocation", "AT", "1-n" }, { Tag(0x0028, 0x0722),
+ "Zonal Map Format", "ZonalMapFormat", "US", "1" }, { Tag(0x0028, 0x0730),
+ "Adaptive Map Format", "AdaptiveMapFormat", "US", "1" }, { Tag(0x0028, 0x0740),
+ "Code Number Format", "CodeNumberFormat", "US", "1" }, { Tag(0x0028, 0x0a02),
+ "Pixel Spacing Calibration Type", "PixelSpacingCalibrationType", "CS", "1" }, { Tag(0x0028, 0x0a04),
+ "Pixel Spacing Calibration Description", "PixelSpacingCalibrationDescription", "LO", "1" }, { Tag(0x0028, 0x1040),
+ "Pixel Intensity Relationship", "PixelIntensityRelationship", "CS", "1" }, { Tag(0x0028, 0x1041),
+ "Pixel Intensity Relationship Sign", "PixelIntensityRelationshipSign", "SS", "1" }, { Tag(0x0028, 0x1050),
+ "Window Center", "WindowCenter", "DS", "1-n" }, { Tag(0x0028, 0x1051),
+ "Window Width", "WindowWidth", "DS", "1-n" }, { Tag(0x0028, 0x1052),
+ "Rescale Intercept", "RescaleIntercept", "DS", "1" }, { Tag(0x0028, 0x1053),
+ "Rescale Slope", "RescaleSlope", "DS", "1" }, { Tag(0x0028, 0x1054),
+ "Rescale Type", "RescaleType", "LO", "1" }, { Tag(0x0028, 0x1055),
+ "Window Center & Width Explanation", "WindowCenterWidthExplanation", "LO", "1-n" }, { Tag(0x0028, 0x1056),
+ "VOI LUT Function", "VOILUTFunction", "CS", "1" }, { Tag(0x0028, 0x1080),
+ "Gray Scale", "GrayScale", "CS", "1" }, { Tag(0x0028, 0x1090),
+ "Recommended Viewing Mode", "RecommendedViewingMode", "CS", "1" }, { Tag(0x0028, 0x1100),
+ "Gray Lookup Table Descriptor", "GrayLookupTableDescriptor", "US or SS", "3" }, { Tag(0x0028, 0x1101),
+ "Red Palette Color Lookup Table Descriptor", "RedPaletteColorLookupTableDescriptor", "US or SS", "3" }, { Tag(0x0028, 0x1102),
+ "Green Palette Color Lookup Table Descriptor", "GreenPaletteColorLookupTableDescriptor", "US or SS", "3" }, { Tag(0x0028, 0x1103),
+ "Blue Palette Color Lookup Table Descriptor", "BluePaletteColorLookupTableDescriptor", "US or SS", "3" }, { Tag(0x0028, 0x1104),
+ "Alpha Palette Color Lookup Table Descriptor", "AlphaPaletteColorLookupTableDescriptor", "US", "3" }, { Tag(0x0028, 0x1111),
+ "Large Red Palette Color Lookup Table Descriptor", "LargeRedPaletteColorLookupTableDescriptor", "US or SS", "4" }, { Tag(0x0028, 0x1112),
+ "Large Green Palette Color Lookup Table Descriptor", "LargeGreenPaletteColorLookupTableDescriptor", "US or SS", "4" }, { Tag(0x0028, 0x1113),
+ "Large Blue Palette Color Lookup Table Descriptor", "LargeBluePaletteColorLookupTableDescriptor", "US or SS", "4" }, { Tag(0x0028, 0x1199),
+ "Palette Color Lookup Table UID", "PaletteColorLookupTableUID", "UI", "1" }, { Tag(0x0028, 0x1200),
+ "Gray Lookup Table Data", "GrayLookupTableData", "US or SS or OW", "1-n or 1" }, { Tag(0x0028, 0x1201),
+ "Red Palette Color Lookup Table Data", "RedPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1202),
+ "Green Palette Color Lookup Table Data", "GreenPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1203),
+ "Blue Palette Color Lookup Table Data", "BluePaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1204),
+ "Alpha Palette Color Lookup Table Data", "AlphaPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1211),
+ "Large Red Palette Color Lookup Table Data", "LargeRedPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1212),
+ "Large Green Palette Color Lookup Table Data", "LargeGreenPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1213),
+ "Large Blue Palette Color Lookup Table Data", "LargeBluePaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1214),
+ "Large Palette Color Lookup Table UID", "LargePaletteColorLookupTableUID", "UI", "1" }, { Tag(0x0028, 0x1221),
+ "Segmented Red Palette Color Lookup Table Data", "SegmentedRedPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1222),
+ "Segmented Green Palette Color Lookup Table Data", "SegmentedGreenPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1223),
+ "Segmented Blue Palette Color Lookup Table Data", "SegmentedBluePaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1224),
+ "Segmented Alpha Palette Color Lookup Table Data", "SegmentedAlphaPaletteColorLookupTableData", "OW", "1" }, { Tag(0x0028, 0x1300),
+ "Breast Implant Present", "BreastImplantPresent", "CS", "1" }, { Tag(0x0028, 0x1350),
+ "Partial View", "PartialView", "CS", "1" }, { Tag(0x0028, 0x1351),
+ "Partial View Description", "PartialViewDescription", "ST", "1" }, { Tag(0x0028, 0x1352),
+ "Partial View Code Sequence", "PartialViewCodeSequence", "SQ", "1" }, { Tag(0x0028, 0x135a),
+ "Spatial Locations Preserved", "SpatialLocationsPreserved", "CS", "1" }, { Tag(0x0028, 0x1401),
+ "Data Frame Assignment Sequence", "DataFrameAssignmentSequence", "SQ", "1" }, { Tag(0x0028, 0x1402),
+ "Data Path Assignment", "DataPathAssignment", "CS", "1" }, { Tag(0x0028, 0x1403),
+ "Bits Mapped to Color Lookup Table", "BitsMappedToColorLookupTable", "US", "1" }, { Tag(0x0028, 0x1404),
+ "Blending LUT 1 Sequence", "BlendingLUT1Sequence", "SQ", "1" }, { Tag(0x0028, 0x1405),
+ "Blending LUT 1 Transfer Function", "BlendingLUT1TransferFunction", "CS", "1" }, { Tag(0x0028, 0x1406),
+ "Blending Weight Constant", "BlendingWeightConstant", "FD", "1" }, { Tag(0x0028, 0x1407),
+ "Blending Lookup Table Descriptor", "BlendingLookupTableDescriptor", "US", "3" }, { Tag(0x0028, 0x1408),
+ "Blending Lookup Table Data", "BlendingLookupTableData", "OW", "1" }, { Tag(0x0028, 0x140b),
+ "Enhanced Palette Color Lookup Table Sequence", "EnhancedPaletteColorLookupTableSequence", "SQ", "1" }, { Tag(0x0028, 0x140c),
+ "Blending LUT 2 Sequence", "BlendingLUT2Sequence", "SQ", "1" }, { Tag(0x0028, 0x140d),
+ "Blending LUT 2 Transfer Function", "BlendingLUT2TransferFunction", "CS", "1" }, { Tag(0x0028, 0x140e),
+ "Data Path ID", "DataPathID", "CS", "1" }, { Tag(0x0028, 0x140f),
+ "RGB LUT Transfer Function", "RGBLUTTransferFunction", "CS", "1" }, { Tag(0x0028, 0x1410),
+ "Alpha LUT Transfer Function", "AlphaLUTTransferFunction", "CS", "1" }, { Tag(0x0028, 0x2000),
+ "ICC Profile", "ICCProfile", "OB", "1" }, { Tag(0x0028, 0x2002),
+ "Color Space", "ColorSpace", "CS", "1" }, { Tag(0x0028, 0x2110),
+ "Lossy Image Compression", "LossyImageCompression", "CS", "1" }, { Tag(0x0028, 0x2112),
+ "Lossy Image Compression Ratio", "LossyImageCompressionRatio", "DS", "1-n" }, { Tag(0x0028, 0x2114),
+ "Lossy Image Compression Method", "LossyImageCompressionMethod", "CS", "1-n" }, { Tag(0x0028, 0x3000),
+ "Modality LUT Sequence", "ModalityLUTSequence", "SQ", "1" }, { Tag(0x0028, 0x3002),
+ "LUT Descriptor", "LUTDescriptor", "US or SS", "3" }, { Tag(0x0028, 0x3003),
+ "LUT Explanation", "LUTExplanation", "LO", "1" }, { Tag(0x0028, 0x3004),
+ "Modality LUT Type", "ModalityLUTType", "LO", "1" }, { Tag(0x0028, 0x3006),
+ "LUT Data", "LUTData", "US or OW", "1-n or 1" }, { Tag(0x0028, 0x3010),
+ "VOI LUT Sequence", "VOILUTSequence", "SQ", "1" }, { Tag(0x0028, 0x3110),
+ "Softcopy VOI LUT Sequence", "SoftcopyVOILUTSequence", "SQ", "1" }, { Tag(0x0028, 0x4000),
+ "Image Presentation Comments", "ImagePresentationComments", "LT", "1" }, { Tag(0x0028, 0x5000),
+ "Bi-Plane Acquisition Sequence", "BiPlaneAcquisitionSequence", "SQ", "1" }, { Tag(0x0028, 0x6010),
+ "Representative Frame Number", "RepresentativeFrameNumber", "US", "1" }, { Tag(0x0028, 0x6020),
+ "Frame Numbers of Interest (FOI)", "FrameNumbersOfInterest", "US", "1-n" }, { Tag(0x0028, 0x6022),
+ "Frame of Interest Description", "FrameOfInterestDescription", "LO", "1-n" }, { Tag(0x0028, 0x6023),
+ "Frame of Interest Type", "FrameOfInterestType", "CS", "1-n" }, { Tag(0x0028, 0x6030),
+ "Mask Pointer(s)", "MaskPointers", "US", "1-n" }, { Tag(0x0028, 0x6040),
+ "R Wave Pointer", "RWavePointer", "US", "1-n" }, { Tag(0x0028, 0x6100),
+ "Mask Subtraction Sequence", "MaskSubtractionSequence", "SQ", "1" }, { Tag(0x0028, 0x6101),
+ "Mask Operation", "MaskOperation", "CS", "1" }, { Tag(0x0028, 0x6102),
+ "Applicable Frame Range", "ApplicableFrameRange", "US", "2-2n" }, { Tag(0x0028, 0x6110),
+ "Mask Frame Numbers", "MaskFrameNumbers", "US", "1-n" }, { Tag(0x0028, 0x6112),
+ "Contrast Frame Averaging", "ContrastFrameAveraging", "US", "1" }, { Tag(0x0028, 0x6114),
+ "Mask Sub-pixel Shift", "MaskSubPixelShift", "FL", "2" }, { Tag(0x0028, 0x6120),
+ "TID Offset", "TIDOffset", "SS", "1" }, { Tag(0x0028, 0x6190),
+ "Mask Operation Explanation", "MaskOperationExplanation", "ST", "1" }, { Tag(0x0028, 0x7000),
+ "Equipment Administrator Sequence", "EquipmentAdministratorSequence", "SQ", "1" }, { Tag(0x0028, 0x7001),
+ "Number of Display Subsystems", "NumberOfDisplaySubsystems", "US", "1" }, { Tag(0x0028, 0x7002),
+ "Current Configuration ID", "CurrentConfigurationID", "US", "1" }, { Tag(0x0028, 0x7003),
+ "Display Subsystem ID", "DisplaySubsystemID", "US", "1" }, { Tag(0x0028, 0x7004),
+ "Display Subsystem Name", "DisplaySubsystemName", "SH", "1" }, { Tag(0x0028, 0x7005),
+ "Display Subsystem Description", "DisplaySubsystemDescription", "LO", "1" }, { Tag(0x0028, 0x7006),
+ "System Status", "SystemStatus", "CS", "1" }, { Tag(0x0028, 0x7007),
+ "System Status Comment", "SystemStatusComment", "LO", "1" }, { Tag(0x0028, 0x7008),
+ "Target Luminance Characteristics Sequence", "TargetLuminanceCharacteristicsSequence", "SQ", "1" }, { Tag(0x0028, 0x7009),
+ "Luminance Characteristics ID", "LuminanceCharacteristicsID", "US", "1" }, { Tag(0x0028, 0x700a),
+ "Display Subsystem Configuration Sequence", "DisplaySubsystemConfigurationSequence", "SQ", "1" }, { Tag(0x0028, 0x700b),
+ "Configuration ID", "ConfigurationID", "US", "1" }, { Tag(0x0028, 0x700c),
+ "Configuration Name", "ConfigurationName", "SH", "1" }, { Tag(0x0028, 0x700d),
+ "Configuration Description", "ConfigurationDescription", "LO", "1" }, { Tag(0x0028, 0x700e),
+ "Referenced Target Luminance Characteristics ID", "ReferencedTargetLuminanceCharacteristicsID", "US", "1" }, { Tag(0x0028, 0x700f),
+ "QA Results Sequence", "QAResultsSequence", "SQ", "1" }, { Tag(0x0028, 0x7010),
+ "Display Subsystem QA Results Sequence", "DisplaySubsystemQAResultsSequence", "SQ", "1" }, { Tag(0x0028, 0x7011),
+ "Configuration QA Results Sequence", "ConfigurationQAResultsSequence", "SQ", "1" }, { Tag(0x0028, 0x7012),
+ "Measurement Equipment Sequence", "MeasurementEquipmentSequence", "SQ", "1" }, { Tag(0x0028, 0x7013),
+ "Measurement Functions", "MeasurementFunctions", "CS", "1-n" }, { Tag(0x0028, 0x7014),
+ "Measurement Equipment Type", "MeasurementEquipmentType", "CS", "1" }, { Tag(0x0028, 0x7015),
+ "Visual Evaluation Result Sequence", "VisualEvaluationResultSequence", "SQ", "1" }, { Tag(0x0028, 0x7016),
+ "Display Calibration Result Sequence", "DisplayCalibrationResultSequence", "SQ", "1" }, { Tag(0x0028, 0x7017),
+ "DDL Value", "DDLValue", "US", "1" }, { Tag(0x0028, 0x7018),
+ "CIExy White Point", "CIExyWhitePoint", "FL", "2" }, { Tag(0x0028, 0x7019),
+ "Display Function Type", "DisplayFunctionType", "CS", "1" }, { Tag(0x0028, 0x701a),
+ "Gamma Value", "GammaValue", "FL", "1" }, { Tag(0x0028, 0x701b),
+ "Number of Luminance Points", "NumberOfLuminancePoints", "US", "1" }, { Tag(0x0028, 0x701c),
+ "Luminance Response Sequence", "LuminanceResponseSequence", "SQ", "1" }, { Tag(0x0028, 0x701d),
+ "Target Minimum Luminance", "TargetMinimumLuminance", "FL", "1" }, { Tag(0x0028, 0x701e),
+ "Target Maximum Luminance", "TargetMaximumLuminance", "FL", "1" }, { Tag(0x0028, 0x701f),
+ "Luminance Value", "LuminanceValue", "FL", "1" }, { Tag(0x0028, 0x7020),
+ "Luminance Response Description", "LuminanceResponseDescription", "LO", "1" }, { Tag(0x0028, 0x7021),
+ "White Point Flag", "WhitePointFlag", "CS", "1" }, { Tag(0x0028, 0x7022),
+ "Display Device Type Code Sequence", "DisplayDeviceTypeCodeSequence", "SQ", "1" }, { Tag(0x0028, 0x7023),
+ "Display Subsystem Sequence", "DisplaySubsystemSequence", "SQ", "1" }, { Tag(0x0028, 0x7024),
+ "Luminance Result Sequence", "LuminanceResultSequence", "SQ", "1" }, { Tag(0x0028, 0x7025),
+ "Ambient Light Value Source", "AmbientLightValueSource", "CS", "1" }, { Tag(0x0028, 0x7026),
+ "Measured Characteristics", "MeasuredCharacteristics", "CS", "1-n" }, { Tag(0x0028, 0x7027),
+ "Luminance Uniformity Result Sequence", "LuminanceUniformityResultSequence", "SQ", "1" }, { Tag(0x0028, 0x7028),
+ "Visual Evaluation Test Sequence", "VisualEvaluationTestSequence", "SQ", "1" }, { Tag(0x0028, 0x7029),
+ "Test Result", "TestResult", "CS", "1" }, { Tag(0x0028, 0x702a),
+ "Test Result Comment", "TestResultComment", "LO", "1" }, { Tag(0x0028, 0x702b),
+ "Test Image Validation", "TestImageValidation", "CS", "1" }, { Tag(0x0028, 0x702c),
+ "Test Pattern Code Sequence", "TestPatternCodeSequence", "SQ", "1" }, { Tag(0x0028, 0x702d),
+ "Measurement Pattern Code Sequence", "MeasurementPatternCodeSequence", "SQ", "1" }, { Tag(0x0028, 0x702e),
+ "Visual Evaluation Method Code Sequence", "VisualEvaluationMethodCodeSequence", "SQ", "1" }, { Tag(0x0028, 0x7fe0),
+ "Pixel Data Provider URL", "PixelDataProviderURL", "UR", "1" }, { Tag(0x0028, 0x9001),
+ "Data Point Rows", "DataPointRows", "UL", "1" }, { Tag(0x0028, 0x9002),
+ "Data Point Columns", "DataPointColumns", "UL", "1" }, { Tag(0x0028, 0x9003),
+ "Signal Domain Columns", "SignalDomainColumns", "CS", "1" }, { Tag(0x0028, 0x9099),
+ "Largest Monochrome Pixel Value", "LargestMonochromePixelValue", "US", "1" }, { Tag(0x0028, 0x9108),
+ "Data Representation", "DataRepresentation", "CS", "1" }, { Tag(0x0028, 0x9110),
+ "Pixel Measures Sequence", "PixelMeasuresSequence", "SQ", "1" }, { Tag(0x0028, 0x9132),
+ "Frame VOI LUT Sequence", "FrameVOILUTSequence", "SQ", "1" }, { Tag(0x0028, 0x9145),
+ "Pixel Value Transformation Sequence", "PixelValueTransformationSequence", "SQ", "1" }, { Tag(0x0028, 0x9235),
+ "Signal Domain Rows", "SignalDomainRows", "CS", "1" }, { Tag(0x0028, 0x9411),
+ "Display Filter Percentage", "DisplayFilterPercentage", "FL", "1" }, { Tag(0x0028, 0x9415),
+ "Frame Pixel Shift Sequence", "FramePixelShiftSequence", "SQ", "1" }, { Tag(0x0028, 0x9416),
+ "Subtraction Item ID", "SubtractionItemID", "US", "1" }, { Tag(0x0028, 0x9422),
+ "Pixel Intensity Relationship LUT Sequence", "PixelIntensityRelationshipLUTSequence", "SQ", "1" }, { Tag(0x0028, 0x9443),
+ "Frame Pixel Data Properties Sequence", "FramePixelDataPropertiesSequence", "SQ", "1" }, { Tag(0x0028, 0x9444),
+ "Geometrical Properties", "GeometricalProperties", "CS", "1" }, { Tag(0x0028, 0x9445),
+ "Geometric Maximum Distortion", "GeometricMaximumDistortion", "FL", "1" }, { Tag(0x0028, 0x9446),
+ "Image Processing Applied", "ImageProcessingApplied", "CS", "1-n" }, { Tag(0x0028, 0x9454),
+ "Mask Selection Mode", "MaskSelectionMode", "CS", "1" }, { Tag(0x0028, 0x9474),
+ "LUT Function", "LUTFunction", "CS", "1" }, { Tag(0x0028, 0x9478),
+ "Mask Visibility Percentage", "MaskVisibilityPercentage", "FL", "1" }, { Tag(0x0028, 0x9501),
+ "Pixel Shift Sequence", "PixelShiftSequence", "SQ", "1" }, { Tag(0x0028, 0x9502),
+ "Region Pixel Shift Sequence", "RegionPixelShiftSequence", "SQ", "1" }, { Tag(0x0028, 0x9503),
+ "Vertices of the Region", "VerticesOfTheRegion", "SS", "2-2n" }, { Tag(0x0028, 0x9505),
+ "Multi-frame Presentation Sequence", "MultiFramePresentationSequence", "SQ", "1" }, { Tag(0x0028, 0x9506),
+ "Pixel Shift Frame Range", "PixelShiftFrameRange", "US", "2-2n" }, { Tag(0x0028, 0x9507),
+ "LUT Frame Range", "LUTFrameRange", "US", "2-2n" }, { Tag(0x0028, 0x9520),
+ "Image to Equipment Mapping Matrix", "ImageToEquipmentMappingMatrix", "DS", "16" }, { Tag(0x0028, 0x9537),
+ "Equipment Coordinate System Identification", "EquipmentCoordinateSystemIdentification", "CS", "1" }, { Tag(0x0032, 0x000a),
+ "Study Status ID", "StudyStatusID", "CS", "1" }, { Tag(0x0032, 0x000c),
+ "Study Priority ID", "StudyPriorityID", "CS", "1" }, { Tag(0x0032, 0x0012),
+ "Study ID Issuer", "StudyIDIssuer", "LO", "1" }, { Tag(0x0032, 0x0032),
+ "Study Verified Date", "StudyVerifiedDate", "DA", "1" }, { Tag(0x0032, 0x0033),
+ "Study Verified Time", "StudyVerifiedTime", "TM", "1" }, { Tag(0x0032, 0x0034),
+ "Study Read Date", "StudyReadDate", "DA", "1" }, { Tag(0x0032, 0x0035),
+ "Study Read Time", "StudyReadTime", "TM", "1" }, { Tag(0x0032, 0x1000),
+ "Scheduled Study Start Date", "ScheduledStudyStartDate", "DA", "1" }, { Tag(0x0032, 0x1001),
+ "Scheduled Study Start Time", "ScheduledStudyStartTime", "TM", "1" }, { Tag(0x0032, 0x1010),
+ "Scheduled Study Stop Date", "ScheduledStudyStopDate", "DA", "1" }, { Tag(0x0032, 0x1011),
+ "Scheduled Study Stop Time", "ScheduledStudyStopTime", "TM", "1" }, { Tag(0x0032, 0x1020),
+ "Scheduled Study Location", "ScheduledStudyLocation", "LO", "1" }, { Tag(0x0032, 0x1021),
+ "Scheduled Study Location AE Title", "ScheduledStudyLocationAETitle", "AE", "1-n" }, { Tag(0x0032, 0x1030),
+ "Reason for Study", "ReasonForStudy", "LO", "1" }, { Tag(0x0032, 0x1031),
+ "Requesting Physician Identification Sequence", "RequestingPhysicianIdentificationSequence", "SQ", "1" }, { Tag(0x0032, 0x1032),
+ "Requesting Physician", "RequestingPhysician", "PN", "1" }, { Tag(0x0032, 0x1033),
+ "Requesting Service", "RequestingService", "LO", "1" }, { Tag(0x0032, 0x1034),
+ "Requesting Service Code Sequence", "RequestingServiceCodeSequence", "SQ", "1" }, { Tag(0x0032, 0x1040),
+ "Study Arrival Date", "StudyArrivalDate", "DA", "1" }, { Tag(0x0032, 0x1041),
+ "Study Arrival Time", "StudyArrivalTime", "TM", "1" }, { Tag(0x0032, 0x1050),
+ "Study Completion Date", "StudyCompletionDate", "DA", "1" }, { Tag(0x0032, 0x1051),
+ "Study Completion Time", "StudyCompletionTime", "TM", "1" }, { Tag(0x0032, 0x1055),
+ "Study Component Status ID", "StudyComponentStatusID", "CS", "1" }, { Tag(0x0032, 0x1060),
+ "Requested Procedure Description", "RequestedProcedureDescription", "LO", "1" }, { Tag(0x0032, 0x1064),
+ "Requested Procedure Code Sequence", "RequestedProcedureCodeSequence", "SQ", "1" }, { Tag(0x0032, 0x1070),
+ "Requested Contrast Agent", "RequestedContrastAgent", "LO", "1" }, { Tag(0x0032, 0x4000),
+ "Study Comments", "StudyComments", "LT", "1" }, { Tag(0x0038, 0x0004),
+ "Referenced Patient Alias Sequence", "ReferencedPatientAliasSequence", "SQ", "1" }, { Tag(0x0038, 0x0008),
+ "Visit Status ID", "VisitStatusID", "CS", "1" }, { Tag(0x0038, 0x0010),
+ "Admission ID", "AdmissionID", "LO", "1" }, { Tag(0x0038, 0x0011),
+ "Issuer of Admission ID", "IssuerOfAdmissionID", "LO", "1" }, { Tag(0x0038, 0x0014),
+ "Issuer of Admission ID Sequence", "IssuerOfAdmissionIDSequence", "SQ", "1" }, { Tag(0x0038, 0x0016),
+ "Route of Admissions", "RouteOfAdmissions", "LO", "1" }, { Tag(0x0038, 0x001a),
+ "Scheduled Admission Date", "ScheduledAdmissionDate", "DA", "1" }, { Tag(0x0038, 0x001b),
+ "Scheduled Admission Time", "ScheduledAdmissionTime", "TM", "1" }, { Tag(0x0038, 0x001c),
+ "Scheduled Discharge Date", "ScheduledDischargeDate", "DA", "1" }, { Tag(0x0038, 0x001d),
+ "Scheduled Discharge Time", "ScheduledDischargeTime", "TM", "1" }, { Tag(0x0038, 0x001e),
+ "Scheduled Patient Institution Residence", "ScheduledPatientInstitutionResidence", "LO", "1" }, { Tag(0x0038, 0x0020),
+ "Admitting Date", "AdmittingDate", "DA", "1" }, { Tag(0x0038, 0x0021),
+ "Admitting Time", "AdmittingTime", "TM", "1" }, { Tag(0x0038, 0x0030),
+ "Discharge Date", "DischargeDate", "DA", "1" }, { Tag(0x0038, 0x0032),
+ "Discharge Time", "DischargeTime", "TM", "1" }, { Tag(0x0038, 0x0040),
+ "Discharge Diagnosis Description", "DischargeDiagnosisDescription", "LO", "1" }, { Tag(0x0038, 0x0044),
+ "Discharge Diagnosis Code Sequence", "DischargeDiagnosisCodeSequence", "SQ", "1" }, { Tag(0x0038, 0x0050),
+ "Special Needs", "SpecialNeeds", "LO", "1" }, { Tag(0x0038, 0x0060),
+ "Service Episode ID", "ServiceEpisodeID", "LO", "1" }, { Tag(0x0038, 0x0061),
+ "Issuer of Service Episode ID", "IssuerOfServiceEpisodeID", "LO", "1" }, { Tag(0x0038, 0x0062),
+ "Service Episode Description", "ServiceEpisodeDescription", "LO", "1" }, { Tag(0x0038, 0x0064),
+ "Issuer of Service Episode ID Sequence", "IssuerOfServiceEpisodeIDSequence", "SQ", "1" }, { Tag(0x0038, 0x0100),
+ "Pertinent Documents Sequence", "PertinentDocumentsSequence", "SQ", "1" }, { Tag(0x0038, 0x0101),
+ "Pertinent Resources Sequence", "PertinentResourcesSequence", "SQ", "1" }, { Tag(0x0038, 0x0102),
+ "Resource Description", "ResourceDescription", "LO", "1" }, { Tag(0x0038, 0x0300),
+ "Current Patient Location", "CurrentPatientLocation", "LO", "1" }, { Tag(0x0038, 0x0400),
+ "Patient's Institution Residence", "PatientInstitutionResidence", "LO", "1" }, { Tag(0x0038, 0x0500),
+ "Patient State", "PatientState", "LO", "1" }, { Tag(0x0038, 0x0502),
+ "Patient Clinical Trial Participation Sequence", "PatientClinicalTrialParticipationSequence", "SQ", "1" }, { Tag(0x0038, 0x4000),
+ "Visit Comments", "VisitComments", "LT", "1" }, { Tag(0x003a, 0x0004),
+ "Waveform Originality", "WaveformOriginality", "CS", "1" }, { Tag(0x003a, 0x0005),
+ "Number of Waveform Channels", "NumberOfWaveformChannels", "US", "1" }, { Tag(0x003a, 0x0010),
+ "Number of Waveform Samples", "NumberOfWaveformSamples", "UL", "1" }, { Tag(0x003a, 0x001a),
+ "Sampling Frequency", "SamplingFrequency", "DS", "1" }, { Tag(0x003a, 0x0020),
+ "Multiplex Group Label", "MultiplexGroupLabel", "SH", "1" }, { Tag(0x003a, 0x0200),
+ "Channel Definition Sequence", "ChannelDefinitionSequence", "SQ", "1" }, { Tag(0x003a, 0x0202),
+ "Waveform Channel Number", "WaveformChannelNumber", "IS", "1" }, { Tag(0x003a, 0x0203),
+ "Channel Label", "ChannelLabel", "SH", "1" }, { Tag(0x003a, 0x0205),
+ "Channel Status", "ChannelStatus", "CS", "1-n" }, { Tag(0x003a, 0x0208),
+ "Channel Source Sequence", "ChannelSourceSequence", "SQ", "1" }, { Tag(0x003a, 0x0209),
+ "Channel Source Modifiers Sequence", "ChannelSourceModifiersSequence", "SQ", "1" }, { Tag(0x003a, 0x020a),
+ "Source Waveform Sequence", "SourceWaveformSequence", "SQ", "1" }, { Tag(0x003a, 0x020c),
+ "Channel Derivation Description", "ChannelDerivationDescription", "LO", "1" }, { Tag(0x003a, 0x0210),
+ "Channel Sensitivity", "ChannelSensitivity", "DS", "1" }, { Tag(0x003a, 0x0211),
+ "Channel Sensitivity Units Sequence", "ChannelSensitivityUnitsSequence", "SQ", "1" }, { Tag(0x003a, 0x0212),
+ "Channel Sensitivity Correction Factor", "ChannelSensitivityCorrectionFactor", "DS", "1" }, { Tag(0x003a, 0x0213),
+ "Channel Baseline", "ChannelBaseline", "DS", "1" }, { Tag(0x003a, 0x0214),
+ "Channel Time Skew", "ChannelTimeSkew", "DS", "1" }, { Tag(0x003a, 0x0215),
+ "Channel Sample Skew", "ChannelSampleSkew", "DS", "1" }, { Tag(0x003a, 0x0218),
+ "Channel Offset", "ChannelOffset", "DS", "1" }, { Tag(0x003a, 0x021a),
+ "Waveform Bits Stored", "WaveformBitsStored", "US", "1" }, { Tag(0x003a, 0x0220),
+ "Filter Low Frequency", "FilterLowFrequency", "DS", "1" }, { Tag(0x003a, 0x0221),
+ "Filter High Frequency", "FilterHighFrequency", "DS", "1" }, { Tag(0x003a, 0x0222),
+ "Notch Filter Frequency", "NotchFilterFrequency", "DS", "1" }, { Tag(0x003a, 0x0223),
+ "Notch Filter Bandwidth", "NotchFilterBandwidth", "DS", "1" }, { Tag(0x003a, 0x0230),
+ "Waveform Data Display Scale", "WaveformDataDisplayScale", "FL", "1" }, { Tag(0x003a, 0x0231),
+ "Waveform Display Background CIELab Value", "WaveformDisplayBackgroundCIELabValue", "US", "3" }, { Tag(0x003a, 0x0240),
+ "Waveform Presentation Group Sequence", "WaveformPresentationGroupSequence", "SQ", "1" }, { Tag(0x003a, 0x0241),
+ "Presentation Group Number", "PresentationGroupNumber", "US", "1" }, { Tag(0x003a, 0x0242),
+ "Channel Display Sequence", "ChannelDisplaySequence", "SQ", "1" }, { Tag(0x003a, 0x0244),
+ "Channel Recommended Display CIELab Value", "ChannelRecommendedDisplayCIELabValue", "US", "3" }, { Tag(0x003a, 0x0245),
+ "Channel Position", "ChannelPosition", "FL", "1" }, { Tag(0x003a, 0x0246),
+ "Display Shading Flag", "DisplayShadingFlag", "CS", "1" }, { Tag(0x003a, 0x0247),
+ "Fractional Channel Display Scale", "FractionalChannelDisplayScale", "FL", "1" }, { Tag(0x003a, 0x0248),
+ "Absolute Channel Display Scale", "AbsoluteChannelDisplayScale", "FL", "1" }, { Tag(0x003a, 0x0300),
+ "Multiplexed Audio Channels Description Code Sequence", "MultiplexedAudioChannelsDescriptionCodeSequence", "SQ", "1" }, { Tag(0x003a, 0x0301),
+ "Channel Identification Code", "ChannelIdentificationCode", "IS", "1" }, { Tag(0x003a, 0x0302),
+ "Channel Mode", "ChannelMode", "CS", "1" }, { Tag(0x0040, 0x0001),
+ "Scheduled Station AE Title", "ScheduledStationAETitle", "AE", "1-n" }, { Tag(0x0040, 0x0002),
+ "Scheduled Procedure Step Start Date", "ScheduledProcedureStepStartDate", "DA", "1" }, { Tag(0x0040, 0x0003),
+ "Scheduled Procedure Step Start Time", "ScheduledProcedureStepStartTime", "TM", "1" }, { Tag(0x0040, 0x0004),
+ "Scheduled Procedure Step End Date", "ScheduledProcedureStepEndDate", "DA", "1" }, { Tag(0x0040, 0x0005),
+ "Scheduled Procedure Step End Time", "ScheduledProcedureStepEndTime", "TM", "1" }, { Tag(0x0040, 0x0006),
+ "Scheduled Performing Physician's Name", "ScheduledPerformingPhysicianName", "PN", "1" }, { Tag(0x0040, 0x0007),
+ "Scheduled Procedure Step Description", "ScheduledProcedureStepDescription", "LO", "1" }, { Tag(0x0040, 0x0008),
+ "Scheduled Protocol Code Sequence", "ScheduledProtocolCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x0009),
+ "Scheduled Procedure Step ID", "ScheduledProcedureStepID", "SH", "1" }, { Tag(0x0040, 0x000a),
+ "Stage Code Sequence", "StageCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x000b),
+ "Scheduled Performing Physician Identification Sequence", "ScheduledPerformingPhysicianIdentificationSequence", "SQ", "1" }, { Tag(0x0040, 0x0010),
+ "Scheduled Station Name", "ScheduledStationName", "SH", "1-n" }, { Tag(0x0040, 0x0011),
+ "Scheduled Procedure Step Location", "ScheduledProcedureStepLocation", "SH", "1" }, { Tag(0x0040, 0x0012),
+ "Pre-Medication", "PreMedication", "LO", "1" }, { Tag(0x0040, 0x0020),
+ "Scheduled Procedure Step Status", "ScheduledProcedureStepStatus", "CS", "1" }, { Tag(0x0040, 0x0026),
+ "Order Placer Identifier Sequence", "OrderPlacerIdentifierSequence", "SQ", "1" }, { Tag(0x0040, 0x0027),
+ "Order Filler Identifier Sequence", "OrderFillerIdentifierSequence", "SQ", "1" }, { Tag(0x0040, 0x0031),
+ "Local Namespace Entity ID", "LocalNamespaceEntityID", "UT", "1" }, { Tag(0x0040, 0x0032),
+ "Universal Entity ID", "UniversalEntityID", "UT", "1" }, { Tag(0x0040, 0x0033),
+ "Universal Entity ID Type", "UniversalEntityIDType", "CS", "1" }, { Tag(0x0040, 0x0035),
+ "Identifier Type Code", "IdentifierTypeCode", "CS", "1" }, { Tag(0x0040, 0x0036),
+ "Assigning Facility Sequence", "AssigningFacilitySequence", "SQ", "1" }, { Tag(0x0040, 0x0039),
+ "Assigning Jurisdiction Code Sequence", "AssigningJurisdictionCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x003a),
+ "Assigning Agency or Department Code Sequence", "AssigningAgencyOrDepartmentCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x0100),
+ "Scheduled Procedure Step Sequence", "ScheduledProcedureStepSequence", "SQ", "1" }, { Tag(0x0040, 0x0220),
+ "Referenced Non-Image Composite SOP Instance Sequence", "ReferencedNonImageCompositeSOPInstanceSequence", "SQ", "1" }, { Tag(0x0040, 0x0241),
+ "Performed Station AE Title", "PerformedStationAETitle", "AE", "1" }, { Tag(0x0040, 0x0242),
+ "Performed Station Name", "PerformedStationName", "SH", "1" }, { Tag(0x0040, 0x0243),
+ "Performed Location", "PerformedLocation", "SH", "1" }, { Tag(0x0040, 0x0244),
+ "Performed Procedure Step Start Date", "PerformedProcedureStepStartDate", "DA", "1" }, { Tag(0x0040, 0x0245),
+ "Performed Procedure Step Start Time", "PerformedProcedureStepStartTime", "TM", "1" }, { Tag(0x0040, 0x0250),
+ "Performed Procedure Step End Date", "PerformedProcedureStepEndDate", "DA", "1" }, { Tag(0x0040, 0x0251),
+ "Performed Procedure Step End Time", "PerformedProcedureStepEndTime", "TM", "1" }, { Tag(0x0040, 0x0252),
+ "Performed Procedure Step Status", "PerformedProcedureStepStatus", "CS", "1" }, { Tag(0x0040, 0x0253),
+ "Performed Procedure Step ID", "PerformedProcedureStepID", "SH", "1" }, { Tag(0x0040, 0x0254),
+ "Performed Procedure Step Description", "PerformedProcedureStepDescription", "LO", "1" }, { Tag(0x0040, 0x0255),
+ "Performed Procedure Type Description", "PerformedProcedureTypeDescription", "LO", "1" }, { Tag(0x0040, 0x0260),
+ "Performed Protocol Code Sequence", "PerformedProtocolCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x0261),
+ "Performed Protocol Type", "PerformedProtocolType", "CS", "1" }, { Tag(0x0040, 0x0270),
+ "Scheduled Step Attributes Sequence", "ScheduledStepAttributesSequence", "SQ", "1" }, { Tag(0x0040, 0x0275),
+ "Request Attributes Sequence", "RequestAttributesSequence", "SQ", "1" }, { Tag(0x0040, 0x0280),
+ "Comments on the Performed Procedure Step", "CommentsOnThePerformedProcedureStep", "ST", "1" }, { Tag(0x0040, 0x0281),
+ "Performed Procedure Step Discontinuation Reason Code Sequence", "PerformedProcedureStepDiscontinuationReasonCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x0293),
+ "Quantity Sequence", "QuantitySequence", "SQ", "1" }, { Tag(0x0040, 0x0294),
+ "Quantity", "Quantity", "DS", "1" }, { Tag(0x0040, 0x0295),
+ "Measuring Units Sequence", "MeasuringUnitsSequence", "SQ", "1" }, { Tag(0x0040, 0x0296),
+ "Billing Item Sequence", "BillingItemSequence", "SQ", "1" }, { Tag(0x0040, 0x0300),
+ "Total Time of Fluoroscopy", "TotalTimeOfFluoroscopy", "US", "1" }, { Tag(0x0040, 0x0301),
+ "Total Number of Exposures", "TotalNumberOfExposures", "US", "1" }, { Tag(0x0040, 0x0302),
+ "Entrance Dose", "EntranceDose", "US", "1" }, { Tag(0x0040, 0x0303),
+ "Exposed Area", "ExposedArea", "US", "1-2" }, { Tag(0x0040, 0x0306),
+ "Distance Source to Entrance", "DistanceSourceToEntrance", "DS", "1" }, { Tag(0x0040, 0x0307),
+ "Distance Source to Support", "DistanceSourceToSupport", "DS", "1" }, { Tag(0x0040, 0x030e),
+ "Exposure Dose Sequence", "ExposureDoseSequence", "SQ", "1" }, { Tag(0x0040, 0x0310),
+ "Comments on Radiation Dose", "CommentsOnRadiationDose", "ST", "1" }, { Tag(0x0040, 0x0312),
+ "X-Ray Output", "XRayOutput", "DS", "1" }, { Tag(0x0040, 0x0314),
+ "Half Value Layer", "HalfValueLayer", "DS", "1" }, { Tag(0x0040, 0x0316),
+ "Organ Dose", "OrganDose", "DS", "1" }, { Tag(0x0040, 0x0318),
+ "Organ Exposed", "OrganExposed", "CS", "1" }, { Tag(0x0040, 0x0320),
+ "Billing Procedure Step Sequence", "BillingProcedureStepSequence", "SQ", "1" }, { Tag(0x0040, 0x0321),
+ "Film Consumption Sequence", "FilmConsumptionSequence", "SQ", "1" }, { Tag(0x0040, 0x0324),
+ "Billing Supplies and Devices Sequence", "BillingSuppliesAndDevicesSequence", "SQ", "1" }, { Tag(0x0040, 0x0330),
+ "Referenced Procedure Step Sequence", "ReferencedProcedureStepSequence", "SQ", "1" }, { Tag(0x0040, 0x0340),
+ "Performed Series Sequence", "PerformedSeriesSequence", "SQ", "1" }, { Tag(0x0040, 0x0400),
+ "Comments on the Scheduled Procedure Step", "CommentsOnTheScheduledProcedureStep", "LT", "1" }, { Tag(0x0040, 0x0440),
+ "Protocol Context Sequence", "ProtocolContextSequence", "SQ", "1" }, { Tag(0x0040, 0x0441),
+ "Content Item Modifier Sequence", "ContentItemModifierSequence", "SQ", "1" }, { Tag(0x0040, 0x0500),
+ "Scheduled Specimen Sequence", "ScheduledSpecimenSequence", "SQ", "1" }, { Tag(0x0040, 0x050a),
+ "Specimen Accession Number", "SpecimenAccessionNumber", "LO", "1" }, { Tag(0x0040, 0x0512),
+ "Container Identifier", "ContainerIdentifier", "LO", "1" }, { Tag(0x0040, 0x0513),
+ "Issuer of the Container Identifier Sequence", "IssuerOfTheContainerIdentifierSequence", "SQ", "1" }, { Tag(0x0040, 0x0515),
+ "Alternate Container Identifier Sequence", "AlternateContainerIdentifierSequence", "SQ", "1" }, { Tag(0x0040, 0x0518),
+ "Container Type Code Sequence", "ContainerTypeCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x051a),
+ "Container Description", "ContainerDescription", "LO", "1" }, { Tag(0x0040, 0x0520),
+ "Container Component Sequence", "ContainerComponentSequence", "SQ", "1" }, { Tag(0x0040, 0x0550),
+ "Specimen Sequence", "SpecimenSequence", "SQ", "1" }, { Tag(0x0040, 0x0551),
+ "Specimen Identifier", "SpecimenIdentifier", "LO", "1" }, { Tag(0x0040, 0x0552),
+ "Specimen Description Sequence (Trial)", "SpecimenDescriptionSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0x0553),
+ "Specimen Description (Trial)", "SpecimenDescriptionTrial", "ST", "1" }, { Tag(0x0040, 0x0554),
+ "Specimen UID", "SpecimenUID", "UI", "1" }, { Tag(0x0040, 0x0555),
+ "Acquisition Context Sequence", "AcquisitionContextSequence", "SQ", "1" }, { Tag(0x0040, 0x0556),
+ "Acquisition Context Description", "AcquisitionContextDescription", "ST", "1" }, { Tag(0x0040, 0x059a),
+ "Specimen Type Code Sequence", "SpecimenTypeCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x0560),
+ "Specimen Description Sequence", "SpecimenDescriptionSequence", "SQ", "1" }, { Tag(0x0040, 0x0562),
+ "Issuer of the Specimen Identifier Sequence", "IssuerOfTheSpecimenIdentifierSequence", "SQ", "1" }, { Tag(0x0040, 0x0600),
+ "Specimen Short Description", "SpecimenShortDescription", "LO", "1" }, { Tag(0x0040, 0x0602),
+ "Specimen Detailed Description", "SpecimenDetailedDescription", "UT", "1" }, { Tag(0x0040, 0x0610),
+ "Specimen Preparation Sequence", "SpecimenPreparationSequence", "SQ", "1" }, { Tag(0x0040, 0x0612),
+ "Specimen Preparation Step Content Item Sequence", "SpecimenPreparationStepContentItemSequence", "SQ", "1" }, { Tag(0x0040, 0x0620),
+ "Specimen Localization Content Item Sequence", "SpecimenLocalizationContentItemSequence", "SQ", "1" }, { Tag(0x0040, 0x06fa),
+ "Slide Identifier", "SlideIdentifier", "LO", "1" }, { Tag(0x0040, 0x071a),
+ "Image Center Point Coordinates Sequence", "ImageCenterPointCoordinatesSequence", "SQ", "1" }, { Tag(0x0040, 0x072a),
+ "X Offset in Slide Coordinate System", "XOffsetInSlideCoordinateSystem", "DS", "1" }, { Tag(0x0040, 0x073a),
+ "Y Offset in Slide Coordinate System", "YOffsetInSlideCoordinateSystem", "DS", "1" }, { Tag(0x0040, 0x074a),
+ "Z Offset in Slide Coordinate System", "ZOffsetInSlideCoordinateSystem", "DS", "1" }, { Tag(0x0040, 0x08d8),
+ "Pixel Spacing Sequence", "PixelSpacingSequence", "SQ", "1" }, { Tag(0x0040, 0x08da),
+ "Coordinate System Axis Code Sequence", "CoordinateSystemAxisCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x08ea),
+ "Measurement Units Code Sequence", "MeasurementUnitsCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x09f8),
+ "Vital Stain Code Sequence (Trial)", "VitalStainCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0x1001),
+ "Requested Procedure ID", "RequestedProcedureID", "SH", "1" }, { Tag(0x0040, 0x1002),
+ "Reason for the Requested Procedure", "ReasonForTheRequestedProcedure", "LO", "1" }, { Tag(0x0040, 0x1003),
+ "Requested Procedure Priority", "RequestedProcedurePriority", "SH", "1" }, { Tag(0x0040, 0x1004),
+ "Patient Transport Arrangements", "PatientTransportArrangements", "LO", "1" }, { Tag(0x0040, 0x1005),
+ "Requested Procedure Location", "RequestedProcedureLocation", "LO", "1" }, { Tag(0x0040, 0x1006),
+ "Placer Order Number / Procedure", "PlacerOrderNumberProcedure", "SH", "1" }, { Tag(0x0040, 0x1007),
+ "Filler Order Number / Procedure", "FillerOrderNumberProcedure", "SH", "1" }, { Tag(0x0040, 0x1008),
+ "Confidentiality Code", "ConfidentialityCode", "LO", "1" }, { Tag(0x0040, 0x1009),
+ "Reporting Priority", "ReportingPriority", "SH", "1" }, { Tag(0x0040, 0x100a),
+ "Reason for Requested Procedure Code Sequence", "ReasonForRequestedProcedureCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x1010),
+ "Names of Intended Recipients of Results", "NamesOfIntendedRecipientsOfResults", "PN", "1-n" }, { Tag(0x0040, 0x1011),
+ "Intended Recipients of Results Identification Sequence", "IntendedRecipientsOfResultsIdentificationSequence", "SQ", "1" }, { Tag(0x0040, 0x1012),
+ "Reason For Performed Procedure Code Sequence", "ReasonForPerformedProcedureCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x1060),
+ "Requested Procedure Description (Trial)", "RequestedProcedureDescriptionTrial", "LO", "1" }, { Tag(0x0040, 0x1101),
+ "Person Identification Code Sequence", "PersonIdentificationCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x1102),
+ "Person's Address", "PersonAddress", "ST", "1" }, { Tag(0x0040, 0x1103),
+ "Person's Telephone Numbers", "PersonTelephoneNumbers", "LO", "1-n" }, { Tag(0x0040, 0x1104),
+ "Person's Telecom Information", "PersonTelecomInformation", "LT", "1" }, { Tag(0x0040, 0x1400),
+ "Requested Procedure Comments", "RequestedProcedureComments", "LT", "1" }, { Tag(0x0040, 0x2001),
+ "Reason for the Imaging Service Request", "ReasonForTheImagingServiceRequest", "LO", "1" }, { Tag(0x0040, 0x2004),
+ "Issue Date of Imaging Service Request", "IssueDateOfImagingServiceRequest", "DA", "1" }, { Tag(0x0040, 0x2005),
+ "Issue Time of Imaging Service Request", "IssueTimeOfImagingServiceRequest", "TM", "1" }, { Tag(0x0040, 0x2006),
+ "Placer Order Number / Imaging Service Request (Retired)", "PlacerOrderNumberImagingServiceRequestRetired", "SH", "1" }, { Tag(0x0040, 0x2007),
+ "Filler Order Number / Imaging Service Request (Retired)", "FillerOrderNumberImagingServiceRequestRetired", "SH", "1" }, { Tag(0x0040, 0x2008),
+ "Order Entered By", "OrderEnteredBy", "PN", "1" }, { Tag(0x0040, 0x2009),
+ "Order Enterer's Location", "OrderEntererLocation", "SH", "1" }, { Tag(0x0040, 0x2010),
+ "Order Callback Phone Number", "OrderCallbackPhoneNumber", "SH", "1" }, { Tag(0x0040, 0x2011),
+ "Order Callback Telecom Information", "OrderCallbackTelecomInformation", "LT", "1" }, { Tag(0x0040, 0x2016),
+ "Placer Order Number / Imaging Service Request", "PlacerOrderNumberImagingServiceRequest", "LO", "1" }, { Tag(0x0040, 0x2017),
+ "Filler Order Number / Imaging Service Request", "FillerOrderNumberImagingServiceRequest", "LO", "1" }, { Tag(0x0040, 0x2400),
+ "Imaging Service Request Comments", "ImagingServiceRequestComments", "LT", "1" }, { Tag(0x0040, 0x3001),
+ "Confidentiality Constraint on Patient Data Description", "ConfidentialityConstraintOnPatientDataDescription", "LO", "1" }, { Tag(0x0040, 0x4001),
+ "General Purpose Scheduled Procedure Step Status", "GeneralPurposeScheduledProcedureStepStatus", "CS", "1" }, { Tag(0x0040, 0x4002),
+ "General Purpose Performed Procedure Step Status", "GeneralPurposePerformedProcedureStepStatus", "CS", "1" }, { Tag(0x0040, 0x4003),
+ "General Purpose Scheduled Procedure Step Priority", "GeneralPurposeScheduledProcedureStepPriority", "CS", "1" }, { Tag(0x0040, 0x4004),
+ "Scheduled Processing Applications Code Sequence", "ScheduledProcessingApplicationsCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4005),
+ "Scheduled Procedure Step Start DateTime", "ScheduledProcedureStepStartDateTime", "DT", "1" }, { Tag(0x0040, 0x4006),
+ "Multiple Copies Flag", "MultipleCopiesFlag", "CS", "1" }, { Tag(0x0040, 0x4007),
+ "Performed Processing Applications Code Sequence", "PerformedProcessingApplicationsCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4009),
+ "Human Performer Code Sequence", "HumanPerformerCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4010),
+ "Scheduled Procedure Step Modification DateTime", "ScheduledProcedureStepModificationDateTime", "DT", "1" }, { Tag(0x0040, 0x4011),
+ "Expected Completion DateTime", "ExpectedCompletionDateTime", "DT", "1" }, { Tag(0x0040, 0x4015),
+ "Resulting General Purpose Performed Procedure Steps Sequence", "ResultingGeneralPurposePerformedProcedureStepsSequence", "SQ", "1" }, { Tag(0x0040, 0x4016),
+ "Referenced General Purpose Scheduled Procedure Step Sequence", "ReferencedGeneralPurposeScheduledProcedureStepSequence", "SQ", "1" }, { Tag(0x0040, 0x4018),
+ "Scheduled Workitem Code Sequence", "ScheduledWorkitemCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4019),
+ "Performed Workitem Code Sequence", "PerformedWorkitemCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4020),
+ "Input Availability Flag", "InputAvailabilityFlag", "CS", "1" }, { Tag(0x0040, 0x4021),
+ "Input Information Sequence", "InputInformationSequence", "SQ", "1" }, { Tag(0x0040, 0x4022),
+ "Relevant Information Sequence", "RelevantInformationSequence", "SQ", "1" }, { Tag(0x0040, 0x4023),
+ "Referenced General Purpose Scheduled Procedure Step Transaction UID", "ReferencedGeneralPurposeScheduledProcedureStepTransactionUID", "UI", "1" }, { Tag(0x0040, 0x4025),
+ "Scheduled Station Name Code Sequence", "ScheduledStationNameCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4026),
+ "Scheduled Station Class Code Sequence", "ScheduledStationClassCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4027),
+ "Scheduled Station Geographic Location Code Sequence", "ScheduledStationGeographicLocationCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4028),
+ "Performed Station Name Code Sequence", "PerformedStationNameCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4029),
+ "Performed Station Class Code Sequence", "PerformedStationClassCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4030),
+ "Performed Station Geographic Location Code Sequence", "PerformedStationGeographicLocationCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4031),
+ "Requested Subsequent Workitem Code Sequence", "RequestedSubsequentWorkitemCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4032),
+ "Non-DICOM Output Code Sequence", "NonDICOMOutputCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x4033),
+ "Output Information Sequence", "OutputInformationSequence", "SQ", "1" }, { Tag(0x0040, 0x4034),
+ "Scheduled Human Performers Sequence", "ScheduledHumanPerformersSequence", "SQ", "1" }, { Tag(0x0040, 0x4035),
+ "Actual Human Performers Sequence", "ActualHumanPerformersSequence", "SQ", "1" }, { Tag(0x0040, 0x4036),
+ "Human Performer's Organization", "HumanPerformerOrganization", "LO", "1" }, { Tag(0x0040, 0x4037),
+ "Human Performer's Name", "HumanPerformerName", "PN", "1" }, { Tag(0x0040, 0x4040),
+ "Raw Data Handling", "RawDataHandling", "CS", "1" }, { Tag(0x0040, 0x4041),
+ "Input Readiness State", "InputReadinessState", "CS", "1" }, { Tag(0x0040, 0x4050),
+ "Performed Procedure Step Start DateTime", "PerformedProcedureStepStartDateTime", "DT", "1" }, { Tag(0x0040, 0x4051),
+ "Performed Procedure Step End DateTime", "PerformedProcedureStepEndDateTime", "DT", "1" }, { Tag(0x0040, 0x4052),
+ "Procedure Step Cancellation DateTime", "ProcedureStepCancellationDateTime", "DT", "1" }, { Tag(0x0040, 0x4070),
+ "Output Destination Sequence", "OutputDestinationSequence", "SQ", "1" }, { Tag(0x0040, 0x4071),
+ "DICOM Storage Sequence", "DICOMStorageSequence", "SQ", "1" }, { Tag(0x0040, 0x4072),
+ "STOW-RS Storage Sequence", "STOWRSStorageSequence", "SQ", "1" }, { Tag(0x0040, 0x4073),
+ "Storage URL", "StorageURL", "UR", "1" }, { Tag(0x0040, 0x4074),
+ "XDS Storage Sequence", "XDSStorageSequence", "SQ", "1" }, { Tag(0x0040, 0x8302),
+ "Entrance Dose in mGy", "EntranceDoseInmGy", "DS", "1" }, { Tag(0x0040, 0x9092),
+ "Parametric Map Frame Type Sequence", "ParametricMapFrameTypeSequence", "SQ", "1" }, { Tag(0x0040, 0x9094),
+ "Referenced Image Real World Value Mapping Sequence", "ReferencedImageRealWorldValueMappingSequence", "SQ", "1" }, { Tag(0x0040, 0x9096),
+ "Real World Value Mapping Sequence", "RealWorldValueMappingSequence", "SQ", "1" }, { Tag(0x0040, 0x9098),
+ "Pixel Value Mapping Code Sequence", "PixelValueMappingCodeSequence", "SQ", "1" }, { Tag(0x0040, 0x9210),
+ "LUT Label", "LUTLabel", "SH", "1" }, { Tag(0x0040, 0x9211),
+ "Real World Value Last Value Mapped", "RealWorldValueLastValueMapped", "US or SS", "1" }, { Tag(0x0040, 0x9212),
+ "Real World Value LUT Data", "RealWorldValueLUTData", "FD", "1-n" }, { Tag(0x0040, 0x9213),
+ "Double Float Real World Value Last Value Mapped", "DoubleFloatRealWorldValueLastValueMapped", "FD", "1" }, { Tag(0x0040, 0x9214),
+ "Double Float Real World Value First Value Mapped", "DoubleFloatRealWorldValueFirstValueMapped", "FD", "1" }, { Tag(0x0040, 0x9216),
+ "Real World Value First Value Mapped", "RealWorldValueFirstValueMapped", "US or SS", "1" }, { Tag(0x0040, 0x9220),
+ "Quantity Definition Sequence", "QuantityDefinitionSequence", "SQ", "1" }, { Tag(0x0040, 0x9224),
+ "Real World Value Intercept", "RealWorldValueIntercept", "FD", "1" }, { Tag(0x0040, 0x9225),
+ "Real World Value Slope", "RealWorldValueSlope", "FD", "1" }, { Tag(0x0040, 0xa007),
+ "Findings Flag (Trial)", "FindingsFlagTrial", "CS", "1" }, { Tag(0x0040, 0xa010),
+ "Relationship Type", "RelationshipType", "CS", "1" }, { Tag(0x0040, 0xa020),
+ "Findings Sequence (Trial)", "FindingsSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa021),
+ "Findings Group UID (Trial)", "FindingsGroupUIDTrial", "UI", "1" }, { Tag(0x0040, 0xa022),
+ "Referenced Findings Group UID (Trial)", "ReferencedFindingsGroupUIDTrial", "UI", "1" }, { Tag(0x0040, 0xa023),
+ "Findings Group Recording Date (Trial)", "FindingsGroupRecordingDateTrial", "DA", "1" }, { Tag(0x0040, 0xa024),
+ "Findings Group Recording Time (Trial)", "FindingsGroupRecordingTimeTrial", "TM", "1" }, { Tag(0x0040, 0xa026),
+ "Findings Source Category Code Sequence (Trial)", "FindingsSourceCategoryCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa027),
+ "Verifying Organization", "VerifyingOrganization", "LO", "1" }, { Tag(0x0040, 0xa028),
+ "Documenting Organization Identifier Code Sequence (Trial)", "DocumentingOrganizationIdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa030),
+ "Verification DateTime", "VerificationDateTime", "DT", "1" }, { Tag(0x0040, 0xa032),
+ "Observation DateTime", "ObservationDateTime", "DT", "1" }, { Tag(0x0040, 0xa040),
+ "Value Type", "ValueType", "CS", "1" }, { Tag(0x0040, 0xa043),
+ "Concept Name Code Sequence", "ConceptNameCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa047),
+ "Measurement Precision Description (Trial)", "MeasurementPrecisionDescriptionTrial", "LO", "1" }, { Tag(0x0040, 0xa050),
+ "Continuity Of Content", "ContinuityOfContent", "CS", "1" }, { Tag(0x0040, 0xa057),
+ "Urgency or Priority Alerts (Trial)", "UrgencyOrPriorityAlertsTrial", "CS", "1-n" }, { Tag(0x0040, 0xa060),
+ "Sequencing Indicator (Trial)", "SequencingIndicatorTrial", "LO", "1" }, { Tag(0x0040, 0xa066),
+ "Document Identifier Code Sequence (Trial)", "DocumentIdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa067),
+ "Document Author (Trial)", "DocumentAuthorTrial", "PN", "1" }, { Tag(0x0040, 0xa068),
+ "Document Author Identifier Code Sequence (Trial)", "DocumentAuthorIdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa070),
+ "Identifier Code Sequence (Trial)", "IdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa073),
+ "Verifying Observer Sequence", "VerifyingObserverSequence", "SQ", "1" }, { Tag(0x0040, 0xa074),
+ "Object Binary Identifier (Trial)", "ObjectBinaryIdentifierTrial", "OB", "1" }, { Tag(0x0040, 0xa075),
+ "Verifying Observer Name", "VerifyingObserverName", "PN", "1" }, { Tag(0x0040, 0xa076),
+ "Documenting Observer Identifier Code Sequence (Trial)", "DocumentingObserverIdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa078),
+ "Author Observer Sequence", "AuthorObserverSequence", "SQ", "1" }, { Tag(0x0040, 0xa07a),
+ "Participant Sequence", "ParticipantSequence", "SQ", "1" }, { Tag(0x0040, 0xa07c),
+ "Custodial Organization Sequence", "CustodialOrganizationSequence", "SQ", "1" }, { Tag(0x0040, 0xa080),
+ "Participation Type", "ParticipationType", "CS", "1" }, { Tag(0x0040, 0xa082),
+ "Participation DateTime", "ParticipationDateTime", "DT", "1" }, { Tag(0x0040, 0xa084),
+ "Observer Type", "ObserverType", "CS", "1" }, { Tag(0x0040, 0xa085),
+ "Procedure Identifier Code Sequence (Trial)", "ProcedureIdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa088),
+ "Verifying Observer Identification Code Sequence", "VerifyingObserverIdentificationCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa089),
+ "Object Directory Binary Identifier (Trial)", "ObjectDirectoryBinaryIdentifierTrial", "OB", "1" }, { Tag(0x0040, 0xa090),
+ "Equivalent CDA Document Sequence", "EquivalentCDADocumentSequence", "SQ", "1" }, { Tag(0x0040, 0xa0b0),
+ "Referenced Waveform Channels", "ReferencedWaveformChannels", "US", "2-2n" }, { Tag(0x0040, 0xa110),
+ "Date of Document or Verbal Transaction (Trial)", "DateOfDocumentOrVerbalTransactionTrial", "DA", "1" }, { Tag(0x0040, 0xa112),
+ "Time of Document Creation or Verbal Transaction (Trial)", "TimeOfDocumentCreationOrVerbalTransactionTrial", "TM", "1" }, { Tag(0x0040, 0xa120),
+ "DateTime", "DateTime", "DT", "1" }, { Tag(0x0040, 0xa121),
+ "Date", "Date", "DA", "1" }, { Tag(0x0040, 0xa122),
+ "Time", "Time", "TM", "1" }, { Tag(0x0040, 0xa123),
+ "Person Name", "PersonName", "PN", "1" }, { Tag(0x0040, 0xa124),
+ "UID", "UID", "UI", "1" }, { Tag(0x0040, 0xa125),
+ "Report Status ID (Trial)", "ReportStatusIDTrial", "CS", "2" }, { Tag(0x0040, 0xa130),
+ "Temporal Range Type", "TemporalRangeType", "CS", "1" }, { Tag(0x0040, 0xa132),
+ "Referenced Sample Positions", "ReferencedSamplePositions", "UL", "1-n" }, { Tag(0x0040, 0xa136),
+ "Referenced Frame Numbers", "ReferencedFrameNumbers", "US", "1-n" }, { Tag(0x0040, 0xa138),
+ "Referenced Time Offsets", "ReferencedTimeOffsets", "DS", "1-n" }, { Tag(0x0040, 0xa13a),
+ "Referenced DateTime", "ReferencedDateTime", "DT", "1-n" }, { Tag(0x0040, 0xa160),
+ "Text Value", "TextValue", "UT", "1" }, { Tag(0x0040, 0xa161),
+ "Floating Point Value", "FloatingPointValue", "FD", "1-n" }, { Tag(0x0040, 0xa162),
+ "Rational Numerator Value", "RationalNumeratorValue", "SL", "1-n" }, { Tag(0x0040, 0xa163),
+ "Rational Denominator Value", "RationalDenominatorValue", "UL", "1-n" }, { Tag(0x0040, 0xa167),
+ "Observation Category Code Sequence (Trial)", "ObservationCategoryCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa168),
+ "Concept Code Sequence", "ConceptCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa16a),
+ "Bibliographic Citation (Trial)", "BibliographicCitationTrial", "ST", "1" }, { Tag(0x0040, 0xa170),
+ "Purpose of Reference Code Sequence", "PurposeOfReferenceCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa171),
+ "Observation UID", "ObservationUID", "UI", "1" }, { Tag(0x0040, 0xa172),
+ "Referenced Observation UID (Trial)", "ReferencedObservationUIDTrial", "UI", "1" }, { Tag(0x0040, 0xa173),
+ "Referenced Observation Class (Trial)", "ReferencedObservationClassTrial", "CS", "1" }, { Tag(0x0040, 0xa174),
+ "Referenced Object Observation Class (Trial)", "ReferencedObjectObservationClassTrial", "CS", "1" }, { Tag(0x0040, 0xa180),
+ "Annotation Group Number", "AnnotationGroupNumber", "US", "1" }, { Tag(0x0040, 0xa192),
+ "Observation Date (Trial)", "ObservationDateTrial", "DA", "1" }, { Tag(0x0040, 0xa193),
+ "Observation Time (Trial)", "ObservationTimeTrial", "TM", "1" }, { Tag(0x0040, 0xa194),
+ "Measurement Automation (Trial)", "MeasurementAutomationTrial", "CS", "1" }, { Tag(0x0040, 0xa195),
+ "Modifier Code Sequence", "ModifierCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa224),
+ "Identification Description (Trial)", "IdentificationDescriptionTrial", "ST", "1" }, { Tag(0x0040, 0xa290),
+ "Coordinates Set Geometric Type (Trial)", "CoordinatesSetGeometricTypeTrial", "CS", "1" }, { Tag(0x0040, 0xa296),
+ "Algorithm Code Sequence (Trial)", "AlgorithmCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa297),
+ "Algorithm Description (Trial)", "AlgorithmDescriptionTrial", "ST", "1" }, { Tag(0x0040, 0xa29a),
+ "Pixel Coordinates Set (Trial)", "PixelCoordinatesSetTrial", "SL", "2-2n" }, { Tag(0x0040, 0xa300),
+ "Measured Value Sequence", "MeasuredValueSequence", "SQ", "1" }, { Tag(0x0040, 0xa301),
+ "Numeric Value Qualifier Code Sequence", "NumericValueQualifierCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa307),
+ "Current Observer (Trial)", "CurrentObserverTrial", "PN", "1" }, { Tag(0x0040, 0xa30a),
+ "Numeric Value", "NumericValue", "DS", "1-n" }, { Tag(0x0040, 0xa313),
+ "Referenced Accession Sequence (Trial)", "ReferencedAccessionSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa33a),
+ "Report Status Comment (Trial)", "ReportStatusCommentTrial", "ST", "1" }, { Tag(0x0040, 0xa340),
+ "Procedure Context Sequence (Trial)", "ProcedureContextSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa352),
+ "Verbal Source (Trial)", "VerbalSourceTrial", "PN", "1" }, { Tag(0x0040, 0xa353),
+ "Address (Trial)", "AddressTrial", "ST", "1" }, { Tag(0x0040, 0xa354),
+ "Telephone Number (Trial)", "TelephoneNumberTrial", "LO", "1" }, { Tag(0x0040, 0xa358),
+ "Verbal Source Identifier Code Sequence (Trial)", "VerbalSourceIdentifierCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa360),
+ "Predecessor Documents Sequence", "PredecessorDocumentsSequence", "SQ", "1" }, { Tag(0x0040, 0xa370),
+ "Referenced Request Sequence", "ReferencedRequestSequence", "SQ", "1" }, { Tag(0x0040, 0xa372),
+ "Performed Procedure Code Sequence", "PerformedProcedureCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xa375),
+ "Current Requested Procedure Evidence Sequence", "CurrentRequestedProcedureEvidenceSequence", "SQ", "1" }, { Tag(0x0040, 0xa380),
+ "Report Detail Sequence (Trial)", "ReportDetailSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa385),
+ "Pertinent Other Evidence Sequence", "PertinentOtherEvidenceSequence", "SQ", "1" }, { Tag(0x0040, 0xa390),
+ "HL7 Structured Document Reference Sequence", "HL7StructuredDocumentReferenceSequence", "SQ", "1" }, { Tag(0x0040, 0xa402),
+ "Observation Subject UID (Trial)", "ObservationSubjectUIDTrial", "UI", "1" }, { Tag(0x0040, 0xa403),
+ "Observation Subject Class (Trial)", "ObservationSubjectClassTrial", "CS", "1" }, { Tag(0x0040, 0xa404),
+ "Observation Subject Type Code Sequence (Trial)", "ObservationSubjectTypeCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa491),
+ "Completion Flag", "CompletionFlag", "CS", "1" }, { Tag(0x0040, 0xa492),
+ "Completion Flag Description", "CompletionFlagDescription", "LO", "1" }, { Tag(0x0040, 0xa493),
+ "Verification Flag", "VerificationFlag", "CS", "1" }, { Tag(0x0040, 0xa494),
+ "Archive Requested", "ArchiveRequested", "CS", "1" }, { Tag(0x0040, 0xa496),
+ "Preliminary Flag", "PreliminaryFlag", "CS", "1" }, { Tag(0x0040, 0xa504),
+ "Content Template Sequence", "ContentTemplateSequence", "SQ", "1" }, { Tag(0x0040, 0xa525),
+ "Identical Documents Sequence", "IdenticalDocumentsSequence", "SQ", "1" }, { Tag(0x0040, 0xa600),
+ "Observation Subject Context Flag (Trial)", "ObservationSubjectContextFlagTrial", "CS", "1" }, { Tag(0x0040, 0xa601),
+ "Observer Context Flag (Trial)", "ObserverContextFlagTrial", "CS", "1" }, { Tag(0x0040, 0xa603),
+ "Procedure Context Flag (Trial)", "ProcedureContextFlagTrial", "CS", "1" }, { Tag(0x0040, 0xa730),
+ "Content Sequence", "ContentSequence", "SQ", "1" }, { Tag(0x0040, 0xa731),
+ "Relationship Sequence (Trial)", "RelationshipSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa732),
+ "Relationship Type Code Sequence (Trial)", "RelationshipTypeCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa744),
+ "Language Code Sequence (Trial)", "LanguageCodeSequenceTrial", "SQ", "1" }, { Tag(0x0040, 0xa992),
+ "Uniform Resource Locator (Trial)", "UniformResourceLocatorTrial", "ST", "1" }, { Tag(0x0040, 0xb020),
+ "Waveform Annotation Sequence", "WaveformAnnotationSequence", "SQ", "1" }, { Tag(0x0040, 0xdb00),
+ "Template Identifier", "TemplateIdentifier", "CS", "1" }, { Tag(0x0040, 0xdb06),
+ "Template Version", "TemplateVersion", "DT", "1" }, { Tag(0x0040, 0xdb07),
+ "Template Local Version", "TemplateLocalVersion", "DT", "1" }, { Tag(0x0040, 0xdb0b),
+ "Template Extension Flag", "TemplateExtensionFlag", "CS", "1" }, { Tag(0x0040, 0xdb0c),
+ "Template Extension Organization UID", "TemplateExtensionOrganizationUID", "UI", "1" }, { Tag(0x0040, 0xdb0d),
+ "Template Extension Creator UID", "TemplateExtensionCreatorUID", "UI", "1" }, { Tag(0x0040, 0xdb73),
+ "Referenced Content Item Identifier", "ReferencedContentItemIdentifier", "UL", "1-n" }, { Tag(0x0040, 0xe001),
+ "HL7 Instance Identifier", "HL7InstanceIdentifier", "ST", "1" }, { Tag(0x0040, 0xe004),
+ "HL7 Document Effective Time", "HL7DocumentEffectiveTime", "DT", "1" }, { Tag(0x0040, 0xe006),
+ "HL7 Document Type Code Sequence", "HL7DocumentTypeCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xe008),
+ "Document Class Code Sequence", "DocumentClassCodeSequence", "SQ", "1" }, { Tag(0x0040, 0xe010),
+ "Retrieve URI", "RetrieveURI", "UR", "1" }, { Tag(0x0040, 0xe011),
+ "Retrieve Location UID", "RetrieveLocationUID", "UI", "1" }, { Tag(0x0040, 0xe020),
+ "Type of Instances", "TypeOfInstances", "CS", "1" }, { Tag(0x0040, 0xe021),
+ "DICOM Retrieval Sequence", "DICOMRetrievalSequence", "SQ", "1" }, { Tag(0x0040, 0xe022),
+ "DICOM Media Retrieval Sequence", "DICOMMediaRetrievalSequence", "SQ", "1" }, { Tag(0x0040, 0xe023),
+ "WADO Retrieval Sequence", "WADORetrievalSequence", "SQ", "1" }, { Tag(0x0040, 0xe024),
+ "XDS Retrieval Sequence", "XDSRetrievalSequence", "SQ", "1" }, { Tag(0x0040, 0xe025),
+ "WADO-RS Retrieval Sequence", "WADORSRetrievalSequence", "SQ", "1" }, { Tag(0x0040, 0xe030),
+ "Repository Unique ID", "RepositoryUniqueID", "UI", "1" }, { Tag(0x0040, 0xe031),
+ "Home Community ID", "HomeCommunityID", "UI", "1" }, { Tag(0x0042, 0x0010),
+ "Document Title", "DocumentTitle", "ST", "1" }, { Tag(0x0042, 0x0011),
+ "Encapsulated Document", "EncapsulatedDocument", "OB", "1" }, { Tag(0x0042, 0x0012),
+ "MIME Type of Encapsulated Document", "MIMETypeOfEncapsulatedDocument", "LO", "1" }, { Tag(0x0042, 0x0013),
+ "Source Instance Sequence", "SourceInstanceSequence", "SQ", "1" }, { Tag(0x0042, 0x0014),
+ "List of MIME Types", "ListOfMIMETypes", "LO", "1-n" }, { Tag(0x0044, 0x0001),
+ "Product Package Identifier", "ProductPackageIdentifier", "ST", "1" }, { Tag(0x0044, 0x0002),
+ "Substance Administration Approval", "SubstanceAdministrationApproval", "CS", "1" }, { Tag(0x0044, 0x0003),
+ "Approval Status Further Description", "ApprovalStatusFurtherDescription", "LT", "1" }, { Tag(0x0044, 0x0004),
+ "Approval Status DateTime", "ApprovalStatusDateTime", "DT", "1" }, { Tag(0x0044, 0x0007),
+ "Product Type Code Sequence", "ProductTypeCodeSequence", "SQ", "1" }, { Tag(0x0044, 0x0008),
+ "Product Name", "ProductName", "LO", "1-n" }, { Tag(0x0044, 0x0009),
+ "Product Description", "ProductDescription", "LT", "1" }, { Tag(0x0044, 0x000a),
+ "Product Lot Identifier", "ProductLotIdentifier", "LO", "1" }, { Tag(0x0044, 0x000b),
+ "Product Expiration DateTime", "ProductExpirationDateTime", "DT", "1" }, { Tag(0x0044, 0x0010),
+ "Substance Administration DateTime", "SubstanceAdministrationDateTime", "DT", "1" }, { Tag(0x0044, 0x0011),
+ "Substance Administration Notes", "SubstanceAdministrationNotes", "LO", "1" }, { Tag(0x0044, 0x0012),
+ "Substance Administration Device ID", "SubstanceAdministrationDeviceID", "LO", "1" }, { Tag(0x0044, 0x0013),
+ "Product Parameter Sequence", "ProductParameterSequence", "SQ", "1" }, { Tag(0x0044, 0x0019),
+ "Substance Administration Parameter Sequence", "SubstanceAdministrationParameterSequence", "SQ", "1" }, { Tag(0x0046, 0x0012),
+ "Lens Description", "LensDescription", "LO", "1" }, { Tag(0x0046, 0x0014),
+ "Right Lens Sequence", "RightLensSequence", "SQ", "1" }, { Tag(0x0046, 0x0015),
+ "Left Lens Sequence", "LeftLensSequence", "SQ", "1" }, { Tag(0x0046, 0x0016),
+ "Unspecified Laterality Lens Sequence", "UnspecifiedLateralityLensSequence", "SQ", "1" }, { Tag(0x0046, 0x0018),
+ "Cylinder Sequence", "CylinderSequence", "SQ", "1" }, { Tag(0x0046, 0x0028),
+ "Prism Sequence", "PrismSequence", "SQ", "1" }, { Tag(0x0046, 0x0030),
+ "Horizontal Prism Power", "HorizontalPrismPower", "FD", "1" }, { Tag(0x0046, 0x0032),
+ "Horizontal Prism Base", "HorizontalPrismBase", "CS", "1" }, { Tag(0x0046, 0x0034),
+ "Vertical Prism Power", "VerticalPrismPower", "FD", "1" }, { Tag(0x0046, 0x0036),
+ "Vertical Prism Base", "VerticalPrismBase", "CS", "1" }, { Tag(0x0046, 0x0038),
+ "Lens Segment Type", "LensSegmentType", "CS", "1" }, { Tag(0x0046, 0x0040),
+ "Optical Transmittance", "OpticalTransmittance", "FD", "1" }, { Tag(0x0046, 0x0042),
+ "Channel Width", "ChannelWidth", "FD", "1" }, { Tag(0x0046, 0x0044),
+ "Pupil Size", "PupilSize", "FD", "1" }, { Tag(0x0046, 0x0046),
+ "Corneal Size", "CornealSize", "FD", "1" }, { Tag(0x0046, 0x0050),
+ "Autorefraction Right Eye Sequence", "AutorefractionRightEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0052),
+ "Autorefraction Left Eye Sequence", "AutorefractionLeftEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0060),
+ "Distance Pupillary Distance", "DistancePupillaryDistance", "FD", "1" }, { Tag(0x0046, 0x0062),
+ "Near Pupillary Distance", "NearPupillaryDistance", "FD", "1" }, { Tag(0x0046, 0x0063),
+ "Intermediate Pupillary Distance", "IntermediatePupillaryDistance", "FD", "1" }, { Tag(0x0046, 0x0064),
+ "Other Pupillary Distance", "OtherPupillaryDistance", "FD", "1" }, { Tag(0x0046, 0x0070),
+ "Keratometry Right Eye Sequence", "KeratometryRightEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0071),
+ "Keratometry Left Eye Sequence", "KeratometryLeftEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0074),
+ "Steep Keratometric Axis Sequence", "SteepKeratometricAxisSequence", "SQ", "1" }, { Tag(0x0046, 0x0075),
+ "Radius of Curvature", "RadiusOfCurvature", "FD", "1" }, { Tag(0x0046, 0x0076),
+ "Keratometric Power", "KeratometricPower", "FD", "1" }, { Tag(0x0046, 0x0077),
+ "Keratometric Axis", "KeratometricAxis", "FD", "1" }, { Tag(0x0046, 0x0080),
+ "Flat Keratometric Axis Sequence", "FlatKeratometricAxisSequence", "SQ", "1" }, { Tag(0x0046, 0x0092),
+ "Background Color", "BackgroundColor", "CS", "1" }, { Tag(0x0046, 0x0094),
+ "Optotype", "Optotype", "CS", "1" }, { Tag(0x0046, 0x0095),
+ "Optotype Presentation", "OptotypePresentation", "CS", "1" }, { Tag(0x0046, 0x0097),
+ "Subjective Refraction Right Eye Sequence", "SubjectiveRefractionRightEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0098),
+ "Subjective Refraction Left Eye Sequence", "SubjectiveRefractionLeftEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0100),
+ "Add Near Sequence", "AddNearSequence", "SQ", "1" }, { Tag(0x0046, 0x0101),
+ "Add Intermediate Sequence", "AddIntermediateSequence", "SQ", "1" }, { Tag(0x0046, 0x0102),
+ "Add Other Sequence", "AddOtherSequence", "SQ", "1" }, { Tag(0x0046, 0x0104),
+ "Add Power", "AddPower", "FD", "1" }, { Tag(0x0046, 0x0106),
+ "Viewing Distance", "ViewingDistance", "FD", "1" }, { Tag(0x0046, 0x0121),
+ "Visual Acuity Type Code Sequence", "VisualAcuityTypeCodeSequence", "SQ", "1" }, { Tag(0x0046, 0x0122),
+ "Visual Acuity Right Eye Sequence", "VisualAcuityRightEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0123),
+ "Visual Acuity Left Eye Sequence", "VisualAcuityLeftEyeSequence", "SQ", "1" }, { Tag(0x0046, 0x0124),
+ "Visual Acuity Both Eyes Open Sequence", "VisualAcuityBothEyesOpenSequence", "SQ", "1" }, { Tag(0x0046, 0x0125),
+ "Viewing Distance Type", "ViewingDistanceType", "CS", "1" }, { Tag(0x0046, 0x0135),
+ "Visual Acuity Modifiers", "VisualAcuityModifiers", "SS", "2" }, { Tag(0x0046, 0x0137),
+ "Decimal Visual Acuity", "DecimalVisualAcuity", "FD", "1" }, { Tag(0x0046, 0x0139),
+ "Optotype Detailed Definition", "OptotypeDetailedDefinition", "LO", "1" }, { Tag(0x0046, 0x0145),
+ "Referenced Refractive Measurements Sequence", "ReferencedRefractiveMeasurementsSequence", "SQ", "1" }, { Tag(0x0046, 0x0146),
+ "Sphere Power", "SpherePower", "FD", "1" }, { Tag(0x0046, 0x0147),
+ "Cylinder Power", "CylinderPower", "FD", "1" }, { Tag(0x0046, 0x0201),
+ "Corneal Topography Surface", "CornealTopographySurface", "CS", "1" }, { Tag(0x0046, 0x0202),
+ "Corneal Vertex Location", "CornealVertexLocation", "FL", "2" }, { Tag(0x0046, 0x0203),
+ "Pupil Centroid X-Coordinate", "PupilCentroidXCoordinate", "FL", "1" }, { Tag(0x0046, 0x0204),
+ "Pupil Centroid Y-Coordinate", "PupilCentroidYCoordinate", "FL", "1" }, { Tag(0x0046, 0x0205),
+ "Equivalent Pupil Radius", "EquivalentPupilRadius", "FL", "1" }, { Tag(0x0046, 0x0207),
+ "Corneal Topography Map Type Code Sequence", "CornealTopographyMapTypeCodeSequence", "SQ", "1" }, { Tag(0x0046, 0x0208),
+ "Vertices of the Outline of Pupil", "VerticesOfTheOutlineOfPupil", "IS", "2-2n" }, { Tag(0x0046, 0x0210),
+ "Corneal Topography Mapping Normals Sequence", "CornealTopographyMappingNormalsSequence", "SQ", "1" }, { Tag(0x0046, 0x0211),
+ "Maximum Corneal Curvature Sequence", "MaximumCornealCurvatureSequence", "SQ", "1" }, { Tag(0x0046, 0x0212),
+ "Maximum Corneal Curvature", "MaximumCornealCurvature", "FL", "1" }, { Tag(0x0046, 0x0213),
+ "Maximum Corneal Curvature Location", "MaximumCornealCurvatureLocation", "FL", "2" }, { Tag(0x0046, 0x0215),
+ "Minimum Keratometric Sequence", "MinimumKeratometricSequence", "SQ", "1" }, { Tag(0x0046, 0x0218),
+ "Simulated Keratometric Cylinder Sequence", "SimulatedKeratometricCylinderSequence", "SQ", "1" }, { Tag(0x0046, 0x0220),
+ "Average Corneal Power", "AverageCornealPower", "FL", "1" }, { Tag(0x0046, 0x0224),
+ "Corneal I-S Value", "CornealISValue", "FL", "1" }, { Tag(0x0046, 0x0227),
+ "Analyzed Area", "AnalyzedArea", "FL", "1" }, { Tag(0x0046, 0x0230),
+ "Surface Regularity Index", "SurfaceRegularityIndex", "FL", "1" }, { Tag(0x0046, 0x0232),
+ "Surface Asymmetry Index", "SurfaceAsymmetryIndex", "FL", "1" }, { Tag(0x0046, 0x0234),
+ "Corneal Eccentricity Index", "CornealEccentricityIndex", "FL", "1" }, { Tag(0x0046, 0x0236),
+ "Keratoconus Prediction Index", "KeratoconusPredictionIndex", "FL", "1" }, { Tag(0x0046, 0x0238),
+ "Decimal Potential Visual Acuity", "DecimalPotentialVisualAcuity", "FL", "1" }, { Tag(0x0046, 0x0242),
+ "Corneal Topography Map Quality Evaluation", "CornealTopographyMapQualityEvaluation", "CS", "1" }, { Tag(0x0046, 0x0244),
+ "Source Image Corneal Processed Data Sequence", "SourceImageCornealProcessedDataSequence", "SQ", "1" }, { Tag(0x0046, 0x0247),
+ "Corneal Point Location", "CornealPointLocation", "FL", "3" }, { Tag(0x0046, 0x0248),
+ "Corneal Point Estimated", "CornealPointEstimated", "CS", "1" }, { Tag(0x0046, 0x0249),
+ "Axial Power", "AxialPower", "FL", "1" }, { Tag(0x0046, 0x0250),
+ "Tangential Power", "TangentialPower", "FL", "1" }, { Tag(0x0046, 0x0251),
+ "Refractive Power", "RefractivePower", "FL", "1" }, { Tag(0x0046, 0x0252),
+ "Relative Elevation", "RelativeElevation", "FL", "1" }, { Tag(0x0046, 0x0253),
+ "Corneal Wavefront", "CornealWavefront", "FL", "1" }, { Tag(0x0048, 0x0001),
+ "Imaged Volume Width", "ImagedVolumeWidth", "FL", "1" }, { Tag(0x0048, 0x0002),
+ "Imaged Volume Height", "ImagedVolumeHeight", "FL", "1" }, { Tag(0x0048, 0x0003),
+ "Imaged Volume Depth", "ImagedVolumeDepth", "FL", "1" }, { Tag(0x0048, 0x0006),
+ "Total Pixel Matrix Columns", "TotalPixelMatrixColumns", "UL", "1" }, { Tag(0x0048, 0x0007),
+ "Total Pixel Matrix Rows", "TotalPixelMatrixRows", "UL", "1" }, { Tag(0x0048, 0x0008),
+ "Total Pixel Matrix Origin Sequence", "TotalPixelMatrixOriginSequence", "SQ", "1" }, { Tag(0x0048, 0x0010),
+ "Specimen Label in Image", "SpecimenLabelInImage", "CS", "1" }, { Tag(0x0048, 0x0011),
+ "Focus Method", "FocusMethod", "CS", "1" }, { Tag(0x0048, 0x0012),
+ "Extended Depth of Field", "ExtendedDepthOfField", "CS", "1" }, { Tag(0x0048, 0x0013),
+ "Number of Focal Planes", "NumberOfFocalPlanes", "US", "1" }, { Tag(0x0048, 0x0014),
+ "Distance Between Focal Planes", "DistanceBetweenFocalPlanes", "FL", "1" }, { Tag(0x0048, 0x0015),
+ "Recommended Absent Pixel CIELab Value", "RecommendedAbsentPixelCIELabValue", "US", "3" }, { Tag(0x0048, 0x0100),
+ "Illuminator Type Code Sequence", "IlluminatorTypeCodeSequence", "SQ", "1" }, { Tag(0x0048, 0x0102),
+ "Image Orientation (Slide)", "ImageOrientationSlide", "DS", "6" }, { Tag(0x0048, 0x0105),
+ "Optical Path Sequence", "OpticalPathSequence", "SQ", "1" }, { Tag(0x0048, 0x0106),
+ "Optical Path Identifier", "OpticalPathIdentifier", "SH", "1" }, { Tag(0x0048, 0x0107),
+ "Optical Path Description", "OpticalPathDescription", "ST", "1" }, { Tag(0x0048, 0x0108),
+ "Illumination Color Code Sequence", "IlluminationColorCodeSequence", "SQ", "1" }, { Tag(0x0048, 0x0110),
+ "Specimen Reference Sequence", "SpecimenReferenceSequence", "SQ", "1" }, { Tag(0x0048, 0x0111),
+ "Condenser Lens Power", "CondenserLensPower", "DS", "1" }, { Tag(0x0048, 0x0112),
+ "Objective Lens Power", "ObjectiveLensPower", "DS", "1" }, { Tag(0x0048, 0x0113),
+ "Objective Lens Numerical Aperture", "ObjectiveLensNumericalAperture", "DS", "1" }, { Tag(0x0048, 0x0120),
+ "Palette Color Lookup Table Sequence", "PaletteColorLookupTableSequence", "SQ", "1" }, { Tag(0x0048, 0x0200),
+ "Referenced Image Navigation Sequence", "ReferencedImageNavigationSequence", "SQ", "1" }, { Tag(0x0048, 0x0201),
+ "Top Left Hand Corner of Localizer Area", "TopLeftHandCornerOfLocalizerArea", "US", "2" }, { Tag(0x0048, 0x0202),
+ "Bottom Right Hand Corner of Localizer Area", "BottomRightHandCornerOfLocalizerArea", "US", "2" }, { Tag(0x0048, 0x0207),
+ "Optical Path Identification Sequence", "OpticalPathIdentificationSequence", "SQ", "1" }, { Tag(0x0048, 0x021a),
+ "Plane Position (Slide) Sequence", "PlanePositionSlideSequence", "SQ", "1" }, { Tag(0x0048, 0x021e),
+ "Column Position In Total Image Pixel Matrix", "ColumnPositionInTotalImagePixelMatrix", "SL", "1" }, { Tag(0x0048, 0x021f),
+ "Row Position In Total Image Pixel Matrix", "RowPositionInTotalImagePixelMatrix", "SL", "1" }, { Tag(0x0048, 0x0301),
+ "Pixel Origin Interpretation", "PixelOriginInterpretation", "CS", "1" }, { Tag(0x0050, 0x0004),
+ "Calibration Image", "CalibrationImage", "CS", "1" }, { Tag(0x0050, 0x0010),
+ "Device Sequence", "DeviceSequence", "SQ", "1" }, { Tag(0x0050, 0x0012),
+ "Container Component Type Code Sequence", "ContainerComponentTypeCodeSequence", "SQ", "1" }, { Tag(0x0050, 0x0013),
+ "Container Component Thickness", "ContainerComponentThickness", "FD", "1" }, { Tag(0x0050, 0x0014),
+ "Device Length", "DeviceLength", "DS", "1" }, { Tag(0x0050, 0x0015),
+ "Container Component Width", "ContainerComponentWidth", "FD", "1" }, { Tag(0x0050, 0x0016),
+ "Device Diameter", "DeviceDiameter", "DS", "1" }, { Tag(0x0050, 0x0017),
+ "Device Diameter Units", "DeviceDiameterUnits", "CS", "1" }, { Tag(0x0050, 0x0018),
+ "Device Volume", "DeviceVolume", "DS", "1" }, { Tag(0x0050, 0x0019),
+ "Inter-Marker Distance", "InterMarkerDistance", "DS", "1" }, { Tag(0x0050, 0x001a),
+ "Container Component Material", "ContainerComponentMaterial", "CS", "1" }, { Tag(0x0050, 0x001b),
+ "Container Component ID", "ContainerComponentID", "LO", "1" }, { Tag(0x0050, 0x001c),
+ "Container Component Length", "ContainerComponentLength", "FD", "1" }, { Tag(0x0050, 0x001d),
+ "Container Component Diameter", "ContainerComponentDiameter", "FD", "1" }, { Tag(0x0050, 0x001e),
+ "Container Component Description", "ContainerComponentDescription", "LO", "1" }, { Tag(0x0050, 0x0020),
+ "Device Description", "DeviceDescription", "LO", "1" }, { Tag(0x0052, 0x0001),
+ "Contrast/Bolus Ingredient Percent by Volume", "ContrastBolusIngredientPercentByVolume", "FL", "1" }, { Tag(0x0052, 0x0002),
+ "OCT Focal Distance", "OCTFocalDistance", "FD", "1" }, { Tag(0x0052, 0x0003),
+ "Beam Spot Size", "BeamSpotSize", "FD", "1" }, { Tag(0x0052, 0x0004),
+ "Effective Refractive Index", "EffectiveRefractiveIndex", "FD", "1" }, { Tag(0x0052, 0x0006),
+ "OCT Acquisition Domain", "OCTAcquisitionDomain", "CS", "1" }, { Tag(0x0052, 0x0007),
+ "OCT Optical Center Wavelength", "OCTOpticalCenterWavelength", "FD", "1" }, { Tag(0x0052, 0x0008),
+ "Axial Resolution", "AxialResolution", "FD", "1" }, { Tag(0x0052, 0x0009),
+ "Ranging Depth", "RangingDepth", "FD", "1" }, { Tag(0x0052, 0x0011),
+ "A-line Rate", "ALineRate", "FD", "1" }, { Tag(0x0052, 0x0012),
+ "A-lines Per Frame", "ALinesPerFrame", "US", "1" }, { Tag(0x0052, 0x0013),
+ "Catheter Rotational Rate", "CatheterRotationalRate", "FD", "1" }, { Tag(0x0052, 0x0014),
+ "A-line Pixel Spacing", "ALinePixelSpacing", "FD", "1" }, { Tag(0x0052, 0x0016),
+ "Mode of Percutaneous Access Sequence", "ModeOfPercutaneousAccessSequence", "SQ", "1" }, { Tag(0x0052, 0x0025),
+ "Intravascular OCT Frame Type Sequence", "IntravascularOCTFrameTypeSequence", "SQ", "1" }, { Tag(0x0052, 0x0026),
+ "OCT Z Offset Applied", "OCTZOffsetApplied", "CS", "1" }, { Tag(0x0052, 0x0027),
+ "Intravascular Frame Content Sequence", "IntravascularFrameContentSequence", "SQ", "1" }, { Tag(0x0052, 0x0028),
+ "Intravascular Longitudinal Distance", "IntravascularLongitudinalDistance", "FD", "1" }, { Tag(0x0052, 0x0029),
+ "Intravascular OCT Frame Content Sequence", "IntravascularOCTFrameContentSequence", "SQ", "1" }, { Tag(0x0052, 0x0030),
+ "OCT Z Offset Correction", "OCTZOffsetCorrection", "SS", "1" }, { Tag(0x0052, 0x0031),
+ "Catheter Direction of Rotation", "CatheterDirectionOfRotation", "CS", "1" }, { Tag(0x0052, 0x0033),
+ "Seam Line Location", "SeamLineLocation", "FD", "1" }, { Tag(0x0052, 0x0034),
+ "First A-line Location", "FirstALineLocation", "FD", "1" }, { Tag(0x0052, 0x0036),
+ "Seam Line Index", "SeamLineIndex", "US", "1" }, { Tag(0x0052, 0x0038),
+ "Number of Padded A-lines", "NumberOfPaddedALines", "US", "1" }, { Tag(0x0052, 0x0039),
+ "Interpolation Type", "InterpolationType", "CS", "1" }, { Tag(0x0052, 0x003a),
+ "Refractive Index Applied", "RefractiveIndexApplied", "CS", "1" }, { Tag(0x0054, 0x0010),
+ "Energy Window Vector", "EnergyWindowVector", "US", "1-n" }, { Tag(0x0054, 0x0011),
+ "Number of Energy Windows", "NumberOfEnergyWindows", "US", "1" }, { Tag(0x0054, 0x0012),
+ "Energy Window Information Sequence", "EnergyWindowInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0013),
+ "Energy Window Range Sequence", "EnergyWindowRangeSequence", "SQ", "1" }, { Tag(0x0054, 0x0014),
+ "Energy Window Lower Limit", "EnergyWindowLowerLimit", "DS", "1" }, { Tag(0x0054, 0x0015),
+ "Energy Window Upper Limit", "EnergyWindowUpperLimit", "DS", "1" }, { Tag(0x0054, 0x0016),
+ "Radiopharmaceutical Information Sequence", "RadiopharmaceuticalInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0017),
+ "Residual Syringe Counts", "ResidualSyringeCounts", "IS", "1" }, { Tag(0x0054, 0x0018),
+ "Energy Window Name", "EnergyWindowName", "SH", "1" }, { Tag(0x0054, 0x0020),
+ "Detector Vector", "DetectorVector", "US", "1-n" }, { Tag(0x0054, 0x0021),
+ "Number of Detectors", "NumberOfDetectors", "US", "1" }, { Tag(0x0054, 0x0022),
+ "Detector Information Sequence", "DetectorInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0030),
+ "Phase Vector", "PhaseVector", "US", "1-n" }, { Tag(0x0054, 0x0031),
+ "Number of Phases", "NumberOfPhases", "US", "1" }, { Tag(0x0054, 0x0032),
+ "Phase Information Sequence", "PhaseInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0033),
+ "Number of Frames in Phase", "NumberOfFramesInPhase", "US", "1" }, { Tag(0x0054, 0x0036),
+ "Phase Delay", "PhaseDelay", "IS", "1" }, { Tag(0x0054, 0x0038),
+ "Pause Between Frames", "PauseBetweenFrames", "IS", "1" }, { Tag(0x0054, 0x0039),
+ "Phase Description", "PhaseDescription", "CS", "1" }, { Tag(0x0054, 0x0050),
+ "Rotation Vector", "RotationVector", "US", "1-n" }, { Tag(0x0054, 0x0051),
+ "Number of Rotations", "NumberOfRotations", "US", "1" }, { Tag(0x0054, 0x0052),
+ "Rotation Information Sequence", "RotationInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0053),
+ "Number of Frames in Rotation", "NumberOfFramesInRotation", "US", "1" }, { Tag(0x0054, 0x0060),
+ "R-R Interval Vector", "RRIntervalVector", "US", "1-n" }, { Tag(0x0054, 0x0061),
+ "Number of R-R Intervals", "NumberOfRRIntervals", "US", "1" }, { Tag(0x0054, 0x0062),
+ "Gated Information Sequence", "GatedInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0063),
+ "Data Information Sequence", "DataInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0070),
+ "Time Slot Vector", "TimeSlotVector", "US", "1-n" }, { Tag(0x0054, 0x0071),
+ "Number of Time Slots", "NumberOfTimeSlots", "US", "1" }, { Tag(0x0054, 0x0072),
+ "Time Slot Information Sequence", "TimeSlotInformationSequence", "SQ", "1" }, { Tag(0x0054, 0x0073),
+ "Time Slot Time", "TimeSlotTime", "DS", "1" }, { Tag(0x0054, 0x0080),
+ "Slice Vector", "SliceVector", "US", "1-n" }, { Tag(0x0054, 0x0081),
+ "Number of Slices", "NumberOfSlices", "US", "1" }, { Tag(0x0054, 0x0090),
+ "Angular View Vector", "AngularViewVector", "US", "1-n" }, { Tag(0x0054, 0x0100),
+ "Time Slice Vector", "TimeSliceVector", "US", "1-n" }, { Tag(0x0054, 0x0101),
+ "Number of Time Slices", "NumberOfTimeSlices", "US", "1" }, { Tag(0x0054, 0x0200),
+ "Start Angle", "StartAngle", "DS", "1" }, { Tag(0x0054, 0x0202),
+ "Type of Detector Motion", "TypeOfDetectorMotion", "CS", "1" }, { Tag(0x0054, 0x0210),
+ "Trigger Vector", "TriggerVector", "IS", "1-n" }, { Tag(0x0054, 0x0211),
+ "Number of Triggers in Phase", "NumberOfTriggersInPhase", "US", "1" }, { Tag(0x0054, 0x0220),
+ "View Code Sequence", "ViewCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0222),
+ "View Modifier Code Sequence", "ViewModifierCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0300),
+ "Radionuclide Code Sequence", "RadionuclideCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0302),
+ "Administration Route Code Sequence", "AdministrationRouteCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0304),
+ "Radiopharmaceutical Code Sequence", "RadiopharmaceuticalCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0306),
+ "Calibration Data Sequence", "CalibrationDataSequence", "SQ", "1" }, { Tag(0x0054, 0x0308),
+ "Energy Window Number", "EnergyWindowNumber", "US", "1" }, { Tag(0x0054, 0x0400),
+ "Image ID", "ImageID", "SH", "1" }, { Tag(0x0054, 0x0410),
+ "Patient Orientation Code Sequence", "PatientOrientationCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0412),
+ "Patient Orientation Modifier Code Sequence", "PatientOrientationModifierCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0414),
+ "Patient Gantry Relationship Code Sequence", "PatientGantryRelationshipCodeSequence", "SQ", "1" }, { Tag(0x0054, 0x0500),
+ "Slice Progression Direction", "SliceProgressionDirection", "CS", "1" }, { Tag(0x0054, 0x0501),
+ "Scan Progression Direction", "ScanProgressionDirection", "CS", "1" }, { Tag(0x0054, 0x1000),
+ "Series Type", "SeriesType", "CS", "2" }, { Tag(0x0054, 0x1001),
+ "Units", "Units", "CS", "1" }, { Tag(0x0054, 0x1002),
+ "Counts Source", "CountsSource", "CS", "1" }, { Tag(0x0054, 0x1004),
+ "Reprojection Method", "ReprojectionMethod", "CS", "1" }, { Tag(0x0054, 0x1006),
+ "SUV Type", "SUVType", "CS", "1" }, { Tag(0x0054, 0x1100),
+ "Randoms Correction Method", "RandomsCorrectionMethod", "CS", "1" }, { Tag(0x0054, 0x1101),
+ "Attenuation Correction Method", "AttenuationCorrectionMethod", "LO", "1" }, { Tag(0x0054, 0x1102),
+ "Decay Correction", "DecayCorrection", "CS", "1" }, { Tag(0x0054, 0x1103),
+ "Reconstruction Method", "ReconstructionMethod", "LO", "1" }, { Tag(0x0054, 0x1104),
+ "Detector Lines of Response Used", "DetectorLinesOfResponseUsed", "LO", "1" }, { Tag(0x0054, 0x1105),
+ "Scatter Correction Method", "ScatterCorrectionMethod", "LO", "1" }, { Tag(0x0054, 0x1200),
+ "Axial Acceptance", "AxialAcceptance", "DS", "1" }, { Tag(0x0054, 0x1201),
+ "Axial Mash", "AxialMash", "IS", "2" }, { Tag(0x0054, 0x1202),
+ "Transverse Mash", "TransverseMash", "IS", "1" }, { Tag(0x0054, 0x1203),
+ "Detector Element Size", "DetectorElementSize", "DS", "2" }, { Tag(0x0054, 0x1210),
+ "Coincidence Window Width", "CoincidenceWindowWidth", "DS", "1" }, { Tag(0x0054, 0x1220),
+ "Secondary Counts Type", "SecondaryCountsType", "CS", "1-n" }, { Tag(0x0054, 0x1300),
+ "Frame Reference Time", "FrameReferenceTime", "DS", "1" }, { Tag(0x0054, 0x1310),
+ "Primary (Prompts) Counts Accumulated", "PrimaryPromptsCountsAccumulated", "IS", "1" }, { Tag(0x0054, 0x1311),
+ "Secondary Counts Accumulated", "SecondaryCountsAccumulated", "IS", "1-n" }, { Tag(0x0054, 0x1320),
+ "Slice Sensitivity Factor", "SliceSensitivityFactor", "DS", "1" }, { Tag(0x0054, 0x1321),
+ "Decay Factor", "DecayFactor", "DS", "1" }, { Tag(0x0054, 0x1322),
+ "Dose Calibration Factor", "DoseCalibrationFactor", "DS", "1" }, { Tag(0x0054, 0x1323),
+ "Scatter Fraction Factor", "ScatterFractionFactor", "DS", "1" }, { Tag(0x0054, 0x1324),
+ "Dead Time Factor", "DeadTimeFactor", "DS", "1" }, { Tag(0x0054, 0x1330),
+ "Image Index", "ImageIndex", "US", "1" }, { Tag(0x0054, 0x1400),
+ "Counts Included", "CountsIncluded", "CS", "1-n" }, { Tag(0x0054, 0x1401),
+ "Dead Time Correction Flag", "DeadTimeCorrectionFlag", "CS", "1" }, { Tag(0x0060, 0x3000),
+ "Histogram Sequence", "HistogramSequence", "SQ", "1" }, { Tag(0x0060, 0x3002),
+ "Histogram Number of Bins", "HistogramNumberOfBins", "US", "1" }, { Tag(0x0060, 0x3004),
+ "Histogram First Bin Value", "HistogramFirstBinValue", "US or SS", "1" }, { Tag(0x0060, 0x3006),
+ "Histogram Last Bin Value", "HistogramLastBinValue", "US or SS", "1" }, { Tag(0x0060, 0x3008),
+ "Histogram Bin Width", "HistogramBinWidth", "US", "1" }, { Tag(0x0060, 0x3010),
+ "Histogram Explanation", "HistogramExplanation", "LO", "1" }, { Tag(0x0060, 0x3020),
+ "Histogram Data", "HistogramData", "UL", "1-n" }, { Tag(0x0062, 0x0001),
+ "Segmentation Type", "SegmentationType", "CS", "1" }, { Tag(0x0062, 0x0002),
+ "Segment Sequence", "SegmentSequence", "SQ", "1" }, { Tag(0x0062, 0x0003),
+ "Segmented Property Category Code Sequence", "SegmentedPropertyCategoryCodeSequence", "SQ", "1" }, { Tag(0x0062, 0x0004),
+ "Segment Number", "SegmentNumber", "US", "1" }, { Tag(0x0062, 0x0005),
+ "Segment Label", "SegmentLabel", "LO", "1" }, { Tag(0x0062, 0x0006),
+ "Segment Description", "SegmentDescription", "ST", "1" }, { Tag(0x0062, 0x0008),
+ "Segment Algorithm Type", "SegmentAlgorithmType", "CS", "1" }, { Tag(0x0062, 0x0009),
+ "Segment Algorithm Name", "SegmentAlgorithmName", "LO", "1" }, { Tag(0x0062, 0x000a),
+ "Segment Identification Sequence", "SegmentIdentificationSequence", "SQ", "1" }, { Tag(0x0062, 0x000b),
+ "Referenced Segment Number", "ReferencedSegmentNumber", "US", "1-n" }, { Tag(0x0062, 0x000c),
+ "Recommended Display Grayscale Value", "RecommendedDisplayGrayscaleValue", "US", "1" }, { Tag(0x0062, 0x000d),
+ "Recommended Display CIELab Value", "RecommendedDisplayCIELabValue", "US", "3" }, { Tag(0x0062, 0x000e),
+ "Maximum Fractional Value", "MaximumFractionalValue", "US", "1" }, { Tag(0x0062, 0x000f),
+ "Segmented Property Type Code Sequence", "SegmentedPropertyTypeCodeSequence", "SQ", "1" }, { Tag(0x0062, 0x0010),
+ "Segmentation Fractional Type", "SegmentationFractionalType", "CS", "1" }, { Tag(0x0062, 0x0011),
+ "Segmented Property Type Modifier Code Sequence", "SegmentedPropertyTypeModifierCodeSequence", "SQ", "1" }, { Tag(0x0062, 0x0012),
+ "Used Segments Sequence", "UsedSegmentsSequence", "SQ", "1" }, { Tag(0x0062, 0x0020),
+ "Tracking ID", "TrackingID", "UT", "1" }, { Tag(0x0062, 0x0021),
+ "Tracking UID", "TrackingUID", "UI", "1" }, { Tag(0x0064, 0x0002),
+ "Deformable Registration Sequence", "DeformableRegistrationSequence", "SQ", "1" }, { Tag(0x0064, 0x0003),
+ "Source Frame of Reference UID", "SourceFrameOfReferenceUID", "UI", "1" }, { Tag(0x0064, 0x0005),
+ "Deformable Registration Grid Sequence", "DeformableRegistrationGridSequence", "SQ", "1" }, { Tag(0x0064, 0x0007),
+ "Grid Dimensions", "GridDimensions", "UL", "3" }, { Tag(0x0064, 0x0008),
+ "Grid Resolution", "GridResolution", "FD", "3" }, { Tag(0x0064, 0x0009),
+ "Vector Grid Data", "VectorGridData", "OF", "1" }, { Tag(0x0064, 0x000f),
+ "Pre Deformation Matrix Registration Sequence", "PreDeformationMatrixRegistrationSequence", "SQ", "1" }, { Tag(0x0064, 0x0010),
+ "Post Deformation Matrix Registration Sequence", "PostDeformationMatrixRegistrationSequence", "SQ", "1" }, { Tag(0x0066, 0x0001),
+ "Number of Surfaces", "NumberOfSurfaces", "UL", "1" }, { Tag(0x0066, 0x0002),
+ "Surface Sequence", "SurfaceSequence", "SQ", "1" }, { Tag(0x0066, 0x0003),
+ "Surface Number", "SurfaceNumber", "UL", "1" }, { Tag(0x0066, 0x0004),
+ "Surface Comments", "SurfaceComments", "LT", "1" }, { Tag(0x0066, 0x0009),
+ "Surface Processing", "SurfaceProcessing", "CS", "1" }, { Tag(0x0066, 0x000a),
+ "Surface Processing Ratio", "SurfaceProcessingRatio", "FL", "1" }, { Tag(0x0066, 0x000b),
+ "Surface Processing Description", "SurfaceProcessingDescription", "LO", "1" }, { Tag(0x0066, 0x000c),
+ "Recommended Presentation Opacity", "RecommendedPresentationOpacity", "FL", "1" }, { Tag(0x0066, 0x000d),
+ "Recommended Presentation Type", "RecommendedPresentationType", "CS", "1" }, { Tag(0x0066, 0x000e),
+ "Finite Volume", "FiniteVolume", "CS", "1" }, { Tag(0x0066, 0x0010),
+ "Manifold", "Manifold", "CS", "1" }, { Tag(0x0066, 0x0011),
+ "Surface Points Sequence", "SurfacePointsSequence", "SQ", "1" }, { Tag(0x0066, 0x0012),
+ "Surface Points Normals Sequence", "SurfacePointsNormalsSequence", "SQ", "1" }, { Tag(0x0066, 0x0013),
+ "Surface Mesh Primitives Sequence", "SurfaceMeshPrimitivesSequence", "SQ", "1" }, { Tag(0x0066, 0x0015),
+ "Number of Surface Points", "NumberOfSurfacePoints", "UL", "1" }, { Tag(0x0066, 0x0016),
+ "Point Coordinates Data", "PointCoordinatesData", "OF", "1" }, { Tag(0x0066, 0x0017),
+ "Point Position Accuracy", "PointPositionAccuracy", "FL", "3" }, { Tag(0x0066, 0x0018),
+ "Mean Point Distance", "MeanPointDistance", "FL", "1" }, { Tag(0x0066, 0x0019),
+ "Maximum Point Distance", "MaximumPointDistance", "FL", "1" }, { Tag(0x0066, 0x001a),
+ "Points Bounding Box Coordinates", "PointsBoundingBoxCoordinates", "FL", "6" }, { Tag(0x0066, 0x001b),
+ "Axis of Rotation", "AxisOfRotation", "FL", "3" }, { Tag(0x0066, 0x001c),
+ "Center of Rotation", "CenterOfRotation", "FL", "3" }, { Tag(0x0066, 0x001e),
+ "Number of Vectors", "NumberOfVectors", "UL", "1" }, { Tag(0x0066, 0x001f),
+ "Vector Dimensionality", "VectorDimensionality", "US", "1" }, { Tag(0x0066, 0x0020),
+ "Vector Accuracy", "VectorAccuracy", "FL", "1-n" }, { Tag(0x0066, 0x0021),
+ "Vector Coordinate Data", "VectorCoordinateData", "OF", "1" }, { Tag(0x0066, 0x0023),
+ "Triangle Point Index List", "TrianglePointIndexList", "OW", "1" }, { Tag(0x0066, 0x0024),
+ "Edge Point Index List", "EdgePointIndexList", "OW", "1" }, { Tag(0x0066, 0x0025),
+ "Vertex Point Index List", "VertexPointIndexList", "OW", "1" }, { Tag(0x0066, 0x0026),
+ "Triangle Strip Sequence", "TriangleStripSequence", "SQ", "1" }, { Tag(0x0066, 0x0027),
+ "Triangle Fan Sequence", "TriangleFanSequence", "SQ", "1" }, { Tag(0x0066, 0x0028),
+ "Line Sequence", "LineSequence", "SQ", "1" }, { Tag(0x0066, 0x0029),
+ "Primitive Point Index List", "PrimitivePointIndexList", "OW", "1" }, { Tag(0x0066, 0x002a),
+ "Surface Count", "SurfaceCount", "UL", "1" }, { Tag(0x0066, 0x002b),
+ "Referenced Surface Sequence", "ReferencedSurfaceSequence", "SQ", "1" }, { Tag(0x0066, 0x002c),
+ "Referenced Surface Number", "ReferencedSurfaceNumber", "UL", "1" }, { Tag(0x0066, 0x002d),
+ "Segment Surface Generation Algorithm Identification Sequence", "SegmentSurfaceGenerationAlgorithmIdentificationSequence", "SQ", "1" }, { Tag(0x0066, 0x002e),
+ "Segment Surface Source Instance Sequence", "SegmentSurfaceSourceInstanceSequence", "SQ", "1" }, { Tag(0x0066, 0x002f),
+ "Algorithm Family Code Sequence", "AlgorithmFamilyCodeSequence", "SQ", "1" }, { Tag(0x0066, 0x0030),
+ "Algorithm Name Code Sequence", "AlgorithmNameCodeSequence", "SQ", "1" }, { Tag(0x0066, 0x0031),
+ "Algorithm Version", "AlgorithmVersion", "LO", "1" }, { Tag(0x0066, 0x0032),
+ "Algorithm Parameters", "AlgorithmParameters", "LT", "1" }, { Tag(0x0066, 0x0034),
+ "Facet Sequence", "FacetSequence", "SQ", "1" }, { Tag(0x0066, 0x0035),
+ "Surface Processing Algorithm Identification Sequence", "SurfaceProcessingAlgorithmIdentificationSequence", "SQ", "1" }, { Tag(0x0066, 0x0036),
+ "Algorithm Name", "AlgorithmName", "LO", "1" }, { Tag(0x0066, 0x0037),
+ "Recommended Point Radius", "RecommendedPointRadius", "FL", "1" }, { Tag(0x0066, 0x0038),
+ "Recommended Line Thickness", "RecommendedLineThickness", "FL", "1" }, { Tag(0x0066, 0x0040),
+ "Long Primitive Point Index List", "LongPrimitivePointIndexList", "OL", "1" }, { Tag(0x0066, 0x0041),
+ "Long Triangle Point Index List", "LongTrianglePointIndexList", "OL", "1" }, { Tag(0x0066, 0x0042),
+ "Long Edge Point Index List", "LongEdgePointIndexList", "OL", "1" }, { Tag(0x0066, 0x0043),
+ "Long Vertex Point Index List", "LongVertexPointIndexList", "OL", "1" }, { Tag(0x0066, 0x0101),
+ "Track Set Sequence", "TrackSetSequence", "SQ", "1" }, { Tag(0x0066, 0x0102),
+ "Track Sequence", "TrackSequence", "SQ", "1" }, { Tag(0x0066, 0x0103),
+ "Recommended Display CIELab Value List", "RecommendedDisplayCIELabValueList", "OW", "1" }, { Tag(0x0066, 0x0104),
+ "Tracking Algorithm Identification Sequence", "TrackingAlgorithmIdentificationSequence", "SQ", "1" }, { Tag(0x0066, 0x0105),
+ "Track Set Number", "TrackSetNumber", "UL", "1" }, { Tag(0x0066, 0x0106),
+ "Track Set Label", "TrackSetLabel", "LO", "1" }, { Tag(0x0066, 0x0107),
+ "Track Set Description", "TrackSetDescription", "UT", "1" }, { Tag(0x0066, 0x0108),
+ "Track Set Anatomical Type Code Sequence", "TrackSetAnatomicalTypeCodeSequence", "SQ", "1" }, { Tag(0x0066, 0x0121),
+ "Measurements Sequence", "MeasurementsSequence", "SQ", "1" }, { Tag(0x0066, 0x0124),
+ "Track Set Statistics Sequence", "TrackSetStatisticsSequence", "SQ", "1" }, { Tag(0x0066, 0x0125),
+ "Floating Point Values", "FloatingPointValues", "OF", "1" }, { Tag(0x0066, 0x0129),
+ "Track Point Index List", "TrackPointIndexList", "OL", "1" }, { Tag(0x0066, 0x0130),
+ "Track Statistics Sequence", "TrackStatisticsSequence", "SQ", "1" }, { Tag(0x0066, 0x0132),
+ "Measurement Values Sequence", "MeasurementValuesSequence", "SQ", "1" }, { Tag(0x0066, 0x0133),
+ "Diffusion Acquisition Code Sequence", "DiffusionAcquisitionCodeSequence", "SQ", "1" }, { Tag(0x0066, 0x0134),
+ "Diffusion Model Code Sequence", "DiffusionModelCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x6210),
+ "Implant Size", "ImplantSize", "LO", "1" }, { Tag(0x0068, 0x6221),
+ "Implant Template Version", "ImplantTemplateVersion", "LO", "1" }, { Tag(0x0068, 0x6222),
+ "Replaced Implant Template Sequence", "ReplacedImplantTemplateSequence", "SQ", "1" }, { Tag(0x0068, 0x6223),
+ "Implant Type", "ImplantType", "CS", "1" }, { Tag(0x0068, 0x6224),
+ "Derivation Implant Template Sequence", "DerivationImplantTemplateSequence", "SQ", "1" }, { Tag(0x0068, 0x6225),
+ "Original Implant Template Sequence", "OriginalImplantTemplateSequence", "SQ", "1" }, { Tag(0x0068, 0x6226),
+ "Effective DateTime", "EffectiveDateTime", "DT", "1" }, { Tag(0x0068, 0x6230),
+ "Implant Target Anatomy Sequence", "ImplantTargetAnatomySequence", "SQ", "1" }, { Tag(0x0068, 0x6260),
+ "Information From Manufacturer Sequence", "InformationFromManufacturerSequence", "SQ", "1" }, { Tag(0x0068, 0x6265),
+ "Notification From Manufacturer Sequence", "NotificationFromManufacturerSequence", "SQ", "1" }, { Tag(0x0068, 0x6270),
+ "Information Issue DateTime", "InformationIssueDateTime", "DT", "1" }, { Tag(0x0068, 0x6280),
+ "Information Summary", "InformationSummary", "ST", "1" }, { Tag(0x0068, 0x62a0),
+ "Implant Regulatory Disapproval Code Sequence", "ImplantRegulatoryDisapprovalCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x62a5),
+ "Overall Template Spatial Tolerance", "OverallTemplateSpatialTolerance", "FD", "1" }, { Tag(0x0068, 0x62c0),
+ "HPGL Document Sequence", "HPGLDocumentSequence", "SQ", "1" }, { Tag(0x0068, 0x62d0),
+ "HPGL Document ID", "HPGLDocumentID", "US", "1" }, { Tag(0x0068, 0x62d5),
+ "HPGL Document Label", "HPGLDocumentLabel", "LO", "1" }, { Tag(0x0068, 0x62e0),
+ "View Orientation Code Sequence", "ViewOrientationCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x62f0),
+ "View Orientation Modifier", "ViewOrientationModifier", "FD", "9" }, { Tag(0x0068, 0x62f2),
+ "HPGL Document Scaling", "HPGLDocumentScaling", "FD", "1" }, { Tag(0x0068, 0x6300),
+ "HPGL Document", "HPGLDocument", "OB", "1" }, { Tag(0x0068, 0x6310),
+ "HPGL Contour Pen Number", "HPGLContourPenNumber", "US", "1" }, { Tag(0x0068, 0x6320),
+ "HPGL Pen Sequence", "HPGLPenSequence", "SQ", "1" }, { Tag(0x0068, 0x6330),
+ "HPGL Pen Number", "HPGLPenNumber", "US", "1" }, { Tag(0x0068, 0x6340),
+ "HPGL Pen Label", "HPGLPenLabel", "LO", "1" }, { Tag(0x0068, 0x6345),
+ "HPGL Pen Description", "HPGLPenDescription", "ST", "1" }, { Tag(0x0068, 0x6346),
+ "Recommended Rotation Point", "RecommendedRotationPoint", "FD", "2" }, { Tag(0x0068, 0x6347),
+ "Bounding Rectangle", "BoundingRectangle", "FD", "4" }, { Tag(0x0068, 0x6350),
+ "Implant Template 3D Model Surface Number", "ImplantTemplate3DModelSurfaceNumber", "US", "1-n" }, { Tag(0x0068, 0x6360),
+ "Surface Model Description Sequence", "SurfaceModelDescriptionSequence", "SQ", "1" }, { Tag(0x0068, 0x6380),
+ "Surface Model Label", "SurfaceModelLabel", "LO", "1" }, { Tag(0x0068, 0x6390),
+ "Surface Model Scaling Factor", "SurfaceModelScalingFactor", "FD", "1" }, { Tag(0x0068, 0x63a0),
+ "Materials Code Sequence", "MaterialsCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x63a4),
+ "Coating Materials Code Sequence", "CoatingMaterialsCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x63a8),
+ "Implant Type Code Sequence", "ImplantTypeCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x63ac),
+ "Fixation Method Code Sequence", "FixationMethodCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x63b0),
+ "Mating Feature Sets Sequence", "MatingFeatureSetsSequence", "SQ", "1" }, { Tag(0x0068, 0x63c0),
+ "Mating Feature Set ID", "MatingFeatureSetID", "US", "1" }, { Tag(0x0068, 0x63d0),
+ "Mating Feature Set Label", "MatingFeatureSetLabel", "LO", "1" }, { Tag(0x0068, 0x63e0),
+ "Mating Feature Sequence", "MatingFeatureSequence", "SQ", "1" }, { Tag(0x0068, 0x63f0),
+ "Mating Feature ID", "MatingFeatureID", "US", "1" }, { Tag(0x0068, 0x6400),
+ "Mating Feature Degree of Freedom Sequence", "MatingFeatureDegreeOfFreedomSequence", "SQ", "1" }, { Tag(0x0068, 0x6410),
+ "Degree of Freedom ID", "DegreeOfFreedomID", "US", "1" }, { Tag(0x0068, 0x6420),
+ "Degree of Freedom Type", "DegreeOfFreedomType", "CS", "1" }, { Tag(0x0068, 0x6430),
+ "2D Mating Feature Coordinates Sequence", "TwoDMatingFeatureCoordinatesSequence", "SQ", "1" }, { Tag(0x0068, 0x6440),
+ "Referenced HPGL Document ID", "ReferencedHPGLDocumentID", "US", "1" }, { Tag(0x0068, 0x6450),
+ "2D Mating Point", "TwoDMatingPoint", "FD", "2" }, { Tag(0x0068, 0x6460),
+ "2D Mating Axes", "TwoDMatingAxes", "FD", "4" }, { Tag(0x0068, 0x6470),
+ "2D Degree of Freedom Sequence", "TwoDDegreeOfFreedomSequence", "SQ", "1" }, { Tag(0x0068, 0x6490),
+ "3D Degree of Freedom Axis", "ThreeDDegreeOfFreedomAxis", "FD", "3" }, { Tag(0x0068, 0x64a0),
+ "Range of Freedom", "RangeOfFreedom", "FD", "2" }, { Tag(0x0068, 0x64c0),
+ "3D Mating Point", "ThreeDMatingPoint", "FD", "3" }, { Tag(0x0068, 0x64d0),
+ "3D Mating Axes", "ThreeDMatingAxes", "FD", "9" }, { Tag(0x0068, 0x64f0),
+ "2D Degree of Freedom Axis", "TwoDDegreeOfFreedomAxis", "FD", "3" }, { Tag(0x0068, 0x6500),
+ "Planning Landmark Point Sequence", "PlanningLandmarkPointSequence", "SQ", "1" }, { Tag(0x0068, 0x6510),
+ "Planning Landmark Line Sequence", "PlanningLandmarkLineSequence", "SQ", "1" }, { Tag(0x0068, 0x6520),
+ "Planning Landmark Plane Sequence", "PlanningLandmarkPlaneSequence", "SQ", "1" }, { Tag(0x0068, 0x6530),
+ "Planning Landmark ID", "PlanningLandmarkID", "US", "1" }, { Tag(0x0068, 0x6540),
+ "Planning Landmark Description", "PlanningLandmarkDescription", "LO", "1" }, { Tag(0x0068, 0x6545),
+ "Planning Landmark Identification Code Sequence", "PlanningLandmarkIdentificationCodeSequence", "SQ", "1" }, { Tag(0x0068, 0x6550),
+ "2D Point Coordinates Sequence", "TwoDPointCoordinatesSequence", "SQ", "1" }, { Tag(0x0068, 0x6560),
+ "2D Point Coordinates", "TwoDPointCoordinates", "FD", "2" }, { Tag(0x0068, 0x6590),
+ "3D Point Coordinates", "ThreeDPointCoordinates", "FD", "3" }, { Tag(0x0068, 0x65a0),
+ "2D Line Coordinates Sequence", "TwoDLineCoordinatesSequence", "SQ", "1" }, { Tag(0x0068, 0x65b0),
+ "2D Line Coordinates", "TwoDLineCoordinates", "FD", "4" }, { Tag(0x0068, 0x65d0),
+ "3D Line Coordinates", "ThreeDLineCoordinates", "FD", "6" }, { Tag(0x0068, 0x65e0),
+ "2D Plane Coordinates Sequence", "TwoDPlaneCoordinatesSequence", "SQ", "1" }, { Tag(0x0068, 0x65f0),
+ "2D Plane Intersection", "TwoDPlaneIntersection", "FD", "4" }, { Tag(0x0068, 0x6610),
+ "3D Plane Origin", "ThreeDPlaneOrigin", "FD", "3" }, { Tag(0x0068, 0x6620),
+ "3D Plane Normal", "ThreeDPlaneNormal", "FD", "3" }, { Tag(0x0070, 0x0001),
+ "Graphic Annotation Sequence", "GraphicAnnotationSequence", "SQ", "1" }, { Tag(0x0070, 0x0002),
+ "Graphic Layer", "GraphicLayer", "CS", "1" }, { Tag(0x0070, 0x0003),
+ "Bounding Box Annotation Units", "BoundingBoxAnnotationUnits", "CS", "1" }, { Tag(0x0070, 0x0004),
+ "Anchor Point Annotation Units", "AnchorPointAnnotationUnits", "CS", "1" }, { Tag(0x0070, 0x0005),
+ "Graphic Annotation Units", "GraphicAnnotationUnits", "CS", "1" }, { Tag(0x0070, 0x0006),
+ "Unformatted Text Value", "UnformattedTextValue", "ST", "1" }, { Tag(0x0070, 0x0008),
+ "Text Object Sequence", "TextObjectSequence", "SQ", "1" }, { Tag(0x0070, 0x0009),
+ "Graphic Object Sequence", "GraphicObjectSequence", "SQ", "1" }, { Tag(0x0070, 0x0010),
+ "Bounding Box Top Left Hand Corner", "BoundingBoxTopLeftHandCorner", "FL", "2" }, { Tag(0x0070, 0x0011),
+ "Bounding Box Bottom Right Hand Corner", "BoundingBoxBottomRightHandCorner", "FL", "2" }, { Tag(0x0070, 0x0012),
+ "Bounding Box Text Horizontal Justification", "BoundingBoxTextHorizontalJustification", "CS", "1" }, { Tag(0x0070, 0x0014),
+ "Anchor Point", "AnchorPoint", "FL", "2" }, { Tag(0x0070, 0x0015),
+ "Anchor Point Visibility", "AnchorPointVisibility", "CS", "1" }, { Tag(0x0070, 0x0020),
+ "Graphic Dimensions", "GraphicDimensions", "US", "1" }, { Tag(0x0070, 0x0021),
+ "Number of Graphic Points", "NumberOfGraphicPoints", "US", "1" }, { Tag(0x0070, 0x0022),
+ "Graphic Data", "GraphicData", "FL", "2-n" }, { Tag(0x0070, 0x0023),
+ "Graphic Type", "GraphicType", "CS", "1" }, { Tag(0x0070, 0x0024),
+ "Graphic Filled", "GraphicFilled", "CS", "1" }, { Tag(0x0070, 0x0040),
+ "Image Rotation (Retired)", "ImageRotationRetired", "IS", "1" }, { Tag(0x0070, 0x0041),
+ "Image Horizontal Flip", "ImageHorizontalFlip", "CS", "1" }, { Tag(0x0070, 0x0042),
+ "Image Rotation", "ImageRotation", "US", "1" }, { Tag(0x0070, 0x0050),
+ "Displayed Area Top Left Hand Corner (Trial)", "DisplayedAreaTopLeftHandCornerTrial", "US", "2" }, { Tag(0x0070, 0x0051),
+ "Displayed Area Bottom Right Hand Corner (Trial)", "DisplayedAreaBottomRightHandCornerTrial", "US", "2" }, { Tag(0x0070, 0x0052),
+ "Displayed Area Top Left Hand Corner", "DisplayedAreaTopLeftHandCorner", "SL", "2" }, { Tag(0x0070, 0x0053),
+ "Displayed Area Bottom Right Hand Corner", "DisplayedAreaBottomRightHandCorner", "SL", "2" }, { Tag(0x0070, 0x005a),
+ "Displayed Area Selection Sequence", "DisplayedAreaSelectionSequence", "SQ", "1" }, { Tag(0x0070, 0x0060),
+ "Graphic Layer Sequence", "GraphicLayerSequence", "SQ", "1" }, { Tag(0x0070, 0x0062),
+ "Graphic Layer Order", "GraphicLayerOrder", "IS", "1" }, { Tag(0x0070, 0x0066),
+ "Graphic Layer Recommended Display Grayscale Value", "GraphicLayerRecommendedDisplayGrayscaleValue", "US", "1" }, { Tag(0x0070, 0x0067),
+ "Graphic Layer Recommended Display RGB Value", "GraphicLayerRecommendedDisplayRGBValue", "US", "3" }, { Tag(0x0070, 0x0068),
+ "Graphic Layer Description", "GraphicLayerDescription", "LO", "1" }, { Tag(0x0070, 0x0080),
+ "Content Label", "ContentLabel", "CS", "1" }, { Tag(0x0070, 0x0081),
+ "Content Description", "ContentDescription", "LO", "1" }, { Tag(0x0070, 0x0082),
+ "Presentation Creation Date", "PresentationCreationDate", "DA", "1" }, { Tag(0x0070, 0x0083),
+ "Presentation Creation Time", "PresentationCreationTime", "TM", "1" }, { Tag(0x0070, 0x0084),
+ "Content Creator's Name", "ContentCreatorName", "PN", "1" }, { Tag(0x0070, 0x0086),
+ "Content Creator's Identification Code Sequence", "ContentCreatorIdentificationCodeSequence", "SQ", "1" }, { Tag(0x0070, 0x0087),
+ "Alternate Content Description Sequence", "AlternateContentDescriptionSequence", "SQ", "1" }, { Tag(0x0070, 0x0100),
+ "Presentation Size Mode", "PresentationSizeMode", "CS", "1" }, { Tag(0x0070, 0x0101),
+ "Presentation Pixel Spacing", "PresentationPixelSpacing", "DS", "2" }, { Tag(0x0070, 0x0102),
+ "Presentation Pixel Aspect Ratio", "PresentationPixelAspectRatio", "IS", "2" }, { Tag(0x0070, 0x0103),
+ "Presentation Pixel Magnification Ratio", "PresentationPixelMagnificationRatio", "FL", "1" }, { Tag(0x0070, 0x0207),
+ "Graphic Group Label", "GraphicGroupLabel", "LO", "1" }, { Tag(0x0070, 0x0208),
+ "Graphic Group Description", "GraphicGroupDescription", "ST", "1" }, { Tag(0x0070, 0x0209),
+ "Compound Graphic Sequence", "CompoundGraphicSequence", "SQ", "1" }, { Tag(0x0070, 0x0226),
+ "Compound Graphic Instance ID", "CompoundGraphicInstanceID", "UL", "1" }, { Tag(0x0070, 0x0227),
+ "Font Name", "FontName", "LO", "1" }, { Tag(0x0070, 0x0228),
+ "Font Name Type", "FontNameType", "CS", "1" }, { Tag(0x0070, 0x0229),
+ "CSS Font Name", "CSSFontName", "LO", "1" }, { Tag(0x0070, 0x0230),
+ "Rotation Angle", "RotationAngle", "FD", "1" }, { Tag(0x0070, 0x0231),
+ "Text Style Sequence", "TextStyleSequence", "SQ", "1" }, { Tag(0x0070, 0x0232),
+ "Line Style Sequence", "LineStyleSequence", "SQ", "1" }, { Tag(0x0070, 0x0233),
+ "Fill Style Sequence", "FillStyleSequence", "SQ", "1" }, { Tag(0x0070, 0x0234),
+ "Graphic Group Sequence", "GraphicGroupSequence", "SQ", "1" }, { Tag(0x0070, 0x0241),
+ "Text Color CIELab Value", "TextColorCIELabValue", "US", "3" }, { Tag(0x0070, 0x0242),
+ "Horizontal Alignment", "HorizontalAlignment", "CS", "1" }, { Tag(0x0070, 0x0243),
+ "Vertical Alignment", "VerticalAlignment", "CS", "1" }, { Tag(0x0070, 0x0244),
+ "Shadow Style", "ShadowStyle", "CS", "1" }, { Tag(0x0070, 0x0245),
+ "Shadow Offset X", "ShadowOffsetX", "FL", "1" }, { Tag(0x0070, 0x0246),
+ "Shadow Offset Y", "ShadowOffsetY", "FL", "1" }, { Tag(0x0070, 0x0247),
+ "Shadow Color CIELab Value", "ShadowColorCIELabValue", "US", "3" }, { Tag(0x0070, 0x0248),
+ "Underlined", "Underlined", "CS", "1" }, { Tag(0x0070, 0x0249),
+ "Bold", "Bold", "CS", "1" }, { Tag(0x0070, 0x0250),
+ "Italic", "Italic", "CS", "1" }, { Tag(0x0070, 0x0251),
+ "Pattern On Color CIELab Value", "PatternOnColorCIELabValue", "US", "3" }, { Tag(0x0070, 0x0252),
+ "Pattern Off Color CIELab Value", "PatternOffColorCIELabValue", "US", "3" }, { Tag(0x0070, 0x0253),
+ "Line Thickness", "LineThickness", "FL", "1" }, { Tag(0x0070, 0x0254),
+ "Line Dashing Style", "LineDashingStyle", "CS", "1" }, { Tag(0x0070, 0x0255),
+ "Line Pattern", "LinePattern", "UL", "1" }, { Tag(0x0070, 0x0256),
+ "Fill Pattern", "FillPattern", "OB", "1" }, { Tag(0x0070, 0x0257),
+ "Fill Mode", "FillMode", "CS", "1" }, { Tag(0x0070, 0x0258),
+ "Shadow Opacity", "ShadowOpacity", "FL", "1" }, { Tag(0x0070, 0x0261),
+ "Gap Length", "GapLength", "FL", "1" }, { Tag(0x0070, 0x0262),
+ "Diameter of Visibility", "DiameterOfVisibility", "FL", "1" }, { Tag(0x0070, 0x0273),
+ "Rotation Point", "RotationPoint", "FL", "2" }, { Tag(0x0070, 0x0274),
+ "Tick Alignment", "TickAlignment", "CS", "1" }, { Tag(0x0070, 0x0278),
+ "Show Tick Label", "ShowTickLabel", "CS", "1" }, { Tag(0x0070, 0x0279),
+ "Tick Label Alignment", "TickLabelAlignment", "CS", "1" }, { Tag(0x0070, 0x0282),
+ "Compound Graphic Units", "CompoundGraphicUnits", "CS", "1" }, { Tag(0x0070, 0x0284),
+ "Pattern On Opacity", "PatternOnOpacity", "FL", "1" }, { Tag(0x0070, 0x0285),
+ "Pattern Off Opacity", "PatternOffOpacity", "FL", "1" }, { Tag(0x0070, 0x0287),
+ "Major Ticks Sequence", "MajorTicksSequence", "SQ", "1" }, { Tag(0x0070, 0x0288),
+ "Tick Position", "TickPosition", "FL", "1" }, { Tag(0x0070, 0x0289),
+ "Tick Label", "TickLabel", "SH", "1" }, { Tag(0x0070, 0x0294),
+ "Compound Graphic Type", "CompoundGraphicType", "CS", "1" }, { Tag(0x0070, 0x0295),
+ "Graphic Group ID", "GraphicGroupID", "UL", "1" }, { Tag(0x0070, 0x0306),
+ "Shape Type", "ShapeType", "CS", "1" }, { Tag(0x0070, 0x0308),
+ "Registration Sequence", "RegistrationSequence", "SQ", "1" }, { Tag(0x0070, 0x0309),
+ "Matrix Registration Sequence", "MatrixRegistrationSequence", "SQ", "1" }, { Tag(0x0070, 0x030a),
+ "Matrix Sequence", "MatrixSequence", "SQ", "1" }, { Tag(0x0070, 0x030b),
+ "Frame of Reference to Displayed Coordinate System Transformation Matrix", "FrameOfReferenceToDisplayedCoordinateSystemTransformationMatrix", "FD", "16" }, { Tag(0x0070, 0x030c),
+ "Frame of Reference Transformation Matrix Type", "FrameOfReferenceTransformationMatrixType", "CS", "1" }, { Tag(0x0070, 0x030d),
+ "Registration Type Code Sequence", "RegistrationTypeCodeSequence", "SQ", "1" }, { Tag(0x0070, 0x030f),
+ "Fiducial Description", "FiducialDescription", "ST", "1" }, { Tag(0x0070, 0x0310),
+ "Fiducial Identifier", "FiducialIdentifier", "SH", "1" }, { Tag(0x0070, 0x0311),
+ "Fiducial Identifier Code Sequence", "FiducialIdentifierCodeSequence", "SQ", "1" }, { Tag(0x0070, 0x0312),
+ "Contour Uncertainty Radius", "ContourUncertaintyRadius", "FD", "1" }, { Tag(0x0070, 0x0314),
+ "Used Fiducials Sequence", "UsedFiducialsSequence", "SQ", "1" }, { Tag(0x0070, 0x0318),
+ "Graphic Coordinates Data Sequence", "GraphicCoordinatesDataSequence", "SQ", "1" }, { Tag(0x0070, 0x031a),
+ "Fiducial UID", "FiducialUID", "UI", "1" }, { Tag(0x0070, 0x031c),
+ "Fiducial Set Sequence", "FiducialSetSequence", "SQ", "1" }, { Tag(0x0070, 0x031e),
+ "Fiducial Sequence", "FiducialSequence", "SQ", "1" }, { Tag(0x0070, 0x0401),
+ "Graphic Layer Recommended Display CIELab Value", "GraphicLayerRecommendedDisplayCIELabValue", "US", "3" }, { Tag(0x0070, 0x0402),
+ "Blending Sequence", "BlendingSequence", "SQ", "1" }, { Tag(0x0070, 0x0403),
+ "Relative Opacity", "RelativeOpacity", "FL", "1" }, { Tag(0x0070, 0x0404),
+ "Referenced Spatial Registration Sequence", "ReferencedSpatialRegistrationSequence", "SQ", "1" }, { Tag(0x0070, 0x0405),
+ "Blending Position", "BlendingPosition", "CS", "1" }, { Tag(0x0070, 0x1101),
+ "Presentation Display Collection UID", "PresentationDisplayCollectionUID", "UI", "1" }, { Tag(0x0070, 0x1102),
+ "Presentation Sequence Collection UID", "PresentationSequenceCollectionUID", "UI", "1" }, { Tag(0x0070, 0x1103),
+ "Presentation Sequence Position Index", "PresentationSequencePositionIndex", "US", "1" }, { Tag(0x0070, 0x1104),
+ "Rendered Image Reference Sequence", "RenderedImageReferenceSequence", "SQ", "1" }, { Tag(0x0070, 0x1201),
+ "Volumetric Presentation State Input Sequence", "VolumetricPresentationStateInputSequence", "SQ", "1" }, { Tag(0x0070, 0x1202),
+ "Presentation Input Type", "PresentationInputType", "CS", "1" }, { Tag(0x0070, 0x1203),
+ "Input Sequence Position Index", "InputSequencePositionIndex", "US", "1" }, { Tag(0x0070, 0x1204),
+ "Crop", "Crop", "CS", "1" }, { Tag(0x0070, 0x1205),
+ "Cropping Specification Index", "CroppingSpecificationIndex", "US", "1-n" }, { Tag(0x0070, 0x1206),
+ "Compositing Method", "CompositingMethod", "CS", "1" }, { Tag(0x0070, 0x1207),
+ "Volumetric Presentation Input Number", "VolumetricPresentationInputNumber", "US", "1" }, { Tag(0x0070, 0x1208),
+ "Image Volume Geometry", "ImageVolumeGeometry", "CS", "1" }, { Tag(0x0070, 0x1301),
+ "Volume Cropping Sequence", "VolumeCroppingSequence", "SQ", "1" }, { Tag(0x0070, 0x1302),
+ "Volume Cropping Method", "VolumeCroppingMethod", "CS", "1" }, { Tag(0x0070, 0x1303),
+ "Bounding Box Crop", "BoundingBoxCrop", "FD", "6" }, { Tag(0x0070, 0x1304),
+ "Oblique Cropping Plane Sequence", "ObliqueCroppingPlaneSequence", "SQ", "1" }, { Tag(0x0070, 0x1305),
+ "Plane", "Plane", "FD", "4" }, { Tag(0x0070, 0x1306),
+ "Plane Normal", "PlaneNormal", "FD", "3" }, { Tag(0x0070, 0x1309),
+ "Cropping Specification Number", "CroppingSpecificationNumber", "US", "1" }, { Tag(0x0070, 0x1501),
+ "Multi-Planar Reconstruction Style", "MultiPlanarReconstructionStyle", "CS", "1" }, { Tag(0x0070, 0x1502),
+ "MPR Thickness Type", "MPRThicknessType", "CS", "1" }, { Tag(0x0070, 0x1503),
+ "MPR Slab Thickness", "MPRSlabThickness", "FD", "1" }, { Tag(0x0070, 0x1505),
+ "MPR Top Left Hand Corner", "MPRTopLeftHandCorner", "FD", "3" }, { Tag(0x0070, 0x1507),
+ "MPR View Width Direction", "MPRViewWidthDirection", "FD", "3" }, { Tag(0x0070, 0x1508),
+ "MPR View Width", "MPRViewWidth", "FD", "1" }, { Tag(0x0070, 0x150c),
+ "Number of Volumetric Curve Points", "NumberOfVolumetricCurvePoints", "UL", "1" }, { Tag(0x0070, 0x150d),
+ "Volumetric Curve Points", "VolumetricCurvePoints", "OD", "1" }, { Tag(0x0070, 0x1511),
+ "MPR View Height Direction", "MPRViewHeightDirection", "FD", "3" }, { Tag(0x0070, 0x1512),
+ "MPR View Height", "MPRViewHeight", "FD", "1" }, { Tag(0x0070, 0x1801),
+ "Presentation State Classification Component Sequence", "PresentationStateClassificationComponentSequence", "SQ", "1" }, { Tag(0x0070, 0x1802),
+ "Component Type", "ComponentType", "CS", "1" }, { Tag(0x0070, 0x1803),
+ "Component Input Sequence", "ComponentInputSequence", "SQ", "1" }, { Tag(0x0070, 0x1804),
+ "Volumetric Presentation Input Index", "VolumetricPresentationInputIndex", "US", "1" }, { Tag(0x0070, 0x1805),
+ "Presentation State Compositor Component Sequence", "PresentationStateCompositorComponentSequence", "SQ", "1" }, { Tag(0x0070, 0x1806),
+ "Weighting Transfer Function Sequence", "WeightingTransferFunctionSequence", "SQ", "1" }, { Tag(0x0070, 0x1807),
+ "Weighting Lookup Table Descriptor", "WeightingLookupTableDescriptor", "US", "3" }, { Tag(0x0070, 0x1808),
+ "Weighting Lookup Table Data", "WeightingLookupTableData", "OB", "1" }, { Tag(0x0070, 0x1901),
+ "Volumetric Annotation Sequence", "VolumetricAnnotationSequence", "SQ", "1" }, { Tag(0x0070, 0x1903),
+ "Referenced Structured Context Sequence", "ReferencedStructuredContextSequence", "SQ", "1" }, { Tag(0x0070, 0x1904),
+ "Referenced Content Item", "ReferencedContentItem", "UI", "1" }, { Tag(0x0070, 0x1905),
+ "Volumetric Presentation Input Annotation Sequence", "VolumetricPresentationInputAnnotationSequence", "SQ", "1" }, { Tag(0x0070, 0x1907),
+ "Annotation Clipping", "AnnotationClipping", "CS", "1" }, { Tag(0x0070, 0x1a01),
+ "Presentation Animation Style", "PresentationAnimationStyle", "CS", "1" }, { Tag(0x0070, 0x1a03),
+ "Recommended Animation Rate", "RecommendedAnimationRate", "FD", "1" }, { Tag(0x0070, 0x1a04),
+ "Animation Curve Sequence", "AnimationCurveSequence", "SQ", "1" }, { Tag(0x0070, 0x1a05),
+ "Animation Step Size", "AnimationStepSize", "FD", "1" }, { Tag(0x0072, 0x0002),
+ "Hanging Protocol Name", "HangingProtocolName", "SH", "1" }, { Tag(0x0072, 0x0004),
+ "Hanging Protocol Description", "HangingProtocolDescription", "LO", "1" }, { Tag(0x0072, 0x0006),
+ "Hanging Protocol Level", "HangingProtocolLevel", "CS", "1" }, { Tag(0x0072, 0x0008),
+ "Hanging Protocol Creator", "HangingProtocolCreator", "LO", "1" }, { Tag(0x0072, 0x000a),
+ "Hanging Protocol Creation DateTime", "HangingProtocolCreationDateTime", "DT", "1" }, { Tag(0x0072, 0x000c),
+ "Hanging Protocol Definition Sequence", "HangingProtocolDefinitionSequence", "SQ", "1" }, { Tag(0x0072, 0x000e),
+ "Hanging Protocol User Identification Code Sequence", "HangingProtocolUserIdentificationCodeSequence", "SQ", "1" }, { Tag(0x0072, 0x0010),
+ "Hanging Protocol User Group Name", "HangingProtocolUserGroupName", "LO", "1" }, { Tag(0x0072, 0x0012),
+ "Source Hanging Protocol Sequence", "SourceHangingProtocolSequence", "SQ", "1" }, { Tag(0x0072, 0x0014),
+ "Number of Priors Referenced", "NumberOfPriorsReferenced", "US", "1" }, { Tag(0x0072, 0x0020),
+ "Image Sets Sequence", "ImageSetsSequence", "SQ", "1" }, { Tag(0x0072, 0x0022),
+ "Image Set Selector Sequence", "ImageSetSelectorSequence", "SQ", "1" }, { Tag(0x0072, 0x0024),
+ "Image Set Selector Usage Flag", "ImageSetSelectorUsageFlag", "CS", "1" }, { Tag(0x0072, 0x0026),
+ "Selector Attribute", "SelectorAttribute", "AT", "1" }, { Tag(0x0072, 0x0028),
+ "Selector Value Number", "SelectorValueNumber", "US", "1" }, { Tag(0x0072, 0x0030),
+ "Time Based Image Sets Sequence", "TimeBasedImageSetsSequence", "SQ", "1" }, { Tag(0x0072, 0x0032),
+ "Image Set Number", "ImageSetNumber", "US", "1" }, { Tag(0x0072, 0x0034),
+ "Image Set Selector Category", "ImageSetSelectorCategory", "CS", "1" }, { Tag(0x0072, 0x0038),
+ "Relative Time", "RelativeTime", "US", "2" }, { Tag(0x0072, 0x003a),
+ "Relative Time Units", "RelativeTimeUnits", "CS", "1" }, { Tag(0x0072, 0x003c),
+ "Abstract Prior Value", "AbstractPriorValue", "SS", "2" }, { Tag(0x0072, 0x003e),
+ "Abstract Prior Code Sequence", "AbstractPriorCodeSequence", "SQ", "1" }, { Tag(0x0072, 0x0040),
+ "Image Set Label", "ImageSetLabel", "LO", "1" }, { Tag(0x0072, 0x0050),
+ "Selector Attribute VR", "SelectorAttributeVR", "CS", "1" }, { Tag(0x0072, 0x0052),
+ "Selector Sequence Pointer", "SelectorSequencePointer", "AT", "1-n" }, { Tag(0x0072, 0x0054),
+ "Selector Sequence Pointer Private Creator", "SelectorSequencePointerPrivateCreator", "LO", "1-n" }, { Tag(0x0072, 0x0056),
+ "Selector Attribute Private Creator", "SelectorAttributePrivateCreator", "LO", "1" }, { Tag(0x0072, 0x005e),
+ "Selector AE Value", "SelectorAEValue", "AE", "1-n" }, { Tag(0x0072, 0x005f),
+ "Selector AS Value", "SelectorASValue", "AS", "1-n" }, { Tag(0x0072, 0x0060),
+ "Selector AT Value", "SelectorATValue", "AT", "1-n" }, { Tag(0x0072, 0x0061),
+ "Selector DA Value", "SelectorDAValue", "DA", "1-n" }, { Tag(0x0072, 0x0062),
+ "Selector CS Value", "SelectorCSValue", "CS", "1-n" }, { Tag(0x0072, 0x0063),
+ "Selector DT Value", "SelectorDTValue", "DT", "1-n" }, { Tag(0x0072, 0x0064),
+ "Selector IS Value", "SelectorISValue", "IS", "1-n" }, { Tag(0x0072, 0x0065),
+ "Selector OB Value", "SelectorOBValue", "OB", "1" }, { Tag(0x0072, 0x0066),
+ "Selector LO Value", "SelectorLOValue", "LO", "1-n" }, { Tag(0x0072, 0x0067),
+ "Selector OF Value", "SelectorOFValue", "OF", "1" }, { Tag(0x0072, 0x0068),
+ "Selector LT Value", "SelectorLTValue", "LT", "1" }, { Tag(0x0072, 0x0069),
+ "Selector OW Value", "SelectorOWValue", "OW", "1" }, { Tag(0x0072, 0x006a),
+ "Selector PN Value", "SelectorPNValue", "PN", "1-n" }, { Tag(0x0072, 0x006b),
+ "Selector TM Value", "SelectorTMValue", "TM", "1-n" }, { Tag(0x0072, 0x006c),
+ "Selector SH Value", "SelectorSHValue", "SH", "1-n" }, { Tag(0x0072, 0x006d),
+ "Selector UN Value", "SelectorUNValue", "UN", "1" }, { Tag(0x0072, 0x006e),
+ "Selector ST Value", "SelectorSTValue", "ST", "1" }, { Tag(0x0072, 0x006f),
+ "Selector UC Value", "SelectorUCValue", "UC", "1-n" }, { Tag(0x0072, 0x0070),
+ "Selector UT Value", "SelectorUTValue", "UT", "1" }, { Tag(0x0072, 0x0071),
+ "Selector UR Value", "SelectorURValue", "UR", "1" }, { Tag(0x0072, 0x0072),
+ "Selector DS Value", "SelectorDSValue", "DS", "1-n" }, { Tag(0x0072, 0x0073),
+ "Selector OD Value", "SelectorODValue", "OD", "1" }, { Tag(0x0072, 0x0074),
+ "Selector FD Value", "SelectorFDValue", "FD", "1-n" }, { Tag(0x0072, 0x0075),
+ "Selector OL Value", "SelectorOLValue", "OL", "1" }, { Tag(0x0072, 0x0076),
+ "Selector FL Value", "SelectorFLValue", "FL", "1-n" }, { Tag(0x0072, 0x0078),
+ "Selector UL Value", "SelectorULValue", "UL", "1-n" }, { Tag(0x0072, 0x007a),
+ "Selector US Value", "SelectorUSValue", "US", "1-n" }, { Tag(0x0072, 0x007c),
+ "Selector SL Value", "SelectorSLValue", "SL", "1-n" }, { Tag(0x0072, 0x007e),
+ "Selector SS Value", "SelectorSSValue", "SS", "1-n" }, { Tag(0x0072, 0x007f),
+ "Selector UI Value", "SelectorUIValue", "UI", "1-n" }, { Tag(0x0072, 0x0080),
+ "Selector Code Sequence Value", "SelectorCodeSequenceValue", "SQ", "1" }, { Tag(0x0072, 0x0100),
+ "Number of Screens", "NumberOfScreens", "US", "1" }, { Tag(0x0072, 0x0102),
+ "Nominal Screen Definition Sequence", "NominalScreenDefinitionSequence", "SQ", "1" }, { Tag(0x0072, 0x0104),
+ "Number of Vertical Pixels", "NumberOfVerticalPixels", "US", "1" }, { Tag(0x0072, 0x0106),
+ "Number of Horizontal Pixels", "NumberOfHorizontalPixels", "US", "1" }, { Tag(0x0072, 0x0108),
+ "Display Environment Spatial Position", "DisplayEnvironmentSpatialPosition", "FD", "4" }, { Tag(0x0072, 0x010a),
+ "Screen Minimum Grayscale Bit Depth", "ScreenMinimumGrayscaleBitDepth", "US", "1" }, { Tag(0x0072, 0x010c),
+ "Screen Minimum Color Bit Depth", "ScreenMinimumColorBitDepth", "US", "1" }, { Tag(0x0072, 0x010e),
+ "Application Maximum Repaint Time", "ApplicationMaximumRepaintTime", "US", "1" }, { Tag(0x0072, 0x0200),
+ "Display Sets Sequence", "DisplaySetsSequence", "SQ", "1" }, { Tag(0x0072, 0x0202),
+ "Display Set Number", "DisplaySetNumber", "US", "1" }, { Tag(0x0072, 0x0203),
+ "Display Set Label", "DisplaySetLabel", "LO", "1" }, { Tag(0x0072, 0x0204),
+ "Display Set Presentation Group", "DisplaySetPresentationGroup", "US", "1" }, { Tag(0x0072, 0x0206),
+ "Display Set Presentation Group Description", "DisplaySetPresentationGroupDescription", "LO", "1" }, { Tag(0x0072, 0x0208),
+ "Partial Data Display Handling", "PartialDataDisplayHandling", "CS", "1" }, { Tag(0x0072, 0x0210),
+ "Synchronized Scrolling Sequence", "SynchronizedScrollingSequence", "SQ", "1" }, { Tag(0x0072, 0x0212),
+ "Display Set Scrolling Group", "DisplaySetScrollingGroup", "US", "2-n" }, { Tag(0x0072, 0x0214),
+ "Navigation Indicator Sequence", "NavigationIndicatorSequence", "SQ", "1" }, { Tag(0x0072, 0x0216),
+ "Navigation Display Set", "NavigationDisplaySet", "US", "1" }, { Tag(0x0072, 0x0218),
+ "Reference Display Sets", "ReferenceDisplaySets", "US", "1-n" }, { Tag(0x0072, 0x0300),
+ "Image Boxes Sequence", "ImageBoxesSequence", "SQ", "1" }, { Tag(0x0072, 0x0302),
+ "Image Box Number", "ImageBoxNumber", "US", "1" }, { Tag(0x0072, 0x0304),
+ "Image Box Layout Type", "ImageBoxLayoutType", "CS", "1" }, { Tag(0x0072, 0x0306),
+ "Image Box Tile Horizontal Dimension", "ImageBoxTileHorizontalDimension", "US", "1" }, { Tag(0x0072, 0x0308),
+ "Image Box Tile Vertical Dimension", "ImageBoxTileVerticalDimension", "US", "1" }, { Tag(0x0072, 0x0310),
+ "Image Box Scroll Direction", "ImageBoxScrollDirection", "CS", "1" }, { Tag(0x0072, 0x0312),
+ "Image Box Small Scroll Type", "ImageBoxSmallScrollType", "CS", "1" }, { Tag(0x0072, 0x0314),
+ "Image Box Small Scroll Amount", "ImageBoxSmallScrollAmount", "US", "1" }, { Tag(0x0072, 0x0316),
+ "Image Box Large Scroll Type", "ImageBoxLargeScrollType", "CS", "1" }, { Tag(0x0072, 0x0318),
+ "Image Box Large Scroll Amount", "ImageBoxLargeScrollAmount", "US", "1" }, { Tag(0x0072, 0x0320),
+ "Image Box Overlap Priority", "ImageBoxOverlapPriority", "US", "1" }, { Tag(0x0072, 0x0330),
+ "Cine Relative to Real-Time", "CineRelativeToRealTime", "FD", "1" }, { Tag(0x0072, 0x0400),
+ "Filter Operations Sequence", "FilterOperationsSequence", "SQ", "1" }, { Tag(0x0072, 0x0402),
+ "Filter-by Category", "FilterByCategory", "CS", "1" }, { Tag(0x0072, 0x0404),
+ "Filter-by Attribute Presence", "FilterByAttributePresence", "CS", "1" }, { Tag(0x0072, 0x0406),
+ "Filter-by Operator", "FilterByOperator", "CS", "1" }, { Tag(0x0072, 0x0420),
+ "Structured Display Background CIELab Value", "StructuredDisplayBackgroundCIELabValue", "US", "3" }, { Tag(0x0072, 0x0421),
+ "Empty Image Box CIELab Value", "EmptyImageBoxCIELabValue", "US", "3" }, { Tag(0x0072, 0x0422),
+ "Structured Display Image Box Sequence", "StructuredDisplayImageBoxSequence", "SQ", "1" }, { Tag(0x0072, 0x0424),
+ "Structured Display Text Box Sequence", "StructuredDisplayTextBoxSequence", "SQ", "1" }, { Tag(0x0072, 0x0427),
+ "Referenced First Frame Sequence", "ReferencedFirstFrameSequence", "SQ", "1" }, { Tag(0x0072, 0x0430),
+ "Image Box Synchronization Sequence", "ImageBoxSynchronizationSequence", "SQ", "1" }, { Tag(0x0072, 0x0432),
+ "Synchronized Image Box List", "SynchronizedImageBoxList", "US", "2-n" }, { Tag(0x0072, 0x0434),
+ "Type of Synchronization", "TypeOfSynchronization", "CS", "1" }, { Tag(0x0072, 0x0500),
+ "Blending Operation Type", "BlendingOperationType", "CS", "1" }, { Tag(0x0072, 0x0510),
+ "Reformatting Operation Type", "ReformattingOperationType", "CS", "1" }, { Tag(0x0072, 0x0512),
+ "Reformatting Thickness", "ReformattingThickness", "FD", "1" }, { Tag(0x0072, 0x0514),
+ "Reformatting Interval", "ReformattingInterval", "FD", "1" }, { Tag(0x0072, 0x0516),
+ "Reformatting Operation Initial View Direction", "ReformattingOperationInitialViewDirection", "CS", "1" }, { Tag(0x0072, 0x0520),
+ "3D Rendering Type", "ThreeDRenderingType", "CS", "1-n" }, { Tag(0x0072, 0x0600),
+ "Sorting Operations Sequence", "SortingOperationsSequence", "SQ", "1" }, { Tag(0x0072, 0x0602),
+ "Sort-by Category", "SortByCategory", "CS", "1" }, { Tag(0x0072, 0x0604),
+ "Sorting Direction", "SortingDirection", "CS", "1" }, { Tag(0x0072, 0x0700),
+ "Display Set Patient Orientation", "DisplaySetPatientOrientation", "CS", "2" }, { Tag(0x0072, 0x0702),
+ "VOI Type", "VOIType", "CS", "1" }, { Tag(0x0072, 0x0704),
+ "Pseudo-Color Type", "PseudoColorType", "CS", "1" }, { Tag(0x0072, 0x0705),
+ "Pseudo-Color Palette Instance Reference Sequence", "PseudoColorPaletteInstanceReferenceSequence", "SQ", "1" }, { Tag(0x0072, 0x0706),
+ "Show Grayscale Inverted", "ShowGrayscaleInverted", "CS", "1" }, { Tag(0x0072, 0x0710),
+ "Show Image True Size Flag", "ShowImageTrueSizeFlag", "CS", "1" }, { Tag(0x0072, 0x0712),
+ "Show Graphic Annotation Flag", "ShowGraphicAnnotationFlag", "CS", "1" }, { Tag(0x0072, 0x0714),
+ "Show Patient Demographics Flag", "ShowPatientDemographicsFlag", "CS", "1" }, { Tag(0x0072, 0x0716),
+ "Show Acquisition Techniques Flag", "ShowAcquisitionTechniquesFlag", "CS", "1" }, { Tag(0x0072, 0x0717),
+ "Display Set Horizontal Justification", "DisplaySetHorizontalJustification", "CS", "1" }, { Tag(0x0072, 0x0718),
+ "Display Set Vertical Justification", "DisplaySetVerticalJustification", "CS", "1" }, { Tag(0x0074, 0x0120),
+ "Continuation Start Meterset", "ContinuationStartMeterset", "FD", "1" }, { Tag(0x0074, 0x0121),
+ "Continuation End Meterset", "ContinuationEndMeterset", "FD", "1" }, { Tag(0x0074, 0x1000),
+ "Procedure Step State", "ProcedureStepState", "CS", "1" }, { Tag(0x0074, 0x1002),
+ "Procedure Step Progress Information Sequence", "ProcedureStepProgressInformationSequence", "SQ", "1" }, { Tag(0x0074, 0x1004),
+ "Procedure Step Progress", "ProcedureStepProgress", "DS", "1" }, { Tag(0x0074, 0x1006),
+ "Procedure Step Progress Description", "ProcedureStepProgressDescription", "ST", "1" }, { Tag(0x0074, 0x1008),
+ "Procedure Step Communications URI Sequence", "ProcedureStepCommunicationsURISequence", "SQ", "1" }, { Tag(0x0074, 0x100a),
+ "Contact URI", "ContactURI", "UR", "1" }, { Tag(0x0074, 0x100c),
+ "Contact Display Name", "ContactDisplayName", "LO", "1" }, { Tag(0x0074, 0x100e),
+ "Procedure Step Discontinuation Reason Code Sequence", "ProcedureStepDiscontinuationReasonCodeSequence", "SQ", "1" }, { Tag(0x0074, 0x1020),
+ "Beam Task Sequence", "BeamTaskSequence", "SQ", "1" }, { Tag(0x0074, 0x1022),
+ "Beam Task Type", "BeamTaskType", "CS", "1" }, { Tag(0x0074, 0x1024),
+ "Beam Order Index (Trial)", "BeamOrderIndexTrial", "IS", "1" }, { Tag(0x0074, 0x1025),
+ "Autosequence Flag", "AutosequenceFlag", "CS", "1" }, { Tag(0x0074, 0x1026),
+ "Table Top Vertical Adjusted Position", "TableTopVerticalAdjustedPosition", "FD", "1" }, { Tag(0x0074, 0x1027),
+ "Table Top Longitudinal Adjusted Position", "TableTopLongitudinalAdjustedPosition", "FD", "1" }, { Tag(0x0074, 0x1028),
+ "Table Top Lateral Adjusted Position", "TableTopLateralAdjustedPosition", "FD", "1" }, { Tag(0x0074, 0x102a),
+ "Patient Support Adjusted Angle", "PatientSupportAdjustedAngle", "FD", "1" }, { Tag(0x0074, 0x102b),
+ "Table Top Eccentric Adjusted Angle", "TableTopEccentricAdjustedAngle", "FD", "1" }, { Tag(0x0074, 0x102c),
+ "Table Top Pitch Adjusted Angle", "TableTopPitchAdjustedAngle", "FD", "1" }, { Tag(0x0074, 0x102d),
+ "Table Top Roll Adjusted Angle", "TableTopRollAdjustedAngle", "FD", "1" }, { Tag(0x0074, 0x1030),
+ "Delivery Verification Image Sequence", "DeliveryVerificationImageSequence", "SQ", "1" }, { Tag(0x0074, 0x1032),
+ "Verification Image Timing", "VerificationImageTiming", "CS", "1" }, { Tag(0x0074, 0x1034),
+ "Double Exposure Flag", "DoubleExposureFlag", "CS", "1" }, { Tag(0x0074, 0x1036),
+ "Double Exposure Ordering", "DoubleExposureOrdering", "CS", "1" }, { Tag(0x0074, 0x1038),
+ "Double Exposure Meterset (Trial)", "DoubleExposureMetersetTrial", "DS", "1" }, { Tag(0x0074, 0x103a),
+ "Double Exposure Field Delta (Trial)", "DoubleExposureFieldDeltaTrial", "DS", "4" }, { Tag(0x0074, 0x1040),
+ "Related Reference RT Image Sequence", "RelatedReferenceRTImageSequence", "SQ", "1" }, { Tag(0x0074, 0x1042),
+ "General Machine Verification Sequence", "GeneralMachineVerificationSequence", "SQ", "1" }, { Tag(0x0074, 0x1044),
+ "Conventional Machine Verification Sequence", "ConventionalMachineVerificationSequence", "SQ", "1" }, { Tag(0x0074, 0x1046),
+ "Ion Machine Verification Sequence", "IonMachineVerificationSequence", "SQ", "1" }, { Tag(0x0074, 0x1048),
+ "Failed Attributes Sequence", "FailedAttributesSequence", "SQ", "1" }, { Tag(0x0074, 0x104a),
+ "Overridden Attributes Sequence", "OverriddenAttributesSequence", "SQ", "1" }, { Tag(0x0074, 0x104c),
+ "Conventional Control Point Verification Sequence", "ConventionalControlPointVerificationSequence", "SQ", "1" }, { Tag(0x0074, 0x104e),
+ "Ion Control Point Verification Sequence", "IonControlPointVerificationSequence", "SQ", "1" }, { Tag(0x0074, 0x1050),
+ "Attribute Occurrence Sequence", "AttributeOccurrenceSequence", "SQ", "1" }, { Tag(0x0074, 0x1052),
+ "Attribute Occurrence Pointer", "AttributeOccurrencePointer", "AT", "1" }, { Tag(0x0074, 0x1054),
+ "Attribute Item Selector", "AttributeItemSelector", "UL", "1" }, { Tag(0x0074, 0x1056),
+ "Attribute Occurrence Private Creator", "AttributeOccurrencePrivateCreator", "LO", "1" }, { Tag(0x0074, 0x1057),
+ "Selector Sequence Pointer Items", "SelectorSequencePointerItems", "IS", "1-n" }, { Tag(0x0074, 0x1200),
+ "Scheduled Procedure Step Priority", "ScheduledProcedureStepPriority", "CS", "1" }, { Tag(0x0074, 0x1202),
+ "Worklist Label", "WorklistLabel", "LO", "1" }, { Tag(0x0074, 0x1204),
+ "Procedure Step Label", "ProcedureStepLabel", "LO", "1" }, { Tag(0x0074, 0x1210),
+ "Scheduled Processing Parameters Sequence", "ScheduledProcessingParametersSequence", "SQ", "1" }, { Tag(0x0074, 0x1212),
+ "Performed Processing Parameters Sequence", "PerformedProcessingParametersSequence", "SQ", "1" }, { Tag(0x0074, 0x1216),
+ "Unified Procedure Step Performed Procedure Sequence", "UnifiedProcedureStepPerformedProcedureSequence", "SQ", "1" }, { Tag(0x0074, 0x1220),
+ "Related Procedure Step Sequence", "RelatedProcedureStepSequence", "SQ", "1" }, { Tag(0x0074, 0x1222),
+ "Procedure Step Relationship Type", "ProcedureStepRelationshipType", "LO", "1" }, { Tag(0x0074, 0x1224),
+ "Replaced Procedure Step Sequence", "ReplacedProcedureStepSequence", "SQ", "1" }, { Tag(0x0074, 0x1230),
+ "Deletion Lock", "DeletionLock", "LO", "1" }, { Tag(0x0074, 0x1234),
+ "Receiving AE", "ReceivingAE", "AE", "1" }, { Tag(0x0074, 0x1236),
+ "Requesting AE", "RequestingAE", "AE", "1" }, { Tag(0x0074, 0x1238),
+ "Reason for Cancellation", "ReasonForCancellation", "LT", "1" }, { Tag(0x0074, 0x1242),
+ "SCP Status", "SCPStatus", "CS", "1" }, { Tag(0x0074, 0x1244),
+ "Subscription List Status", "SubscriptionListStatus", "CS", "1" }, { Tag(0x0074, 0x1246),
+ "Unified Procedure Step List Status", "UnifiedProcedureStepListStatus", "CS", "1" }, { Tag(0x0074, 0x1324),
+ "Beam Order Index", "BeamOrderIndex", "UL", "1" }, { Tag(0x0074, 0x1338),
+ "Double Exposure Meterset", "DoubleExposureMeterset", "FD", "1" }, { Tag(0x0074, 0x133a),
+ "Double Exposure Field Delta", "DoubleExposureFieldDelta", "FD", "4" }, { Tag(0x0074, 0x1401),
+ "Brachy Task Sequence", "BrachyTaskSequence", "SQ", "1" }, { Tag(0x0074, 0x1402),
+ "Continuation Start Total Reference Air Kerma", "ContinuationStartTotalReferenceAirKerma", "DS", "1" }, { Tag(0x0074, 0x1403),
+ "Continuation End Total Reference Air Kerma", "ContinuationEndTotalReferenceAirKerma", "DS", "1" }, { Tag(0x0074, 0x1404),
+ "Continuation Pulse Number", "ContinuationPulseNumber", "IS", "1" }, { Tag(0x0074, 0x1405),
+ "Channel Delivery Order Sequence", "ChannelDeliveryOrderSequence", "SQ", "1" }, { Tag(0x0074, 0x1406),
+ "Referenced Channel Number", "ReferencedChannelNumber", "IS", "1" }, { Tag(0x0074, 0x1407),
+ "Start Cumulative Time Weight", "StartCumulativeTimeWeight", "DS", "1" }, { Tag(0x0074, 0x1408),
+ "End Cumulative Time Weight", "EndCumulativeTimeWeight", "DS", "1" }, { Tag(0x0074, 0x1409),
+ "Omitted Channel Sequence", "OmittedChannelSequence", "SQ", "1" }, { Tag(0x0074, 0x140a),
+ "Reason for Channel Omission", "ReasonForChannelOmission", "CS", "1" }, { Tag(0x0074, 0x140b),
+ "Reason for Channel Omission Description", "ReasonForChannelOmissionDescription", "LO", "1" }, { Tag(0x0074, 0x140c),
+ "Channel Delivery Order Index", "ChannelDeliveryOrderIndex", "IS", "1" }, { Tag(0x0074, 0x140d),
+ "Channel Delivery Continuation Sequence", "ChannelDeliveryContinuationSequence", "SQ", "1" }, { Tag(0x0074, 0x140e),
+ "Omitted Application Setup Sequence", "OmittedApplicationSetupSequence", "SQ", "1" }, { Tag(0x0076, 0x0001),
+ "Implant Assembly Template Name", "ImplantAssemblyTemplateName", "LO", "1" }, { Tag(0x0076, 0x0003),
+ "Implant Assembly Template Issuer", "ImplantAssemblyTemplateIssuer", "LO", "1" }, { Tag(0x0076, 0x0006),
+ "Implant Assembly Template Version", "ImplantAssemblyTemplateVersion", "LO", "1" }, { Tag(0x0076, 0x0008),
+ "Replaced Implant Assembly Template Sequence", "ReplacedImplantAssemblyTemplateSequence", "SQ", "1" }, { Tag(0x0076, 0x000a),
+ "Implant Assembly Template Type", "ImplantAssemblyTemplateType", "CS", "1" }, { Tag(0x0076, 0x000c),
+ "Original Implant Assembly Template Sequence", "OriginalImplantAssemblyTemplateSequence", "SQ", "1" }, { Tag(0x0076, 0x000e),
+ "Derivation Implant Assembly Template Sequence", "DerivationImplantAssemblyTemplateSequence", "SQ", "1" }, { Tag(0x0076, 0x0010),
+ "Implant Assembly Template Target Anatomy Sequence", "ImplantAssemblyTemplateTargetAnatomySequence", "SQ", "1" }, { Tag(0x0076, 0x0020),
+ "Procedure Type Code Sequence", "ProcedureTypeCodeSequence", "SQ", "1" }, { Tag(0x0076, 0x0030),
+ "Surgical Technique", "SurgicalTechnique", "LO", "1" }, { Tag(0x0076, 0x0032),
+ "Component Types Sequence", "ComponentTypesSequence", "SQ", "1" }, { Tag(0x0076, 0x0034),
+ "Component Type Code Sequence", "ComponentTypeCodeSequence", "CS", "1" }, { Tag(0x0076, 0x0036),
+ "Exclusive Component Type", "ExclusiveComponentType", "CS", "1" }, { Tag(0x0076, 0x0038),
+ "Mandatory Component Type", "MandatoryComponentType", "CS", "1" }, { Tag(0x0076, 0x0040),
+ "Component Sequence", "ComponentSequence", "SQ", "1" }, { Tag(0x0076, 0x0055),
+ "Component ID", "ComponentID", "US", "1" }, { Tag(0x0076, 0x0060),
+ "Component Assembly Sequence", "ComponentAssemblySequence", "SQ", "1" }, { Tag(0x0076, 0x0070),
+ "Component 1 Referenced ID", "Component1ReferencedID", "US", "1" }, { Tag(0x0076, 0x0080),
+ "Component 1 Referenced Mating Feature Set ID", "Component1ReferencedMatingFeatureSetID", "US", "1" }, { Tag(0x0076, 0x0090),
+ "Component 1 Referenced Mating Feature ID", "Component1ReferencedMatingFeatureID", "US", "1" }, { Tag(0x0076, 0x00a0),
+ "Component 2 Referenced ID", "Component2ReferencedID", "US", "1" }, { Tag(0x0076, 0x00b0),
+ "Component 2 Referenced Mating Feature Set ID", "Component2ReferencedMatingFeatureSetID", "US", "1" }, { Tag(0x0076, 0x00c0),
+ "Component 2 Referenced Mating Feature ID", "Component2ReferencedMatingFeatureID", "US", "1" }, { Tag(0x0078, 0x0001),
+ "Implant Template Group Name", "ImplantTemplateGroupName", "LO", "1" }, { Tag(0x0078, 0x0010),
+ "Implant Template Group Description", "ImplantTemplateGroupDescription", "ST", "1" }, { Tag(0x0078, 0x0020),
+ "Implant Template Group Issuer", "ImplantTemplateGroupIssuer", "LO", "1" }, { Tag(0x0078, 0x0024),
+ "Implant Template Group Version", "ImplantTemplateGroupVersion", "LO", "1" }, { Tag(0x0078, 0x0026),
+ "Replaced Implant Template Group Sequence", "ReplacedImplantTemplateGroupSequence", "SQ", "1" }, { Tag(0x0078, 0x0028),
+ "Implant Template Group Target Anatomy Sequence", "ImplantTemplateGroupTargetAnatomySequence", "SQ", "1" }, { Tag(0x0078, 0x002a),
+ "Implant Template Group Members Sequence", "ImplantTemplateGroupMembersSequence", "SQ", "1" }, { Tag(0x0078, 0x002e),
+ "Implant Template Group Member ID", "ImplantTemplateGroupMemberID", "US", "1" }, { Tag(0x0078, 0x0050),
+ "3D Implant Template Group Member Matching Point", "ThreeDImplantTemplateGroupMemberMatchingPoint", "FD", "3" }, { Tag(0x0078, 0x0060),
+ "3D Implant Template Group Member Matching Axes", "ThreeDImplantTemplateGroupMemberMatchingAxes", "FD", "9" }, { Tag(0x0078, 0x0070),
+ "Implant Template Group Member Matching 2D Coordinates Sequence", "ImplantTemplateGroupMemberMatching2DCoordinatesSequence", "SQ", "1" }, { Tag(0x0078, 0x0090),
+ "2D Implant Template Group Member Matching Point", "TwoDImplantTemplateGroupMemberMatchingPoint", "FD", "2" }, { Tag(0x0078, 0x00a0),
+ "2D Implant Template Group Member Matching Axes", "TwoDImplantTemplateGroupMemberMatchingAxes", "FD", "4" }, { Tag(0x0078, 0x00b0),
+ "Implant Template Group Variation Dimension Sequence", "ImplantTemplateGroupVariationDimensionSequence", "SQ", "1" }, { Tag(0x0078, 0x00b2),
+ "Implant Template Group Variation Dimension Name", "ImplantTemplateGroupVariationDimensionName", "LO", "1" }, { Tag(0x0078, 0x00b4),
+ "Implant Template Group Variation Dimension Rank Sequence", "ImplantTemplateGroupVariationDimensionRankSequence", "SQ", "1" }, { Tag(0x0078, 0x00b6),
+ "Referenced Implant Template Group Member ID", "ReferencedImplantTemplateGroupMemberID", "US", "1" }, { Tag(0x0078, 0x00b8),
+ "Implant Template Group Variation Dimension Rank", "ImplantTemplateGroupVariationDimensionRank", "US", "1" }, { Tag(0x0080, 0x0001),
+ "Surface Scan Acquisition Type Code Sequence", "SurfaceScanAcquisitionTypeCodeSequence", "SQ", "1" }, { Tag(0x0080, 0x0002),
+ "Surface Scan Mode Code Sequence", "SurfaceScanModeCodeSequence", "SQ", "1" }, { Tag(0x0080, 0x0003),
+ "Registration Method Code Sequence", "RegistrationMethodCodeSequence", "SQ", "1" }, { Tag(0x0080, 0x0004),
+ "Shot Duration Time", "ShotDurationTime", "FD", "1" }, { Tag(0x0080, 0x0005),
+ "Shot Offset Time", "ShotOffsetTime", "FD", "1" }, { Tag(0x0080, 0x0006),
+ "Surface Point Presentation Value Data", "SurfacePointPresentationValueData", "US", "1-n" }, { Tag(0x0080, 0x0007),
+ "Surface Point Color CIELab Value Data", "SurfacePointColorCIELabValueData", "US", "3-3n" }, { Tag(0x0080, 0x0008),
+ "UV Mapping Sequence", "UVMappingSequence", "SQ", "1" }, { Tag(0x0080, 0x0009),
+ "Texture Label", "TextureLabel", "SH", "1" }, { Tag(0x0080, 0x0010),
+ "U Value Data", "UValueData", "OF", "1-n" }, { Tag(0x0080, 0x0011),
+ "V Value Data", "VValueData", "OF", "1-n" }, { Tag(0x0080, 0x0012),
+ "Referenced Texture Sequence", "ReferencedTextureSequence", "SQ", "1" }, { Tag(0x0080, 0x0013),
+ "Referenced Surface Data Sequence", "ReferencedSurfaceDataSequence", "SQ", "1" }, { Tag(0x0082, 0x0001),
+ "Assessment Summary", "AssessmentSummary", "CS", "1" }, { Tag(0x0082, 0x0003),
+ "Assessment Summary Description", "AssessmentSummaryDescription", "UT", "1" }, { Tag(0x0082, 0x0004),
+ "Assessed SOP Instance Sequence", "AssessedSOPInstanceSequence", "SQ", "1" }, { Tag(0x0082, 0x0005),
+ "Referenced Comparison SOP Instance Sequence", "ReferencedComparisonSOPInstanceSequence", "SQ", "1" }, { Tag(0x0082, 0x0006),
+ "Number of Assessment Observations", "NumberOfAssessmentObservations", "UL", "1" }, { Tag(0x0082, 0x0007),
+ "Assessment Observations Sequence", "AssessmentObservationsSequence", "SQ", "1" }, { Tag(0x0082, 0x0008),
+ "Observation Significance", "ObservationSignificance", "CS", "1" }, { Tag(0x0082, 0x000a),
+ "Observation Description", "ObservationDescription", "UT", "1" }, { Tag(0x0082, 0x000c),
+ "Structured Constraint Observation Sequence", "StructuredContraintObservationSequence", "SQ", "1" }, { Tag(0x0082, 0x0010),
+ "Assessed Attribute Value Sequence", "AssessedAttributeValueSequence", "SQ", "1" }, { Tag(0x0082, 0x0016),
+ "Assessment Set ID", "AssessmentSetID", "LO", "1" }, { Tag(0x0082, 0x0017),
+ "Assessment Requester Sequence", "AssessmentRequesterSequence", "SQ", "1" }, { Tag(0x0082, 0x0018),
+ "Selector Attribute Name", "SelectorAttributeName", "LO", "1" }, { Tag(0x0082, 0x0019),
+ "Selector Attribute Keyword", "SelectorAttributeKeyword", "LO", "1" }, { Tag(0x0082, 0x0021),
+ "Assessment Type Code Sequence", "AssessmentTypeCodeSequence", "SQ", "1" }, { Tag(0x0082, 0x0022),
+ "Observation Basis Code Sequence", "ObservationBasisCodeSequence", "SQ", "1" }, { Tag(0x0082, 0x0023),
+ "Assessment Label", "AssessmentLabel", "LO", "1" }, { Tag(0x0082, 0x0032),
+ "Constraint Type", "ConstraintType", "CS", "1" }, { Tag(0x0082, 0x0033),
+ "Specification Selection Guidance", "SpecificationSelectionGuidance", "UT", "1" }, { Tag(0x0082, 0x0034),
+ "Constraint Value Sequence", "ConstraintValueSequence", "SQ", "1" }, { Tag(0x0082, 0x0035),
+ "Recommended Default Value Sequence", "RecommendedDefaultValueSequence", "SQ", "1" }, { Tag(0x0082, 0x0036),
+ "Constraint Violation Significance", "ConstraintViolationSignificance", "CS", "1" }, { Tag(0x0082, 0x0037),
+ "Constraint Violation Condition", "ConstraintViolationCondition", "UT", "1" }, { Tag(0x0088, 0x0130),
+ "Storage Media File-set ID", "StorageMediaFileSetID", "SH", "1" }, { Tag(0x0088, 0x0140),
+ "Storage Media File-set UID", "StorageMediaFileSetUID", "UI", "1" }, { Tag(0x0088, 0x0200),
+ "Icon Image Sequence", "IconImageSequence", "SQ", "1" }, { Tag(0x0088, 0x0904),
+ "Topic Title", "TopicTitle", "LO", "1" }, { Tag(0x0088, 0x0906),
+ "Topic Subject", "TopicSubject", "ST", "1" }, { Tag(0x0088, 0x0910),
+ "Topic Author", "TopicAuthor", "LO", "1" }, { Tag(0x0088, 0x0912),
+ "Topic Keywords", "TopicKeywords", "LO", "1-32" }, { Tag(0x0100, 0x0410),
+ "SOP Instance Status", "SOPInstanceStatus", "CS", "1" }, { Tag(0x0100, 0x0420),
+ "SOP Authorization DateTime", "SOPAuthorizationDateTime", "DT", "1" }, { Tag(0x0100, 0x0424),
+ "SOP Authorization Comment", "SOPAuthorizationComment", "LT", "1" }, { Tag(0x0100, 0x0426),
+ "Authorization Equipment Certification Number", "AuthorizationEquipmentCertificationNumber", "LO", "1" }, { Tag(0x0400, 0x0005),
+ "MAC ID Number", "MACIDNumber", "US", "1" }, { Tag(0x0400, 0x0010),
+ "MAC Calculation Transfer Syntax UID", "MACCalculationTransferSyntaxUID", "UI", "1" }, { Tag(0x0400, 0x0015),
+ "MAC Algorithm", "MACAlgorithm", "CS", "1" }, { Tag(0x0400, 0x0020),
+ "Data Elements Signed", "DataElementsSigned", "AT", "1-n" }, { Tag(0x0400, 0x0100),
+ "Digital Signature UID", "DigitalSignatureUID", "UI", "1" }, { Tag(0x0400, 0x0105),
+ "Digital Signature DateTime", "DigitalSignatureDateTime", "DT", "1" }, { Tag(0x0400, 0x0110),
+ "Certificate Type", "CertificateType", "CS", "1" }, { Tag(0x0400, 0x0115),
+ "Certificate of Signer", "CertificateOfSigner", "OB", "1" }, { Tag(0x0400, 0x0120),
+ "Signature", "Signature", "OB", "1" }, { Tag(0x0400, 0x0305),
+ "Certified Timestamp Type", "CertifiedTimestampType", "CS", "1" }, { Tag(0x0400, 0x0310),
+ "Certified Timestamp", "CertifiedTimestamp", "OB", "1" }, { Tag(0x0400, 0x0401),
+ "Digital Signature Purpose Code Sequence", "DigitalSignaturePurposeCodeSequence", "SQ", "1" }, { Tag(0x0400, 0x0402),
+ "Referenced Digital Signature Sequence", "ReferencedDigitalSignatureSequence", "SQ", "1" }, { Tag(0x0400, 0x0403),
+ "Referenced SOP Instance MAC Sequence", "ReferencedSOPInstanceMACSequence", "SQ", "1" }, { Tag(0x0400, 0x0404),
+ "MAC", "MAC", "OB", "1" }, { Tag(0x0400, 0x0500),
+ "Encrypted Attributes Sequence", "EncryptedAttributesSequence", "SQ", "1" }, { Tag(0x0400, 0x0510),
+ "Encrypted Content Transfer Syntax UID", "EncryptedContentTransferSyntaxUID", "UI", "1" }, { Tag(0x0400, 0x0520),
+ "Encrypted Content", "EncryptedContent", "OB", "1" }, { Tag(0x0400, 0x0550),
+ "Modified Attributes Sequence", "ModifiedAttributesSequence", "SQ", "1" }, { Tag(0x0400, 0x0561),
+ "Original Attributes Sequence", "OriginalAttributesSequence", "SQ", "1" }, { Tag(0x0400, 0x0562),
+ "Attribute Modification DateTime", "AttributeModificationDateTime", "DT", "1" }, { Tag(0x0400, 0x0563),
+ "Modifying System", "ModifyingSystem", "LO", "1" }, { Tag(0x0400, 0x0564),
+ "Source of Previous Values", "SourceOfPreviousValues", "LO", "1" }, { Tag(0x0400, 0x0565),
+ "Reason for the Attribute Modification", "ReasonForTheAttributeModification", "CS", "1" }, { Tag(0x2000, 0x0010),
+ "Number of Copies", "NumberOfCopies", "IS", "1" }, { Tag(0x2000, 0x001e),
+ "Printer Configuration Sequence", "PrinterConfigurationSequence", "SQ", "1" }, { Tag(0x2000, 0x0020),
+ "Print Priority", "PrintPriority", "CS", "1" }, { Tag(0x2000, 0x0030),
+ "Medium Type", "MediumType", "CS", "1" }, { Tag(0x2000, 0x0040),
+ "Film Destination", "FilmDestination", "CS", "1" }, { Tag(0x2000, 0x0050),
+ "Film Session Label", "FilmSessionLabel", "LO", "1" }, { Tag(0x2000, 0x0060),
+ "Memory Allocation", "MemoryAllocation", "IS", "1" }, { Tag(0x2000, 0x0061),
+ "Maximum Memory Allocation", "MaximumMemoryAllocation", "IS", "1" }, { Tag(0x2000, 0x0062),
+ "Color Image Printing Flag", "ColorImagePrintingFlag", "CS", "1" }, { Tag(0x2000, 0x0063),
+ "Collation Flag", "CollationFlag", "CS", "1" }, { Tag(0x2000, 0x0065),
+ "Annotation Flag", "AnnotationFlag", "CS", "1" }, { Tag(0x2000, 0x0067),
+ "Image Overlay Flag", "ImageOverlayFlag", "CS", "1" }, { Tag(0x2000, 0x0069),
+ "Presentation LUT Flag", "PresentationLUTFlag", "CS", "1" }, { Tag(0x2000, 0x006a),
+ "Image Box Presentation LUT Flag", "ImageBoxPresentationLUTFlag", "CS", "1" }, { Tag(0x2000, 0x00a0),
+ "Memory Bit Depth", "MemoryBitDepth", "US", "1" }, { Tag(0x2000, 0x00a1),
+ "Printing Bit Depth", "PrintingBitDepth", "US", "1" }, { Tag(0x2000, 0x00a2),
+ "Media Installed Sequence", "MediaInstalledSequence", "SQ", "1" }, { Tag(0x2000, 0x00a4),
+ "Other Media Available Sequence", "OtherMediaAvailableSequence", "SQ", "1" }, { Tag(0x2000, 0x00a8),
+ "Supported Image Display Formats Sequence", "SupportedImageDisplayFormatsSequence", "SQ", "1" }, { Tag(0x2000, 0x0500),
+ "Referenced Film Box Sequence", "ReferencedFilmBoxSequence", "SQ", "1" }, { Tag(0x2000, 0x0510),
+ "Referenced Stored Print Sequence", "ReferencedStoredPrintSequence", "SQ", "1" }, { Tag(0x2010, 0x0010),
+ "Image Display Format", "ImageDisplayFormat", "ST", "1" }, { Tag(0x2010, 0x0030),
+ "Annotation Display Format ID", "AnnotationDisplayFormatID", "CS", "1" }, { Tag(0x2010, 0x0040),
+ "Film Orientation", "FilmOrientation", "CS", "1" }, { Tag(0x2010, 0x0050),
+ "Film Size ID", "FilmSizeID", "CS", "1" }, { Tag(0x2010, 0x0052),
+ "Printer Resolution ID", "PrinterResolutionID", "CS", "1" }, { Tag(0x2010, 0x0054),
+ "Default Printer Resolution ID", "DefaultPrinterResolutionID", "CS", "1" }, { Tag(0x2010, 0x0060),
+ "Magnification Type", "MagnificationType", "CS", "1" }, { Tag(0x2010, 0x0080),
+ "Smoothing Type", "SmoothingType", "CS", "1" }, { Tag(0x2010, 0x00a6),
+ "Default Magnification Type", "DefaultMagnificationType", "CS", "1" }, { Tag(0x2010, 0x00a7),
+ "Other Magnification Types Available", "OtherMagnificationTypesAvailable", "CS", "1-n" }, { Tag(0x2010, 0x00a8),
+ "Default Smoothing Type", "DefaultSmoothingType", "CS", "1" }, { Tag(0x2010, 0x00a9),
+ "Other Smoothing Types Available", "OtherSmoothingTypesAvailable", "CS", "1-n" }, { Tag(0x2010, 0x0100),
+ "Border Density", "BorderDensity", "CS", "1" }, { Tag(0x2010, 0x0110),
+ "Empty Image Density", "EmptyImageDensity", "CS", "1" }, { Tag(0x2010, 0x0120),
+ "Min Density", "MinDensity", "US", "1" }, { Tag(0x2010, 0x0130),
+ "Max Density", "MaxDensity", "US", "1" }, { Tag(0x2010, 0x0140),
+ "Trim", "Trim", "CS", "1" }, { Tag(0x2010, 0x0150),
+ "Configuration Information", "ConfigurationInformation", "ST", "1" }, { Tag(0x2010, 0x0152),
+ "Configuration Information Description", "ConfigurationInformationDescription", "LT", "1" }, { Tag(0x2010, 0x0154),
+ "Maximum Collated Films", "MaximumCollatedFilms", "IS", "1" }, { Tag(0x2010, 0x015e),
+ "Illumination", "Illumination", "US", "1" }, { Tag(0x2010, 0x0160),
+ "Reflected Ambient Light", "ReflectedAmbientLight", "US", "1" }, { Tag(0x2010, 0x0376),
+ "Printer Pixel Spacing", "PrinterPixelSpacing", "DS", "2" }, { Tag(0x2010, 0x0500),
+ "Referenced Film Session Sequence", "ReferencedFilmSessionSequence", "SQ", "1" }, { Tag(0x2010, 0x0510),
+ "Referenced Image Box Sequence", "ReferencedImageBoxSequence", "SQ", "1" }, { Tag(0x2010, 0x0520),
+ "Referenced Basic Annotation Box Sequence", "ReferencedBasicAnnotationBoxSequence", "SQ", "1" }, { Tag(0x2020, 0x0010),
+ "Image Box Position", "ImageBoxPosition", "US", "1" }, { Tag(0x2020, 0x0020),
+ "Polarity", "Polarity", "CS", "1" }, { Tag(0x2020, 0x0030),
+ "Requested Image Size", "RequestedImageSize", "DS", "1" }, { Tag(0x2020, 0x0040),
+ "Requested Decimate/Crop Behavior", "RequestedDecimateCropBehavior", "CS", "1" }, { Tag(0x2020, 0x0050),
+ "Requested Resolution ID", "RequestedResolutionID", "CS", "1" }, { Tag(0x2020, 0x00a0),
+ "Requested Image Size Flag", "RequestedImageSizeFlag", "CS", "1" }, { Tag(0x2020, 0x00a2),
+ "Decimate/Crop Result", "DecimateCropResult", "CS", "1" }, { Tag(0x2020, 0x0110),
+ "Basic Grayscale Image Sequence", "BasicGrayscaleImageSequence", "SQ", "1" }, { Tag(0x2020, 0x0111),
+ "Basic Color Image Sequence", "BasicColorImageSequence", "SQ", "1" }, { Tag(0x2020, 0x0130),
+ "Referenced Image Overlay Box Sequence", "ReferencedImageOverlayBoxSequence", "SQ", "1" }, { Tag(0x2020, 0x0140),
+ "Referenced VOI LUT Box Sequence", "ReferencedVOILUTBoxSequence", "SQ", "1" }, { Tag(0x2030, 0x0010),
+ "Annotation Position", "AnnotationPosition", "US", "1" }, { Tag(0x2030, 0x0020),
+ "Text String", "TextString", "LO", "1" }, { Tag(0x2040, 0x0010),
+ "Referenced Overlay Plane Sequence", "ReferencedOverlayPlaneSequence", "SQ", "1" }, { Tag(0x2040, 0x0011),
+ "Referenced Overlay Plane Groups", "ReferencedOverlayPlaneGroups", "US", "1-99" }, { Tag(0x2040, 0x0020),
+ "Overlay Pixel Data Sequence", "OverlayPixelDataSequence", "SQ", "1" }, { Tag(0x2040, 0x0060),
+ "Overlay Magnification Type", "OverlayMagnificationType", "CS", "1" }, { Tag(0x2040, 0x0070),
+ "Overlay Smoothing Type", "OverlaySmoothingType", "CS", "1" }, { Tag(0x2040, 0x0072),
+ "Overlay or Image Magnification", "OverlayOrImageMagnification", "CS", "1" }, { Tag(0x2040, 0x0074),
+ "Magnify to Number of Columns", "MagnifyToNumberOfColumns", "US", "1" }, { Tag(0x2040, 0x0080),
+ "Overlay Foreground Density", "OverlayForegroundDensity", "CS", "1" }, { Tag(0x2040, 0x0082),
+ "Overlay Background Density", "OverlayBackgroundDensity", "CS", "1" }, { Tag(0x2040, 0x0090),
+ "Overlay Mode", "OverlayMode", "CS", "1" }, { Tag(0x2040, 0x0100),
+ "Threshold Density", "ThresholdDensity", "CS", "1" }, { Tag(0x2040, 0x0500),
+ "Referenced Image Box Sequence (Retired)", "ReferencedImageBoxSequenceRetired", "SQ", "1" }, { Tag(0x2050, 0x0010),
+ "Presentation LUT Sequence", "PresentationLUTSequence", "SQ", "1" }, { Tag(0x2050, 0x0020),
+ "Presentation LUT Shape", "PresentationLUTShape", "CS", "1" }, { Tag(0x2050, 0x0500),
+ "Referenced Presentation LUT Sequence", "ReferencedPresentationLUTSequence", "SQ", "1" }, { Tag(0x2100, 0x0010),
+ "Print Job ID", "PrintJobID", "SH", "1" }, { Tag(0x2100, 0x0020),
+ "Execution Status", "ExecutionStatus", "CS", "1" }, { Tag(0x2100, 0x0030),
+ "Execution Status Info", "ExecutionStatusInfo", "CS", "1" }, { Tag(0x2100, 0x0040),
+ "Creation Date", "CreationDate", "DA", "1" }, { Tag(0x2100, 0x0050),
+ "Creation Time", "CreationTime", "TM", "1" }, { Tag(0x2100, 0x0070),
+ "Originator", "Originator", "AE", "1" }, { Tag(0x2100, 0x0140),
+ "Destination AE", "DestinationAE", "AE", "1" }, { Tag(0x2100, 0x0160),
+ "Owner ID", "OwnerID", "SH", "1" }, { Tag(0x2100, 0x0170),
+ "Number of Films", "NumberOfFilms", "IS", "1" }, { Tag(0x2100, 0x0500),
+ "Referenced Print Job Sequence (Pull Stored Print)", "ReferencedPrintJobSequencePullStoredPrint", "SQ", "1" }, { Tag(0x2110, 0x0010),
+ "Printer Status", "PrinterStatus", "CS", "1" }, { Tag(0x2110, 0x0020),
+ "Printer Status Info", "PrinterStatusInfo", "CS", "1" }, { Tag(0x2110, 0x0030),
+ "Printer Name", "PrinterName", "LO", "1" }, { Tag(0x2110, 0x0099),
+ "Print Queue ID", "PrintQueueID", "SH", "1" }, { Tag(0x2120, 0x0010),
+ "Queue Status", "QueueStatus", "CS", "1" }, { Tag(0x2120, 0x0050),
+ "Print Job Description Sequence", "PrintJobDescriptionSequence", "SQ", "1" }, { Tag(0x2120, 0x0070),
+ "Referenced Print Job Sequence", "ReferencedPrintJobSequence", "SQ", "1" }, { Tag(0x2130, 0x0010),
+ "Print Management Capabilities Sequence", "PrintManagementCapabilitiesSequence", "SQ", "1" }, { Tag(0x2130, 0x0015),
+ "Printer Characteristics Sequence", "PrinterCharacteristicsSequence", "SQ", "1" }, { Tag(0x2130, 0x0030),
+ "Film Box Content Sequence", "FilmBoxContentSequence", "SQ", "1" }, { Tag(0x2130, 0x0040),
+ "Image Box Content Sequence", "ImageBoxContentSequence", "SQ", "1" }, { Tag(0x2130, 0x0050),
+ "Annotation Content Sequence", "AnnotationContentSequence", "SQ", "1" }, { Tag(0x2130, 0x0060),
+ "Image Overlay Box Content Sequence", "ImageOverlayBoxContentSequence", "SQ", "1" }, { Tag(0x2130, 0x0080),
+ "Presentation LUT Content Sequence", "PresentationLUTContentSequence", "SQ", "1" }, { Tag(0x2130, 0x00a0),
+ "Proposed Study Sequence", "ProposedStudySequence", "SQ", "1" }, { Tag(0x2130, 0x00c0),
+ "Original Image Sequence", "OriginalImageSequence", "SQ", "1" }, { Tag(0x2200, 0x0001),
+ "Label Using Information Extracted From Instances", "LabelUsingInformationExtractedFromInstances", "CS", "1" }, { Tag(0x2200, 0x0002),
+ "Label Text", "LabelText", "UT", "1" }, { Tag(0x2200, 0x0003),
+ "Label Style Selection", "LabelStyleSelection", "CS", "1" }, { Tag(0x2200, 0x0004),
+ "Media Disposition", "MediaDisposition", "LT", "1" }, { Tag(0x2200, 0x0005),
+ "Barcode Value", "BarcodeValue", "LT", "1" }, { Tag(0x2200, 0x0006),
+ "Barcode Symbology", "BarcodeSymbology", "CS", "1" }, { Tag(0x2200, 0x0007),
+ "Allow Media Splitting", "AllowMediaSplitting", "CS", "1" }, { Tag(0x2200, 0x0008),
+ "Include Non-DICOM Objects", "IncludeNonDICOMObjects", "CS", "1" }, { Tag(0x2200, 0x0009),
+ "Include Display Application", "IncludeDisplayApplication", "CS", "1" }, { Tag(0x2200, 0x000a),
+ "Preserve Composite Instances After Media Creation", "PreserveCompositeInstancesAfterMediaCreation", "CS", "1" }, { Tag(0x2200, 0x000b),
+ "Total Number of Pieces of Media Created", "TotalNumberOfPiecesOfMediaCreated", "US", "1" }, { Tag(0x2200, 0x000c),
+ "Requested Media Application Profile", "RequestedMediaApplicationProfile", "LO", "1" }, { Tag(0x2200, 0x000d),
+ "Referenced Storage Media Sequence", "ReferencedStorageMediaSequence", "SQ", "1" }, { Tag(0x2200, 0x000e),
+ "Failure Attributes", "FailureAttributes", "AT", "1-n" }, { Tag(0x2200, 0x000f),
+ "Allow Lossy Compression", "AllowLossyCompression", "CS", "1" }, { Tag(0x2200, 0x0020),
+ "Request Priority", "RequestPriority", "CS", "1" }, { Tag(0x3002, 0x0002),
+ "RT Image Label", "RTImageLabel", "SH", "1" }, { Tag(0x3002, 0x0003),
+ "RT Image Name", "RTImageName", "LO", "1" }, { Tag(0x3002, 0x0004),
+ "RT Image Description", "RTImageDescription", "ST", "1" }, { Tag(0x3002, 0x000a),
+ "Reported Values Origin", "ReportedValuesOrigin", "CS", "1" }, { Tag(0x3002, 0x000c),
+ "RT Image Plane", "RTImagePlane", "CS", "1" }, { Tag(0x3002, 0x000d),
+ "X-Ray Image Receptor Translation", "XRayImageReceptorTranslation", "DS", "3" }, { Tag(0x3002, 0x000e),
+ "X-Ray Image Receptor Angle", "XRayImageReceptorAngle", "DS", "1" }, { Tag(0x3002, 0x0010),
+ "RT Image Orientation", "RTImageOrientation", "DS", "6" }, { Tag(0x3002, 0x0011),
+ "Image Plane Pixel Spacing", "ImagePlanePixelSpacing", "DS", "2" }, { Tag(0x3002, 0x0012),
+ "RT Image Position", "RTImagePosition", "DS", "2" }, { Tag(0x3002, 0x0020),
+ "Radiation Machine Name", "RadiationMachineName", "SH", "1" }, { Tag(0x3002, 0x0022),
+ "Radiation Machine SAD", "RadiationMachineSAD", "DS", "1" }, { Tag(0x3002, 0x0024),
+ "Radiation Machine SSD", "RadiationMachineSSD", "DS", "1" }, { Tag(0x3002, 0x0026),
+ "RT Image SID", "RTImageSID", "DS", "1" }, { Tag(0x3002, 0x0028),
+ "Source to Reference Object Distance", "SourceToReferenceObjectDistance", "DS", "1" }, { Tag(0x3002, 0x0029),
+ "Fraction Number", "FractionNumber", "IS", "1" }, { Tag(0x3002, 0x0030),
+ "Exposure Sequence", "ExposureSequence", "SQ", "1" }, { Tag(0x3002, 0x0032),
+ "Meterset Exposure", "MetersetExposure", "DS", "1" }, { Tag(0x3002, 0x0034),
+ "Diaphragm Position", "DiaphragmPosition", "DS", "4" }, { Tag(0x3002, 0x0040),
+ "Fluence Map Sequence", "FluenceMapSequence", "SQ", "1" }, { Tag(0x3002, 0x0041),
+ "Fluence Data Source", "FluenceDataSource", "CS", "1" }, { Tag(0x3002, 0x0042),
+ "Fluence Data Scale", "FluenceDataScale", "DS", "1" }, { Tag(0x3002, 0x0050),
+ "Primary Fluence Mode Sequence", "PrimaryFluenceModeSequence", "SQ", "1" }, { Tag(0x3002, 0x0051),
+ "Fluence Mode", "FluenceMode", "CS", "1" }, { Tag(0x3002, 0x0052),
+ "Fluence Mode ID", "FluenceModeID", "SH", "1" }, { Tag(0x3004, 0x0001),
+ "DVH Type", "DVHType", "CS", "1" }, { Tag(0x3004, 0x0002),
+ "Dose Units", "DoseUnits", "CS", "1" }, { Tag(0x3004, 0x0004),
+ "Dose Type", "DoseType", "CS", "1" }, { Tag(0x3004, 0x0005),
+ "Spatial Transform of Dose", "SpatialTransformOfDose", "CS", "1" }, { Tag(0x3004, 0x0006),
+ "Dose Comment", "DoseComment", "LO", "1" }, { Tag(0x3004, 0x0008),
+ "Normalization Point", "NormalizationPoint", "DS", "3" }, { Tag(0x3004, 0x000a),
+ "Dose Summation Type", "DoseSummationType", "CS", "1" }, { Tag(0x3004, 0x000c),
+ "Grid Frame Offset Vector", "GridFrameOffsetVector", "DS", "2-n" }, { Tag(0x3004, 0x000e),
+ "Dose Grid Scaling", "DoseGridScaling", "DS", "1" }, { Tag(0x3004, 0x0010),
+ "RT Dose ROI Sequence", "RTDoseROISequence", "SQ", "1" }, { Tag(0x3004, 0x0012),
+ "Dose Value", "DoseValue", "DS", "1" }, { Tag(0x3004, 0x0014),
+ "Tissue Heterogeneity Correction", "TissueHeterogeneityCorrection", "CS", "1-3" }, { Tag(0x3004, 0x0040),
+ "DVH Normalization Point", "DVHNormalizationPoint", "DS", "3" }, { Tag(0x3004, 0x0042),
+ "DVH Normalization Dose Value", "DVHNormalizationDoseValue", "DS", "1" }, { Tag(0x3004, 0x0050),
+ "DVH Sequence", "DVHSequence", "SQ", "1" }, { Tag(0x3004, 0x0052),
+ "DVH Dose Scaling", "DVHDoseScaling", "DS", "1" }, { Tag(0x3004, 0x0054),
+ "DVH Volume Units", "DVHVolumeUnits", "CS", "1" }, { Tag(0x3004, 0x0056),
+ "DVH Number of Bins", "DVHNumberOfBins", "IS", "1" }, { Tag(0x3004, 0x0058),
+ "DVH Data", "DVHData", "DS", "2-2n" }, { Tag(0x3004, 0x0060),
+ "DVH Referenced ROI Sequence", "DVHReferencedROISequence", "SQ", "1" }, { Tag(0x3004, 0x0062),
+ "DVH ROI Contribution Type", "DVHROIContributionType", "CS", "1" }, { Tag(0x3004, 0x0070),
+ "DVH Minimum Dose", "DVHMinimumDose", "DS", "1" }, { Tag(0x3004, 0x0072),
+ "DVH Maximum Dose", "DVHMaximumDose", "DS", "1" }, { Tag(0x3004, 0x0074),
+ "DVH Mean Dose", "DVHMeanDose", "DS", "1" }, { Tag(0x3006, 0x0002),
+ "Structure Set Label", "StructureSetLabel", "SH", "1" }, { Tag(0x3006, 0x0004),
+ "Structure Set Name", "StructureSetName", "LO", "1" }, { Tag(0x3006, 0x0006),
+ "Structure Set Description", "StructureSetDescription", "ST", "1" }, { Tag(0x3006, 0x0008),
+ "Structure Set Date", "StructureSetDate", "DA", "1" }, { Tag(0x3006, 0x0009),
+ "Structure Set Time", "StructureSetTime", "TM", "1" }, { Tag(0x3006, 0x0010),
+ "Referenced Frame of Reference Sequence", "ReferencedFrameOfReferenceSequence", "SQ", "1" }, { Tag(0x3006, 0x0012),
+ "RT Referenced Study Sequence", "RTReferencedStudySequence", "SQ", "1" }, { Tag(0x3006, 0x0014),
+ "RT Referenced Series Sequence", "RTReferencedSeriesSequence", "SQ", "1" }, { Tag(0x3006, 0x0016),
+ "Contour Image Sequence", "ContourImageSequence", "SQ", "1" }, { Tag(0x3006, 0x0018),
+ "Predecessor Structure Set Sequence", "PredecessorStructureSetSequence", "SQ", "1" }, { Tag(0x3006, 0x0020),
+ "Structure Set ROI Sequence", "StructureSetROISequence", "SQ", "1" }, { Tag(0x3006, 0x0022),
+ "ROI Number", "ROINumber", "IS", "1" }, { Tag(0x3006, 0x0024),
+ "Referenced Frame of Reference UID", "ReferencedFrameOfReferenceUID", "UI", "1" }, { Tag(0x3006, 0x0026),
+ "ROI Name", "ROIName", "LO", "1" }, { Tag(0x3006, 0x0028),
+ "ROI Description", "ROIDescription", "ST", "1" }, { Tag(0x3006, 0x002a),
+ "ROI Display Color", "ROIDisplayColor", "IS", "3" }, { Tag(0x3006, 0x002c),
+ "ROI Volume", "ROIVolume", "DS", "1" }, { Tag(0x3006, 0x0030),
+ "RT Related ROI Sequence", "RTRelatedROISequence", "SQ", "1" }, { Tag(0x3006, 0x0033),
+ "RT ROI Relationship", "RTROIRelationship", "CS", "1" }, { Tag(0x3006, 0x0036),
+ "ROI Generation Algorithm", "ROIGenerationAlgorithm", "CS", "1" }, { Tag(0x3006, 0x0038),
+ "ROI Generation Description", "ROIGenerationDescription", "LO", "1" }, { Tag(0x3006, 0x0039),
+ "ROI Contour Sequence", "ROIContourSequence", "SQ", "1" }, { Tag(0x3006, 0x0040),
+ "Contour Sequence", "ContourSequence", "SQ", "1" }, { Tag(0x3006, 0x0042),
+ "Contour Geometric Type", "ContourGeometricType", "CS", "1" }, { Tag(0x3006, 0x0044),
+ "Contour Slab Thickness", "ContourSlabThickness", "DS", "1" }, { Tag(0x3006, 0x0045),
+ "Contour Offset Vector", "ContourOffsetVector", "DS", "3" }, { Tag(0x3006, 0x0046),
+ "Number of Contour Points", "NumberOfContourPoints", "IS", "1" }, { Tag(0x3006, 0x0048),
+ "Contour Number", "ContourNumber", "IS", "1" }, { Tag(0x3006, 0x0049),
+ "Attached Contours", "AttachedContours", "IS", "1-n" }, { Tag(0x3006, 0x0050),
+ "Contour Data", "ContourData", "DS", "3-3n" }, { Tag(0x3006, 0x0080),
+ "RT ROI Observations Sequence", "RTROIObservationsSequence", "SQ", "1" }, { Tag(0x3006, 0x0082),
+ "Observation Number", "ObservationNumber", "IS", "1" }, { Tag(0x3006, 0x0084),
+ "Referenced ROI Number", "ReferencedROINumber", "IS", "1" }, { Tag(0x3006, 0x0085),
+ "ROI Observation Label", "ROIObservationLabel", "SH", "1" }, { Tag(0x3006, 0x0086),
+ "RT ROI Identification Code Sequence", "RTROIIdentificationCodeSequence", "SQ", "1" }, { Tag(0x3006, 0x0088),
+ "ROI Observation Description", "ROIObservationDescription", "ST", "1" }, { Tag(0x3006, 0x00a0),
+ "Related RT ROI Observations Sequence", "RelatedRTROIObservationsSequence", "SQ", "1" }, { Tag(0x3006, 0x00a4),
+ "RT ROI Interpreted Type", "RTROIInterpretedType", "CS", "1" }, { Tag(0x3006, 0x00a6),
+ "ROI Interpreter", "ROIInterpreter", "PN", "1" }, { Tag(0x3006, 0x00b0),
+ "ROI Physical Properties Sequence", "ROIPhysicalPropertiesSequence", "SQ", "1" }, { Tag(0x3006, 0x00b2),
+ "ROI Physical Property", "ROIPhysicalProperty", "CS", "1" }, { Tag(0x3006, 0x00b4),
+ "ROI Physical Property Value", "ROIPhysicalPropertyValue", "DS", "1" }, { Tag(0x3006, 0x00b6),
+ "ROI Elemental Composition Sequence", "ROIElementalCompositionSequence", "SQ", "1" }, { Tag(0x3006, 0x00b7),
+ "ROI Elemental Composition Atomic Number", "ROIElementalCompositionAtomicNumber", "US", "1" }, { Tag(0x3006, 0x00b8),
+ "ROI Elemental Composition Atomic Mass Fraction", "ROIElementalCompositionAtomicMassFraction", "FL", "1" }, { Tag(0x3006, 0x00b9),
+ "Additional RT ROI Identification Code Sequence", "AdditionalRTROIIdentificationCodeSequence", "SQ", "1" }, { Tag(0x3006, 0x00c0),
+ "Frame of Reference Relationship Sequence", "FrameOfReferenceRelationshipSequence", "SQ", "1" }, { Tag(0x3006, 0x00c2),
+ "Related Frame of Reference UID", "RelatedFrameOfReferenceUID", "UI", "1" }, { Tag(0x3006, 0x00c4),
+ "Frame of Reference Transformation Type", "FrameOfReferenceTransformationType", "CS", "1" }, { Tag(0x3006, 0x00c6),
+ "Frame of Reference Transformation Matrix", "FrameOfReferenceTransformationMatrix", "DS", "16" }, { Tag(0x3006, 0x00c8),
+ "Frame of Reference Transformation Comment", "FrameOfReferenceTransformationComment", "LO", "1" }, { Tag(0x3008, 0x0010),
+ "Measured Dose Reference Sequence", "MeasuredDoseReferenceSequence", "SQ", "1" }, { Tag(0x3008, 0x0012),
+ "Measured Dose Description", "MeasuredDoseDescription", "ST", "1" }, { Tag(0x3008, 0x0014),
+ "Measured Dose Type", "MeasuredDoseType", "CS", "1" }, { Tag(0x3008, 0x0016),
+ "Measured Dose Value", "MeasuredDoseValue", "DS", "1" }, { Tag(0x3008, 0x0020),
+ "Treatment Session Beam Sequence", "TreatmentSessionBeamSequence", "SQ", "1" }, { Tag(0x3008, 0x0021),
+ "Treatment Session Ion Beam Sequence", "TreatmentSessionIonBeamSequence", "SQ", "1" }, { Tag(0x3008, 0x0022),
+ "Current Fraction Number", "CurrentFractionNumber", "IS", "1" }, { Tag(0x3008, 0x0024),
+ "Treatment Control Point Date", "TreatmentControlPointDate", "DA", "1" }, { Tag(0x3008, 0x0025),
+ "Treatment Control Point Time", "TreatmentControlPointTime", "TM", "1" }, { Tag(0x3008, 0x002a),
+ "Treatment Termination Status", "TreatmentTerminationStatus", "CS", "1" }, { Tag(0x3008, 0x002b),
+ "Treatment Termination Code", "TreatmentTerminationCode", "SH", "1" }, { Tag(0x3008, 0x002c),
+ "Treatment Verification Status", "TreatmentVerificationStatus", "CS", "1" }, { Tag(0x3008, 0x0030),
+ "Referenced Treatment Record Sequence", "ReferencedTreatmentRecordSequence", "SQ", "1" }, { Tag(0x3008, 0x0032),
+ "Specified Primary Meterset", "SpecifiedPrimaryMeterset", "DS", "1" }, { Tag(0x3008, 0x0033),
+ "Specified Secondary Meterset", "SpecifiedSecondaryMeterset", "DS", "1" }, { Tag(0x3008, 0x0036),
+ "Delivered Primary Meterset", "DeliveredPrimaryMeterset", "DS", "1" }, { Tag(0x3008, 0x0037),
+ "Delivered Secondary Meterset", "DeliveredSecondaryMeterset", "DS", "1" }, { Tag(0x3008, 0x003a),
+ "Specified Treatment Time", "SpecifiedTreatmentTime", "DS", "1" }, { Tag(0x3008, 0x003b),
+ "Delivered Treatment Time", "DeliveredTreatmentTime", "DS", "1" }, { Tag(0x3008, 0x0040),
+ "Control Point Delivery Sequence", "ControlPointDeliverySequence", "SQ", "1" }, { Tag(0x3008, 0x0041),
+ "Ion Control Point Delivery Sequence", "IonControlPointDeliverySequence", "SQ", "1" }, { Tag(0x3008, 0x0042),
+ "Specified Meterset", "SpecifiedMeterset", "DS", "1" }, { Tag(0x3008, 0x0044),
+ "Delivered Meterset", "DeliveredMeterset", "DS", "1" }, { Tag(0x3008, 0x0045),
+ "Meterset Rate Set", "MetersetRateSet", "FL", "1" }, { Tag(0x3008, 0x0046),
+ "Meterset Rate Delivered", "MetersetRateDelivered", "FL", "1" }, { Tag(0x3008, 0x0047),
+ "Scan Spot Metersets Delivered", "ScanSpotMetersetsDelivered", "FL", "1-n" }, { Tag(0x3008, 0x0048),
+ "Dose Rate Delivered", "DoseRateDelivered", "DS", "1" }, { Tag(0x3008, 0x0050),
+ "Treatment Summary Calculated Dose Reference Sequence", "TreatmentSummaryCalculatedDoseReferenceSequence", "SQ", "1" }, { Tag(0x3008, 0x0052),
+ "Cumulative Dose to Dose Reference", "CumulativeDoseToDoseReference", "DS", "1" }, { Tag(0x3008, 0x0054),
+ "First Treatment Date", "FirstTreatmentDate", "DA", "1" }, { Tag(0x3008, 0x0056),
+ "Most Recent Treatment Date", "MostRecentTreatmentDate", "DA", "1" }, { Tag(0x3008, 0x005a),
+ "Number of Fractions Delivered", "NumberOfFractionsDelivered", "IS", "1" }, { Tag(0x3008, 0x0060),
+ "Override Sequence", "OverrideSequence", "SQ", "1" }, { Tag(0x3008, 0x0061),
+ "Parameter Sequence Pointer", "ParameterSequencePointer", "AT", "1" }, { Tag(0x3008, 0x0062),
+ "Override Parameter Pointer", "OverrideParameterPointer", "AT", "1" }, { Tag(0x3008, 0x0063),
+ "Parameter Item Index", "ParameterItemIndex", "IS", "1" }, { Tag(0x3008, 0x0064),
+ "Measured Dose Reference Number", "MeasuredDoseReferenceNumber", "IS", "1" }, { Tag(0x3008, 0x0065),
+ "Parameter Pointer", "ParameterPointer", "AT", "1" }, { Tag(0x3008, 0x0066),
+ "Override Reason", "OverrideReason", "ST", "1" }, { Tag(0x3008, 0x0068),
+ "Corrected Parameter Sequence", "CorrectedParameterSequence", "SQ", "1" }, { Tag(0x3008, 0x006a),
+ "Correction Value", "CorrectionValue", "FL", "1" }, { Tag(0x3008, 0x0070),
+ "Calculated Dose Reference Sequence", "CalculatedDoseReferenceSequence", "SQ", "1" }, { Tag(0x3008, 0x0072),
+ "Calculated Dose Reference Number", "CalculatedDoseReferenceNumber", "IS", "1" }, { Tag(0x3008, 0x0074),
+ "Calculated Dose Reference Description", "CalculatedDoseReferenceDescription", "ST", "1" }, { Tag(0x3008, 0x0076),
+ "Calculated Dose Reference Dose Value", "CalculatedDoseReferenceDoseValue", "DS", "1" }, { Tag(0x3008, 0x0078),
+ "Start Meterset", "StartMeterset", "DS", "1" }, { Tag(0x3008, 0x007a),
+ "End Meterset", "EndMeterset", "DS", "1" }, { Tag(0x3008, 0x0080),
+ "Referenced Measured Dose Reference Sequence", "ReferencedMeasuredDoseReferenceSequence", "SQ", "1" }, { Tag(0x3008, 0x0082),
+ "Referenced Measured Dose Reference Number", "ReferencedMeasuredDoseReferenceNumber", "IS", "1" }, { Tag(0x3008, 0x0090),
+ "Referenced Calculated Dose Reference Sequence", "ReferencedCalculatedDoseReferenceSequence", "SQ", "1" }, { Tag(0x3008, 0x0092),
+ "Referenced Calculated Dose Reference Number", "ReferencedCalculatedDoseReferenceNumber", "IS", "1" }, { Tag(0x3008, 0x00a0),
+ "Beam Limiting Device Leaf Pairs Sequence", "BeamLimitingDeviceLeafPairsSequence", "SQ", "1" }, { Tag(0x3008, 0x00b0),
+ "Recorded Wedge Sequence", "RecordedWedgeSequence", "SQ", "1" }, { Tag(0x3008, 0x00c0),
+ "Recorded Compensator Sequence", "RecordedCompensatorSequence", "SQ", "1" }, { Tag(0x3008, 0x00d0),
+ "Recorded Block Sequence", "RecordedBlockSequence", "SQ", "1" }, { Tag(0x3008, 0x00e0),
+ "Treatment Summary Measured Dose Reference Sequence", "TreatmentSummaryMeasuredDoseReferenceSequence", "SQ", "1" }, { Tag(0x3008, 0x00f0),
+ "Recorded Snout Sequence", "RecordedSnoutSequence", "SQ", "1" }, { Tag(0x3008, 0x00f2),
+ "Recorded Range Shifter Sequence", "RecordedRangeShifterSequence", "SQ", "1" }, { Tag(0x3008, 0x00f4),
+ "Recorded Lateral Spreading Device Sequence", "RecordedLateralSpreadingDeviceSequence", "SQ", "1" }, { Tag(0x3008, 0x00f6),
+ "Recorded Range Modulator Sequence", "RecordedRangeModulatorSequence", "SQ", "1" }, { Tag(0x3008, 0x0100),
+ "Recorded Source Sequence", "RecordedSourceSequence", "SQ", "1" }, { Tag(0x3008, 0x0105),
+ "Source Serial Number", "SourceSerialNumber", "LO", "1" }, { Tag(0x3008, 0x0110),
+ "Treatment Session Application Setup Sequence", "TreatmentSessionApplicationSetupSequence", "SQ", "1" }, { Tag(0x3008, 0x0116),
+ "Application Setup Check", "ApplicationSetupCheck", "CS", "1" }, { Tag(0x3008, 0x0120),
+ "Recorded Brachy Accessory Device Sequence", "RecordedBrachyAccessoryDeviceSequence", "SQ", "1" }, { Tag(0x3008, 0x0122),
+ "Referenced Brachy Accessory Device Number", "ReferencedBrachyAccessoryDeviceNumber", "IS", "1" }, { Tag(0x3008, 0x0130),
+ "Recorded Channel Sequence", "RecordedChannelSequence", "SQ", "1" }, { Tag(0x3008, 0x0132),
+ "Specified Channel Total Time", "SpecifiedChannelTotalTime", "DS", "1" }, { Tag(0x3008, 0x0134),
+ "Delivered Channel Total Time", "DeliveredChannelTotalTime", "DS", "1" }, { Tag(0x3008, 0x0136),
+ "Specified Number of Pulses", "SpecifiedNumberOfPulses", "IS", "1" }, { Tag(0x3008, 0x0138),
+ "Delivered Number of Pulses", "DeliveredNumberOfPulses", "IS", "1" }, { Tag(0x3008, 0x013a),
+ "Specified Pulse Repetition Interval", "SpecifiedPulseRepetitionInterval", "DS", "1" }, { Tag(0x3008, 0x013c),
+ "Delivered Pulse Repetition Interval", "DeliveredPulseRepetitionInterval", "DS", "1" }, { Tag(0x3008, 0x0140),
+ "Recorded Source Applicator Sequence", "RecordedSourceApplicatorSequence", "SQ", "1" }, { Tag(0x3008, 0x0142),
+ "Referenced Source Applicator Number", "ReferencedSourceApplicatorNumber", "IS", "1" }, { Tag(0x3008, 0x0150),
+ "Recorded Channel Shield Sequence", "RecordedChannelShieldSequence", "SQ", "1" }, { Tag(0x3008, 0x0152),
+ "Referenced Channel Shield Number", "ReferencedChannelShieldNumber", "IS", "1" }, { Tag(0x3008, 0x0160),
+ "Brachy Control Point Delivered Sequence", "BrachyControlPointDeliveredSequence", "SQ", "1" }, { Tag(0x3008, 0x0162),
+ "Safe Position Exit Date", "SafePositionExitDate", "DA", "1" }, { Tag(0x3008, 0x0164),
+ "Safe Position Exit Time", "SafePositionExitTime", "TM", "1" }, { Tag(0x3008, 0x0166),
+ "Safe Position Return Date", "SafePositionReturnDate", "DA", "1" }, { Tag(0x3008, 0x0168),
+ "Safe Position Return Time", "SafePositionReturnTime", "TM", "1" }, { Tag(0x3008, 0x0171),
+ "Pulse Specific Brachy Control Point Delivered Sequence", "PulseSpecificBrachyControlPointDeliveredSequence", "SQ", "1" }, { Tag(0x3008, 0x0172),
+ "Pulse Number", "PulseNumber", "US", "1" }, { Tag(0x3008, 0x0173),
+ "Brachy Pulse Control Point Delivered Sequence", "BrachyPulseControlPointDeliveredSequence", "SQ", "1" }, { Tag(0x3008, 0x0200),
+ "Current Treatment Status", "CurrentTreatmentStatus", "CS", "1" }, { Tag(0x3008, 0x0202),
+ "Treatment Status Comment", "TreatmentStatusComment", "ST", "1" }, { Tag(0x3008, 0x0220),
+ "Fraction Group Summary Sequence", "FractionGroupSummarySequence", "SQ", "1" }, { Tag(0x3008, 0x0223),
+ "Referenced Fraction Number", "ReferencedFractionNumber", "IS", "1" }, { Tag(0x3008, 0x0224),
+ "Fraction Group Type", "FractionGroupType", "CS", "1" }, { Tag(0x3008, 0x0230),
+ "Beam Stopper Position", "BeamStopperPosition", "CS", "1" }, { Tag(0x3008, 0x0240),
+ "Fraction Status Summary Sequence", "FractionStatusSummarySequence", "SQ", "1" }, { Tag(0x3008, 0x0250),
+ "Treatment Date", "TreatmentDate", "DA", "1" }, { Tag(0x3008, 0x0251),
+ "Treatment Time", "TreatmentTime", "TM", "1" }, { Tag(0x300a, 0x0002),
+ "RT Plan Label", "RTPlanLabel", "SH", "1" }, { Tag(0x300a, 0x0003),
+ "RT Plan Name", "RTPlanName", "LO", "1" }, { Tag(0x300a, 0x0004),
+ "RT Plan Description", "RTPlanDescription", "ST", "1" }, { Tag(0x300a, 0x0006),
+ "RT Plan Date", "RTPlanDate", "DA", "1" }, { Tag(0x300a, 0x0007),
+ "RT Plan Time", "RTPlanTime", "TM", "1" }, { Tag(0x300a, 0x0009),
+ "Treatment Protocols", "TreatmentProtocols", "LO", "1-n" }, { Tag(0x300a, 0x000a),
+ "Plan Intent", "PlanIntent", "CS", "1" }, { Tag(0x300a, 0x000b),
+ "Treatment Sites", "TreatmentSites", "LO", "1-n" }, { Tag(0x300a, 0x000c),
+ "RT Plan Geometry", "RTPlanGeometry", "CS", "1" }, { Tag(0x300a, 0x000e),
+ "Prescription Description", "PrescriptionDescription", "ST", "1" }, { Tag(0x300a, 0x0010),
+ "Dose Reference Sequence", "DoseReferenceSequence", "SQ", "1" }, { Tag(0x300a, 0x0012),
+ "Dose Reference Number", "DoseReferenceNumber", "IS", "1" }, { Tag(0x300a, 0x0013),
+ "Dose Reference UID", "DoseReferenceUID", "UI", "1" }, { Tag(0x300a, 0x0014),
+ "Dose Reference Structure Type", "DoseReferenceStructureType", "CS", "1" }, { Tag(0x300a, 0x0015),
+ "Nominal Beam Energy Unit", "NominalBeamEnergyUnit", "CS", "1" }, { Tag(0x300a, 0x0016),
+ "Dose Reference Description", "DoseReferenceDescription", "LO", "1" }, { Tag(0x300a, 0x0018),
+ "Dose Reference Point Coordinates", "DoseReferencePointCoordinates", "DS", "3" }, { Tag(0x300a, 0x001a),
+ "Nominal Prior Dose", "NominalPriorDose", "DS", "1" }, { Tag(0x300a, 0x0020),
+ "Dose Reference Type", "DoseReferenceType", "CS", "1" }, { Tag(0x300a, 0x0021),
+ "Constraint Weight", "ConstraintWeight", "DS", "1" }, { Tag(0x300a, 0x0022),
+ "Delivery Warning Dose", "DeliveryWarningDose", "DS", "1" }, { Tag(0x300a, 0x0023),
+ "Delivery Maximum Dose", "DeliveryMaximumDose", "DS", "1" }, { Tag(0x300a, 0x0025),
+ "Target Minimum Dose", "TargetMinimumDose", "DS", "1" }, { Tag(0x300a, 0x0026),
+ "Target Prescription Dose", "TargetPrescriptionDose", "DS", "1" }, { Tag(0x300a, 0x0027),
+ "Target Maximum Dose", "TargetMaximumDose", "DS", "1" }, { Tag(0x300a, 0x0028),
+ "Target Underdose Volume Fraction", "TargetUnderdoseVolumeFraction", "DS", "1" }, { Tag(0x300a, 0x002a),
+ "Organ at Risk Full-volume Dose", "OrganAtRiskFullVolumeDose", "DS", "1" }, { Tag(0x300a, 0x002b),
+ "Organ at Risk Limit Dose", "OrganAtRiskLimitDose", "DS", "1" }, { Tag(0x300a, 0x002c),
+ "Organ at Risk Maximum Dose", "OrganAtRiskMaximumDose", "DS", "1" }, { Tag(0x300a, 0x002d),
+ "Organ at Risk Overdose Volume Fraction", "OrganAtRiskOverdoseVolumeFraction", "DS", "1" }, { Tag(0x300a, 0x0040),
+ "Tolerance Table Sequence", "ToleranceTableSequence", "SQ", "1" }, { Tag(0x300a, 0x0042),
+ "Tolerance Table Number", "ToleranceTableNumber", "IS", "1" }, { Tag(0x300a, 0x0043),
+ "Tolerance Table Label", "ToleranceTableLabel", "SH", "1" }, { Tag(0x300a, 0x0044),
+ "Gantry Angle Tolerance", "GantryAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x0046),
+ "Beam Limiting Device Angle Tolerance", "BeamLimitingDeviceAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x0048),
+ "Beam Limiting Device Tolerance Sequence", "BeamLimitingDeviceToleranceSequence", "SQ", "1" }, { Tag(0x300a, 0x004a),
+ "Beam Limiting Device Position Tolerance", "BeamLimitingDevicePositionTolerance", "DS", "1" }, { Tag(0x300a, 0x004b),
+ "Snout Position Tolerance", "SnoutPositionTolerance", "FL", "1" }, { Tag(0x300a, 0x004c),
+ "Patient Support Angle Tolerance", "PatientSupportAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x004e),
+ "Table Top Eccentric Angle Tolerance", "TableTopEccentricAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x004f),
+ "Table Top Pitch Angle Tolerance", "TableTopPitchAngleTolerance", "FL", "1" }, { Tag(0x300a, 0x0050),
+ "Table Top Roll Angle Tolerance", "TableTopRollAngleTolerance", "FL", "1" }, { Tag(0x300a, 0x0051),
+ "Table Top Vertical Position Tolerance", "TableTopVerticalPositionTolerance", "DS", "1" }, { Tag(0x300a, 0x0052),
+ "Table Top Longitudinal Position Tolerance", "TableTopLongitudinalPositionTolerance", "DS", "1" }, { Tag(0x300a, 0x0053),
+ "Table Top Lateral Position Tolerance", "TableTopLateralPositionTolerance", "DS", "1" }, { Tag(0x300a, 0x0055),
+ "RT Plan Relationship", "RTPlanRelationship", "CS", "1" }, { Tag(0x300a, 0x0070),
+ "Fraction Group Sequence", "FractionGroupSequence", "SQ", "1" }, { Tag(0x300a, 0x0071),
+ "Fraction Group Number", "FractionGroupNumber", "IS", "1" }, { Tag(0x300a, 0x0072),
+ "Fraction Group Description", "FractionGroupDescription", "LO", "1" }, { Tag(0x300a, 0x0078),
+ "Number of Fractions Planned", "NumberOfFractionsPlanned", "IS", "1" }, { Tag(0x300a, 0x0079),
+ "Number of Fraction Pattern Digits Per Day", "NumberOfFractionPatternDigitsPerDay", "IS", "1" }, { Tag(0x300a, 0x007a),
+ "Repeat Fraction Cycle Length", "RepeatFractionCycleLength", "IS", "1" }, { Tag(0x300a, 0x007b),
+ "Fraction Pattern", "FractionPattern", "LT", "1" }, { Tag(0x300a, 0x0080),
+ "Number of Beams", "NumberOfBeams", "IS", "1" }, { Tag(0x300a, 0x0082),
+ "Beam Dose Specification Point", "BeamDoseSpecificationPoint", "DS", "3" }, { Tag(0x300a, 0x0084),
+ "Beam Dose", "BeamDose", "DS", "1" }, { Tag(0x300a, 0x0086),
+ "Beam Meterset", "BeamMeterset", "DS", "1" }, { Tag(0x300a, 0x0088),
+ "Beam Dose Point Depth", "BeamDosePointDepth", "FL", "1" }, { Tag(0x300a, 0x0089),
+ "Beam Dose Point Equivalent Depth", "BeamDosePointEquivalentDepth", "FL", "1" }, { Tag(0x300a, 0x008a),
+ "Beam Dose Point SSD", "BeamDosePointSSD", "FL", "1" }, { Tag(0x300a, 0x008b),
+ "Beam Dose Meaning", "BeamDoseMeaning", "CS", "1" }, { Tag(0x300a, 0x008c),
+ "Beam Dose Verification Control Point Sequence", "BeamDoseVerificationControlPointSequence", "SQ", "1" }, { Tag(0x300a, 0x008d),
+ "Average Beam Dose Point Depth", "AverageBeamDosePointDepth", "FL", "1" }, { Tag(0x300a, 0x008e),
+ "Average Beam Dose Point Equivalent Depth", "AverageBeamDosePointEquivalentDepth", "FL", "1" }, { Tag(0x300a, 0x008f),
+ "Average Beam Dose Point SSD", "AverageBeamDosePointSSD", "FL", "1" }, { Tag(0x300a, 0x0090),
+ "Beam Dose Type", "BeamDoseType", "CS", "1" }, { Tag(0x300a, 0x0091),
+ "Alternate Beam Dose", "AlternateBeamDose", "DS", "1" }, { Tag(0x300a, 0x0092),
+ "Alternate Beam Dose Type", "AlternateBeamDoseType", "CS", "1" }, { Tag(0x300a, 0x00a0),
+ "Number of Brachy Application Setups", "NumberOfBrachyApplicationSetups", "IS", "1" }, { Tag(0x300a, 0x00a2),
+ "Brachy Application Setup Dose Specification Point", "BrachyApplicationSetupDoseSpecificationPoint", "DS", "3" }, { Tag(0x300a, 0x00a4),
+ "Brachy Application Setup Dose", "BrachyApplicationSetupDose", "DS", "1" }, { Tag(0x300a, 0x00b0),
+ "Beam Sequence", "BeamSequence", "SQ", "1" }, { Tag(0x300a, 0x00b2),
+ "Treatment Machine Name", "TreatmentMachineName", "SH", "1" }, { Tag(0x300a, 0x00b3),
+ "Primary Dosimeter Unit", "PrimaryDosimeterUnit", "CS", "1" }, { Tag(0x300a, 0x00b4),
+ "Source-Axis Distance", "SourceAxisDistance", "DS", "1" }, { Tag(0x300a, 0x00b6),
+ "Beam Limiting Device Sequence", "BeamLimitingDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x00b8),
+ "RT Beam Limiting Device Type", "RTBeamLimitingDeviceType", "CS", "1" }, { Tag(0x300a, 0x00ba),
+ "Source to Beam Limiting Device Distance", "SourceToBeamLimitingDeviceDistance", "DS", "1" }, { Tag(0x300a, 0x00bb),
+ "Isocenter to Beam Limiting Device Distance", "IsocenterToBeamLimitingDeviceDistance", "FL", "1" }, { Tag(0x300a, 0x00bc),
+ "Number of Leaf/Jaw Pairs", "NumberOfLeafJawPairs", "IS", "1" }, { Tag(0x300a, 0x00be),
+ "Leaf Position Boundaries", "LeafPositionBoundaries", "DS", "3-n" }, { Tag(0x300a, 0x00c0),
+ "Beam Number", "BeamNumber", "IS", "1" }, { Tag(0x300a, 0x00c2),
+ "Beam Name", "BeamName", "LO", "1" }, { Tag(0x300a, 0x00c3),
+ "Beam Description", "BeamDescription", "ST", "1" }, { Tag(0x300a, 0x00c4),
+ "Beam Type", "BeamType", "CS", "1" }, { Tag(0x300a, 0x00c5),
+ "Beam Delivery Duration Limit", "BeamDeliveryDurationLimit", "FD", "1" }, { Tag(0x300a, 0x00c6),
+ "Radiation Type", "RadiationType", "CS", "1" }, { Tag(0x300a, 0x00c7),
+ "High-Dose Technique Type", "HighDoseTechniqueType", "CS", "1" }, { Tag(0x300a, 0x00c8),
+ "Reference Image Number", "ReferenceImageNumber", "IS", "1" }, { Tag(0x300a, 0x00ca),
+ "Planned Verification Image Sequence", "PlannedVerificationImageSequence", "SQ", "1" }, { Tag(0x300a, 0x00cc),
+ "Imaging Device-Specific Acquisition Parameters", "ImagingDeviceSpecificAcquisitionParameters", "LO", "1-n" }, { Tag(0x300a, 0x00ce),
+ "Treatment Delivery Type", "TreatmentDeliveryType", "CS", "1" }, { Tag(0x300a, 0x00d0),
+ "Number of Wedges", "NumberOfWedges", "IS", "1" }, { Tag(0x300a, 0x00d1),
+ "Wedge Sequence", "WedgeSequence", "SQ", "1" }, { Tag(0x300a, 0x00d2),
+ "Wedge Number", "WedgeNumber", "IS", "1" }, { Tag(0x300a, 0x00d3),
+ "Wedge Type", "WedgeType", "CS", "1" }, { Tag(0x300a, 0x00d4),
+ "Wedge ID", "WedgeID", "SH", "1" }, { Tag(0x300a, 0x00d5),
+ "Wedge Angle", "WedgeAngle", "IS", "1" }, { Tag(0x300a, 0x00d6),
+ "Wedge Factor", "WedgeFactor", "DS", "1" }, { Tag(0x300a, 0x00d7),
+ "Total Wedge Tray Water-Equivalent Thickness", "TotalWedgeTrayWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x00d8),
+ "Wedge Orientation", "WedgeOrientation", "DS", "1" }, { Tag(0x300a, 0x00d9),
+ "Isocenter to Wedge Tray Distance", "IsocenterToWedgeTrayDistance", "FL", "1" }, { Tag(0x300a, 0x00da),
+ "Source to Wedge Tray Distance", "SourceToWedgeTrayDistance", "DS", "1" }, { Tag(0x300a, 0x00db),
+ "Wedge Thin Edge Position", "WedgeThinEdgePosition", "FL", "1" }, { Tag(0x300a, 0x00dc),
+ "Bolus ID", "BolusID", "SH", "1" }, { Tag(0x300a, 0x00dd),
+ "Bolus Description", "BolusDescription", "ST", "1" }, { Tag(0x300a, 0x00de),
+ "Effective Wedge Angle", "EffectiveWedgeAngle", "DS", "1" }, { Tag(0x300a, 0x00e0),
+ "Number of Compensators", "NumberOfCompensators", "IS", "1" }, { Tag(0x300a, 0x00e1),
+ "Material ID", "MaterialID", "SH", "1" }, { Tag(0x300a, 0x00e2),
+ "Total Compensator Tray Factor", "TotalCompensatorTrayFactor", "DS", "1" }, { Tag(0x300a, 0x00e3),
+ "Compensator Sequence", "CompensatorSequence", "SQ", "1" }, { Tag(0x300a, 0x00e4),
+ "Compensator Number", "CompensatorNumber", "IS", "1" }, { Tag(0x300a, 0x00e5),
+ "Compensator ID", "CompensatorID", "SH", "1" }, { Tag(0x300a, 0x00e6),
+ "Source to Compensator Tray Distance", "SourceToCompensatorTrayDistance", "DS", "1" }, { Tag(0x300a, 0x00e7),
+ "Compensator Rows", "CompensatorRows", "IS", "1" }, { Tag(0x300a, 0x00e8),
+ "Compensator Columns", "CompensatorColumns", "IS", "1" }, { Tag(0x300a, 0x00e9),
+ "Compensator Pixel Spacing", "CompensatorPixelSpacing", "DS", "2" }, { Tag(0x300a, 0x00ea),
+ "Compensator Position", "CompensatorPosition", "DS", "2" }, { Tag(0x300a, 0x00eb),
+ "Compensator Transmission Data", "CompensatorTransmissionData", "DS", "1-n" }, { Tag(0x300a, 0x00ec),
+ "Compensator Thickness Data", "CompensatorThicknessData", "DS", "1-n" }, { Tag(0x300a, 0x00ed),
+ "Number of Boli", "NumberOfBoli", "IS", "1" }, { Tag(0x300a, 0x00ee),
+ "Compensator Type", "CompensatorType", "CS", "1" }, { Tag(0x300a, 0x00ef),
+ "Compensator Tray ID", "CompensatorTrayID", "SH", "1" }, { Tag(0x300a, 0x00f0),
+ "Number of Blocks", "NumberOfBlocks", "IS", "1" }, { Tag(0x300a, 0x00f2),
+ "Total Block Tray Factor", "TotalBlockTrayFactor", "DS", "1" }, { Tag(0x300a, 0x00f3),
+ "Total Block Tray Water-Equivalent Thickness", "TotalBlockTrayWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x00f4),
+ "Block Sequence", "BlockSequence", "SQ", "1" }, { Tag(0x300a, 0x00f5),
+ "Block Tray ID", "BlockTrayID", "SH", "1" }, { Tag(0x300a, 0x00f6),
+ "Source to Block Tray Distance", "SourceToBlockTrayDistance", "DS", "1" }, { Tag(0x300a, 0x00f7),
+ "Isocenter to Block Tray Distance", "IsocenterToBlockTrayDistance", "FL", "1" }, { Tag(0x300a, 0x00f8),
+ "Block Type", "BlockType", "CS", "1" }, { Tag(0x300a, 0x00f9),
+ "Accessory Code", "AccessoryCode", "LO", "1" }, { Tag(0x300a, 0x00fa),
+ "Block Divergence", "BlockDivergence", "CS", "1" }, { Tag(0x300a, 0x00fb),
+ "Block Mounting Position", "BlockMountingPosition", "CS", "1" }, { Tag(0x300a, 0x00fc),
+ "Block Number", "BlockNumber", "IS", "1" }, { Tag(0x300a, 0x00fe),
+ "Block Name", "BlockName", "LO", "1" }, { Tag(0x300a, 0x0100),
+ "Block Thickness", "BlockThickness", "DS", "1" }, { Tag(0x300a, 0x0102),
+ "Block Transmission", "BlockTransmission", "DS", "1" }, { Tag(0x300a, 0x0104),
+ "Block Number of Points", "BlockNumberOfPoints", "IS", "1" }, { Tag(0x300a, 0x0106),
+ "Block Data", "BlockData", "DS", "2-2n" }, { Tag(0x300a, 0x0107),
+ "Applicator Sequence", "ApplicatorSequence", "SQ", "1" }, { Tag(0x300a, 0x0108),
+ "Applicator ID", "ApplicatorID", "SH", "1" }, { Tag(0x300a, 0x0109),
+ "Applicator Type", "ApplicatorType", "CS", "1" }, { Tag(0x300a, 0x010a),
+ "Applicator Description", "ApplicatorDescription", "LO", "1" }, { Tag(0x300a, 0x010c),
+ "Cumulative Dose Reference Coefficient", "CumulativeDoseReferenceCoefficient", "DS", "1" }, { Tag(0x300a, 0x010e),
+ "Final Cumulative Meterset Weight", "FinalCumulativeMetersetWeight", "DS", "1" }, { Tag(0x300a, 0x0110),
+ "Number of Control Points", "NumberOfControlPoints", "IS", "1" }, { Tag(0x300a, 0x0111),
+ "Control Point Sequence", "ControlPointSequence", "SQ", "1" }, { Tag(0x300a, 0x0112),
+ "Control Point Index", "ControlPointIndex", "IS", "1" }, { Tag(0x300a, 0x0114),
+ "Nominal Beam Energy", "NominalBeamEnergy", "DS", "1" }, { Tag(0x300a, 0x0115),
+ "Dose Rate Set", "DoseRateSet", "DS", "1" }, { Tag(0x300a, 0x0116),
+ "Wedge Position Sequence", "WedgePositionSequence", "SQ", "1" }, { Tag(0x300a, 0x0118),
+ "Wedge Position", "WedgePosition", "CS", "1" }, { Tag(0x300a, 0x011a),
+ "Beam Limiting Device Position Sequence", "BeamLimitingDevicePositionSequence", "SQ", "1" }, { Tag(0x300a, 0x011c),
+ "Leaf/Jaw Positions", "LeafJawPositions", "DS", "2-2n" }, { Tag(0x300a, 0x011e),
+ "Gantry Angle", "GantryAngle", "DS", "1" }, { Tag(0x300a, 0x011f),
+ "Gantry Rotation Direction", "GantryRotationDirection", "CS", "1" }, { Tag(0x300a, 0x0120),
+ "Beam Limiting Device Angle", "BeamLimitingDeviceAngle", "DS", "1" }, { Tag(0x300a, 0x0121),
+ "Beam Limiting Device Rotation Direction", "BeamLimitingDeviceRotationDirection", "CS", "1" }, { Tag(0x300a, 0x0122),
+ "Patient Support Angle", "PatientSupportAngle", "DS", "1" }, { Tag(0x300a, 0x0123),
+ "Patient Support Rotation Direction", "PatientSupportRotationDirection", "CS", "1" }, { Tag(0x300a, 0x0124),
+ "Table Top Eccentric Axis Distance", "TableTopEccentricAxisDistance", "DS", "1" }, { Tag(0x300a, 0x0125),
+ "Table Top Eccentric Angle", "TableTopEccentricAngle", "DS", "1" }, { Tag(0x300a, 0x0126),
+ "Table Top Eccentric Rotation Direction", "TableTopEccentricRotationDirection", "CS", "1" }, { Tag(0x300a, 0x0128),
+ "Table Top Vertical Position", "TableTopVerticalPosition", "DS", "1" }, { Tag(0x300a, 0x0129),
+ "Table Top Longitudinal Position", "TableTopLongitudinalPosition", "DS", "1" }, { Tag(0x300a, 0x012a),
+ "Table Top Lateral Position", "TableTopLateralPosition", "DS", "1" }, { Tag(0x300a, 0x012c),
+ "Isocenter Position", "IsocenterPosition", "DS", "3" }, { Tag(0x300a, 0x012e),
+ "Surface Entry Point", "SurfaceEntryPoint", "DS", "3" }, { Tag(0x300a, 0x0130),
+ "Source to Surface Distance", "SourceToSurfaceDistance", "DS", "1" }, { Tag(0x300a, 0x0131),
+ "Average Beam Dose Point Source to External Contour Distance", "AverageBeamDosePointSourceToExternalContourDistance", "FL", "1" }, { Tag(0x300a, 0x0132),
+ "Source to External Contour Distance", "SourceToExternalContourDistance", "FL", "1" }, { Tag(0x300a, 0x0133),
+ "External Contour Entry Point", "ExternalContourEntryPoint", "FL", "3" }, { Tag(0x300a, 0x0134),
+ "Cumulative Meterset Weight", "CumulativeMetersetWeight", "DS", "1" }, { Tag(0x300a, 0x0140),
+ "Table Top Pitch Angle", "TableTopPitchAngle", "FL", "1" }, { Tag(0x300a, 0x0142),
+ "Table Top Pitch Rotation Direction", "TableTopPitchRotationDirection", "CS", "1" }, { Tag(0x300a, 0x0144),
+ "Table Top Roll Angle", "TableTopRollAngle", "FL", "1" }, { Tag(0x300a, 0x0146),
+ "Table Top Roll Rotation Direction", "TableTopRollRotationDirection", "CS", "1" }, { Tag(0x300a, 0x0148),
+ "Head Fixation Angle", "HeadFixationAngle", "FL", "1" }, { Tag(0x300a, 0x014a),
+ "Gantry Pitch Angle", "GantryPitchAngle", "FL", "1" }, { Tag(0x300a, 0x014c),
+ "Gantry Pitch Rotation Direction", "GantryPitchRotationDirection", "CS", "1" }, { Tag(0x300a, 0x014e),
+ "Gantry Pitch Angle Tolerance", "GantryPitchAngleTolerance", "FL", "1" }, { Tag(0x300a, 0x0150),
+ "Fixation Eye", "FixationEye", "CS", "1" }, { Tag(0x300a, 0x0151),
+ "Chair Head Frame Position", "ChairHeadFramePosition", "DS", "1" }, { Tag(0x300a, 0x0152),
+ "Head Fixation Angle Tolerance", "HeadFixationAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x0153),
+ "Chair Head Frame Position Tolerance", "ChairHeadFramePositionTolerance", "DS", "1" }, { Tag(0x300a, 0x0154),
+ "Fixation Light Azimuthal Angle Tolerance", "FixationLightAzimuthalAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x0155),
+ "Fixation Light Polar Angle Tolerance", "FixationLightPolarAngleTolerance", "DS", "1" }, { Tag(0x300a, 0x0180),
+ "Patient Setup Sequence", "PatientSetupSequence", "SQ", "1" }, { Tag(0x300a, 0x0182),
+ "Patient Setup Number", "PatientSetupNumber", "IS", "1" }, { Tag(0x300a, 0x0183),
+ "Patient Setup Label", "PatientSetupLabel", "LO", "1" }, { Tag(0x300a, 0x0184),
+ "Patient Additional Position", "PatientAdditionalPosition", "LO", "1" }, { Tag(0x300a, 0x0190),
+ "Fixation Device Sequence", "FixationDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x0192),
+ "Fixation Device Type", "FixationDeviceType", "CS", "1" }, { Tag(0x300a, 0x0194),
+ "Fixation Device Label", "FixationDeviceLabel", "SH", "1" }, { Tag(0x300a, 0x0196),
+ "Fixation Device Description", "FixationDeviceDescription", "ST", "1" }, { Tag(0x300a, 0x0198),
+ "Fixation Device Position", "FixationDevicePosition", "SH", "1" }, { Tag(0x300a, 0x0199),
+ "Fixation Device Pitch Angle", "FixationDevicePitchAngle", "FL", "1" }, { Tag(0x300a, 0x019a),
+ "Fixation Device Roll Angle", "FixationDeviceRollAngle", "FL", "1" }, { Tag(0x300a, 0x01a0),
+ "Shielding Device Sequence", "ShieldingDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x01a2),
+ "Shielding Device Type", "ShieldingDeviceType", "CS", "1" }, { Tag(0x300a, 0x01a4),
+ "Shielding Device Label", "ShieldingDeviceLabel", "SH", "1" }, { Tag(0x300a, 0x01a6),
+ "Shielding Device Description", "ShieldingDeviceDescription", "ST", "1" }, { Tag(0x300a, 0x01a8),
+ "Shielding Device Position", "ShieldingDevicePosition", "SH", "1" }, { Tag(0x300a, 0x01b0),
+ "Setup Technique", "SetupTechnique", "CS", "1" }, { Tag(0x300a, 0x01b2),
+ "Setup Technique Description", "SetupTechniqueDescription", "ST", "1" }, { Tag(0x300a, 0x01b4),
+ "Setup Device Sequence", "SetupDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x01b6),
+ "Setup Device Type", "SetupDeviceType", "CS", "1" }, { Tag(0x300a, 0x01b8),
+ "Setup Device Label", "SetupDeviceLabel", "SH", "1" }, { Tag(0x300a, 0x01ba),
+ "Setup Device Description", "SetupDeviceDescription", "ST", "1" }, { Tag(0x300a, 0x01bc),
+ "Setup Device Parameter", "SetupDeviceParameter", "DS", "1" }, { Tag(0x300a, 0x01d0),
+ "Setup Reference Description", "SetupReferenceDescription", "ST", "1" }, { Tag(0x300a, 0x01d2),
+ "Table Top Vertical Setup Displacement", "TableTopVerticalSetupDisplacement", "DS", "1" }, { Tag(0x300a, 0x01d4),
+ "Table Top Longitudinal Setup Displacement", "TableTopLongitudinalSetupDisplacement", "DS", "1" }, { Tag(0x300a, 0x01d6),
+ "Table Top Lateral Setup Displacement", "TableTopLateralSetupDisplacement", "DS", "1" }, { Tag(0x300a, 0x0200),
+ "Brachy Treatment Technique", "BrachyTreatmentTechnique", "CS", "1" }, { Tag(0x300a, 0x0202),
+ "Brachy Treatment Type", "BrachyTreatmentType", "CS", "1" }, { Tag(0x300a, 0x0206),
+ "Treatment Machine Sequence", "TreatmentMachineSequence", "SQ", "1" }, { Tag(0x300a, 0x0210),
+ "Source Sequence", "SourceSequence", "SQ", "1" }, { Tag(0x300a, 0x0212),
+ "Source Number", "SourceNumber", "IS", "1" }, { Tag(0x300a, 0x0214),
+ "Source Type", "SourceType", "CS", "1" }, { Tag(0x300a, 0x0216),
+ "Source Manufacturer", "SourceManufacturer", "LO", "1" }, { Tag(0x300a, 0x0218),
+ "Active Source Diameter", "ActiveSourceDiameter", "DS", "1" }, { Tag(0x300a, 0x021a),
+ "Active Source Length", "ActiveSourceLength", "DS", "1" }, { Tag(0x300a, 0x021b),
+ "Source Model ID", "SourceModelID", "SH", "1" }, { Tag(0x300a, 0x021c),
+ "Source Description", "SourceDescription", "LO", "1" }, { Tag(0x300a, 0x0222),
+ "Source Encapsulation Nominal Thickness", "SourceEncapsulationNominalThickness", "DS", "1" }, { Tag(0x300a, 0x0224),
+ "Source Encapsulation Nominal Transmission", "SourceEncapsulationNominalTransmission", "DS", "1" }, { Tag(0x300a, 0x0226),
+ "Source Isotope Name", "SourceIsotopeName", "LO", "1" }, { Tag(0x300a, 0x0228),
+ "Source Isotope Half Life", "SourceIsotopeHalfLife", "DS", "1" }, { Tag(0x300a, 0x0229),
+ "Source Strength Units", "SourceStrengthUnits", "CS", "1" }, { Tag(0x300a, 0x022a),
+ "Reference Air Kerma Rate", "ReferenceAirKermaRate", "DS", "1" }, { Tag(0x300a, 0x022b),
+ "Source Strength", "SourceStrength", "DS", "1" }, { Tag(0x300a, 0x022c),
+ "Source Strength Reference Date", "SourceStrengthReferenceDate", "DA", "1" }, { Tag(0x300a, 0x022e),
+ "Source Strength Reference Time", "SourceStrengthReferenceTime", "TM", "1" }, { Tag(0x300a, 0x0230),
+ "Application Setup Sequence", "ApplicationSetupSequence", "SQ", "1" }, { Tag(0x300a, 0x0232),
+ "Application Setup Type", "ApplicationSetupType", "CS", "1" }, { Tag(0x300a, 0x0234),
+ "Application Setup Number", "ApplicationSetupNumber", "IS", "1" }, { Tag(0x300a, 0x0236),
+ "Application Setup Name", "ApplicationSetupName", "LO", "1" }, { Tag(0x300a, 0x0238),
+ "Application Setup Manufacturer", "ApplicationSetupManufacturer", "LO", "1" }, { Tag(0x300a, 0x0240),
+ "Template Number", "TemplateNumber", "IS", "1" }, { Tag(0x300a, 0x0242),
+ "Template Type", "TemplateType", "SH", "1" }, { Tag(0x300a, 0x0244),
+ "Template Name", "TemplateName", "LO", "1" }, { Tag(0x300a, 0x0250),
+ "Total Reference Air Kerma", "TotalReferenceAirKerma", "DS", "1" }, { Tag(0x300a, 0x0260),
+ "Brachy Accessory Device Sequence", "BrachyAccessoryDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x0262),
+ "Brachy Accessory Device Number", "BrachyAccessoryDeviceNumber", "IS", "1" }, { Tag(0x300a, 0x0263),
+ "Brachy Accessory Device ID", "BrachyAccessoryDeviceID", "SH", "1" }, { Tag(0x300a, 0x0264),
+ "Brachy Accessory Device Type", "BrachyAccessoryDeviceType", "CS", "1" }, { Tag(0x300a, 0x0266),
+ "Brachy Accessory Device Name", "BrachyAccessoryDeviceName", "LO", "1" }, { Tag(0x300a, 0x026a),
+ "Brachy Accessory Device Nominal Thickness", "BrachyAccessoryDeviceNominalThickness", "DS", "1" }, { Tag(0x300a, 0x026c),
+ "Brachy Accessory Device Nominal Transmission", "BrachyAccessoryDeviceNominalTransmission", "DS", "1" }, { Tag(0x300a, 0x0280),
+ "Channel Sequence", "ChannelSequence", "SQ", "1" }, { Tag(0x300a, 0x0282),
+ "Channel Number", "ChannelNumber", "IS", "1" }, { Tag(0x300a, 0x0284),
+ "Channel Length", "ChannelLength", "DS", "1" }, { Tag(0x300a, 0x0286),
+ "Channel Total Time", "ChannelTotalTime", "DS", "1" }, { Tag(0x300a, 0x0288),
+ "Source Movement Type", "SourceMovementType", "CS", "1" }, { Tag(0x300a, 0x028a),
+ "Number of Pulses", "NumberOfPulses", "IS", "1" }, { Tag(0x300a, 0x028c),
+ "Pulse Repetition Interval", "PulseRepetitionInterval", "DS", "1" }, { Tag(0x300a, 0x0290),
+ "Source Applicator Number", "SourceApplicatorNumber", "IS", "1" }, { Tag(0x300a, 0x0291),
+ "Source Applicator ID", "SourceApplicatorID", "SH", "1" }, { Tag(0x300a, 0x0292),
+ "Source Applicator Type", "SourceApplicatorType", "CS", "1" }, { Tag(0x300a, 0x0294),
+ "Source Applicator Name", "SourceApplicatorName", "LO", "1" }, { Tag(0x300a, 0x0296),
+ "Source Applicator Length", "SourceApplicatorLength", "DS", "1" }, { Tag(0x300a, 0x0298),
+ "Source Applicator Manufacturer", "SourceApplicatorManufacturer", "LO", "1" }, { Tag(0x300a, 0x029c),
+ "Source Applicator Wall Nominal Thickness", "SourceApplicatorWallNominalThickness", "DS", "1" }, { Tag(0x300a, 0x029e),
+ "Source Applicator Wall Nominal Transmission", "SourceApplicatorWallNominalTransmission", "DS", "1" }, { Tag(0x300a, 0x02a0),
+ "Source Applicator Step Size", "SourceApplicatorStepSize", "DS", "1" }, { Tag(0x300a, 0x02a2),
+ "Transfer Tube Number", "TransferTubeNumber", "IS", "1" }, { Tag(0x300a, 0x02a4),
+ "Transfer Tube Length", "TransferTubeLength", "DS", "1" }, { Tag(0x300a, 0x02b0),
+ "Channel Shield Sequence", "ChannelShieldSequence", "SQ", "1" }, { Tag(0x300a, 0x02b2),
+ "Channel Shield Number", "ChannelShieldNumber", "IS", "1" }, { Tag(0x300a, 0x02b3),
+ "Channel Shield ID", "ChannelShieldID", "SH", "1" }, { Tag(0x300a, 0x02b4),
+ "Channel Shield Name", "ChannelShieldName", "LO", "1" }, { Tag(0x300a, 0x02b8),
+ "Channel Shield Nominal Thickness", "ChannelShieldNominalThickness", "DS", "1" }, { Tag(0x300a, 0x02ba),
+ "Channel Shield Nominal Transmission", "ChannelShieldNominalTransmission", "DS", "1" }, { Tag(0x300a, 0x02c8),
+ "Final Cumulative Time Weight", "FinalCumulativeTimeWeight", "DS", "1" }, { Tag(0x300a, 0x02d0),
+ "Brachy Control Point Sequence", "BrachyControlPointSequence", "SQ", "1" }, { Tag(0x300a, 0x02d2),
+ "Control Point Relative Position", "ControlPointRelativePosition", "DS", "1" }, { Tag(0x300a, 0x02d4),
+ "Control Point 3D Position", "ControlPoint3DPosition", "DS", "3" }, { Tag(0x300a, 0x02d6),
+ "Cumulative Time Weight", "CumulativeTimeWeight", "DS", "1" }, { Tag(0x300a, 0x02e0),
+ "Compensator Divergence", "CompensatorDivergence", "CS", "1" }, { Tag(0x300a, 0x02e1),
+ "Compensator Mounting Position", "CompensatorMountingPosition", "CS", "1" }, { Tag(0x300a, 0x02e2),
+ "Source to Compensator Distance", "SourceToCompensatorDistance", "DS", "1-n" }, { Tag(0x300a, 0x02e3),
+ "Total Compensator Tray Water-Equivalent Thickness", "TotalCompensatorTrayWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x02e4),
+ "Isocenter to Compensator Tray Distance", "IsocenterToCompensatorTrayDistance", "FL", "1" }, { Tag(0x300a, 0x02e5),
+ "Compensator Column Offset", "CompensatorColumnOffset", "FL", "1" }, { Tag(0x300a, 0x02e6),
+ "Isocenter to Compensator Distances", "IsocenterToCompensatorDistances", "FL", "1-n" }, { Tag(0x300a, 0x02e7),
+ "Compensator Relative Stopping Power Ratio", "CompensatorRelativeStoppingPowerRatio", "FL", "1" }, { Tag(0x300a, 0x02e8),
+ "Compensator Milling Tool Diameter", "CompensatorMillingToolDiameter", "FL", "1" }, { Tag(0x300a, 0x02ea),
+ "Ion Range Compensator Sequence", "IonRangeCompensatorSequence", "SQ", "1" }, { Tag(0x300a, 0x02eb),
+ "Compensator Description", "CompensatorDescription", "LT", "1" }, { Tag(0x300a, 0x0302),
+ "Radiation Mass Number", "RadiationMassNumber", "IS", "1" }, { Tag(0x300a, 0x0304),
+ "Radiation Atomic Number", "RadiationAtomicNumber", "IS", "1" }, { Tag(0x300a, 0x0306),
+ "Radiation Charge State", "RadiationChargeState", "SS", "1" }, { Tag(0x300a, 0x0308),
+ "Scan Mode", "ScanMode", "CS", "1" }, { Tag(0x300a, 0x0309),
+ "Modulated Scan Mode Type", "ModulatedScanModeType", "CS", "1" }, { Tag(0x300a, 0x030a),
+ "Virtual Source-Axis Distances", "VirtualSourceAxisDistances", "FL", "2" }, { Tag(0x300a, 0x030c),
+ "Snout Sequence", "SnoutSequence", "SQ", "1" }, { Tag(0x300a, 0x030d),
+ "Snout Position", "SnoutPosition", "FL", "1" }, { Tag(0x300a, 0x030f),
+ "Snout ID", "SnoutID", "SH", "1" }, { Tag(0x300a, 0x0312),
+ "Number of Range Shifters", "NumberOfRangeShifters", "IS", "1" }, { Tag(0x300a, 0x0314),
+ "Range Shifter Sequence", "RangeShifterSequence", "SQ", "1" }, { Tag(0x300a, 0x0316),
+ "Range Shifter Number", "RangeShifterNumber", "IS", "1" }, { Tag(0x300a, 0x0318),
+ "Range Shifter ID", "RangeShifterID", "SH", "1" }, { Tag(0x300a, 0x0320),
+ "Range Shifter Type", "RangeShifterType", "CS", "1" }, { Tag(0x300a, 0x0322),
+ "Range Shifter Description", "RangeShifterDescription", "LO", "1" }, { Tag(0x300a, 0x0330),
+ "Number of Lateral Spreading Devices", "NumberOfLateralSpreadingDevices", "IS", "1" }, { Tag(0x300a, 0x0332),
+ "Lateral Spreading Device Sequence", "LateralSpreadingDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x0334),
+ "Lateral Spreading Device Number", "LateralSpreadingDeviceNumber", "IS", "1" }, { Tag(0x300a, 0x0336),
+ "Lateral Spreading Device ID", "LateralSpreadingDeviceID", "SH", "1" }, { Tag(0x300a, 0x0338),
+ "Lateral Spreading Device Type", "LateralSpreadingDeviceType", "CS", "1" }, { Tag(0x300a, 0x033a),
+ "Lateral Spreading Device Description", "LateralSpreadingDeviceDescription", "LO", "1" }, { Tag(0x300a, 0x033c),
+ "Lateral Spreading Device Water Equivalent Thickness", "LateralSpreadingDeviceWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x0340),
+ "Number of Range Modulators", "NumberOfRangeModulators", "IS", "1" }, { Tag(0x300a, 0x0342),
+ "Range Modulator Sequence", "RangeModulatorSequence", "SQ", "1" }, { Tag(0x300a, 0x0344),
+ "Range Modulator Number", "RangeModulatorNumber", "IS", "1" }, { Tag(0x300a, 0x0346),
+ "Range Modulator ID", "RangeModulatorID", "SH", "1" }, { Tag(0x300a, 0x0348),
+ "Range Modulator Type", "RangeModulatorType", "CS", "1" }, { Tag(0x300a, 0x034a),
+ "Range Modulator Description", "RangeModulatorDescription", "LO", "1" }, { Tag(0x300a, 0x034c),
+ "Beam Current Modulation ID", "BeamCurrentModulationID", "SH", "1" }, { Tag(0x300a, 0x0350),
+ "Patient Support Type", "PatientSupportType", "CS", "1" }, { Tag(0x300a, 0x0352),
+ "Patient Support ID", "PatientSupportID", "SH", "1" }, { Tag(0x300a, 0x0354),
+ "Patient Support Accessory Code", "PatientSupportAccessoryCode", "LO", "1" }, { Tag(0x300a, 0x0355),
+ "Tray Accessory Code", "TrayAccessoryCode", "LO", "1" }, { Tag(0x300a, 0x0356),
+ "Fixation Light Azimuthal Angle", "FixationLightAzimuthalAngle", "FL", "1" }, { Tag(0x300a, 0x0358),
+ "Fixation Light Polar Angle", "FixationLightPolarAngle", "FL", "1" }, { Tag(0x300a, 0x035a),
+ "Meterset Rate", "MetersetRate", "FL", "1" }, { Tag(0x300a, 0x0360),
+ "Range Shifter Settings Sequence", "RangeShifterSettingsSequence", "SQ", "1" }, { Tag(0x300a, 0x0362),
+ "Range Shifter Setting", "RangeShifterSetting", "LO", "1" }, { Tag(0x300a, 0x0364),
+ "Isocenter to Range Shifter Distance", "IsocenterToRangeShifterDistance", "FL", "1" }, { Tag(0x300a, 0x0366),
+ "Range Shifter Water Equivalent Thickness", "RangeShifterWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x0370),
+ "Lateral Spreading Device Settings Sequence", "LateralSpreadingDeviceSettingsSequence", "SQ", "1" }, { Tag(0x300a, 0x0372),
+ "Lateral Spreading Device Setting", "LateralSpreadingDeviceSetting", "LO", "1" }, { Tag(0x300a, 0x0374),
+ "Isocenter to Lateral Spreading Device Distance", "IsocenterToLateralSpreadingDeviceDistance", "FL", "1" }, { Tag(0x300a, 0x0380),
+ "Range Modulator Settings Sequence", "RangeModulatorSettingsSequence", "SQ", "1" }, { Tag(0x300a, 0x0382),
+ "Range Modulator Gating Start Value", "RangeModulatorGatingStartValue", "FL", "1" }, { Tag(0x300a, 0x0384),
+ "Range Modulator Gating Stop Value", "RangeModulatorGatingStopValue", "FL", "1" }, { Tag(0x300a, 0x0386),
+ "Range Modulator Gating Start Water Equivalent Thickness", "RangeModulatorGatingStartWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x0388),
+ "Range Modulator Gating Stop Water Equivalent Thickness", "RangeModulatorGatingStopWaterEquivalentThickness", "FL", "1" }, { Tag(0x300a, 0x038a),
+ "Isocenter to Range Modulator Distance", "IsocenterToRangeModulatorDistance", "FL", "1" }, { Tag(0x300a, 0x0390),
+ "Scan Spot Tune ID", "ScanSpotTuneID", "SH", "1" }, { Tag(0x300a, 0x0392),
+ "Number of Scan Spot Positions", "NumberOfScanSpotPositions", "IS", "1" }, { Tag(0x300a, 0x0394),
+ "Scan Spot Position Map", "ScanSpotPositionMap", "FL", "1-n" }, { Tag(0x300a, 0x0396),
+ "Scan Spot Meterset Weights", "ScanSpotMetersetWeights", "FL", "1-n" }, { Tag(0x300a, 0x0398),
+ "Scanning Spot Size", "ScanningSpotSize", "FL", "2" }, { Tag(0x300a, 0x039a),
+ "Number of Paintings", "NumberOfPaintings", "IS", "1" }, { Tag(0x300a, 0x03a0),
+ "Ion Tolerance Table Sequence", "IonToleranceTableSequence", "SQ", "1" }, { Tag(0x300a, 0x03a2),
+ "Ion Beam Sequence", "IonBeamSequence", "SQ", "1" }, { Tag(0x300a, 0x03a4),
+ "Ion Beam Limiting Device Sequence", "IonBeamLimitingDeviceSequence", "SQ", "1" }, { Tag(0x300a, 0x03a6),
+ "Ion Block Sequence", "IonBlockSequence", "SQ", "1" }, { Tag(0x300a, 0x03a8),
+ "Ion Control Point Sequence", "IonControlPointSequence", "SQ", "1" }, { Tag(0x300a, 0x03aa),
+ "Ion Wedge Sequence", "IonWedgeSequence", "SQ", "1" }, { Tag(0x300a, 0x03ac),
+ "Ion Wedge Position Sequence", "IonWedgePositionSequence", "SQ", "1" }, { Tag(0x300a, 0x0401),
+ "Referenced Setup Image Sequence", "ReferencedSetupImageSequence", "SQ", "1" }, { Tag(0x300a, 0x0402),
+ "Setup Image Comment", "SetupImageComment", "ST", "1" }, { Tag(0x300a, 0x0410),
+ "Motion Synchronization Sequence", "MotionSynchronizationSequence", "SQ", "1" }, { Tag(0x300a, 0x0412),
+ "Control Point Orientation", "ControlPointOrientation", "FL", "3" }, { Tag(0x300a, 0x0420),
+ "General Accessory Sequence", "GeneralAccessorySequence", "SQ", "1" }, { Tag(0x300a, 0x0421),
+ "General Accessory ID", "GeneralAccessoryID", "SH", "1" }, { Tag(0x300a, 0x0422),
+ "General Accessory Description", "GeneralAccessoryDescription", "ST", "1" }, { Tag(0x300a, 0x0423),
+ "General Accessory Type", "GeneralAccessoryType", "CS", "1" }, { Tag(0x300a, 0x0424),
+ "General Accessory Number", "GeneralAccessoryNumber", "IS", "1" }, { Tag(0x300a, 0x0425),
+ "Source to General Accessory Distance", "SourceToGeneralAccessoryDistance", "FL", "1" }, { Tag(0x300a, 0x0431),
+ "Applicator Geometry Sequence", "ApplicatorGeometrySequence", "SQ", "1" }, { Tag(0x300a, 0x0432),
+ "Applicator Aperture Shape", "ApplicatorApertureShape", "CS", "1" }, { Tag(0x300a, 0x0433),
+ "Applicator Opening", "ApplicatorOpening", "FL", "1" }, { Tag(0x300a, 0x0434),
+ "Applicator Opening X", "ApplicatorOpeningX", "FL", "1" }, { Tag(0x300a, 0x0435),
+ "Applicator Opening Y", "ApplicatorOpeningY", "FL", "1" }, { Tag(0x300a, 0x0436),
+ "Source to Applicator Mounting Position Distance", "SourceToApplicatorMountingPositionDistance", "FL", "1" }, { Tag(0x300a, 0x0440),
+ "Number of Block Slab Items", "NumberOfBlockSlabItems", "IS", "1" }, { Tag(0x300a, 0x0441),
+ "Block Slab Sequence", "BlockSlabSequence", "SQ", "1" }, { Tag(0x300a, 0x0442),
+ "Block Slab Thickness", "BlockSlabThickness", "DS", "1" }, { Tag(0x300a, 0x0443),
+ "Block Slab Number", "BlockSlabNumber", "US", "1" }, { Tag(0x300a, 0x0450),
+ "Device Motion Control Sequence", "DeviceMotionControlSequence", "SQ", "1" }, { Tag(0x300a, 0x0451),
+ "Device Motion Execution Mode", "DeviceMotionExecutionMode", "CS", "1" }, { Tag(0x300a, 0x0452),
+ "Device Motion Observation Mode", "DeviceMotionObservationMode", "CS", "1" }, { Tag(0x300a, 0x0453),
+ "Device Motion Parameter Code Sequence", "DeviceMotionParameterCodeSequence", "SQ", "1" }, { Tag(0x300a, 0x0501),
+ "Distal Depth Fraction", "DistalDepthFraction", "FL", "1" }, { Tag(0x300a, 0x0502),
+ "Distal Depth", "DistalDepth", "FL", "1" }, { Tag(0x300a, 0x0503),
+ "Nominal Range Modulation Fractions", "NominalRangeModulationFractions", "FL", "2" }, { Tag(0x300a, 0x0504),
+ "Nominal Range Modulated Region Depths", "NominalRangeModulatedRegionDepths", "FL", "2" }, { Tag(0x300a, 0x0505),
+ "Depth Dose Parameters Sequence", "DepthDoseParametersSequence", "SQ", "1" }, { Tag(0x300a, 0x0506),
+ "Delivered Depth Dose Parameters Sequence", "DeliveredDepthDoseParametersSequence", "SQ", "1" }, { Tag(0x300a, 0x0507),
+ "Delivered Distal Depth Fraction", "DeliveredDistalDepthFraction", "FL", "1" }, { Tag(0x300a, 0x0508),
+ "Delivered Distal Depth", "DeliveredDistalDepth", "FL", "1" }, { Tag(0x300a, 0x0509),
+ "Delivered Nominal Range Modulation Fractions", "DeliveredNominalRangeModulationFractions", "FL", "2" }, { Tag(0x300a, 0x0510),
+ "Delivered Nominal Range Modulated Region Depths", "DeliveredNominalRangeModulatedRegionDepths", "FL", "2" }, { Tag(0x300a, 0x0511),
+ "Delivered Reference Dose Definition", "DeliveredReferenceDoseDefinition", "CS", "1" }, { Tag(0x300a, 0x0512),
+ "Reference Dose Definition", "ReferenceDoseDefinition", "CS", "1" }, { Tag(0x300c, 0x0002),
+ "Referenced RT Plan Sequence", "ReferencedRTPlanSequence", "SQ", "1" }, { Tag(0x300c, 0x0004),
+ "Referenced Beam Sequence", "ReferencedBeamSequence", "SQ", "1" }, { Tag(0x300c, 0x0006),
+ "Referenced Beam Number", "ReferencedBeamNumber", "IS", "1" }, { Tag(0x300c, 0x0007),
+ "Referenced Reference Image Number", "ReferencedReferenceImageNumber", "IS", "1" }, { Tag(0x300c, 0x0008),
+ "Start Cumulative Meterset Weight", "StartCumulativeMetersetWeight", "DS", "1" }, { Tag(0x300c, 0x0009),
+ "End Cumulative Meterset Weight", "EndCumulativeMetersetWeight", "DS", "1" }, { Tag(0x300c, 0x000a),
+ "Referenced Brachy Application Setup Sequence", "ReferencedBrachyApplicationSetupSequence", "SQ", "1" }, { Tag(0x300c, 0x000c),
+ "Referenced Brachy Application Setup Number", "ReferencedBrachyApplicationSetupNumber", "IS", "1" }, { Tag(0x300c, 0x000e),
+ "Referenced Source Number", "ReferencedSourceNumber", "IS", "1" }, { Tag(0x300c, 0x0020),
+ "Referenced Fraction Group Sequence", "ReferencedFractionGroupSequence", "SQ", "1" }, { Tag(0x300c, 0x0022),
+ "Referenced Fraction Group Number", "ReferencedFractionGroupNumber", "IS", "1" }, { Tag(0x300c, 0x0040),
+ "Referenced Verification Image Sequence", "ReferencedVerificationImageSequence", "SQ", "1" }, { Tag(0x300c, 0x0042),
+ "Referenced Reference Image Sequence", "ReferencedReferenceImageSequence", "SQ", "1" }, { Tag(0x300c, 0x0050),
+ "Referenced Dose Reference Sequence", "ReferencedDoseReferenceSequence", "SQ", "1" }, { Tag(0x300c, 0x0051),
+ "Referenced Dose Reference Number", "ReferencedDoseReferenceNumber", "IS", "1" }, { Tag(0x300c, 0x0055),
+ "Brachy Referenced Dose Reference Sequence", "BrachyReferencedDoseReferenceSequence", "SQ", "1" }, { Tag(0x300c, 0x0060),
+ "Referenced Structure Set Sequence", "ReferencedStructureSetSequence", "SQ", "1" }, { Tag(0x300c, 0x006a),
+ "Referenced Patient Setup Number", "ReferencedPatientSetupNumber", "IS", "1" }, { Tag(0x300c, 0x0080),
+ "Referenced Dose Sequence", "ReferencedDoseSequence", "SQ", "1" }, { Tag(0x300c, 0x00a0),
+ "Referenced Tolerance Table Number", "ReferencedToleranceTableNumber", "IS", "1" }, { Tag(0x300c, 0x00b0),
+ "Referenced Bolus Sequence", "ReferencedBolusSequence", "SQ", "1" }, { Tag(0x300c, 0x00c0),
+ "Referenced Wedge Number", "ReferencedWedgeNumber", "IS", "1" }, { Tag(0x300c, 0x00d0),
+ "Referenced Compensator Number", "ReferencedCompensatorNumber", "IS", "1" }, { Tag(0x300c, 0x00e0),
+ "Referenced Block Number", "ReferencedBlockNumber", "IS", "1" }, { Tag(0x300c, 0x00f0),
+ "Referenced Control Point Index", "ReferencedControlPointIndex", "IS", "1" }, { Tag(0x300c, 0x00f2),
+ "Referenced Control Point Sequence", "ReferencedControlPointSequence", "SQ", "1" }, { Tag(0x300c, 0x00f4),
+ "Referenced Start Control Point Index", "ReferencedStartControlPointIndex", "IS", "1" }, { Tag(0x300c, 0x00f6),
+ "Referenced Stop Control Point Index", "ReferencedStopControlPointIndex", "IS", "1" }, { Tag(0x300c, 0x0100),
+ "Referenced Range Shifter Number", "ReferencedRangeShifterNumber", "IS", "1" }, { Tag(0x300c, 0x0102),
+ "Referenced Lateral Spreading Device Number", "ReferencedLateralSpreadingDeviceNumber", "IS", "1" }, { Tag(0x300c, 0x0104),
+ "Referenced Range Modulator Number", "ReferencedRangeModulatorNumber", "IS", "1" }, { Tag(0x300c, 0x0111),
+ "Omitted Beam Task Sequence", "OmittedBeamTaskSequence", "SQ", "1" }, { Tag(0x300c, 0x0112),
+ "Reason for Omission", "ReasonForOmission", "CS", "1" }, { Tag(0x300c, 0x0113),
+ "Reason for Omission Description", "ReasonForOmissionDescription", "LO", "1" }, { Tag(0x300e, 0x0002),
+ "Approval Status", "ApprovalStatus", "CS", "1" }, { Tag(0x300e, 0x0004),
+ "Review Date", "ReviewDate", "DA", "1" }, { Tag(0x300e, 0x0005),
+ "Review Time", "ReviewTime", "TM", "1" }, { Tag(0x300e, 0x0008),
+ "Reviewer Name", "ReviewerName", "PN", "1" }, { Tag(0x4000, 0x0010),
+ "Arbitrary", "Arbitrary", "LT", "1" }, { Tag(0x4000, 0x4000),
+ "Text Comments", "TextComments", "LT", "1" }, { Tag(0x4008, 0x0040),
+ "Results ID", "ResultsID", "SH", "1" }, { Tag(0x4008, 0x0042),
+ "Results ID Issuer", "ResultsIDIssuer", "LO", "1" }, { Tag(0x4008, 0x0050),
+ "Referenced Interpretation Sequence", "ReferencedInterpretationSequence", "SQ", "1" }, { Tag(0x4008, 0x00ff),
+ "Report Production Status (Trial)", "ReportProductionStatusTrial", "CS", "1" }, { Tag(0x4008, 0x0100),
+ "Interpretation Recorded Date", "InterpretationRecordedDate", "DA", "1" }, { Tag(0x4008, 0x0101),
+ "Interpretation Recorded Time", "InterpretationRecordedTime", "TM", "1" }, { Tag(0x4008, 0x0102),
+ "Interpretation Recorder", "InterpretationRecorder", "PN", "1" }, { Tag(0x4008, 0x0103),
+ "Reference to Recorded Sound", "ReferenceToRecordedSound", "LO", "1" }, { Tag(0x4008, 0x0108),
+ "Interpretation Transcription Date", "InterpretationTranscriptionDate", "DA", "1" }, { Tag(0x4008, 0x0109),
+ "Interpretation Transcription Time", "InterpretationTranscriptionTime", "TM", "1" }, { Tag(0x4008, 0x010a),
+ "Interpretation Transcriber", "InterpretationTranscriber", "PN", "1" }, { Tag(0x4008, 0x010b),
+ "Interpretation Text", "InterpretationText", "ST", "1" }, { Tag(0x4008, 0x010c),
+ "Interpretation Author", "InterpretationAuthor", "PN", "1" }, { Tag(0x4008, 0x0111),
+ "Interpretation Approver Sequence", "InterpretationApproverSequence", "SQ", "1" }, { Tag(0x4008, 0x0112),
+ "Interpretation Approval Date", "InterpretationApprovalDate", "DA", "1" }, { Tag(0x4008, 0x0113),
+ "Interpretation Approval Time", "InterpretationApprovalTime", "TM", "1" }, { Tag(0x4008, 0x0114),
+ "Physician Approving Interpretation", "PhysicianApprovingInterpretation", "PN", "1" }, { Tag(0x4008, 0x0115),
+ "Interpretation Diagnosis Description", "InterpretationDiagnosisDescription", "LT", "1" }, { Tag(0x4008, 0x0117),
+ "Interpretation Diagnosis Code Sequence", "InterpretationDiagnosisCodeSequence", "SQ", "1" }, { Tag(0x4008, 0x0118),
+ "Results Distribution List Sequence", "ResultsDistributionListSequence", "SQ", "1" }, { Tag(0x4008, 0x0119),
+ "Distribution Name", "DistributionName", "PN", "1" }, { Tag(0x4008, 0x011a),
+ "Distribution Address", "DistributionAddress", "LO", "1" }, { Tag(0x4008, 0x0200),
+ "Interpretation ID", "InterpretationID", "SH", "1" }, { Tag(0x4008, 0x0202),
+ "Interpretation ID Issuer", "InterpretationIDIssuer", "LO", "1" }, { Tag(0x4008, 0x0210),
+ "Interpretation Type ID", "InterpretationTypeID", "CS", "1" }, { Tag(0x4008, 0x0212),
+ "Interpretation Status ID", "InterpretationStatusID", "CS", "1" }, { Tag(0x4008, 0x0300),
+ "Impressions", "Impressions", "ST", "1" }, { Tag(0x4008, 0x4000),
+ "Results Comments", "ResultsComments", "ST", "1" }, { Tag(0x4010, 0x0001),
+ "Low Energy Detectors", "LowEnergyDetectors", "CS", "1" }, { Tag(0x4010, 0x0002),
+ "High Energy Detectors", "HighEnergyDetectors", "CS", "1" }, { Tag(0x4010, 0x0004),
+ "Detector Geometry Sequence", "DetectorGeometrySequence", "SQ", "1" }, { Tag(0x4010, 0x1001),
+ "Threat ROI Voxel Sequence", "ThreatROIVoxelSequence", "SQ", "1" }, { Tag(0x4010, 0x1004),
+ "Threat ROI Base", "ThreatROIBase", "FL", "3" }, { Tag(0x4010, 0x1005),
+ "Threat ROI Extents", "ThreatROIExtents", "FL", "3" }, { Tag(0x4010, 0x1006),
+ "Threat ROI Bitmap", "ThreatROIBitmap", "OB", "1" }, { Tag(0x4010, 0x1007),
+ "Route Segment ID", "RouteSegmentID", "SH", "1" }, { Tag(0x4010, 0x1008),
+ "Gantry Type", "GantryType", "CS", "1" }, { Tag(0x4010, 0x1009),
+ "OOI Owner Type", "OOIOwnerType", "CS", "1" }, { Tag(0x4010, 0x100a),
+ "Route Segment Sequence", "RouteSegmentSequence", "SQ", "1" }, { Tag(0x4010, 0x1010),
+ "Potential Threat Object ID", "PotentialThreatObjectID", "US", "1" }, { Tag(0x4010, 0x1011),
+ "Threat Sequence", "ThreatSequence", "SQ", "1" }, { Tag(0x4010, 0x1012),
+ "Threat Category", "ThreatCategory", "CS", "1" }, { Tag(0x4010, 0x1013),
+ "Threat Category Description", "ThreatCategoryDescription", "LT", "1" }, { Tag(0x4010, 0x1014),
+ "ATD Ability Assessment", "ATDAbilityAssessment", "CS", "1" }, { Tag(0x4010, 0x1015),
+ "ATD Assessment Flag", "ATDAssessmentFlag", "CS", "1" }, { Tag(0x4010, 0x1016),
+ "ATD Assessment Probability", "ATDAssessmentProbability", "FL", "1" }, { Tag(0x4010, 0x1017),
+ "Mass", "Mass", "FL", "1" }, { Tag(0x4010, 0x1018),
+ "Density", "Density", "FL", "1" }, { Tag(0x4010, 0x1019),
+ "Z Effective", "ZEffective", "FL", "1" }, { Tag(0x4010, 0x101a),
+ "Boarding Pass ID", "BoardingPassID", "SH", "1" }, { Tag(0x4010, 0x101b),
+ "Center of Mass", "CenterOfMass", "FL", "3" }, { Tag(0x4010, 0x101c),
+ "Center of PTO", "CenterOfPTO", "FL", "3" }, { Tag(0x4010, 0x101d),
+ "Bounding Polygon", "BoundingPolygon", "FL", "6-n" }, { Tag(0x4010, 0x101e),
+ "Route Segment Start Location ID", "RouteSegmentStartLocationID", "SH", "1" }, { Tag(0x4010, 0x101f),
+ "Route Segment End Location ID", "RouteSegmentEndLocationID", "SH", "1" }, { Tag(0x4010, 0x1020),
+ "Route Segment Location ID Type", "RouteSegmentLocationIDType", "CS", "1" }, { Tag(0x4010, 0x1021),
+ "Abort Reason", "AbortReason", "CS", "1-n" }, { Tag(0x4010, 0x1023),
+ "Volume of PTO", "VolumeOfPTO", "FL", "1" }, { Tag(0x4010, 0x1024),
+ "Abort Flag", "AbortFlag", "CS", "1" }, { Tag(0x4010, 0x1025),
+ "Route Segment Start Time", "RouteSegmentStartTime", "DT", "1" }, { Tag(0x4010, 0x1026),
+ "Route Segment End Time", "RouteSegmentEndTime", "DT", "1" }, { Tag(0x4010, 0x1027),
+ "TDR Type", "TDRType", "CS", "1" }, { Tag(0x4010, 0x1028),
+ "International Route Segment", "InternationalRouteSegment", "CS", "1" }, { Tag(0x4010, 0x1029),
+ "Threat Detection Algorithm and Version", "ThreatDetectionAlgorithmandVersion", "LO", "1-n" }, { Tag(0x4010, 0x102a),
+ "Assigned Location", "AssignedLocation", "SH", "1" }, { Tag(0x4010, 0x102b),
+ "Alarm Decision Time", "AlarmDecisionTime", "DT", "1" }, { Tag(0x4010, 0x1031),
+ "Alarm Decision", "AlarmDecision", "CS", "1" }, { Tag(0x4010, 0x1033),
+ "Number of Total Objects", "NumberOfTotalObjects", "US", "1" }, { Tag(0x4010, 0x1034),
+ "Number of Alarm Objects", "NumberOfAlarmObjects", "US", "1" }, { Tag(0x4010, 0x1037),
+ "PTO Representation Sequence", "PTORepresentationSequence", "SQ", "1" }, { Tag(0x4010, 0x1038),
+ "ATD Assessment Sequence", "ATDAssessmentSequence", "SQ", "1" }, { Tag(0x4010, 0x1039),
+ "TIP Type", "TIPType", "CS", "1" }, { Tag(0x4010, 0x103a),
+ "DICOS Version", "DICOSVersion", "CS", "1" }, { Tag(0x4010, 0x1041),
+ "OOI Owner Creation Time", "OOIOwnerCreationTime", "DT", "1" }, { Tag(0x4010, 0x1042),
+ "OOI Type", "OOIType", "CS", "1" }, { Tag(0x4010, 0x1043),
+ "OOI Size", "OOISize", "FL", "3" }, { Tag(0x4010, 0x1044),
+ "Acquisition Status", "AcquisitionStatus", "CS", "1" }, { Tag(0x4010, 0x1045),
+ "Basis Materials Code Sequence", "BasisMaterialsCodeSequence", "SQ", "1" }, { Tag(0x4010, 0x1046),
+ "Phantom Type", "PhantomType", "CS", "1" }, { Tag(0x4010, 0x1047),
+ "OOI Owner Sequence", "OOIOwnerSequence", "SQ", "1" }, { Tag(0x4010, 0x1048),
+ "Scan Type", "ScanType", "CS", "1" }, { Tag(0x4010, 0x1051),
+ "Itinerary ID", "ItineraryID", "LO", "1" }, { Tag(0x4010, 0x1052),
+ "Itinerary ID Type", "ItineraryIDType", "SH", "1" }, { Tag(0x4010, 0x1053),
+ "Itinerary ID Assigning Authority", "ItineraryIDAssigningAuthority", "LO", "1" }, { Tag(0x4010, 0x1054),
+ "Route ID", "RouteID", "SH", "1" }, { Tag(0x4010, 0x1055),
+ "Route ID Assigning Authority", "RouteIDAssigningAuthority", "SH", "1" }, { Tag(0x4010, 0x1056),
+ "Inbound Arrival Type", "InboundArrivalType", "CS", "1" }, { Tag(0x4010, 0x1058),
+ "Carrier ID", "CarrierID", "SH", "1" }, { Tag(0x4010, 0x1059),
+ "Carrier ID Assigning Authority", "CarrierIDAssigningAuthority", "CS", "1" }, { Tag(0x4010, 0x1060),
+ "Source Orientation", "SourceOrientation", "FL", "3" }, { Tag(0x4010, 0x1061),
+ "Source Position", "SourcePosition", "FL", "3" }, { Tag(0x4010, 0x1062),
+ "Belt Height", "BeltHeight", "FL", "1" }, { Tag(0x4010, 0x1064),
+ "Algorithm Routing Code Sequence", "AlgorithmRoutingCodeSequence", "SQ", "1" }, { Tag(0x4010, 0x1067),
+ "Transport Classification", "TransportClassification", "CS", "1" }, { Tag(0x4010, 0x1068),
+ "OOI Type Descriptor", "OOITypeDescriptor", "LT", "1" }, { Tag(0x4010, 0x1069),
+ "Total Processing Time", "TotalProcessingTime", "FL", "1" }, { Tag(0x4010, 0x106c),
+ "Detector Calibration Data", "DetectorCalibrationData", "OB", "1" }, { Tag(0x4010, 0x106d),
+ "Additional Screening Performed", "AdditionalScreeningPerformed", "CS", "1" }, { Tag(0x4010, 0x106e),
+ "Additional Inspection Selection Criteria", "AdditionalInspectionSelectionCriteria", "CS", "1" }, { Tag(0x4010, 0x106f),
+ "Additional Inspection Method Sequence", "AdditionalInspectionMethodSequence", "SQ", "1" }, { Tag(0x4010, 0x1070),
+ "AIT Device Type", "AITDeviceType", "CS", "1" }, { Tag(0x4010, 0x1071),
+ "QR Measurements Sequence", "QRMeasurementsSequence", "SQ", "1" }, { Tag(0x4010, 0x1072),
+ "Target Material Sequence", "TargetMaterialSequence", "SQ", "1" }, { Tag(0x4010, 0x1073),
+ "SNR Threshold", "SNRThreshold", "FD", "1" }, { Tag(0x4010, 0x1075),
+ "Image Scale Representation", "ImageScaleRepresentation", "DS", "1" }, { Tag(0x4010, 0x1076),
+ "Referenced PTO Sequence", "ReferencedPTOSequence", "SQ", "1" }, { Tag(0x4010, 0x1077),
+ "Referenced TDR Instance Sequence", "ReferencedTDRInstanceSequence", "SQ", "1" }, { Tag(0x4010, 0x1078),
+ "PTO Location Description", "PTOLocationDescription", "ST", "1" }, { Tag(0x4010, 0x1079),
+ "Anomaly Locator Indicator Sequence", "AnomalyLocatorIndicatorSequence", "SQ", "1" }, { Tag(0x4010, 0x107a),
+ "Anomaly Locator Indicator", "AnomalyLocatorIndicator", "FL", "3" }, { Tag(0x4010, 0x107b),
+ "PTO Region Sequence", "PTORegionSequence", "SQ", "1" }, { Tag(0x4010, 0x107c),
+ "Inspection Selection Criteria", "InspectionSelectionCriteria", "CS", "1" }, { Tag(0x4010, 0x107d),
+ "Secondary Inspection Method Sequence", "SecondaryInspectionMethodSequence", "SQ", "1" }, { Tag(0x4010, 0x107e),
+ "PRCS to RCS Orientation", "PRCSToRCSOrientation", "DS", "6" }, { Tag(0x4ffe, 0x0001),
+ "MAC Parameters Sequence", "MACParametersSequence", "SQ", "1" }, { Tag(0x5200, 0x9229),
+ "Shared Functional Groups Sequence", "SharedFunctionalGroupsSequence", "SQ", "1" }, { Tag(0x5200, 0x9230),
+ "Per-frame Functional Groups Sequence", "PerFrameFunctionalGroupsSequence", "SQ", "1" }, { Tag(0x5400, 0x0100),
+ "Waveform Sequence", "WaveformSequence", "SQ", "1" }, { Tag(0x5400, 0x0110),
+ "Channel Minimum Value", "ChannelMinimumValue", "OB or OW", "1" }, { Tag(0x5400, 0x0112),
+ "Channel Maximum Value", "ChannelMaximumValue", "OB or OW", "1" }, { Tag(0x5400, 0x1004),
+ "Waveform Bits Allocated", "WaveformBitsAllocated", "US", "1" }, { Tag(0x5400, 0x1006),
+ "Waveform Sample Interpretation", "WaveformSampleInterpretation", "CS", "1" }, { Tag(0x5400, 0x100a),
+ "Waveform Padding Value", "WaveformPaddingValue", "OB or OW", "1" }, { Tag(0x5400, 0x1010),
+ "Waveform Data", "WaveformData", "OB or OW", "1" }, { Tag(0x5600, 0x0010),
+ "First Order Phase Correction Angle", "FirstOrderPhaseCorrectionAngle", "OF", "1" }, { Tag(0x5600, 0x0020),
+ "Spectroscopy Data", "SpectroscopyData", "OF", "1" }, { Tag(0x7fe0, 0x0008),
+ "Float Pixel Data", "FloatPixelData", "OF", "1" }, { Tag(0x7fe0, 0x0009),
+ "Double Float Pixel Data", "DoubleFloatPixelData", "OD", "1" }, { Tag(0x7fe0, 0x0010),
+ "Pixel Data", "PixelData", "OB or OW", "1" }, { Tag(0x7fe0, 0x0020),
+ "Coefficients SDVN", "CoefficientsSDVN", "OW", "1" }, { Tag(0x7fe0, 0x0030),
+ "Coefficients SDHN", "CoefficientsSDHN", "OW", "1" }, { Tag(0x7fe0, 0x0040),
+ "Coefficients SDDN", "CoefficientsSDDN", "OW", "1" }, { Tag(0xfffa, 0xfffa),
+ "Digital Signatures Sequence", "DigitalSignaturesSequence", "SQ", "1" }, { Tag(0xfffc, 0xfffc),
+ "Data Set Trailing Padding", "DataSetTrailingPadding", "OB", "1" }, { Tag(0xfffe, 0xe000),
+ "Item", "Item", "See Note ", "1" }, { Tag(0xfffe, 0xe00d),
+ "Item Delimitation Item", "ItemDelimitationItem", "See Note ", "1" }, { Tag(0xfffe, 0xe0dd),
+ "Sequence Delimitation Item", "SequenceDelimitationItem", "See Note ", "1" }, };
+
+ std::map<std::string, odil::Tag> public_tags;
+
+ unsigned long const count = sizeof(raw_entries)/sizeof(RawElementsDictionaryEntry);
+ for(unsigned long i=0; i<count; ++i)
+ {
+ RawElementsDictionaryEntry const & raw_entry = raw_entries[i];
+ public_tags.insert(std::make_pair(raw_entry.keyword, raw_entry.key.get_tag()));
+ }
+
+ return public_tags;
+}
+
struct RawUIDsDictionaryEntry
{
char const * uid;
@@ -8559,6 +12714,7 @@ UIDsDictionary create_uids_dictionary()
{ "1.2.840.10008.5.1.4.1.1.88.69", "Colon CAD SR Storage", "ColonCADSRStorage", "SOP Class" },
{ "1.2.840.10008.5.1.4.1.1.88.70", "Implantation Plan SR Storage", "ImplantationPlanSRStorage", "SOP Class" },
{ "1.2.840.10008.5.1.4.1.1.88.71", "Acquisition Context SR Storage", "AcquisitionContextSRStorage", "SOP Class" },
+ { "1.2.840.10008.5.1.4.1.1.90.1", "Content Assessment Results Storage", "ContentAssessmentResultsStorage", "SOP Class" },
{ "1.2.840.10008.5.1.4.1.1.104.1", "Encapsulated PDF Storage", "EncapsulatedPDFStorage", "SOP Class" },
{ "1.2.840.10008.5.1.4.1.1.104.2", "Encapsulated CDA Storage", "EncapsulatedCDAStorage", "SOP Class" },
{ "1.2.840.10008.5.1.4.1.1.128", "Positron Emission Tomography Image Storage", "PositronEmissionTomographyImageStorage", "SOP Class" },
@@ -8710,4 +12866,5 @@ UIDsDictionary create_uids_dictionary()
}
odil::ElementsDictionary odil::registry::public_dictionary=odil::registry::create_public_dictionary();
+std::map<std::string, odil::Tag> odil::registry::public_tags=odil::registry::create_public_tags();
odil::UIDsDictionary odil::registry::uids_dictionary=odil::registry::create_uids_dictionary();
\ No newline at end of file
diff --git a/src/odil/registry.h b/src/odil/registry.h
index 5a35c71..56ba225 100644
--- a/src/odil/registry.h
+++ b/src/odil/registry.h
@@ -9,6 +9,10 @@
#ifndef _afc7b2d7_0869_4fea_9a9b_7fe6228baca9
#define _afc7b2d7_0869_4fea_9a9b_7fe6228baca9
+#include <map>
+#include <string>
+
+#include "odil/odil.h"
#include "odil/ElementsDictionary.h"
#include "odil/Tag.h"
#include "odil/UIDsDictionary.h"
@@ -277,6 +281,9 @@ Tag const GroupOfPatientsIdentificationSequence(0x0010, 0x0027);
Tag const SubjectRelativePositionInImage(0x0010, 0x0028);
Tag const PatientBirthDate(0x0010, 0x0030);
Tag const PatientBirthTime(0x0010, 0x0032);
+Tag const PatientBirthDateInAlternativeCalendar(0x0010, 0x0033);
+Tag const PatientDeathDateInAlternativeCalendar(0x0010, 0x0034);
+Tag const PatientAlternativeCalendar(0x0010, 0x0035);
Tag const PatientSex(0x0010, 0x0040);
Tag const PatientInsurancePlanCodeSequence(0x0010, 0x0050);
Tag const PatientPrimaryLanguageCodeSequence(0x0010, 0x0101);
@@ -723,6 +730,8 @@ Tag const ReceiveCoilName(0x0018, 0x1250);
Tag const TransmitCoilName(0x0018, 0x1251);
Tag const PlateType(0x0018, 0x1260);
Tag const PhosphorType(0x0018, 0x1261);
+Tag const WaterEquivalentDiameter(0x0018, 0x1271);
+Tag const WaterEquivalentDiameterCalculationMethodCodeSequence(0x0018, 0x1272);
Tag const ScanVelocity(0x0018, 0x1300);
Tag const WholeBodyTechnique(0x0018, 0x1301);
Tag const ScanLength(0x0018, 0x1302);
@@ -2908,17 +2917,30 @@ Tag const SelectorAttributeVR(0x0072, 0x0050);
Tag const SelectorSequencePointer(0x0072, 0x0052);
Tag const SelectorSequencePointerPrivateCreator(0x0072, 0x0054);
Tag const SelectorAttributePrivateCreator(0x0072, 0x0056);
+Tag const SelectorAEValue(0x0072, 0x005e);
+Tag const SelectorASValue(0x0072, 0x005f);
Tag const SelectorATValue(0x0072, 0x0060);
+Tag const SelectorDAValue(0x0072, 0x0061);
Tag const SelectorCSValue(0x0072, 0x0062);
+Tag const SelectorDTValue(0x0072, 0x0063);
Tag const SelectorISValue(0x0072, 0x0064);
+Tag const SelectorOBValue(0x0072, 0x0065);
Tag const SelectorLOValue(0x0072, 0x0066);
+Tag const SelectorOFValue(0x0072, 0x0067);
Tag const SelectorLTValue(0x0072, 0x0068);
+Tag const SelectorOWValue(0x0072, 0x0069);
Tag const SelectorPNValue(0x0072, 0x006a);
+Tag const SelectorTMValue(0x0072, 0x006b);
Tag const SelectorSHValue(0x0072, 0x006c);
+Tag const SelectorUNValue(0x0072, 0x006d);
Tag const SelectorSTValue(0x0072, 0x006e);
+Tag const SelectorUCValue(0x0072, 0x006f);
Tag const SelectorUTValue(0x0072, 0x0070);
+Tag const SelectorURValue(0x0072, 0x0071);
Tag const SelectorDSValue(0x0072, 0x0072);
+Tag const SelectorODValue(0x0072, 0x0073);
Tag const SelectorFDValue(0x0072, 0x0074);
+Tag const SelectorOLValue(0x0072, 0x0075);
Tag const SelectorFLValue(0x0072, 0x0076);
Tag const SelectorULValue(0x0072, 0x0078);
Tag const SelectorUSValue(0x0072, 0x007a);
@@ -3116,6 +3138,29 @@ Tag const UValueData(0x0080, 0x0010);
Tag const VValueData(0x0080, 0x0011);
Tag const ReferencedTextureSequence(0x0080, 0x0012);
Tag const ReferencedSurfaceDataSequence(0x0080, 0x0013);
+Tag const AssessmentSummary(0x0082, 0x0001);
+Tag const AssessmentSummaryDescription(0x0082, 0x0003);
+Tag const AssessedSOPInstanceSequence(0x0082, 0x0004);
+Tag const ReferencedComparisonSOPInstanceSequence(0x0082, 0x0005);
+Tag const NumberOfAssessmentObservations(0x0082, 0x0006);
+Tag const AssessmentObservationsSequence(0x0082, 0x0007);
+Tag const ObservationSignificance(0x0082, 0x0008);
+Tag const ObservationDescription(0x0082, 0x000a);
+Tag const StructuredContraintObservationSequence(0x0082, 0x000c);
+Tag const AssessedAttributeValueSequence(0x0082, 0x0010);
+Tag const AssessmentSetID(0x0082, 0x0016);
+Tag const AssessmentRequesterSequence(0x0082, 0x0017);
+Tag const SelectorAttributeName(0x0082, 0x0018);
+Tag const SelectorAttributeKeyword(0x0082, 0x0019);
+Tag const AssessmentTypeCodeSequence(0x0082, 0x0021);
+Tag const ObservationBasisCodeSequence(0x0082, 0x0022);
+Tag const AssessmentLabel(0x0082, 0x0023);
+Tag const ConstraintType(0x0082, 0x0032);
+Tag const SpecificationSelectionGuidance(0x0082, 0x0033);
+Tag const ConstraintValueSequence(0x0082, 0x0034);
+Tag const RecommendedDefaultValueSequence(0x0082, 0x0035);
+Tag const ConstraintViolationSignificance(0x0082, 0x0036);
+Tag const ConstraintViolationCondition(0x0082, 0x0037);
Tag const StorageMediaFileSetID(0x0088, 0x0130);
Tag const StorageMediaFileSetUID(0x0088, 0x0140);
Tag const IconImageSequence(0x0088, 0x0200);
@@ -3651,6 +3696,12 @@ Tag const HeadFixationAngle(0x300a, 0x0148);
Tag const GantryPitchAngle(0x300a, 0x014a);
Tag const GantryPitchRotationDirection(0x300a, 0x014c);
Tag const GantryPitchAngleTolerance(0x300a, 0x014e);
+Tag const FixationEye(0x300a, 0x0150);
+Tag const ChairHeadFramePosition(0x300a, 0x0151);
+Tag const HeadFixationAngleTolerance(0x300a, 0x0152);
+Tag const ChairHeadFramePositionTolerance(0x300a, 0x0153);
+Tag const FixationLightAzimuthalAngleTolerance(0x300a, 0x0154);
+Tag const FixationLightPolarAngleTolerance(0x300a, 0x0155);
Tag const PatientSetupSequence(0x300a, 0x0180);
Tag const PatientSetupNumber(0x300a, 0x0182);
Tag const PatientSetupLabel(0x300a, 0x0183);
@@ -4344,6 +4395,7 @@ std::string const RadiopharmaceuticalRadiationDoseSRStorage("1.2.840.10008.5.1.4
std::string const ColonCADSRStorage("1.2.840.10008.5.1.4.1.1.88.69");
std::string const ImplantationPlanSRStorage("1.2.840.10008.5.1.4.1.1.88.70");
std::string const AcquisitionContextSRStorage("1.2.840.10008.5.1.4.1.1.88.71");
+std::string const ContentAssessmentResultsStorage("1.2.840.10008.5.1.4.1.1.90.1");
std::string const EncapsulatedPDFStorage("1.2.840.10008.5.1.4.1.1.104.1");
std::string const EncapsulatedCDAStorage("1.2.840.10008.5.1.4.1.1.104.2");
std::string const PositronEmissionTomographyImageStorage("1.2.840.10008.5.1.4.1.1.128");
@@ -4475,8 +4527,9 @@ std::string const dicomUniqueAETitle("1.2.840.10008.15.0.4.7");
std::string const dicomTransferCapability("1.2.840.10008.15.0.4.8");
std::string const UniversalCoordinatedTime("1.2.840.10008.15.1.1");
-extern ElementsDictionary public_dictionary;
-extern UIDsDictionary uids_dictionary;
+extern ODIL_API ElementsDictionary public_dictionary;
+extern ODIL_API std::map<std::string, Tag> public_tags;
+extern ODIL_API UIDsDictionary uids_dictionary;
}
}
diff --git a/src/odil/xml_converter.cpp b/src/odil/xml_converter.cpp
index 187497d..a97ce16 100644
--- a/src/odil/xml_converter.cpp
+++ b/src/odil/xml_converter.cpp
@@ -17,6 +17,7 @@
namespace odil
{
+/// @brief Element visitor converting to XML.
struct ToXMLVisitor
{
typedef boost::property_tree::ptree result_type;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 2541e6e..64b23aa 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -24,7 +24,7 @@ foreach(test_file ${tests})
add_executable(test_${test} ${test_file} ${headers})
target_link_libraries(test_${test} libodil ${Boost_LIBRARIES})
- set_target_properties(test_${test} PROPERTIES OUTPUT_NAME ${test})
+ set_target_properties(test_${test} PROPERTIES OUTPUT_NAME ${test} FOLDER "Tests")
file(READ ${test_file} content)
diff --git a/tests/code/EchoSCP.cpp b/tests/code/EchoSCP.cpp
index 8b29f65..799fc40 100644
--- a/tests/code/EchoSCP.cpp
+++ b/tests/code/EchoSCP.cpp
@@ -62,7 +62,7 @@ void run_server(Status * status)
void run_client(Status * status, bool use_abort)
{
- std::string command = "echoscu";
+ std::string command = "echoscu -ll error";
if(use_abort)
{
command += " --abort";
diff --git a/tests/code/GetSCP.cpp b/tests/code/GetSCP.cpp
index f1588f7..1c0a9e3 100644
--- a/tests/code/GetSCP.cpp
+++ b/tests/code/GetSCP.cpp
@@ -128,6 +128,7 @@ void run_server(Status * status)
void run_client(Status * status)
{
std::string command = "getscu "
+ "-ll error "
"-P -k QueryRetrieveLevel=PATIENT "
"-k PatientID=* -k PatientName "
"+B "
diff --git a/tests/code/GetSCU.cpp b/tests/code/GetSCU.cpp
index c71014b..97f47fd 100644
--- a/tests/code/GetSCU.cpp
+++ b/tests/code/GetSCU.cpp
@@ -9,7 +9,8 @@
struct Fixture: public PeerFixtureBase
{
- static bool called;
+ static bool store_callback_called;
+ static bool get_callback_called;
odil::DataSet query;
@@ -25,20 +26,27 @@ struct Fixture: public PeerFixtureBase
}
})
{
- Fixture::called = false;
+ Fixture::store_callback_called = false;
+ Fixture::get_callback_called = false;
this->query.add("QueryRetrieveLevel", {"PATIENT"});
this->query.add("PatientName", {"Doe^John"});
}
- static void callback(odil::DataSet const &)
+ static void store_callback(odil::DataSet const &)
{
- Fixture::called = true;
+ Fixture::store_callback_called = true;
+ }
+
+ static void get_callback(odil::message::CGetResponse const &)
+ {
+ Fixture::get_callback_called = true;
}
};
-bool Fixture::called = false;
+bool Fixture::store_callback_called = false;
+bool Fixture::get_callback_called = false;
BOOST_FIXTURE_TEST_CASE(Get, Fixture)
{
@@ -55,14 +63,26 @@ BOOST_FIXTURE_TEST_CASE(Get, Fixture)
{"2.25.95090344942250266709587559073467305647"}));
}
-BOOST_FIXTURE_TEST_CASE(GetCallback, Fixture)
+BOOST_FIXTURE_TEST_CASE(GetBothCallbacks, Fixture)
{
odil::GetSCU scu(this->association);
scu.set_affected_sop_class(
odil::registry::PatientRootQueryRetrieveInformationModelGET);
- scu.get(this->query, Fixture::callback);
+ scu.get(this->query, Fixture::store_callback, Fixture::get_callback);
- BOOST_CHECK(Fixture::called);
+ BOOST_CHECK(Fixture::store_callback_called);
+ BOOST_CHECK(Fixture::get_callback_called);
}
+BOOST_FIXTURE_TEST_CASE(GetOnlyStoreCallback, Fixture)
+{
+ odil::GetSCU scu(this->association);
+
+ scu.set_affected_sop_class(
+ odil::registry::PatientRootQueryRetrieveInformationModelGET);
+ scu.get(this->query, Fixture::store_callback);
+
+ BOOST_CHECK(Fixture::store_callback_called);
+ BOOST_CHECK(!Fixture::get_callback_called);
+}
diff --git a/tests/code/MoveSCP.cpp b/tests/code/MoveSCP.cpp
index 18fb15e..e6f261d 100644
--- a/tests/code/MoveSCP.cpp
+++ b/tests/code/MoveSCP.cpp
@@ -165,6 +165,7 @@ void run_server(Status * status)
void run_client(Status * status)
{
std::string command = "movescu "
+ "-ll error "
"-P -k QueryRetrieveLevel=PATIENT "
"-k PatientID=* -k PatientName "
"+P 11114 127.0.0.1 11113";
diff --git a/tests/code/MoveSCU.cpp b/tests/code/MoveSCU.cpp
index 598c043..59c8fec 100644
--- a/tests/code/MoveSCU.cpp
+++ b/tests/code/MoveSCU.cpp
@@ -9,7 +9,8 @@
struct Fixture: public PeerFixtureBase
{
- static bool called;
+ static bool store_callback_called;
+ static bool move_callback_called;
odil::DataSet query;
@@ -25,24 +26,32 @@ struct Fixture: public PeerFixtureBase
}
})
{
- Fixture::called = false;
+ Fixture::store_callback_called = false;
+ Fixture::move_callback_called = false;
this->query.add("QueryRetrieveLevel", {"PATIENT"});
this->query.add("PatientName", {"Doe^John"});
}
- static void callback(odil::DataSet const &)
+ static void store_callback(odil::DataSet const &)
{
- Fixture::called = true;
+ Fixture::store_callback_called = true;
+ }
+
+ static void move_callback(odil::message::CMoveResponse const &)
+ {
+ Fixture::move_callback_called = true;
}
};
-bool Fixture::called = false;
+bool Fixture::store_callback_called = false;
+bool Fixture::move_callback_called = false;
BOOST_FIXTURE_TEST_CASE(DefaultConstructor, Fixture)
{
odil::MoveSCU const scu(this->association);
BOOST_CHECK_EQUAL(scu.get_move_destination(), "");
+ BOOST_CHECK_EQUAL(scu.get_incoming_port(), 0);
}
BOOST_FIXTURE_TEST_CASE(MoveDestination, Fixture)
@@ -52,10 +61,18 @@ BOOST_FIXTURE_TEST_CASE(MoveDestination, Fixture)
BOOST_CHECK_EQUAL(scu.get_move_destination(), "remote");
}
+BOOST_FIXTURE_TEST_CASE(IncomingPort, Fixture)
+{
+ odil::MoveSCU scu(this->association);
+ scu.set_incoming_port(11113);
+ BOOST_CHECK_EQUAL(scu.get_incoming_port(), 11113);
+}
+
BOOST_FIXTURE_TEST_CASE(Move, Fixture)
{
odil::MoveSCU scu(this->association);
scu.set_move_destination("LOCAL");
+ scu.set_incoming_port(11113);
scu.set_affected_sop_class(
odil::registry::PatientRootQueryRetrieveInformationModelMOVE);
@@ -67,14 +84,31 @@ BOOST_FIXTURE_TEST_CASE(Move, Fixture)
odil::Value::Strings{"2.25.95090344942250266709587559073467305647"});
}
-BOOST_FIXTURE_TEST_CASE(MoveCallback, Fixture)
+BOOST_FIXTURE_TEST_CASE(MoveBothCallback, Fixture)
+{
+ odil::MoveSCU scu(this->association);
+ scu.set_move_destination("LOCAL");
+ scu.set_incoming_port(11113);
+
+ scu.set_affected_sop_class(
+ odil::registry::PatientRootQueryRetrieveInformationModelMOVE);
+ scu.move(this->query, Fixture::store_callback, Fixture::move_callback);
+
+ BOOST_CHECK(Fixture::store_callback_called);
+ BOOST_CHECK(Fixture::move_callback_called);
+}
+
+BOOST_FIXTURE_TEST_CASE(MoveOnlyStoreCallback, Fixture)
{
odil::MoveSCU scu(this->association);
scu.set_move_destination("LOCAL");
+ scu.set_incoming_port(11113);
scu.set_affected_sop_class(
odil::registry::PatientRootQueryRetrieveInformationModelMOVE);
- scu.move(this->query, Fixture::callback);
+ scu.move(
+ this->query, Fixture::store_callback, odil::MoveSCU::MoveCallback());
- BOOST_CHECK(Fixture::called);
+ BOOST_CHECK(Fixture::store_callback_called);
+ BOOST_CHECK(!Fixture::move_callback_called);
}
diff --git a/tests/code/SCPDispatcher.cpp b/tests/code/SCPDispatcher.cpp
index f1d746c..3280232 100644
--- a/tests/code/SCPDispatcher.cpp
+++ b/tests/code/SCPDispatcher.cpp
@@ -68,7 +68,7 @@ void run_server(Status * status, bool with_echo)
void run_echo_client(Status * status)
{
- std::string command = "echoscu";
+ std::string command = "echoscu -ll error";
command += " 127.0.0.1 11113";
status->client = system(command.c_str());
}
diff --git a/tests/run b/tests/run
index a2737e9..c41e6d4 100755
--- a/tests/run
+++ b/tests/run
@@ -53,9 +53,10 @@ def main():
environment["ODIL_PEER_HOST_NAME"] = "127.0.0.1"
environment["ODIL_PEER_PORT"] = "11112"
environment["ODIL_PEER_AET"] = "REMOTE"
- environment["PATH"] = os.pathsep.join(["tests/tools", environment["PATH"]])
+ environment["PATH"] = os.pathsep.join(
+ [os.path.abspath("tests/tools"), environment["PATH"]])
environment["PYTHONPATH"] = os.pathsep.join(
- ["wrappers", environment.get("PYTHONPATH", "")])
+ [os.path.abspath("wrappers"), environment.get("PYTHONPATH", "")])
source_directory = None
with open("CMakeCache.txt") as fd:
@@ -122,6 +123,7 @@ AETable END
stdin=read)
subprocess.check_call([
"storescu",
+ "-ll", "error",
"-aet", "LOCAL", "-aec", "REMOTE",
"localhost", "11112",
os.path.join(directory, "data.dcm")])
diff --git a/tests/wrappers/test_data_set.py b/tests/wrappers/test_data_set.py
index c43e533..d0ca2ac 100644
--- a/tests/wrappers/test_data_set.py
+++ b/tests/wrappers/test_data_set.py
@@ -9,19 +9,6 @@ class TestDataSet(unittest.TestCase):
self.assertEqual(data_set.size(), 0)
self.assertEqual(len(data_set), 0)
- def test_empty_element(self):
- tag = odil.registry.PatientName
- data_set = odil.DataSet()
- data_set.add(tag, odil.Element())
-
- self.assertFalse(data_set.empty())
- self.assertEqual(data_set.size(), 1)
- self.assertEqual(len(data_set), 1)
-
- self.assertEqual(data_set.get_vr(tag), odil.VR.INVALID)
- self.assertTrue(data_set.empty(tag))
- self.assertEqual(data_set.size(tag), 0)
-
def test_empty_element_tag(self):
tag = odil.registry.PatientName
data_set = odil.DataSet()
@@ -39,7 +26,7 @@ class TestDataSet(unittest.TestCase):
tag = odil.registry.SelectorUSValue
value = [1, 2, 3]
data_set = odil.DataSet()
- data_set.add(tag, odil.Value.Integers(value))
+ data_set.add(tag, value)
self.assertFalse(data_set.empty())
self.assertEqual(data_set.size(), 1)
@@ -49,13 +36,26 @@ class TestDataSet(unittest.TestCase):
self.assertFalse(data_set.empty(tag))
self.assertEqual(data_set.size(tag), 3)
self.assertTrue(data_set.is_int(tag))
- self.assertEqual([x for x in data_set.as_int(tag)], value)
+ self.assertSequenceEqual(data_set.as_int(tag), value)
+
+ value = [4, 5]
+ data_set.set(tag, value)
+
+ self.assertFalse(data_set.empty())
+ self.assertEqual(data_set.size(), 1)
+ self.assertEqual(len(data_set), 1)
+
+ self.assertEqual(data_set.get_vr(tag), odil.VR.US)
+ self.assertFalse(data_set.empty(tag))
+ self.assertEqual(data_set.size(tag), len(value))
+ self.assertTrue(data_set.is_int(tag))
+ self.assertSequenceEqual(data_set.as_int(tag), value)
def test_real_element(self):
tag = odil.registry.SelectorFLValue
value = [1.1, 2, 3.3]
data_set = odil.DataSet()
- data_set.add(tag, odil.Value.Reals(value))
+ data_set.add(tag, value)
self.assertFalse(data_set.empty())
self.assertEqual(data_set.size(), 1)
@@ -65,13 +65,26 @@ class TestDataSet(unittest.TestCase):
self.assertFalse(data_set.empty(tag))
self.assertEqual(data_set.size(tag), 3)
self.assertTrue(data_set.is_real(tag))
- self.assertEqual([x for x in data_set.as_real(tag)], value)
+ self.assertSequenceEqual(data_set.as_real(tag), value)
+
+ value = [4.4, 5]
+ data_set.set(tag, value)
+
+ self.assertFalse(data_set.empty())
+ self.assertEqual(data_set.size(), 1)
+ self.assertEqual(len(data_set), 1)
+
+ self.assertEqual(data_set.get_vr(tag), odil.VR.FL)
+ self.assertFalse(data_set.empty(tag))
+ self.assertEqual(data_set.size(tag), len(value))
+ self.assertTrue(data_set.is_real(tag))
+ self.assertSequenceEqual(data_set.as_real(tag), value)
def test_string_element(self):
tag = odil.registry.SelectorCSValue
value = ["foo", "bar"]
data_set = odil.DataSet()
- data_set.add(tag, odil.Value.Strings(value))
+ data_set.add(tag, value)
self.assertFalse(data_set.empty())
self.assertEqual(data_set.size(), 1)
@@ -81,14 +94,26 @@ class TestDataSet(unittest.TestCase):
self.assertFalse(data_set.empty(tag))
self.assertEqual(data_set.size(tag), 2)
self.assertTrue(data_set.is_string(tag))
- self.assertEqual([x for x in data_set.as_string(tag)], value)
+ self.assertSequenceEqual(data_set.as_string(tag), value)
+
+ value = ["baz"]
+ data_set.set(tag, value)
+
+ self.assertFalse(data_set.empty())
+ self.assertEqual(data_set.size(), 1)
+ self.assertEqual(len(data_set), 1)
+
+ self.assertEqual(data_set.get_vr(tag), odil.VR.CS)
+ self.assertFalse(data_set.empty(tag))
+ self.assertEqual(data_set.size(tag), len(value))
+ self.assertTrue(data_set.is_string(tag))
+ self.assertSequenceEqual(data_set.as_string(tag), value)
def test_data_set_element(self):
tag = odil.registry.SelectorCodeSequenceValue
value = [odil.DataSet(), odil.DataSet()]
data_set = odil.DataSet()
- data_set.add(
- tag, odil.Value.DataSets(value))
+ data_set.add(tag, value)
self.assertFalse(data_set.empty())
self.assertEqual(data_set.size(), 1)
@@ -98,13 +123,26 @@ class TestDataSet(unittest.TestCase):
self.assertFalse(data_set.empty(tag))
self.assertEqual(data_set.size(tag), 2)
self.assertTrue(data_set.is_data_set(tag))
- self.assertEqual([x for x in data_set.as_data_set(tag)], value)
+ self.assertSequenceEqual(data_set.as_data_set(tag), value)
+
+ value = [odil.DataSet()]
+ data_set.set(tag, value)
- def test_string_binary(self):
+ self.assertFalse(data_set.empty())
+ self.assertEqual(data_set.size(), 1)
+ self.assertEqual(len(data_set), 1)
+
+ self.assertEqual(data_set.get_vr(tag), odil.VR.SQ)
+ self.assertFalse(data_set.empty(tag))
+ self.assertEqual(data_set.size(tag), len(value))
+ self.assertTrue(data_set.is_data_set(tag))
+ self.assertSequenceEqual(data_set.as_data_set(tag), value)
+
+ def test_binary_element(self):
tag = odil.registry.RedPaletteColorLookupTableData
- value = [odil.Value.BinaryItem("\x01\x02")]
+ value = [bytearray("\x01\x02\x03")]
data_set = odil.DataSet()
- data_set.add(tag, odil.Value.Binary(value))
+ data_set.add(tag, value)
self.assertFalse(data_set.empty())
self.assertEqual(data_set.size(), 1)
@@ -114,53 +152,67 @@ class TestDataSet(unittest.TestCase):
self.assertFalse(data_set.empty(tag))
self.assertEqual(data_set.size(tag), 1)
self.assertTrue(data_set.is_binary(tag))
- self.assertEqual(
- [x for x in data_set.as_binary(tag)[0]], [x for x in value[0]])
+ self.assertSequenceEqual(
+ [bytearray([x for x in item]) for item in data_set.as_binary(tag)],
+ value)
+
+ value = [bytearray("\x04\x05")]
+ data_set.set(tag, value)
+
+ self.assertFalse(data_set.empty())
+ self.assertEqual(data_set.size(), 1)
+ self.assertEqual(len(data_set), 1)
+
+ self.assertEqual(data_set.get_vr(tag), odil.VR.OW)
+ self.assertFalse(data_set.empty(tag))
+ self.assertEqual(data_set.size(tag), len(value))
+ self.assertTrue(data_set.is_binary(tag))
+ self.assertSequenceEqual(
+ [bytearray([x for x in item]) for item in data_set.as_binary(tag)],
+ value)
def test_getitem(self):
data_set = odil.DataSet()
- data_set.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- self.assertEqual(
- [x for x in data_set[odil.registry.PatientName].as_string()],
- ["Doe^John"])
- self.assertRaises(Exception, lambda x: data_set[odil.registry.PatientID])
+ data_set.add("PatientName", ["Doe^John"])
+ self.assertSequenceEqual(
+ data_set["PatientName"].as_string(), ["Doe^John"])
+ self.assertRaises(Exception, lambda x: data_set["PatientID"])
def test_iter(self):
data_set = odil.DataSet()
- data_set.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- data_set.add(odil.registry.PatientID, odil.Value.Strings(["DJ123"]))
+ data_set.add("PatientName", ["Doe^John"])
+ data_set.add("PatientID", ["DJ123"])
self.assertEqual(
[x.get_name() for x in data_set],
["PatientName", "PatientID"])
def test_keys(self):
data_set = odil.DataSet()
- data_set.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- data_set.add(odil.registry.PatientID, odil.Value.Strings(["DJ123"]))
+ data_set.add("PatientName", ["Doe^John"])
+ data_set.add("PatientID", ["DJ123"])
self.assertEqual(
[x.get_name() for x in data_set.keys()],
["PatientName", "PatientID"])
def test_values(self):
data_set = odil.DataSet()
- data_set.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- data_set.add(odil.registry.PatientID, odil.Value.Strings(["DJ123"]))
+ data_set.add("PatientName", ["Doe^John"])
+ data_set.add("PatientID", ["DJ123"])
self.assertEqual(
[
- [item for item in element.as_string()]
+ [item for item in element.as_string()]
for element in data_set.values()],
[["Doe^John"], ["DJ123"]])
def test_items(self):
data_set = odil.DataSet()
- data_set.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- data_set.add(odil.registry.PatientID, odil.Value.Strings(["DJ123"]))
- self.assertEqual(
+ data_set.add("PatientName", ["Doe^John"])
+ data_set.add("PatientID", ["DJ123"])
+ self.assertSequenceEqual(
[
- [tag.get_name(), [item for item in element.as_string()]]
+ [tag.get_name(), [item for item in element.as_string()]]
for tag, element in data_set.items()],
[["PatientName", ["Doe^John"]], ["PatientID", ["DJ123"]]])
if __name__ == "__main__":
unittest.main()
-
diff --git a/tests/wrappers/test_echo_scp.py b/tests/wrappers/test_echo_scp.py
new file mode 100644
index 0000000..dbf9bc5
--- /dev/null
+++ b/tests/wrappers/test_echo_scp.py
@@ -0,0 +1,72 @@
+import multiprocessing
+import subprocess
+import time
+import unittest
+
+import odil
+
+class TestEchoSCP(unittest.TestCase):
+ def test_echo_scp_release(self):
+ process = multiprocessing.Process(target=lambda: self.run_server(False))
+ process.start()
+ time.sleep(0.5)
+ client_code = self.run_client(False)
+ process.join(2)
+ server_code = process.exitcode
+
+ self.assertEqual(client_code, 0)
+ self.assertEqual(server_code, 0)
+
+ def test_echo_scp_abort(self):
+ process = multiprocessing.Process(target=lambda: self.run_server(True))
+ process.start()
+ time.sleep(0.5)
+ client_code = self.run_client(True)
+ process.join(2)
+ server_code = process.exitcode
+
+ self.assertEqual(client_code, 0)
+ self.assertEqual(server_code, 0)
+
+ def run_client(self, use_abort):
+ command = ["echoscu", "-q"]
+ if use_abort:
+ command.append("--abort")
+ command.extend(["localhost", "11113"])
+
+ return subprocess.call(command)
+
+ def run_server(self, use_abort):
+ called = False
+ def echo_callback(message):
+ called = True
+ return 0
+
+ association = odil.Association()
+ association.set_tcp_timeout(1)
+ association.receive_association("v4", 11113)
+
+ echo_scp = odil.EchoSCP(association)
+ echo_scp.set_callback(echo_callback)
+
+ message = association.receive_message()
+ echo_scp(message)
+
+ termination_ok = False
+
+ try:
+ association.receive_message()
+ except odil.AssociationReleased:
+ if not use_abort:
+ termination_ok = True
+ except odil.AssociationAborted:
+ if use_abort:
+ termination_ok = True
+
+ if called and termination_ok:
+ return 0
+ else:
+ return 1
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/wrappers/test_element.py b/tests/wrappers/test_element.py
index 1fcbe74..01cac2c 100644
--- a/tests/wrappers/test_element.py
+++ b/tests/wrappers/test_element.py
@@ -12,41 +12,42 @@ class TestElement(unittest.TestCase):
def test_integers_constructor(self):
items = [1, 2, 3]
- element = odil.Element(odil.Value.Integers(items), odil.VR.US)
- self.assertEqual([x for x in element.as_int()], items)
+ element = odil.Element(items, odil.VR.US)
+ self.assertSequenceEqual(element.as_int(), items)
self.assertEqual(element.vr, odil.VR.US)
self.assertEqual(element.size(), 3)
self.assertEqual(len(element), 3)
def test_reals_constructor(self):
items = [1.1, 2, 3.3]
- element = odil.Element(odil.Value.Reals(items), odil.VR.FL)
- self.assertEqual([x for x in element.as_real()], items)
+ element = odil.Element(items, odil.VR.FL)
+ self.assertSequenceEqual(element.as_real(), items)
self.assertEqual(element.vr, odil.VR.FL)
self.assertEqual(element.size(), 3)
self.assertEqual(len(element), 3)
def test_strings_constructor(self):
items = ["foo", "bar"]
- element = odil.Element(odil.Value.Strings(items), odil.VR.CS)
- self.assertEqual([x for x in element.as_string()], items)
+ element = odil.Element(items, odil.VR.CS)
+ self.assertSequenceEqual(element.as_string(), items)
self.assertEqual(element.vr, odil.VR.CS)
self.assertEqual(element.size(), 2)
self.assertEqual(len(element), 2)
def test_data_sets_constructor(self):
items = [odil.DataSet(), odil.DataSet()]
- element = odil.Element(odil.Value.DataSets(items), odil.VR.SQ)
- self.assertEqual([x for x in element.as_data_set()], items)
+ element = odil.Element(items, odil.VR.SQ)
+ self.assertSequenceEqual(element.as_data_set(), items)
self.assertEqual(element.vr, odil.VR.SQ)
self.assertEqual(element.size(), 2)
self.assertEqual(len(element), 2)
def test_binary_constructor(self):
- items = [odil.Value.BinaryItem("\x01\x02\x03")]
- element = odil.Element(odil.Value.Binary(items), odil.VR.OB)
- self.assertEqual(
- [x for x in element.as_binary()[0]], [x for x in items[0]])
+ items = [bytearray("\x01\x02\x03")]
+ element = odil.Element(items, odil.VR.OB)
+ self.assertSequenceEqual(
+ [bytearray([x for x in item]) for item in element.as_binary()],
+ items)
self.assertEqual(element.vr, odil.VR.OB)
self.assertEqual(element.size(), 1)
self.assertEqual(len(element), 1)
diff --git a/tests/wrappers/test_exception.py b/tests/wrappers/test_exception.py
new file mode 100644
index 0000000..9c4f561
--- /dev/null
+++ b/tests/wrappers/test_exception.py
@@ -0,0 +1,25 @@
+import unittest
+
+import odil
+
+class TestException(unittest.TestCase):
+ def test_python_generic(self):
+ with self.assertRaises(Exception):
+ raise odil.Exception()
+
+ def test_python_specific(self):
+ with self.assertRaises(odil.Exception):
+ raise odil.Exception()
+
+ def test_cpp_generic(self):
+ tag = odil.Tag(0xdead, 0xbeef)
+ with self.assertRaises(Exception):
+ tag.get_name()
+
+ def test_cpp_specific(self):
+ tag = odil.Tag(0xdead, 0xbeef)
+ with self.assertRaises(odil.Exception):
+ tag.get_name()
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/wrappers/test_find_scp.py b/tests/wrappers/test_find_scp.py
new file mode 100644
index 0000000..9194fde
--- /dev/null
+++ b/tests/wrappers/test_find_scp.py
@@ -0,0 +1,109 @@
+import glob
+import multiprocessing
+import os
+import subprocess
+import time
+import unittest
+
+import odil
+
+class Generator(odil.FindSCP.DataSetGenerator):
+ def __init__(self):
+ odil.FindSCP.DataSetGenerator.__init__(self)
+ self._responses = []
+ self._response_index = None
+
+ def initialize(self, message):
+ data_set_1 = odil.DataSet()
+ data_set_1.add("PatientName", ["Hello^World"])
+ data_set_1.add("PatientID", ["1234"])
+ self._responses.append(data_set_1)
+
+ data_set_2 = odil.DataSet()
+ data_set_2.add("PatientName", ["Doe^John"])
+ data_set_2.add("PatientID", ["5678"])
+ self._responses.append(data_set_2)
+
+ self._response_index = 0
+
+ def done(self):
+ return (self._response_index == len(self._responses))
+
+ def next(self):
+ self._response_index += 1
+
+ def get(self):
+ return self._responses[self._response_index]
+
+class TestFindSCP(unittest.TestCase):
+ def test_find_scp_release(self):
+ process = multiprocessing.Process(target=self.run_server)
+ process.start()
+ time.sleep(0.5)
+ data_sets = self.run_client()
+ process.join(2)
+ server_code = process.exitcode
+
+ self.assertEqual(server_code, 0)
+
+ self.assertEqual(len(data_sets), 2)
+
+ self.assertEqual(len(data_sets[0]), 2)
+
+ self.assertSequenceEqual(
+ data_sets[0].as_string("PatientName"), ["Hello^World"])
+ self.assertSequenceEqual(data_sets[0].as_string("PatientID"), ["1234"])
+
+ self.assertSequenceEqual(
+ data_sets[1].as_string("PatientName"), ["Doe^John"])
+ self.assertSequenceEqual(data_sets[1].as_string("PatientID"), ["5678"])
+
+ def run_client(self):
+ command = [
+ "findscu",
+ "-P", "-k", "QueryRetrieveLevel=PATIENT",
+ "-k", "PatientID=*", "-k", "PatientName",
+ "-q", "-X",
+ "localhost", "11113"]
+
+ retcode = subprocess.call(command)
+ if retcode != 0:
+ return []
+
+ files = sorted(glob.glob("rsp*"))
+ data_sets = [odil.read(x)[1] for x in files]
+ for file_ in files:
+ os.remove(file_)
+
+ return data_sets
+
+ def run_server(self):
+ called = False
+
+ association = odil.Association()
+ association.set_tcp_timeout(1)
+ association.receive_association("v4", 11113)
+
+ find_scp = odil.FindSCP(association)
+ generator = Generator()
+ find_scp.set_generator(generator)
+
+ message = association.receive_message()
+ find_scp(message)
+
+ termination_ok = False
+
+ try:
+ association.receive_message()
+ except odil.AssociationReleased:
+ termination_ok = True
+ except odil.AssociationAborted:
+ pass
+
+ if called and termination_ok:
+ return 0
+ else:
+ return 1
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/wrappers/test_find_scu.py b/tests/wrappers/test_find_scu.py
index 40eb177..a5f0a80 100644
--- a/tests/wrappers/test_find_scu.py
+++ b/tests/wrappers/test_find_scu.py
@@ -19,9 +19,9 @@ class TestFindSCU(PeerFixtureBase):
)
self.query = odil.DataSet()
- self.query.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- self.query.add(odil.registry.QueryRetrieveLevel, odil.Value.Strings(["PATIENT"]))
- self.query.add(odil.registry.PatientID)
+ self.query.add("PatientName", ["Doe^John"])
+ self.query.add("QueryRetrieveLevel", ["PATIENT"])
+ self.query.add("PatientID")
def test_without_callback(self):
find = odil.FindSCU(self.association)
@@ -29,9 +29,8 @@ class TestFindSCU(PeerFixtureBase):
data_sets = find.find(self.query)
self.assertEqual(len(data_sets), 1)
- self.assertEqual(
- [x for x in data_sets[0].as_string(odil.registry.PatientID)],
- ["DJ001"])
+ self.assertSequenceEqual(
+ data_sets[0].as_string("PatientID"), ["DJ001"])
def test_with_callback(self):
data_sets = []
@@ -43,9 +42,8 @@ class TestFindSCU(PeerFixtureBase):
find.find(self.query, callback)
self.assertEqual(len(data_sets), 1)
- self.assertEqual(
- [x for x in data_sets[0].as_string(odil.registry.PatientID)],
- ["DJ001"])
+ self.assertSequenceEqual(
+ data_sets[0].as_string("PatientID"), ["DJ001"])
if __name__ == "__main__":
unittest.main()
diff --git a/tests/wrappers/test_get_scp.py b/tests/wrappers/test_get_scp.py
new file mode 100644
index 0000000..96f2b2e
--- /dev/null
+++ b/tests/wrappers/test_get_scp.py
@@ -0,0 +1,133 @@
+import glob
+import multiprocessing
+import os
+import subprocess
+import time
+import unittest
+
+import odil
+
+class Generator(odil.GetSCP.DataSetGenerator):
+ def __init__(self):
+ odil.GetSCP.DataSetGenerator.__init__(self)
+ self._responses = []
+ self._response_index = None
+
+ def initialize(self, message):
+ data_set_1 = odil.DataSet()
+ data_set_1.add("SOPClassUID", [odil.registry.RawDataStorage])
+ data_set_1.add(
+ "SOPInstanceUID",
+ ["1.2.826.0.1.3680043.9.5560.3127449359877365688774406533090568532"])
+ data_set_1.add("PatientName", ["Hello^World"])
+ data_set_1.add("PatientID", ["1234"])
+ self._responses.append(data_set_1)
+
+ data_set_2 = odil.DataSet()
+ data_set_2.add("SOPClassUID", [odil.registry.RawDataStorage])
+ data_set_2.add(
+ "SOPInstanceUID",
+ ["1.2.826.0.1.3680043.9.5560.3221615743193123463515381981101110692"])
+ data_set_2.add("PatientName", ["Doe^John"])
+ data_set_2.add("PatientID", ["5678"])
+ self._responses.append(data_set_2)
+
+ self._response_index = 0
+
+ def done(self):
+ return (self._response_index == len(self._responses))
+
+ def next(self):
+ self._response_index += 1
+
+ def get(self):
+ return self._responses[self._response_index]
+
+ def count(self):
+ return 2
+
+class TestGetSCP(unittest.TestCase):
+ def test_get_scp_release(self):
+ process = multiprocessing.Process(target=self.run_server)
+ process.start()
+ time.sleep(0.5)
+ data_sets = self.run_client()
+ process.join(2)
+ server_code = process.exitcode
+
+ self.assertEqual(server_code, 0)
+
+ self.assertEqual(len(data_sets), 2)
+
+ self.assertEqual(len(data_sets[0]), 4)
+
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPClassUID"),
+ [odil.registry.RawDataStorage])
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
+ ["1.2.826.0.1.3680043.9.5560.3127449359877365688774406533090568532"])
+ self.assertSequenceEqual(
+ data_sets[0].as_string("PatientName"), ["Hello^World"])
+ self.assertSequenceEqual(data_sets[0].as_string("PatientID"), ["1234"])
+
+ self.assertSequenceEqual(
+ data_sets[1].as_string("SOPClassUID"),
+ [odil.registry.RawDataStorage])
+ self.assertSequenceEqual(
+ data_sets[1].as_string("SOPInstanceUID"),
+ ["1.2.826.0.1.3680043.9.5560.3221615743193123463515381981101110692"])
+ self.assertSequenceEqual(
+ data_sets[1].as_string("PatientName"), ["Doe^John"])
+ self.assertSequenceEqual(data_sets[1].as_string("PatientID"), ["5678"])
+
+ def run_client(self):
+ command = [
+ "getscu",
+ "-ll", "error",
+ "-P", "-k", "QueryRetrieveLevel=PATIENT",
+ "-k", "PatientID=*", "-k", "PatientName",
+ "+B",
+ "localhost", "11113"]
+
+ retcode = subprocess.call(command)
+ if retcode != 0:
+ return []
+
+ files = sorted(glob.glob("{}*".format(odil.uid_prefix)))
+ data_sets = [odil.read(x)[1] for x in files]
+ for file_ in files:
+ os.remove(file_)
+
+ return data_sets
+
+ def run_server(self):
+ called = False
+
+ association = odil.Association()
+ association.set_tcp_timeout(1)
+ association.receive_association("v4", 11113)
+
+ get_scp = odil.GetSCP(association)
+ generator = Generator()
+ get_scp.set_generator(generator)
+
+ message = association.receive_message()
+ get_scp(message)
+
+ termination_ok = False
+
+ try:
+ association.receive_message()
+ except odil.AssociationReleased:
+ termination_ok = True
+ except odil.AssociationAborted:
+ pass
+
+ if called and termination_ok:
+ return 0
+ else:
+ return 1
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/wrappers/test_get_scu.py b/tests/wrappers/test_get_scu.py
index 7d2dd35..2940aa7 100644
--- a/tests/wrappers/test_get_scu.py
+++ b/tests/wrappers/test_get_scu.py
@@ -23,8 +23,8 @@ class TestGetSCU(PeerFixtureBase):
])
self.query = odil.DataSet()
- self.query.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- self.query.add(odil.registry.QueryRetrieveLevel, odil.Value.Strings(["PATIENT"]))
+ self.query.add("PatientName", ["Doe^John"])
+ self.query.add("QueryRetrieveLevel", ["PATIENT"])
def test_without_callback(self):
get = odil.GetSCU(self.association)
@@ -32,22 +32,58 @@ class TestGetSCU(PeerFixtureBase):
data_sets = get.get(self.query)
self.assertEqual(len(data_sets), 1)
- self.assertEqual(
- [x for x in data_sets[0].as_string(odil.registry.SOPInstanceUID)],
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
["2.25.95090344942250266709587559073467305647"])
- def test_with_callback(self):
+ def test_both_callbacks(self):
data_sets = []
- def callback(data_set):
+ messages = []
+ def store_callback(data_set):
data_sets.append(data_set)
+ def get_callback(message):
+ messages.append(message)
get = odil.GetSCU(self.association)
- get.set_affected_sop_class(odil.registry.PatientRootQueryRetrieveInformationModelGET)
- get.get(self.query, callback)
+ get.set_affected_sop_class(
+ odil.registry.PatientRootQueryRetrieveInformationModelGET)
+ get.get(self.query, store_callback, get_callback)
self.assertEqual(len(data_sets), 1)
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
+ ["2.25.95090344942250266709587559073467305647"])
+
+ self.assertEqual(len(messages), 2)
+
+ self.assertEqual(
+ messages[0].get_number_of_remaining_sub_operations(), 0)
+ self.assertEqual(
+ messages[0].get_number_of_completed_sub_operations(), 1)
+ self.assertEqual(messages[0].get_number_of_failed_sub_operations(), 0)
+ self.assertEqual(messages[0].get_number_of_warning_sub_operations(), 0)
+
+ self.assertFalse(messages[1].has_number_of_remaining_sub_operations())
+ self.assertEqual(
+ messages[1].has_number_of_completed_sub_operations(), 1)
self.assertEqual(
- [x for x in data_sets[0].as_string(odil.registry.SOPInstanceUID)],
+ messages[1].get_number_of_failed_sub_operations(), 0)
+ self.assertEqual(
+ messages[1].get_number_of_warning_sub_operations(), 0)
+
+ def test_only_store_callback(self):
+ data_sets = []
+ def store_callback(data_set):
+ data_sets.append(data_set)
+
+ get = odil.GetSCU(self.association)
+ get.set_affected_sop_class(
+ odil.registry.PatientRootQueryRetrieveInformationModelGET)
+ get.get(self.query, store_callback)
+
+ self.assertEqual(len(data_sets), 1)
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
["2.25.95090344942250266709587559073467305647"])
if __name__ == "__main__":
diff --git a/tests/wrappers/test_move_scp.py b/tests/wrappers/test_move_scp.py
new file mode 100644
index 0000000..d1e2067
--- /dev/null
+++ b/tests/wrappers/test_move_scp.py
@@ -0,0 +1,157 @@
+import glob
+import multiprocessing
+import os
+import subprocess
+import time
+import unittest
+
+import odil
+
+class Generator(odil.MoveSCP.DataSetGenerator):
+ def __init__(self, association):
+ odil.MoveSCP.DataSetGenerator.__init__(self)
+ self._association = association
+ self._responses = []
+ self._response_index = None
+
+ def initialize(self, message):
+ data_set_1 = odil.DataSet()
+ data_set_1.add("SOPClassUID", [odil.registry.RawDataStorage])
+ data_set_1.add(
+ "SOPInstanceUID",
+ ["1.2.826.0.1.3680043.9.5560.3127449359877365688774406533090568532"])
+ data_set_1.add("PatientName", ["Hello^World"])
+ data_set_1.add("PatientID", ["1234"])
+ self._responses.append(data_set_1)
+
+ data_set_2 = odil.DataSet()
+ data_set_2.add("SOPClassUID", [odil.registry.RawDataStorage])
+ data_set_2.add(
+ "SOPInstanceUID",
+ ["1.2.826.0.1.3680043.9.5560.3221615743193123463515381981101110692"])
+ data_set_2.add("PatientName", ["Doe^John"])
+ data_set_2.add("PatientID", ["5678"])
+ self._responses.append(data_set_2)
+
+ self._response_index = 0
+
+ def done(self):
+ return (self._response_index == len(self._responses))
+
+ def next(self):
+ self._response_index += 1
+
+ def get(self):
+ return self._responses[self._response_index]
+
+ def count(self):
+ return 2
+
+ def get_association(self, request):
+ move_association = odil.Association()
+ move_association.set_peer_host(self._association.get_peer_host())
+ move_association.set_peer_port(11114)
+
+ presentation_contexts = []
+ for entry in odil.registry.uids_dictionary:
+ if entry.data().name[-7:] == "Storage":
+ presentation_context = odil.AssociationParameters.PresentationContext(
+ 1+2*len(presentation_contexts),
+ entry.key(),
+ [odil.registry.ImplicitVRLittleEndian],
+ True, False)
+ presentation_contexts.append(presentation_context)
+
+ move_association.update_parameters()\
+ .set_calling_ae_title(
+ self._association.get_negotiated_parameters().get_called_ae_title())\
+ .set_called_ae_title(request.get_move_destination())\
+ .set_presentation_contexts(presentation_contexts)
+
+ return move_association
+
+class TestMoveSCP(unittest.TestCase):
+ def test_move_scp_release(self):
+ process = multiprocessing.Process(target=self.run_server)
+ process.start()
+ time.sleep(0.5)
+ data_sets = self.run_client()
+ process.join(2)
+ server_code = process.exitcode
+
+ self.assertEqual(server_code, 0)
+
+ self.assertEqual(len(data_sets), 2)
+
+ self.assertEqual(len(data_sets[0]), 4)
+
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPClassUID"),
+ [odil.registry.RawDataStorage])
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
+ ["1.2.826.0.1.3680043.9.5560.3127449359877365688774406533090568532"])
+ self.assertSequenceEqual(
+ data_sets[0].as_string("PatientName"), ["Hello^World"])
+ self.assertSequenceEqual(data_sets[0].as_string("PatientID"), ["1234"])
+
+ self.assertSequenceEqual(
+ data_sets[1].as_string("SOPClassUID"),
+ [odil.registry.RawDataStorage])
+ self.assertSequenceEqual(
+ data_sets[1].as_string("SOPInstanceUID"),
+ ["1.2.826.0.1.3680043.9.5560.3221615743193123463515381981101110692"])
+ self.assertSequenceEqual(
+ data_sets[1].as_string("PatientName"), ["Doe^John"])
+ self.assertSequenceEqual(data_sets[1].as_string("PatientID"), ["5678"])
+
+ def run_client(self):
+ command = [
+ "movescu",
+ "-ll", "error",
+ "-P", "-k", "QueryRetrieveLevel=PATIENT",
+ "-k", "PatientID=*", "-k", "PatientName",
+ "+P", "11114",
+ "localhost", "11113"]
+
+ retcode = subprocess.call(command)
+ if retcode != 0:
+ return []
+
+ files = sorted(glob.glob("RAW*"))
+ data_sets = [odil.read(x)[1] for x in files]
+ for file_ in files:
+ os.remove(file_)
+
+ return data_sets
+
+ def run_server(self):
+ called = False
+
+ association = odil.Association()
+ association.set_tcp_timeout(1)
+ association.receive_association("v4", 11113)
+
+ move_scp = odil.MoveSCP(association)
+ generator = Generator(association)
+ move_scp.set_generator(generator)
+
+ message = association.receive_message()
+ move_scp(message)
+
+ termination_ok = False
+
+ try:
+ association.receive_message()
+ except odil.AssociationReleased:
+ termination_ok = True
+ except odil.AssociationAborted:
+ pass
+
+ if called and termination_ok:
+ return 0
+ else:
+ return 1
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/tests/wrappers/test_move_scu.py b/tests/wrappers/test_move_scu.py
index 0092a57..870f909 100644
--- a/tests/wrappers/test_move_scu.py
+++ b/tests/wrappers/test_move_scu.py
@@ -10,7 +10,7 @@ from peer_fixture_base import PeerFixtureBase
class TestMoveSCU(PeerFixtureBase):
def setUp(self):
PeerFixtureBase.setUp(
- self,
+ self,
[
odil.AssociationParameters.PresentationContext(
1, odil.registry.PatientRootQueryRetrieveInformationModelMOVE,
@@ -23,42 +23,86 @@ class TestMoveSCU(PeerFixtureBase):
])
self.query = odil.DataSet()
- self.query.add(odil.registry.PatientName, odil.Value.Strings(["Doe^John"]))
- self.query.add(odil.registry.QueryRetrieveLevel, odil.Value.Strings(["PATIENT"]))
-
+ self.query.add("PatientName", ["Doe^John"])
+ self.query.add("QueryRetrieveLevel", ["PATIENT"])
+
def test_default_constructor(self):
move = odil.MoveSCU(self.association)
self.assertEqual(move.get_move_destination(), "")
-
+ self.assertEqual(move.get_incoming_port(), 0)
+
def test_move_destination(self):
move = odil.MoveSCU(self.association)
move.set_move_destination("remote")
self.assertEqual(move.get_move_destination(), "remote")
+ def test_incoming_port(self):
+ move = odil.MoveSCU(self.association)
+ move.set_incoming_port(11113)
+ self.assertEqual(move.get_incoming_port(), 11113)
+
def test_without_callback(self):
move = odil.MoveSCU(self.association)
move.set_affected_sop_class(odil.registry.PatientRootQueryRetrieveInformationModelMOVE)
move.set_move_destination("LOCAL")
+ move.set_incoming_port(11113)
data_sets = move.move(self.query)
self.assertEqual(len(data_sets), 1)
- self.assertEqual(
- [x for x in data_sets[0].as_string(odil.registry.SOPInstanceUID)],
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
["2.25.95090344942250266709587559073467305647"])
- def test_with_callback(self):
+ def test_both_callback(self):
data_sets = []
- def callback(data_set):
+ messages = []
+ def store_callback(data_set):
data_sets.append(data_set)
+ def move_callback(message):
+ messages.append(message)
move = odil.MoveSCU(self.association)
move.set_affected_sop_class(odil.registry.PatientRootQueryRetrieveInformationModelMOVE)
move.set_move_destination("LOCAL")
- move.move(self.query, callback)
+ move.set_incoming_port(11113)
+ move.move(self.query, store_callback, move_callback)
self.assertEqual(len(data_sets), 1)
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
+ ["2.25.95090344942250266709587559073467305647"])
+
+ self.assertEqual(len(messages), 2)
+
+ self.assertEqual(
+ messages[0].get_number_of_remaining_sub_operations(), 0)
+ self.assertEqual(
+ messages[0].get_number_of_completed_sub_operations(), 1)
+ self.assertEqual(messages[0].get_number_of_failed_sub_operations(), 0)
+ self.assertEqual(messages[0].get_number_of_warning_sub_operations(), 0)
+
+ self.assertFalse(messages[1].has_number_of_remaining_sub_operations())
self.assertEqual(
- [x for x in data_sets[0].as_string(odil.registry.SOPInstanceUID)],
+ messages[1].has_number_of_completed_sub_operations(), 1)
+ self.assertEqual(
+ messages[1].get_number_of_failed_sub_operations(), 0)
+ self.assertEqual(
+ messages[1].get_number_of_warning_sub_operations(), 0)
+
+ def test_store_only_callback(self):
+ data_sets = []
+ def store_callback(data_set):
+ data_sets.append(data_set)
+
+ move = odil.MoveSCU(self.association)
+ move.set_affected_sop_class(odil.registry.PatientRootQueryRetrieveInformationModelMOVE)
+ move.set_move_destination("LOCAL")
+ move.set_incoming_port(11113)
+ move.move(self.query, store_callback, None)
+
+ self.assertEqual(len(data_sets), 1)
+ self.assertSequenceEqual(
+ data_sets[0].as_string("SOPInstanceUID"),
["2.25.95090344942250266709587559073467305647"])
if __name__ == "__main__":
diff --git a/tests/wrappers/test_store_scu.py b/tests/wrappers/test_store_scu.py
index 20bb4fb..74c784f 100644
--- a/tests/wrappers/test_store_scu.py
+++ b/tests/wrappers/test_store_scu.py
@@ -19,23 +19,18 @@ class TestStoreSCU(PeerFixtureBase):
])
self.data_set = odil.DataSet()
+ self.data_set.add("ImageType", ["ORIGINAL", "PRIMARY", "OTHER"])
+ self.data_set.add("PatientID", ["1234"])
self.data_set.add(
- odil.registry.ImageType,
- odil.Value.Strings(["ORIGINAL", "PRIMARY", "OTHER"]))
+ "StudyInstanceUID",
+ ["2.25.386726390606491051215227596277040710"])
self.data_set.add(
- odil.registry.PatientID, odil.Value.Strings(["1234"]))
+ "SeriesInstanceUID",
+ ["2.25.235367796740370588607388995952651763168"])
+ self.data_set.add("SOPClassUID", [odil.registry.RawDataStorage])
self.data_set.add(
- odil.registry.StudyInstanceUID,
- odil.Value.Strings(["2.25.386726390606491051215227596277040710"]))
- self.data_set.add(
- odil.registry.SeriesInstanceUID,
- odil.Value.Strings(["2.25.235367796740370588607388995952651763168"]))
- self.data_set.add(
- odil.registry.SOPClassUID,
- odil.Value.Strings([odil.registry.RawDataStorage]))
- self.data_set.add(
- odil.registry.SOPInstanceUID,
- odil.Value.Strings(["2.25.294312554735929033890522327215919068328"]))
+ "SOPInstanceUID",
+ ["2.25.294312554735929033890522327215919068328"])
def test_affected_sop_class_uid(self):
store = odil.StoreSCU(self.association)
diff --git a/tests/wrappers/test_value.py b/tests/wrappers/test_value.py
index 035b972..f4b2f79 100644
--- a/tests/wrappers/test_value.py
+++ b/tests/wrappers/test_value.py
@@ -5,33 +5,40 @@ import odil
class TestValue(unittest.TestCase):
def test_empty_constructor(self):
value = odil.Value()
- self.assertTrue(value.empty())
-
+ self.assertEqual(value.type, odil.Value.Type.Empty)
+ self.assertTrue(value.empty)
+
def test_integers_constructor(self):
items = [1, 2, 3]
- value = odil.Value(odil.Value.Integers(items))
- self.assertEqual([x for x in value.as_integers()], items)
-
+ value = odil.Value(items)
+ self.assertEqual(value.type, odil.Value.Type.Integers)
+ self.assertSequenceEqual(value.as_integers(), items)
+
def test_reals_constructor(self):
- items = [1.1, 2, 3.3]
- value = odil.Value(odil.Value.Reals(items))
- self.assertEqual([x for x in value.as_reals()], items)
-
+ items = [1.1, 2., 3.3]
+ value = odil.Value(items)
+ self.assertEqual(value.type, odil.Value.Type.Reals)
+ self.assertSequenceEqual(value.as_reals(), items)
+
def test_strings_constructor(self):
items = ["foo", "bar"]
- value = odil.Value(odil.Value.Strings(items))
- self.assertEqual([x for x in value.as_strings()], items)
-
+ value = odil.Value(items)
+ self.assertEqual(value.type, odil.Value.Type.Strings)
+ self.assertSequenceEqual(value.as_strings(), items)
+
def test_data_sets_constructor(self):
items = [odil.DataSet(), odil.DataSet()]
- value = odil.Value(odil.Value.DataSets(items))
- self.assertEqual([x for x in value.as_data_sets()], items)
-
+ value = odil.Value(items)
+ self.assertEqual(value.type, odil.Value.Type.DataSets)
+ self.assertSequenceEqual(value.as_data_sets(), items)
+
def test_binary_constructor(self):
- items = [odil.Value.BinaryItem("\x01\x02\x03")]
- value = odil.Value(odil.Value.Binary(items))
- self.assertEqual(
- [x for x in value.as_binary()[0]], [x for x in items[0]])
+ items = [bytearray("\x01\x02\x03")]
+ value = odil.Value(items)
+ self.assertEqual(value.type, odil.Value.Type.Binary)
+ self.assertSequenceEqual(
+ [bytearray([x for x in item]) for item in value.as_binary()],
+ items)
class TestValueIntegers(unittest.TestCase):
def test_empty_constructor(self):
@@ -85,4 +92,3 @@ class TestValueBinary(unittest.TestCase):
if __name__ == "__main__":
unittest.main()
-
diff --git a/tests/wrappers/test_vr_finder.py b/tests/wrappers/test_vr_finder.py
new file mode 100644
index 0000000..4aa9570
--- /dev/null
+++ b/tests/wrappers/test_vr_finder.py
@@ -0,0 +1,16 @@
+import unittest
+
+import odil
+
+class TestVRFinder(unittest.TestCase):
+ def test_default_finder(self):
+ finder = odil.VRFinder()
+ data_set = odil.DataSet()
+ data_set.add(odil.registry.BitsAllocated, [8])
+ vr = finder(
+ odil.Tag(0x7fe0, 0x0010), data_set,
+ odil.registry.ExplicitVRLittleEndian)
+ self.assertEqual(vr, odil.VR.OB)
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/wrappers/Assocation.cpp b/wrappers/Assocation.cpp
index 9188ce5..50872b0 100644
--- a/wrappers/Assocation.cpp
+++ b/wrappers/Assocation.cpp
@@ -6,15 +6,66 @@
* for details.
************************************************************************/
+#include <boost/asio.hpp>
#include <boost/python.hpp>
#include "odil/Association.h"
+#include "exception_factory.h"
+
+namespace
+{
+
+PyObject * wrapped_AssociationReleased;
+PyObject * wrapped_AssociationAborted;
+
+void receive_association(
+ odil::Association & association, std::string protocol, unsigned short port)
+{
+ if(protocol == "v4")
+ {
+ association.receive_association(boost::asio::ip::tcp::v4(), port);
+ }
+}
+
+void released_translator(odil::AssociationReleased const & e)
+{
+ PyErr_SetString(wrapped_AssociationReleased, e.what());
+}
+
+void aborted_translator(odil::AssociationAborted const & e)
+{
+ PyErr_SetString(wrapped_AssociationAborted, e.what());
+}
+
+float get_tcp_timeout(odil::Association const & association)
+{
+ return association.get_tcp_timeout().total_microseconds()/1000000.;
+}
+
+void set_tcp_timeout(odil::Association & association, float seconds)
+{
+ association.set_tcp_timeout(
+ boost::posix_time::microseconds(seconds*1000000.));
+}
+
+}
+
void wrap_Association()
{
using namespace boost::python;
using namespace odil;
-
+
+ object wrapped_exception = scope().attr("Exception");
+
+ wrapped_AssociationReleased = exception_factory(
+ "AssociationReleased", wrapped_exception.ptr());
+ register_exception_translator<AssociationReleased>(released_translator);
+
+ wrapped_AssociationAborted = exception_factory(
+ "AssociationAborted", wrapped_exception.ptr());
+ register_exception_translator<AssociationAborted>(aborted_translator);
+
scope association_scope = class_<Association>("Association", init<>())
.def("get_peer_host", &Association::get_peer_host,
return_value_policy<copy_const_reference>())
@@ -41,15 +92,18 @@ void wrap_Association()
&Association::get_negotiated_parameters,
return_value_policy<reference_existing_object>()
)
- // TCP timeout
+ .def("get_tcp_timeout", &get_tcp_timeout)
+ .def("set_tcp_timeout", &set_tcp_timeout)
// Message timeout
.def("is_associated", &Association::is_associated)
.def("associate", &Association::associate)
// Receive association
+ .def("receive_association", &receive_association)
//.def("reject", &Association::reject)
.def("release", &Association::release)
.def("abort", &Association::abort)
// Receive message
+ .def("receive_message", &Association::receive_message)
// Send message
.def("next_message_id", &Association::next_message_id)
;
diff --git a/wrappers/BasicDirectoryCreator.cpp b/wrappers/BasicDirectoryCreator.cpp
new file mode 100644
index 0000000..85d22f8
--- /dev/null
+++ b/wrappers/BasicDirectoryCreator.cpp
@@ -0,0 +1,130 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <string>
+#include <vector>
+
+#include <boost/python.hpp>
+#include <boost/shared_ptr.hpp>
+
+#include "odil/BasicDirectoryCreator.h"
+
+namespace
+{
+
+boost::python::list get_files(odil::BasicDirectoryCreator const & creator)
+{
+ boost::python::list result;
+ for(auto const & file: creator.files)
+ {
+ result.append(file);
+ }
+
+ return result;
+}
+
+void set_files(
+ odil::BasicDirectoryCreator & creator,
+ boost::python::list const & files_python)
+{
+ std::vector<std::string> files_cpp(boost::python::len(files_python));
+ for(int i = 0; i<boost::python::len(files_python); ++i)
+ {
+ files_cpp[i] = boost::python::extract<std::string>(files_python[i]);
+ }
+ creator.files = files_cpp;
+}
+
+boost::python::dict
+get_extra_record_keys(odil::BasicDirectoryCreator const & creator)
+{
+ boost::python::dict result;
+ for(auto const & item: creator.extra_record_keys)
+ {
+ boost::python::list values;
+ for(auto const & value_cpp: item.second)
+ {
+ boost::python::list value_python;
+ value_python.append(value_cpp.first);
+ value_python.append(value_cpp.second);
+ values.append(value_python);
+ }
+ result[item.first] = values;
+ }
+ return result;
+}
+
+void
+set_extra_record_keys(
+ odil::BasicDirectoryCreator & creator,
+ boost::python::dict const & extra_record_keys_python)
+{
+ odil::BasicDirectoryCreator::RecordKeyMap extra_record_keys_cpp;
+
+ auto items = extra_record_keys_python.items();
+ for(int item_index=0; item_index<boost::python::len(items); ++item_index)
+ {
+ auto item = items[item_index];
+
+ auto key_python = item[0];
+ std::string const key_cpp = boost::python::extract<std::string>(key_python);
+
+ auto value_python = item[1];
+ std::vector<odil::BasicDirectoryCreator::RecordKey> value_cpp;
+ for(int value_index=0; value_index<boost::python::len(value_python); ++value_index)
+ {
+ auto record_key_python = value_python[value_index];
+
+ auto tag_python = record_key_python[0];
+ odil::Tag const tag_cpp = boost::python::extract<odil::Tag>(tag_python);
+
+ auto type_python = record_key_python[1];
+ int const type_cpp = boost::python::extract<int>(type_python);
+
+ value_cpp.push_back(
+ odil::BasicDirectoryCreator::RecordKey(tag_cpp, type_cpp));
+ }
+
+ extra_record_keys_cpp[key_cpp] = value_cpp;
+ }
+
+ creator.extra_record_keys = extra_record_keys_cpp;
+}
+
+boost::shared_ptr<odil::BasicDirectoryCreator>
+constructor(
+ std::string const & root, boost::python::list const & files,
+ boost::python::dict const & extra_record_keys=boost::python::dict())
+{
+ // Old versions of Boost.Python (Debian 7, Ubuntu 12.04) do not like
+ // std::shared_ptr
+ auto creator = new odil::BasicDirectoryCreator(root);
+ set_files(*creator, files);
+ set_extra_record_keys(*creator, extra_record_keys);
+ return boost::shared_ptr<odil::BasicDirectoryCreator>(creator);
+}
+
+}
+
+void wrap_BasicDirectoryCreator()
+{
+ using namespace boost::python;
+ using namespace odil;
+
+ class_<BasicDirectoryCreator>("BasicDirectoryCreator", no_init)
+ .def(
+ "__init__",
+ make_constructor(constructor, default_call_policies(),
+ (arg("root"), arg("files"), arg("extra_record_keys")=dict())))
+ .def_readwrite("root", &BasicDirectoryCreator::root)
+ .add_property("files", &get_files, &set_files)
+ .add_property(
+ "extra_record_keys", &get_extra_record_keys, &set_extra_record_keys)
+ .def("__call__", &BasicDirectoryCreator::operator())
+ ;
+}
diff --git a/wrappers/CEchoRequest.cpp b/wrappers/CEchoRequest.cpp
new file mode 100644
index 0000000..a8078fe
--- /dev/null
+++ b/wrappers/CEchoRequest.cpp
@@ -0,0 +1,30 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CEchoRequest.h"
+
+void wrap_CEchoRequest()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CEchoRequest, bases<Request>>(
+ "CEchoRequest", init<Value::Integer, Value::String const &>())
+ .def(init<Message const &>())
+ .def(
+ "get_affected_sop_class_uid",
+ &CEchoRequest::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CEchoRequest::set_affected_sop_class_uid)
+ ;
+}
diff --git a/wrappers/CFindRequest.cpp b/wrappers/CFindRequest.cpp
new file mode 100644
index 0000000..378c3c4
--- /dev/null
+++ b/wrappers/CFindRequest.cpp
@@ -0,0 +1,38 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CFindRequest.h"
+
+void wrap_CFindRequest()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CFindRequest, bases<Request>>(
+ "CFindRequest",
+ init<
+ Value::Integer, Value::String const &, Value::Integer,
+ DataSet const &
+ >())
+ .def(init<Message>())
+ .def(
+ "get_affected_sop_class_uid",
+ &CFindRequest::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CFindRequest::set_affected_sop_class_uid)
+ .def(
+ "get_priority", &CFindRequest::get_priority,
+ return_value_policy<copy_const_reference>())
+ .def("set_priority", &CFindRequest::set_priority)
+ ;
+}
diff --git a/wrappers/CGetRequest.cpp b/wrappers/CGetRequest.cpp
new file mode 100644
index 0000000..6798749
--- /dev/null
+++ b/wrappers/CGetRequest.cpp
@@ -0,0 +1,38 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CGetRequest.h"
+
+void wrap_CGetRequest()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CGetRequest, bases<Request>>(
+ "CGetRequest",
+ init<
+ Value::Integer, Value::String const &, Value::Integer,
+ DataSet const &
+ >())
+ .def(init<Message>())
+ .def(
+ "get_affected_sop_class_uid",
+ &CGetRequest::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CGetRequest::set_affected_sop_class_uid)
+ .def(
+ "get_priority", &CGetRequest::get_priority,
+ return_value_policy<copy_const_reference>())
+ .def("set_priority", &CGetRequest::set_priority)
+ ;
+}
diff --git a/wrappers/CGetResponse.cpp b/wrappers/CGetResponse.cpp
new file mode 100644
index 0000000..40f5334
--- /dev/null
+++ b/wrappers/CGetResponse.cpp
@@ -0,0 +1,79 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CGetResponse.h"
+
+void wrap_CGetResponse()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CGetResponse, bases<Response>>(
+ "CGetResponse", init<Value::Integer, Value::Integer>())
+ .def(init<Value::Integer, Value::Integer, DataSet const &>())
+ .def(init<Message>())
+ .def("has_message_id", &CGetResponse::has_message_id)
+ .def(
+ "get_message_id", &CGetResponse::get_message_id,
+ return_value_policy<copy_const_reference>())
+ .def("set_message_id", &CGetResponse::set_message_id)
+ .def(
+ "has_affected_sop_class_uid",
+ &CGetResponse::has_affected_sop_class_uid)
+ .def(
+ "get_affected_sop_class_uid",
+ &CGetResponse::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CGetResponse::set_affected_sop_class_uid)
+ .def(
+ "has_number_of_remaining_sub_operations",
+ &CGetResponse::has_number_of_remaining_sub_operations)
+ .def(
+ "get_number_of_remaining_sub_operations",
+ &CGetResponse::get_number_of_remaining_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_remaining_sub_operations",
+ &CGetResponse::set_number_of_remaining_sub_operations)
+ .def(
+ "has_number_of_completed_sub_operations",
+ &CGetResponse::has_number_of_completed_sub_operations)
+ .def(
+ "get_number_of_completed_sub_operations",
+ &CGetResponse::get_number_of_completed_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_completed_sub_operations",
+ &CGetResponse::set_number_of_completed_sub_operations)
+ .def(
+ "has_number_of_failed_sub_operations",
+ &CGetResponse::has_number_of_failed_sub_operations)
+ .def(
+ "get_number_of_failed_sub_operations",
+ &CGetResponse::get_number_of_failed_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_failed_sub_operations",
+ &CGetResponse::set_number_of_failed_sub_operations)
+ .def(
+ "has_number_of_warning_sub_operations",
+ &CGetResponse::has_number_of_warning_sub_operations)
+ .def(
+ "get_number_of_warning_sub_operations",
+ &CGetResponse::get_number_of_warning_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_warning_sub_operations",
+ &CGetResponse::set_number_of_warning_sub_operations)
+ ;
+}
diff --git a/wrappers/CMakeLists.txt b/wrappers/CMakeLists.txt
index a5a0de3..d5ab3b8 100644
--- a/wrappers/CMakeLists.txt
+++ b/wrappers/CMakeLists.txt
@@ -10,7 +10,7 @@ link_directories(${Boost_LIBRARY_DIRS})
file(GLOB_RECURSE files "*.cpp")
python_add_module(pyodil SHARED ${files})
set_target_properties(
- pyodil PROPERTIES OUTPUT_NAME odil)
+ pyodil PROPERTIES OUTPUT_NAME odil FOLDER "Wrappers")
if(APPLE)
set_target_properties(pyodil PROPERTIES SUFFIX ".so")
endif()
diff --git a/wrappers/CMoveRequest.cpp b/wrappers/CMoveRequest.cpp
new file mode 100644
index 0000000..fee337c
--- /dev/null
+++ b/wrappers/CMoveRequest.cpp
@@ -0,0 +1,42 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CMoveRequest.h"
+
+void wrap_CMoveRequest()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CMoveRequest, bases<Request>>(
+ "CMoveRequest",
+ init<
+ Value::Integer, Value::String const &, Value::Integer,
+ Value::String const &, DataSet const &
+ >())
+ .def(init<Message>())
+ .def(
+ "get_affected_sop_class_uid",
+ &CMoveRequest::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CMoveRequest::set_affected_sop_class_uid)
+ .def(
+ "get_priority", &CMoveRequest::get_priority,
+ return_value_policy<copy_const_reference>())
+ .def("set_priority", &CMoveRequest::set_priority)
+ .def(
+ "get_move_destination", &CMoveRequest::get_move_destination,
+ return_value_policy<copy_const_reference>())
+ .def("set_move_destination", &CMoveRequest::set_move_destination)
+ ;
+}
diff --git a/wrappers/CMoveResponse.cpp b/wrappers/CMoveResponse.cpp
new file mode 100644
index 0000000..278aadd
--- /dev/null
+++ b/wrappers/CMoveResponse.cpp
@@ -0,0 +1,79 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CMoveResponse.h"
+
+void wrap_CMoveResponse()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CMoveResponse, bases<Response>>(
+ "CMoveResponse", init<Value::Integer, Value::Integer>())
+ .def(init<Value::Integer, Value::Integer, DataSet const &>())
+ .def(init<Message>())
+ .def("has_message_id", &CMoveResponse::has_message_id)
+ .def(
+ "get_message_id", &CMoveResponse::get_message_id,
+ return_value_policy<copy_const_reference>())
+ .def("set_message_id", &CMoveResponse::set_message_id)
+ .def(
+ "has_affected_sop_class_uid",
+ &CMoveResponse::has_affected_sop_class_uid)
+ .def(
+ "get_affected_sop_class_uid",
+ &CMoveResponse::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CMoveResponse::set_affected_sop_class_uid)
+ .def(
+ "has_number_of_remaining_sub_operations",
+ &CMoveResponse::has_number_of_remaining_sub_operations)
+ .def(
+ "get_number_of_remaining_sub_operations",
+ &CMoveResponse::get_number_of_remaining_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_remaining_sub_operations",
+ &CMoveResponse::set_number_of_remaining_sub_operations)
+ .def(
+ "has_number_of_completed_sub_operations",
+ &CMoveResponse::has_number_of_completed_sub_operations)
+ .def(
+ "get_number_of_completed_sub_operations",
+ &CMoveResponse::get_number_of_completed_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_completed_sub_operations",
+ &CMoveResponse::set_number_of_completed_sub_operations)
+ .def(
+ "has_number_of_failed_sub_operations",
+ &CMoveResponse::has_number_of_failed_sub_operations)
+ .def(
+ "get_number_of_failed_sub_operations",
+ &CMoveResponse::get_number_of_failed_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_failed_sub_operations",
+ &CMoveResponse::set_number_of_failed_sub_operations)
+ .def(
+ "has_number_of_warning_sub_operations",
+ &CMoveResponse::has_number_of_warning_sub_operations)
+ .def(
+ "get_number_of_warning_sub_operations",
+ &CMoveResponse::get_number_of_warning_sub_operations,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_number_of_warning_sub_operations",
+ &CMoveResponse::set_number_of_warning_sub_operations)
+ ;
+}
diff --git a/wrappers/CStoreRequest.cpp b/wrappers/CStoreRequest.cpp
new file mode 100644
index 0000000..dc73715
--- /dev/null
+++ b/wrappers/CStoreRequest.cpp
@@ -0,0 +1,65 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/CStoreRequest.h"
+
+void wrap_CStoreRequest()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<CStoreRequest, bases<Request>>(
+ "CStoreRequest",
+ init<
+ Value::Integer, Value::String const &, Value::String const &,
+ Value::Integer, DataSet const &
+ >())
+ .def(init<Message>())
+ .def(
+ "get_affected_sop_class_uid",
+ &CStoreRequest::get_affected_sop_class_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_class_uid",
+ &CStoreRequest::set_affected_sop_class_uid)
+ .def(
+ "get_affected_sop_instance_uid",
+ &CStoreRequest::get_affected_sop_instance_uid,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_affected_sop_instance_uid",
+ &CStoreRequest::set_affected_sop_instance_uid)
+ .def(
+ "get_priority", &CStoreRequest::get_priority,
+ return_value_policy<copy_const_reference>())
+ .def("set_priority", &CStoreRequest::set_priority)
+ .def(
+ "has_move_originator_ae_title",
+ &CStoreRequest::has_move_originator_ae_title)
+ .def(
+ "get_move_originator_ae_title",
+ &CStoreRequest::get_move_originator_ae_title,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_move_originator_ae_title",
+ &CStoreRequest::set_move_originator_ae_title)
+ .def(
+ "has_move_originator_message_id",
+ &CStoreRequest::has_move_originator_message_id)
+ .def(
+ "get_move_originator_message_id",
+ &CStoreRequest::get_move_originator_message_id,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_move_originator_message_id",
+ &CStoreRequest::set_move_originator_message_id)
+ ;
+}
diff --git a/wrappers/DataSet.cpp b/wrappers/DataSet.cpp
index 8d079fe..d84cdb3 100644
--- a/wrappers/DataSet.cpp
+++ b/wrappers/DataSet.cpp
@@ -13,12 +13,55 @@
#include "odil/DataSet.h"
-BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(add_overloads_2, odil::DataSet::add, 1, 2);
-BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(add_overloads_3, odil::DataSet::add, 2, 3);
+#include "value_constructor.h"
namespace
{
+void add(
+ odil::DataSet & data_set, odil::Tag const & tag,
+ boost::python::object value_python, odil::VR vr=odil::VR::UNKNOWN)
+{
+ auto const value_cpp = value_constructor(value_python);
+ if(vr == odil::VR::UNKNOWN)
+ {
+ vr = as_vr(tag);
+ }
+ data_set.add(tag, odil::Element(*value_cpp, vr));
+}
+
+void set(
+ odil::DataSet & data_set, odil::Tag const & tag,
+ boost::python::object value_python)
+{
+ auto const value_cpp = value_constructor(value_python);
+ if(value_cpp->get_type() == odil::Value::Type::Integers)
+ {
+ data_set.as_int(tag) = value_cpp->as_integers();
+ }
+ else if(value_cpp->get_type() == odil::Value::Type::Reals)
+ {
+ data_set.as_real(tag) = value_cpp->as_reals();
+ }
+ else if(value_cpp->get_type() == odil::Value::Type::Strings)
+ {
+ data_set.as_string(tag) = value_cpp->as_strings();
+ }
+ else if(value_cpp->get_type() == odil::Value::Type::DataSets)
+ {
+ data_set.as_data_set(tag) = value_cpp->as_data_sets();
+ }
+ else if(value_cpp->get_type() == odil::Value::Type::Binary)
+ {
+ data_set.as_binary(tag) = value_cpp->as_binary();
+ }
+ else
+ {
+ throw odil::Exception("Unknown value type");
+ }
+}
+
+
class ConstIteratorAdapter
{
public:
@@ -124,6 +167,10 @@ boost::python::list items(odil::DataSet const & data_set)
}
+BOOST_PYTHON_FUNCTION_OVERLOADS(add_overloads, add, 3, 4);
+BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(
+ add_overloads_member, odil::DataSet::add, 1, 2);
+
void wrap_DataSet()
{
using namespace boost::python;
@@ -132,86 +179,59 @@ void wrap_DataSet()
class_<DataSet>("DataSet", init<>())
.def(
- "add",
- static_cast<void (DataSet::*)(Tag const &, Element const &)>(
- &DataSet::add))
- .def(
- "add",
+ "add",
static_cast<void (DataSet::*)(Tag const &, VR)>(&DataSet::add),
- add_overloads_2())
- .def(
- "add",
- static_cast<void (DataSet::*)(Tag const &, Value::Integers const &, VR)>(
- &DataSet::add),
- add_overloads_3())
- .def(
- "add",
- static_cast<void (DataSet::*)(Tag const &, Value::Reals const &, VR)>(
- &DataSet::add),
- add_overloads_3())
- .def(
- "add",
- static_cast<void (DataSet::*)(Tag const &, Value::Strings const &, VR)>(
- &DataSet::add),
- add_overloads_3())
- .def(
- "add",
- static_cast<void (DataSet::*)(Tag const &, Value::DataSets const &, VR)>(
- &DataSet::add),
- add_overloads_3())
- .def(
- "add",
- static_cast<void (DataSet::*)(Tag const &, Value::Binary const &, VR)>(
- &DataSet::add),
- add_overloads_3())
+ add_overloads_member())
+ .def("add", add, add_overloads())
.def("remove", &DataSet::remove)
.def("has", &DataSet::has)
.def("empty", static_cast<bool (DataSet::*)() const>(&DataSet::empty))
.def(
- "size",
+ "size",
static_cast<std::size_t (DataSet::*)() const>(&DataSet::size))
.def("get_vr", &DataSet::get_vr)
.def(
- "empty",
+ "empty",
static_cast<bool (DataSet::*)(Tag const &) const>(&DataSet::empty))
.def(
- "size",
+ "size",
static_cast<std::size_t (DataSet::*)(Tag const &) const>(
&DataSet::size))
.def(
- "__getitem__",
+ "__getitem__",
static_cast<Element & (DataSet::*)(Tag const&)>(&DataSet::operator[]),
return_value_policy<reference_existing_object>())
.def("is_int", &DataSet::is_int)
.def(
- "as_int",
+ "as_int",
static_cast<Value::Integers & (DataSet::*)(Tag const &)>(
- &DataSet::as_int),
+ &DataSet::as_int),
return_value_policy<reference_existing_object>())
.def("is_real", &DataSet::is_real)
.def(
- "as_real",
+ "as_real",
static_cast<Value::Reals & (DataSet::*)(Tag const &)>(
- &DataSet::as_real),
+ &DataSet::as_real),
return_value_policy<reference_existing_object>())
.def("is_string", &DataSet::is_string)
.def(
- "as_string",
+ "as_string",
static_cast<Value::Strings & (DataSet::*)(Tag const &)>(
- &DataSet::as_string),
+ &DataSet::as_string),
return_value_policy<reference_existing_object>())
.def("is_data_set", &DataSet::is_data_set)
.def(
- "as_data_set",
+ "as_data_set",
static_cast<Value::DataSets & (DataSet::*)(Tag const &)>(
- &DataSet::as_data_set),
+ &DataSet::as_data_set),
return_value_policy<reference_existing_object>())
.def("is_binary", &DataSet::is_binary)
.def(
- "as_binary",
+ "as_binary",
static_cast<Value::Binary & (DataSet::*)(Tag const &)>(
- &DataSet::as_binary),
+ &DataSet::as_binary),
return_value_policy<reference_existing_object>())
+ .def("set", &set)
.def("keys", &keys)
.def("__iter__", range(&begin, &end))
.def("values", &values)
@@ -219,7 +239,7 @@ void wrap_DataSet()
.def(self == self)
.def(self != self)
.def(
- "__len__",
- static_cast<std::size_t (DataSet::*)() const>(&DataSet::size))
+ "__len__",
+ static_cast<std::size_t (DataSet::*)() const>(&DataSet::size))
;
}
diff --git a/wrappers/DataSetGeneratorWrapper.h b/wrappers/DataSetGeneratorWrapper.h
new file mode 100644
index 0000000..7e77869
--- /dev/null
+++ b/wrappers/DataSetGeneratorWrapper.h
@@ -0,0 +1,52 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#ifndef _8971f17b_e958_4aa3_9d36_640aaa018f56
+#define _8971f17b_e958_4aa3_9d36_640aaa018f56
+
+#include <boost/python.hpp>
+#include "odil/message/Request.h"
+
+template<typename TDataSetGenerator>
+class DataSetGeneratorWrapper:
+ public TDataSetGenerator, public boost::python::wrapper<TDataSetGenerator>
+{
+public:
+ DataSetGeneratorWrapper()
+ : TDataSetGenerator(), boost::python::wrapper<TDataSetGenerator>()
+ {
+ // Nothing else.
+ }
+
+ virtual ~DataSetGeneratorWrapper()
+ {
+ // Nothing to do.
+ }
+
+ virtual void initialize(odil::message::Request const & request)
+ {
+ this->get_override("initialize")(request);
+ }
+
+ virtual bool done() const
+ {
+ return this->get_override("done")();
+ }
+
+ virtual void next()
+ {
+ this->get_override("next")();
+ }
+
+ virtual odil::DataSet get() const
+ {
+ return this->get_override("get")();
+ }
+};
+
+#endif // _8971f17b_e958_4aa3_9d36_640aaa018f56
diff --git a/wrappers/Exception.cpp b/wrappers/EchoSCP.cpp
similarity index 51%
copy from wrappers/Exception.cpp
copy to wrappers/EchoSCP.cpp
index cc6085c..e6ee791 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/EchoSCP.cpp
@@ -8,18 +8,31 @@
#include <boost/python.hpp>
-#include "odil/Exception.h"
+#include "odil/EchoSCP.h"
-void translator(odil::Exception const & e)
+namespace
{
- PyErr_SetString(PyExc_UserWarning, e.what());
+
+void
+set_callback(odil::EchoSCP & scp, boost::python::object const & f)
+{
+ scp.set_callback(
+ [f](odil::message::CEchoRequest const & message)
+ {
+ return boost::python::call<odil::Value::Integer>(f.ptr(), message);
+ }
+ );
}
-void wrap_Exception()
+}
+
+void wrap_EchoSCP()
{
using namespace boost::python;
using namespace odil;
- register_exception_translator<Exception>(translator);
+ class_<EchoSCP>("EchoSCP", init<Association &>())
+ .def("set_callback", &set_callback)
+ .def("__call__", &EchoSCP::operator())
+ ;
}
-
diff --git a/wrappers/Element.cpp b/wrappers/Element.cpp
index 55e01d2..bcf24ec 100644
--- a/wrappers/Element.cpp
+++ b/wrappers/Element.cpp
@@ -12,6 +12,26 @@
#include "odil/Element.h"
#include "odil/Value.h"
+#include "value_constructor.h"
+
+namespace
+{
+
+boost::shared_ptr<odil::Element>
+constructor(
+ boost::python::object const & value_python, odil::VR vr=odil::VR::INVALID)
+{
+ auto value_cpp = value_constructor(value_python);
+
+ odil::Element * element = new odil::Element(*value_cpp, vr);
+
+ // Old versions of Boost.Python (Debian 7, Ubuntu 12.04) do not like
+ // std::shared_ptr
+ return boost::shared_ptr<odil::Element>(element);
+}
+
+}
+
void wrap_Element()
{
using namespace boost::python;
@@ -25,12 +45,7 @@ void wrap_Element()
class_<Element>("Element", init<>())
.def_readwrite("vr", &Element::vr)
- .def(init<Value, optional<VR>>())
- .def(init<Value::Integers, optional<VR>>())
- .def(init<Value::Reals, optional<VR>>())
- .def(init<Value::Strings, optional<VR>>())
- .def(init<Value::DataSets, optional<VR>>())
- .def(init<Value::Binary, optional<VR>>())
+ .def("__init__", make_constructor(constructor))
.def("empty", &Element::empty)
.def("size", &Element::size)
.def(
diff --git a/wrappers/Exception.cpp b/wrappers/Exception.cpp
index cc6085c..834280c 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/Exception.cpp
@@ -10,16 +10,22 @@
#include "odil/Exception.h"
+#include "exception_factory.h"
+
+namespace
+{
+
+PyObject * wrapped_Exception;
+
void translator(odil::Exception const & e)
{
- PyErr_SetString(PyExc_UserWarning, e.what());
+ PyErr_SetString(wrapped_Exception, e.what());
+}
+
}
void wrap_Exception()
{
- using namespace boost::python;
- using namespace odil;
-
- register_exception_translator<Exception>(translator);
+ wrapped_Exception = exception_factory("Exception");
+ boost::python::register_exception_translator<odil::Exception>(translator);
}
-
diff --git a/wrappers/FindSCP.cpp b/wrappers/FindSCP.cpp
new file mode 100644
index 0000000..6a5809c
--- /dev/null
+++ b/wrappers/FindSCP.cpp
@@ -0,0 +1,48 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <memory>
+
+#include <boost/python.hpp>
+
+#include "odil/message/CFindRequest.h"
+#include "odil/FindSCP.h"
+
+#include "DataSetGeneratorWrapper.h"
+
+namespace
+{
+
+void set_generator(
+ odil::FindSCP & find_scp,
+ DataSetGeneratorWrapper<odil::FindSCP::DataSetGenerator> generator)
+{
+ auto cpp_generator =
+ std::make_shared<
+ DataSetGeneratorWrapper<odil::FindSCP::DataSetGenerator>
+ >(generator);
+ find_scp.set_generator(cpp_generator);
+}
+
+}
+
+void wrap_FindSCP()
+{
+ using namespace boost::python;
+ using namespace odil;
+
+ scope find_scp_scope = class_<FindSCP>("FindSCP", init<Association &>())
+ .def("set_generator", &set_generator)
+ .def("__call__", &FindSCP::operator())
+ ;
+
+ class_<
+ DataSetGeneratorWrapper<FindSCP::DataSetGenerator>,
+ boost::noncopyable
+ >("DataSetGenerator", init<>());
+}
diff --git a/wrappers/GetSCP.cpp b/wrappers/GetSCP.cpp
new file mode 100644
index 0000000..26a8cb2
--- /dev/null
+++ b/wrappers/GetSCP.cpp
@@ -0,0 +1,63 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <memory>
+
+#include <boost/python.hpp>
+
+#include "odil/message/CGetRequest.h"
+#include "odil/GetSCP.h"
+
+#include "DataSetGeneratorWrapper.h"
+
+namespace
+{
+
+class DataSetGeneratorWrapperGet:
+ public DataSetGeneratorWrapper<odil::GetSCP::DataSetGenerator>
+{
+public:
+ DataSetGeneratorWrapperGet()
+ : DataSetGeneratorWrapper<odil::GetSCP::DataSetGenerator>()
+ {
+ // Nothing else
+ }
+
+ virtual ~DataSetGeneratorWrapperGet()
+ {
+ // Nothing to do.
+ }
+
+ virtual unsigned int count() const
+ {
+ return this->get_override("count")();
+ }
+};
+
+void set_generator(odil::GetSCP & get_scp, DataSetGeneratorWrapperGet generator)
+{
+ auto cpp_generator =
+ std::make_shared<DataSetGeneratorWrapperGet>(generator);
+ get_scp.set_generator(cpp_generator);
+}
+
+}
+
+void wrap_GetSCP()
+{
+ using namespace boost::python;
+ using namespace odil;
+
+ scope get_scp_scope = class_<GetSCP>("GetSCP", init<Association &>())
+ .def("set_generator", &set_generator)
+ .def("__call__", &odil::GetSCP::operator())
+ ;
+
+ class_<DataSetGeneratorWrapperGet, boost::noncopyable>(
+ "DataSetGenerator", init<>());
+}
diff --git a/wrappers/GetSCU.cpp b/wrappers/GetSCU.cpp
index b954ad4..a02af98 100644
--- a/wrappers/GetSCU.cpp
+++ b/wrappers/GetSCU.cpp
@@ -16,15 +16,29 @@ namespace
void
get_with_python_callback(
odil::GetSCU const & scu,
- odil::DataSet const & query, boost::python::object const & f)
+ odil::DataSet const & query,
+ boost::python::object const & store_callback,
+ boost::python::object const & get_callback)
{
- scu.get(
- query,
- [f](odil::DataSet const & data_set)
- {
- boost::python::call<void>(f.ptr(), data_set);
- }
- );
+ odil::GetSCU::StoreCallback store_callback_cpp;
+ if(!store_callback.is_none())
+ {
+ store_callback_cpp = [store_callback](odil::DataSet const & data_set)
+ {
+ boost::python::call<void>(store_callback.ptr(), data_set);
+ };
+ }
+
+ odil::GetSCU::GetCallback get_callback_cpp;
+ if(!get_callback.is_none())
+ {
+ get_callback_cpp = [get_callback](odil::message::CGetResponse const & message)
+ {
+ boost::python::call<void>(get_callback.ptr(), message);
+ };
+ }
+
+ scu.get(query, store_callback_cpp, get_callback_cpp);
}
}
@@ -37,7 +51,11 @@ void wrap_GetSCU()
class_<GetSCU>("GetSCU", init<Association &>())
.def(
"get",
- &get_with_python_callback
+ &get_with_python_callback,
+ (
+ arg("scu"), arg("query"), arg("store_callback"),
+ arg("get_callback")=object()
+ )
)
.def(
"get",
diff --git a/wrappers/Message.cpp b/wrappers/Message.cpp
new file mode 100644
index 0000000..655069f
--- /dev/null
+++ b/wrappers/Message.cpp
@@ -0,0 +1,35 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/DataSet.h"
+#include "odil/message/Message.h"
+
+void wrap_Message()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<Message>("Message", init<>())
+ .def(init<DataSet const &>())
+ .def(init<DataSet const &, DataSet const &>())
+ .def(
+ "get_command_set", &Message::get_command_set,
+ return_value_policy<copy_const_reference>())
+ .def("has_data_set", &Message::has_data_set)
+ .def(
+ "get_data_set", &Message::get_data_set,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "get_command_field", &Message::get_command_field,
+ return_value_policy<copy_const_reference>())
+ .def("set_command_field", &Message::set_command_field)
+ ;
+}
diff --git a/wrappers/MoveSCP.cpp b/wrappers/MoveSCP.cpp
new file mode 100644
index 0000000..e51bbab
--- /dev/null
+++ b/wrappers/MoveSCP.cpp
@@ -0,0 +1,70 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <memory>
+
+#include <boost/python.hpp>
+
+#include "odil/message/CMoveRequest.h"
+#include "odil/MoveSCP.h"
+
+#include "DataSetGeneratorWrapper.h"
+
+namespace
+{
+
+class DataSetGeneratorWrapperMove:
+ public DataSetGeneratorWrapper<odil::MoveSCP::DataSetGenerator>
+{
+public:
+ DataSetGeneratorWrapperMove()
+ : DataSetGeneratorWrapper<odil::MoveSCP::DataSetGenerator>()
+ {
+ // Nothing else
+ }
+
+ virtual ~DataSetGeneratorWrapperMove()
+ {
+ // Nothing to do.
+ }
+
+ virtual unsigned int count() const
+ {
+ return this->get_override("count")();
+ }
+
+ virtual odil::Association
+ get_association(odil::message::CMoveRequest const & request) const
+ {
+ return this->get_override("get_association")(request);
+ }
+};
+
+void set_generator(
+ odil::MoveSCP & move_scp, DataSetGeneratorWrapperMove generator)
+{
+ auto cpp_generator =
+ std::make_shared<DataSetGeneratorWrapperMove>(generator);
+ move_scp.set_generator(cpp_generator);
+}
+
+}
+
+void wrap_MoveSCP()
+{
+ using namespace boost::python;
+ using namespace odil;
+
+ scope move_scp_scope = class_<MoveSCP>("MoveSCP", init<Association &>())
+ .def("set_generator", &set_generator)
+ .def("__call__", &odil::MoveSCP::operator())
+ ;
+
+ class_<DataSetGeneratorWrapperMove, boost::noncopyable>(
+ "DataSetGenerator", init<>());
+}
diff --git a/wrappers/MoveSCU.cpp b/wrappers/MoveSCU.cpp
index 565c47d..43579ec 100644
--- a/wrappers/MoveSCU.cpp
+++ b/wrappers/MoveSCU.cpp
@@ -8,23 +8,38 @@
#include <boost/python.hpp>
+#include "odil/message/CMoveResponse.h"
#include "odil/MoveSCU.h"
namespace
{
-void
+void
move_with_python_callback(
- odil::MoveSCU const & scu,
- odil::DataSet const & query, boost::python::object const & f)
+ odil::MoveSCU const & scu,
+ odil::DataSet const & query,
+ boost::python::object const & store_callback,
+ boost::python::object const & move_callback)
{
- scu.move(
- query,
- [f](odil::DataSet const & data_set)
- {
- boost::python::call<void>(f.ptr(), data_set);
- }
- );
+ odil::MoveSCU::StoreCallback store_callback_cpp;
+ if(!store_callback.is_none())
+ {
+ store_callback_cpp = [store_callback](odil::DataSet const & data_set)
+ {
+ boost::python::call<void>(store_callback.ptr(), data_set);
+ };
+ }
+
+ odil::MoveSCU::MoveCallback move_callback_cpp;
+ if(!move_callback.is_none())
+ {
+ move_callback_cpp = [move_callback](odil::message::CMoveResponse const & message)
+ {
+ boost::python::call<void>(move_callback.ptr(), message);
+ };
+ }
+
+ scu.move(query, store_callback_cpp, move_callback_cpp);
}
}
@@ -45,11 +60,23 @@ void wrap_MoveSCU()
&MoveSCU::set_move_destination
)
.def(
+ "get_incoming_port",
+ &MoveSCU::get_incoming_port
+ )
+ .def(
+ "set_incoming_port",
+ &MoveSCU::set_incoming_port
+ )
+ .def(
"move",
- &move_with_python_callback
+ &move_with_python_callback,
+ (
+ arg("scu"), arg("query"), arg("store_callback"),
+ arg("move_callback")
+ )
)
.def(
- "move",
+ "move",
static_cast<
std::vector<DataSet> (MoveSCU::*)(DataSet const &) const
>(&MoveSCU::move)
diff --git a/wrappers/Exception.cpp b/wrappers/Request.cpp
similarity index 56%
copy from wrappers/Exception.cpp
copy to wrappers/Request.cpp
index cc6085c..571d71c 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/Request.cpp
@@ -8,18 +8,19 @@
#include <boost/python.hpp>
-#include "odil/Exception.h"
+#include "odil/message/Request.h"
-void translator(odil::Exception const & e)
-{
- PyErr_SetString(PyExc_UserWarning, e.what());
-}
-
-void wrap_Exception()
+void wrap_Request()
{
using namespace boost::python;
using namespace odil;
+ using namespace odil::message;
- register_exception_translator<Exception>(translator);
+ class_<Request, bases<Message>>("Request", init<Value::Integer>())
+ .def(init<Message const &>())
+ .def(
+ "get_message_id", &Request::get_message_id,
+ return_value_policy<copy_const_reference>())
+ .def("set_message_id", &Request::set_message_id)
+ ;
}
-
diff --git a/wrappers/Response.cpp b/wrappers/Response.cpp
new file mode 100644
index 0000000..492c57e
--- /dev/null
+++ b/wrappers/Response.cpp
@@ -0,0 +1,43 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include <boost/python.hpp>
+
+#include "odil/message/Response.h"
+
+void wrap_Response()
+{
+ using namespace boost::python;
+ using namespace odil;
+ using namespace odil::message;
+
+ class_<Response, bases<Message>>(
+ "Response", init<Value::Integer, Value::Integer>())
+ .def(init<Message const &>())
+ .def(
+ "get_message_id_being_responded_to",
+ &Response::get_message_id_being_responded_to,
+ return_value_policy<copy_const_reference>())
+ .def(
+ "set_message_id_being_responded_to",
+ &Response::set_message_id_being_responded_to)
+ .def(
+ "get_status", &Response::get_status,
+ return_value_policy<copy_const_reference>())
+ .def("set_status", &Response::set_status)
+ .def(
+ "is_pending",
+ static_cast<bool (Response::*)() const>(&Response::is_pending))
+ .def(
+ "is_warning",
+ static_cast<bool (Response::*)() const>(&Response::is_warning))
+ .def(
+ "is_failure",
+ static_cast<bool (Response::*)() const>(&Response::is_failure))
+ ;
+}
diff --git a/wrappers/Exception.cpp b/wrappers/StoreSCP.cpp
similarity index 51%
copy from wrappers/Exception.cpp
copy to wrappers/StoreSCP.cpp
index cc6085c..3e6d0af 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/StoreSCP.cpp
@@ -8,18 +8,31 @@
#include <boost/python.hpp>
-#include "odil/Exception.h"
+#include "odil/StoreSCP.h"
-void translator(odil::Exception const & e)
+namespace
{
- PyErr_SetString(PyExc_UserWarning, e.what());
+
+void
+set_callback(odil::StoreSCP & scp, boost::python::object const & f)
+{
+ scp.set_callback(
+ [f](odil::message::CStoreRequest const & message)
+ {
+ return boost::python::call<odil::Value::Integer>(f.ptr(), message);
+ }
+ );
}
-void wrap_Exception()
+}
+
+void wrap_StoreSCP()
{
using namespace boost::python;
using namespace odil;
- register_exception_translator<Exception>(translator);
+ class_<StoreSCP>("StoreSCP", init<Association &>())
+ .def("set_callback", &set_callback)
+ .def("__call__", &StoreSCP::operator())
+ ;
}
-
diff --git a/wrappers/Tag.cpp b/wrappers/Tag.cpp
index cf49c4e..e201419 100644
--- a/wrappers/Tag.cpp
+++ b/wrappers/Tag.cpp
@@ -30,4 +30,5 @@ void wrap_Tag()
.def(self >= self)
.def("__str__", &Tag::operator std::string)
;
+ implicitly_convertible<std::string, Tag>();
}
diff --git a/wrappers/Exception.cpp b/wrappers/VRFinder.cpp
similarity index 70%
copy from wrappers/Exception.cpp
copy to wrappers/VRFinder.cpp
index cc6085c..8514387 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/VRFinder.cpp
@@ -8,18 +8,14 @@
#include <boost/python.hpp>
-#include "odil/Exception.h"
+#include "odil/VRFinder.h"
-void translator(odil::Exception const & e)
-{
- PyErr_SetString(PyExc_UserWarning, e.what());
-}
-
-void wrap_Exception()
+void wrap_VRFinder()
{
using namespace boost::python;
using namespace odil;
-
- register_exception_translator<Exception>(translator);
+
+ class_<VRFinder>("VRFinder", init<>())
+ .def("__call__", &VRFinder::operator())
+ ;
}
-
diff --git a/wrappers/Value.cpp b/wrappers/Value.cpp
index f689294..92a7751 100644
--- a/wrappers/Value.cpp
+++ b/wrappers/Value.cpp
@@ -13,6 +13,11 @@
#include "odil/DataSet.h"
#include "odil/Value.h"
+#include "value_constructor.h"
+
+namespace
+{
+
template<typename T, typename python_type=typename T::value_type>
boost::shared_ptr<T> create_value(boost::python::object const & sequence)
{
@@ -30,6 +35,8 @@ boost::shared_ptr<T> create_value(boost::python::object const & sequence)
return boost::shared_ptr<T>(new T(values));
}
+}
+
void wrap_Value()
{
using namespace boost::python;
@@ -43,12 +50,8 @@ void wrap_Value()
// Define scope to enclose Integers, Reals, etc. in Value
scope value_scope = class_<Value>("Value", init<>())
- .def(init<Value::Integers>())
- .def(init<Value::Reals>())
- .def(init<Value::Strings>())
- .def(init<Value::DataSets>())
- .def(init<Value::Binary>())
- .def("get_type", &Value::get_type)
+ .def("__init__", make_constructor(value_constructor))
+ .add_property("type", &Value::get_type)
.def("empty", &Value::empty)
.def(
"as_integers", AsIntegers(&Value::as_integers),
@@ -68,6 +71,15 @@ void wrap_Value()
.def(self == self)
.def(self != self)
;
+
+ enum_<Value::Type>("Type")
+ .value("Empty", Value::Type::Empty)
+ .value("Integers", Value::Type::Integers)
+ .value("Reals", Value::Type::Reals)
+ .value("Strings", Value::Type::Strings)
+ .value("DataSets", Value::Type::DataSets)
+ .value("Binary", Value::Type::Binary)
+ ;
class_<Value::Integers>("Integers")
.def(init<>())
@@ -107,4 +119,3 @@ void wrap_Value()
.def(vector_indexing_suite<Value::Binary>())
;
}
-
diff --git a/wrappers/exception_factory.cpp b/wrappers/exception_factory.cpp
new file mode 100644
index 0000000..3046433
--- /dev/null
+++ b/wrappers/exception_factory.cpp
@@ -0,0 +1,26 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include "exception_factory.h"
+
+#include <string>
+#include <boost/python.hpp>
+
+PyObject * exception_factory(std::string const & name, PyObject * parent)
+{
+ auto scope = boost::python::scope();
+ std::string const scope_name =
+ boost::python::extract<std::string>(scope.attr("__name__"));
+ auto const qualified_name = scope_name + "." + name;
+ PyObject * wrapped_type =
+ PyErr_NewException(
+ const_cast<char*>(qualified_name.c_str()), parent, NULL);
+ scope.attr(name.c_str()) =
+ boost::python::handle<>(boost::python::borrowed(wrapped_type));
+ return wrapped_type;
+}
diff --git a/wrappers/Exception.cpp b/wrappers/exception_factory.h
similarity index 57%
copy from wrappers/Exception.cpp
copy to wrappers/exception_factory.h
index cc6085c..1d7d1f1 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/exception_factory.h
@@ -6,20 +6,14 @@
* for details.
************************************************************************/
-#include <boost/python.hpp>
-
-#include "odil/Exception.h"
+#ifndef _b6181a9c_09a7_46c9_a514_ff5989ea780b
+#define _b6181a9c_09a7_46c9_a514_ff5989ea780b
-void translator(odil::Exception const & e)
-{
- PyErr_SetString(PyExc_UserWarning, e.what());
-}
-
-void wrap_Exception()
-{
- using namespace boost::python;
- using namespace odil;
+#include <string>
+#include <boost/python.hpp>
- register_exception_translator<Exception>(translator);
-}
+/// @brief Create a new Python exception type, in the current scope.
+PyObject * exception_factory(
+ std::string const & name, PyObject * parent=PyExc_Exception);
+#endif // _b6181a9c_09a7_46c9_a514_ff5989ea780b
diff --git a/wrappers/json_converter.cpp b/wrappers/json_converter.cpp
index 9f271fe..8503719 100644
--- a/wrappers/json_converter.cpp
+++ b/wrappers/json_converter.cpp
@@ -34,11 +34,20 @@ std::string as_json(odil::DataSet const & data_set, bool pretty_print)
return string;
}
+odil::DataSet from_json(std::string const & json_string)
+{
+ std::istringstream stream(json_string);
+ Json::Value json_value;
+ stream >> json_value;
+ return odil::as_dataset(json_value);
+}
+
}
void wrap_json_converter()
{
using namespace boost::python;
- def("as_json", &as_json);
+ def("as_json", &as_json, (arg("data_set"), arg("pretty_print")=false));
+ def("from_json", &from_json);
}
diff --git a/wrappers/odil.cpp b/wrappers/odil.cpp
index 1fea1e8..b2890e6 100644
--- a/wrappers/odil.cpp
+++ b/wrappers/odil.cpp
@@ -10,49 +10,86 @@
void wrap_Association();
void wrap_AssociationParameters();
+void wrap_BasicDirectoryCreator();
void wrap_DataSet();
+void wrap_EchoSCP();
void wrap_EchoSCU();
void wrap_Element();
void wrap_ElementsDictionary();
void wrap_Exception();
+void wrap_FindSCP();
void wrap_FindSCU();
+void wrap_GetSCP();
void wrap_GetSCU();
void wrap_json_converter();
+void wrap_MoveSCP();
void wrap_MoveSCU();
void wrap_read();
void wrap_StoreSCU();
+void wrap_StoreSCP();
void wrap_Tag();
void wrap_uid();
void wrap_UIDsDictionary();
void wrap_Value();
void wrap_VR();
+void wrap_VRFinder();
void wrap_write();
void wrap_xml_converter();
void wrap_registry();
+void wrap_Message();
+void wrap_Request();
+void wrap_Response();
+void wrap_CEchoRequest();
+void wrap_CFindRequest();
+void wrap_CGetRequest();
+void wrap_CGetResponse();
+void wrap_CMoveRequest();
+void wrap_CMoveResponse();
+void wrap_CStoreRequest();
+
BOOST_PYTHON_MODULE(odil)
{
+ wrap_Exception();
+
wrap_Association();
wrap_AssociationParameters();
+ wrap_BasicDirectoryCreator();
wrap_DataSet();
+ wrap_EchoSCP();
wrap_EchoSCU();
wrap_Element();
wrap_ElementsDictionary();
- wrap_Exception();
+ wrap_FindSCP();
wrap_FindSCU();
+ wrap_GetSCP();
wrap_GetSCU();
wrap_json_converter();
+ wrap_MoveSCP();
wrap_MoveSCU();
wrap_read();
+ wrap_StoreSCP();
wrap_StoreSCU();
wrap_Tag();
wrap_uid();
wrap_UIDsDictionary();
wrap_Value();
wrap_VR();
+ wrap_VRFinder();
wrap_write();
wrap_xml_converter();
wrap_registry();
+
+ wrap_Message();
+ wrap_Request();
+ wrap_Response();
+ wrap_CEchoRequest();
+ wrap_CFindRequest();
+ wrap_CGetRequest();
+ wrap_CGetResponse();
+ wrap_CMoveRequest();
+ wrap_CMoveResponse();
+ wrap_CStoreRequest();
}
diff --git a/wrappers/value_constructor.cpp b/wrappers/value_constructor.cpp
new file mode 100644
index 0000000..0206074
--- /dev/null
+++ b/wrappers/value_constructor.cpp
@@ -0,0 +1,81 @@
+/*************************************************************************
+ * odil - Copyright (C) Universite de Strasbourg
+ * Distributed under the terms of the CeCILL-B license, as published by
+ * the CEA-CNRS-INRIA. Refer to the LICENSE file or to
+ * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
+ * for details.
+ ************************************************************************/
+
+#include "value_constructor.h"
+
+#include <boost/python.hpp>
+#include <boost/python/stl_iterator.hpp>
+
+#include "odil/DataSet.h"
+#include "odil/Value.h"
+
+boost::shared_ptr<odil::Value>
+value_constructor(boost::python::object const & source)
+{
+ odil::Value * result = nullptr;
+ if(boost::python::len(source) == 0)
+ {
+ result = new odil::Value();
+ }
+ else
+ {
+ boost::python::object first = source[0];
+ PyObject * first_ptr = first.ptr();
+
+ if(PyInt_Check(first_ptr))
+ {
+ boost::python::stl_input_iterator<odil::Value::Integer>
+ begin(source), end;
+ result = new odil::Value(odil::Value::Integers(begin, end));
+ }
+ else if(PyFloat_Check(first_ptr))
+ {
+ boost::python::stl_input_iterator<odil::Value::Real>
+ begin(source), end;
+ result = new odil::Value(odil::Value::Reals(begin, end));
+ }
+ else if(PyString_Check(first_ptr))
+ {
+ boost::python::stl_input_iterator<odil::Value::String>
+ begin(source), end;
+ result = new odil::Value(odil::Value::Strings(begin, end));
+ }
+ else if(PyByteArray_Check(first_ptr))
+ {
+ boost::python::stl_input_iterator<PyObject*> it(source), end;
+ odil::Value::Binary binary;
+ for(int i=0; i<boost::python::len(source); ++i)
+ {
+ boost::python::object python_item = source[i];
+ PyObject * python_ptr = python_item.ptr();
+
+ auto buffer = PyByteArray_AsString(python_ptr);
+ auto const length = PyObject_Length(python_ptr);
+
+ odil::Value::Binary::value_type const item(buffer, buffer+length);
+ binary.push_back(item);
+ }
+ result = new odil::Value(binary);
+ }
+ else
+ {
+ auto odil_module = boost::python::import("odil");
+ boost::python::object DataSetType = odil_module.attr("DataSet");
+ if(PyObject_IsInstance(first_ptr, DataSetType.ptr()))
+ {
+ boost::python::stl_input_iterator<odil::DataSet>
+ begin(source), end;
+ result = new odil::Value(odil::Value::DataSets(begin, end));
+ }
+ }
+ }
+
+ // Old versions of Boost.Python (Debian 7, Ubuntu 12.04) do not like
+ // std::shared_ptr
+ return boost::shared_ptr<odil::Value>(result);
+}
diff --git a/wrappers/Exception.cpp b/wrappers/value_constructor.h
similarity index 61%
copy from wrappers/Exception.cpp
copy to wrappers/value_constructor.h
index cc6085c..77ae0c8 100644
--- a/wrappers/Exception.cpp
+++ b/wrappers/value_constructor.h
@@ -8,18 +8,7 @@
#include <boost/python.hpp>
-#include "odil/Exception.h"
-
-void translator(odil::Exception const & e)
-{
- PyErr_SetString(PyExc_UserWarning, e.what());
-}
-
-void wrap_Exception()
-{
- using namespace boost::python;
- using namespace odil;
-
- register_exception_translator<Exception>(translator);
-}
+#include "odil/Value.h"
+boost::shared_ptr<odil::Value>
+value_constructor(boost::python::object const & source);
diff --git a/wrappers/xml_converter.cpp b/wrappers/xml_converter.cpp
index 1b0054a..b79765f 100644
--- a/wrappers/xml_converter.cpp
+++ b/wrappers/xml_converter.cpp
@@ -8,6 +8,7 @@
#include <boost/property_tree/xml_parser.hpp>
#include <boost/python.hpp>
+#include <boost/version.hpp>
#include "odil/DataSet.h"
#include "odil/xml_converter.h"
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/odil.git
More information about the debian-med-commit
mailing list