summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Laboissière <rafael@debian.org>2024-01-01 14:26:46 -0300
committerRafael Laboissière <rafael@debian.org>2024-01-01 14:26:46 -0300
commit71d53613c770f16156e8166b013f3ffab5dc6960 (patch)
tree4d00146e0cdf9b7cfbba0bac037e2e9fa303282d
parentbc57ec3579cb2e1476b55e6660d8f015245a2e93 (diff)
New upstream version 0.6.0
-rw-r--r--DESCRIPTION4
-rw-r--r--INDEX2
-rw-r--r--Makefile21
-rw-r--r--NEWS9
-rw-r--r--doc/dicom.css11
-rw-r--r--doc/dicom.html656
-rw-r--r--doc/dicom.pdfbin216789 -> 221747 bytes
-rw-r--r--doc/dicom.qchbin77824 -> 86016 bytes
-rw-r--r--doc/dicom.qhcbin94208 -> 94208 bytes
-rw-r--r--doc/dicom.texi6
-rw-r--r--doc/functions.texi153
-rwxr-xr-xdoc/mkfuncdocs.py15
-rwxr-xr-xdoc/mkqhcp.py27
-rw-r--r--doc/version.texi4
-rw-r--r--inst/+images/+dicom/decodeUID.m70
-rw-r--r--inst/+images/+dicom/parseDICOMDIR.m128
-rw-r--r--inst/PKG_ADD14
-rw-r--r--inst/PKG_DEL14
-rw-r--r--inst/__load_dicom__.m39
-rw-r--r--inst/__unload_dicom__.m39
-rw-r--r--inst/dicomfind.m5
-rw-r--r--src/Makefile.in4
-rw-r--r--src/__dicom_decodeuid__.cpp114
-rw-r--r--src/config.h.in3
-rwxr-xr-xsrc/configure96
-rw-r--r--src/configure.ac56
-rw-r--r--src/dicomanon.cpp4
-rw-r--r--src/dicomdict.cpp10
-rw-r--r--src/dicomdisp.cpp4
-rw-r--r--src/dicominfo.cpp37
-rw-r--r--src/dicomlookup.cpp4
-rw-r--r--src/dicomread.cpp4
-rw-r--r--src/dicomuid.cpp2
-rw-r--r--src/dicomwrite.cpp4
-rw-r--r--src/isdicom.cpp2
35 files changed, 1111 insertions, 450 deletions
diff --git a/DESCRIPTION b/DESCRIPTION
index f5f925a..4582646 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,6 +1,6 @@
Name: dicom
-Version: 0.5.1
-Date: 2022-11-21
+Version: 0.6.0
+Date: 2023-12-22
Author: Andy Buckle
Maintainer: John Donoghue
Title: dicom: file io for medical images and other data
diff --git a/INDEX b/INDEX
index 7c4198b..50806c9 100644
--- a/INDEX
+++ b/INDEX
@@ -11,3 +11,5 @@ Dicom Functions
dicomupdate
dicomwrite
isdicom
+ images.dicom.decodeUID
+ images.dicom.parseDICOMDIR
diff --git a/Makefile b/Makefile
index 393f8a7..211a2ff 100644
--- a/Makefile
+++ b/Makefile
@@ -38,6 +38,7 @@ endif
PACKAGE := $(shell $(GREP) "^Name: " DESCRIPTION | $(CUT) -f2 -d" " | \
$(TR) '[:upper:]' '[:lower:]')
VERSION := $(shell $(GREP) "^Version: " DESCRIPTION | $(CUT) -f2 -d" ")
+DATE := $(shell $(SED) -n -e 's/^Date: *\(\w\+\)/\1/p' DESCRIPTION)
HG := hg
HG_CMD = $(HG) --config alias.$(1)=$(1) --config defaults.$(1)= $(1)
@@ -53,6 +54,10 @@ RELEASE_TARBALL := $(TARGET_DIR)/$(PACKAGE)-$(VERSION).tar.gz
HTML_DIR := $(TARGET_DIR)/$(PACKAGE)-html
HTML_TARBALL := $(TARGET_DIR)/$(PACKAGE)-html.tar.gz
+ifeq ($(if $(wildcard .hg),hg,no),hg)
+RELEASE_DIR_DEP := .hg/dirstate
+endif
+
PKG_ADD :=
OCTAVE ?= octave --no-window-system --silent
@@ -86,14 +91,22 @@ clean-docs:
-$(RM) -f doc/$(PACKAGE).pdf
-$(RM) -f doc/$(PACKAGE).html
-$(RM) -f doc/functions.texi
+ -$(RM) -f doc/version.texi
-$(RM) -f doc/$(PACKAGE).qhc doc/$(PACKAGE).qch
-doc/$(PACKAGE).pdf: doc/$(PACKAGE).texi doc/functions.texi
+doc/version.texi: $(RELEASE_DIR_DEP)
+ @echo Generating $@
+ @echo "@c autogenerated from Makefile" > $@
+ @echo "@set VERSION $(VERSION)" >> $@
+ @echo "@set PACKAGE $(PACKAGE)" >> $@
+ @echo "@set DATE $(DATE)" >> $@
+
+doc/$(PACKAGE).pdf: doc/$(PACKAGE).texi doc/functions.texi doc/version.texi
cd doc && SOURCE_DATE_EPOCH=$(HG_TIMESTAMP) $(TEXI2PDF) $(PACKAGE).texi
# remove temp files
cd doc && $(RM) -f $(PACKAGE).aux $(PACKAGE).cp $(PACKAGE).cps $(PACKAGE).fn $(PACKAGE).fns $(PACKAGE).log $(PACKAGE).toc
-doc/$(PACKAGE).html: doc/$(PACKAGE).texi doc/functions.texi
+doc/$(PACKAGE).html: doc/$(PACKAGE).texi doc/functions.texi doc/version.texi
cd doc && SOURCE_DATE_EPOCH=$(HG_TIMESTAMP) $(MAKEINFO) --html --css-ref=$(PACKAGE).css --no-split --output=${PACKAGE}.html $(PACKAGE).texi
doc/$(PACKAGE).qhc: doc/$(PACKAGE).html
@@ -101,11 +114,11 @@ doc/$(PACKAGE).qhc: doc/$(PACKAGE).html
cd doc && ./mkqhcp.py $(PACKAGE) && $(QHELPGENERATOR) $(PACKAGE).qhcp -o $(PACKAGE).qhc
cd doc && $(RM) -f $(PACKAGE).qhcp $(PACKAGE).qhp
-doc/functions.texi:
+doc/functions.texi: $(RELEASE_DIR_DEP)
cd doc && ./mkfuncdocs.py --src-dir=../inst/ --src-dir=../src/ ../INDEX | $(SED) 's/@seealso/@xseealso/g' > functions.texi
-$(RELEASE_DIR): .hg/dirstate
+$(RELEASE_DIR): $(RELEASE_DIR_DEP)
@echo "Creating package version $(VERSION) release ..."
$(RM) -r "$@"
$(call HG_CMD,archive) --exclude ".hg*" --type files --rev $(HG_ID) "$@"
diff --git a/NEWS b/NEWS
index 4f7dc3d..367f5b1 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+ Summary of important user-visible changes for dicom 0.6.0 (2023/12/22):
+-------------------------------------------------------------------------
+
+ * added images.dicom.decodeUID, images.dicom.parseDICOMDIR
+
+ * minor doc updates
+
+ * miscellaneous build and load changes
+
Summary of important user-visible changes for dicom 0.5.1 (2022/11/21):
-------------------------------------------------------------------------
diff --git a/doc/dicom.css b/doc/dicom.css
index 3c116ef..ebe2bea 100644
--- a/doc/dicom.css
+++ b/doc/dicom.css
@@ -17,3 +17,14 @@ table.cartouche td, table.cartouche th {
border: 1px solid #948473;
padding: 4px 4px;
}
+
+/* newer texinfo generation styles */
+div.example {
+ /* base00 ~ body text in light solarized theme */
+ color: #657b83;
+ border-color: #657b83; }
+
+pre.example-preformatted {
+ /* base3 ~ background color in light solarized theme */
+ background-color: #fdf6e3;
+ padding: 0.5em; }
diff --git a/doc/dicom.html b/doc/dicom.html
index ddebbb6..c71acf4 100644
--- a/doc/dicom.html
+++ b/doc/dicom.html
@@ -1,6 +1,6 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!DOCTYPE html>
<html>
-<!-- Created by GNU Texinfo 6.8, https://www.gnu.org/software/texinfo/ -->
+<!-- Created by GNU Texinfo 7.0.3, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Octave Dicom - Dicom File I/O for GNU octave</title>
@@ -18,21 +18,19 @@
<link href="#Installing-and-loading" rel="next" title="Installing and loading">
<style type="text/css">
<!--
-a.copiable-anchor {visibility: hidden; text-decoration: none; line-height: 0em}
-a.summary-letter {text-decoration: none}
-blockquote.indentedblock {margin-right: 0em}
+a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
+a.summary-letter-printindex {text-decoration: none}
+div.center {text-align:center}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
-kbd {font-style: oblique}
-pre.display {font-family: inherit}
-pre.format {font-family: inherit}
-pre.menu-comment {font-family: serif}
-pre.menu-preformatted {font-family: serif}
-span.nolinebreak {white-space: nowrap}
-span.roman {font-family: initial; font-weight: normal}
-span.sansserif {font-family: sans-serif; font-weight: normal}
-span:hover a.copiable-anchor {visibility: visible}
-ul.no-bullet {list-style: none}
+pre.display-preformatted {font-family: inherit}
+span:hover a.copiable-link {visibility: visible}
+strong.def-name {font-family: monospace; font-weight: bold; font-size: larger}
+td.printindex-index-entry {vertical-align: top}
+td.printindex-index-section {vertical-align: top}
+th.entries-header-printindex {text-align:left}
+th.sections-header-printindex {text-align:left}
+ul.toc-numbered-mark {list-style: none}
-->
</style>
<link rel="stylesheet" type="text/css" href="dicom.css">
@@ -41,7 +39,6 @@ ul.no-bullet {list-style: none}
</head>
<body lang="en">
-<h1 class="settitle" align="center">Octave Dicom - Dicom File I/O for GNU octave</h1>
@@ -55,32 +52,32 @@ ul.no-bullet {list-style: none}
-<div class="top" id="Top">
-<div class="header">
+<div class="top-level-extent" id="Top">
+<div class="nav-panel">
<p>
Next: <a href="#Installing-and-loading" accesskey="n" rel="next">Installing and loading</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="Introduction"></span><h1 class="top">Introduction</h1>
+<h1 class="top" id="Introduction">Introduction</h1>
<p>The Dicom toolkit is a set of Dicom file I/O routines for GNU Octave
</p>
-<div class="Contents_element" id="SEC_Contents">
+<div class="element-contents" id="SEC_Contents">
<h2 class="contents-heading">Table of Contents</h2>
<div class="contents">
-<ul class="no-bullet">
+<ul class="toc-numbered-mark">
<li><a id="toc-Installing-and-loading-1" href="#Installing-and-loading">1 Installing and loading</a>
- <ul class="no-bullet">
+ <ul class="toc-numbered-mark">
<li><a id="toc-Online-Direct-install" href="#Online-Direct-install">1.1 Online Direct install</a></li>
<li><a id="toc-Off_002dline-install" href="#Off_002dline-install">1.2 Off-line install</a></li>
<li><a id="toc-Loading" href="#Loading">1.3 Loading</a></li>
</ul></li>
<li><a id="toc-Basic-Usage-Overview-1" href="#Basic-Usage-Overview">2 Basic Usage Overview</a></li>
<li><a id="toc-Function-Reference-1" href="#Function-Reference">3 Function Reference</a>
- <ul class="no-bullet">
+ <ul class="toc-numbered-mark">
<li><a id="toc-Dicom-Functions-1" href="#Dicom-Functions">3.1 Dicom Functions</a>
- <ul class="no-bullet">
+ <ul class="toc-numbered-mark">
<li><a id="toc-dicomanon" href="#dicomanon">3.1.1 dicomanon</a></li>
<li><a id="toc-dicomdict" href="#dicomdict">3.1.2 dicomdict</a></li>
<li><a id="toc-dicomdisp" href="#dicomdisp">3.1.3 dicomdisp</a></li>
@@ -91,7 +88,9 @@ Next: <a href="#Installing-and-loading" accesskey="n" rel="next">Installing and
<li><a id="toc-dicomuid" href="#dicomuid">3.1.8 dicomuid</a></li>
<li><a id="toc-dicomupdate" href="#dicomupdate">3.1.9 dicomupdate</a></li>
<li><a id="toc-dicomwrite" href="#dicomwrite">3.1.10 dicomwrite</a></li>
- <li><a id="toc-isdicom" href="#isdicom">3.1.11 isdicom</a></li>
+ <li><a id="toc-images_002edicom_002edecodeUID" href="#images_002edicom_002edecodeUID">3.1.11 images.dicom.decodeUID</a></li>
+ <li><a id="toc-images_002edicom_002eparseDICOMDIR" href="#images_002edicom_002eparseDICOMDIR">3.1.12 images.dicom.parseDICOMDIR</a></li>
+ <li><a id="toc-isdicom" href="#isdicom">3.1.13 isdicom</a></li>
</ul></li>
</ul></li>
<li><a id="toc-GNU-General-Public-License" href="#Copying">Appendix A GNU General Public License</a></li>
@@ -100,85 +99,85 @@ Next: <a href="#Installing-and-loading" accesskey="n" rel="next">Installing and
</div>
</div>
<hr>
-<div class="chapter" id="Installing-and-loading">
-<div class="header">
+<div class="chapter-level-extent" id="Installing-and-loading">
+<div class="nav-panel">
<p>
Next: <a href="#Basic-Usage-Overview" accesskey="n" rel="next">Basic Usage Overview</a>, Previous: <a href="#Top" accesskey="p" rel="prev">Introduction</a>, Up: <a href="#Top" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="Installing-and-loading-1"></span><h2 class="chapter">1 Installing and loading</h2>
-<span id="index-Installing-and-loading"></span>
+<h2 class="chapter" id="Installing-and-loading-1">1 Installing and loading</h2>
+<a class="index-entry-id" id="index-Installing-and-loading"></a>
<p>The Dicom toolkit must be installed and then loaded to be used.
</p>
-<p>It can be installed in <acronym>GNU</acronym> Octave directly from octave-forge,
+<p>It can be installed in <abbr class="acronym">GNU</abbr> Octave directly from octave-forge,
or can be installed in an off-line mode via a downloaded tarball.
</p>
-<p>The toolkit has a dependency on the GDCM library (<a href="https://http://gdcm.sourceforge.net/">https://http://gdcm.sourceforge.net/</a>), so it must be installed in order
+<p>The toolkit has a dependency on the GDCM library (<a class="url" href="https://http://gdcm.sourceforge.net/">https://http://gdcm.sourceforge.net/</a>), so it must be installed in order
to successfully install the Dicom toolkit.
</p>
-<p>For fedora: <code>yum install gdcm-devel</code>
+<p>For fedora: <code class="code">yum install gdcm-devel</code>
</p>
-<p>For ubuntu: <code>apt install libgdcm2-dev</code>
+<p>For ubuntu: <code class="code">apt install libgdcm2-dev</code>
</p>
-<p>The toolkit must be then be loaded once per each <acronym>GNU</acronym> Octave session in order to use its functionality.
+<p>The toolkit must be then be loaded once per each <abbr class="acronym">GNU</abbr> Octave session in order to use its functionality.
</p>
-<ul class="section-toc">
+<ul class="mini-toc">
<li><a href="#Online-Direct-install" accesskey="1">Online Direct install</a></li>
<li><a href="#Off_002dline-install" accesskey="2">Off-line install</a></li>
<li><a href="#Loading" accesskey="3">Loading</a></li>
</ul>
-<div class="section" id="Online-Direct-install">
+<div class="section-level-extent" id="Online-Direct-install">
<h3 class="section">1.1 Online Direct install</h3>
-<span id="index-Online-install"></span>
+<a class="index-entry-id" id="index-Online-install"></a>
<p>With an internet connection available, the Dicom package can be installed from
-octave-forge using the following command within <acronym>GNU</acronym> Octave:
+octave-forge using the following command within <abbr class="acronym">GNU</abbr> Octave:
</p>
<div class="example">
-<pre class="example">pkg install -forge dicom
+<pre class="example-preformatted">pkg install -forge dicom
</pre></div>
<p>The latest released version of the toolkit will be downloaded and installed.
</p>
</div>
-<div class="section" id="Off_002dline-install">
+<div class="section-level-extent" id="Off_002dline-install">
<h3 class="section">1.2 Off-line install</h3>
-<span id="index-Off_002dline-install"></span>
+<a class="index-entry-id" id="index-Off_002dline-install"></a>
<p>With the Dicom toolkit package already downloaded, and in the current directory when running
-<acronym>GNU</acronym> Octave, the package can be installed using the following command within <acronym>GNU</acronym> Octave:
+<abbr class="acronym">GNU</abbr> Octave, the package can be installed using the following command within <abbr class="acronym">GNU</abbr> Octave:
</p>
<div class="example">
-<pre class="example">pkg install dicom-0.5.1.tar.gz
+<pre class="example-preformatted">pkg install dicom-0.6.0.tar.gz
</pre></div>
</div>
-<div class="section" id="Loading">
+<div class="section-level-extent" id="Loading">
<h3 class="section">1.3 Loading</h3>
-<span id="index-Loading"></span>
+<a class="index-entry-id" id="index-Loading"></a>
<p>Regardless of the method of installing the Dicom toolkit, in order to use its functions,
the toolkit must be loaded using the pkg load command:
</p>
<div class="example">
-<pre class="example">pkg load dicom
+<pre class="example-preformatted">pkg load dicom
</pre></div>
-<p>The toolkit must be loaded on each <acronym>GNU</acronym> Octave session.
+<p>The toolkit must be loaded on each <abbr class="acronym">GNU</abbr> Octave session.
</p>
<hr>
</div>
</div>
-<div class="chapter" id="Basic-Usage-Overview">
-<div class="header">
+<div class="chapter-level-extent" id="Basic-Usage-Overview">
+<div class="nav-panel">
<p>
Next: <a href="#Function-Reference" accesskey="n" rel="next">Function Reference</a>, Previous: <a href="#Installing-and-loading" accesskey="p" rel="prev">Installing and loading</a>, Up: <a href="#Top" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="Basic-Usage-Overview-1"></span><h2 class="chapter">2 Basic Usage Overview</h2>
-<span id="index-Basic-Usage-Overview"></span>
+<h2 class="chapter" id="Basic-Usage-Overview-1">2 Basic Usage Overview</h2>
+<a class="index-entry-id" id="index-Basic-Usage-Overview"></a>
<p>Dicom files consist of metadata and image data within a file. The Dicom toolkit provides functions to
read and write dicom data.
</p>
<div class="example">
-<pre class="example">
+<pre class="example-preformatted">
%% read the meta information from a dicom file
&gt; info = dicominfo (file_in_loadpath('imdata/simple-test.dcm');
@@ -235,38 +234,38 @@ image =
0 0 0 0 0
</pre></div>
-<p>Help for each function can be displayed by <code>help thefunctionname</code>
+<p>Help for each function can be displayed by <code class="code">help thefunctionname</code>
</p>
<p>ie:
</p><div class="example">
-<pre class="example">help dicominfo
+<pre class="example-preformatted">help dicominfo
</pre></div>
<hr>
</div>
-<div class="chapter" id="Function-Reference">
-<div class="header">
+<div class="chapter-level-extent" id="Function-Reference">
+<div class="nav-panel">
<p>
Next: <a href="#Copying" accesskey="n" rel="next">GNU General Public License</a>, Previous: <a href="#Basic-Usage-Overview" accesskey="p" rel="prev">Basic Usage Overview</a>, Up: <a href="#Top" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="Function-Reference-1"></span><h2 class="chapter">3 Function Reference</h2>
-<span id="index-Function-Reference"></span>
+<h2 class="chapter" id="Function-Reference-1">3 Function Reference</h2>
+<a class="index-entry-id" id="index-Function-Reference"></a>
<p>The functions currently available in the Dicom toolkit are described below;
</p>
-<ul class="section-toc">
+<ul class="mini-toc">
<li><a href="#Dicom-Functions" accesskey="1">Dicom Functions</a></li>
</ul>
<hr>
-<div class="section" id="Dicom-Functions">
-<div class="header">
+<div class="section-level-extent" id="Dicom-Functions">
+<div class="nav-panel">
<p>
Up: <a href="#Function-Reference" accesskey="u" rel="up">Function Reference</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="Dicom-Functions-1"></span><h3 class="section">3.1 Dicom Functions</h3>
-<span id="index-Dicom-Functions"></span>
-<ul class="section-toc">
+<h3 class="section" id="Dicom-Functions-1">3.1 Dicom Functions</h3>
+<a class="index-entry-id" id="index-Dicom-Functions"></a>
+<ul class="mini-toc">
<li><a href="#dicomanon" accesskey="1">dicomanon</a></li>
<li><a href="#dicomdict" accesskey="2">dicomdict</a></li>
<li><a href="#dicomdisp" accesskey="3">dicomdisp</a></li>
@@ -277,165 +276,165 @@ Up: <a href="#Function-Reference" accesskey="u" rel="up">Function Reference</a>
<li><a href="#dicomuid" accesskey="8">dicomuid</a></li>
<li><a href="#dicomupdate" accesskey="9">dicomupdate</a></li>
<li><a href="#dicomwrite">dicomwrite</a></li>
+<li><a href="#images_002edicom_002edecodeUID">images.dicom.decodeUID</a></li>
+<li><a href="#images_002edicom_002eparseDICOMDIR">images.dicom.parseDICOMDIR</a></li>
<li><a href="#isdicom">isdicom</a></li>
</ul>
-<div class="subsection" id="dicomanon">
+<div class="subsection-level-extent" id="dicomanon">
<h4 class="subsection">3.1.1 dicomanon</h4>
-<span id="index-dicomanon"></span>
-<dl class="def">
-<dt id="index-dicomanon_0028file_005fin_002c"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomanon(<var>file_in</var>,</strong> <em><var>file_out</var>)</em><a href='#index-dicomanon_0028file_005fin_002c' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicomanon_0028_005f_005f_005f_002c"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomanon(___,</strong> <em><var>name</var>, <var>value</var>)</em><a href='#index-dicomanon_0028_005f_005f_005f_002c' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomanon"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-dicomanon_0028file_005fin_002c"><span class="category-def">: </span><span><strong class="def-name">dicomanon(<var class="var">file_in</var>,</strong> <code class="def-code-arguments"><var class="var">file_out</var>)</code><a class="copiable-link" href='#index-dicomanon_0028file_005fin_002c'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicomanon_0028_005f_005f_005f_002c"><span class="category-def">: </span><span><strong class="def-name">dicomanon(___,</strong> <code class="def-code-arguments"><var class="var">name</var>, <var class="var">value</var>)</code><a class="copiable-link" href='#index-dicomanon_0028_005f_005f_005f_002c'> &para;</a></span></dt>
<dd>
<p>Anonymize a DICOM format file by removing or replacing specific fields.
</p>
-<span id="Inputs"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>file_in</var> is filename to read from.<br>
-<var>file_out</var> is the filename to write to.<br>
-<var>name</var>, <var>value</var> optional name/value properties.<br>
+<h4 class="subsubheading" id="Inputs">Inputs</h4>
+<p><var class="var">file_in</var> is filename to read from.<br>
+<var class="var">file_out</var> is the filename to write to.<br>
+<var class="var">name</var>, <var class="var">value</var> optional name/value properties.<br>
</p>
<p>Known property names are:
-</p><dl compact="compact">
-<dt><span>keep</span></dt>
+</p><dl class="table">
+<dt>keep</dt>
<dd><p>The value is a cell array of names to not remove during the anonymize procedure.
</p></dd>
-<dt><span>update</span></dt>
+<dt>update</dt>
<dd><p>A structure of name/values to update rather than remove.
</p></dd>
</dl>
-<span id="Outputs"></span><h4 class="subsubheading">Outputs</h4>
+<h4 class="subsubheading" id="Outputs">Outputs</h4>
<p>None
</p>
-<p><strong>See also:</strong> dicomread, dicomwrite, dicominfo.
+<p><strong class="strong">See also:</strong> dicomread, dicomwrite, dicominfo.
</p></dd></dl>
</div>
-<div class="subsection" id="dicomdict">
+<div class="subsection-level-extent" id="dicomdict">
<h4 class="subsection">3.1.2 dicomdict</h4>
-<span id="index-dicomdict"></span>
-<dl class="def">
-<dt id="index-dicomdict-1"><span class="category">Loadable Function: </span><span><em><var>dictionary_name</var> =</em> <strong>dicomdict</strong> <em>(<code>get</code>)</em><a href='#index-dicomdict-1' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicomdict-2"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomdict</strong> <em>(<code>factory</code>)</em><a href='#index-dicomdict-2' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicomdict-3"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomdict</strong> <em>(<code>set</code>, <var>dictionary_name</var>)</em><a href='#index-dicomdict-3' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomdict"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-dicomdict-1"><span class="category-def">: </span><span><code class="def-type"><var class="var">dictionary_name</var> =</code> <strong class="def-name">dicomdict</strong> <code class="def-code-arguments">(<code class="code">&quot;get&quot;</code>)</code><a class="copiable-link" href='#index-dicomdict-1'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicomdict-2"><span class="category-def">: </span><span><strong class="def-name">dicomdict</strong> <code class="def-code-arguments">(<code class="code">&quot;factory&quot;</code>)</code><a class="copiable-link" href='#index-dicomdict-2'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicomdict-3"><span class="category-def">: </span><span><strong class="def-name">dicomdict</strong> <code class="def-code-arguments">(<code class="code">&quot;set&quot;</code>, <var class="var">dictionary_name</var>)</code><a class="copiable-link" href='#index-dicomdict-3'> &para;</a></span></dt>
<dd>
<p>Get or set the active dicom data dictionary.
</p>
<p>The first usage returns the filename of the dictionary that is currently being used.
-Using <code>factory</code> resets the dictionary to the default.
-Using <code>set</code> allows setting the dictionary for future operations.
-In this case, the dictionary file <var>dictionary_name</var> can be anywhere in the path.
-</p><span id="Inputs-1"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>code</var> - string value of &rsquo;get&rsquo;, &rsquo;set&rsquo; or &rsquo;factory&rsquo;.
+Using <code class="code">&quot;factory&quot;</code> resets the dictionary to the default.
+Using <code class="code">&quot;set&quot;</code> allows setting the dictionary for future operations.
+In this case, the dictionary file <var class="var">dictionary_name</var> can be anywhere in the path.
+</p><h4 class="subsubheading" id="Inputs-1">Inputs</h4>
+<p><var class="var">code</var> - string value of &rsquo;get&rsquo;, &rsquo;set&rsquo; or &rsquo;factory&rsquo;.
</p>
-<p><var>dictionary_name&rsquo;</var> - name of dictionary file to use
+<p><var class="var">dictionary_name&rsquo;</var> - name of dictionary file to use
</p>
-<span id="Outputs-1"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>dictionary_name&rsquo;</var> - name of dictionary file currently set for dictionaty
+<h4 class="subsubheading" id="Outputs-1">Outputs</h4>
+<p><var class="var">dictionary_name&rsquo;</var> - name of dictionary file currently set for dictionaty
</p>
-<span id="Examples"></span><h4 class="subsubheading">Examples</h4>
+<h4 class="subsubheading" id="Examples">Examples</h4>
<p>Get current dicom dict path:
</p>
<div class="example">
-<pre class="example">&gt; f = dicomdict('get')
+<pre class="example-preformatted">&gt; f = dicomdict('get')
f = octavedicom.dic
</pre></div>
<p>Set a new dictionary:
</p>
<div class="example">
-<pre class="example">&gt; dicomdict('set', 'anewdictfile.txt')
+<pre class="example-preformatted">&gt; dicomdict('set', 'anewdictfile.txt')
</pre></div>
-<p><strong>See also:</strong> dicomread, dicomwrite.
+<p><strong class="strong">See also:</strong> dicomread, dicomwrite.
</p></dd></dl>
</div>
-<div class="subsection" id="dicomdisp">
+<div class="subsection-level-extent" id="dicomdisp">
<h4 class="subsection">3.1.3 dicomdisp</h4>
-<span id="index-dicomdisp"></span>
-<dl class="def">
-<dt id="index-dicomdisp-1"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomdisp</strong> <em>(<var>filename</var>)</em><a href='#index-dicomdisp-1' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicomdisp-2"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomdisp</strong> <em>(<var>filename</var>, [<var>propertyname</var>, <var>propertvalue</var> ...])</em><a href='#index-dicomdisp-2' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomdisp"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-dicomdisp-1"><span class="category-def">: </span><span><strong class="def-name">dicomdisp</strong> <code class="def-code-arguments">(<var class="var">filename</var>)</code><a class="copiable-link" href='#index-dicomdisp-1'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicomdisp-2"><span class="category-def">: </span><span><strong class="def-name">dicomdisp</strong> <code class="def-code-arguments">(<var class="var">filename</var>, [<var class="var">propertyname</var>, <var class="var">propertvalue</var> ...])</code><a class="copiable-link" href='#index-dicomdisp-2'> &para;</a></span></dt>
<dd><p>Read and display the metadata from a DICOM file.
</p>
-<span id="Inputs-2"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>filename</var> - dicomfilename to display.<br>
-<var>propertyname</var>, <var>propertvalue</var> - property pairs for options to the display function.
+<h4 class="subsubheading" id="Inputs-2">Inputs</h4>
+<p><var class="var">filename</var> - dicomfilename to display.<br>
+<var class="var">propertyname</var>, <var class="var">propertvalue</var> - property pairs for options to the display function.
</p>
<p>Currently the only known property is &rsquo;dictionary&rsquo; to specify a non default dict to use.
-</p><span id="Outputs-2"></span><h4 class="subsubheading">Outputs</h4>
+</p><h4 class="subsubheading" id="Outputs-2">Outputs</h4>
<p>None
</p>
-<p><strong>See also:</strong> dicomread, dicominfo.
+<p><strong class="strong">See also:</strong> dicomread, dicominfo.
</p></dd></dl>
</div>
-<div class="subsection" id="dicomfind">
+<div class="subsection-level-extent" id="dicomfind">
<h4 class="subsection">3.1.4 dicomfind</h4>
-<span id="index-dicomfind"></span>
-<dl class="def">
-<dt id="index-_003d"><span class="category">: </span><span><em><var>attrinfo</var></em> <strong>=</strong> <em>dicomfind(<var>filename</var>, <var>attribute</var>)</em><a href='#index-_003d' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-_003d-1"><span class="category">: </span><span><em><var>attrinfo</var></em> <strong>=</strong> <em>dicomfind(<var>info</var>, <var>attribute</var>)</em><a href='#index-_003d-1' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomfind"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d"><span class="category-def">: </span><span><code class="def-type"><var class="var">attrinfo</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicomfind(<var class="var">filename</var>, <var class="var">attribute</var>)</code><a class="copiable-link" href='#index-_003d'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-_003d-1"><span class="category-def">: </span><span><code class="def-type"><var class="var">attrinfo</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicomfind(<var class="var">info</var>, <var class="var">attribute</var>)</code><a class="copiable-link" href='#index-_003d-1'> &para;</a></span></dt>
<dd><p>Find the location and value of an attribute in a dicom file or info structure.
</p>
-<span id="Inputs-3"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>filename</var> - filename to open.
+<h4 class="subsubheading" id="Inputs-3">Inputs</h4>
+<p><var class="var">filename</var> - filename to open.
</p>
-<p><var>info</var> - dicominfo struct.
+<p><var class="var">info</var> - dicominfo struct.
</p>
-<p><var>attribute</var> - attribute name to find.
+<p><var class="var">attribute</var> - attribute name to find.
</p>
-<span id="Outputs-3"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>attrinfo</var> - a table with fields Location and Value fior each matched attribute.
+<h4 class="subsubheading" id="Outputs-3">Outputs</h4>
+<p><var class="var">attrinfo</var> - a table with fields Location and Value for each matched attribute.
</p>
-<span id="Examples-1"></span><h4 class="subsubheading">Examples</h4>
+<p>The Location value will be the attribute position in dot notation to show its position
+ in dicom info structure.
+</p>
+<h4 class="subsubheading" id="Examples-1">Examples</h4>
<div class="example">
-<pre class="example"> filename = file_in_loadpath(&quot;imdata/rtstruct.dcm&quot;);
+<pre class="example-preformatted"> filename = file_in_loadpath(&quot;imdata/rtstruct.dcm&quot;);
info = dicomfind(filename, &quot;ROINumber&quot;);
- </pre></div>
+</pre></div>
</dd></dl>
</div>
-<div class="subsection" id="dicominfo">
+<div class="subsection-level-extent" id="dicominfo">
<h4 class="subsection">3.1.5 dicominfo</h4>
-<span id="index-dicominfo"></span>
-<dl class="def">
-<dt id="index-_003d-2"><span class="category">Loadable Function: </span><span><em><var>info</var></em> <strong>=</strong> <em>dicominfo (<var>filename</var>)</em><a href='#index-_003d-2' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-_003d-3"><span class="category">Loadable Function: </span><span><em><var>info</var></em> <strong>=</strong> <em>dicominfo (<var>filename</var>, <code>dictionary</code>, <var>dictionary-name</var>)</em><a href='#index-_003d-3' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicominfo-1"><span class="category">Loadable Function: </span><span><em></em> <strong>dicominfo</strong> <em>(<var>filename</var>, <var>options</var>)</em><a href='#index-dicominfo-1' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicominfo-2"><span class="category">Command: </span><span><em></em> <strong>dicominfo</strong> <em><var>filename</var></em><a href='#index-dicominfo-2' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicominfo-3"><span class="category">Command: </span><span><em></em> <strong>dicominfo</strong> <em><var>filename</var> <var>options</var></em><a href='#index-dicominfo-3' class='copiable-anchor'> &para;</a></span></dt>
-<dd><p>Get all data from a DICOM file, excluding any actual image.
-<var>info</var> is a nested struct containing the data.
+<a class="index-entry-id" id="index-dicominfo"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d-2"><span class="category-def">: </span><span><code class="def-type"><var class="var">info</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicominfo (<var class="var">filename</var>)</code><a class="copiable-link" href='#index-_003d-2'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-_003d-3"><span class="category-def">: </span><span><code class="def-type"><var class="var">info</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicominfo (<var class="var">filename</var>, <code class="code">&quot;dictionary&quot;</code>, <var class="var">dictionary-name</var>)</code><a class="copiable-link" href='#index-_003d-3'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicominfo-1"><span class="category-def">: </span><span><strong class="def-name">dicominfo</strong> <code class="def-code-arguments">(___, <var class="var">options</var>)</code><a class="copiable-link" href='#index-dicominfo-1'> &para;</a></span></dt>
+<dd><p>Get all metadata from a DICOM file, excluding any actual image.
+<var class="var">info</var> is a nested struct containing the data.
</p>
-<p>If no return argument is given, then there will be output similar to
-a DICOM dump.
+<p>If the <code class="code">dictionary</code> argument is used, the given <var class="var">dictionary-name</var> is used for this operation,
+otherwise, the dictionary set by <code class="code">dicomdict</code> is used.
</p>
-<p>If the <code>dictionary</code> argument is used, the given <var>dictionary-name</var> is used for this operation,
-otherwise, the dictionary set by <code>dicomdict</code> is used.
+<h4 class="subsubheading" id="Inputs-4">Inputs</h4>
+<p><var class="var">filename</var> - name of file to read.
</p>
-<span id="Inputs-4"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>filename</var> - name of file to read.
+<p><var class="var">&rsquo;dictionary&rsquo;</var> - string constant of &rsquo;dictionary&rsquo;.
</p>
-<p><var>&rsquo;dictionary&rsquo;</var> - string constant of &rsquo;dictionary&rsquo;.
+<p><var class="var">dictionary-name</var> - filename of dictionary to use.
</p>
-<p><var>dictionary-name</var> - filename of dictionary to use.
-</p>
-<p><var>options</var>:
-<code>truncate=n</code>
-where n is the number of characters to limit the dump output display to <code>n</code>
+<p><var class="var">options</var> - a string in format of &rsquo;optionname=value&rsquo;, or property/value pair &rsquo;optionname&rsquo;, value:
+<code class="code">truncate=n</code>
+where n is the number of characters to limit the dump output display to <code class="code">n</code>
for each value.
-</p><span id="Outputs-4"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>info</var> - struct of fields read frome the dicom file.
+</p><h4 class="subsubheading" id="Outputs-4">Outputs</h4>
+<p><var class="var">info</var> - struct of fields read frome the dicom file.
</p>
-<span id="Examples-2"></span><h4 class="subsubheading">Examples</h4>
+<h4 class="subsubheading" id="Examples-2">Examples</h4>
<p>Read the metadata of a dicomfile:
</p>
<div class="example">
-<pre class="example">&gt; info = dicominfo(file_in_loadpath('imdata/simple-test.dcm')
+<pre class="example-preformatted">&gt; info = dicominfo(file_in_loadpath('imdata/simple-test.dcm')
info =
scalar structure containing the fields:
Filename = a.dcm
@@ -475,41 +474,41 @@ PixelData = not assigned
</pre></div>
-<p><strong>See also:</strong> dicomread, dicomdict.
+<p><strong class="strong">See also:</strong> dicomread, dicomdict.
</p></dd></dl>
</div>
-<div class="subsection" id="dicomlookup">
+<div class="subsection-level-extent" id="dicomlookup">
<h4 class="subsection">3.1.6 dicomlookup</h4>
-<span id="index-dicomlookup"></span>
-<dl class="def">
-<dt id="index-_003d-4"><span class="category">Loadable Function: </span><span><em><var>keyword</var></em> <strong>=</strong> <em>dicomlookup (<var>group</var>, <var>element</var>)</em><a href='#index-_003d-4' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-element_005d"><span class="category">Loadable Function: </span><span><em>[<var>group</var>,</em> <strong><var>element</var>]</strong> <em>= dicomlookup (<var>keyword</var>)</em><a href='#index-element_005d' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomlookup"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d-4"><span class="category-def">: </span><span><code class="def-type"><var class="var">keyword</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicomlookup (<var class="var">group</var>, <var class="var">element</var>)</code><a class="copiable-link" href='#index-_003d-4'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-element_005d"><span class="category-def">: </span><span><code class="def-type">[<var class="var">group</var>,</code> <strong class="def-name"><var class="var">element</var>]</strong> <code class="def-code-arguments">= dicomlookup (<var class="var">keyword</var>)</code><a class="copiable-link" href='#index-element_005d'> &para;</a></span></dt>
<dd>
<p>Lookup an attribute in the DICOM data dictionary.
</p>
-<p><var>keyword</var> = dicomlookup (<var>group</var>, <var>element</var>) will look in the current dicom
-dictionary for a specified <var>group</var> and <var>element</var> tag and returns string name
+<p><var class="var">keyword</var> = dicomlookup (<var class="var">group</var>, <var class="var">element</var>) will look in the current dicom
+dictionary for a specified <var class="var">group</var> and <var class="var">element</var> tag and returns string name
of the attribute.
</p>
-<p>[<var>group</var>, <var>element</var>] = dicomlookup (<var>keyword</var>) will look in the current dicom
-dictionary for a specified <var>keyword</var> string and returns the <var>group</var> and <var>element</var>
+<p>[<var class="var">group</var>, <var class="var">element</var>] = dicomlookup (<var class="var">keyword</var>) will look in the current dicom
+dictionary for a specified <var class="var">keyword</var> string and returns the <var class="var">group</var> and <var class="var">element</var>
for keyword.
</p>
-<span id="Inputs-5"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>keyword</var> - string keyword name to look up a group, element value.<br>
-<var>group</var> - group value to look up (string or integer).<br>
-<var>element</var> - element value to look up (string or integer).<br>
+<h4 class="subsubheading" id="Inputs-5">Inputs</h4>
+<p><var class="var">keyword</var> - string keyword name to look up a group, element value.<br>
+<var class="var">group</var> - group value to look up (string or integer).<br>
+<var class="var">element</var> - element value to look up (string or integer).<br>
</p>
-<span id="Outputs-5"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>keyword</var> - string keyword name to looked up from a group, element value.<br>
-<var>group</var>, <var>element</var> - group and element value looked up from keyword.<br>
+<h4 class="subsubheading" id="Outputs-5">Outputs</h4>
+<p><var class="var">keyword</var> - string keyword name to looked up from a group, element value.<br>
+<var class="var">group</var>, <var class="var">element</var> - group and element value looked up from keyword.<br>
</p>
-<span id="Outputs-6"></span><h4 class="subsubheading">Outputs</h4>
+<h4 class="subsubheading" id="Outputs-6">Outputs</h4>
<p>Look up tag name for 0x10 0x10:
</p>
<div class="example">
-<pre class="example">&gt; name = dicomlookup(0x10,0x10)
+<pre class="example-preformatted">&gt; name = dicomlookup(0x10,0x10)
name = PatientName
</pre></div>
@@ -517,38 +516,38 @@ name = PatientName
<p>Look up tag group and element value:
</p>
<div class="example">
-<pre class="example">&gt; [grp, elm] = dicomlookup('TransferSyntaxUID')
+<pre class="example-preformatted">&gt; [grp, elm] = dicomlookup('TransferSyntaxUID')
grp = 2
elm = 16
</pre></div>
-<p><strong>See also:</strong> dicomdict.
+<p><strong class="strong">See also:</strong> dicomdict.
</p></dd></dl>
</div>
-<div class="subsection" id="dicomread">
+<div class="subsection-level-extent" id="dicomread">
<h4 class="subsection">3.1.7 dicomread</h4>
-<span id="index-dicomread"></span>
-<dl class="def">
-<dt id="index-_003d-5"><span class="category">Loadable Function: </span><span><em><var>image</var></em> <strong>=</strong> <em>dicomread (<var>filename</var>)</em><a href='#index-_003d-5' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-_003d-6"><span class="category">Loadable Function: </span><span><em><var>image</var></em> <strong>=</strong> <em>dicomread (<var>structure</var>)</em><a href='#index-_003d-6' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomread"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d-5"><span class="category-def">: </span><span><code class="def-type"><var class="var">image</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicomread (<var class="var">filename</var>)</code><a class="copiable-link" href='#index-_003d-5'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-_003d-6"><span class="category-def">: </span><span><code class="def-type"><var class="var">image</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicomread (<var class="var">structure</var>)</code><a class="copiable-link" href='#index-_003d-6'> &para;</a></span></dt>
<dd>
<p>Load the image from a DICOM file.
-</p><span id="Inputs-6"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>filename</var> - a string giving the filename.*
+</p><h4 class="subsubheading" id="Inputs-6">Inputs</h4>
+<p><var class="var">filename</var> - a string giving the filename.*
</p>
-<p><var>structure</var> - a structure with a field <code>Filename</code> (such as returned by <code>dicominfo</code>).
+<p><var class="var">structure</var> - a structure with a field <code class="code">Filename</code> (such as returned by <code class="code">dicominfo</code>).
</p>
-<p><var>image</var> - may be two or three dimensional, depending on the content of the file.
+<p><var class="var">image</var> - may be two or three dimensional, depending on the content of the file.
</p>
-<span id="Outputs-7"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>image</var> - An integer or float matrix will be returned, the number of bits will depend on the file.
+<h4 class="subsubheading" id="Outputs-7">Outputs</h4>
+<p><var class="var">image</var> - An integer or float matrix will be returned, the number of bits will depend on the file.
</p>
-<span id="Examples-3"></span><h4 class="subsubheading">Examples</h4>
+<h4 class="subsubheading" id="Examples-3">Examples</h4>
<p>Load the image data of a dcm file:
</p>
<div class="example">
-<pre class="example">&gt; image = dicomread(file_in_loadpath('imdata/simple-test.dcm'))
+<pre class="example-preformatted">&gt; image = dicomread(file_in_loadpath('imdata/simple-test.dcm'))
image =
0 0 0 0 0
0 0 0 0 0
@@ -563,57 +562,57 @@ image =
</pre></div>
-<p><strong>See also:</strong> dicominfo.
+<p><strong class="strong">See also:</strong> dicominfo.
</p></dd></dl>
</div>
-<div class="subsection" id="dicomuid">
+<div class="subsection-level-extent" id="dicomuid">
<h4 class="subsection">3.1.8 dicomuid</h4>
-<span id="index-dicomuid"></span>
-<dl class="def">
-<dt id="index-_003d-7"><span class="category">Loadable Function: </span><span><em><var>uuid</var></em> <strong>=</strong> <em>dicomuid ()</em><a href='#index-_003d-7' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomuid"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d-7"><span class="category-def">: </span><span><code class="def-type"><var class="var">uuid</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">dicomuid ()</code><a class="copiable-link" href='#index-_003d-7'> &para;</a></span></dt>
<dd>
<p>Generate a DICOM unique id .
</p>
-<span id="Inputs-7"></span><h4 class="subsubheading">Inputs</h4>
+<h4 class="subsubheading" id="Inputs-7">Inputs</h4>
<p>None
-</p><span id="Outputs-8"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>uuid</var> is a unique id string.
+</p><h4 class="subsubheading" id="Outputs-8">Outputs</h4>
+<p><var class="var">uuid</var> is a unique id string.
</p>
-<span id="Examples-4"></span><h4 class="subsubheading">Examples</h4>
+<h4 class="subsubheading" id="Examples-4">Examples</h4>
<p>Get a new uid:
</p>
<div class="example">
-<pre class="example">&gt; uid = dicomuid ()
+<pre class="example-preformatted">&gt; uid = dicomuid ()
uid = 1.2.826.0.1.3680043.2.1143.3114589836670200378351641061429967573
</pre></div>
</dd></dl>
</div>
-<div class="subsection" id="dicomupdate">
+<div class="subsection-level-extent" id="dicomupdate">
<h4 class="subsection">3.1.9 dicomupdate</h4>
-<span id="index-dicomupdate"></span>
-<dl class="def">
-<dt id="index-dicomupdate_0028fileinfo_002c"><span class="category">: </span><span><em><var>info</var> =</em> <strong>dicomupdate(<var>fileinfo</var>,</strong> <em><var>attribute</var>, <var>value</var>)</em><a href='#index-dicomupdate_0028fileinfo_002c' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicomupdate_0028info_002c"><span class="category">: </span><span><em><var>info</var> =</em> <strong>dicomupdate(<var>info</var>,</strong> <em><var>attrinfo</var>)</em><a href='#index-dicomupdate_0028info_002c' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomupdate"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-dicomupdate_0028fileinfo_002c"><span class="category-def">: </span><span><code class="def-type"><var class="var">info</var> =</code> <strong class="def-name">dicomupdate(<var class="var">fileinfo</var>,</strong> <code class="def-code-arguments"><var class="var">attribute</var>, <var class="var">value</var>)</code><a class="copiable-link" href='#index-dicomupdate_0028fileinfo_002c'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicomupdate_0028info_002c"><span class="category-def">: </span><span><code class="def-type"><var class="var">info</var> =</code> <strong class="def-name">dicomupdate(<var class="var">info</var>,</strong> <code class="def-code-arguments"><var class="var">attrinfo</var>)</code><a class="copiable-link" href='#index-dicomupdate_0028info_002c'> &para;</a></span></dt>
<dd><p>Update a dicom struct with new values
</p>
-<span id="Inputs-8"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>info</var> - dicominfo struct.
+<h4 class="subsubheading" id="Inputs-8">Inputs</h4>
+<p><var class="var">info</var> - dicominfo struct.
</p>
-<p><var>attribute</var> - attribute name to find and change value of.
+<p><var class="var">attribute</var> - attribute name to find and change value of.
</p>
-<p><var>value</var> - attribute value to set.
+<p><var class="var">value</var> - attribute value to set.
</p>
-<p><var>attrinfo</var> - a table with fields Location and Value for each matched attribute to change.
+<p><var class="var">attrinfo</var> - a table with fields Location and Value for each matched attribute to change.
</p>
-<span id="Outputs-9"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>info</var> - dicominfo struct.
+<h4 class="subsubheading" id="Outputs-9">Outputs</h4>
+<p><var class="var">info</var> - dicominfo struct.
</p>
-<span id="Examples-5"></span><h4 class="subsubheading">Examples</h4>
+<h4 class="subsubheading" id="Examples-5">Examples</h4>
<div class="example">
-<pre class="example"> filename = file_in_loadpath(&quot;imdata/rtstruct.dcm&quot;);
+<pre class="example-preformatted"> filename = file_in_loadpath(&quot;imdata/rtstruct.dcm&quot;);
info = dicominfo(filename);
% update specific values
@@ -624,60 +623,113 @@ uid = 1.2.826.0.1.3680043.2.1143.3114589836670200378351641061429967573
% update all matching
info = dicomupdate(info, &quot;ROINumber&quot;, 100);
- </pre></div>
+</pre></div>
</dd></dl>
</div>
-<div class="subsection" id="dicomwrite">
+<div class="subsection-level-extent" id="dicomwrite">
<h4 class="subsection">3.1.10 dicomwrite</h4>
-<span id="index-dicomwrite"></span>
-<dl class="def">
-<dt id="index-dicomwrite_0028im_002c"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomwrite(<var>im</var>,</strong> <em><var>filename</var>)</em><a href='#index-dicomwrite_0028im_002c' class='copiable-anchor'> &para;</a></span></dt>
-<dt id="index-dicomwrite_0028im_002c-1"><span class="category">Loadable Function: </span><span><em></em> <strong>dicomwrite(<var>im</var>,</strong> <em><var>filename</var>, <var>info</var>)</em><a href='#index-dicomwrite_0028im_002c-1' class='copiable-anchor'> &para;</a></span></dt>
+<a class="index-entry-id" id="index-dicomwrite"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-dicomwrite_0028im_002c"><span class="category-def">: </span><span><strong class="def-name">dicomwrite(<var class="var">im</var>,</strong> <code class="def-code-arguments"><var class="var">filename</var>)</code><a class="copiable-link" href='#index-dicomwrite_0028im_002c'> &para;</a></span></dt>
+<dt class="deftypefnx def-cmd-deftypefn" id="index-dicomwrite_0028im_002c-1"><span class="category-def">: </span><span><strong class="def-name">dicomwrite(<var class="var">im</var>,</strong> <code class="def-code-arguments"><var class="var">filename</var>, <var class="var">info</var>)</code><a class="copiable-link" href='#index-dicomwrite_0028im_002c-1'> &para;</a></span></dt>
<dd>
-<p>Write a DICOM format file to <var>filename</var>.
+<p>Write a DICOM format file to <var class="var">filename</var>.
</p>
-<span id="Inputs-9"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>im</var> - image data or empty matrix, [], if only metadata save is required
+<h4 class="subsubheading" id="Inputs-9">Inputs</h4>
+<p><var class="var">im</var> - image data or empty matrix, [], if only metadata save is required
</p>
-<p><var>filename</var> - filename to write dicom to. if [], then function runs in verbose trial mode.
+<p><var class="var">filename</var> - filename to write dicom to. if [], then function runs in verbose trial mode.
</p>
-<p><var>info</var> - struct, like that produced by dicominfo
+<p><var class="var">info</var> - struct, like that produced by dicominfo
</p>
-<span id="Examples-6"></span><h4 class="subsubheading">Examples</h4>
+<h4 class="subsubheading" id="Examples-6">Examples</h4>
<p>Create a dicom file using default info, and the supplied data:
</p><div class="example">
-<pre class="example">&gt; wdata = uint8 (10*rand (10,10));
+<pre class="example-preformatted">&gt; wdata = uint8 (10*rand (10,10));
&gt; dicomwrite (wdata, 'test.dcm');
</pre></div>
<p>Create a dicom file using data and meta info:
</p>
<div class="example">
-<pre class="example">&gt; wdata = dicomread(file_in_loadpath('imdata/CT-MONO2-16-ankle.dcm');
+<pre class="example-preformatted">&gt; wdata = dicomread(file_in_loadpath('imdata/CT-MONO2-16-ankle.dcm');
&gt; info = dicominfo(file_in_loadpath('imdata/CT-MONO2-16-ankle.dcm');
&gt; dicomwrite(wdata, info);
</pre></div>
-<p><strong>See also:</strong> dicomread, dicominfo.
+<p><strong class="strong">See also:</strong> dicomread, dicominfo.
</p></dd></dl>
</div>
-<div class="subsection" id="isdicom">
-<h4 class="subsection">3.1.11 isdicom</h4>
-<span id="index-isdicom"></span>
-<dl class="def">
-<dt id="index-isdicom-1"><span class="category">Loadable Function: </span><span><em><var>yesno</var> =</em> <strong>isdicom</strong> <em>(<var>filename</var>)</em><a href='#index-isdicom-1' class='copiable-anchor'> &para;</a></span></dt>
-<dd><p>Return true if <var>filename</var> is a valid DICOM file.
+<div class="subsection-level-extent" id="images_002edicom_002edecodeUID">
+<h4 class="subsection">3.1.11 images.dicom.decodeUID</h4>
+<a class="index-entry-id" id="index-decodeUID"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d-8"><span class="category-def">: </span><span><code class="def-type"><var class="var">uidinfo</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">images.dicom.decodeUID(<var class="var">uid</var>)</code><a class="copiable-link" href='#index-_003d-8'> &para;</a></span></dt>
+<dd><p>Look up information about a uid string
+</p>
+<h4 class="subsubheading" id="Inputs-10">Inputs</h4>
+<p><var class="var">uid</var> - dicom uid string.
+</p>
+<h4 class="subsubheading" id="Outputs-10">Outputs</h4>
+<p><var class="var">uidinfo</var> - a structure with fields of Value, Name and Type.
+</p>
+<p>Additional fields may be present in the case of a Transfer Syntax type uid.
+</p>
+<h4 class="subsubheading" id="Examples-7">Examples</h4>
+<div class="example">
+<pre class="example-preformatted"> &gt; info = images.dicom.decodeUID(&quot;1.2.840.10008.1.1&quot;);
+ info =
+ scalar structure containing the fields:
+ Value = 1.2.840.10008.1.1
+ Name = Verification SOP Class
+ Type = SOP Class
+</pre></div>
+</dd></dl>
+</div>
+<div class="subsection-level-extent" id="images_002edicom_002eparseDICOMDIR">
+<h4 class="subsection">3.1.12 images.dicom.parseDICOMDIR</h4>
+<a class="index-entry-id" id="index-parseDICOMDIR"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-_003d-9"><span class="category-def">: </span><span><code class="def-type"><var class="var">info</var></code> <strong class="def-name">=</strong> <code class="def-code-arguments">images.dicom.parseDICOMDIR(<var class="var">filename</var>)</code><a class="copiable-link" href='#index-_003d-9'> &para;</a></span></dt>
+<dd><p>Parse a DICOMDIR file and return the information as a struct.
+</p>
+<h4 class="subsubheading" id="Inputs-11">Inputs</h4>
+<p><var class="var">filename</var> - filename to open.
+</p>
+<h4 class="subsubheading" id="Outputs-11">Outputs</h4>
+<p><var class="var">info</var> - A struct containing the directory information from a DICOMDIR file
+</p>
+<p>Th info structure will be an array of Patients, with an array of Studies with an
+ array of Series with an array of Images.
+</p>
+<p>Each element will contain a Payload field.
+</p>
+<h4 class="subsubheading" id="Examples-8">Examples</h4>
+<div class="example">
+<pre class="example-preformatted"> filename = file_in_loadpath(&quot;imdata/DICOMDIR&quot;);
+
+ info = images.dicom.parseDICOMDIR(filename);
+
+</pre></div>
+</dd></dl>
+</div>
+<div class="subsection-level-extent" id="isdicom">
+<h4 class="subsection">3.1.13 isdicom</h4>
+<a class="index-entry-id" id="index-isdicom"></a>
+<dl class="first-deftypefn">
+<dt class="deftypefn" id="index-isdicom-1"><span class="category-def">: </span><span><code class="def-type"><var class="var">yesno</var> =</code> <strong class="def-name">isdicom</strong> <code class="def-code-arguments">(<var class="var">filename</var>)</code><a class="copiable-link" href='#index-isdicom-1'> &para;</a></span></dt>
+<dd><p>Return true if <var class="var">filename</var> is a valid DICOM file.
</p>
-<span id="Inputs-10"></span><h4 class="subsubheading">Inputs</h4>
-<p><var>filename</var> - name of file to read.
+<h4 class="subsubheading" id="Inputs-12">Inputs</h4>
+<p><var class="var">filename</var> - name of file to read.
</p>
-<span id="Outputs-10"></span><h4 class="subsubheading">Outputs</h4>
-<p><var>yesno</var> - logical value of true if filename is a dicom file.
+<h4 class="subsubheading" id="Outputs-12">Outputs</h4>
+<p><var class="var">yesno</var> - logical value of true if filename is a dicom file.
</p>
-<p><strong>See also:</strong> dicomdict, dicominfo, dicomread, dicomwrite.
+<p><strong class="strong">See also:</strong> dicomdict, dicominfo, dicomread, dicomwrite.
</p></dd></dl>
@@ -685,25 +737,25 @@ uid = 1.2.826.0.1.3680043.2.1143.3114589836670200378351641061429967573
</div>
</div>
</div>
-<div class="appendix" id="Copying">
-<div class="header">
+<div class="appendix-level-extent" id="Copying">
+<div class="nav-panel">
<p>
Next: <a href="#Index" accesskey="n" rel="next">Index</a>, Previous: <a href="#Function-Reference" accesskey="p" rel="prev">Function Reference</a>, Up: <a href="#Top" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="GNU-General-Public-License"></span><h2 class="appendix">Appendix A GNU General Public License</h2>
-<span id="index-warranty"></span>
-<span id="index-copyright"></span>
+<h2 class="appendix" id="GNU-General-Public-License">Appendix A GNU General Public License</h2>
+<a class="index-entry-id" id="index-warranty"></a>
+<a class="index-entry-id" id="index-copyright"></a>
-<div align="center">Version 3, 29 June 2007
+<div class="center">Version 3, 29 June 2007
</div>
<div class="display">
-<pre class="display">Copyright &copy; 2007 Free Software Foundation, Inc. <a href="http://fsf.org/">http://fsf.org/</a>
+<pre class="display-preformatted">Copyright &copy; 2007 Free Software Foundation, Inc. <a class="url" href="http://fsf.org/">http://fsf.org/</a>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
</pre></div>
-<span id="Preamble"></span><h3 class="heading">Preamble</h3>
+<h3 class="heading" id="Preamble">Preamble</h3>
<p>The GNU General Public License is a free, copyleft license for
software and other kinds of works.
@@ -768,9 +820,9 @@ assures that patents cannot be used to render the program non-free.
<p>The precise terms and conditions for copying, distribution and
modification follow.
</p>
-<span id="TERMS-AND-CONDITIONS"></span><h3 class="heading">TERMS AND CONDITIONS</h3>
+<h3 class="heading" id="TERMS-AND-CONDITIONS">TERMS AND CONDITIONS</h3>
-<ol start="0">
+<ol class="enumerate" start="0">
<li> Definitions.
<p>&ldquo;This License&rdquo; refers to version 3 of the GNU General Public License.
@@ -913,7 +965,7 @@ produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
</p>
-<ol type="a" start="1">
+<ol class="enumerate" type="a" start="1">
<li> The work must carry prominent notices stating that you modified it,
and giving a relevant date.
@@ -953,7 +1005,7 @@ sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
</p>
-<ol type="a" start="1">
+<ol class="enumerate" type="a" start="1">
<li> Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium customarily
@@ -1070,7 +1122,7 @@ for which you have or can give appropriate copyright permission.
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
</p>
-<ol type="a" start="1">
+<ol class="enumerate" type="a" start="1">
<li> Disclaiming warranty or limiting liability differently from the terms
of sections 15 and 16 of this License; or
@@ -1332,9 +1384,9 @@ copy of the Program in return for a fee.
</p>
</li></ol>
-<span id="END-OF-TERMS-AND-CONDITIONS"></span><h3 class="heading">END OF TERMS AND CONDITIONS</h3>
+<h3 class="heading" id="END-OF-TERMS-AND-CONDITIONS">END OF TERMS AND CONDITIONS</h3>
-<span id="How-to-Apply-These-Terms-to-Your-New-Programs"></span><h3 class="heading">How to Apply These Terms to Your New Programs</h3>
+<h3 class="heading" id="How-to-Apply-These-Terms-to-Your-New-Programs">How to Apply These Terms to Your New Programs</h3>
<p>If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -1346,9 +1398,9 @@ to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the &ldquo;copyright&rdquo; line and a pointer to where the full notice is found.
</p>
-<div class="example">
-<pre class="example"><var>one line to give the program's name and a brief idea of what it does.</var>
-Copyright (C) <var>year</var> <var>name of author</var>
+<div class="example smallexample">
+<pre class="example-preformatted"><var class="var">one line to give the program's name and a brief idea of what it does.</var>
+Copyright (C) <var class="var">year</var> <var class="var">name of author</var>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -1361,7 +1413,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program. If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
+along with this program. If not, see <a class="url" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
</pre></div>
<p>Also add information on how to contact you by electronic and paper mail.
@@ -1369,14 +1421,14 @@ along with this program. If not, see <a href="http://www.gnu.org/licenses/">htt
<p>If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
</p>
-<div class="example">
-<pre class="example"><var>program</var> Copyright (C) <var>year</var> <var>name of author</var>
-This program comes with ABSOLUTELY NO WARRANTY; for details type &lsquo;<samp>show w</samp>&rsquo;.
+<div class="example smallexample">
+<pre class="example-preformatted"><var class="var">program</var> Copyright (C) <var class="var">year</var> <var class="var">name of author</var>
+This program comes with ABSOLUTELY NO WARRANTY; for details type &lsquo;<samp class="samp">show w</samp>&rsquo;.
This is free software, and you are welcome to redistribute it
-under certain conditions; type &lsquo;<samp>show c</samp>&rsquo; for details.
+under certain conditions; type &lsquo;<samp class="samp">show c</samp>&rsquo; for details.
</pre></div>
-<p>The hypothetical commands &lsquo;<samp>show w</samp>&rsquo; and &lsquo;<samp>show c</samp>&rsquo; should show
+<p>The hypothetical commands &lsquo;<samp class="samp">show w</samp>&rsquo; and &lsquo;<samp class="samp">show c</samp>&rsquo; should show
the appropriate parts of the General Public License. Of course, your
program&rsquo;s commands might be different; for a GUI interface, you would
use an &ldquo;about box&rdquo;.
@@ -1384,98 +1436,108 @@ use an &ldquo;about box&rdquo;.
<p>You should also get your employer (if you work as a programmer) or school,
if any, to sign a &ldquo;copyright disclaimer&rdquo; for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
-<a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
+<a class="url" href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.
</p>
<p>The GNU General Public License does not permit incorporating your
program into proprietary programs. If your program is a subroutine
library, you may consider it more useful to permit linking proprietary
applications with the library. If this is what you want to do, use
the GNU Lesser General Public License instead of this License. But
-first, please read <a href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
+first, please read <a class="url" href="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</a>.
</p>
<hr>
</div>
-<div class="unnumbered" id="Index">
-<div class="header">
+<div class="unnumbered-level-extent" id="Index">
+<div class="nav-panel">
<p>
Previous: <a href="#Copying" accesskey="p" rel="prev">GNU General Public License</a>, Up: <a href="#Top" accesskey="u" rel="up">Introduction</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="#Index" title="Index" rel="index">Index</a>]</p>
</div>
-<span id="Index-1"></span><h2 class="unnumbered">Index</h2>
+<h2 class="unnumbered" id="Index-1">Index</h2>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Index_cp_letter-B"><b>B</b></a>
+<div class="printindex cp-printindex">
+<table class="cp-letters-header-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Index_cp_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter-printindex" href="#Index_cp_letter-C"><b>C</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-C"><b>C</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-D"><b>D</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-D"><b>D</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-F"><b>F</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-F"><b>F</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-I"><b>I</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-I"><b>I</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-L"><b>L</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-L"><b>L</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-O"><b>O</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-O"><b>O</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-P"><b>P</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-W"><b>W</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-W"><b>W</b></a>
&nbsp;
</td></tr></table>
-<table class="index-cp" border="0">
-<tr><td></td><th align="left">Index Entry</th><td>&nbsp;</td><th align="left"> Section</th></tr>
+<table class="cp-entries-printindex" border="0">
+<tr><td></td><th class="entries-header-printindex">Index Entry</th><td>&nbsp;</td><th class="sections-header-printindex"> Section</th></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-B">B</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Basic-Usage-Overview">Basic Usage Overview</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Basic-Usage-Overview">Basic Usage Overview</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Basic-Usage-Overview">Basic Usage Overview</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Basic-Usage-Overview">Basic Usage Overview</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-C">C</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-copyright">copyright</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Copying">Copying</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-copyright">copyright</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Copying">Copying</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-D">D</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Dicom-Functions">Dicom Functions</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomanon">dicomanon</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomdict">dicomdict</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomdisp">dicomdisp</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomfind">dicomfind</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicominfo">dicominfo</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomlookup">dicomlookup</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomread">dicomread</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomuid">dicomuid</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomupdate">dicomupdate</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-dicomwrite">dicomwrite</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-decodeUID">decodeUID</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Dicom-Functions">Dicom Functions</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomanon">dicomanon</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomdict">dicomdict</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomdisp">dicomdisp</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomfind">dicomfind</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicominfo">dicominfo</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomlookup">dicomlookup</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomread">dicomread</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomuid">dicomuid</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomupdate">dicomupdate</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-dicomwrite">dicomwrite</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-F">F</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Function-Reference">Function Reference</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Function-Reference">Function Reference</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Function-Reference">Function Reference</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Function-Reference">Function Reference</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-I">I</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Installing-and-loading">Installing and loading</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-isdicom">isdicom</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Installing-and-loading">Installing and loading</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-isdicom">isdicom</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-L">L</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Loading">Loading</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Loading">Loading</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-O">O</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Off_002dline-install">Off-line install</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Online-install">Online install</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Off_002dline-install">Off-line install</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-Online-install">Online install</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Installing-and-loading">Installing and loading</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
+<tr><th id="Index_cp_letter-P">P</th><td></td><td></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-parseDICOMDIR">parseDICOMDIR</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Dicom-Functions">Dicom Functions</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
<tr><th id="Index_cp_letter-W">W</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-warranty">warranty</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Copying">Copying</a></td></tr>
+<tr><td></td><td class="printindex-index-entry"><a href="#index-warranty">warranty</a>:</td><td>&nbsp;</td><td class="printindex-index-section"><a href="#Copying">Copying</a></td></tr>
<tr><td colspan="4"> <hr></td></tr>
</table>
-<table><tr><th valign="top">Jump to: &nbsp; </th><td><a class="summary-letter" href="#Index_cp_letter-B"><b>B</b></a>
+<table class="cp-letters-footer-printindex"><tr><th>Jump to: &nbsp; </th><td><a class="summary-letter-printindex" href="#Index_cp_letter-B"><b>B</b></a>
+ &nbsp;
+<a class="summary-letter-printindex" href="#Index_cp_letter-C"><b>C</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-C"><b>C</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-D"><b>D</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-D"><b>D</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-F"><b>F</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-F"><b>F</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-I"><b>I</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-I"><b>I</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-L"><b>L</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-L"><b>L</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-O"><b>O</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-O"><b>O</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-P"><b>P</b></a>
&nbsp;
-<a class="summary-letter" href="#Index_cp_letter-W"><b>W</b></a>
+<a class="summary-letter-printindex" href="#Index_cp_letter-W"><b>W</b></a>
&nbsp;
</td></tr></table>
+</div>
</div>
</div>
diff --git a/doc/dicom.pdf b/doc/dicom.pdf
index 424a2a1..fd8ec6e 100644
--- a/doc/dicom.pdf
+++ b/doc/dicom.pdf
Binary files differ
diff --git a/doc/dicom.qch b/doc/dicom.qch
index 804a8a4..95bca84 100644
--- a/doc/dicom.qch
+++ b/doc/dicom.qch
Binary files differ
diff --git a/doc/dicom.qhc b/doc/dicom.qhc
index 234f174..9f599ca 100644
--- a/doc/dicom.qhc
+++ b/doc/dicom.qhc
Binary files differ
diff --git a/doc/dicom.texi b/doc/dicom.texi
index 78f5297..037c3e2 100644
--- a/doc/dicom.texi
+++ b/doc/dicom.texi
@@ -1,5 +1,5 @@
\input texinfo @c -*-texinfo-*-
-@c Copyright (c) 2019-2022, John Donoghue <john.donoghue@ieee.org>
+@c Copyright (c) 2019-2023, John Donoghue <john.donoghue@ieee.org>
@c Octave Dicom -Dicom File I/O for GNU octave.
@c For manually generating the documentation use
@@ -11,11 +11,11 @@
@afourpaper
@paragraphindent 0
@finalout
-@set VERSION 0.5.1
-@set COPYRIGHT_DATE 2019-2022
+@set COPYRIGHT_DATE 2019-2023
@c @afourwide
@c %*** End of the HEADER
+@include version.texi
@include macros.texi
@c %*** Start of TITLEPAGE
diff --git a/doc/functions.texi b/doc/functions.texi
index 811e2d3..409632b 100644
--- a/doc/functions.texi
+++ b/doc/functions.texi
@@ -6,8 +6,8 @@
@c -----------------------------------------
@subsection dicomanon
@cindex dicomanon
-@deftypefn {Loadable Function} {} dicomanon(@var{file_in}, @var{file_out})
-@deftypefnx {Loadable Function} {} dicomanon(___, @var{name}, @var{value})
+@deftypefn {} {} dicomanon(@var{file_in}, @var{file_out})
+@deftypefnx {} {} dicomanon(___, @var{name}, @var{value})
Anonymize a DICOM format file by removing or replacing specific fields.
@@ -33,15 +33,15 @@ None
@c -----------------------------------------
@subsection dicomdict
@cindex dicomdict
-@deftypefn {Loadable Function} {@var{dictionary_name} =} dicomdict (@code{get})
-@deftypefnx {Loadable Function} {} dicomdict (@code{factory})
-@deftypefnx {Loadable Function} {} dicomdict (@code{set}, @var{dictionary_name})
+@deftypefn {} {@var{dictionary_name} =} dicomdict (@code{"get"})
+@deftypefnx {} {} dicomdict (@code{"factory"})
+@deftypefnx {} {} dicomdict (@code{"set"}, @var{dictionary_name})
Get or set the active dicom data dictionary.
The first usage returns the filename of the dictionary that is currently being used.
-Using @code{factory} resets the dictionary to the default.
-Using @code{set} allows setting the dictionary for future operations.
+Using @code{"factory"} resets the dictionary to the default.
+Using @code{"set"} allows setting the dictionary for future operations.
In this case, the dictionary file @var{dictionary_name} can be anywhere in the path.
@subsubheading Inputs
@var{code} - string value of 'get', 'set' or 'factory'.
@@ -72,8 +72,8 @@ Set a new dictionary:
@c -----------------------------------------
@subsection dicomdisp
@cindex dicomdisp
-@deftypefn {Loadable Function} {} dicomdisp (@var{filename})
-@deftypefnx {Loadable Function} {} dicomdisp (@var{filename}, [@var{propertyname}, @var{propertvalue} ...])
+@deftypefn {} {} dicomdisp (@var{filename})
+@deftypefnx {} {} dicomdisp (@var{filename}, [@var{propertyname}, @var{propertvalue} ...])
Read and display the metadata from a DICOM file.
@subsubheading Inputs
@@ -91,43 +91,41 @@ None
@c -----------------------------------------
@subsection dicomfind
@cindex dicomfind
- @deftypefn {} {@var{attrinfo}} = dicomfind(@var{filename}, @var{attribute})
- @deftypefnx {} {@var{attrinfo}} = dicomfind(@var{info}, @var{attribute})
+@deftypefn {} {@var{attrinfo}} = dicomfind(@var{filename}, @var{attribute})
+@deftypefnx {} {@var{attrinfo}} = dicomfind(@var{info}, @var{attribute})
Find the location and value of an attribute in a dicom file or info structure.
- @subsubheading Inputs
- @var{filename} - filename to open.
+@subsubheading Inputs
+@var{filename} - filename to open.
+
+@var{info} - dicominfo struct.
- @var{info} - dicominfo struct.
+@var{attribute} - attribute name to find.
- @var{attribute} - attribute name to find.
+@subsubheading Outputs
+@var{attrinfo} - a table with fields Location and Value for each matched attribute.
- @subsubheading Outputs
- @var{attrinfo} - a table with fields Location and Value fior each matched attribute.
+ The Location value will be the attribute position in dot notation to show its position
+ in dicom info structure.
- @subsubheading Examples
- @example
+@subsubheading Examples
+@example
filename = file_in_loadpath("imdata/rtstruct.dcm");
info = dicomfind(filename, "ROINumber");
- @end example
- @end deftypefn
+@end example
+@end deftypefn
@c Dicom Functions dicominfo
@c -----------------------------------------
@subsection dicominfo
@cindex dicominfo
-@deftypefn {Loadable Function} {@var{info}} = dicominfo (@var{filename})
-@deftypefnx {Loadable Function} {@var{info}} = dicominfo (@var{filename}, @code{dictionary}, @var{dictionary-name})
-@deftypefnx {Loadable Function} {} dicominfo (@var{filename}, @var{options})
-@deftypefnx {Command} {} dicominfo @var{filename}
-@deftypefnx {Command} {} dicominfo @var{filename} @var{options}
-Get all data from a DICOM file, excluding any actual image.
+@deftypefn {} {@var{info}} = dicominfo (@var{filename})
+@deftypefnx {} {@var{info}} = dicominfo (@var{filename}, @code{"dictionary"}, @var{dictionary-name})
+@deftypefnx {} {} dicominfo (___, @var{options})
+Get all metadata from a DICOM file, excluding any actual image.
@var{info} is a nested struct containing the data.
-If no return argument is given, then there will be output similar to
-a DICOM dump.
-
If the @code{dictionary} argument is used, the given @var{dictionary-name} is used for this operation,
otherwise, the dictionary set by @code{dicomdict} is used.
@@ -138,7 +136,7 @@ otherwise, the dictionary set by @code{dicomdict} is used.
@var{dictionary-name} - filename of dictionary to use.
-@var{options}:
+@var{options} - a string in format of 'optionname=value', or property/value pair 'optionname', value:
@code{truncate=n}
where n is the number of characters to limit the dump output display to @code{n}
for each value.
@@ -195,8 +193,8 @@ PixelData = not assigned
@c -----------------------------------------
@subsection dicomlookup
@cindex dicomlookup
-@deftypefn {Loadable Function} @var{keyword} = dicomlookup (@var{group}, @var{element})
-@deftypefnx {Loadable Function} [@var{group}, @var{element}] = dicomlookup (@var{keyword})
+@deftypefn {} @var{keyword} = dicomlookup (@var{group}, @var{element})
+@deftypefnx {} [@var{group}, @var{element}] = dicomlookup (@var{keyword})
Lookup an attribute in the DICOM data dictionary.
@@ -240,8 +238,8 @@ elm = 16
@c -----------------------------------------
@subsection dicomread
@cindex dicomread
-@deftypefn {Loadable Function} @var{image} = dicomread (@var{filename})
-@deftypefnx {Loadable Function} @var{image} = dicomread (@var{structure})
+@deftypefn {} @var{image} = dicomread (@var{filename})
+@deftypefnx {} @var{image} = dicomread (@var{structure})
Load the image from a DICOM file.
@subsubheading Inputs
@@ -279,7 +277,7 @@ image =
@c -----------------------------------------
@subsection dicomuid
@cindex dicomuid
-@deftypefn {Loadable Function} @var{uuid} = dicomuid ()
+@deftypefn {} @var{uuid} = dicomuid ()
Generate a DICOM unique id .
@@ -302,24 +300,24 @@ uid = 1.2.826.0.1.3680043.2.1143.3114589836670200378351641061429967573
@c -----------------------------------------
@subsection dicomupdate
@cindex dicomupdate
- @deftypefn {} {@var{info} =} dicomupdate(@var{fileinfo}, @var{attribute}, @var{value})
- @deftypefnx {} {@var{info} =} dicomupdate(@var{info}, @var{attrinfo})
+@deftypefn {} {@var{info} =} dicomupdate(@var{fileinfo}, @var{attribute}, @var{value})
+@deftypefnx {} {@var{info} =} dicomupdate(@var{info}, @var{attrinfo})
Update a dicom struct with new values
- @subsubheading Inputs
- @var{info} - dicominfo struct.
+@subsubheading Inputs
+@var{info} - dicominfo struct.
- @var{attribute} - attribute name to find and change value of.
+@var{attribute} - attribute name to find and change value of.
- @var{value} - attribute value to set.
+@var{value} - attribute value to set.
- @var{attrinfo} - a table with fields Location and Value for each matched attribute to change.
+@var{attrinfo} - a table with fields Location and Value for each matched attribute to change.
- @subsubheading Outputs
- @var{info} - dicominfo struct.
+@subsubheading Outputs
+@var{info} - dicominfo struct.
- @subsubheading Examples
- @example
+@subsubheading Examples
+@example
filename = file_in_loadpath("imdata/rtstruct.dcm");
info = dicominfo(filename);
@@ -331,14 +329,14 @@ uid = 1.2.826.0.1.3680043.2.1143.3114589836670200378351641061429967573
% update all matching
info = dicomupdate(info, "ROINumber", 100);
- @end example
- @end deftypefn
+@end example
+@end deftypefn
@c Dicom Functions dicomwrite
@c -----------------------------------------
@subsection dicomwrite
@cindex dicomwrite
-@deftypefn {Loadable Function} {} dicomwrite(@var{im}, @var{filename})
-@deftypefnx {Loadable Function} {} dicomwrite(@var{im}, @var{filename}, @var{info})
+@deftypefn {} {} dicomwrite(@var{im}, @var{filename})
+@deftypefnx {} {} dicomwrite(@var{im}, @var{filename}, @var{info})
Write a DICOM format file to @var{filename}.
@@ -367,11 +365,62 @@ Create a dicom file using data and meta info:
@xseealso{dicomread, dicominfo}
@end deftypefn
+@c Dicom Functions images.dicom.decodeUID
+@c -----------------------------------------
+@subsection images.dicom.decodeUID
+@cindex decodeUID
+@deftypefn {} {@var{uidinfo}} = images.dicom.decodeUID(@var{uid})
+ Look up information about a uid string
+
+@subsubheading Inputs
+@var{uid} - dicom uid string.
+
+@subsubheading Outputs
+@var{uidinfo} - a structure with fields of Value, Name and Type.
+
+ Additional fields may be present in the case of a Transfer Syntax type uid.
+
+@subsubheading Examples
+@example
+ > info = images.dicom.decodeUID("1.2.840.10008.1.1");
+ info =
+ scalar structure containing the fields:
+ Value = 1.2.840.10008.1.1
+ Name = Verification SOP Class
+ Type = SOP Class
+@end example
+@end deftypefn
+@c Dicom Functions images.dicom.parseDICOMDIR
+@c -----------------------------------------
+@subsection images.dicom.parseDICOMDIR
+@cindex parseDICOMDIR
+@deftypefn {} {@var{info}} = images.dicom.parseDICOMDIR(@var{filename})
+ Parse a DICOMDIR file and return the information as a struct.
+
+@subsubheading Inputs
+@var{filename} - filename to open.
+
+@subsubheading Outputs
+@var{info} - A struct containing the directory information from a DICOMDIR file
+
+ Th info structure will be an array of Patients, with an array of Studies with an
+ array of Series with an array of Images.
+
+ Each element will contain a Payload field.
+
+@subsubheading Examples
+@example
+ filename = file_in_loadpath("imdata/DICOMDIR");
+
+ info = images.dicom.parseDICOMDIR(filename);
+
+@end example
+@end deftypefn
@c Dicom Functions isdicom
@c -----------------------------------------
@subsection isdicom
@cindex isdicom
-@deftypefn {Loadable Function} {@var{yesno} =} isdicom (@var{filename})
+@deftypefn {} {@var{yesno} =} isdicom (@var{filename})
Return true if @var{filename} is a valid DICOM file.
@subsubheading Inputs
diff --git a/doc/mkfuncdocs.py b/doc/mkfuncdocs.py
index 0985d93..2e851ba 100755
--- a/doc/mkfuncdocs.py
+++ b/doc/mkfuncdocs.py
@@ -1,6 +1,6 @@
#!/usr/bin/python3
-## Copyright 2018-2022 John Donoghue
+## Copyright 2018-2023 John Donoghue
##
## This program is free software: you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
## along with this program. If not, see
## <https://www.gnu.org/licenses/>.
-## mkfuncdocs v1.0.4
+## mkfuncdocs v1.0.7
## mkfuncdocs.py will attempt to extract the help texts from functions in src
## dirs, extracting only those that are in the specifed INDEX file and output them
## to stdout in texi format
@@ -79,7 +79,7 @@ def texify_line(line):
def find_defun_line_in_file(filename, fnname):
linecnt = 0
- defun_line=re.compile("^DEFUN_DLD\s*\(\s*{}".format(fnname))
+ defun_line=re.compile(r"^DEFUN_DLD\s*\(\s*{}".format(fnname))
with open(filename, 'rt') as f:
for line in f:
if re.match(defun_line, line):
@@ -107,7 +107,11 @@ def read_m_file(filename, skip=0):
inhelp = False
havehelp = True
else:
- help.append (line[2:].rstrip());
+ if line.startswith("## @"):
+ line = line[3:]
+ else:
+ line = line[2:]
+ help.append (line.rstrip());
return help
@@ -135,7 +139,8 @@ def read_cc_file(filename, skip=0):
if len(line) > 0 and line[-1] == '\n':
line = line[:-1]
- if line.endswith('")'):
+ # endif a texinfo line
+ elif line.endswith('")'):
line = line[:-2]
if line.startswith('{'):
diff --git a/doc/mkqhcp.py b/doc/mkqhcp.py
index 97672ee..2cbee5b 100755
--- a/doc/mkqhcp.py
+++ b/doc/mkqhcp.py
@@ -1,6 +1,9 @@
#!/usr/bin/python3
-## Copyright 2022 John Donoghue
+## mkqhcp.py
+## Version 1.0.3
+
+## Copyright 2022-2023 John Donoghue
##
## This program is free software: you can redistribute it and/or modify it
## under the terms of the GNU General Public License as published by
@@ -38,7 +41,7 @@ def process(name):
f.write ('</QHelpCollectionProject>\n')
title = name
- pat_match = re.compile(".*<title>(?P<title>[^<]+)</title>.*")
+ pat_match = re.compile(r".*<title>(?P<title>[^<]+)</title>.*")
with open(name + ".html", 'rt') as fin:
# find html
for line in fin:
@@ -48,18 +51,20 @@ def process(name):
title = e.group("title")
break
- h2_match = re.compile('.*<h2 class="chapter">(?P<title>[^<]+)</h2>.*')
- h3_match = re.compile('.*<h3 class="section">(?P<title>[^<]+)</h3>.*')
- h4_match = re.compile('.*<h4 class="subsection">(?P<title>[^<]+)</h4>.*')
- tag_match1 = re.compile('.*<span id="(?P<tag>[^"]+)"></span>.*')
- tag_match2 = re.compile('.*<div class="[sub]*section" id="(?P<tag>[^"]+)">.*')
- index_match = re.compile('.*<h4 class="subsection">[\d\.\s]*(?P<name>[^<]+)</h4>.*')
+ h2_match = re.compile(r'.*<h2 class="chapter"[^>]*>(?P<title>[^<]+)</h2>.*')
+ h3_match = re.compile(r'.*<h3 class="section"[^>]*>(?P<title>[^<]+)</h3>.*')
+ h4_match = re.compile(r'.*<h4 class="subsection"[^>]*>(?P<title>[^<]+)</h4>.*')
+ tag_match1 = re.compile(r'.*<span id="(?P<tag>[^"]+)"[^>]*></span>.*')
+ #tag_match2 = re.compile(r'.*<div class="[sub]*section" id="(?P<tag>[^"]+)"[^>]*>.*')
+ tag_match2 = re.compile(r'.*<div class="[sub]*section[^"]*" id="(?P<tag>[^"]+)"[^>]*>.*')
+ tag_match3 = re.compile(r'.*<div class="chapter-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*')
+ index_match = re.compile(r'.*<h4 class="subsection"[^>]*>[\d\.\s]*(?P<name>[^<]+)</h4>.*')
tag = "top"
has_h2 = False
has_h3 = False
- #pat_match = re.compile('.*<span id="(?P<tag>[^"])"></span>(?P<title>[.]+)$')
+ #pat_match = re.compile(r'.*<span id="(?P<tag>[^"])"></span>(?P<title>[.]+)$')
with open(name + ".html", 'rt') as fin:
with open(name + ".qhp", 'wt') as f:
f.write('<?xml version="1.0" encoding="UTF-8"?>\n')
@@ -68,13 +73,15 @@ def process(name):
f.write(' <virtualFolder>doc</virtualFolder>\n')
f.write(' <filterSection>\n')
f.write(' <toc>\n')
- f.write(' <section title="{}" ref="{}.html">\n'.format(title, name))
+ f.write(' <section title="{} Manual" ref="{}.html">\n'.format(title, name))
# chapters here
for line in fin:
line = line.strip()
e = tag_match1.match(line)
if not e:
e = tag_match2.match(line)
+ if not e:
+ e = tag_match3.match(line)
if e:
tag = e.group("tag")
diff --git a/doc/version.texi b/doc/version.texi
new file mode 100644
index 0000000..5cc99a6
--- /dev/null
+++ b/doc/version.texi
@@ -0,0 +1,4 @@
+@c autogenerated from Makefile
+@set VERSION 0.6.0
+@set PACKAGE dicom
+@set DATE 2023-12-22
diff --git a/inst/+images/+dicom/decodeUID.m b/inst/+images/+dicom/decodeUID.m
new file mode 100644
index 0000000..0d686f2
--- /dev/null
+++ b/inst/+images/+dicom/decodeUID.m
@@ -0,0 +1,70 @@
+## Copyright (C) 2022 John Donoghue <john.donoghue@ieee.org>
+##
+## This program is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {} {@var{uidinfo}} = images.dicom.decodeUID(@var{uid})
+## Look up information about a uid string
+##
+## @subsubheading Inputs
+## @var{uid} - dicom uid string.
+##
+## @subsubheading Outputs
+## @var{uidinfo} - a structure with fields of Value, Name and Type.
+##
+## Additional fields may be present in the case of a Transfer Syntax type uid.
+##
+## @subsubheading Examples
+## @example
+## > info = images.dicom.decodeUID("1.2.840.10008.1.1");
+## info =
+## scalar structure containing the fields:
+## Value = 1.2.840.10008.1.1
+## Name = Verification SOP Class
+## Type = SOP Class
+## @end example
+## @end deftypefn
+
+function info = decodeUID(uid)
+ if ! ischar(uid)
+ error ("Expected uid as a string");
+ endif
+
+ info = __dicom_decodeuid__(uid);
+endfunction
+
+%!fail("images.dicom.decodeUID")
+%!fail("images.dicom.decodeUID(1)")
+
+%!test
+%! s = images.dicom.decodeUID("1.0");
+%! assert(isstruct(s))
+%! assert(s.Value, "")
+%! assert(s.Name, "")
+
+%!test
+%! s = images.dicom.decodeUID("1.2.840.10008.1.1");
+%! assert(isstruct(s))
+%! assert(s.Value, "1.2.840.10008.1.1")
+%! assert(s.Name, "Verification SOP Class")
+%! assert(s.Type, "SOP Class")
+
+%!test
+%! s = images.dicom.decodeUID("1.2.840.10008.1.2.1");
+%! assert(isstruct(s))
+%! assert(s.Value, "1.2.840.10008.1.2.1")
+%! assert(s.Name, "Explicit VR Little Endian")
+%! assert(s.Type, "Transfer Syntax")
+%! assert(s.Endian, "ieee-le")
+%! assert(s.Compressed, false)
diff --git a/inst/+images/+dicom/parseDICOMDIR.m b/inst/+images/+dicom/parseDICOMDIR.m
new file mode 100644
index 0000000..d1fe265
--- /dev/null
+++ b/inst/+images/+dicom/parseDICOMDIR.m
@@ -0,0 +1,128 @@
+## Copyright (C) 2023 John Donoghue <john.donoghue@ieee.org>
+##
+## This program is free software; you can redistribute it and/or modify it under
+## the terms of the GNU General Public License as published by the Free Software
+## Foundation; either version 3 of the License, or (at your option) any later
+## version.
+##
+## This program is distributed in the hope that it will be useful, but WITHOUT
+## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+## details.
+##
+## You should have received a copy of the GNU General Public License along with
+## this program; if not, see <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {} {@var{info}} = images.dicom.parseDICOMDIR(@var{filename})
+## Parse a DICOMDIR file and return the information as a struct.
+##
+## @subsubheading Inputs
+## @var{filename} - filename to open.
+##
+## @subsubheading Outputs
+## @var{info} - A struct containing the directory information from a DICOMDIR file
+##
+## Th info structure will be an array of Patients, with an array of Studies with an
+## array of Series with an array of Images.
+##
+## Each element will contain a Payload field.
+##
+## @subsubheading Examples
+## @example
+## filename = file_in_loadpath("imdata/DICOMDIR");
+##
+## info = images.dicom.parseDICOMDIR(filename);
+##
+## @end example
+## @end deftypefn
+
+function finfo = parseDICOMDIR(filename)
+ finfo = {};
+
+ if ischar(filename)
+ info = dicominfo(filename);
+ else
+ error ("Expected first argument as a filename");
+ endif
+
+ dinfo = dicominfo(filename);
+ if isfield(dinfo, "DirectoryRecordSequence")
+ dinfo = dinfo.DirectoryRecordSequence;
+
+ fields = fieldnames(dinfo);
+ len = length(fields);
+
+ for idx=1:len
+ inf = dinfo.(fields{idx});
+ if strcmpi(inf.DirectoryRecordType, "PATIENT ")
+ if isempty(finfo)
+ finfo.Patients = [];
+ endif
+ payload = struct(
+ "OffsetOfTheNextDirectoryRecord", inf.OffsetOfTheNextDirectoryRecord,
+ "RecordInUseFlag", inf.RecordInUseFlag,
+ "OffsetOfReferencedLowerLevelDirectoryEntity", inf.OffsetOfReferencedLowerLevelDirectoryEntity,
+ "DirectoryRecordType", "PATIENT",
+ "PatientName", inf.PatientName,
+ "PatientID", inf.PatientID
+ );
+
+ finfo.Patients(end+1) = struct('Payload', payload, 'Studies', []);
+ elseif strcmpi(inf.DirectoryRecordType, "STUDY ")
+ if !isempty(finfo)
+ payload = struct(
+ "OffsetOfTheNextDirectoryRecord", inf.OffsetOfTheNextDirectoryRecord,
+ "RecordInUseFlag", inf.RecordInUseFlag,
+ "OffsetOfReferencedLowerLevelDirectoryEntity", inf.OffsetOfReferencedLowerLevelDirectoryEntity,
+ "DirectoryRecordType", "STUDY",
+ "StudyDate", inf.StudyDate,
+ "StudyTime", inf.StudyTime,
+ "AccessionNumber", inf.AccessionNumber,
+ "StudyDescription", inf.StudyDescription,
+ "StudyID", inf.StudyID
+ );
+
+ finfo.Patients(end).Studies(end+1) = struct('Payload', payload, 'Series', []);
+ endif
+ elseif strcmpi(inf.DirectoryRecordType, "SERIES")
+ if !isempty(finfo) && !isempty(finfo.Patients(end).Studies)
+ payload = struct(
+ "OffsetOfTheNextDirectoryRecord", inf.OffsetOfTheNextDirectoryRecord,
+ "RecordInUseFlag", inf.RecordInUseFlag,
+ "OffsetOfReferencedLowerLevelDirectoryEntity", inf.OffsetOfReferencedLowerLevelDirectoryEntity,
+ "DirectoryRecordType", "SERIES",
+ "Modality", inf.Modality,
+ "SeriesInstanceUID", inf.SeriesInstanceUID,
+ "SeriesNumber", inf.SeriesNumber
+ );
+
+ finfo.Patients(end).Studies(end).Series(end+1) = struct('Payload', payload, 'Images', []);
+ endif
+ elseif strcmpi(inf.DirectoryRecordType, "IMAGE ")
+ if !isempty(finfo) && !isempty(finfo.Patients(end).Studies) && !isempty(finfo.Patients(end).Studies(end).Series)
+ payload = struct(
+ "OffsetOfTheNextDirectoryRecord", inf.OffsetOfTheNextDirectoryRecord,
+ "RecordInUseFlag", inf.RecordInUseFlag,
+ "OffsetOfReferencedLowerLevelDirectoryEntity", inf.OffsetOfReferencedLowerLevelDirectoryEntity,
+ "DirectoryRecordType", "IMAGE",
+ "ReferencedFileID", inf.ReferencedFileID,
+ "ReferencedSOPClassUIDInFile", inf.ReferencedSOPClassUIDInFile,
+ "ReferencedSOPInstanceUIDInFile", inf.ReferencedSOPInstanceUIDInFile,
+ "ReferencedTransferSyntaxUIDInFile", inf.ReferencedTransferSyntaxUIDInFile,
+ "InstanceNumber", inf.InstanceNumber
+ );
+
+ finfo.Patients(end).Studies(end).Series(end).Images(end+1) = struct('Payload', payload);
+ endif
+
+ endif
+ endfor
+ else
+ error ("Not a DICOMDIR file");
+ endif
+endfunction
+
+%!fail ('images.dicom.parseDICOMDIR()')
+%!fail ('images.dicom.parseDICOMDIR(1)')
+%!fail ('images.dicom.parseDICOMDIR(file_in_loadpath("imdata/rtstruct.dcm"))')
diff --git a/inst/PKG_ADD b/inst/PKG_ADD
deleted file mode 100644
index 2dca414..0000000
--- a/inst/PKG_ADD
+++ /dev/null
@@ -1,14 +0,0 @@
-# on package load, attempt to load docs
-try
- pkg_dir = fileparts (fullfile (mfilename ("fullpath")));
- doc_file = fullfile (pkg_dir, "doc", "dicom.qch");
- if exist(doc_file, "file")
- if exist("__event_manager_register_documentation__")
- __event_manager_register_documentation__ (doc_file);
- elseif exist("__event_manager_register_doc__")
- __event_manager_register_doc__ (doc_file);
- endif
- endif
-catch
- # do nothing
-end_try_catch
diff --git a/inst/PKG_DEL b/inst/PKG_DEL
deleted file mode 100644
index 5677d00..0000000
--- a/inst/PKG_DEL
+++ /dev/null
@@ -1,14 +0,0 @@
-# on package load, attempt to unload docs
-try
- pkg_dir = fileparts (fullfile (mfilename ("fullpath")));
- doc_file = fullfile (pkg_dir, "doc", "dicom.qch");
- if exist(doc_file, "file")
- if exist("__event_manager_unregister_documentation__")
- __event_manager_unregister_documentation__ (doc_file);
- elseif exist("__event_manager_unregister_doc__")
- __event_manager_unregister_doc__ (doc_file);
- endif
- endif
-catch
- # do nothing
-end_try_catch
diff --git a/inst/__load_dicom__.m b/inst/__load_dicom__.m
new file mode 100644
index 0000000..9d6ead2
--- /dev/null
+++ b/inst/__load_dicom__.m
@@ -0,0 +1,39 @@
+## Copyright (C) 2023 John Donoghue
+##
+## This program is free software; you can redistribute it and/or
+## modify it under the terms of the GNU General Public License as
+## published by the Free Software Foundation; either version 3 of the
+## License, or (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, see
+## <http:##www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {} {} __load_dicom__ ()
+## Undocumented internal function of dicom package.
+## @end deftypefn
+
+## PKG_ADD: __load_dicom__ ()
+
+function __load_dicom__ ()
+ # on package load, attempt to load docs
+ try
+ pkg_dir = fileparts (fullfile (mfilename ("fullpath")));
+ doc_file = fullfile (pkg_dir, "doc", "dicom.qch");
+ if exist(doc_file, "file")
+ if exist("__event_manager_register_documentation__")
+ __event_manager_register_documentation__ (doc_file);
+ elseif exist("__event_manager_register_doc__")
+ __event_manager_register_doc__ (doc_file);
+ endif
+ endif
+ catch
+ # do nothing
+ end_try_catch
+endfunction
diff --git a/inst/__unload_dicom__.m b/inst/__unload_dicom__.m
new file mode 100644
index 0000000..8f17065
--- /dev/null
+++ b/inst/__unload_dicom__.m
@@ -0,0 +1,39 @@
+## Copyright (C) 2023 John Donoghue
+##
+## This program is free software; you can redistribute it and/or
+## modify it under the terms of the GNU General Public License as
+## published by the Free Software Foundation; either version 3 of the
+## License, or (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful, but
+## WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+## General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, see
+## <http:##www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {} {} __unload_dicom__ ()
+## Undocumented internal function of dicom package.
+## @end deftypefn
+
+## PKG_DEL: __unload_dicom__ ()
+
+function __unload_dicom__ ()
+ # on package unload, attempt to unload docs
+ try
+ pkg_dir = fileparts (fullfile (mfilename ("fullpath")));
+ doc_file = fullfile (pkg_dir, "doc", "dicom.qch");
+ if exist(doc_file, "file")
+ if exist("__event_manager_unregister_documentation__")
+ __event_manager_unregister_documentation__ (doc_file);
+ elseif exist("__event_manager_unregister_doc__")
+ __event_manager_unregister_doc__ (doc_file);
+ endif
+ endif
+ catch
+ # do nothing
+ end_try_catch
+endfunction
diff --git a/inst/dicomfind.m b/inst/dicomfind.m
index c8fcccf..0554b29 100644
--- a/inst/dicomfind.m
+++ b/inst/dicomfind.m
@@ -26,7 +26,10 @@
## @var{attribute} - attribute name to find.
##
## @subsubheading Outputs
-## @var{attrinfo} - a table with fields Location and Value fior each matched attribute.
+## @var{attrinfo} - a table with fields Location and Value for each matched attribute.
+##
+## The Location value will be the attribute position in dot notation to show its position
+## in dicom info structure.
##
## @subsubheading Examples
## @example
diff --git a/src/Makefile.in b/src/Makefile.in
index c27c0fc..311b868 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -9,9 +9,9 @@ GDCM_LIBS = @GDCM_LIBS@
need_dict = dicominfo.oct dicomwrite.oct dicomlookup.oct dicomdisp.oct dicomanon.oct
-test_files = dicominfo.cpp dicomdict.cpp dicomread.cpp dicomlookup.cpp isdicom.cpp dicomuid.cpp dicomdisp.cpp dicomanon.cpp dicomwrite.cpp
+test_files = dicominfo.cpp dicomdict.cpp dicomread.cpp dicomlookup.cpp isdicom.cpp dicomuid.cpp dicomdisp.cpp dicomanon.cpp dicomwrite.cpp __dicom_decodeuid__.cpp
-all: $(need_dict) dicomdict.oct dicomread.oct _gendicomdict.oct isdicom.oct dicomuid.oct archtests
+all: $(need_dict) dicomdict.oct dicomread.oct _gendicomdict.oct isdicom.oct dicomuid.oct __dicom_decodeuid__.oct archtests
%.o: %.cpp
$(MKOCTFILE) $(GDCM_CPPFLAGS) -c $<
diff --git a/src/__dicom_decodeuid__.cpp b/src/__dicom_decodeuid__.cpp
new file mode 100644
index 0000000..f66f1f3
--- /dev/null
+++ b/src/__dicom_decodeuid__.cpp
@@ -0,0 +1,114 @@
+/*
+ * Copyright John Donoghue, 2023
+ *
+ * The GNU Octave dicom package is free software: you can redistribute
+ * it and/or modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * The GNU Octave dicom package is distributed in the hope that it
+ * will be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * Please see the file, "COPYING" for further details of GNU General
+ * Public License version 3.
+ *
+ */
+
+#include "octave/oct.h"
+#include <octave/ov-struct.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gdcmUIDs.h>
+#include <gdcmSOPClassUIDToIOD.h>
+#include <gdcmTransferSyntax.h>
+using namespace gdcm;
+
+#define DICOM_ERR -1
+#define DICOM_OK 0
+
+#define OCT_FN_NAME __dicom_decodeuid__
+#define QUOTED_(x) #x
+#define QUOTED(x) QUOTED_(x)
+
+DEFUN_DLD (__dicom_decodeuid__, args, nargout,
+ "-*- texinfo -*- \n\
+@deftypefn {} {} __dicom_decodeuid__ () \n\
+Internal undocumented function\n\
+@end deftypefn \n\
+")
+{
+ octave_value_list retval; // create object to store return values
+
+ if (1 != args.length ())
+ {
+ print_usage ();
+ return retval;
+ }
+
+ if (! args(0).is_string())
+ {
+ error (QUOTED(OCT_FN_NAME)": uid should be a string");
+ return retval;
+ }
+
+ octave_map om;
+ gdcm::UIDs uid;
+
+ if (! uid.SetFromUID(args(0).string_value().c_str()))
+ {
+ om.assign("Value", octave_value(""));
+ om.assign("Name", octave_value(""));
+ om.assign("Type", octave_value(""));
+ retval(0) = om;
+ return retval;
+ }
+
+ om.assign("Value", octave_value(uid.GetString()));
+ om.assign("Name", octave_value(uid.GetName()));
+
+ gdcm::TransferSyntax::TSType tt = gdcm::TransferSyntax::GetTSType(args(0).string_value().c_str());
+ //if (tt != gdcm::TransferSyntax::TSType::TS_END)
+ if (tt != gdcm::TransferSyntax::TS_END)
+ {
+ gdcm::TransferSyntax t(tt);
+
+ om.assign("Type", octave_value("Transfer Syntax"));
+ om.assign("Compressed", octave_value(t.IsEncapsulated()));
+ om.assign("LossyCompression", octave_value(t.IsLossy()));
+ om.assign("Endian", octave_value(t.GetSwapCode() == gdcm::SwapCode::BigEndian ? "ieee-be" : "ieee-le"));
+ om.assign("VR", octave_value(t.IsExplicit() ? "Explicit" : "Implicit"));
+ }
+ /*else if(gdcm::SOPClassUIDToIOD::GetIOD(uid))
+ {
+ om.assign("Type", octave_value("SOP Class"));
+ }*/
+ else
+ om.assign("Type", octave_value("SOP Class"));
+
+ retval(0) = om;
+
+ return retval;
+}
+
+/*
+%!fail("__dicom_decodeuid__")
+%!fail("__dicom_decodeuid__(1)")
+
+%!test
+%! s = __dicom_decodeuid__("1.0");
+%! assert(isstruct(s))
+%! assert(s.Value, "")
+%! assert(s.Name, "")
+
+%!test
+%! s = __dicom_decodeuid__("1.2.840.10008.1.1");
+%! assert(isstruct(s))
+%! assert(s.Value, "1.2.840.10008.1.1")
+%! assert(s.Name, "Verification SOP Class")
+%! assert(s.Type, "SOP Class")
+*/
diff --git a/src/config.h.in b/src/config.h.in
index d2e9435..b808e9c 100644
--- a/src/config.h.in
+++ b/src/config.h.in
@@ -47,6 +47,9 @@
/* macro for alternative Octave symbols */
#undef OV_ISMAP
+/* macro for alternative Octave symbols */
+#undef OV_ISNUMERIC
+
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
diff --git a/src/configure b/src/configure
index 1b02b34..f01a2c3 100755
--- a/src/configure
+++ b/src/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for Octave-Forge dicom package 0.5.1.
+# Generated by GNU Autoconf 2.71 for Octave-Forge dicom package 0.6.0.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -608,8 +608,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='Octave-Forge dicom package'
PACKAGE_TARNAME='octave-forge-dicom-package'
-PACKAGE_VERSION='0.5.1'
-PACKAGE_STRING='Octave-Forge dicom package 0.5.1'
+PACKAGE_VERSION='0.6.0'
+PACKAGE_STRING='Octave-Forge dicom package 0.6.0'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@@ -1280,7 +1280,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures Octave-Forge dicom package 0.5.1 to adapt to many kinds of systems.
+\`configure' configures Octave-Forge dicom package 0.6.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1348,7 +1348,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of Octave-Forge dicom package 0.5.1:";;
+ short | recursive ) echo "Configuration of Octave-Forge dicom package 0.6.0:";;
esac
cat <<\_ACEOF
@@ -1434,7 +1434,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-Octave-Forge dicom package configure 0.5.1
+Octave-Forge dicom package configure 0.6.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -1628,7 +1628,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by Octave-Forge dicom package $as_me 0.5.1, which was
+It was created by Octave-Forge dicom package $as_me 0.6.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -2853,6 +2853,19 @@ else
fi
+# try get around possible spaces in the path
+if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then
+case $host_os in
+ mingw*)
+ # try demangle spaces in escaped input strings
+ MKOCTFILE=`echo $MKOCTFILE | $SED "s,\\\\\ ,?,g"`
+ OCTAVE_CONFIG=`echo $OCTAVE_CONFIG | $SED "s,\\\\\ ,?,g"`
+ ;;
+ *)
+ ;;
+esac
+fi
+
@@ -3664,9 +3677,33 @@ save_LIBS="$LIBS"
save_LDFLAGS="$LDFLAGS"
CXX=`${MKOCTFILE} -p CXX`
-OCTINCLUDEDIR=${OCTINCLUDEDIR:-`$MKOCTFILE -p INCFLAGS`}
+OCTINCLUDEDIR="${OCTINCLUDEDIR:-`$MKOCTFILE -p OCTINCLUDEDIR`}/.."
OCTLIBDIR=${OCTLIBDIR:-`$MKOCTFILE -p OCTLIBDIR`}
-CXXFLAGS="$OCTINCLUDEDIR $CXXFLAGS"
+
+if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then
+ MSYSTEM="${MSYSTEM}"
+else
+ MSYSTEM="none"
+fi
+
+case X$MSYSTEM in
+ XMINGW64*)
+ OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'`
+ # change \ to / and replace octave home part with mingw part
+ OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"`
+ OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"`
+ ;;
+ XMINGW32*)
+ OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'`
+ # change \ to / and replace octave home part with mingw part
+ OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw32,g"`
+ OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g -e "s,${OCTAVE_HOME},/mingw32,g"'`
+ ;;
+ *)
+ ;;
+esac
+
+CXXFLAGS="-I$OCTINCLUDEDIR $CXXFLAGS"
LDFLAGS="-L$OCTLIBDIR $LDFLAGS"
LIBS="-loctinterp $LIBS"
@@ -3788,6 +3825,41 @@ printf "%s\n" " is_cell" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking is_numeric_type or isnumeric" >&5
+printf %s "checking is_numeric_type or isnumeric... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <octave/oct.h>
+
+
+int
+main (void)
+{
+octave_value ().isnumeric ();
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_cxx_try_compile "$LINENO"
+then :
+
+printf "%s\n" "#define OV_ISNUMERIC isnumeric" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: isnumeric" >&5
+printf "%s\n" "isnumeric" >&6; }
+ echo '
+' >> oct-alt-includes.h
+else $as_nop
+
+printf "%s\n" "#define OV_ISNUMERIC is_numeric_type" >>confdefs.h
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: is_numeric_type" >&5
+printf "%s\n" " is_numeric_type" >&6; }
+ echo '' >> oct-alt-includes.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking valid_identifier or octave::valid_identifier" >&5
printf %s "checking valid_identifier or octave::valid_identifier... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3867,7 +3939,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-CC=$save_CXX
+CXX=$save_CXX
CXXFLAGS=$save_CXXFLAGS
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
@@ -4652,7 +4724,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by Octave-Forge dicom package $as_me 0.5.1, which was
+This file was extended by Octave-Forge dicom package $as_me 0.6.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -4716,7 +4788,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-Octave-Forge dicom package config.status 0.5.1
+Octave-Forge dicom package config.status 0.6.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
diff --git a/src/configure.ac b/src/configure.ac
index 539c7fb..4c4eb95 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -1,7 +1,7 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
#
-### Copyright (C) 2017-2022 John Donoghue <john.donoghue@ieee.org>
+### Copyright (C) 2017-2023 John Donoghue <john.donoghue@ieee.org>
###
### This program is free software; you can redistribute it and/or
### modify it under the terms of the GNU General Public License as
@@ -18,7 +18,7 @@
### <http://www.gnu.org/licenses/>.
AC_PREREQ([2.67])
-AC_INIT([Octave-Forge dicom package], [0.5.1])
+AC_INIT([Octave-Forge dicom package], [0.6.0])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIRS([m4])
AH_TOP([#include "undef-ah-octave.h"])
@@ -38,6 +38,19 @@ if [ test "x$MKOCTFILE" = "xnone" ]; then
fi
AC_CHECK_TOOL([OCTAVE_CONFIG], [octave-config] ,[$MKOCTFILE])
+# try get around possible spaces in the path
+if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then
+case $host_os in
+ mingw*)
+ # try demangle spaces in escaped input strings
+ MKOCTFILE=`echo $MKOCTFILE | $SED "s,\\\\\ ,?,g"`
+ OCTAVE_CONFIG=`echo $OCTAVE_CONFIG | $SED "s,\\\\\ ,?,g"`
+ ;;
+ *)
+ ;;
+esac
+fi
+
AC_PROG_CXX
AC_PROG_CXXCPP
AC_LANG(C++)
@@ -52,9 +65,33 @@ save_LIBS="$LIBS"
save_LDFLAGS="$LDFLAGS"
CXX=`${MKOCTFILE} -p CXX`
-OCTINCLUDEDIR=${OCTINCLUDEDIR:-`$MKOCTFILE -p INCFLAGS`}
+OCTINCLUDEDIR="${OCTINCLUDEDIR:-`$MKOCTFILE -p OCTINCLUDEDIR`}/.."
OCTLIBDIR=${OCTLIBDIR:-`$MKOCTFILE -p OCTLIBDIR`}
-CXXFLAGS="$OCTINCLUDEDIR $CXXFLAGS"
+
+if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then
+ MSYSTEM="${MSYSTEM}"
+else
+ MSYSTEM="none"
+fi
+
+case X$MSYSTEM in
+ XMINGW64*)
+ OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'`
+ # change \ to / and replace octave home part with mingw part
+ OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"`
+ OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"`
+ ;;
+ XMINGW32*)
+ OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'`
+ # change \ to / and replace octave home part with mingw part
+ OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw32,g"`
+ OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g -e "s,${OCTAVE_HOME},/mingw32,g"'`
+ ;;
+ *)
+ ;;
+esac
+
+CXXFLAGS="-I$OCTINCLUDEDIR $CXXFLAGS"
LDFLAGS="-L$OCTLIBDIR $LDFLAGS"
LIBS="-loctinterp $LIBS"
@@ -101,6 +138,15 @@ OF_OCTAVE_LIST_ALT_SYMS([
],
[dnl
+ [is_numeric_type],
+ [isnumeric],
+ [[octave_value ().isnumeric ();]],
+ [OV_ISNUMERIC],
+ [],
+ []
+],
+
+[dnl
[valid_identifier],
[octave::valid_identifier],
[[octave::valid_identifier("");]],
@@ -120,7 +166,7 @@ OF_OCTAVE_LIST_ALT_SYMS([
],[oct-alt-includes.h])
-CC=$save_CXX
+CXX=$save_CXX
CXXFLAGS=$save_CXXFLAGS
LIBS="$save_LIBS"
LDFLAGS="$save_LDFLAGS"
diff --git a/src/dicomanon.cpp b/src/dicomanon.cpp
index 1d5c918..00b4c03 100644
--- a/src/dicomanon.cpp
+++ b/src/dicomanon.cpp
@@ -51,8 +51,8 @@ bool lookup_tag (const std::string & keyword, gdcm::Tag &tag)
DEFUN_DLD (dicomanon, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} {} dicomanon(@var{file_in}, @var{file_out})\n\
-@deftypefnx {Loadable Function} {} dicomanon(___, @var{name}, @var{value})\n\
+@deftypefn {} {} dicomanon(@var{file_in}, @var{file_out})\n\
+@deftypefnx {} {} dicomanon(___, @var{name}, @var{value})\n\
\n\
Anonymize a DICOM format file by removing or replacing specific fields.\n\
\n\
diff --git a/src/dicomdict.cpp b/src/dicomdict.cpp
index f2bd28e..fdbb58e 100644
--- a/src/dicomdict.cpp
+++ b/src/dicomdict.cpp
@@ -68,15 +68,15 @@ void insert(const char *k, const gdcm::Tag t, const gdcm::DictEntry e)
DEFUN_DLD (dicomdict, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} {@var{dictionary_name} =} dicomdict (@code{get}) \n\
-@deftypefnx {Loadable Function} {} dicomdict (@code{factory}) \n\
-@deftypefnx {Loadable Function} {} dicomdict (@code{set}, @var{dictionary_name}) \n\
+@deftypefn {} {@var{dictionary_name} =} dicomdict (@code{\"get\"}) \n\
+@deftypefnx {} {} dicomdict (@code{\"factory\"}) \n\
+@deftypefnx {} {} dicomdict (@code{\"set\"}, @var{dictionary_name}) \n\
\n\
Get or set the active dicom data dictionary.\n\
\n\
The first usage returns the filename of the dictionary that is currently being used.\n\
-Using @code{factory} resets the dictionary to the default.\n\
-Using @code{set} allows setting the dictionary for future operations.\n\
+Using @code{\"factory\"} resets the dictionary to the default.\n\
+Using @code{\"set\"} allows setting the dictionary for future operations.\n\
In this case, the dictionary file @var{dictionary_name} can be anywhere in the path.\n\
@subsubheading Inputs\n\
@var{code} - string value of 'get', 'set' or 'factory'.\n\
diff --git a/src/dicomdisp.cpp b/src/dicomdisp.cpp
index 9279dc8..e9d96c9 100644
--- a/src/dicomdisp.cpp
+++ b/src/dicomdisp.cpp
@@ -64,8 +64,8 @@ int main( int argc, const char* argv[] )
#else
DEFUN_DLD (dicomdisp, args, nargout,
"-*- texinfo -*- \n\
- @deftypefn {Loadable Function} {} dicomdisp (@var{filename}) \n\
- @deftypefnx {Loadable Function} {} dicomdisp (@var{filename}, [@var{propertyname}, @var{propertvalue} ...]) \n\
+ @deftypefn {} {} dicomdisp (@var{filename}) \n\
+ @deftypefnx {} {} dicomdisp (@var{filename}, [@var{propertyname}, @var{propertvalue} ...]) \n\
Read and display the metadata from a DICOM file.\n\
\n\
@subsubheading Inputs\n\
diff --git a/src/dicominfo.cpp b/src/dicominfo.cpp
index 4b190c6..14be397 100644
--- a/src/dicominfo.cpp
+++ b/src/dicominfo.cpp
@@ -89,17 +89,12 @@ int main(int argc, const char* argv[])
#else
DEFUN_DLD (dicominfo, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} {@var{info}} = dicominfo (@var{filename}) \n\
-@deftypefnx {Loadable Function} {@var{info}} = dicominfo (@var{filename}, @code{dictionary}, @var{dictionary-name}) \n\
-@deftypefnx {Loadable Function} {} dicominfo (@var{filename}, @var{options}) \n\
-@deftypefnx {Command} {} dicominfo @var{filename} \n\
-@deftypefnx {Command} {} dicominfo @var{filename} @var{options} \n\
-Get all data from a DICOM file, excluding any actual image. \n\
+@deftypefn {} {@var{info}} = dicominfo (@var{filename}) \n\
+@deftypefnx {} {@var{info}} = dicominfo (@var{filename}, @code{\"dictionary\"}, @var{dictionary-name}) \n\
+@deftypefnx {} {} dicominfo (___, @var{options}) \n\
+Get all metadata from a DICOM file, excluding any actual image. \n\
@var{info} is a nested struct containing the data. \n\
\n\
-If no return argument is given, then there will be output similar to \n\
-a DICOM dump. \n\
-\n\
If the @code{dictionary} argument is used, the given @var{dictionary-name} is used for this operation, \n\
otherwise, the dictionary set by @code{dicomdict} is used.\n\
\n\
@@ -110,7 +105,7 @@ otherwise, the dictionary set by @code{dicomdict} is used.\n\
\n\
@var{dictionary-name} - filename of dictionary to use.\n\
\n\
-@var{options}:\n\
+@var{options} - a string in format of 'optionname=value', or property/value pair 'optionname', value:\n\
@code{truncate=n}\n\
where n is the number of characters to limit the dump output display to @code{n}\
for each value. \n\
@@ -170,7 +165,7 @@ info = \n \
error(QUOTED(OCT_FN_NAME)": one arg required: dicom filename");
return retval;
}
- int chatty = !nargout; // dump output to stdout if not assigning to var
+ int chatty = 0; //!nargout; // dump output to stdout if not assigning to var
charMatrix ch = args(0).char_matrix_value ();
if (ch.rows () != 1)
{
@@ -190,7 +185,7 @@ info = \n \
{
error (QUOTED(OCT_FN_NAME)": arg should be a string, 1 row of chars");
load_dicom_dict (current_dict.c_str ()); // reset dictionary to initial value
- return retval;
+ return retval;
}
std::string argex = chex.row_as_string (0);
if (!argex.compare ("dictionary") || !argex.compare ("Dictionary"))
@@ -212,6 +207,24 @@ info = \n \
// ignore dictionary argument for further arg processing
++i;
}
+ else if (!argex.compare ("truncate") || !argex.compare ("Truncate"))
+ {
+ if (i+1 == args.length())
+ {
+ error (QUOTED(OCT_FN_NAME)": Truncate needs another argument");
+ load_dicom_dict (current_dict.c_str ()); // reset dictionary to initial value
+ return retval;
+ }
+ if (!args (i+1).OV_ISNUMERIC ())
+ {
+ error (QUOTED(OCT_FN_NAME)": Truncate needs a string argument");
+ load_dicom_dict (current_dict.c_str()); // reset dictionary to initial value
+ return retval;
+ }
+ dicom_truncate_numchar = atoi (argex.substr (9).c_str ());
+ // ignore dictionary argument for further arg processing
+ ++i;
+ }
else if (!argex.compare (0,9,"truncate="))
{
dicom_truncate_numchar = atoi (argex.substr (9).c_str ());
diff --git a/src/dicomlookup.cpp b/src/dicomlookup.cpp
index 065fc63..7dfca30 100644
--- a/src/dicomlookup.cpp
+++ b/src/dicomlookup.cpp
@@ -40,8 +40,8 @@
DEFUN_DLD (OCT_FN_NAME_LU, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} @var{keyword} = dicomlookup (@var{group}, @var{element}) \n\
-@deftypefnx {Loadable Function} [@var{group}, @var{element}] = dicomlookup (@var{keyword}) \n\
+@deftypefn {} @var{keyword} = dicomlookup (@var{group}, @var{element}) \n\
+@deftypefnx {} [@var{group}, @var{element}] = dicomlookup (@var{keyword}) \n\
\n\
Lookup an attribute in the DICOM data dictionary.\n\
\n\
diff --git a/src/dicomread.cpp b/src/dicomread.cpp
index fa6c7d6..1204f5e 100644
--- a/src/dicomread.cpp
+++ b/src/dicomread.cpp
@@ -41,8 +41,8 @@ using namespace gdcm;
DEFUN_DLD (dicomread, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} @var{image} = dicomread (@var{filename}) \n\
-@deftypefnx {Loadable Function} @var{image} = dicomread (@var{structure}) \n\
+@deftypefn {} @var{image} = dicomread (@var{filename}) \n\
+@deftypefnx {} @var{image} = dicomread (@var{structure}) \n\
\n\
Load the image from a DICOM file. \n\
@subsubheading Inputs\n\
diff --git a/src/dicomuid.cpp b/src/dicomuid.cpp
index 664d5ae..0d8826c 100644
--- a/src/dicomuid.cpp
+++ b/src/dicomuid.cpp
@@ -35,7 +35,7 @@ using namespace gdcm;
DEFUN_DLD (dicomuid, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} @var{uuid} = dicomuid () \n\
+@deftypefn {} @var{uuid} = dicomuid () \n\
\n\
Generate a DICOM unique id . \n\
\n \
diff --git a/src/dicomwrite.cpp b/src/dicomwrite.cpp
index 4d7993e..aadeacc 100644
--- a/src/dicomwrite.cpp
+++ b/src/dicomwrite.cpp
@@ -57,8 +57,8 @@ void genMinimalMetaData (gdcm::ImageWriter *w, gdcm::File *file);
DEFUN_DLD (dicomwrite, args, nargout,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} {} dicomwrite(@var{im}, @var{filename})\n\
-@deftypefnx {Loadable Function} {} dicomwrite(@var{im}, @var{filename}, @var{info})\n\
+@deftypefn {} {} dicomwrite(@var{im}, @var{filename})\n\
+@deftypefnx {} {} dicomwrite(@var{im}, @var{filename}, @var{info})\n\
\n\
Write a DICOM format file to @var{filename}.\n\
\n\
diff --git a/src/isdicom.cpp b/src/isdicom.cpp
index 4aa551f..292137e 100644
--- a/src/isdicom.cpp
+++ b/src/isdicom.cpp
@@ -49,7 +49,7 @@ isdicom (const std::string& filename)
DEFUN_DLD (isdicom, args, ,
"-*- texinfo -*- \n\
-@deftypefn {Loadable Function} {@var{yesno} =} isdicom (@var{filename}) \n\
+@deftypefn {} {@var{yesno} =} isdicom (@var{filename}) \n\
Return true if @var{filename} is a valid DICOM file.\n\
\n\
@subsubheading Inputs\n\